Name: series-workflowlpsg6 Phase: Succeeded StartedAt: 2026-07-04 16:45:52 +0000 UTC FinishedAt: 2026-07-04 20:59:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlpsg6[0] Phase: Succeeded StartedAt: 2026-07-04 16:45:52 +0000 UTC FinishedAt: 2026-07-04 17:02:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlpsg6[0].run-triage Phase: Succeeded StartedAt: 2026-07-04 16:45:52 +0000 UTC FinishedAt: 2026-07-04 17:02:32 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "1e9cdc2ea15adf4a821eefedabf6c0c8cf0b6a55", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "9P_FS", "CEPH_FS", "FUSE_FS", "GFS2_FS", "NFS_FS", "CIFS", "VBOXSF_FS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "1e9cdc2ea15adf4a821eefedabf6c0c8cf0b6a55", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "9P_FS", "CEPH_FS", "FUSE_FS", "GFS2_FS", "NFS_FS", "CIFS", "VBOXSF_FS" ], "series_id": "f875c425-a781-4aca-87db-05b72114e84b" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "lookup_open", "atomic_open", "may_o_create", "build_open_flags", "do_open", "dentry_create", "vfs_mkdir", "vfs_create", "open_last_lookups", "lookup_fast_for_open", "may_create_in_sticky", "filename_create", "filename_unlinkat", "filename_renameat2", "v9fs_vfs_atomic_open", "v9fs_vfs_atomic_open_dotl", "ceph_atomic_open", "fuse_atomic_open", "gfs2_atomic_open", "nfs_atomic_open", "nfs_atomic_open_v23", "cifs_atomic_open", "vboxsf_dir_atomic_open" ], "corpus_urls": [ "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+CgkJCTx0ZD4yMDI2LzA3LzA0IDE2OjU5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0OzlQX0ZTJiMzNDssCiAgICAmIzM0O0NFUEhfRlMmIzM0OywKICAgICYjMzQ7RlVTRV9GUyYjMzQ7LAogICAgJiMzNDtHRlMyX0ZTJiMzNDssCiAgICAmIzM0O05GU19GUyYjMzQ7LAogICAgJiMzNDtDSUZTJiMzNDssCiAgICAmIzM0O1ZCT1hTRl9GUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2xvb2t1cF9vcGVuJiMzNDssCiAgICAmIzM0O2F0b21pY19vcGVuJiMzNDssCiAgICAmIzM0O21heV9vX2NyZWF0ZSYjMzQ7LAogICAgJiMzNDtidWlsZF9vcGVuX2ZsYWdzJiMzNDssCiAgICAmIzM0O2RvX29wZW4mIzM0OywKICAgICYjMzQ7ZGVudHJ5X2NyZWF0ZSYjMzQ7LAogICAgJiMzNDt2ZnNfbWtkaXImIzM0OywKICAgICYjMzQ7dmZzX2NyZWF0ZSYjMzQ7LAogICAgJiMzNDtvcGVuX2xhc3RfbG9va3VwcyYjMzQ7LAogICAgJiMzNDtsb29rdXBfZmFzdF9mb3Jfb3BlbiYjMzQ7LAogICAgJiMzNDttYXlfY3JlYXRlX2luX3N0aWNreSYjMzQ7LAogICAgJiMzNDtmaWxlbmFtZV9jcmVhdGUmIzM0OywKICAgICYjMzQ7ZmlsZW5hbWVfdW5saW5rYXQmIzM0OywKICAgICYjMzQ7ZmlsZW5hbWVfcmVuYW1lYXQyJiMzNDssCiAgICAmIzM0O3Y5ZnNfdmZzX2F0b21pY19vcGVuJiMzNDssCiAgICAmIzM0O3Y5ZnNfdmZzX2F0b21pY19vcGVuX2RvdGwmIzM0OywKICAgICYjMzQ7Y2VwaF9hdG9taWNfb3BlbiYjMzQ7LAogICAgJiMzNDtmdXNlX2F0b21pY19vcGVuJiMzNDssCiAgICAmIzM0O2dmczJfYXRvbWljX29wZW4mIzM0OywKICAgICYjMzQ7bmZzX2F0b21pY19vcGVuJiMzNDssCiAgICAmIzM0O25mc19hdG9taWNfb3Blbl92MjMmIzM0OywKICAgICYjMzQ7Y2lmc19hdG9taWNfb3BlbiYjMzQ7LAogICAgJiMzNDt2Ym94c2ZfZGlyX2F0b21pY19vcGVuJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgc3VwcG9ydCBmb3IgY3JlYXRpbmcgZGlyZWN0b3JpZXMgdmlhIGBvcGVuYXQoLi4uLCBPX0NSRUFUIHwgT19ESVJFQ1RPUlksIC4uLilgLiBJdCBtb2RpZmllcyBjb3JlIFZGUyBwYXRoIHJlc29sdXRpb24gYW5kIGZpbGUgY3JlYXRpb24gbG9naWMgaW4gYGZzL25hbWVpLmNgIGFuZCBgZnMvb3Blbi5jYCwgaW5jbHVkaW5nIGBsb29rdXBfb3BlbmAsIGBhdG9taWNfb3BlbmAsIGFuZCBgdmZzX21rZGlyYC4gSXQgYWxzbyB1cGRhdGVzIG11bHRpcGxlIGZpbGVzeXN0ZW1zICg5cCwgY2VwaCwgZnVzZSwgZ2ZzMiwgbmZzLCBzbWIsIHZib3hzZikgdG8gaGFuZGxlIHRoZSBuZXcgZmxhZyBjb21iaW5hdGlvbi4gVGhpcyBpcyBhIHNpZ25pZmljYW50IGZ1bmN0aW9uYWwgY2hhbmdlIHRvIGNvcmUga2VybmVsIGxvZ2ljIGFuZCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA0IDE2OjU5PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgOTc5NDkwNzdkNGVkNzY3ZTJjZDRjZDZmYWZiNDU4YmVhNWZjNDg1OFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTYXQgSnVsIDQgMTY6NTk6NDggMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZnMvOXAvdmZzX2lub2RlLmMgYi9mcy85cC92ZnNfaW5vZGUuY1xuaW5kZXggNTc4M2QwMzM2Zjk2YWMuLmJiNTU1ZTViYTI2MTUwIDEwMDY0NFxuLS0tIGEvZnMvOXAvdmZzX2lub2RlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzLzlwL3Zmc19pbm9kZS5jXG5AQCAtNzc3LDYgJiM0Mzs3NzcsOSBAQCB2OWZzX3Zmc19hdG9taWNfb3BlbihzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxuIFx0c3RydWN0IGlub2RlICppbm9kZTtcbiBcdGludCBwOV9vbW9kZTtcbiBcbiYjNDM7XHRpZiAoT19JU19NS0RJUihmbGFncykpXG4mIzQzO1x0XHRmbGFncyBcdTAwMjY9IH5PX0NSRUFUO1xuJiM0MztcbiBcdGlmIChkX2luX2xvb2t1cChkZW50cnkpKSB7XG4gXHRcdHN0cnVjdCBkZW50cnkgKnJlcyA9IHY5ZnNfdmZzX2xvb2t1cChkaXIsIGRlbnRyeSwgMCk7XG4gXHRcdGlmIChyZXMgfHwgZF9yZWFsbHlfaXNfcG9zaXRpdmUoZGVudHJ5KSlcbmRpZmYgLS1naXQgYS9mcy85cC92ZnNfaW5vZGVfZG90bC5jIGIvZnMvOXAvdmZzX2lub2RlX2RvdGwuY1xuaW5kZXggZjczOTZkMjBjYjZjZGMuLmZmM2ZhY2I0MjBjMjI0IDEwMDY0NFxuLS0tIGEvZnMvOXAvdmZzX2lub2RlX2RvdGwuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvOXAvdmZzX2lub2RlX2RvdGwuY1xuQEAgLTIzOSw2ICYjNDM7MjM5LDkgQEAgdjlmc192ZnNfYXRvbWljX29wZW5fZG90bChzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxuIFx0c3RydWN0IHY5ZnNfc2Vzc2lvbl9pbmZvICp2OXNlcztcbiBcdHN0cnVjdCBwb3NpeF9hY2wgKnBhY2wgPSBOVUxMLCAqZGFjbCA9IE5VTEw7XG4gXG4mIzQzO1x0aWYgKE9fSVNfTUtESVIoZmxhZ3MpKVxuJiM0MztcdFx0ZmxhZ3MgXHUwMDI2PSB+T19DUkVBVDtcbiYjNDM7XG4gXHRpZiAoZF9pbl9sb29rdXAoZGVudHJ5KSkge1xuIFx0XHRzdHJ1Y3QgZGVudHJ5ICpyZXMgPSB2OWZzX3Zmc19sb29rdXAoZGlyLCBkZW50cnksIDApO1xuIFx0XHRpZiAocmVzIHx8IGRfcmVhbGx5X2lzX3Bvc2l0aXZlKGRlbnRyeSkpXG5kaWZmIC0tZ2l0IGEvZnMvY2VwaC9maWxlLmMgYi9mcy9jZXBoL2ZpbGUuY1xuaW5kZXggNzExNjFmMmIyMTUxMzYuLmU3OWFiZGJkOWY2MWU5IDEwMDY0NFxuLS0tIGEvZnMvY2VwaC9maWxlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2NlcGgvZmlsZS5jXG5AQCAtODExLDYgJiM0Mzs4MTEsOSBAQCBpbnQgY2VwaF9hdG9taWNfb3BlbihzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxuIFx0ICAgICAgZGlyLCBjZXBoX3Zpbm9wKGRpciksIGRlbnRyeSwgZGVudHJ5LFxuIFx0ICAgICAgZF91bmhhc2hlZChkZW50cnkpID8gXCYjMzQ7dW5oYXNoZWRcJiMzNDsgOiBcJiMzNDtoYXNoZWRcJiMzNDssIGZsYWdzLCBtb2RlKTtcbiBcbiYjNDM7XHRpZiAoT19JU19NS0RJUihmbGFncykpXG4mIzQzO1x0XHRmbGFncyBcdTAwMjY9IH5PX0NSRUFUO1xuJiM0MztcbiBcdGlmIChkZW50cnktXHUwMDNlZF9uYW1lLmxlbiBcdTAwM2UgTkFNRV9NQVgpXG4gXHRcdHJldHVybiAtRU5BTUVUT09MT05HO1xuIFxuZGlmZiAtLWdpdCBhL2ZzL2Z1c2UvZGlyLmMgYi9mcy9mdXNlL2Rpci5jXG5pbmRleCAwZTJhMTAzOWZhNDNlYS4uZTAxODY5NTY1ZDVlZTUgMTAwNjQ0XG4tLS0gYS9mcy9mdXNlL2Rpci5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9mdXNlL2Rpci5jXG5AQCAtOTM1LDYgJiM0Mzs5MzUsOSBAQCBzdGF0aWMgaW50IGZ1c2VfYXRvbWljX29wZW4oc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmVudHJ5LFxuIFx0c3RydWN0IG1udF9pZG1hcCAqaWRtYXAgPSBmaWxlX21udF9pZG1hcChmaWxlKTtcbiBcdHN0cnVjdCBmdXNlX2Nvbm4gKmZjID0gZ2V0X2Z1c2VfY29ubihkaXIpO1xuIFxuJiM0MztcdGlmIChPX0lTX01LRElSKGZsYWdzKSlcbiYjNDM7XHRcdGZsYWdzIFx1MDAyNj0gfk9fQ1JFQVQ7XG4mIzQzO1xuIFx0aWYgKGZ1c2VfaXNfYmFkKGRpcikpXG4gXHRcdHJldHVybiAtRUlPO1xuIFxuZGlmZiAtLWdpdCBhL2ZzL2dmczIvaW5vZGUuYyBiL2ZzL2dmczIvaW5vZGUuY1xuaW5kZXggOGE3Nzc5NGJiZDRhZmMuLjk4NTlhZTAzNDFhOTllIDEwMDY0NFxuLS0tIGEvZnMvZ2ZzMi9pbm9kZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9nZnMyL2lub2RlLmNcbkBAIC0xMzg3LDYgJiM0MzsxMzg3LDkgQEAgc3RhdGljIGludCBnZnMyX2F0b21pY19vcGVuKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXG4ge1xuIFx0Ym9vbCBleGNsID0gISEoZmxhZ3MgXHUwMDI2IE9fRVhDTCk7XG4gXG4mIzQzO1x0aWYgKE9fSVNfTUtESVIoZmxhZ3MpKVxuJiM0MztcdFx0ZmxhZ3MgXHUwMDI2PSB+T19DUkVBVDtcbiYjNDM7XG4gXHRpZiAoZF9pbl9sb29rdXAoZGVudHJ5KSkge1xuIFx0XHRzdHJ1Y3QgZGVudHJ5ICpkID0gX19nZnMyX2xvb2t1cChkaXIsIGRlbnRyeSwgZmlsZSk7XG4gXHRcdGlmIChmaWxlLVx1MDAzZWZfbW9kZSBcdTAwMjYgRk1PREVfT1BFTkVEKSB7XG5kaWZmIC0tZ2l0IGEvZnMvbmFtZWkuYyBiL2ZzL25hbWVpLmNcbmluZGV4IDE5Y2U0M2M5YTZlNjYyLi4wMzBjYWM0ZmJlNTU1ZSAxMDA2NDRcbi0tLSBhL2ZzL25hbWVpLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL25hbWVpLmNcbkBAIC0xMzgyLDEzICYjNDM7MTM4MiwxMiBAQCBpbnQgbWF5X2xpbmthdChzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgY29uc3Qgc3RydWN0IHBhdGggKmxpbmspXG4gXG4gLyoqXG4gICogbWF5X2NyZWF0ZV9pbl9zdGlja3kgLSBDaGVjayB3aGV0aGVyIGFuIE9fQ1JFQVQgb3BlbiBpbiBhIHN0aWNreSBkaXJlY3Rvcnlcbi0gKlx0XHRcdCAgc2hvdWxkIGJlIGFsbG93ZWQsIG9yIG5vdCwgb24gZmlsZXMgdGhhdCBhbHJlYWR5XG4tICpcdFx0XHQgIGV4aXN0LlxuJiM0MzsgKlx0XHRcdCAgc2hvdWxkIGJlIGFsbG93ZWQsIG9yIG5vdFxuICAqIEBpZG1hcDogaWRtYXAgb2YgdGhlIG1vdW50IHRoZSBpbm9kZSB3YXMgZm91bmQgZnJvbVxuICAqIEBuZDogbmFtZWlkYXRhIHBhdGh3YWxrIGRhdGFcbiAgKiBAaW5vZGU6IHRoZSBpbm9kZSBvZiB0aGUgZmlsZSB0byBvcGVuXG4gICpcbi0gKiBCbG9jayBhbiBPX0NSRUFUIG9wZW4gb2YgYSBGSUZPIChvciBhIHJlZ3VsYXIgZmlsZSkgd2hlbjpcbiYjNDM7ICogQmxvY2sgYW4gT19DUkVBVCBvcGVuIG9mIGEgRklGTyAob3IgYSByZWd1bGFyIGZpbGUvZGlyZWN0b3J5KSB3aGVuOlxuICAqICAgLSBzeXNjdGxfcHJvdGVjdGVkX2ZpZm9zIChvciBzeXNjdGxfcHJvdGVjdGVkX3JlZ3VsYXIpIGlzIGVuYWJsZWRcbiAgKiAgIC0gdGhlIGZpbGUgYWxyZWFkeSBleGlzdHNcbiAgKiAgIC0gd2UgYXJlIGluIGEgc3RpY2t5IGRpcmVjdG9yeVxuQEAgLTE0MTYsNiAmIzQzOzE0MTUsMTQgQEAgc3RhdGljIGludCBtYXlfY3JlYXRlX2luX3N0aWNreShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IG5hbWVpZGF0YSAqbmQsXG4gXHRpZiAobGlrZWx5KCEoZGlyX21vZGUgXHUwMDI2IFNfSVNWVFgpKSlcbiBcdFx0cmV0dXJuIDA7XG4gXG4mIzQzO1x0LypcbiYjNDM7XHQgKiBUaGVyZSBpcyBubyBzZXBhcmF0ZSBzeXNjdGwgZm9yIGRpcmVjdG9yeSBjcmVhdGlvbiBpbiBzdGlja3lcbiYjNDM7XHQgKiBmb2xkZXJzLiBUaGVyZWZvcmUsIGZvciB0aGUgU19JU0RJUiBjYXNlLCBkaXNhYmxpbmdcbiYjNDM7XHQgKiBzeXNjdGxfcHJvdGVjdGVkX3JlZ3VsYXIgaXMgbm90IGVub3VnaCB0byBhbGxvdyBjcmVhdGluZyBhXG4mIzQzO1x0ICogZGlyZWN0b3J5IGluIGEgc3RpY2t5IGZvbGRlciwgYmVjYXVzZSB0aGF0IG1heSBzdXJwcmlzZSB1c2Vyc1xuJiM0MztcdCAqIG5vdCBleHBlY3RpbmcgdGhhdCBPX0NSRUFUfE9fRElSRUNUT1JZIGlzIHBvc3NpYmxlIG9uIG5ld2VyXG4mIzQzO1x0ICoga2VybmVscy5cbiYjNDM7XHQgKi9cbiBcdGlmIChTX0lTUkVHKGlub2RlLVx1MDAzZWlfbW9kZSkgXHUwMDI2XHUwMDI2ICFzeXNjdGxfcHJvdGVjdGVkX3JlZ3VsYXIpXG4gXHRcdHJldHVybiAwO1xuIFxuQEAgLTE0NDcsNiAmIzQzOzE0NTQsMTIgQEAgc3RhdGljIGludCBtYXlfY3JlYXRlX2luX3N0aWNreShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IG5hbWVpZGF0YSAqbmQsXG4gXHRcdFx0XHRcdCAgICAgIFwmIzM0O3N0aWNreV9jcmVhdGVfcmVndWxhclwmIzM0Oyk7XG4gXHRcdFx0cmV0dXJuIC1FQUNDRVM7XG4gXHRcdH1cbiYjNDM7XG4mIzQzO1x0XHRpZiAoU19JU0RJUihpbm9kZS1cdTAwM2VpX21vZGUpKSB7XG4mIzQzO1x0XHRcdGF1ZGl0X2xvZ19wYXRoX2RlbmllZChBVURJVF9BTk9NX0NSRUFULFxuJiM0MztcdFx0XHRcdFx0ICAgICAgXCYjMzQ7c3RpY2t5X2NyZWF0ZV9kaXJcJiMzNDspO1xuJiM0MztcdFx0XHRyZXR1cm4gLUVBQ0NFUztcbiYjNDM7XHRcdH1cbiBcdH1cbiBcbiBcdHJldHVybiAwO1xuQEAgLTI3ODEsOSAmIzQzOzI3OTQsMTQgQEAgc3RhdGljIGNvbnN0IGNoYXIgKnBhdGhfaW5pdChzdHJ1Y3QgbmFtZWlkYXRhICpuZCwgdW5zaWduZWQgZmxhZ3MpXG4gXHRyZXR1cm4gcztcbiB9XG4gXG4mIzQzO3N0YXRpYyBpbmxpbmUgYm9vbCB0cmFpbGluZ19zbGFzaGVzKGNvbnN0IHN0cnVjdCBxc3RyIGxhc3QpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gKGJvb2wpbGFzdC5uYW1lW2xhc3QubGVuXTtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgaW5saW5lIGNvbnN0IGNoYXIgKmxvb2t1cF9sYXN0KHN0cnVjdCBuYW1laWRhdGEgKm5kKVxuIHtcbi1cdGlmIChuZC1cdTAwM2VsYXN0X3R5cGUgPT0gTEFTVF9OT1JNIFx1MDAyNlx1MDAyNiBuZC1cdTAwM2VsYXN0Lm5hbWVbbmQtXHUwMDNlbGFzdC5sZW5dKVxuJiM0MztcdGlmIChuZC1cdTAwM2VsYXN0X3R5cGUgPT0gTEFTVF9OT1JNIFx1MDAyNlx1MDAyNiB0cmFpbGluZ19zbGFzaGVzKG5kLVx1MDAzZWxhc3QpKVxuIFx0XHRuZC1cdTAwM2VmbGFncyB8PSBMT09LVVBfRk9MTE9XIHwgTE9PS1VQX0RJUkVDVE9SWTtcbiBcbiBcdHJldHVybiB3YWxrX2NvbXBvbmVudChuZCwgV0FMS19UUkFJTElORyk7XG5AQCAtNDE2NCw2ICYjNDM7NDE4MiwyNCBAQCBzdGF0aWMgaW5saW5lIHVtb2RlX3QgdmZzX3ByZXBhcmVfbW9kZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcbiBcdHJldHVybiBtb2RlO1xuIH1cbiBcbiYjNDM7c3RhdGljIGlubGluZVxuJiM0MztpbnQgdmZzX2NyZWF0ZV9ub19wZXJtKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXG4mIzQzO1x0XHQgICAgICAgdW1vZGVfdCBtb2RlLCBzdHJ1Y3QgZGVsZWdhdGVkX2lub2RlICpkaSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBpbm9kZSAqZGlyID0gZF9pbm9kZShkZW50cnktXHUwMDNlZF9wYXJlbnQpO1xuJiM0MztcdGludCBlcnJvcjtcbiYjNDM7XG4mIzQzO1x0ZXJyb3IgPSB0cnlfYnJlYWtfZGVsZWcoZGlyLCBMRUFTRV9CUkVBS19ESVJfQ1JFQVRFLCBkaSk7XG4mIzQzO1x0aWYgKGVycm9yKVxuJiM0MztcdFx0cmV0dXJuIGVycm9yO1xuJiM0MztcbiYjNDM7XHRlcnJvciA9IGRpci1cdTAwM2VpX29wLVx1MDAzZWNyZWF0ZShpZG1hcCwgZGlyLCBkZW50cnksIG1vZGUsIHRydWUpO1xuJiM0MztcdGlmICghZXJyb3IpXG4mIzQzO1x0XHRmc25vdGlmeV9jcmVhdGUoZGlyLCBkZW50cnkpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gZXJyb3I7XG4mIzQzO31cbiYjNDM7XG4gLyoqXG4gICogdmZzX2NyZWF0ZSAtIGNyZWF0ZSBuZXcgZmlsZVxuICAqIEBpZG1hcDpcdGlkbWFwIG9mIHRoZSBtb3VudCB0aGUgaW5vZGUgd2FzIGZvdW5kIGZyb21cbkBAIC00MTk2LDEzICYjNDM7NDIzMiw4IEBAIGludCB2ZnNfY3JlYXRlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSxcbiBcdGVycm9yID0gc2VjdXJpdHlfaW5vZGVfY3JlYXRlKGRpciwgZGVudHJ5LCBtb2RlKTtcbiBcdGlmIChlcnJvcilcbiBcdFx0cmV0dXJuIGVycm9yO1xuLVx0ZXJyb3IgPSB0cnlfYnJlYWtfZGVsZWcoZGlyLCBMRUFTRV9CUkVBS19ESVJfQ1JFQVRFLCBkaSk7XG4tXHRpZiAoZXJyb3IpXG4tXHRcdHJldHVybiBlcnJvcjtcbi1cdGVycm9yID0gZGlyLVx1MDAzZWlfb3AtXHUwMDNlY3JlYXRlKGlkbWFwLCBkaXIsIGRlbnRyeSwgbW9kZSwgdHJ1ZSk7XG4tXHRpZiAoIWVycm9yKVxuLVx0XHRmc25vdGlmeV9jcmVhdGUoZGlyLCBkZW50cnkpO1xuLVx0cmV0dXJuIGVycm9yO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gdmZzX2NyZWF0ZV9ub19wZXJtKGlkbWFwLCBkZW50cnksIG1vZGUsIGRpKTtcbiB9XG4gRVhQT1JUX1NZTUJPTCh2ZnNfY3JlYXRlKTtcbiBcbkBAIC00MzE5LDczICYjNDM7NDM1MCwxMjIgQEAgc3RhdGljIGlubGluZSBpbnQgb3Blbl90b19uYW1laV9mbGFncyhpbnQgZmxhZylcbiBcbiBzdGF0aWMgaW50IG1heV9vX2NyZWF0ZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcbiBcdFx0XHRjb25zdCBzdHJ1Y3QgcGF0aCAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXG4tXHRcdFx0dW1vZGVfdCBtb2RlKVxuJiM0MztcdFx0XHR1bW9kZV90IG1vZGUsIGJvb2wgY3JlYXRlX2RpcilcbiB7XG4tXHRpbnQgZXJyb3IgPSBzZWN1cml0eV9wYXRoX21rbm9kKGRpciwgZGVudHJ5LCBtb2RlLCAwKTtcbiYjNDM7XHRzdHJ1Y3QgaW5vZGUgKmRpcl9pbm9kZSA9IGRpci1cdTAwM2VkZW50cnktXHUwMDNlZF9pbm9kZTtcbiYjNDM7XHRpbnQgZXJyb3I7XG4mIzQzO1xuJiM0MztcdGlmIChjcmVhdGVfZGlyKVxuJiM0MztcdFx0ZXJyb3IgPSBzZWN1cml0eV9wYXRoX21rZGlyKGRpciwgZGVudHJ5LCBtb2RlKTtcbiYjNDM7XHRlbHNlXG4mIzQzO1x0XHRlcnJvciA9IHNlY3VyaXR5X3BhdGhfbWtub2QoZGlyLCBkZW50cnksIG1vZGUsIDApO1xuIFx0aWYgKGVycm9yKVxuIFx0XHRyZXR1cm4gZXJyb3I7XG4gXG4gXHRpZiAoIWZzdWlkZ2lkX2hhc19tYXBwaW5nKGRpci1cdTAwM2VkZW50cnktXHUwMDNlZF9zYiwgaWRtYXApKVxuIFx0XHRyZXR1cm4gLUVPVkVSRkxPVztcbiBcbi1cdGVycm9yID0gaW5vZGVfcGVybWlzc2lvbihpZG1hcCwgZGlyLVx1MDAzZWRlbnRyeS1cdTAwM2VkX2lub2RlLFxuLVx0XHRcdFx0IE1BWV9XUklURSB8IE1BWV9FWEVDKTtcbiYjNDM7XHRlcnJvciA9IGlub2RlX3Blcm1pc3Npb24oaWRtYXAsIGRpcl9pbm9kZSwgTUFZX1dSSVRFIHwgTUFZX0VYRUMpO1xuIFx0aWYgKGVycm9yKVxuIFx0XHRyZXR1cm4gZXJyb3I7XG4gXG4tXHRyZXR1cm4gc2VjdXJpdHlfaW5vZGVfY3JlYXRlKGRpci1cdTAwM2VkZW50cnktXHUwMDNlZF9pbm9kZSwgZGVudHJ5LCBtb2RlKTtcbiYjNDM7XHRpZiAoY3JlYXRlX2RpcilcbiYjNDM7XHRcdGVycm9yID0gc2VjdXJpdHlfaW5vZGVfbWtkaXIoZGlyX2lub2RlLCBkZW50cnksIG1vZGUpO1xuJiM0MztcdGVsc2VcbiYjNDM7XHRcdGVycm9yID0gc2VjdXJpdHlfaW5vZGVfY3JlYXRlKGRpcl9pbm9kZSwgZGVudHJ5LCBtb2RlKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGVycm9yO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW5saW5lIHVtb2RlX3Qgb19jcmVhdGVfbW9kZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcbiYjNDM7XHRcdGNvbnN0IHN0cnVjdCBpbm9kZSAqZGlyLCB1bW9kZV90IG1vZGUsIGJvb2wgY3JlYXRlX2RpcilcbiYjNDM7e1xuJiM0MztcdGlmIChjcmVhdGVfZGlyKVxuJiM0MztcdFx0cmV0dXJuIHZmc19wcmVwYXJlX21vZGUoaWRtYXAsIGRpciwgbW9kZSwgU19JUldYVUdPIHwgU19JU1ZUWCwgMCk7XG4mIzQzO1x0ZWxzZVxuJiM0MztcdFx0cmV0dXJuIHZmc19wcmVwYXJlX21vZGUoaWRtYXAsIGRpciwgbW9kZSwgU19JQUxMVUdPLCBTX0lGUkVHKTtcbiB9XG4gXG4gLypcbi0gKiBBdHRlbXB0IHRvIGF0b21pY2FsbHkgbG9vayB1cCwgY3JlYXRlIGFuZCBvcGVuIGEgZmlsZSBmcm9tIGEgbmVnYXRpdmVcbi0gKiBkZW50cnkuXG4tICpcbi0gKiBSZXR1cm5zIDAgaWYgc3VjY2Vzc2Z1bC4gIFRoZSBmaWxlIHdpbGwgaGF2ZSBiZWVuIGNyZWF0ZWQgYW5kIGF0dGFjaGVkIHRvXG4tICogQGZpbGUgYnkgdGhlIGZpbGVzeXN0ZW0gY2FsbGluZyBmaW5pc2hfb3BlbigpLlxuLSAqXG4tICogSWYgdGhlIGZpbGUgd2FzIGxvb2tlZCB1cCBvbmx5IG9yIGRpZG4mIzM5O3QgbmVlZCBjcmVhdGluZywgRk1PREVfT1BFTkVEIHdvbiYjMzk7dFxuLSAqIGJlIHNldC4gIFRoZSBjYWxsZXIgd2lsbCBuZWVkIHRvIHBlcmZvcm0gdGhlIG9wZW4gdGhlbXNlbHZlcy4gIEBwYXRoIHdpbGxcbi0gKiBoYXZlIGJlZW4gdXBkYXRlZCB0byBwb2ludCB0byB0aGUgbmV3IGRlbnRyeS4gIFRoaXMgbWF5IGJlIG5lZ2F0aXZlLlxuLSAqXG4tICogUmV0dXJucyBhbiBlcnJvciBjb2RlIG90aGVyd2lzZS5cbiYjNDM7ICogYXRvbWljX29wZW4oKSAtIGF0dGVtcHQgdG8gYXRvbWljYWxseSBsb29rIHVwLCBjcmVhdGUgYW5kIG9wZW4gYSBmaWxlXG4mIzQzOyAqIGZyb20gYSBuZWdhdGl2ZSBkZW50cnkuXG4mIzQzOyAqIEBwYXRoOiAgICAgICAgICBwYXJlbnQgZGlyZWN0b3J5IHBhdGhcbiYjNDM7ICogQGRlbnRyeTogICAgICAgIGNoaWxkIHRvIC1cdTAwM2VhdG9taWNfb3BlbigpXG4mIzQzOyAqIEBvcGVuX2ZsYWc6ICAgICBvcGVuIGZsYWdzXG4mIzQzOyAqIEBtb2RlOiAgICAgICAgICBjcmVhdGUgbW9kZVxuJiM0MzsgKiBAY3JlYXRlX2Vycm9yOiAgcmV0dXJuIHZhbHVlIGZyb20gbWF5X29fY3JlYXRlKClcbiYjNDM7ICpcbiYjNDM7ICogSWYgRk1PREVfT1BFTkVEIGlzIHNldCwgdGhlIGZpbGUgd2lsbCBoYXZlIGJlZW4gYXR0YWNoZWQgdG8gQGZpbGUgYnkgdGhlXG4mIzQzOyAqIGZpbGVzeXN0ZW0gY2FsbGluZyBmaW5pc2hfb3BlbigpLiBJZiBGTU9ERV9PUEVORUQgaXNuJiMzOTt0IHNldCwgdGhlXG4mIzQzOyAqIGZpbGVzeXN0ZW0gaW5zdGVhZCBjYWxsZWQgZmluaXNoX25vX29wZW4oKSBhbmQgdGhlIGNhbGxlciB3aWxsIG5lZWQgdG9cbiYjNDM7ICogcGVyZm9ybSB0aGUgb3BlbiB0aGVtc2VsdmVzLlxuJiM0MzsgKlxuJiM0MzsgKiBGTU9ERV9DUkVBVEVEIGlzIHNldCB3aGVuIHRoZSBjYWxsIHRvIC1cdTAwM2VhdG9taWNfb3BlbigpIGFjdHVhbGx5IGNyZWF0ZWRcbiYjNDM7ICogdGhlIGZpbGUuXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybnMgdGhlIG9wZW5lZC9sb29rZWQtdXAgZGVudHJ5IG9uIHN1Y2Nlc3Mgb3IgRVJSX1BUUigtRSkgb24gZmFpbHVyZS5cbiYjNDM7ICogT24gZXJyb3IsIGF0b21pY19vcGVuKCkgY29uc3VtZXMgQGRlbnRyeS5cbiAgKi9cbiBzdGF0aWMgc3RydWN0IGRlbnRyeSAqYXRvbWljX29wZW4oY29uc3Qgc3RydWN0IHBhdGggKnBhdGgsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcbiBcdFx0XHRcdCAgc3RydWN0IGZpbGUgKmZpbGUsXG4tXHRcdFx0XHQgIGludCBvcGVuX2ZsYWcsIHVtb2RlX3QgbW9kZSlcbiYjNDM7XHRcdFx0XHQgIGludCBvcGVuX2ZsYWcsIHVtb2RlX3QgbW9kZSwgYm9vbCBjcmVhdGVfZXJyb3IpXG4ge1xuIFx0c3RydWN0IGRlbnRyeSAqY29uc3QgREVOVFJZX05PVF9TRVQgPSAodm9pZCAqKSAtMVVMO1xuIFx0c3RydWN0IGlub2RlICpkaXIgPSAgcGF0aC1cdTAwM2VkZW50cnktXHUwMDNlZF9pbm9kZTtcbiYjNDM7XHRib29sIGZhaWxlZF9jcmVhdGUgPSBmYWxzZTtcbiBcdGludCBlcnJvcjtcbiBcbiBcdGZpbGUtXHUwMDNlX19mX3BhdGguZGVudHJ5ID0gREVOVFJZX05PVF9TRVQ7XG4gXHRmaWxlLVx1MDAzZV9fZl9wYXRoLm1udCA9IHBhdGgtXHUwMDNlbW50O1xuJiM0MztcbiBcdGVycm9yID0gZGlyLVx1MDAzZWlfb3AtXHUwMDNlYXRvbWljX29wZW4oZGlyLCBkZW50cnksIGZpbGUsXG4gXHRcdFx0XHQgICAgICAgb3Blbl90b19uYW1laV9mbGFncyhvcGVuX2ZsYWcpLCBtb2RlKTtcbiBcdGRfbG9va3VwX2RvbmUoZGVudHJ5KTtcbiBcdGlmICghZXJyb3IpIHtcbiBcdFx0aWYgKGZpbGUtXHUwMDNlZl9tb2RlIFx1MDAyNiBGTU9ERV9PUEVORUQpIHtcbi1cdFx0XHRpZiAodW5saWtlbHkoZGVudHJ5ICE9IGZpbGUtXHUwMDNlZl9wYXRoLmRlbnRyeSkpIHtcbiYjNDM7XHRcdFx0Ly8gZmluaXNoX29wZW4oKSBjYWxsZWRcbiYjNDM7XHRcdFx0c3RydWN0IGRlbnRyeSAqb3BlbmVkID0gZmlsZS1cdTAwM2VmX3BhdGguZGVudHJ5O1xuJiM0MztcdFx0XHRpZiAodW5saWtlbHkob3BlbmVkICE9IGRlbnRyeSkpIHtcbiBcdFx0XHRcdGRwdXQoZGVudHJ5KTtcbi1cdFx0XHRcdGRlbnRyeSA9IGRnZXQoZmlsZS1cdTAwM2VmX3BhdGguZGVudHJ5KTtcbiYjNDM7XHRcdFx0XHRkZW50cnkgPSBkZ2V0KG9wZW5lZCk7XG4gXHRcdFx0fVxuLVx0XHR9IGVsc2UgaWYgKFdBUk5fT04oZmlsZS1cdTAwM2VmX3BhdGguZGVudHJ5ID09IERFTlRSWV9OT1RfU0VUKSkge1xuLVx0XHRcdGVycm9yID0gLUVJTztcbi1cdFx0fSBlbHNlIHtcbi1cdFx0XHRpZiAoZmlsZS1cdTAwM2VmX3BhdGguZGVudHJ5KSB7XG4mIzQzO1x0XHR9IGVsc2UgaWYgKGxpa2VseShmaWxlLVx1MDAzZWZfcGF0aC5kZW50cnkgIT0gREVOVFJZX05PVF9TRVQpKSB7XG4mIzQzO1x0XHRcdC8vIGZpbmlzaF9ub19vcGVuKCkgY2FsbGVkXG4mIzQzO1x0XHRcdHN0cnVjdCBkZW50cnkgKnJlcGxhY2VkID0gZmlsZS1cdTAwM2VmX3BhdGguZGVudHJ5O1xuJiM0MztcdFx0XHRpZiAocmVwbGFjZWQpIHtcbiBcdFx0XHRcdGRwdXQoZGVudHJ5KTtcbi1cdFx0XHRcdGRlbnRyeSA9IGZpbGUtXHUwMDNlZl9wYXRoLmRlbnRyeTtcbiYjNDM7XHRcdFx0XHRkZW50cnkgPSByZXBsYWNlZDtcbiBcdFx0XHR9XG4gXHRcdFx0aWYgKHVubGlrZWx5KGRfaXNfbmVnYXRpdmUoZGVudHJ5KSkpXG4gXHRcdFx0XHRlcnJvciA9IC1FTk9FTlQ7XG4mIzQzO1x0XHRcdGlmIChlcnJvciBcdTAwMjZcdTAwMjYgY3JlYXRlX2Vycm9yKSAvLyBzaG91bGQgaGF2ZSBjcmVhdGVkLCBidXQgZXJyb3JlZCBiZWZvcmVcbiYjNDM7XHRcdFx0XHRmYWlsZWRfY3JlYXRlID0gdHJ1ZTtcbiYjNDM7XHRcdH0gZWxzZSB7XG4mIzQzO1x0XHRcdGNvbnN0IGNoYXIgKmZzbmFtZSA9IGRlbnRyeS1cdTAwM2VkX3NiLVx1MDAzZXNfdHlwZS1cdTAwM2VuYW1lO1xuJiM0MztcdFx0XHRXQVJOKDEsIFwmIzM0OyVzOiAtXHUwMDNlYXRvbWljX29wZW4oKSBsZWZ0IGZpbGUtXHUwMDNlZl9wYXRoLmRlbnRyeSB1bnNldCFcXG5cJiMzNDssIGZzbmFtZSk7XG4mIzQzO1x0XHRcdGVycm9yID0gLUVJTztcbiBcdFx0fVxuIFx0fVxuJiM0MztcbiBcdGlmIChlcnJvcikge1xuJiM0MztcdFx0aWYgKGZhaWxlZF9jcmVhdGUpXG4mIzQzO1x0XHRcdGF1ZGl0X2lub2RlX2NoaWxkKGRpciwgZGVudHJ5LCBBVURJVF9UWVBFX0NISUxEX0NSRUFURSk7XG4gXHRcdGRwdXQoZGVudHJ5KTtcbiBcdFx0ZGVudHJ5ID0gRVJSX1BUUihlcnJvcik7XG4mIzQzO1x0fSBlbHNlIHtcbiYjNDM7XHRcdGlmIChmaWxlLVx1MDAzZWZfbW9kZSBcdTAwMjYgRk1PREVfQ1JFQVRFRClcbiYjNDM7XHRcdFx0ZnNub3RpZnlfY3JlYXRlKGRpciwgZGVudHJ5KTtcbiYjNDM7XHRcdGlmIChmaWxlLVx1MDAzZWZfbW9kZSBcdTAwMjYgRk1PREVfT1BFTkVEKVxuJiM0MztcdFx0XHRmc25vdGlmeV9vcGVuKGZpbGUpO1xuIFx0fVxuJiM0MztcbiBcdHJldHVybiBkZW50cnk7XG4gfVxuIFxuJiM0MztzdGF0aWMgaW5saW5lXG4mIzQzO3N0cnVjdCBkZW50cnkgKnZmc19ta2Rpcl9ub19wZXJtKHN0cnVjdCBtbnRfaWRtYXAgKiwgc3RydWN0IGlub2RlICosXG4mIzQzO1x0XHRcdFx0IHN0cnVjdCBkZW50cnkgKiwgdW1vZGVfdCxcbiYjNDM7XHRcdFx0XHQgc3RydWN0IGRlbGVnYXRlZF9pbm9kZSAqKTtcbiAvKlxuICAqIExvb2sgdXAgYW5kIG1heWJlIGNyZWF0ZSBhbmQgb3BlbiB0aGUgbGFzdCBjb21wb25lbnQuXG4gICpcbkBAIC00NDEyLDYgJiM0Mzs0NDkyLDcgQEAgc3RhdGljIHN0cnVjdCBkZW50cnkgKmxvb2t1cF9vcGVuKHN0cnVjdCBuYW1laWRhdGEgKm5kLCBzdHJ1Y3QgZmlsZSAqZmlsZSxcbiBcdHN0cnVjdCBkZW50cnkgKmRlbnRyeTtcbiBcdGludCBlcnJvciwgY3JlYXRlX2Vycm9yID0gMDtcbiBcdHVtb2RlX3QgbW9kZSA9IG9wLVx1MDAzZW1vZGU7XG4mIzQzO1x0Ym9vbCBjcmVhdGVfZGlyID0gT19JU19NS0RJUihvcGVuX2ZsYWcpO1xuIFxuIFx0aWYgKHVubGlrZWx5KElTX0RFQURESVIoZGlyX2lub2RlKSkpXG4gXHRcdHJldHVybiBFUlJfUFRSKC1FTk9FTlQpO1xuQEAgLTQ0MzcsNyAmIzQzOzQ1MTgsNyBAQCBzdGF0aWMgc3RydWN0IGRlbnRyeSAqbG9va3VwX29wZW4oc3RydWN0IG5hbWVpZGF0YSAqbmQsIHN0cnVjdCBmaWxlICpmaWxlLFxuIFx0XHRkZW50cnkgPSBOVUxMO1xuIFx0fVxuIFx0aWYgKGRlbnRyeS1cdTAwM2VkX2lub2RlKSB7XG4tXHRcdC8qIENhY2hlZCBwb3NpdGl2ZSBkZW50cnk6IHdpbGwgb3BlbiBpbiBmX29wLVx1MDAzZW9wZW4gKi9cbiYjNDM7XHRcdC8qIENhY2hlZCBwb3NpdGl2ZSBkZW50cnk6IHdpbGwgb3BlbiBpbiBkb19vcGVuKCkuICovXG4gXHRcdHJldHVybiBkZW50cnk7XG4gXHR9XG4gXG5AQCAtNDQ1OSwxOSAmIzQzOzQ1NDAsMjQgQEAgc3RhdGljIHN0cnVjdCBkZW50cnkgKmxvb2t1cF9vcGVuKHN0cnVjdCBuYW1laWRhdGEgKm5kLCBzdHJ1Y3QgZmlsZSAqZmlsZSxcbiBcdGlmIChvcGVuX2ZsYWcgXHUwMDI2IE9fQ1JFQVQpIHtcbiBcdFx0aWYgKG9wZW5fZmxhZyBcdTAwMjYgT19FWENMKVxuIFx0XHRcdG9wZW5fZmxhZyBcdTAwMjY9IH5PX1RSVU5DO1xuLVx0XHRtb2RlID0gdmZzX3ByZXBhcmVfbW9kZShpZG1hcCwgZGlyLVx1MDAzZWRfaW5vZGUsIG1vZGUsIG1vZGUsIG1vZGUpO1xuJiM0MztcdFx0bW9kZSA9IG9fY3JlYXRlX21vZGUoaWRtYXAsIGRpcl9pbm9kZSwgbW9kZSwgY3JlYXRlX2Rpcik7XG4gXHRcdGlmIChsaWtlbHkoZ290X3dyaXRlKSlcbiBcdFx0XHRjcmVhdGVfZXJyb3IgPSBtYXlfb19jcmVhdGUoaWRtYXAsIFx1MDAyNm5kLVx1MDAzZXBhdGgsXG4tXHRcdFx0XHRcdFx0ICAgIGRlbnRyeSwgbW9kZSk7XG4mIzQzO1x0XHRcdFx0XHRcdCAgICBkZW50cnksIG1vZGUsIGNyZWF0ZV9kaXIpO1xuIFx0XHRlbHNlXG4gXHRcdFx0Y3JlYXRlX2Vycm9yID0gLUVST0ZTO1xuJiM0MztcdFx0LyogUmVmdXNlIHRvIGNyZWF0ZSBhIGRpcmVjdG9yeSB0aHJvdWdoIGEgZGFuZ2xpbmcgKHRyYWlsaW5nKVxuJiM0MztcdFx0ICogc3ltbGluay4gRm9yIHJlZ3VsYXIgZmlsZXMgdGhpcyBoYXMgYmVlbiBhbGxvd2VkIGhpc3RvcmljYWxseVxuJiM0MztcdFx0ICogb24gT19DUkVBVCB3aXRob3V0IE9fRVhDTC4gKi9cbiYjNDM7XHRcdGlmICh1bmxpa2VseShuZC1cdTAwM2VkZXB0aCkgXHUwMDI2XHUwMDI2IGNyZWF0ZV9kaXIgXHUwMDI2XHUwMDI2ICFjcmVhdGVfZXJyb3IpXG4mIzQzO1x0XHRcdGNyZWF0ZV9lcnJvciA9IC1FRVhJU1Q7XG4gXHR9XG4gXHRpZiAoY3JlYXRlX2Vycm9yKVxuIFx0XHRvcGVuX2ZsYWcgXHUwMDI2PSB+T19DUkVBVDtcbiBcdGlmIChkaXJfaW5vZGUtXHUwMDNlaV9vcC1cdTAwM2VhdG9taWNfb3Blbikge1xuIFx0XHRpZiAobmQtXHUwMDNlZmxhZ3MgXHUwMDI2IExPT0tVUF9ESVJFQ1RPUlkpXG4gXHRcdFx0b3Blbl9mbGFnIHw9IE9fRElSRUNUT1JZO1xuLVx0XHRkZW50cnkgPSBhdG9taWNfb3BlbihcdTAwMjZuZC1cdTAwM2VwYXRoLCBkZW50cnksIGZpbGUsIG9wZW5fZmxhZywgbW9kZSk7XG4mIzQzO1x0XHRkZW50cnkgPSBhdG9taWNfb3BlbihcdTAwMjZuZC1cdTAwM2VwYXRoLCBkZW50cnksIGZpbGUsIG9wZW5fZmxhZywgbW9kZSwgY3JlYXRlX2Vycm9yKTtcbiBcdFx0aWYgKHVubGlrZWx5KGNyZWF0ZV9lcnJvcikgXHUwMDI2XHUwMDI2IGRlbnRyeSA9PSBFUlJfUFRSKC1FTk9FTlQpKVxuIFx0XHRcdGRlbnRyeSA9IEVSUl9QVFIoY3JlYXRlX2Vycm9yKTtcbiBcdFx0cmV0dXJuIGRlbnRyeTtcbkBAIC00NDkwLDMwICYjNDM7NDU3Niw0NCBAQCBzdGF0aWMgc3RydWN0IGRlbnRyeSAqbG9va3VwX29wZW4oc3RydWN0IG5hbWVpZGF0YSAqbmQsIHN0cnVjdCBmaWxlICpmaWxlLFxuIFx0XHRcdGRlbnRyeSA9IHJlcztcbiBcdFx0fVxuIFx0fVxuJiM0MztcdGlmIChkZW50cnktXHUwMDNlZF9pbm9kZSB8fCAhKG9wLVx1MDAzZW9wZW5fZmxhZyBcdTAwMjYgT19DUkVBVCkpIHtcbiYjNDM7XHRcdC8qIE5vIG5lZWQgdG8gY3JlYXRlIGEgZmlsZS4gSWYgbG9va3VwIHJldHVybmVkIGEgcG9zaXRpdmVcbiYjNDM7XHRcdCAqIGRlbnRyeSwgdGhlIGZpbGUgd2lsbCBiZSBvcGVuZWQgaW4gZG9fb3BlbigpLiAqL1xuJiM0MztcdFx0cmV0dXJuIGRlbnRyeTtcbiYjNDM7XHR9XG4gXG4tXHQvKiBOZWdhdGl2ZSBkZW50cnksIGp1c3QgY3JlYXRlIHRoZSBmaWxlICovXG4tXHRpZiAoIWRlbnRyeS1cdTAwM2VkX2lub2RlIFx1MDAyNlx1MDAyNiAob3Blbl9mbGFnIFx1MDAyNiBPX0NSRUFUKSkge1xuLVx0XHQvKiBidXQgYnJlYWsgdGhlIGRpcmVjdG9yeSBsZWFzZSBmaXJzdCEgKi9cbi1cdFx0ZXJyb3IgPSB0cnlfYnJlYWtfZGVsZWcoZGlyX2lub2RlLCBMRUFTRV9CUkVBS19ESVJfQ1JFQVRFLCBkZWxlZ2F0ZWRfaW5vZGUpO1xuLVx0XHRpZiAoZXJyb3IpXG4tXHRcdFx0Z290byBvdXRfZHB1dDtcbi1cbi1cdFx0ZmlsZS1cdTAwM2VmX21vZGUgfD0gRk1PREVfQ1JFQVRFRDtcbi1cdFx0YXVkaXRfaW5vZGVfY2hpbGQoZGlyX2lub2RlLCBkZW50cnksIEFVRElUX1RZUEVfQ0hJTERfQ1JFQVRFKTtcbi1cdFx0aWYgKCFkaXJfaW5vZGUtXHUwMDNlaV9vcC1cdTAwM2VjcmVhdGUpIHtcbi1cdFx0XHRlcnJvciA9IC1FQUNDRVM7XG4tXHRcdFx0Z290byBvdXRfZHB1dDtcbi1cdFx0fVxuJiM0MztcdC8qIE5lZ2F0aXZlIGRlbnRyeSB3aXRoIE9fQ1JFQVQgZmxhZyBzZXQgKi9cbiYjNDM7XHRhdWRpdF9pbm9kZV9jaGlsZChkaXItXHUwMDNlZF9pbm9kZSwgZGVudHJ5LCBBVURJVF9UWVBFX0NISUxEX0NSRUFURSk7XG4gXG4tXHRcdGVycm9yID0gZGlyX2lub2RlLVx1MDAzZWlfb3AtXHUwMDNlY3JlYXRlKGlkbWFwLCBkaXJfaW5vZGUsIGRlbnRyeSxcbi1cdFx0XHRcdFx0XHRtb2RlLCBvcGVuX2ZsYWcgXHUwMDI2IE9fRVhDTCk7XG4tXHRcdGlmIChlcnJvcilcbi1cdFx0XHRnb3RvIG91dF9kcHV0O1xuLVx0fVxuLVx0aWYgKHVubGlrZWx5KGNyZWF0ZV9lcnJvcikgXHUwMDI2XHUwMDI2ICFkZW50cnktXHUwMDNlZF9pbm9kZSkge1xuJiM0MztcdGlmICh1bmxpa2VseShjcmVhdGVfZXJyb3IpKSB7XG4mIzQzO1x0XHQvKiBTaG91bGQgaGF2ZSBkb25lIGEgY3JlYXRlLCBidXQgd2UgYWxyZWFkeSBlcnJvcmVkICovXG4gXHRcdGVycm9yID0gY3JlYXRlX2Vycm9yO1xuIFx0XHRnb3RvIG91dF9kcHV0O1xuIFx0fVxuJiM0MztcbiYjNDM7XHRpZiAoKGNyZWF0ZV9kaXIgXHUwMDI2XHUwMDI2ICFkaXJfaW5vZGUtXHUwMDNlaV9vcC1cdTAwM2Vta2RpcilcbiYjNDM7XHQgICAgfHwgKCFjcmVhdGVfZGlyIFx1MDAyNlx1MDAyNiAhZGlyX2lub2RlLVx1MDAzZWlfb3AtXHUwMDNlY3JlYXRlKSkge1xuJiM0MztcdFx0ZXJyb3IgPSAtRUFDQ0VTO1xuJiM0MztcdFx0Z290byBvdXRfZHB1dDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmIChjcmVhdGVfZGlyKSB7XG4mIzQzO1x0XHRzdHJ1Y3QgZGVudHJ5ICpyZXMgPSB2ZnNfbWtkaXJfbm9fcGVybShpZG1hcCwgZGlyX2lub2RlLCBkZW50cnksXG4mIzQzO1x0XHRcdFx0XHRcdCAgICAgICBtb2RlLCBkZWxlZ2F0ZWRfaW5vZGUpO1xuJiM0MztcdFx0aWYgKElTX0VSUihyZXMpKSB7XG4mIzQzO1x0XHRcdGVycm9yID0gUFRSX0VSUihyZXMpO1xuJiM0MztcdFx0fSBlbHNlIHtcbiYjNDM7XHRcdFx0ZXJyb3IgPSAwO1xuJiM0MztcdFx0XHRkZW50cnkgPSByZXM7XG4mIzQzO1x0XHR9XG4mIzQzO1x0fSBlbHNlIHtcbiYjNDM7XHRcdGVycm9yID0gdmZzX2NyZWF0ZV9ub19wZXJtKGlkbWFwLCBkZW50cnksIG1vZGUsIGRlbGVnYXRlZF9pbm9kZSk7XG4mIzQzO1x0fVxuJiM0MztcdGlmIChlcnJvcilcbiYjNDM7XHRcdGdvdG8gb3V0X2RwdXQ7XG4mIzQzO1xuJiM0MztcdGZpbGUtXHUwMDNlZl9tb2RlIHw9IEZNT0RFX0NSRUFURUQ7XG4mIzQzO1xuIFx0cmV0dXJuIGRlbnRyeTtcbiBcbiBvdXRfZHB1dDpcbkBAIC00NTIxLDE3ICYjNDM7NDYyMSwxMiBAQCBzdGF0aWMgc3RydWN0IGRlbnRyeSAqbG9va3VwX29wZW4oc3RydWN0IG5hbWVpZGF0YSAqbmQsIHN0cnVjdCBmaWxlICpmaWxlLFxuIFx0cmV0dXJuIEVSUl9QVFIoZXJyb3IpO1xuIH1cbiBcbi1zdGF0aWMgaW5saW5lIGJvb2wgdHJhaWxpbmdfc2xhc2hlcyhzdHJ1Y3QgbmFtZWlkYXRhICpuZClcbi17XG4tXHRyZXR1cm4gKGJvb2wpbmQtXHUwMDNlbGFzdC5uYW1lW25kLVx1MDAzZWxhc3QubGVuXTtcbi19XG4tXG4gc3RhdGljIHN0cnVjdCBkZW50cnkgKmxvb2t1cF9mYXN0X2Zvcl9vcGVuKHN0cnVjdCBuYW1laWRhdGEgKm5kLCBpbnQgb3Blbl9mbGFnKVxuIHtcbiBcdHN0cnVjdCBkZW50cnkgKmRlbnRyeTtcbiBcbiBcdGlmIChvcGVuX2ZsYWcgXHUwMDI2IE9fQ1JFQVQpIHtcbi1cdFx0aWYgKHRyYWlsaW5nX3NsYXNoZXMobmQpKVxuJiM0MztcdFx0aWYgKHRyYWlsaW5nX3NsYXNoZXMobmQtXHUwMDNlbGFzdCkgXHUwMDI2XHUwMDI2ICEob3Blbl9mbGFnIFx1MDAyNiBPX0RJUkVDVE9SWSkpXG4gXHRcdFx0cmV0dXJuIEVSUl9QVFIoLUVJU0RJUik7XG4gXG4gXHRcdC8qIERvbiYjMzk7dCBib3RoZXIgb24gYW4gT19FWENMIGNyZWF0ZSAqL1xuQEAgLTQ1MzksNyAmIzQzOzQ2MzQsNyBAQCBzdGF0aWMgc3RydWN0IGRlbnRyeSAqbG9va3VwX2Zhc3RfZm9yX29wZW4oc3RydWN0IG5hbWVpZGF0YSAqbmQsIGludCBvcGVuX2ZsYWcpXG4gXHRcdFx0cmV0dXJuIE5VTEw7XG4gXHR9XG4gXG4tXHRpZiAodHJhaWxpbmdfc2xhc2hlcyhuZCkpXG4mIzQzO1x0aWYgKHRyYWlsaW5nX3NsYXNoZXMobmQtXHUwMDNlbGFzdCkpXG4gXHRcdG5kLVx1MDAzZWZsYWdzIHw9IExPT0tVUF9GT0xMT1cgfCBMT09LVVBfRElSRUNUT1JZO1xuIFxuIFx0ZGVudHJ5ID0gbG9va3VwX2Zhc3QobmQpO1xuQEAgLTQ2MDIsMTYgJiM0Mzs0Njk3LDEyIEBAIHN0YXRpYyBjb25zdCBjaGFyICpvcGVuX2xhc3RfbG9va3VwcyhzdHJ1Y3QgbmFtZWlkYXRhICpuZCxcbiBcdFx0ICovXG4gXHR9XG4gXHRpZiAob3Blbl9mbGFnIFx1MDAyNiBPX0NSRUFUKVxuLVx0XHRpbm9kZV9sb2NrKGRpci1cdTAwM2VkX2lub2RlKTtcbiYjNDM7XHRcdGlub2RlX2xvY2tfbmVzdGVkKGRpci1cdTAwM2VkX2lub2RlLCBJX01VVEVYX1BBUkVOVCk7XG4gXHRlbHNlXG4gXHRcdGlub2RlX2xvY2tfc2hhcmVkKGRpci1cdTAwM2VkX2lub2RlKTtcbiYjNDM7XG4gXHRkZW50cnkgPSBsb29rdXBfb3BlbihuZCwgZmlsZSwgb3AsIGdvdF93cml0ZSwgXHUwMDI2ZGVsZWdhdGVkX2lub2RlKTtcbi1cdGlmICghSVNfRVJSKGRlbnRyeSkpIHtcbi1cdFx0aWYgKGZpbGUtXHUwMDNlZl9tb2RlIFx1MDAyNiBGTU9ERV9DUkVBVEVEKVxuLVx0XHRcdGZzbm90aWZ5X2NyZWF0ZShkaXItXHUwMDNlZF9pbm9kZSwgZGVudHJ5KTtcbi1cdFx0aWYgKGZpbGUtXHUwMDNlZl9tb2RlIFx1MDAyNiBGTU9ERV9PUEVORUQpXG4tXHRcdFx0ZnNub3RpZnlfb3BlbihmaWxlKTtcbi1cdH1cbiYjNDM7XG4gXHRpZiAob3Blbl9mbGFnIFx1MDAyNiBPX0NSRUFUKVxuIFx0XHRpbm9kZV91bmxvY2soZGlyLVx1MDAzZWRfaW5vZGUpO1xuIFx0ZWxzZVxuQEAgLTQ2NjksOCAmIzQzOzQ3NjAsOSBAQCBzdGF0aWMgaW50IGRvX29wZW4oc3RydWN0IG5hbWVpZGF0YSAqbmQsXG4gXHRpZiAob3Blbl9mbGFnIFx1MDAyNiBPX0NSRUFUKSB7XG4gXHRcdGlmICgob3Blbl9mbGFnIFx1MDAyNiBPX0VYQ0wpIFx1MDAyNlx1MDAyNiAhKGZpbGUtXHUwMDNlZl9tb2RlIFx1MDAyNiBGTU9ERV9DUkVBVEVEKSlcbiBcdFx0XHRyZXR1cm4gLUVFWElTVDtcbi1cdFx0aWYgKGRfaXNfZGlyKG5kLVx1MDAzZXBhdGguZGVudHJ5KSlcbiYjNDM7XHRcdGlmICghKG9wZW5fZmxhZyBcdTAwMjYgT19ESVJFQ1RPUlkpIFx1MDAyNlx1MDAyNiBkX2lzX2RpcihuZC1cdTAwM2VwYXRoLmRlbnRyeSkpXG4gXHRcdFx0cmV0dXJuIC1FSVNESVI7XG4mIzQzO1xuIFx0XHRlcnJvciA9IG1heV9jcmVhdGVfaW5fc3RpY2t5KGlkbWFwLCBuZCxcbiBcdFx0XHRcdFx0ICAgICBkX2JhY2tpbmdfaW5vZGUobmQtXHUwMDNlcGF0aC5kZW50cnkpKTtcbiBcdFx0aWYgKHVubGlrZWx5KGVycm9yKSlcbkBAIC00OTUwLDcgJiM0Mzs1MDQyLDcgQEAgc3RhdGljIHN0cnVjdCBkZW50cnkgKmZpbGVuYW1lX2NyZWF0ZShpbnQgZGZkLCBzdHJ1Y3QgZmlsZW5hbWUgKm5hbWUsXG4gXHQgKiBEbyB0aGUgZmluYWwgbG9va3VwLiAgU3VwcHJlc3MgJiMzOTtjcmVhdGUmIzM5OyBpZiB0aGVyZSBpcyBhIHRyYWlsaW5nXG4gXHQgKiAmIzM5Oy8mIzM5OywgYW5kIGEgZGlyZWN0b3J5IHdhc24mIzM5O3QgcmVxdWVzdGVkLlxuIFx0ICovXG4tXHRpZiAobGFzdC5uYW1lW2xhc3QubGVuXSBcdTAwMjZcdTAwMjYgIXdhbnRfZGlyKVxuJiM0MztcdGlmICh0cmFpbGluZ19zbGFzaGVzKGxhc3QpIFx1MDAyNlx1MDAyNiAhd2FudF9kaXIpXG4gXHRcdGNyZWF0ZV9mbGFncyBcdTAwMjY9IH5MT09LVVBfQ1JFQVRFO1xuIFx0ZGVudHJ5ID0gc3RhcnRfZGlyb3AocGF0aC1cdTAwM2VkZW50cnksIFx1MDAyNmxhc3QsIHJldmFsX2ZsYWcgfCBjcmVhdGVfZmxhZ3MpO1xuIFx0aWYgKElTX0VSUihkZW50cnkpKVxuQEAgLTUwNDUsMTMgJiM0Mzs1MTM3LDEzIEBAIHN0cnVjdCBmaWxlICpkZW50cnlfY3JlYXRlKHN0cnVjdCBwYXRoICpwYXRoLCBpbnQgZmxhZ3MsIHVtb2RlX3QgbW9kZSxcbiBcdFx0cGF0aC1cdTAwM2VkZW50cnkgPSBkaXI7XG4gXHRcdG1vZGUgPSB2ZnNfcHJlcGFyZV9tb2RlKGlkbWFwLCBkaXJfaW5vZGUsIG1vZGUsIFNfSUFMTFVHTywgU19JRlJFRyk7XG4gXG4tXHRcdGNyZWF0ZV9lcnJvciA9IG1heV9vX2NyZWF0ZShpZG1hcCwgcGF0aCwgZGVudHJ5LCBtb2RlKTtcbiYjNDM7XHRcdGNyZWF0ZV9lcnJvciA9IG1heV9vX2NyZWF0ZShpZG1hcCwgcGF0aCwgZGVudHJ5LCBtb2RlLCAvKmNyZWF0ZV9kaXI9Ki8gZmFsc2UpO1xuIFx0XHRpZiAoY3JlYXRlX2Vycm9yKVxuIFx0XHRcdGZsYWdzIFx1MDAyNj0gfk9fQ1JFQVQ7XG4gXG4gXHRcdC8qIGF0b21pY19vcGVuIHdpbGwgZHB1dChkZW50cnkpIG9uIGVycm9yICovXG4gXHRcdGRnZXQob3JpZ19kZW50cnkpO1xuLVx0XHRkZW50cnkgPSBhdG9taWNfb3BlbihwYXRoLCBkZW50cnksIGZpbGUsIGZsYWdzLCBtb2RlKTtcbiYjNDM7XHRcdGRlbnRyeSA9IGF0b21pY19vcGVuKHBhdGgsIGRlbnRyeSwgZmlsZSwgZmxhZ3MsIG1vZGUsIGNyZWF0ZV9lcnJvcik7XG4gXHRcdGVycm9yID0gUFRSX0VSUl9PUl9aRVJPKGRlbnRyeSk7XG4gXG4gXHRcdGlmIChJU19FUlIoZGVudHJ5KSlcbkBAIC01MDY0LDEzICYjNDM7NTE1Niw2IEBAIHN0cnVjdCBmaWxlICpkZW50cnlfY3JlYXRlKHN0cnVjdCBwYXRoICpwYXRoLCBpbnQgZmxhZ3MsIHVtb2RlX3QgbW9kZSxcbiBcdFx0aWYgKHVubGlrZWx5KGNyZWF0ZV9lcnJvcikgXHUwMDI2XHUwMDI2IGVycm9yID09IC1FTk9FTlQpXG4gXHRcdFx0ZXJyb3IgPSBjcmVhdGVfZXJyb3I7XG4gXG4tXHRcdGlmICghZXJyb3IpIHtcbi1cdFx0XHRpZiAoZmlsZS1cdTAwM2VmX21vZGUgXHUwMDI2IEZNT0RFX0NSRUFURUQpXG4tXHRcdFx0XHRmc25vdGlmeV9jcmVhdGUoZGlyLVx1MDAzZWRfaW5vZGUsIGRlbnRyeSk7XG4tXHRcdFx0aWYgKGZpbGUtXHUwMDNlZl9tb2RlIFx1MDAyNiBGTU9ERV9PUEVORUQpXG4tXHRcdFx0XHRmc25vdGlmeV9vcGVuKGZpbGUpO1xuLVx0XHR9XG4tXG4gXHRcdHBhdGgtXHUwMDNlZGVudHJ5ID0gZGVudHJ5O1xuIFxuIFx0fSBlbHNlIHtcbkBAIC01MjIyLDYgJiM0Mzs1MzA3LDM5IEBAIFNZU0NBTExfREVGSU5FMyhta25vZCwgY29uc3QgY2hhciBfX3VzZXIgKiwgZmlsZW5hbWUsIHVtb2RlX3QsIG1vZGUsIHVuc2lnbmVkLCBkXG4gXHRyZXR1cm4gZmlsZW5hbWVfbWtub2RhdChBVF9GRENXRCwgbmFtZSwgbW9kZSwgZGV2KTtcbiB9XG4gXG4mIzQzO3N0YXRpYyBpbmxpbmVcbiYjNDM7c3RydWN0IGRlbnRyeSAqdmZzX21rZGlyX25vX3Blcm0oc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuJiM0MztcdFx0XHRcdCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSxcbiYjNDM7XHRcdFx0XHQgc3RydWN0IGRlbGVnYXRlZF9pbm9kZSAqZGkpXG4mIzQzO3tcbiYjNDM7XHRpbnQgZXJyb3I7XG4mIzQzO1x0c3RydWN0IGRlbnRyeSAqZGU7XG4mIzQzO1x0dW5zaWduZWQgbWF4X2xpbmtzID0gZGlyLVx1MDAzZWlfc2ItXHUwMDNlc19tYXhfbGlua3M7XG4mIzQzO1xuJiM0MztcdGVycm9yID0gLUVNTElOSztcbiYjNDM7XHRpZiAobWF4X2xpbmtzIFx1MDAyNlx1MDAyNiBkaXItXHUwMDNlaV9ubGluayBcdTAwM2U9IG1heF9saW5rcylcbiYjNDM7XHRcdGdvdG8gZXJyO1xuJiM0MztcbiYjNDM7XHRlcnJvciA9IHRyeV9icmVha19kZWxlZyhkaXIsIExFQVNFX0JSRUFLX0RJUl9DUkVBVEUsIGRpKTtcbiYjNDM7XHRpZiAoZXJyb3IpXG4mIzQzO1x0XHRnb3RvIGVycjtcbiYjNDM7XG4mIzQzO1x0ZGUgPSBkaXItXHUwMDNlaV9vcC1cdTAwM2Vta2RpcihpZG1hcCwgZGlyLCBkZW50cnksIG1vZGUpO1xuJiM0MztcdGlmIChJU19FUlIoZGUpKSB7XG4mIzQzO1x0XHRlcnJvciA9IFBUUl9FUlIoZGUpO1xuJiM0MztcdFx0Z290byBlcnI7XG4mIzQzO1x0fVxuJiM0MztcdGlmIChkZSkge1xuJiM0MztcdFx0ZHB1dChkZW50cnkpO1xuJiM0MztcdFx0ZGVudHJ5ID0gZGU7XG4mIzQzO1x0fVxuJiM0MztcdGZzbm90aWZ5X21rZGlyKGRpciwgZGVudHJ5KTtcbiYjNDM7XHRyZXR1cm4gZGVudHJ5O1xuJiM0MztcbiYjNDM7ZXJyOlxuJiM0MztcdHJldHVybiBFUlJfUFRSKGVycm9yKTtcbiYjNDM7fVxuJiM0MztcbiAvKipcbiAgKiB2ZnNfbWtkaXIgLSBjcmVhdGUgZGlyZWN0b3J5IHJldHVybmluZyBjb3JyZWN0IGRlbnRyeSBpZiBwb3NzaWJsZVxuICAqIEBpZG1hcDpcdFx0aWRtYXAgb2YgdGhlIG1vdW50IHRoZSBpbm9kZSB3YXMgZm91bmQgZnJvbVxuQEAgLTUyNDksNyAmIzQzOzUzNjcsNiBAQCBzdHJ1Y3QgZGVudHJ5ICp2ZnNfbWtkaXIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuIFx0XHRcdCBzdHJ1Y3QgZGVsZWdhdGVkX2lub2RlICpkZWxlZ2F0ZWRfaW5vZGUpXG4ge1xuIFx0aW50IGVycm9yO1xuLVx0dW5zaWduZWQgbWF4X2xpbmtzID0gZGlyLVx1MDAzZWlfc2ItXHUwMDNlc19tYXhfbGlua3M7XG4gXHRzdHJ1Y3QgZGVudHJ5ICpkZTtcbiBcbiBcdGVycm9yID0gbWF5X2NyZWF0ZV9kZW50cnkoaWRtYXAsIGRpciwgZGVudHJ5KTtcbkBAIC01MjY1LDI0ICYjNDM7NTM4MiwxMiBAQCBzdHJ1Y3QgZGVudHJ5ICp2ZnNfbWtkaXIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuIFx0aWYgKGVycm9yKVxuIFx0XHRnb3RvIGVycjtcbiBcbi1cdGVycm9yID0gLUVNTElOSztcbi1cdGlmIChtYXhfbGlua3MgXHUwMDI2XHUwMDI2IGRpci1cdTAwM2VpX25saW5rIFx1MDAzZT0gbWF4X2xpbmtzKVxuLVx0XHRnb3RvIGVycjtcbi1cbi1cdGVycm9yID0gdHJ5X2JyZWFrX2RlbGVnKGRpciwgTEVBU0VfQlJFQUtfRElSX0NSRUFURSwgZGVsZWdhdGVkX2lub2RlKTtcbi1cdGlmIChlcnJvcilcbi1cdFx0Z290byBlcnI7XG4tXG4tXHRkZSA9IGRpci1cdTAwM2VpX29wLVx1MDAzZW1rZGlyKGlkbWFwLCBkaXIsIGRlbnRyeSwgbW9kZSk7XG4tXHRlcnJvciA9IFBUUl9FUlIoZGUpO1xuLVx0aWYgKElTX0VSUihkZSkpXG4mIzQzO1x0ZGUgPSB2ZnNfbWtkaXJfbm9fcGVybShpZG1hcCwgZGlyLCBkZW50cnksIG1vZGUsIGRlbGVnYXRlZF9pbm9kZSk7XG4mIzQzO1x0aWYgKElTX0VSUihkZSkpIHtcbiYjNDM7XHRcdGVycm9yID0gUFRSX0VSUihkZSk7XG4gXHRcdGdvdG8gZXJyO1xuLVx0aWYgKGRlKSB7XG4tXHRcdGRwdXQoZGVudHJ5KTtcbi1cdFx0ZGVudHJ5ID0gZGU7XG4gXHR9XG4tXHRmc25vdGlmeV9ta2RpcihkaXIsIGRlbnRyeSk7XG4tXHRyZXR1cm4gZGVudHJ5O1xuJiM0MztcdHJldHVybiBkZTtcbiBcbiBlcnI6XG4gXHRlbmRfY3JlYXRpbmcoZGVudHJ5KTtcbkBAIC01NTY5LDcgJiM0Mzs1Njc0LDcgQEAgaW50IGZpbGVuYW1lX3VubGlua2F0KGludCBkZmQsIHN0cnVjdCBmaWxlbmFtZSAqbmFtZSlcbiBcdFx0Z290byBleGl0X2Ryb3Bfd3JpdGU7XG4gXG4gXHQvKiBXaHkgbm90IGJlZm9yZT8gQmVjYXVzZSB3ZSB3YW50IGNvcnJlY3QgZXJyb3IgdmFsdWUgKi9cbi1cdGlmICh1bmxpa2VseShsYXN0Lm5hbWVbbGFzdC5sZW5dKSkge1xuJiM0MztcdGlmICh1bmxpa2VseSh0cmFpbGluZ19zbGFzaGVzKGxhc3QpKSkge1xuIFx0XHRpZiAoZF9pc19kaXIoZGVudHJ5KSlcbiBcdFx0XHRlcnJvciA9IC1FSVNESVI7XG4gXHRcdGVsc2VcbkBAIC02MTcxLDE2ICYjNDM7NjI3NiwxNiBAQCBpbnQgZmlsZW5hbWVfcmVuYW1lYXQyKGludCBvbGRkZmQsIHN0cnVjdCBmaWxlbmFtZSAqZnJvbSxcbiBcdGlmIChmbGFncyBcdTAwMjYgUkVOQU1FX0VYQ0hBTkdFKSB7XG4gXHRcdGlmICghZF9pc19kaXIocmQubmV3X2RlbnRyeSkpIHtcbiBcdFx0XHRlcnJvciA9IC1FTk9URElSO1xuLVx0XHRcdGlmIChuZXdfbGFzdC5uYW1lW25ld19sYXN0Lmxlbl0pXG4mIzQzO1x0XHRcdGlmICh0cmFpbGluZ19zbGFzaGVzKG5ld19sYXN0KSlcbiBcdFx0XHRcdGdvdG8gZXhpdF91bmxvY2s7XG4gXHRcdH1cbiBcdH1cbiBcdC8qIHVubGVzcyB0aGUgc291cmNlIGlzIGEgZGlyZWN0b3J5IHRyYWlsaW5nIHNsYXNoZXMgZ2l2ZSAtRU5PVERJUiAqL1xuIFx0aWYgKCFkX2lzX2RpcihyZC5vbGRfZGVudHJ5KSkge1xuIFx0XHRlcnJvciA9IC1FTk9URElSO1xuLVx0XHRpZiAob2xkX2xhc3QubmFtZVtvbGRfbGFzdC5sZW5dKVxuJiM0MztcdFx0aWYgKHRyYWlsaW5nX3NsYXNoZXMob2xkX2xhc3QpKVxuIFx0XHRcdGdvdG8gZXhpdF91bmxvY2s7XG4tXHRcdGlmICghKGZsYWdzIFx1MDAyNiBSRU5BTUVfRVhDSEFOR0UpIFx1MDAyNlx1MDAyNiBuZXdfbGFzdC5uYW1lW25ld19sYXN0Lmxlbl0pXG4mIzQzO1x0XHRpZiAoIShmbGFncyBcdTAwMjYgUkVOQU1FX0VYQ0hBTkdFKSBcdTAwMjZcdTAwMjYgdHJhaWxpbmdfc2xhc2hlcyhuZXdfbGFzdCkpXG4gXHRcdFx0Z290byBleGl0X3VubG9jaztcbiBcdH1cbiBcbmRpZmYgLS1naXQgYS9mcy9uZnMvZGlyLmMgYi9mcy9uZnMvZGlyLmNcbmluZGV4IGM3YjcyM2MxODYyMGM5Li5jODE1ZDlhYTliNjlkYSAxMDA2NDRcbi0tLSBhL2ZzL25mcy9kaXIuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvbmZzL2Rpci5jXG5AQCAtMjEyMSw2ICYjNDM7MjEyMSw5IEBAIGludCBuZnNfYXRvbWljX29wZW4oc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcbiBcdGRmcHJpbnRrKFZGUywgXCYjMzQ7TkZTOiBhdG9taWNfb3Blbiglcy8lbGx1KSwgJXBkXFxuXCYjMzQ7LFxuIFx0XHRcdGRpci1cdTAwM2VpX3NiLVx1MDAzZXNfaWQsIGRpci1cdTAwM2VpX2lubywgZGVudHJ5KTtcbiBcbiYjNDM7XHRpZiAoT19JU19NS0RJUihvcGVuX2ZsYWdzKSlcbiYjNDM7XHRcdG9wZW5fZmxhZ3MgXHUwMDI2PSB+T19DUkVBVDtcbiYjNDM7XG4gXHRlcnIgPSBuZnNfY2hlY2tfZmxhZ3Mob3Blbl9mbGFncyk7XG4gXHRpZiAoZXJyKVxuIFx0XHRyZXR1cm4gZXJyO1xuQEAgLTIzMTMsNiAmIzQzOzIzMTYsOSBAQCBpbnQgbmZzX2F0b21pY19vcGVuX3YyMyhzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxuIFx0ICovXG4gXHRpbnQgZXJyb3IgPSAwO1xuIFxuJiM0MztcdGlmIChPX0lTX01LRElSKG9wZW5fZmxhZ3MpKVxuJiM0MztcdFx0b3Blbl9mbGFncyBcdTAwMjY9IH5PX0NSRUFUO1xuJiM0MztcbiBcdGlmIChkZW50cnktXHUwMDNlZF9uYW1lLmxlbiBcdTAwM2UgTkZTX1NFUlZFUihkaXIpLVx1MDAzZW5hbWVsZW4pXG4gXHRcdHJldHVybiAtRU5BTUVUT09MT05HO1xuIFxuZGlmZiAtLWdpdCBhL2ZzL29wZW4uYyBiL2ZzL29wZW4uY1xuaW5kZXggNDA4OTI1ZDdiZDBiNzcuLjg3ZTg4NjRkOTQ4MDg3IDEwMDY0NFxuLS0tIGEvZnMvb3Blbi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9vcGVuLmNcbkBAIC0xMTkwLDI5ICYjNDM7MTE5MCwzMCBAQCBpbmxpbmUgaW50IGJ1aWxkX29wZW5fZmxhZ3MoY29uc3Qgc3RydWN0IG9wZW5faG93ICpob3csIHN0cnVjdCBvcGVuX2ZsYWdzICpvcClcbiBcdGlmIChXSUxMX0NSRUFURShmbGFncykpIHtcbiBcdFx0aWYgKGhvdy1cdTAwM2Vtb2RlIFx1MDAyNiB+U19JQUxMVUdPKVxuIFx0XHRcdHJldHVybiAtRUlOVkFMO1xuLVx0XHRvcC1cdTAwM2Vtb2RlID0gaG93LVx1MDAzZW1vZGUgfCBTX0lGUkVHO1xuJiM0MztcdFx0aWYgKE9fSVNfTUtESVIoZmxhZ3MpKVxuJiM0MztcdFx0XHRvcC1cdTAwM2Vtb2RlID0gaG93LVx1MDAzZW1vZGUgfCBTX0lGRElSO1xuJiM0MztcdFx0ZWxzZVxuJiM0MztcdFx0XHRvcC1cdTAwM2Vtb2RlID0gaG93LVx1MDAzZW1vZGUgfCBTX0lGUkVHO1xuIFx0fSBlbHNlIHtcbiBcdFx0aWYgKGhvdy1cdTAwM2Vtb2RlICE9IDApXG4gXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHRcdG9wLVx1MDAzZW1vZGUgPSAwO1xuIFx0fVxuIFxuLVx0Lypcbi1cdCAqIEJsb2NrIGJ1Z3Mgd2hlcmUgT19ESVJFQ1RPUlkgfCBPX0NSRUFUIGNyZWF0ZWQgcmVndWxhciBmaWxlcy5cbi1cdCAqIE5vdGUsIHRoYXQgYmxvY2tpbmcgT19ESVJFQ1RPUlkgfCBPX0NSRUFUIGhlcmUgYWxzbyBwcm90ZWN0c1xuLVx0ICogT19UTVBGSUxFIGJlbG93IHdoaWNoIHJlcXVpcmVzIE9fRElSRUNUT1JZIGJlaW5nIHJhaXNlZC5cbi1cdCAqL1xuLVx0aWYgKChmbGFncyBcdTAwMjYgKE9fRElSRUNUT1JZIHwgT19DUkVBVCkpID09IChPX0RJUkVDVE9SWSB8IE9fQ1JFQVQpKVxuLVx0XHRyZXR1cm4gLUVJTlZBTDtcbi1cbiBcdC8qIE5vdyBoYW5kbGUgdGhlIGNyZWF0aXZlIGltcGxlbWVudGF0aW9uIG9mIE9fVE1QRklMRS4gKi9cbiBcdGlmIChmbGFncyBcdTAwMjYgX19PX1RNUEZJTEUpIHtcbiBcdFx0LypcbiBcdFx0ICogSW4gb3JkZXIgdG8gZW5zdXJlIHByb2dyYW1zIGdldCBleHBsaWNpdCBlcnJvcnMgd2hlbiB0cnlpbmdcbiBcdFx0ICogdG8gdXNlIE9fVE1QRklMRSBvbiBvbGQga2VybmVscyB3ZSBlbmZvcmNlIHRoYXQgT19ESVJFQ1RPUllcbi1cdFx0ICogaXMgcmFpc2VkIGFsb25nc2lkZSBfX09fVE1QRklMRS5cbiYjNDM7XHRcdCAqIGlzIHJhaXNlZCBhbG9uZ3NpZGUgX19PX1RNUEZJTEUsIGJ1dCB3aXRob3V0IE9fQ1JFQVQuIFRoZVxuJiM0MztcdFx0ICogcmVhc29uIGZvciBkaXNhbGxvd2luZyBPX0NSRUFUfE9fVE1QRklMRSBpcyB0aGF0XG4mIzQzO1x0XHQgKiBPX0RJUkVDVE9SWXxPX0NSRUFUIHVzZWQgdG8gd29yayBhbmQgY3JlYXRlZCBhIHJlZ3VsYXIgZmlsZVxuJiM0MztcdFx0ICogaWYgbm90aGluZyBleGlzdGVkIGF0IHRoZSBvcGVuIHBhdGguIEhlbmNlLCBhbGxvd2luZyB0aGVcbiYjNDM7XHRcdCAqIGNvbWJpbmF0aW9uIHdvdWxkIGhhdmUgY2F1c2VkIE9fQ1JFQVR8T19UTVBGSUxFIHRvIGNyZWF0ZSBhXG4mIzQzO1x0XHQgKiByZWd1bGFyIChub24tdGVtcG9yYXJ5KSBmaWxlIG9uIG9sZCBrZXJuZWxzLCB3aGlsZSB0aGUgY2FsbGVyXG4mIzQzO1x0XHQgKiB3b3VsZCBiZWxpZXZlIHRoZXkgY3JlYXRlZCBhbiBhY3R1YWwgT19UTVBGSUxFLlxuIFx0XHQgKi9cbi1cdFx0aWYgKCEoZmxhZ3MgXHUwMDI2IE9fRElSRUNUT1JZKSlcbiYjNDM7XHRcdGlmICghKGZsYWdzIFx1MDAyNiBPX0RJUkVDVE9SWSkgfHwgKGZsYWdzIFx1MDAyNiBPX0NSRUFUKSlcbiBcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdFx0aWYgKCEoYWNjX21vZGUgXHUwMDI2IE1BWV9XUklURSkpXG4gXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG5AQCAtMTI2OSw2ICYjNDM7MTI3MCwxNSBAQCBpbmxpbmUgaW50IGJ1aWxkX29wZW5fZmxhZ3MoY29uc3Qgc3RydWN0IG9wZW5faG93ICpob3csIHN0cnVjdCBvcGVuX2ZsYWdzICpvcClcbiBcbiBcdG9wLVx1MDAzZWludGVudCA9IGZsYWdzIFx1MDAyNiBPX1BBVEggPyAwIDogTE9PS1VQX09QRU47XG4gXG4mIzQzO1x0LypcbiYjNDM7XHQgKiBSZXF1ZXN0aW5nIHdyaXRlIGFjY2VzcyBvbiBhIGRpcmVjdG9yeSBjYW4gbmV2ZXIgc3VjY2VlZC4gUmF0aGVyXG4mIzQzO1x0ICogdGhhbiBwZXJmb3JtaW5nIGEgcGF0aC13YWxrIHRvIGRldGVybWluZSB3aGV0aGVyIHRoZSB0YXJnZXQgaXNcbiYjNDM7XHQgKiBhY3R1YWxseSBhIGRpcmVjdG9yeSAoLUVJU0RJUikgb3Igbm90ICgtRU5PVERJUiksIHdlIHNob3J0LWNpcmN1aXRcbiYjNDM7XHQgKiB0byAtRU5PVERJUi5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAoKGZsYWdzIFx1MDAyNiBPX0RJUkVDVE9SWSkgXHUwMDI2XHUwMDI2ICEoZmxhZ3MgXHUwMDI2IF9fT19UTVBGSUxFKSBcdTAwMjZcdTAwMjYgKGFjY19tb2RlIFx1MDAyNiBNQVlfV1JJVEUpKVxuJiM0MztcdFx0cmV0dXJuIC1FTk9URElSO1xuJiM0MztcbiBcdGlmIChmbGFncyBcdTAwMjYgT19DUkVBVCkge1xuIFx0XHRvcC1cdTAwM2VpbnRlbnQgfD0gTE9PS1VQX0NSRUFURTtcbiBcdFx0aWYgKGZsYWdzIFx1MDAyNiBPX0VYQ0wpIHtcbmRpZmYgLS1naXQgYS9mcy9zbWIvY2xpZW50L2Rpci5jIGIvZnMvc21iL2NsaWVudC9kaXIuY1xuaW5kZXggODhhNGExNzg3ZmYwNDcuLjc1YmY4NmNjMDYxMjJlIDEwMDY0NFxuLS0tIGEvZnMvc21iL2NsaWVudC9kaXIuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvc21iL2NsaWVudC9kaXIuY1xuQEAgLTUzOCw2ICYjNDM7NTM4LDkgQEAgaW50IGNpZnNfYXRvbWljX29wZW4oc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRpcmVudHJ5LFxuIFx0aWYgKHVubGlrZWx5KGNpZnNfZm9yY2VkX3NodXRkb3duKGNpZnNfc2IpKSlcbiBcdFx0cmV0dXJuIHNtYl9FSU8oc21iX2Vpb190cmFjZV9mb3JjZWRfc2h1dGRvd24pO1xuIFxuJiM0MztcdGlmIChPX0lTX01LRElSKG9mbGFncykpXG4mIzQzO1x0XHRvZmxhZ3MgXHUwMDI2PSB+T19DUkVBVDtcbiYjNDM7XG4gXHQvKlxuIFx0ICogUG9zaXggb3BlbiBpcyBvbmx5IGNhbGxlZCAoYXQgbG9va3VwIHRpbWUpIGZvciBmaWxlIGNyZWF0ZSBub3cuIEZvclxuIFx0ICogb3BlbnMgKHJhdGhlciB0aGFuIGNyZWF0ZXMpLCBiZWNhdXNlIHdlIGRvIG5vdCBrbm93IGlmIGl0IGlzIGEgZmlsZVxuZGlmZiAtLWdpdCBhL2ZzL3Zib3hzZi9kaXIuYyBiL2ZzL3Zib3hzZi9kaXIuY1xuaW5kZXggYzViZDMyNzFhYTk2MTYuLjc3YWUyZjY5NmZkNDM3IDEwMDY0NFxuLS0tIGEvZnMvdmJveHNmL2Rpci5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy92Ym94c2YvZGlyLmNcbkBAIC0zMTgsNiAmIzQzOzMxOCw5IEBAIHN0YXRpYyBpbnQgdmJveHNmX2Rpcl9hdG9taWNfb3BlbihzdHJ1Y3QgaW5vZGUgKnBhcmVudCwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxuIFx0dTY0IGhhbmRsZTtcbiBcdGludCBlcnI7XG4gXG4mIzQzO1x0aWYgKE9fSVNfTUtESVIoZmxhZ3MpKVxuJiM0MztcdFx0ZmxhZ3MgXHUwMDI2PSB+T19DUkVBVDtcbiYjNDM7XG4gXHRpZiAoZF9pbl9sb29rdXAoZGVudHJ5KSkge1xuIFx0XHRzdHJ1Y3QgZGVudHJ5ICpyZXMgPSB2Ym94c2ZfZGlyX2xvb2t1cChwYXJlbnQsIGRlbnRyeSwgMCk7XG4gXHRcdGlmIChyZXMgfHwgZF9yZWFsbHlfaXNfcG9zaXRpdmUoZGVudHJ5KSlcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2ZjbnRsLmggYi9pbmNsdWRlL2xpbnV4L2ZjbnRsLmhcbmluZGV4IDZhZDZiOWU3YTIyNmFmLi42Yjc1Mjc3YmU1NTlkZCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvZmNudGwuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9mY250bC5oXG5AQCAtMzAsNiAmIzQzOzMwLDEyIEBAXG4gICovXG4gI2RlZmluZSBfX09fUkVHVUxBUlx0XHQoMSBcdTAwM2NcdTAwM2MgMzApXG4gXG4mIzQzOyNkZWZpbmUgT19NS0RJUl9NQVNLXHQoT19DUkVBVCB8IE9fRElSRUNUT1JZKVxuJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgT19JU19NS0RJUih1bnNpZ25lZCBmbGFncylcbiYjNDM7e1xuJiM0MztcdHJldHVybiAoZmxhZ3MgXHUwMDI2IE9fTUtESVJfTUFTSykgPT0gT19NS0RJUl9NQVNLO1xuJiM0Mzt9XG4mIzQzO1xuIC8qIExpc3Qgb2YgYWxsIHZhbGlkIGZsYWdzIGZvciB0aGUgaG93LVx1MDAzZXJlc29sdmUgYXJndW1lbnQ6ICovXG4gI2RlZmluZSBWQUxJRF9SRVNPTFZFX0ZMQUdTIFxcXG4gXHQoUkVTT0xWRV9OT19YREVWIHwgUkVTT0xWRV9OT19NQUdJQ0xJTktTIHwgUkVTT0xWRV9OT19TWU1MSU5LUyB8IFxcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZmlsZXN5c3RlbXMvLmdpdGlnbm9yZSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2ZpbGVzeXN0ZW1zLy5naXRpZ25vcmVcbmluZGV4IGE3OGY4OTQxNTdkZTMzLi5kNzc5YTc5NDVjZjgwMyAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2ZpbGVzeXN0ZW1zLy5naXRpZ25vcmVcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2ZpbGVzeXN0ZW1zLy5naXRpZ25vcmVcbkBAIC0xLDQgJiM0MzsxLDUgQEBcbiAjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiYjNDM7b3Blbl9vX2NyZWF0X29fZGlyXG4gZG5vdGlmeV90ZXN0XG4gZGV2cHRzX3B0c1xuIGZjbG9nXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZmlsZXN5c3RlbXMvTWFrZWZpbGUgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9maWxlc3lzdGVtcy9NYWtlZmlsZVxuaW5kZXggYTdlYzJiYTJkZDgzMzQuLmI2MDk1MGY4YjE1YzIxIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZmlsZXN5c3RlbXMvTWFrZWZpbGVcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2ZpbGVzeXN0ZW1zL01ha2VmaWxlXG5AQCAtMSw3ICYjNDM7MSw3IEBAXG4gIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuIFxuIENGTEFHUyAmIzQzOz0gJChLSERSX0lOQ0xVREVTKVxuLVRFU1RfR0VOX1BST0dTIDo9IGRldnB0c19wdHMgZmlsZV9zdHJlc3NvciBhbm9uX2lub2RlX3Rlc3Qga2VybmZzX3Rlc3QgZmNsb2dcbiYjNDM7VEVTVF9HRU5fUFJPR1MgOj0gb3Blbl9vX2NyZWF0X29fZGlyIGRldnB0c19wdHMgZmlsZV9zdHJlc3NvciBhbm9uX2lub2RlX3Rlc3Qga2VybmZzX3Rlc3QgZmNsb2dcbiBURVNUX0dFTl9QUk9HUyAmIzQzOz0gaWRtYXBwZWRfdG1wZmlsZVxuIFRFU1RfR0VOX1BST0dTX0VYVEVOREVEIDo9IGRub3RpZnlfdGVzdFxuIFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2ZpbGVzeXN0ZW1zL2ZjbG9nLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9maWxlc3lzdGVtcy9mY2xvZy5jXG5pbmRleCA1NTFjNGEwZjM5NWExMi4uNTkzYTUxMzZlOTkxOTIgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9maWxlc3lzdGVtcy9mY2xvZy5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9maWxlc3lzdGVtcy9mY2xvZy5jXG5AQCAtNiwxMCAmIzQzOzYsOCBAQFxuIFxuICNpbmNsdWRlIFx1MDAzY2Fzc2VydC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjZXJybm8uaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NmY250bC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjc2NoZWQuaFx1MDAzZVxuLSNpbmNsdWRlIFx1MDAzY3N0ZGlvLmhcdTAwM2Vcbi0jaW5jbHVkZSBcdTAwM2NzdGRsaWIuaFx1MDAzZVxuLSNpbmNsdWRlIFx1MDAzY3N0cmluZy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjdW5pc3RkLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NzeXMvbW91bnQuaFx1MDAzZVxuIFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2ZpbGVzeXN0ZW1zL29wZW5fb19jcmVhdF9vX2Rpci5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZmlsZXN5c3RlbXMvb3Blbl9vX2NyZWF0X29fZGlyLmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uZGYzY2RiYWUyYzg1MjRcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2ZpbGVzeXN0ZW1zL29wZW5fb19jcmVhdF9vX2Rpci5jXG5AQCAtMCwwICYjNDM7MSwxOTcgQEBcbiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiYjNDM7I2luY2x1ZGUgXHUwMDNjc3lzL3N0YXQuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NzeXMvc3lzY2FsbC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2Vycm5vLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGltaXRzLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjZmNudGwuaFx1MDAzZVxuJiM0MztcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7a3NlbGZ0ZXN0X2hhcm5lc3MuaFwmIzM0O1xuJiM0MztcbiYjNDM7c3RhdGljIGlubGluZSBpbnQgb3Blbl9vX2NyZWF0X29fZGlyKGludCBkZmQsIGNvbnN0IGNoYXIgKnBhdGhuYW1lLFxuJiM0MztcdFx0XHRcdCAgICAgbW9kZV90IG1vZGUsIHVuc2lnbmVkIGludCBmbGFncylcbiYjNDM7e1xuJiM0MztcdHJldHVybiBzeXNjYWxsKF9fTlJfb3BlbmF0LCBkZmQsIHBhdGhuYW1lLFxuJiM0MztcdFx0ICAgICAgIGZsYWdzIHwgT19ESVJFQ1RPUlkgfCBPX0NSRUFULCBtb2RlKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7I2RlZmluZSBvcGVuX29fY3JlYXRfb19kaXJfY2hlY2tlZF9mbGFncyhkZmQsIHBhdGhuYW1lLCBmbGFncykgKHtcdFxcXG4mIzQzO1x0c3RydWN0IHN0YXQgX19zdDtcdFx0XHRcdFx0XHRcXFxuJiM0MztcdGludCBfX2ZkID0gb3Blbl9vX2NyZWF0X29fZGlyKGRmZCwgcGF0aG5hbWUsIFNfSVJXWFUsIGZsYWdzKTtcdFxcXG4mIzQzO1x0QVNTRVJUX0dFKF9fZmQsIDApO1x0XHRcdFx0XHRcdFxcXG4mIzQzO1x0QVNTRVJUX0VRKGZzdGF0KF9fZmQsIFx1MDAyNl9fc3QpLCAwKTtcdFx0XHRcdFxcXG4mIzQzO1x0RVhQRUNUX1RSVUUoU19JU0RJUihfX3N0LnN0X21vZGUpKTtcdFx0XHRcdFxcXG4mIzQzO1x0X19mZDtcdFx0XHRcdFx0XHRcdFx0XFxcbiYjNDM7fSlcbiYjNDM7XG4mIzQzOyNkZWZpbmUgb3Blbl9vX2NyZWF0X29fZGlyX2NoZWNrZWQoZGZkLCBwYXRobmFtZSkgXFxcbiYjNDM7XHRvcGVuX29fY3JlYXRfb19kaXJfY2hlY2tlZF9mbGFncyhkZmQsIHBhdGhuYW1lLCAwKVxuJiM0MztcbiYjNDM7RklYVFVSRShvcGVuX29fY3JlYXRfb19kaXIpIHtcbiYjNDM7XHRjaGFyIGRpcnBhdGhbUEFUSF9NQVhdO1xuJiM0MztcdGludCBkZmQ7XG4mIzQzO307XG4mIzQzO1xuJiM0MztGSVhUVVJFX1NFVFVQKG9wZW5fb19jcmVhdF9vX2RpcilcbiYjNDM7e1xuJiM0MztcdHN0cmNweShzZWxmLVx1MDAzZWRpcnBhdGgsIFwmIzM0Oy90bXAvb3Blbl9vX2NyZWF0X29fZGlyX3Rlc3QuWFhYWFhYXCYjMzQ7KTtcbiYjNDM7XHRBU1NFUlRfTkUobWtkdGVtcChzZWxmLVx1MDAzZWRpcnBhdGgpLCBOVUxMKTtcbiYjNDM7XHRzZWxmLVx1MDAzZWRmZCA9IG9wZW4oc2VsZi1cdTAwM2VkaXJwYXRoLCBPX0RJUkVDVE9SWSk7XG4mIzQzO1x0QVNTRVJUX0dFKHNlbGYtXHUwMDNlZGZkLCAwKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7RklYVFVSRV9URUFSRE9XTihvcGVuX29fY3JlYXRfb19kaXIpXG4mIzQzO3tcbiYjNDM7XHRjbG9zZShzZWxmLVx1MDAzZWRmZCk7XG4mIzQzO1x0cm1kaXIoc2VsZi1cdTAwM2VkaXJwYXRoKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyogRG9lcyBvcGVuX29fY3JlYXRfb19kaXIgcmV0dXJuIGEgZmQgYXQgYWxsPyAqL1xuJiM0MztURVNUX0Yob3Blbl9vX2NyZWF0X29fZGlyLCByZXR1cm5zX2ZkKVxuJiM0Mzt7XG4mIzQzO1x0aW50IGZkID0gb3Blbl9vX2NyZWF0X29fZGlyX2NoZWNrZWQoc2VsZi1cdTAwM2VkZmQsIFwmIzM0O25ld2RpclwmIzM0Oyk7XG4mIzQzO1x0RVhQRUNUX0VRKGNsb3NlKGZkKSwgMCk7XG4mIzQzO1x0RVhQRUNUX0VRKHVubGlua2F0KHNlbGYtXHUwMDNlZGZkLCBcJiMzNDtuZXdkaXJcJiMzNDssIEFUX1JFTU9WRURJUiksIDApO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKiBUaGUgZmQgbXVzdCByZWZlciB0byB0aGUgZGlyZWN0b3J5IHRoYXQgd2FzIGp1c3QgY3JlYXRlZC4gKi9cbiYjNDM7VEVTVF9GKG9wZW5fb19jcmVhdF9vX2RpciwgZmRfaXNfY3JlYXRlZF9kaXIpXG4mIzQzO3tcbiYjNDM7XHRpbnQgZmQ7XG4mIzQzO1x0c3RydWN0IHN0YXQgc3RfdmlhX2ZkLCBzdF92aWFfcGF0aDtcbiYjNDM7XHRjaGFyIHBhdGhbUEFUSF9NQVhdO1xuJiM0MztcbiYjNDM7XHRmZCA9IG9wZW5fb19jcmVhdF9vX2Rpcl9jaGVja2VkKHNlbGYtXHUwMDNlZGZkLCBcJiMzNDtjaGVja2RpclwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdEFTU0VSVF9FUShmc3RhdChmZCwgXHUwMDI2c3RfdmlhX2ZkKSwgMCk7XG4mIzQzO1xuJiM0MztcdHNucHJpbnRmKHBhdGgsIHNpemVvZihwYXRoKSwgXCYjMzQ7JXMvY2hlY2tkaXJcJiMzNDssIHNlbGYtXHUwMDNlZGlycGF0aCk7XG4mIzQzO1x0QVNTRVJUX0VRKHN0YXQocGF0aCwgXHUwMDI2c3RfdmlhX3BhdGgpLCAwKTtcbiYjNDM7XG4mIzQzO1x0RVhQRUNUX0VRKHN0X3ZpYV9mZC5zdF9pbm8sIHN0X3ZpYV9wYXRoLnN0X2lubyk7XG4mIzQzO1x0RVhQRUNUX0VRKHN0X3ZpYV9mZC5zdF9kZXYsIHN0X3ZpYV9wYXRoLnN0X2Rldik7XG4mIzQzO1xuJiM0MztcdEVYUEVDVF9FUShjbG9zZShmZCksIDApO1xuJiM0MztcdEVYUEVDVF9FUShybWRpcihwYXRoKSwgMCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qIE1pc3NpbmcgcGFyZW50IGNvbXBvbmVudCBtdXN0IGZhaWwgd2l0aCBFTk9FTlQuICovXG4mIzQzO1RFU1RfRihvcGVuX29fY3JlYXRfb19kaXIsIGVub2VudF9taXNzaW5nX3BhcmVudClcbiYjNDM7e1xuJiM0MztcdEVYUEVDVF9FUShvcGVuX29fY3JlYXRfb19kaXIoc2VsZi1cdTAwM2VkZmQsIFwmIzM0O25vbmV4aXN0ZW50L2NoaWxkXCYjMzQ7LCBTX0lSV1hVLCAwKSwgLTEpO1xuJiM0MztcdEVYUEVDVF9FUShlcnJubywgRU5PRU5UKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyogQW4gaW52YWxpZCBkZmQgbXVzdCBmYWlsIHdpdGggRUJBREYuICovXG4mIzQzO1RFU1RfRihvcGVuX29fY3JlYXRfb19kaXIsIGViYWRmKVxuJiM0Mzt7XG4mIzQzO1x0RVhQRUNUX0VRKG9wZW5fb19jcmVhdF9vX2RpcigtNDIsIFwmIzM0O2JhZGZkaXJcJiMzNDssIFNfSVJXWFUsIDApLCAtMSk7XG4mIzQzO1x0RVhQRUNUX0VRKGVycm5vLCBFQkFERik7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qIEEgZGZkIHRoYXQgcG9pbnRzIHRvIGEgZmlsZSAobm90IGEgZGlyZWN0b3J5KSBtdXN0IGZhaWwgd2l0aCBFTk9URElSLiAqL1xuJiM0MztURVNUX0Yob3Blbl9vX2NyZWF0X29fZGlyLCBlbm90ZGlyX2RmZClcbiYjNDM7e1xuJiM0MztcdGludCBmaWxlX2ZkO1xuJiM0MztcbiYjNDM7XHRmaWxlX2ZkID0gb3BlbmF0KHNlbGYtXHUwMDNlZGZkLCBcJiMzNDtmaWxlXCYjMzQ7LFxuJiM0MztcdFx0XHQgT19DUkVBVCB8IE9fV1JPTkxZLCBTX0lSV1hVKTtcbiYjNDM7XHRBU1NFUlRfR0UoZmlsZV9mZCwgMCk7XG4mIzQzO1xuJiM0MztcdEVYUEVDVF9FUShvcGVuX29fY3JlYXRfb19kaXIoZmlsZV9mZCwgXCYjMzQ7c3ViZGlyXCYjMzQ7LCBTX0lSV1hVLCAwKSwgLTEpO1xuJiM0MztcdEVYUEVDVF9FUShlcnJubywgRU5PVERJUik7XG4mIzQzO1xuJiM0MztcdEVYUEVDVF9FUShjbG9zZShmaWxlX2ZkKSwgMCk7XG4mIzQzO1x0RVhQRUNUX0VRKHVubGlua2F0KHNlbGYtXHUwMDNlZGZkLCBcJiMzNDtmaWxlXCYjMzQ7LCAwKSwgMCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qXG4mIzQzOyAqIE9fRVhDTCB0b2dldGhlciB3aXRoIE9fQ1JFQVR8T19ESVJFQ1RPUlkgbXVzdCBmYWlsIHdpdGggRUVYSVNUIHdoZW5cbiYjNDM7ICogdGhlIHRhcmdldCBkaXJlY3RvcnkgYWxyZWFkeSBleGlzdHMuXG4mIzQzOyAqL1xuJiM0MztURVNUX0Yob3Blbl9vX2NyZWF0X29fZGlyLCBvX2V4Y2xfZWV4aXN0KVxuJiM0Mzt7XG4mIzQzO1x0aW50IGZkO1xuJiM0MztcbiYjNDM7XHRmZCA9IG9wZW5fb19jcmVhdF9vX2Rpcl9jaGVja2VkX2ZsYWdzKHNlbGYtXHUwMDNlZGZkLCBcJiMzNDtleGNsZGlyXCYjMzQ7LCBPX0VYQ0wpO1xuJiM0MztcdEVYUEVDVF9FUShjbG9zZShmZCksIDApO1xuJiM0MztcbiYjNDM7XHRFWFBFQ1RfRVEob3Blbl9vX2NyZWF0X29fZGlyKHNlbGYtXHUwMDNlZGZkLCBcJiMzNDtleGNsZGlyXCYjMzQ7LCBTX0lSV1hVLCBPX0VYQ0wpLCAtMSk7XG4mIzQzO1x0RVhQRUNUX0VRKGVycm5vLCBFRVhJU1QpO1xuJiM0MztcbiYjNDM7XHRFWFBFQ1RfRVEodW5saW5rYXQoc2VsZi1cdTAwM2VkZmQsIFwmIzM0O2V4Y2xkaXJcJiMzNDssIEFUX1JFTU9WRURJUiksIDApO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBPX0NSRUFUfE9fRElSRUNUT1JZIG9uIGEgcGF0aCB0aGF0IGFscmVhZHkgZXhpc3RzIGFzIGEgcmVndWxhciBmaWxlXG4mIzQzOyAqIG11c3QgZmFpbCB3aXRoIEVOT1RESVIuXG4mIzQzOyAqL1xuJiM0MztURVNUX0Yob3Blbl9vX2NyZWF0X29fZGlyLCBleGlzdGluZ19maWxlX2Vub3RkaXIpXG4mIzQzO3tcbiYjNDM7XHRpbnQgZmlsZV9mZDtcbiYjNDM7XG4mIzQzO1x0ZmlsZV9mZCA9IG9wZW5hdChzZWxmLVx1MDAzZWRmZCwgXCYjMzQ7cmVnZmlsZVwmIzM0OyxcbiYjNDM7XHRcdFx0IE9fQ1JFQVQgfCBPX1dST05MWSwgU19JUldYVSk7XG4mIzQzO1x0QVNTRVJUX0dFKGZpbGVfZmQsIDApO1xuJiM0MztcdEVYUEVDVF9FUShjbG9zZShmaWxlX2ZkKSwgMCk7XG4mIzQzO1xuJiM0MztcdEVYUEVDVF9FUShvcGVuX29fY3JlYXRfb19kaXIoc2VsZi1cdTAwM2VkZmQsIFwmIzM0O3JlZ2ZpbGVcJiMzNDssIFNfSVJXWFUsIDApLCAtMSk7XG4mIzQzO1x0RVhQRUNUX0VRKGVycm5vLCBFTk9URElSKTtcbiYjNDM7XG4mIzQzO1x0RVhQRUNUX0VRKHVubGlua2F0KHNlbGYtXHUwMDNlZGZkLCBcJiMzNDtyZWdmaWxlXCYjMzQ7LCAwKSwgMCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qXG4mIzQzOyAqIE9fQ1JFQVR8T19ESVJFQ1RPUlkgY29tYmluZWQgd2l0aCBhIHdyaXRhYmxlIGFjY2VzcyBtb2RlIG11c3QgYmVcbiYjNDM7ICogcmVqZWN0ZWQ6IGEgZGlyZWN0b3J5IGNhbm5vdCBiZSBvcGVuZWQgZm9yIHdyaXRpbmcuXG4mIzQzOyAqL1xuJiM0MztURVNUX0Yob3Blbl9vX2NyZWF0X29fZGlyLCByZWplY3RzX3dyaXRhYmxlX2FjY19tb2RlKVxuJiM0Mzt7XG4mIzQzO1x0RVhQRUNUX0VRKG9wZW5fb19jcmVhdF9vX2RpcihzZWxmLVx1MDAzZWRmZCwgXCYjMzQ7cmR3cmRpclwmIzM0OywgU19JUldYVSwgT19SRFdSKSwgLTEpO1xuJiM0MztcdEVYUEVDVF9FUShlcnJubywgRU5PVERJUik7XG4mIzQzO1x0LyogQ2xlYW4gdXAgaWYgdGhlIGtlcm5lbCBjcmVhdGVkIHRoZSBkaXJlY3RvcnkgYW55d2F5LiAqL1xuJiM0MztcdHVubGlua2F0KHNlbGYtXHUwMDNlZGZkLCBcJiMzNDtyZHdyZGlyXCYjMzQ7LCBBVF9SRU1PVkVESVIpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBvcGVuYXQoT19DUkVBVCkgd2l0aCBhIHRyYWlsaW5nIHNsYXNoIGJ1dCB3aXRob3V0IE9fRElSRUNUT1JZXG4mIzQzOyAqIG11c3QgZmFpbCB3aXRoIEVJU0RJUiBhbmQgbXVzdCBub3QgY3JlYXRlIGFueXRoaW5nIGF0IHRoZSBwYXRoLlxuJiM0MzsgKi9cbiYjNDM7VEVTVF9GKG9wZW5fb19jcmVhdF9vX2RpciwgdHJhaWxpbmdfc2xhc2hfbm9fb19kaXIpXG4mIzQzO3tcbiYjNDM7XHRpbnQgZmQ7XG4mIzQzO1x0c3RydWN0IHN0YXQgc3Q7XG4mIzQzO1xuJiM0MztcdGZkID0gb3BlbmF0KHNlbGYtXHUwMDNlZGZkLCBcJiMzNDt0cmFpbGluZy9cJiMzNDssIE9fQ1JFQVQgfCBPX1dST05MWSwgU19JUldYVSk7XG4mIzQzO1x0RVhQRUNUX0VRKGZkLCAtMSk7XG4mIzQzO1x0RVhQRUNUX0VRKGVycm5vLCBFSVNESVIpO1xuJiM0MztcbiYjNDM7XHRFWFBFQ1RfRVEoZnN0YXRhdChzZWxmLVx1MDAzZWRmZCwgXCYjMzQ7dHJhaWxpbmdcJiMzNDssIFx1MDAyNnN0LCAwKSwgLTEpO1xuJiM0MztcdEVYUEVDVF9FUShlcnJubywgRU5PRU5UKTtcbiYjNDM7XG4mIzQzO1x0LyogQmVzdC1lZmZvcnQgY2xlYW51cCBpbiBjYXNlIHRoZSBrZXJuZWwgbGVmdCBhIGZpbGUgYmVoaW5kLiAqL1xuJiM0MztcdGlmIChmZCBcdTAwM2U9IDApXG4mIzQzO1x0XHRjbG9zZShmZCk7XG4mIzQzO1x0dW5saW5rYXQoc2VsZi1cdTAwM2VkZmQsIFwmIzM0O3RyYWlsaW5nXCYjMzQ7LCAwKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LypcbiYjNDM7ICogVGhlIHJldHVybmVkIGZkIG11c3QgYmUgdXNhYmxlIGFzIGEgZGZkIGZvciBmdXJ0aGVyICphdCgpIGNhbGxzLlxuJiM0MzsgKi9cbiYjNDM7VEVTVF9GKG9wZW5fb19jcmVhdF9vX2RpciwgZmRfdXNhYmxlX2FzX2RmZClcbiYjNDM7e1xuJiM0MztcdGludCBwYXJlbnRfZmQsIGNoaWxkX2ZkO1xuJiM0MztcdGNoYXIgcGF0aFtQQVRIX01BWF07XG4mIzQzO1xuJiM0MztcdHBhcmVudF9mZCA9IG9wZW5fb19jcmVhdF9vX2Rpcl9jaGVja2VkKHNlbGYtXHUwMDNlZGZkLCBcJiMzNDtwYXJlbnRcJiMzNDspO1xuJiM0MztcdGNoaWxkX2ZkID0gb3Blbl9vX2NyZWF0X29fZGlyX2NoZWNrZWQocGFyZW50X2ZkLCBcJiMzNDtjaGlsZFwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdEVYUEVDVF9FUShjbG9zZShjaGlsZF9mZCksIDApO1xuJiM0MztcdEVYUEVDVF9FUShjbG9zZShwYXJlbnRfZmQpLCAwKTtcbiYjNDM7XG4mIzQzO1x0c25wcmludGYocGF0aCwgc2l6ZW9mKHBhdGgpLCBcJiMzNDslcy9wYXJlbnQvY2hpbGRcJiMzNDssIHNlbGYtXHUwMDNlZGlycGF0aCk7XG4mIzQzO1x0RVhQRUNUX0VRKHJtZGlyKHBhdGgpLCAwKTtcbiYjNDM7XHRzbnByaW50ZihwYXRoLCBzaXplb2YocGF0aCksIFwmIzM0OyVzL3BhcmVudFwmIzM0Oywgc2VsZi1cdTAwM2VkaXJwYXRoKTtcbiYjNDM7XHRFWFBFQ1RfRVEocm1kaXIocGF0aCksIDApO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztURVNUX0hBUk5FU1NfTUFJTlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA0IDE2OjU5PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjJtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0OzlQX0ZTJiMzNDssCiAgICAmIzM0O0NFUEhfRlMmIzM0OywKICAgICYjMzQ7RlVTRV9GUyYjMzQ7LAogICAgJiMzNDtHRlMyX0ZTJiMzNDssCiAgICAmIzM0O05GU19GUyYjMzQ7LAogICAgJiMzNDtDSUZTJiMzNDssCiAgICAmIzM0O1ZCT1hTRl9GUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2xvb2t1cF9vcGVuJiMzNDssCiAgICAmIzM0O2F0b21pY19vcGVuJiMzNDssCiAgICAmIzM0O21heV9vX2NyZWF0ZSYjMzQ7LAogICAgJiMzNDtidWlsZF9vcGVuX2ZsYWdzJiMzNDssCiAgICAmIzM0O2RvX29wZW4mIzM0OywKICAgICYjMzQ7ZGVudHJ5X2NyZWF0ZSYjMzQ7LAogICAgJiMzNDt2ZnNfbWtkaXImIzM0OywKICAgICYjMzQ7dmZzX2NyZWF0ZSYjMzQ7LAogICAgJiMzNDtvcGVuX2xhc3RfbG9va3VwcyYjMzQ7LAogICAgJiMzNDtsb29rdXBfZmFzdF9mb3Jfb3BlbiYjMzQ7LAogICAgJiMzNDttYXlfY3JlYXRlX2luX3N0aWNreSYjMzQ7LAogICAgJiMzNDtmaWxlbmFtZV9jcmVhdGUmIzM0OywKICAgICYjMzQ7ZmlsZW5hbWVfdW5saW5rYXQmIzM0OywKICAgICYjMzQ7ZmlsZW5hbWVfcmVuYW1lYXQyJiMzNDssCiAgICAmIzM0O3Y5ZnNfdmZzX2F0b21pY19vcGVuJiMzNDssCiAgICAmIzM0O3Y5ZnNfdmZzX2F0b21pY19vcGVuX2RvdGwmIzM0OywKICAgICYjMzQ7Y2VwaF9hdG9taWNfb3BlbiYjMzQ7LAogICAgJiMzNDtmdXNlX2F0b21pY19vcGVuJiMzNDssCiAgICAmIzM0O2dmczJfYXRvbWljX29wZW4mIzM0OywKICAgICYjMzQ7bmZzX2F0b21pY19vcGVuJiMzNDssCiAgICAmIzM0O25mc19hdG9taWNfb3Blbl92MjMmIzM0OywKICAgICYjMzQ7Y2lmc19hdG9taWNfb3BlbiYjMzQ7LAogICAgJiMzNDt2Ym94c2ZfZGlyX2F0b21pY19vcGVuJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgc3VwcG9ydCBmb3IgY3JlYXRpbmcgZGlyZWN0b3JpZXMgdmlhIGBvcGVuYXQoLi4uLCBPX0NSRUFUIHwgT19ESVJFQ1RPUlksIC4uLilgLiBJdCBtb2RpZmllcyBjb3JlIFZGUyBwYXRoIHJlc29sdXRpb24gYW5kIGZpbGUgY3JlYXRpb24gbG9naWMgaW4gYGZzL25hbWVpLmNgIGFuZCBgZnMvb3Blbi5jYCwgaW5jbHVkaW5nIGBsb29rdXBfb3BlbmAsIGBhdG9taWNfb3BlbmAsIGFuZCBgdmZzX21rZGlyYC4gSXQgYWxzbyB1cGRhdGVzIG11bHRpcGxlIGZpbGVzeXN0ZW1zICg5cCwgY2VwaCwgZnVzZSwgZ2ZzMiwgbmZzLCBzbWIsIHZib3hzZikgdG8gaGFuZGxlIHRoZSBuZXcgZmxhZyBjb21iaW5hdGlvbi4gVGhpcyBpcyBhIHNpZ25pZmljYW50IGZ1bmN0aW9uYWwgY2hhbmdlIHRvIGNvcmUga2VybmVsIGxvZ2ljIGFuZCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdAogICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksCiAgIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA5Nzk0OTA3N2Q0ZWQ3NjdlMmNkNGNkNmZhZmI0NThiZWE1ZmM0ODU4CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFNhdCBKdWwgNCAxNjo1OTo0OCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2ZzLzlwL3Zmc19pbm9kZS5jIGIvZnMvOXAvdmZzX2lub2RlLmMKaW5kZXggNTc4M2QwMzM2Zjk2YWMuLmJiNTU1ZTViYTI2MTUwIDEwMDY0NAotLS0gYS9mcy85cC92ZnNfaW5vZGUuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy85cC92ZnNfaW5vZGUuYwpAQCAtNzc3LDYgJiM0Mzs3NzcsOSBAQCB2OWZzX3Zmc19hdG9taWNfb3BlbihzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LAogCXN0cnVjdCBpbm9kZSAqaW5vZGU7CiAJaW50IHA5X29tb2RlOwogCiYjNDM7CWlmIChPX0lTX01LRElSKGZsYWdzKSkKJiM0MzsJCWZsYWdzICZhbXA7PSB+T19DUkVBVDsKJiM0MzsKIAlpZiAoZF9pbl9sb29rdXAoZGVudHJ5KSkgewogCQlzdHJ1Y3QgZGVudHJ5ICpyZXMgPSB2OWZzX3Zmc19sb29rdXAoZGlyLCBkZW50cnksIDApOwogCQlpZiAocmVzIHx8IGRfcmVhbGx5X2lzX3Bvc2l0aXZlKGRlbnRyeSkpCmRpZmYgLS1naXQgYS9mcy85cC92ZnNfaW5vZGVfZG90bC5jIGIvZnMvOXAvdmZzX2lub2RlX2RvdGwuYwppbmRleCBmNzM5NmQyMGNiNmNkYy4uZmYzZmFjYjQyMGMyMjQgMTAwNjQ0Ci0tLSBhL2ZzLzlwL3Zmc19pbm9kZV9kb3RsLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvOXAvdmZzX2lub2RlX2RvdGwuYwpAQCAtMjM5LDYgJiM0MzsyMzksOSBAQCB2OWZzX3Zmc19hdG9taWNfb3Blbl9kb3RsKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksCiAJc3RydWN0IHY5ZnNfc2Vzc2lvbl9pbmZvICp2OXNlczsKIAlzdHJ1Y3QgcG9zaXhfYWNsICpwYWNsID0gTlVMTCwgKmRhY2wgPSBOVUxMOwogCiYjNDM7CWlmIChPX0lTX01LRElSKGZsYWdzKSkKJiM0MzsJCWZsYWdzICZhbXA7PSB+T19DUkVBVDsKJiM0MzsKIAlpZiAoZF9pbl9sb29rdXAoZGVudHJ5KSkgewogCQlzdHJ1Y3QgZGVudHJ5ICpyZXMgPSB2OWZzX3Zmc19sb29rdXAoZGlyLCBkZW50cnksIDApOwogCQlpZiAocmVzIHx8IGRfcmVhbGx5X2lzX3Bvc2l0aXZlKGRlbnRyeSkpCmRpZmYgLS1naXQgYS9mcy9jZXBoL2ZpbGUuYyBiL2ZzL2NlcGgvZmlsZS5jCmluZGV4IDcxMTYxZjJiMjE1MTM2Li5lNzlhYmRiZDlmNjFlOSAxMDA2NDQKLS0tIGEvZnMvY2VwaC9maWxlLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvY2VwaC9maWxlLmMKQEAgLTgxMSw2ICYjNDM7ODExLDkgQEAgaW50IGNlcGhfYXRvbWljX29wZW4oc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwKIAkgICAgICBkaXIsIGNlcGhfdmlub3AoZGlyKSwgZGVudHJ5LCBkZW50cnksCiAJICAgICAgZF91bmhhc2hlZChkZW50cnkpID8gJiMzNDt1bmhhc2hlZCYjMzQ7IDogJiMzNDtoYXNoZWQmIzM0OywgZmxhZ3MsIG1vZGUpOwogCiYjNDM7CWlmIChPX0lTX01LRElSKGZsYWdzKSkKJiM0MzsJCWZsYWdzICZhbXA7PSB+T19DUkVBVDsKJiM0MzsKIAlpZiAoZGVudHJ5LSZndDtkX25hbWUubGVuICZndDsgTkFNRV9NQVgpCiAJCXJldHVybiAtRU5BTUVUT09MT05HOwogCmRpZmYgLS1naXQgYS9mcy9mdXNlL2Rpci5jIGIvZnMvZnVzZS9kaXIuYwppbmRleCAwZTJhMTAzOWZhNDNlYS4uZTAxODY5NTY1ZDVlZTUgMTAwNjQ0Ci0tLSBhL2ZzL2Z1c2UvZGlyLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvZnVzZS9kaXIuYwpAQCAtOTM1LDYgJiM0Mzs5MzUsOSBAQCBzdGF0aWMgaW50IGZ1c2VfYXRvbWljX29wZW4oc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmVudHJ5LAogCXN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwID0gZmlsZV9tbnRfaWRtYXAoZmlsZSk7CiAJc3RydWN0IGZ1c2VfY29ubiAqZmMgPSBnZXRfZnVzZV9jb25uKGRpcik7CiAKJiM0MzsJaWYgKE9fSVNfTUtESVIoZmxhZ3MpKQomIzQzOwkJZmxhZ3MgJmFtcDs9IH5PX0NSRUFUOwomIzQzOwogCWlmIChmdXNlX2lzX2JhZChkaXIpKQogCQlyZXR1cm4gLUVJTzsKIApkaWZmIC0tZ2l0IGEvZnMvZ2ZzMi9pbm9kZS5jIGIvZnMvZ2ZzMi9pbm9kZS5jCmluZGV4IDhhNzc3OTRiYmQ0YWZjLi45ODU5YWUwMzQxYTk5ZSAxMDA2NDQKLS0tIGEvZnMvZ2ZzMi9pbm9kZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2dmczIvaW5vZGUuYwpAQCAtMTM4Nyw2ICYjNDM7MTM4Nyw5IEBAIHN0YXRpYyBpbnQgZ2ZzMl9hdG9taWNfb3BlbihzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LAogewogCWJvb2wgZXhjbCA9ICEhKGZsYWdzICZhbXA7IE9fRVhDTCk7CiAKJiM0MzsJaWYgKE9fSVNfTUtESVIoZmxhZ3MpKQomIzQzOwkJZmxhZ3MgJmFtcDs9IH5PX0NSRUFUOwomIzQzOwogCWlmIChkX2luX2xvb2t1cChkZW50cnkpKSB7CiAJCXN0cnVjdCBkZW50cnkgKmQgPSBfX2dmczJfbG9va3VwKGRpciwgZGVudHJ5LCBmaWxlKTsKIAkJaWYgKGZpbGUtJmd0O2ZfbW9kZSAmYW1wOyBGTU9ERV9PUEVORUQpIHsKZGlmZiAtLWdpdCBhL2ZzL25hbWVpLmMgYi9mcy9uYW1laS5jCmluZGV4IDE5Y2U0M2M5YTZlNjYyLi4wMzBjYWM0ZmJlNTU1ZSAxMDA2NDQKLS0tIGEvZnMvbmFtZWkuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9uYW1laS5jCkBAIC0xMzgyLDEzICYjNDM7MTM4MiwxMiBAQCBpbnQgbWF5X2xpbmthdChzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgY29uc3Qgc3RydWN0IHBhdGggKmxpbmspCiAKIC8qKgogICogbWF5X2NyZWF0ZV9pbl9zdGlja3kgLSBDaGVjayB3aGV0aGVyIGFuIE9fQ1JFQVQgb3BlbiBpbiBhIHN0aWNreSBkaXJlY3RvcnkKLSAqCQkJICBzaG91bGQgYmUgYWxsb3dlZCwgb3Igbm90LCBvbiBmaWxlcyB0aGF0IGFscmVhZHkKLSAqCQkJICBleGlzdC4KJiM0MzsgKgkJCSAgc2hvdWxkIGJlIGFsbG93ZWQsIG9yIG5vdAogICogQGlkbWFwOiBpZG1hcCBvZiB0aGUgbW91bnQgdGhlIGlub2RlIHdhcyBmb3VuZCBmcm9tCiAgKiBAbmQ6IG5hbWVpZGF0YSBwYXRod2FsayBkYXRhCiAgKiBAaW5vZGU6IHRoZSBpbm9kZSBvZiB0aGUgZmlsZSB0byBvcGVuCiAgKgotICogQmxvY2sgYW4gT19DUkVBVCBvcGVuIG9mIGEgRklGTyAob3IgYSByZWd1bGFyIGZpbGUpIHdoZW46CiYjNDM7ICogQmxvY2sgYW4gT19DUkVBVCBvcGVuIG9mIGEgRklGTyAob3IgYSByZWd1bGFyIGZpbGUvZGlyZWN0b3J5KSB3aGVuOgogICogICAtIHN5c2N0bF9wcm90ZWN0ZWRfZmlmb3MgKG9yIHN5c2N0bF9wcm90ZWN0ZWRfcmVndWxhcikgaXMgZW5hYmxlZAogICogICAtIHRoZSBmaWxlIGFscmVhZHkgZXhpc3RzCiAgKiAgIC0gd2UgYXJlIGluIGEgc3RpY2t5IGRpcmVjdG9yeQpAQCAtMTQxNiw2ICYjNDM7MTQxNSwxNCBAQCBzdGF0aWMgaW50IG1heV9jcmVhdGVfaW5fc3RpY2t5KHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgbmFtZWlkYXRhICpuZCwKIAlpZiAobGlrZWx5KCEoZGlyX21vZGUgJmFtcDsgU19JU1ZUWCkpKQogCQlyZXR1cm4gMDsKIAomIzQzOwkvKgomIzQzOwkgKiBUaGVyZSBpcyBubyBzZXBhcmF0ZSBzeXNjdGwgZm9yIGRpcmVjdG9yeSBjcmVhdGlvbiBpbiBzdGlja3kKJiM0MzsJICogZm9sZGVycy4gVGhlcmVmb3JlLCBmb3IgdGhlIFNfSVNESVIgY2FzZSwgZGlzYWJsaW5nCiYjNDM7CSAqIHN5c2N0bF9wcm90ZWN0ZWRfcmVndWxhciBpcyBub3QgZW5vdWdoIHRvIGFsbG93IGNyZWF0aW5nIGEKJiM0MzsJICogZGlyZWN0b3J5IGluIGEgc3RpY2t5IGZvbGRlciwgYmVjYXVzZSB0aGF0IG1heSBzdXJwcmlzZSB1c2VycwomIzQzOwkgKiBub3QgZXhwZWN0aW5nIHRoYXQgT19DUkVBVHxPX0RJUkVDVE9SWSBpcyBwb3NzaWJsZSBvbiBuZXdlcgomIzQzOwkgKiBrZXJuZWxzLgomIzQzOwkgKi8KIAlpZiAoU19JU1JFRyhpbm9kZS0mZ3Q7aV9tb2RlKSAmYW1wOyZhbXA7ICFzeXNjdGxfcHJvdGVjdGVkX3JlZ3VsYXIpCiAJCXJldHVybiAwOwogCkBAIC0xNDQ3LDYgJiM0MzsxNDU0LDEyIEBAIHN0YXRpYyBpbnQgbWF5X2NyZWF0ZV9pbl9zdGlja3koc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBuYW1laWRhdGEgKm5kLAogCQkJCQkgICAgICAmIzM0O3N0aWNreV9jcmVhdGVfcmVndWxhciYjMzQ7KTsKIAkJCXJldHVybiAtRUFDQ0VTOwogCQl9CiYjNDM7CiYjNDM7CQlpZiAoU19JU0RJUihpbm9kZS0mZ3Q7aV9tb2RlKSkgewomIzQzOwkJCWF1ZGl0X2xvZ19wYXRoX2RlbmllZChBVURJVF9BTk9NX0NSRUFULAomIzQzOwkJCQkJICAgICAgJiMzNDtzdGlja3lfY3JlYXRlX2RpciYjMzQ7KTsKJiM0MzsJCQlyZXR1cm4gLUVBQ0NFUzsKJiM0MzsJCX0KIAl9CiAKIAlyZXR1cm4gMDsKQEAgLTI3ODEsOSAmIzQzOzI3OTQsMTQgQEAgc3RhdGljIGNvbnN0IGNoYXIgKnBhdGhfaW5pdChzdHJ1Y3QgbmFtZWlkYXRhICpuZCwgdW5zaWduZWQgZmxhZ3MpCiAJcmV0dXJuIHM7CiB9CiAKJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgdHJhaWxpbmdfc2xhc2hlcyhjb25zdCBzdHJ1Y3QgcXN0ciBsYXN0KQomIzQzO3sKJiM0MzsJcmV0dXJuIChib29sKWxhc3QubmFtZVtsYXN0Lmxlbl07CiYjNDM7fQomIzQzOwogc3RhdGljIGlubGluZSBjb25zdCBjaGFyICpsb29rdXBfbGFzdChzdHJ1Y3QgbmFtZWlkYXRhICpuZCkKIHsKLQlpZiAobmQtJmd0O2xhc3RfdHlwZSA9PSBMQVNUX05PUk0gJmFtcDsmYW1wOyBuZC0mZ3Q7bGFzdC5uYW1lW25kLSZndDtsYXN0Lmxlbl0pCiYjNDM7CWlmIChuZC0mZ3Q7bGFzdF90eXBlID09IExBU1RfTk9STSAmYW1wOyZhbXA7IHRyYWlsaW5nX3NsYXNoZXMobmQtJmd0O2xhc3QpKQogCQluZC0mZ3Q7ZmxhZ3MgfD0gTE9PS1VQX0ZPTExPVyB8IExPT0tVUF9ESVJFQ1RPUlk7CiAKIAlyZXR1cm4gd2Fsa19jb21wb25lbnQobmQsIFdBTEtfVFJBSUxJTkcpOwpAQCAtNDE2NCw2ICYjNDM7NDE4MiwyNCBAQCBzdGF0aWMgaW5saW5lIHVtb2RlX3QgdmZzX3ByZXBhcmVfbW9kZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwKIAlyZXR1cm4gbW9kZTsKIH0KIAomIzQzO3N0YXRpYyBpbmxpbmUKJiM0MztpbnQgdmZzX2NyZWF0ZV9ub19wZXJtKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksCiYjNDM7CQkgICAgICAgdW1vZGVfdCBtb2RlLCBzdHJ1Y3QgZGVsZWdhdGVkX2lub2RlICpkaSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBpbm9kZSAqZGlyID0gZF9pbm9kZShkZW50cnktJmd0O2RfcGFyZW50KTsKJiM0MzsJaW50IGVycm9yOwomIzQzOwomIzQzOwllcnJvciA9IHRyeV9icmVha19kZWxlZyhkaXIsIExFQVNFX0JSRUFLX0RJUl9DUkVBVEUsIGRpKTsKJiM0MzsJaWYgKGVycm9yKQomIzQzOwkJcmV0dXJuIGVycm9yOwomIzQzOwomIzQzOwllcnJvciA9IGRpci0mZ3Q7aV9vcC0mZ3Q7Y3JlYXRlKGlkbWFwLCBkaXIsIGRlbnRyeSwgbW9kZSwgdHJ1ZSk7CiYjNDM7CWlmICghZXJyb3IpCiYjNDM7CQlmc25vdGlmeV9jcmVhdGUoZGlyLCBkZW50cnkpOwomIzQzOwomIzQzOwlyZXR1cm4gZXJyb3I7CiYjNDM7fQomIzQzOwogLyoqCiAgKiB2ZnNfY3JlYXRlIC0gY3JlYXRlIG5ldyBmaWxlCiAgKiBAaWRtYXA6CWlkbWFwIG9mIHRoZSBtb3VudCB0aGUgaW5vZGUgd2FzIGZvdW5kIGZyb20KQEAgLTQxOTYsMTMgJiM0Mzs0MjMyLDggQEAgaW50IHZmc19jcmVhdGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlLAogCWVycm9yID0gc2VjdXJpdHlfaW5vZGVfY3JlYXRlKGRpciwgZGVudHJ5LCBtb2RlKTsKIAlpZiAoZXJyb3IpCiAJCXJldHVybiBlcnJvcjsKLQllcnJvciA9IHRyeV9icmVha19kZWxlZyhkaXIsIExFQVNFX0JSRUFLX0RJUl9DUkVBVEUsIGRpKTsKLQlpZiAoZXJyb3IpCi0JCXJldHVybiBlcnJvcjsKLQllcnJvciA9IGRpci0mZ3Q7aV9vcC0mZ3Q7Y3JlYXRlKGlkbWFwLCBkaXIsIGRlbnRyeSwgbW9kZSwgdHJ1ZSk7Ci0JaWYgKCFlcnJvcikKLQkJZnNub3RpZnlfY3JlYXRlKGRpciwgZGVudHJ5KTsKLQlyZXR1cm4gZXJyb3I7CiYjNDM7CiYjNDM7CXJldHVybiB2ZnNfY3JlYXRlX25vX3Blcm0oaWRtYXAsIGRlbnRyeSwgbW9kZSwgZGkpOwogfQogRVhQT1JUX1NZTUJPTCh2ZnNfY3JlYXRlKTsKIApAQCAtNDMxOSw3MyAmIzQzOzQzNTAsMTIyIEBAIHN0YXRpYyBpbmxpbmUgaW50IG9wZW5fdG9fbmFtZWlfZmxhZ3MoaW50IGZsYWcpCiAKIHN0YXRpYyBpbnQgbWF5X29fY3JlYXRlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLAogCQkJY29uc3Qgc3RydWN0IHBhdGggKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LAotCQkJdW1vZGVfdCBtb2RlKQomIzQzOwkJCXVtb2RlX3QgbW9kZSwgYm9vbCBjcmVhdGVfZGlyKQogewotCWludCBlcnJvciA9IHNlY3VyaXR5X3BhdGhfbWtub2QoZGlyLCBkZW50cnksIG1vZGUsIDApOwomIzQzOwlzdHJ1Y3QgaW5vZGUgKmRpcl9pbm9kZSA9IGRpci0mZ3Q7ZGVudHJ5LSZndDtkX2lub2RlOwomIzQzOwlpbnQgZXJyb3I7CiYjNDM7CiYjNDM7CWlmIChjcmVhdGVfZGlyKQomIzQzOwkJZXJyb3IgPSBzZWN1cml0eV9wYXRoX21rZGlyKGRpciwgZGVudHJ5LCBtb2RlKTsKJiM0MzsJZWxzZQomIzQzOwkJZXJyb3IgPSBzZWN1cml0eV9wYXRoX21rbm9kKGRpciwgZGVudHJ5LCBtb2RlLCAwKTsKIAlpZiAoZXJyb3IpCiAJCXJldHVybiBlcnJvcjsKIAogCWlmICghZnN1aWRnaWRfaGFzX21hcHBpbmcoZGlyLSZndDtkZW50cnktJmd0O2Rfc2IsIGlkbWFwKSkKIAkJcmV0dXJuIC1FT1ZFUkZMT1c7CiAKLQllcnJvciA9IGlub2RlX3Blcm1pc3Npb24oaWRtYXAsIGRpci0mZ3Q7ZGVudHJ5LSZndDtkX2lub2RlLAotCQkJCSBNQVlfV1JJVEUgfCBNQVlfRVhFQyk7CiYjNDM7CWVycm9yID0gaW5vZGVfcGVybWlzc2lvbihpZG1hcCwgZGlyX2lub2RlLCBNQVlfV1JJVEUgfCBNQVlfRVhFQyk7CiAJaWYgKGVycm9yKQogCQlyZXR1cm4gZXJyb3I7CiAKLQlyZXR1cm4gc2VjdXJpdHlfaW5vZGVfY3JlYXRlKGRpci0mZ3Q7ZGVudHJ5LSZndDtkX2lub2RlLCBkZW50cnksIG1vZGUpOwomIzQzOwlpZiAoY3JlYXRlX2RpcikKJiM0MzsJCWVycm9yID0gc2VjdXJpdHlfaW5vZGVfbWtkaXIoZGlyX2lub2RlLCBkZW50cnksIG1vZGUpOwomIzQzOwllbHNlCiYjNDM7CQllcnJvciA9IHNlY3VyaXR5X2lub2RlX2NyZWF0ZShkaXJfaW5vZGUsIGRlbnRyeSwgbW9kZSk7CiYjNDM7CiYjNDM7CXJldHVybiBlcnJvcjsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGlubGluZSB1bW9kZV90IG9fY3JlYXRlX21vZGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsCiYjNDM7CQljb25zdCBzdHJ1Y3QgaW5vZGUgKmRpciwgdW1vZGVfdCBtb2RlLCBib29sIGNyZWF0ZV9kaXIpCiYjNDM7ewomIzQzOwlpZiAoY3JlYXRlX2RpcikKJiM0MzsJCXJldHVybiB2ZnNfcHJlcGFyZV9tb2RlKGlkbWFwLCBkaXIsIG1vZGUsIFNfSVJXWFVHTyB8IFNfSVNWVFgsIDApOwomIzQzOwllbHNlCiYjNDM7CQlyZXR1cm4gdmZzX3ByZXBhcmVfbW9kZShpZG1hcCwgZGlyLCBtb2RlLCBTX0lBTExVR08sIFNfSUZSRUcpOwogfQogCiAvKgotICogQXR0ZW1wdCB0byBhdG9taWNhbGx5IGxvb2sgdXAsIGNyZWF0ZSBhbmQgb3BlbiBhIGZpbGUgZnJvbSBhIG5lZ2F0aXZlCi0gKiBkZW50cnkuCi0gKgotICogUmV0dXJucyAwIGlmIHN1Y2Nlc3NmdWwuICBUaGUgZmlsZSB3aWxsIGhhdmUgYmVlbiBjcmVhdGVkIGFuZCBhdHRhY2hlZCB0bwotICogQGZpbGUgYnkgdGhlIGZpbGVzeXN0ZW0gY2FsbGluZyBmaW5pc2hfb3BlbigpLgotICoKLSAqIElmIHRoZSBmaWxlIHdhcyBsb29rZWQgdXAgb25seSBvciBkaWRuJiMzOTt0IG5lZWQgY3JlYXRpbmcsIEZNT0RFX09QRU5FRCB3b24mIzM5O3QKLSAqIGJlIHNldC4gIFRoZSBjYWxsZXIgd2lsbCBuZWVkIHRvIHBlcmZvcm0gdGhlIG9wZW4gdGhlbXNlbHZlcy4gIEBwYXRoIHdpbGwKLSAqIGhhdmUgYmVlbiB1cGRhdGVkIHRvIHBvaW50IHRvIHRoZSBuZXcgZGVudHJ5LiAgVGhpcyBtYXkgYmUgbmVnYXRpdmUuCi0gKgotICogUmV0dXJucyBhbiBlcnJvciBjb2RlIG90aGVyd2lzZS4KJiM0MzsgKiBhdG9taWNfb3BlbigpIC0gYXR0ZW1wdCB0byBhdG9taWNhbGx5IGxvb2sgdXAsIGNyZWF0ZSBhbmQgb3BlbiBhIGZpbGUKJiM0MzsgKiBmcm9tIGEgbmVnYXRpdmUgZGVudHJ5LgomIzQzOyAqIEBwYXRoOiAgICAgICAgICBwYXJlbnQgZGlyZWN0b3J5IHBhdGgKJiM0MzsgKiBAZGVudHJ5OiAgICAgICAgY2hpbGQgdG8gLSZndDthdG9taWNfb3BlbigpCiYjNDM7ICogQG9wZW5fZmxhZzogICAgIG9wZW4gZmxhZ3MKJiM0MzsgKiBAbW9kZTogICAgICAgICAgY3JlYXRlIG1vZGUKJiM0MzsgKiBAY3JlYXRlX2Vycm9yOiAgcmV0dXJuIHZhbHVlIGZyb20gbWF5X29fY3JlYXRlKCkKJiM0MzsgKgomIzQzOyAqIElmIEZNT0RFX09QRU5FRCBpcyBzZXQsIHRoZSBmaWxlIHdpbGwgaGF2ZSBiZWVuIGF0dGFjaGVkIHRvIEBmaWxlIGJ5IHRoZQomIzQzOyAqIGZpbGVzeXN0ZW0gY2FsbGluZyBmaW5pc2hfb3BlbigpLiBJZiBGTU9ERV9PUEVORUQgaXNuJiMzOTt0IHNldCwgdGhlCiYjNDM7ICogZmlsZXN5c3RlbSBpbnN0ZWFkIGNhbGxlZCBmaW5pc2hfbm9fb3BlbigpIGFuZCB0aGUgY2FsbGVyIHdpbGwgbmVlZCB0bwomIzQzOyAqIHBlcmZvcm0gdGhlIG9wZW4gdGhlbXNlbHZlcy4KJiM0MzsgKgomIzQzOyAqIEZNT0RFX0NSRUFURUQgaXMgc2V0IHdoZW4gdGhlIGNhbGwgdG8gLSZndDthdG9taWNfb3BlbigpIGFjdHVhbGx5IGNyZWF0ZWQKJiM0MzsgKiB0aGUgZmlsZS4KJiM0MzsgKgomIzQzOyAqIFJldHVybnMgdGhlIG9wZW5lZC9sb29rZWQtdXAgZGVudHJ5IG9uIHN1Y2Nlc3Mgb3IgRVJSX1BUUigtRSkgb24gZmFpbHVyZS4KJiM0MzsgKiBPbiBlcnJvciwgYXRvbWljX29wZW4oKSBjb25zdW1lcyBAZGVudHJ5LgogICovCiBzdGF0aWMgc3RydWN0IGRlbnRyeSAqYXRvbWljX29wZW4oY29uc3Qgc3RydWN0IHBhdGggKnBhdGgsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwKIAkJCQkgIHN0cnVjdCBmaWxlICpmaWxlLAotCQkJCSAgaW50IG9wZW5fZmxhZywgdW1vZGVfdCBtb2RlKQomIzQzOwkJCQkgIGludCBvcGVuX2ZsYWcsIHVtb2RlX3QgbW9kZSwgYm9vbCBjcmVhdGVfZXJyb3IpCiB7CiAJc3RydWN0IGRlbnRyeSAqY29uc3QgREVOVFJZX05PVF9TRVQgPSAodm9pZCAqKSAtMVVMOwogCXN0cnVjdCBpbm9kZSAqZGlyID0gIHBhdGgtJmd0O2RlbnRyeS0mZ3Q7ZF9pbm9kZTsKJiM0MzsJYm9vbCBmYWlsZWRfY3JlYXRlID0gZmFsc2U7CiAJaW50IGVycm9yOwogCiAJZmlsZS0mZ3Q7X19mX3BhdGguZGVudHJ5ID0gREVOVFJZX05PVF9TRVQ7CiAJZmlsZS0mZ3Q7X19mX3BhdGgubW50ID0gcGF0aC0mZ3Q7bW50OwomIzQzOwogCWVycm9yID0gZGlyLSZndDtpX29wLSZndDthdG9taWNfb3BlbihkaXIsIGRlbnRyeSwgZmlsZSwKIAkJCQkgICAgICAgb3Blbl90b19uYW1laV9mbGFncyhvcGVuX2ZsYWcpLCBtb2RlKTsKIAlkX2xvb2t1cF9kb25lKGRlbnRyeSk7CiAJaWYgKCFlcnJvcikgewogCQlpZiAoZmlsZS0mZ3Q7Zl9tb2RlICZhbXA7IEZNT0RFX09QRU5FRCkgewotCQkJaWYgKHVubGlrZWx5KGRlbnRyeSAhPSBmaWxlLSZndDtmX3BhdGguZGVudHJ5KSkgewomIzQzOwkJCS8vIGZpbmlzaF9vcGVuKCkgY2FsbGVkCiYjNDM7CQkJc3RydWN0IGRlbnRyeSAqb3BlbmVkID0gZmlsZS0mZ3Q7Zl9wYXRoLmRlbnRyeTsKJiM0MzsJCQlpZiAodW5saWtlbHkob3BlbmVkICE9IGRlbnRyeSkpIHsKIAkJCQlkcHV0KGRlbnRyeSk7Ci0JCQkJZGVudHJ5ID0gZGdldChmaWxlLSZndDtmX3BhdGguZGVudHJ5KTsKJiM0MzsJCQkJZGVudHJ5ID0gZGdldChvcGVuZWQpOwogCQkJfQotCQl9IGVsc2UgaWYgKFdBUk5fT04oZmlsZS0mZ3Q7Zl9wYXRoLmRlbnRyeSA9PSBERU5UUllfTk9UX1NFVCkpIHsKLQkJCWVycm9yID0gLUVJTzsKLQkJfSBlbHNlIHsKLQkJCWlmIChmaWxlLSZndDtmX3BhdGguZGVudHJ5KSB7CiYjNDM7CQl9IGVsc2UgaWYgKGxpa2VseShmaWxlLSZndDtmX3BhdGguZGVudHJ5ICE9IERFTlRSWV9OT1RfU0VUKSkgewomIzQzOwkJCS8vIGZpbmlzaF9ub19vcGVuKCkgY2FsbGVkCiYjNDM7CQkJc3RydWN0IGRlbnRyeSAqcmVwbGFjZWQgPSBmaWxlLSZndDtmX3BhdGguZGVudHJ5OwomIzQzOwkJCWlmIChyZXBsYWNlZCkgewogCQkJCWRwdXQoZGVudHJ5KTsKLQkJCQlkZW50cnkgPSBmaWxlLSZndDtmX3BhdGguZGVudHJ5OwomIzQzOwkJCQlkZW50cnkgPSByZXBsYWNlZDsKIAkJCX0KIAkJCWlmICh1bmxpa2VseShkX2lzX25lZ2F0aXZlKGRlbnRyeSkpKQogCQkJCWVycm9yID0gLUVOT0VOVDsKJiM0MzsJCQlpZiAoZXJyb3IgJmFtcDsmYW1wOyBjcmVhdGVfZXJyb3IpIC8vIHNob3VsZCBoYXZlIGNyZWF0ZWQsIGJ1dCBlcnJvcmVkIGJlZm9yZQomIzQzOwkJCQlmYWlsZWRfY3JlYXRlID0gdHJ1ZTsKJiM0MzsJCX0gZWxzZSB7CiYjNDM7CQkJY29uc3QgY2hhciAqZnNuYW1lID0gZGVudHJ5LSZndDtkX3NiLSZndDtzX3R5cGUtJmd0O25hbWU7CiYjNDM7CQkJV0FSTigxLCAmIzM0OyVzOiAtJmd0O2F0b21pY19vcGVuKCkgbGVmdCBmaWxlLSZndDtmX3BhdGguZGVudHJ5IHVuc2V0IVxuJiMzNDssIGZzbmFtZSk7CiYjNDM7CQkJZXJyb3IgPSAtRUlPOwogCQl9CiAJfQomIzQzOwogCWlmIChlcnJvcikgewomIzQzOwkJaWYgKGZhaWxlZF9jcmVhdGUpCiYjNDM7CQkJYXVkaXRfaW5vZGVfY2hpbGQoZGlyLCBkZW50cnksIEFVRElUX1RZUEVfQ0hJTERfQ1JFQVRFKTsKIAkJZHB1dChkZW50cnkpOwogCQlkZW50cnkgPSBFUlJfUFRSKGVycm9yKTsKJiM0MzsJfSBlbHNlIHsKJiM0MzsJCWlmIChmaWxlLSZndDtmX21vZGUgJmFtcDsgRk1PREVfQ1JFQVRFRCkKJiM0MzsJCQlmc25vdGlmeV9jcmVhdGUoZGlyLCBkZW50cnkpOwomIzQzOwkJaWYgKGZpbGUtJmd0O2ZfbW9kZSAmYW1wOyBGTU9ERV9PUEVORUQpCiYjNDM7CQkJZnNub3RpZnlfb3BlbihmaWxlKTsKIAl9CiYjNDM7CiAJcmV0dXJuIGRlbnRyeTsKIH0KIAomIzQzO3N0YXRpYyBpbmxpbmUKJiM0MztzdHJ1Y3QgZGVudHJ5ICp2ZnNfbWtkaXJfbm9fcGVybShzdHJ1Y3QgbW50X2lkbWFwICosIHN0cnVjdCBpbm9kZSAqLAomIzQzOwkJCQkgc3RydWN0IGRlbnRyeSAqLCB1bW9kZV90LAomIzQzOwkJCQkgc3RydWN0IGRlbGVnYXRlZF9pbm9kZSAqKTsKIC8qCiAgKiBMb29rIHVwIGFuZCBtYXliZSBjcmVhdGUgYW5kIG9wZW4gdGhlIGxhc3QgY29tcG9uZW50LgogICoKQEAgLTQ0MTIsNiAmIzQzOzQ0OTIsNyBAQCBzdGF0aWMgc3RydWN0IGRlbnRyeSAqbG9va3VwX29wZW4oc3RydWN0IG5hbWVpZGF0YSAqbmQsIHN0cnVjdCBmaWxlICpmaWxlLAogCXN0cnVjdCBkZW50cnkgKmRlbnRyeTsKIAlpbnQgZXJyb3IsIGNyZWF0ZV9lcnJvciA9IDA7CiAJdW1vZGVfdCBtb2RlID0gb3AtJmd0O21vZGU7CiYjNDM7CWJvb2wgY3JlYXRlX2RpciA9IE9fSVNfTUtESVIob3Blbl9mbGFnKTsKIAogCWlmICh1bmxpa2VseShJU19ERUFERElSKGRpcl9pbm9kZSkpKQogCQlyZXR1cm4gRVJSX1BUUigtRU5PRU5UKTsKQEAgLTQ0MzcsNyAmIzQzOzQ1MTgsNyBAQCBzdGF0aWMgc3RydWN0IGRlbnRyeSAqbG9va3VwX29wZW4oc3RydWN0IG5hbWVpZGF0YSAqbmQsIHN0cnVjdCBmaWxlICpmaWxlLAogCQlkZW50cnkgPSBOVUxMOwogCX0KIAlpZiAoZGVudHJ5LSZndDtkX2lub2RlKSB7Ci0JCS8qIENhY2hlZCBwb3NpdGl2ZSBkZW50cnk6IHdpbGwgb3BlbiBpbiBmX29wLSZndDtvcGVuICovCiYjNDM7CQkvKiBDYWNoZWQgcG9zaXRpdmUgZGVudHJ5OiB3aWxsIG9wZW4gaW4gZG9fb3BlbigpLiAqLwogCQlyZXR1cm4gZGVudHJ5OwogCX0KIApAQCAtNDQ1OSwxOSAmIzQzOzQ1NDAsMjQgQEAgc3RhdGljIHN0cnVjdCBkZW50cnkgKmxvb2t1cF9vcGVuKHN0cnVjdCBuYW1laWRhdGEgKm5kLCBzdHJ1Y3QgZmlsZSAqZmlsZSwKIAlpZiAob3Blbl9mbGFnICZhbXA7IE9fQ1JFQVQpIHsKIAkJaWYgKG9wZW5fZmxhZyAmYW1wOyBPX0VYQ0wpCiAJCQlvcGVuX2ZsYWcgJmFtcDs9IH5PX1RSVU5DOwotCQltb2RlID0gdmZzX3ByZXBhcmVfbW9kZShpZG1hcCwgZGlyLSZndDtkX2lub2RlLCBtb2RlLCBtb2RlLCBtb2RlKTsKJiM0MzsJCW1vZGUgPSBvX2NyZWF0ZV9tb2RlKGlkbWFwLCBkaXJfaW5vZGUsIG1vZGUsIGNyZWF0ZV9kaXIpOwogCQlpZiAobGlrZWx5KGdvdF93cml0ZSkpCiAJCQljcmVhdGVfZXJyb3IgPSBtYXlfb19jcmVhdGUoaWRtYXAsICZhbXA7bmQtJmd0O3BhdGgsCi0JCQkJCQkgICAgZGVudHJ5LCBtb2RlKTsKJiM0MzsJCQkJCQkgICAgZGVudHJ5LCBtb2RlLCBjcmVhdGVfZGlyKTsKIAkJZWxzZQogCQkJY3JlYXRlX2Vycm9yID0gLUVST0ZTOwomIzQzOwkJLyogUmVmdXNlIHRvIGNyZWF0ZSBhIGRpcmVjdG9yeSB0aHJvdWdoIGEgZGFuZ2xpbmcgKHRyYWlsaW5nKQomIzQzOwkJICogc3ltbGluay4gRm9yIHJlZ3VsYXIgZmlsZXMgdGhpcyBoYXMgYmVlbiBhbGxvd2VkIGhpc3RvcmljYWxseQomIzQzOwkJICogb24gT19DUkVBVCB3aXRob3V0IE9fRVhDTC4gKi8KJiM0MzsJCWlmICh1bmxpa2VseShuZC0mZ3Q7ZGVwdGgpICZhbXA7JmFtcDsgY3JlYXRlX2RpciAmYW1wOyZhbXA7ICFjcmVhdGVfZXJyb3IpCiYjNDM7CQkJY3JlYXRlX2Vycm9yID0gLUVFWElTVDsKIAl9CiAJaWYgKGNyZWF0ZV9lcnJvcikKIAkJb3Blbl9mbGFnICZhbXA7PSB+T19DUkVBVDsKIAlpZiAoZGlyX2lub2RlLSZndDtpX29wLSZndDthdG9taWNfb3BlbikgewogCQlpZiAobmQtJmd0O2ZsYWdzICZhbXA7IExPT0tVUF9ESVJFQ1RPUlkpCiAJCQlvcGVuX2ZsYWcgfD0gT19ESVJFQ1RPUlk7Ci0JCWRlbnRyeSA9IGF0b21pY19vcGVuKCZhbXA7bmQtJmd0O3BhdGgsIGRlbnRyeSwgZmlsZSwgb3Blbl9mbGFnLCBtb2RlKTsKJiM0MzsJCWRlbnRyeSA9IGF0b21pY19vcGVuKCZhbXA7bmQtJmd0O3BhdGgsIGRlbnRyeSwgZmlsZSwgb3Blbl9mbGFnLCBtb2RlLCBjcmVhdGVfZXJyb3IpOwogCQlpZiAodW5saWtlbHkoY3JlYXRlX2Vycm9yKSAmYW1wOyZhbXA7IGRlbnRyeSA9PSBFUlJfUFRSKC1FTk9FTlQpKQogCQkJZGVudHJ5ID0gRVJSX1BUUihjcmVhdGVfZXJyb3IpOwogCQlyZXR1cm4gZGVudHJ5OwpAQCAtNDQ5MCwzMCAmIzQzOzQ1NzYsNDQgQEAgc3RhdGljIHN0cnVjdCBkZW50cnkgKmxvb2t1cF9vcGVuKHN0cnVjdCBuYW1laWRhdGEgKm5kLCBzdHJ1Y3QgZmlsZSAqZmlsZSwKIAkJCWRlbnRyeSA9IHJlczsKIAkJfQogCX0KJiM0MzsJaWYgKGRlbnRyeS0mZ3Q7ZF9pbm9kZSB8fCAhKG9wLSZndDtvcGVuX2ZsYWcgJmFtcDsgT19DUkVBVCkpIHsKJiM0MzsJCS8qIE5vIG5lZWQgdG8gY3JlYXRlIGEgZmlsZS4gSWYgbG9va3VwIHJldHVybmVkIGEgcG9zaXRpdmUKJiM0MzsJCSAqIGRlbnRyeSwgdGhlIGZpbGUgd2lsbCBiZSBvcGVuZWQgaW4gZG9fb3BlbigpLiAqLwomIzQzOwkJcmV0dXJuIGRlbnRyeTsKJiM0MzsJfQogCi0JLyogTmVnYXRpdmUgZGVudHJ5LCBqdXN0IGNyZWF0ZSB0aGUgZmlsZSAqLwotCWlmICghZGVudHJ5LSZndDtkX2lub2RlICZhbXA7JmFtcDsgKG9wZW5fZmxhZyAmYW1wOyBPX0NSRUFUKSkgewotCQkvKiBidXQgYnJlYWsgdGhlIGRpcmVjdG9yeSBsZWFzZSBmaXJzdCEgKi8KLQkJZXJyb3IgPSB0cnlfYnJlYWtfZGVsZWcoZGlyX2lub2RlLCBMRUFTRV9CUkVBS19ESVJfQ1JFQVRFLCBkZWxlZ2F0ZWRfaW5vZGUpOwotCQlpZiAoZXJyb3IpCi0JCQlnb3RvIG91dF9kcHV0OwotCi0JCWZpbGUtJmd0O2ZfbW9kZSB8PSBGTU9ERV9DUkVBVEVEOwotCQlhdWRpdF9pbm9kZV9jaGlsZChkaXJfaW5vZGUsIGRlbnRyeSwgQVVESVRfVFlQRV9DSElMRF9DUkVBVEUpOwotCQlpZiAoIWRpcl9pbm9kZS0mZ3Q7aV9vcC0mZ3Q7Y3JlYXRlKSB7Ci0JCQllcnJvciA9IC1FQUNDRVM7Ci0JCQlnb3RvIG91dF9kcHV0OwotCQl9CiYjNDM7CS8qIE5lZ2F0aXZlIGRlbnRyeSB3aXRoIE9fQ1JFQVQgZmxhZyBzZXQgKi8KJiM0MzsJYXVkaXRfaW5vZGVfY2hpbGQoZGlyLSZndDtkX2lub2RlLCBkZW50cnksIEFVRElUX1RZUEVfQ0hJTERfQ1JFQVRFKTsKIAotCQllcnJvciA9IGRpcl9pbm9kZS0mZ3Q7aV9vcC0mZ3Q7Y3JlYXRlKGlkbWFwLCBkaXJfaW5vZGUsIGRlbnRyeSwKLQkJCQkJCW1vZGUsIG9wZW5fZmxhZyAmYW1wOyBPX0VYQ0wpOwotCQlpZiAoZXJyb3IpCi0JCQlnb3RvIG91dF9kcHV0OwotCX0KLQlpZiAodW5saWtlbHkoY3JlYXRlX2Vycm9yKSAmYW1wOyZhbXA7ICFkZW50cnktJmd0O2RfaW5vZGUpIHsKJiM0MzsJaWYgKHVubGlrZWx5KGNyZWF0ZV9lcnJvcikpIHsKJiM0MzsJCS8qIFNob3VsZCBoYXZlIGRvbmUgYSBjcmVhdGUsIGJ1dCB3ZSBhbHJlYWR5IGVycm9yZWQgKi8KIAkJZXJyb3IgPSBjcmVhdGVfZXJyb3I7CiAJCWdvdG8gb3V0X2RwdXQ7CiAJfQomIzQzOwomIzQzOwlpZiAoKGNyZWF0ZV9kaXIgJmFtcDsmYW1wOyAhZGlyX2lub2RlLSZndDtpX29wLSZndDtta2RpcikKJiM0MzsJICAgIHx8ICghY3JlYXRlX2RpciAmYW1wOyZhbXA7ICFkaXJfaW5vZGUtJmd0O2lfb3AtJmd0O2NyZWF0ZSkpIHsKJiM0MzsJCWVycm9yID0gLUVBQ0NFUzsKJiM0MzsJCWdvdG8gb3V0X2RwdXQ7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKGNyZWF0ZV9kaXIpIHsKJiM0MzsJCXN0cnVjdCBkZW50cnkgKnJlcyA9IHZmc19ta2Rpcl9ub19wZXJtKGlkbWFwLCBkaXJfaW5vZGUsIGRlbnRyeSwKJiM0MzsJCQkJCQkgICAgICAgbW9kZSwgZGVsZWdhdGVkX2lub2RlKTsKJiM0MzsJCWlmIChJU19FUlIocmVzKSkgewomIzQzOwkJCWVycm9yID0gUFRSX0VSUihyZXMpOwomIzQzOwkJfSBlbHNlIHsKJiM0MzsJCQllcnJvciA9IDA7CiYjNDM7CQkJZGVudHJ5ID0gcmVzOwomIzQzOwkJfQomIzQzOwl9IGVsc2UgewomIzQzOwkJZXJyb3IgPSB2ZnNfY3JlYXRlX25vX3Blcm0oaWRtYXAsIGRlbnRyeSwgbW9kZSwgZGVsZWdhdGVkX2lub2RlKTsKJiM0MzsJfQomIzQzOwlpZiAoZXJyb3IpCiYjNDM7CQlnb3RvIG91dF9kcHV0OwomIzQzOwomIzQzOwlmaWxlLSZndDtmX21vZGUgfD0gRk1PREVfQ1JFQVRFRDsKJiM0MzsKIAlyZXR1cm4gZGVudHJ5OwogCiBvdXRfZHB1dDoKQEAgLTQ1MjEsMTcgJiM0Mzs0NjIxLDEyIEBAIHN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpsb29rdXBfb3BlbihzdHJ1Y3QgbmFtZWlkYXRhICpuZCwgc3RydWN0IGZpbGUgKmZpbGUsCiAJcmV0dXJuIEVSUl9QVFIoZXJyb3IpOwogfQogCi1zdGF0aWMgaW5saW5lIGJvb2wgdHJhaWxpbmdfc2xhc2hlcyhzdHJ1Y3QgbmFtZWlkYXRhICpuZCkKLXsKLQlyZXR1cm4gKGJvb2wpbmQtJmd0O2xhc3QubmFtZVtuZC0mZ3Q7bGFzdC5sZW5dOwotfQotCiBzdGF0aWMgc3RydWN0IGRlbnRyeSAqbG9va3VwX2Zhc3RfZm9yX29wZW4oc3RydWN0IG5hbWVpZGF0YSAqbmQsIGludCBvcGVuX2ZsYWcpCiB7CiAJc3RydWN0IGRlbnRyeSAqZGVudHJ5OwogCiAJaWYgKG9wZW5fZmxhZyAmYW1wOyBPX0NSRUFUKSB7Ci0JCWlmICh0cmFpbGluZ19zbGFzaGVzKG5kKSkKJiM0MzsJCWlmICh0cmFpbGluZ19zbGFzaGVzKG5kLSZndDtsYXN0KSAmYW1wOyZhbXA7ICEob3Blbl9mbGFnICZhbXA7IE9fRElSRUNUT1JZKSkKIAkJCXJldHVybiBFUlJfUFRSKC1FSVNESVIpOwogCiAJCS8qIERvbiYjMzk7dCBib3RoZXIgb24gYW4gT19FWENMIGNyZWF0ZSAqLwpAQCAtNDUzOSw3ICYjNDM7NDYzNCw3IEBAIHN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpsb29rdXBfZmFzdF9mb3Jfb3BlbihzdHJ1Y3QgbmFtZWlkYXRhICpuZCwgaW50IG9wZW5fZmxhZykKIAkJCXJldHVybiBOVUxMOwogCX0KIAotCWlmICh0cmFpbGluZ19zbGFzaGVzKG5kKSkKJiM0MzsJaWYgKHRyYWlsaW5nX3NsYXNoZXMobmQtJmd0O2xhc3QpKQogCQluZC0mZ3Q7ZmxhZ3MgfD0gTE9PS1VQX0ZPTExPVyB8IExPT0tVUF9ESVJFQ1RPUlk7CiAKIAlkZW50cnkgPSBsb29rdXBfZmFzdChuZCk7CkBAIC00NjAyLDE2ICYjNDM7NDY5NywxMiBAQCBzdGF0aWMgY29uc3QgY2hhciAqb3Blbl9sYXN0X2xvb2t1cHMoc3RydWN0IG5hbWVpZGF0YSAqbmQsCiAJCSAqLwogCX0KIAlpZiAob3Blbl9mbGFnICZhbXA7IE9fQ1JFQVQpCi0JCWlub2RlX2xvY2soZGlyLSZndDtkX2lub2RlKTsKJiM0MzsJCWlub2RlX2xvY2tfbmVzdGVkKGRpci0mZ3Q7ZF9pbm9kZSwgSV9NVVRFWF9QQVJFTlQpOwogCWVsc2UKIAkJaW5vZGVfbG9ja19zaGFyZWQoZGlyLSZndDtkX2lub2RlKTsKJiM0MzsKIAlkZW50cnkgPSBsb29rdXBfb3BlbihuZCwgZmlsZSwgb3AsIGdvdF93cml0ZSwgJmFtcDtkZWxlZ2F0ZWRfaW5vZGUpOwotCWlmICghSVNfRVJSKGRlbnRyeSkpIHsKLQkJaWYgKGZpbGUtJmd0O2ZfbW9kZSAmYW1wOyBGTU9ERV9DUkVBVEVEKQotCQkJZnNub3RpZnlfY3JlYXRlKGRpci0mZ3Q7ZF9pbm9kZSwgZGVudHJ5KTsKLQkJaWYgKGZpbGUtJmd0O2ZfbW9kZSAmYW1wOyBGTU9ERV9PUEVORUQpCi0JCQlmc25vdGlmeV9vcGVuKGZpbGUpOwotCX0KJiM0MzsKIAlpZiAob3Blbl9mbGFnICZhbXA7IE9fQ1JFQVQpCiAJCWlub2RlX3VubG9jayhkaXItJmd0O2RfaW5vZGUpOwogCWVsc2UKQEAgLTQ2NjksOCAmIzQzOzQ3NjAsOSBAQCBzdGF0aWMgaW50IGRvX29wZW4oc3RydWN0IG5hbWVpZGF0YSAqbmQsCiAJaWYgKG9wZW5fZmxhZyAmYW1wOyBPX0NSRUFUKSB7CiAJCWlmICgob3Blbl9mbGFnICZhbXA7IE9fRVhDTCkgJmFtcDsmYW1wOyAhKGZpbGUtJmd0O2ZfbW9kZSAmYW1wOyBGTU9ERV9DUkVBVEVEKSkKIAkJCXJldHVybiAtRUVYSVNUOwotCQlpZiAoZF9pc19kaXIobmQtJmd0O3BhdGguZGVudHJ5KSkKJiM0MzsJCWlmICghKG9wZW5fZmxhZyAmYW1wOyBPX0RJUkVDVE9SWSkgJmFtcDsmYW1wOyBkX2lzX2RpcihuZC0mZ3Q7cGF0aC5kZW50cnkpKQogCQkJcmV0dXJuIC1FSVNESVI7CiYjNDM7CiAJCWVycm9yID0gbWF5X2NyZWF0ZV9pbl9zdGlja3koaWRtYXAsIG5kLAogCQkJCQkgICAgIGRfYmFja2luZ19pbm9kZShuZC0mZ3Q7cGF0aC5kZW50cnkpKTsKIAkJaWYgKHVubGlrZWx5KGVycm9yKSkKQEAgLTQ5NTAsNyAmIzQzOzUwNDIsNyBAQCBzdGF0aWMgc3RydWN0IGRlbnRyeSAqZmlsZW5hbWVfY3JlYXRlKGludCBkZmQsIHN0cnVjdCBmaWxlbmFtZSAqbmFtZSwKIAkgKiBEbyB0aGUgZmluYWwgbG9va3VwLiAgU3VwcHJlc3MgJiMzOTtjcmVhdGUmIzM5OyBpZiB0aGVyZSBpcyBhIHRyYWlsaW5nCiAJICogJiMzOTsvJiMzOTssIGFuZCBhIGRpcmVjdG9yeSB3YXNuJiMzOTt0IHJlcXVlc3RlZC4KIAkgKi8KLQlpZiAobGFzdC5uYW1lW2xhc3QubGVuXSAmYW1wOyZhbXA7ICF3YW50X2RpcikKJiM0MzsJaWYgKHRyYWlsaW5nX3NsYXNoZXMobGFzdCkgJmFtcDsmYW1wOyAhd2FudF9kaXIpCiAJCWNyZWF0ZV9mbGFncyAmYW1wOz0gfkxPT0tVUF9DUkVBVEU7CiAJZGVudHJ5ID0gc3RhcnRfZGlyb3AocGF0aC0mZ3Q7ZGVudHJ5LCAmYW1wO2xhc3QsIHJldmFsX2ZsYWcgfCBjcmVhdGVfZmxhZ3MpOwogCWlmIChJU19FUlIoZGVudHJ5KSkKQEAgLTUwNDUsMTMgJiM0Mzs1MTM3LDEzIEBAIHN0cnVjdCBmaWxlICpkZW50cnlfY3JlYXRlKHN0cnVjdCBwYXRoICpwYXRoLCBpbnQgZmxhZ3MsIHVtb2RlX3QgbW9kZSwKIAkJcGF0aC0mZ3Q7ZGVudHJ5ID0gZGlyOwogCQltb2RlID0gdmZzX3ByZXBhcmVfbW9kZShpZG1hcCwgZGlyX2lub2RlLCBtb2RlLCBTX0lBTExVR08sIFNfSUZSRUcpOwogCi0JCWNyZWF0ZV9lcnJvciA9IG1heV9vX2NyZWF0ZShpZG1hcCwgcGF0aCwgZGVudHJ5LCBtb2RlKTsKJiM0MzsJCWNyZWF0ZV9lcnJvciA9IG1heV9vX2NyZWF0ZShpZG1hcCwgcGF0aCwgZGVudHJ5LCBtb2RlLCAvKmNyZWF0ZV9kaXI9Ki8gZmFsc2UpOwogCQlpZiAoY3JlYXRlX2Vycm9yKQogCQkJZmxhZ3MgJmFtcDs9IH5PX0NSRUFUOwogCiAJCS8qIGF0b21pY19vcGVuIHdpbGwgZHB1dChkZW50cnkpIG9uIGVycm9yICovCiAJCWRnZXQob3JpZ19kZW50cnkpOwotCQlkZW50cnkgPSBhdG9taWNfb3BlbihwYXRoLCBkZW50cnksIGZpbGUsIGZsYWdzLCBtb2RlKTsKJiM0MzsJCWRlbnRyeSA9IGF0b21pY19vcGVuKHBhdGgsIGRlbnRyeSwgZmlsZSwgZmxhZ3MsIG1vZGUsIGNyZWF0ZV9lcnJvcik7CiAJCWVycm9yID0gUFRSX0VSUl9PUl9aRVJPKGRlbnRyeSk7CiAKIAkJaWYgKElTX0VSUihkZW50cnkpKQpAQCAtNTA2NCwxMyAmIzQzOzUxNTYsNiBAQCBzdHJ1Y3QgZmlsZSAqZGVudHJ5X2NyZWF0ZShzdHJ1Y3QgcGF0aCAqcGF0aCwgaW50IGZsYWdzLCB1bW9kZV90IG1vZGUsCiAJCWlmICh1bmxpa2VseShjcmVhdGVfZXJyb3IpICZhbXA7JmFtcDsgZXJyb3IgPT0gLUVOT0VOVCkKIAkJCWVycm9yID0gY3JlYXRlX2Vycm9yOwogCi0JCWlmICghZXJyb3IpIHsKLQkJCWlmIChmaWxlLSZndDtmX21vZGUgJmFtcDsgRk1PREVfQ1JFQVRFRCkKLQkJCQlmc25vdGlmeV9jcmVhdGUoZGlyLSZndDtkX2lub2RlLCBkZW50cnkpOwotCQkJaWYgKGZpbGUtJmd0O2ZfbW9kZSAmYW1wOyBGTU9ERV9PUEVORUQpCi0JCQkJZnNub3RpZnlfb3BlbihmaWxlKTsKLQkJfQotCiAJCXBhdGgtJmd0O2RlbnRyeSA9IGRlbnRyeTsKIAogCX0gZWxzZSB7CkBAIC01MjIyLDYgJiM0Mzs1MzA3LDM5IEBAIFNZU0NBTExfREVGSU5FMyhta25vZCwgY29uc3QgY2hhciBfX3VzZXIgKiwgZmlsZW5hbWUsIHVtb2RlX3QsIG1vZGUsIHVuc2lnbmVkLCBkCiAJcmV0dXJuIGZpbGVuYW1lX21rbm9kYXQoQVRfRkRDV0QsIG5hbWUsIG1vZGUsIGRldik7CiB9CiAKJiM0MztzdGF0aWMgaW5saW5lCiYjNDM7c3RydWN0IGRlbnRyeSAqdmZzX21rZGlyX25vX3Blcm0oc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLAomIzQzOwkJCQkgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUsCiYjNDM7CQkJCSBzdHJ1Y3QgZGVsZWdhdGVkX2lub2RlICpkaSkKJiM0Mzt7CiYjNDM7CWludCBlcnJvcjsKJiM0MzsJc3RydWN0IGRlbnRyeSAqZGU7CiYjNDM7CXVuc2lnbmVkIG1heF9saW5rcyA9IGRpci0mZ3Q7aV9zYi0mZ3Q7c19tYXhfbGlua3M7CiYjNDM7CiYjNDM7CWVycm9yID0gLUVNTElOSzsKJiM0MzsJaWYgKG1heF9saW5rcyAmYW1wOyZhbXA7IGRpci0mZ3Q7aV9ubGluayAmZ3Q7PSBtYXhfbGlua3MpCiYjNDM7CQlnb3RvIGVycjsKJiM0MzsKJiM0MzsJZXJyb3IgPSB0cnlfYnJlYWtfZGVsZWcoZGlyLCBMRUFTRV9CUkVBS19ESVJfQ1JFQVRFLCBkaSk7CiYjNDM7CWlmIChlcnJvcikKJiM0MzsJCWdvdG8gZXJyOwomIzQzOwomIzQzOwlkZSA9IGRpci0mZ3Q7aV9vcC0mZ3Q7bWtkaXIoaWRtYXAsIGRpciwgZGVudHJ5LCBtb2RlKTsKJiM0MzsJaWYgKElTX0VSUihkZSkpIHsKJiM0MzsJCWVycm9yID0gUFRSX0VSUihkZSk7CiYjNDM7CQlnb3RvIGVycjsKJiM0MzsJfQomIzQzOwlpZiAoZGUpIHsKJiM0MzsJCWRwdXQoZGVudHJ5KTsKJiM0MzsJCWRlbnRyeSA9IGRlOwomIzQzOwl9CiYjNDM7CWZzbm90aWZ5X21rZGlyKGRpciwgZGVudHJ5KTsKJiM0MzsJcmV0dXJuIGRlbnRyeTsKJiM0MzsKJiM0MztlcnI6CiYjNDM7CXJldHVybiBFUlJfUFRSKGVycm9yKTsKJiM0Mzt9CiYjNDM7CiAvKioKICAqIHZmc19ta2RpciAtIGNyZWF0ZSBkaXJlY3RvcnkgcmV0dXJuaW5nIGNvcnJlY3QgZGVudHJ5IGlmIHBvc3NpYmxlCiAgKiBAaWRtYXA6CQlpZG1hcCBvZiB0aGUgbW91bnQgdGhlIGlub2RlIHdhcyBmb3VuZCBmcm9tCkBAIC01MjQ5LDcgJiM0Mzs1MzY3LDYgQEAgc3RydWN0IGRlbnRyeSAqdmZzX21rZGlyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpciwKIAkJCSBzdHJ1Y3QgZGVsZWdhdGVkX2lub2RlICpkZWxlZ2F0ZWRfaW5vZGUpCiB7CiAJaW50IGVycm9yOwotCXVuc2lnbmVkIG1heF9saW5rcyA9IGRpci0mZ3Q7aV9zYi0mZ3Q7c19tYXhfbGlua3M7CiAJc3RydWN0IGRlbnRyeSAqZGU7CiAKIAllcnJvciA9IG1heV9jcmVhdGVfZGVudHJ5KGlkbWFwLCBkaXIsIGRlbnRyeSk7CkBAIC01MjY1LDI0ICYjNDM7NTM4MiwxMiBAQCBzdHJ1Y3QgZGVudHJ5ICp2ZnNfbWtkaXIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLAogCWlmIChlcnJvcikKIAkJZ290byBlcnI7CiAKLQllcnJvciA9IC1FTUxJTks7Ci0JaWYgKG1heF9saW5rcyAmYW1wOyZhbXA7IGRpci0mZ3Q7aV9ubGluayAmZ3Q7PSBtYXhfbGlua3MpCi0JCWdvdG8gZXJyOwotCi0JZXJyb3IgPSB0cnlfYnJlYWtfZGVsZWcoZGlyLCBMRUFTRV9CUkVBS19ESVJfQ1JFQVRFLCBkZWxlZ2F0ZWRfaW5vZGUpOwotCWlmIChlcnJvcikKLQkJZ290byBlcnI7Ci0KLQlkZSA9IGRpci0mZ3Q7aV9vcC0mZ3Q7bWtkaXIoaWRtYXAsIGRpciwgZGVudHJ5LCBtb2RlKTsKLQllcnJvciA9IFBUUl9FUlIoZGUpOwotCWlmIChJU19FUlIoZGUpKQomIzQzOwlkZSA9IHZmc19ta2Rpcl9ub19wZXJtKGlkbWFwLCBkaXIsIGRlbnRyeSwgbW9kZSwgZGVsZWdhdGVkX2lub2RlKTsKJiM0MzsJaWYgKElTX0VSUihkZSkpIHsKJiM0MzsJCWVycm9yID0gUFRSX0VSUihkZSk7CiAJCWdvdG8gZXJyOwotCWlmIChkZSkgewotCQlkcHV0KGRlbnRyeSk7Ci0JCWRlbnRyeSA9IGRlOwogCX0KLQlmc25vdGlmeV9ta2RpcihkaXIsIGRlbnRyeSk7Ci0JcmV0dXJuIGRlbnRyeTsKJiM0MzsJcmV0dXJuIGRlOwogCiBlcnI6CiAJZW5kX2NyZWF0aW5nKGRlbnRyeSk7CkBAIC01NTY5LDcgJiM0Mzs1Njc0LDcgQEAgaW50IGZpbGVuYW1lX3VubGlua2F0KGludCBkZmQsIHN0cnVjdCBmaWxlbmFtZSAqbmFtZSkKIAkJZ290byBleGl0X2Ryb3Bfd3JpdGU7CiAKIAkvKiBXaHkgbm90IGJlZm9yZT8gQmVjYXVzZSB3ZSB3YW50IGNvcnJlY3QgZXJyb3IgdmFsdWUgKi8KLQlpZiAodW5saWtlbHkobGFzdC5uYW1lW2xhc3QubGVuXSkpIHsKJiM0MzsJaWYgKHVubGlrZWx5KHRyYWlsaW5nX3NsYXNoZXMobGFzdCkpKSB7CiAJCWlmIChkX2lzX2RpcihkZW50cnkpKQogCQkJZXJyb3IgPSAtRUlTRElSOwogCQllbHNlCkBAIC02MTcxLDE2ICYjNDM7NjI3NiwxNiBAQCBpbnQgZmlsZW5hbWVfcmVuYW1lYXQyKGludCBvbGRkZmQsIHN0cnVjdCBmaWxlbmFtZSAqZnJvbSwKIAlpZiAoZmxhZ3MgJmFtcDsgUkVOQU1FX0VYQ0hBTkdFKSB7CiAJCWlmICghZF9pc19kaXIocmQubmV3X2RlbnRyeSkpIHsKIAkJCWVycm9yID0gLUVOT1RESVI7Ci0JCQlpZiAobmV3X2xhc3QubmFtZVtuZXdfbGFzdC5sZW5dKQomIzQzOwkJCWlmICh0cmFpbGluZ19zbGFzaGVzKG5ld19sYXN0KSkKIAkJCQlnb3RvIGV4aXRfdW5sb2NrOwogCQl9CiAJfQogCS8qIHVubGVzcyB0aGUgc291cmNlIGlzIGEgZGlyZWN0b3J5IHRyYWlsaW5nIHNsYXNoZXMgZ2l2ZSAtRU5PVERJUiAqLwogCWlmICghZF9pc19kaXIocmQub2xkX2RlbnRyeSkpIHsKIAkJZXJyb3IgPSAtRU5PVERJUjsKLQkJaWYgKG9sZF9sYXN0Lm5hbWVbb2xkX2xhc3QubGVuXSkKJiM0MzsJCWlmICh0cmFpbGluZ19zbGFzaGVzKG9sZF9sYXN0KSkKIAkJCWdvdG8gZXhpdF91bmxvY2s7Ci0JCWlmICghKGZsYWdzICZhbXA7IFJFTkFNRV9FWENIQU5HRSkgJmFtcDsmYW1wOyBuZXdfbGFzdC5uYW1lW25ld19sYXN0Lmxlbl0pCiYjNDM7CQlpZiAoIShmbGFncyAmYW1wOyBSRU5BTUVfRVhDSEFOR0UpICZhbXA7JmFtcDsgdHJhaWxpbmdfc2xhc2hlcyhuZXdfbGFzdCkpCiAJCQlnb3RvIGV4aXRfdW5sb2NrOwogCX0KIApkaWZmIC0tZ2l0IGEvZnMvbmZzL2Rpci5jIGIvZnMvbmZzL2Rpci5jCmluZGV4IGM3YjcyM2MxODYyMGM5Li5jODE1ZDlhYTliNjlkYSAxMDA2NDQKLS0tIGEvZnMvbmZzL2Rpci5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL25mcy9kaXIuYwpAQCAtMjEyMSw2ICYjNDM7MjEyMSw5IEBAIGludCBuZnNfYXRvbWljX29wZW4oc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwKIAlkZnByaW50ayhWRlMsICYjMzQ7TkZTOiBhdG9taWNfb3Blbiglcy8lbGx1KSwgJXBkXG4mIzM0OywKIAkJCWRpci0mZ3Q7aV9zYi0mZ3Q7c19pZCwgZGlyLSZndDtpX2lubywgZGVudHJ5KTsKIAomIzQzOwlpZiAoT19JU19NS0RJUihvcGVuX2ZsYWdzKSkKJiM0MzsJCW9wZW5fZmxhZ3MgJmFtcDs9IH5PX0NSRUFUOwomIzQzOwogCWVyciA9IG5mc19jaGVja19mbGFncyhvcGVuX2ZsYWdzKTsKIAlpZiAoZXJyKQogCQlyZXR1cm4gZXJyOwpAQCAtMjMxMyw2ICYjNDM7MjMxNiw5IEBAIGludCBuZnNfYXRvbWljX29wZW5fdjIzKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksCiAJICovCiAJaW50IGVycm9yID0gMDsKIAomIzQzOwlpZiAoT19JU19NS0RJUihvcGVuX2ZsYWdzKSkKJiM0MzsJCW9wZW5fZmxhZ3MgJmFtcDs9IH5PX0NSRUFUOwomIzQzOwogCWlmIChkZW50cnktJmd0O2RfbmFtZS5sZW4gJmd0OyBORlNfU0VSVkVSKGRpciktJmd0O25hbWVsZW4pCiAJCXJldHVybiAtRU5BTUVUT09MT05HOwogCmRpZmYgLS1naXQgYS9mcy9vcGVuLmMgYi9mcy9vcGVuLmMKaW5kZXggNDA4OTI1ZDdiZDBiNzcuLjg3ZTg4NjRkOTQ4MDg3IDEwMDY0NAotLS0gYS9mcy9vcGVuLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvb3Blbi5jCkBAIC0xMTkwLDI5ICYjNDM7MTE5MCwzMCBAQCBpbmxpbmUgaW50IGJ1aWxkX29wZW5fZmxhZ3MoY29uc3Qgc3RydWN0IG9wZW5faG93ICpob3csIHN0cnVjdCBvcGVuX2ZsYWdzICpvcCkKIAlpZiAoV0lMTF9DUkVBVEUoZmxhZ3MpKSB7CiAJCWlmIChob3ctJmd0O21vZGUgJmFtcDsgflNfSUFMTFVHTykKIAkJCXJldHVybiAtRUlOVkFMOwotCQlvcC0mZ3Q7bW9kZSA9IGhvdy0mZ3Q7bW9kZSB8IFNfSUZSRUc7CiYjNDM7CQlpZiAoT19JU19NS0RJUihmbGFncykpCiYjNDM7CQkJb3AtJmd0O21vZGUgPSBob3ctJmd0O21vZGUgfCBTX0lGRElSOwomIzQzOwkJZWxzZQomIzQzOwkJCW9wLSZndDttb2RlID0gaG93LSZndDttb2RlIHwgU19JRlJFRzsKIAl9IGVsc2UgewogCQlpZiAoaG93LSZndDttb2RlICE9IDApCiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJb3AtJmd0O21vZGUgPSAwOwogCX0KIAotCS8qCi0JICogQmxvY2sgYnVncyB3aGVyZSBPX0RJUkVDVE9SWSB8IE9fQ1JFQVQgY3JlYXRlZCByZWd1bGFyIGZpbGVzLgotCSAqIE5vdGUsIHRoYXQgYmxvY2tpbmcgT19ESVJFQ1RPUlkgfCBPX0NSRUFUIGhlcmUgYWxzbyBwcm90ZWN0cwotCSAqIE9fVE1QRklMRSBiZWxvdyB3aGljaCByZXF1aXJlcyBPX0RJUkVDVE9SWSBiZWluZyByYWlzZWQuCi0JICovCi0JaWYgKChmbGFncyAmYW1wOyAoT19ESVJFQ1RPUlkgfCBPX0NSRUFUKSkgPT0gKE9fRElSRUNUT1JZIHwgT19DUkVBVCkpCi0JCXJldHVybiAtRUlOVkFMOwotCiAJLyogTm93IGhhbmRsZSB0aGUgY3JlYXRpdmUgaW1wbGVtZW50YXRpb24gb2YgT19UTVBGSUxFLiAqLwogCWlmIChmbGFncyAmYW1wOyBfX09fVE1QRklMRSkgewogCQkvKgogCQkgKiBJbiBvcmRlciB0byBlbnN1cmUgcHJvZ3JhbXMgZ2V0IGV4cGxpY2l0IGVycm9ycyB3aGVuIHRyeWluZwogCQkgKiB0byB1c2UgT19UTVBGSUxFIG9uIG9sZCBrZXJuZWxzIHdlIGVuZm9yY2UgdGhhdCBPX0RJUkVDVE9SWQotCQkgKiBpcyByYWlzZWQgYWxvbmdzaWRlIF9fT19UTVBGSUxFLgomIzQzOwkJICogaXMgcmFpc2VkIGFsb25nc2lkZSBfX09fVE1QRklMRSwgYnV0IHdpdGhvdXQgT19DUkVBVC4gVGhlCiYjNDM7CQkgKiByZWFzb24gZm9yIGRpc2FsbG93aW5nIE9fQ1JFQVR8T19UTVBGSUxFIGlzIHRoYXQKJiM0MzsJCSAqIE9fRElSRUNUT1JZfE9fQ1JFQVQgdXNlZCB0byB3b3JrIGFuZCBjcmVhdGVkIGEgcmVndWxhciBmaWxlCiYjNDM7CQkgKiBpZiBub3RoaW5nIGV4aXN0ZWQgYXQgdGhlIG9wZW4gcGF0aC4gSGVuY2UsIGFsbG93aW5nIHRoZQomIzQzOwkJICogY29tYmluYXRpb24gd291bGQgaGF2ZSBjYXVzZWQgT19DUkVBVHxPX1RNUEZJTEUgdG8gY3JlYXRlIGEKJiM0MzsJCSAqIHJlZ3VsYXIgKG5vbi10ZW1wb3JhcnkpIGZpbGUgb24gb2xkIGtlcm5lbHMsIHdoaWxlIHRoZSBjYWxsZXIKJiM0MzsJCSAqIHdvdWxkIGJlbGlldmUgdGhleSBjcmVhdGVkIGFuIGFjdHVhbCBPX1RNUEZJTEUuCiAJCSAqLwotCQlpZiAoIShmbGFncyAmYW1wOyBPX0RJUkVDVE9SWSkpCiYjNDM7CQlpZiAoIShmbGFncyAmYW1wOyBPX0RJUkVDVE9SWSkgfHwgKGZsYWdzICZhbXA7IE9fQ1JFQVQpKQogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCWlmICghKGFjY19tb2RlICZhbXA7IE1BWV9XUklURSkpCiAJCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTEyNjksNiAmIzQzOzEyNzAsMTUgQEAgaW5saW5lIGludCBidWlsZF9vcGVuX2ZsYWdzKGNvbnN0IHN0cnVjdCBvcGVuX2hvdyAqaG93LCBzdHJ1Y3Qgb3Blbl9mbGFncyAqb3ApCiAKIAlvcC0mZ3Q7aW50ZW50ID0gZmxhZ3MgJmFtcDsgT19QQVRIID8gMCA6IExPT0tVUF9PUEVOOwogCiYjNDM7CS8qCiYjNDM7CSAqIFJlcXVlc3Rpbmcgd3JpdGUgYWNjZXNzIG9uIGEgZGlyZWN0b3J5IGNhbiBuZXZlciBzdWNjZWVkLiBSYXRoZXIKJiM0MzsJICogdGhhbiBwZXJmb3JtaW5nIGEgcGF0aC13YWxrIHRvIGRldGVybWluZSB3aGV0aGVyIHRoZSB0YXJnZXQgaXMKJiM0MzsJICogYWN0dWFsbHkgYSBkaXJlY3RvcnkgKC1FSVNESVIpIG9yIG5vdCAoLUVOT1RESVIpLCB3ZSBzaG9ydC1jaXJjdWl0CiYjNDM7CSAqIHRvIC1FTk9URElSLgomIzQzOwkgKi8KJiM0MzsJaWYgKChmbGFncyAmYW1wOyBPX0RJUkVDVE9SWSkgJmFtcDsmYW1wOyAhKGZsYWdzICZhbXA7IF9fT19UTVBGSUxFKSAmYW1wOyZhbXA7IChhY2NfbW9kZSAmYW1wOyBNQVlfV1JJVEUpKQomIzQzOwkJcmV0dXJuIC1FTk9URElSOwomIzQzOwogCWlmIChmbGFncyAmYW1wOyBPX0NSRUFUKSB7CiAJCW9wLSZndDtpbnRlbnQgfD0gTE9PS1VQX0NSRUFURTsKIAkJaWYgKGZsYWdzICZhbXA7IE9fRVhDTCkgewpkaWZmIC0tZ2l0IGEvZnMvc21iL2NsaWVudC9kaXIuYyBiL2ZzL3NtYi9jbGllbnQvZGlyLmMKaW5kZXggODhhNGExNzg3ZmYwNDcuLjc1YmY4NmNjMDYxMjJlIDEwMDY0NAotLS0gYS9mcy9zbWIvY2xpZW50L2Rpci5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL3NtYi9jbGllbnQvZGlyLmMKQEAgLTUzOCw2ICYjNDM7NTM4LDkgQEAgaW50IGNpZnNfYXRvbWljX29wZW4oc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRpcmVudHJ5LAogCWlmICh1bmxpa2VseShjaWZzX2ZvcmNlZF9zaHV0ZG93bihjaWZzX3NiKSkpCiAJCXJldHVybiBzbWJfRUlPKHNtYl9laW9fdHJhY2VfZm9yY2VkX3NodXRkb3duKTsKIAomIzQzOwlpZiAoT19JU19NS0RJUihvZmxhZ3MpKQomIzQzOwkJb2ZsYWdzICZhbXA7PSB+T19DUkVBVDsKJiM0MzsKIAkvKgogCSAqIFBvc2l4IG9wZW4gaXMgb25seSBjYWxsZWQgKGF0IGxvb2t1cCB0aW1lKSBmb3IgZmlsZSBjcmVhdGUgbm93LiBGb3IKIAkgKiBvcGVucyAocmF0aGVyIHRoYW4gY3JlYXRlcyksIGJlY2F1c2Ugd2UgZG8gbm90IGtub3cgaWYgaXQgaXMgYSBmaWxlCmRpZmYgLS1naXQgYS9mcy92Ym94c2YvZGlyLmMgYi9mcy92Ym94c2YvZGlyLmMKaW5kZXggYzViZDMyNzFhYTk2MTYuLjc3YWUyZjY5NmZkNDM3IDEwMDY0NAotLS0gYS9mcy92Ym94c2YvZGlyLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvdmJveHNmL2Rpci5jCkBAIC0zMTgsNiAmIzQzOzMxOCw5IEBAIHN0YXRpYyBpbnQgdmJveHNmX2Rpcl9hdG9taWNfb3BlbihzdHJ1Y3QgaW5vZGUgKnBhcmVudCwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LAogCXU2NCBoYW5kbGU7CiAJaW50IGVycjsKIAomIzQzOwlpZiAoT19JU19NS0RJUihmbGFncykpCiYjNDM7CQlmbGFncyAmYW1wOz0gfk9fQ1JFQVQ7CiYjNDM7CiAJaWYgKGRfaW5fbG9va3VwKGRlbnRyeSkpIHsKIAkJc3RydWN0IGRlbnRyeSAqcmVzID0gdmJveHNmX2Rpcl9sb29rdXAocGFyZW50LCBkZW50cnksIDApOwogCQlpZiAocmVzIHx8IGRfcmVhbGx5X2lzX3Bvc2l0aXZlKGRlbnRyeSkpCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2ZjbnRsLmggYi9pbmNsdWRlL2xpbnV4L2ZjbnRsLmgKaW5kZXggNmFkNmI5ZTdhMjI2YWYuLjZiNzUyNzdiZTU1OWRkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2ZjbnRsLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9mY250bC5oCkBAIC0zMCw2ICYjNDM7MzAsMTIgQEAKICAqLwogI2RlZmluZSBfX09fUkVHVUxBUgkJKDEgJmx0OyZsdDsgMzApCiAKJiM0MzsjZGVmaW5lIE9fTUtESVJfTUFTSwkoT19DUkVBVCB8IE9fRElSRUNUT1JZKQomIzQzO3N0YXRpYyBpbmxpbmUgYm9vbCBPX0lTX01LRElSKHVuc2lnbmVkIGZsYWdzKQomIzQzO3sKJiM0MzsJcmV0dXJuIChmbGFncyAmYW1wOyBPX01LRElSX01BU0spID09IE9fTUtESVJfTUFTSzsKJiM0Mzt9CiYjNDM7CiAvKiBMaXN0IG9mIGFsbCB2YWxpZCBmbGFncyBmb3IgdGhlIGhvdy0mZ3Q7cmVzb2x2ZSBhcmd1bWVudDogKi8KICNkZWZpbmUgVkFMSURfUkVTT0xWRV9GTEFHUyBcCiAJKFJFU09MVkVfTk9fWERFViB8IFJFU09MVkVfTk9fTUFHSUNMSU5LUyB8IFJFU09MVkVfTk9fU1lNTElOS1MgfCBcCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9maWxlc3lzdGVtcy8uZ2l0aWdub3JlIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZmlsZXN5c3RlbXMvLmdpdGlnbm9yZQppbmRleCBhNzhmODk0MTU3ZGUzMy4uZDc3OWE3OTQ1Y2Y4MDMgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2ZpbGVzeXN0ZW1zLy5naXRpZ25vcmUKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZmlsZXN5c3RlbXMvLmdpdGlnbm9yZQpAQCAtMSw0ICYjNDM7MSw1IEBACiAjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHkKJiM0MztvcGVuX29fY3JlYXRfb19kaXIKIGRub3RpZnlfdGVzdAogZGV2cHRzX3B0cwogZmNsb2cKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2ZpbGVzeXN0ZW1zL01ha2VmaWxlIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZmlsZXN5c3RlbXMvTWFrZWZpbGUKaW5kZXggYTdlYzJiYTJkZDgzMzQuLmI2MDk1MGY4YjE1YzIxIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9maWxlc3lzdGVtcy9NYWtlZmlsZQomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9maWxlc3lzdGVtcy9NYWtlZmlsZQpAQCAtMSw3ICYjNDM7MSw3IEBACiAjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCiAKIENGTEFHUyAmIzQzOz0gJChLSERSX0lOQ0xVREVTKQotVEVTVF9HRU5fUFJPR1MgOj0gZGV2cHRzX3B0cyBmaWxlX3N0cmVzc29yIGFub25faW5vZGVfdGVzdCBrZXJuZnNfdGVzdCBmY2xvZwomIzQzO1RFU1RfR0VOX1BST0dTIDo9IG9wZW5fb19jcmVhdF9vX2RpciBkZXZwdHNfcHRzIGZpbGVfc3RyZXNzb3IgYW5vbl9pbm9kZV90ZXN0IGtlcm5mc190ZXN0IGZjbG9nCiBURVNUX0dFTl9QUk9HUyAmIzQzOz0gaWRtYXBwZWRfdG1wZmlsZQogVEVTVF9HRU5fUFJPR1NfRVhURU5ERUQgOj0gZG5vdGlmeV90ZXN0CiAKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2ZpbGVzeXN0ZW1zL2ZjbG9nLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9maWxlc3lzdGVtcy9mY2xvZy5jCmluZGV4IDU1MWM0YTBmMzk1YTEyLi41OTNhNTEzNmU5OTE5MiAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZmlsZXN5c3RlbXMvZmNsb2cuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9maWxlc3lzdGVtcy9mY2xvZy5jCkBAIC02LDEwICYjNDM7Niw4IEBACiAKICNpbmNsdWRlICZsdDthc3NlcnQuaCZndDsKICNpbmNsdWRlICZsdDtlcnJuby5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtmY250bC5oJmd0OwogI2luY2x1ZGUgJmx0O3NjaGVkLmgmZ3Q7Ci0jaW5jbHVkZSAmbHQ7c3RkaW8uaCZndDsKLSNpbmNsdWRlICZsdDtzdGRsaWIuaCZndDsKLSNpbmNsdWRlICZsdDtzdHJpbmcuaCZndDsKICNpbmNsdWRlICZsdDt1bmlzdGQuaCZndDsKICNpbmNsdWRlICZsdDtzeXMvbW91bnQuaCZndDsKIApkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZmlsZXN5c3RlbXMvb3Blbl9vX2NyZWF0X29fZGlyLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9maWxlc3lzdGVtcy9vcGVuX29fY3JlYXRfb19kaXIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMC4uZGYzY2RiYWUyYzg1MjQKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9maWxlc3lzdGVtcy9vcGVuX29fY3JlYXRfb19kaXIuYwpAQCAtMCwwICYjNDM7MSwxOTcgQEAKJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAomIzQzOyNpbmNsdWRlICZsdDtzeXMvc3RhdC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtzeXMvc3lzY2FsbC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtlcnJuby5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW1pdHMuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7ZmNudGwuaCZndDsKJiM0MzsKJiM0MzsjaW5jbHVkZSAmIzM0O2tzZWxmdGVzdF9oYXJuZXNzLmgmIzM0OwomIzQzOwomIzQzO3N0YXRpYyBpbmxpbmUgaW50IG9wZW5fb19jcmVhdF9vX2RpcihpbnQgZGZkLCBjb25zdCBjaGFyICpwYXRobmFtZSwKJiM0MzsJCQkJICAgICBtb2RlX3QgbW9kZSwgdW5zaWduZWQgaW50IGZsYWdzKQomIzQzO3sKJiM0MzsJcmV0dXJuIHN5c2NhbGwoX19OUl9vcGVuYXQsIGRmZCwgcGF0aG5hbWUsCiYjNDM7CQkgICAgICAgZmxhZ3MgfCBPX0RJUkVDVE9SWSB8IE9fQ1JFQVQsIG1vZGUpOwomIzQzO30KJiM0MzsKJiM0MzsjZGVmaW5lIG9wZW5fb19jcmVhdF9vX2Rpcl9jaGVja2VkX2ZsYWdzKGRmZCwgcGF0aG5hbWUsIGZsYWdzKSAoewlcCiYjNDM7CXN0cnVjdCBzdGF0IF9fc3Q7CQkJCQkJXAomIzQzOwlpbnQgX19mZCA9IG9wZW5fb19jcmVhdF9vX2RpcihkZmQsIHBhdGhuYW1lLCBTX0lSV1hVLCBmbGFncyk7CVwKJiM0MzsJQVNTRVJUX0dFKF9fZmQsIDApOwkJCQkJCVwKJiM0MzsJQVNTRVJUX0VRKGZzdGF0KF9fZmQsICZhbXA7X19zdCksIDApOwkJCQlcCiYjNDM7CUVYUEVDVF9UUlVFKFNfSVNESVIoX19zdC5zdF9tb2RlKSk7CQkJCVwKJiM0MzsJX19mZDsJCQkJCQkJCVwKJiM0Mzt9KQomIzQzOwomIzQzOyNkZWZpbmUgb3Blbl9vX2NyZWF0X29fZGlyX2NoZWNrZWQoZGZkLCBwYXRobmFtZSkgXAomIzQzOwlvcGVuX29fY3JlYXRfb19kaXJfY2hlY2tlZF9mbGFncyhkZmQsIHBhdGhuYW1lLCAwKQomIzQzOwomIzQzO0ZJWFRVUkUob3Blbl9vX2NyZWF0X29fZGlyKSB7CiYjNDM7CWNoYXIgZGlycGF0aFtQQVRIX01BWF07CiYjNDM7CWludCBkZmQ7CiYjNDM7fTsKJiM0MzsKJiM0MztGSVhUVVJFX1NFVFVQKG9wZW5fb19jcmVhdF9vX2RpcikKJiM0Mzt7CiYjNDM7CXN0cmNweShzZWxmLSZndDtkaXJwYXRoLCAmIzM0Oy90bXAvb3Blbl9vX2NyZWF0X29fZGlyX3Rlc3QuWFhYWFhYJiMzNDspOwomIzQzOwlBU1NFUlRfTkUobWtkdGVtcChzZWxmLSZndDtkaXJwYXRoKSwgTlVMTCk7CiYjNDM7CXNlbGYtJmd0O2RmZCA9IG9wZW4oc2VsZi0mZ3Q7ZGlycGF0aCwgT19ESVJFQ1RPUlkpOwomIzQzOwlBU1NFUlRfR0Uoc2VsZi0mZ3Q7ZGZkLCAwKTsKJiM0Mzt9CiYjNDM7CiYjNDM7RklYVFVSRV9URUFSRE9XTihvcGVuX29fY3JlYXRfb19kaXIpCiYjNDM7ewomIzQzOwljbG9zZShzZWxmLSZndDtkZmQpOwomIzQzOwlybWRpcihzZWxmLSZndDtkaXJwYXRoKTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyogRG9lcyBvcGVuX29fY3JlYXRfb19kaXIgcmV0dXJuIGEgZmQgYXQgYWxsPyAqLwomIzQzO1RFU1RfRihvcGVuX29fY3JlYXRfb19kaXIsIHJldHVybnNfZmQpCiYjNDM7ewomIzQzOwlpbnQgZmQgPSBvcGVuX29fY3JlYXRfb19kaXJfY2hlY2tlZChzZWxmLSZndDtkZmQsICYjMzQ7bmV3ZGlyJiMzNDspOwomIzQzOwlFWFBFQ1RfRVEoY2xvc2UoZmQpLCAwKTsKJiM0MzsJRVhQRUNUX0VRKHVubGlua2F0KHNlbGYtJmd0O2RmZCwgJiMzNDtuZXdkaXImIzM0OywgQVRfUkVNT1ZFRElSKSwgMCk7CiYjNDM7fQomIzQzOwomIzQzOy8qIFRoZSBmZCBtdXN0IHJlZmVyIHRvIHRoZSBkaXJlY3RvcnkgdGhhdCB3YXMganVzdCBjcmVhdGVkLiAqLwomIzQzO1RFU1RfRihvcGVuX29fY3JlYXRfb19kaXIsIGZkX2lzX2NyZWF0ZWRfZGlyKQomIzQzO3sKJiM0MzsJaW50IGZkOwomIzQzOwlzdHJ1Y3Qgc3RhdCBzdF92aWFfZmQsIHN0X3ZpYV9wYXRoOwomIzQzOwljaGFyIHBhdGhbUEFUSF9NQVhdOwomIzQzOwomIzQzOwlmZCA9IG9wZW5fb19jcmVhdF9vX2Rpcl9jaGVja2VkKHNlbGYtJmd0O2RmZCwgJiMzNDtjaGVja2RpciYjMzQ7KTsKJiM0MzsKJiM0MzsJQVNTRVJUX0VRKGZzdGF0KGZkLCAmYW1wO3N0X3ZpYV9mZCksIDApOwomIzQzOwomIzQzOwlzbnByaW50ZihwYXRoLCBzaXplb2YocGF0aCksICYjMzQ7JXMvY2hlY2tkaXImIzM0Oywgc2VsZi0mZ3Q7ZGlycGF0aCk7CiYjNDM7CUFTU0VSVF9FUShzdGF0KHBhdGgsICZhbXA7c3RfdmlhX3BhdGgpLCAwKTsKJiM0MzsKJiM0MzsJRVhQRUNUX0VRKHN0X3ZpYV9mZC5zdF9pbm8sIHN0X3ZpYV9wYXRoLnN0X2lubyk7CiYjNDM7CUVYUEVDVF9FUShzdF92aWFfZmQuc3RfZGV2LCBzdF92aWFfcGF0aC5zdF9kZXYpOwomIzQzOwomIzQzOwlFWFBFQ1RfRVEoY2xvc2UoZmQpLCAwKTsKJiM0MzsJRVhQRUNUX0VRKHJtZGlyKHBhdGgpLCAwKTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyogTWlzc2luZyBwYXJlbnQgY29tcG9uZW50IG11c3QgZmFpbCB3aXRoIEVOT0VOVC4gKi8KJiM0MztURVNUX0Yob3Blbl9vX2NyZWF0X29fZGlyLCBlbm9lbnRfbWlzc2luZ19wYXJlbnQpCiYjNDM7ewomIzQzOwlFWFBFQ1RfRVEob3Blbl9vX2NyZWF0X29fZGlyKHNlbGYtJmd0O2RmZCwgJiMzNDtub25leGlzdGVudC9jaGlsZCYjMzQ7LCBTX0lSV1hVLCAwKSwgLTEpOwomIzQzOwlFWFBFQ1RfRVEoZXJybm8sIEVOT0VOVCk7CiYjNDM7fQomIzQzOwomIzQzOy8qIEFuIGludmFsaWQgZGZkIG11c3QgZmFpbCB3aXRoIEVCQURGLiAqLwomIzQzO1RFU1RfRihvcGVuX29fY3JlYXRfb19kaXIsIGViYWRmKQomIzQzO3sKJiM0MzsJRVhQRUNUX0VRKG9wZW5fb19jcmVhdF9vX2RpcigtNDIsICYjMzQ7YmFkZmRpciYjMzQ7LCBTX0lSV1hVLCAwKSwgLTEpOwomIzQzOwlFWFBFQ1RfRVEoZXJybm8sIEVCQURGKTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyogQSBkZmQgdGhhdCBwb2ludHMgdG8gYSBmaWxlIChub3QgYSBkaXJlY3RvcnkpIG11c3QgZmFpbCB3aXRoIEVOT1RESVIuICovCiYjNDM7VEVTVF9GKG9wZW5fb19jcmVhdF9vX2RpciwgZW5vdGRpcl9kZmQpCiYjNDM7ewomIzQzOwlpbnQgZmlsZV9mZDsKJiM0MzsKJiM0MzsJZmlsZV9mZCA9IG9wZW5hdChzZWxmLSZndDtkZmQsICYjMzQ7ZmlsZSYjMzQ7LAomIzQzOwkJCSBPX0NSRUFUIHwgT19XUk9OTFksIFNfSVJXWFUpOwomIzQzOwlBU1NFUlRfR0UoZmlsZV9mZCwgMCk7CiYjNDM7CiYjNDM7CUVYUEVDVF9FUShvcGVuX29fY3JlYXRfb19kaXIoZmlsZV9mZCwgJiMzNDtzdWJkaXImIzM0OywgU19JUldYVSwgMCksIC0xKTsKJiM0MzsJRVhQRUNUX0VRKGVycm5vLCBFTk9URElSKTsKJiM0MzsKJiM0MzsJRVhQRUNUX0VRKGNsb3NlKGZpbGVfZmQpLCAwKTsKJiM0MzsJRVhQRUNUX0VRKHVubGlua2F0KHNlbGYtJmd0O2RmZCwgJiMzNDtmaWxlJiMzNDssIDApLCAwKTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBPX0VYQ0wgdG9nZXRoZXIgd2l0aCBPX0NSRUFUfE9fRElSRUNUT1JZIG11c3QgZmFpbCB3aXRoIEVFWElTVCB3aGVuCiYjNDM7ICogdGhlIHRhcmdldCBkaXJlY3RvcnkgYWxyZWFkeSBleGlzdHMuCiYjNDM7ICovCiYjNDM7VEVTVF9GKG9wZW5fb19jcmVhdF9vX2Rpciwgb19leGNsX2VleGlzdCkKJiM0Mzt7CiYjNDM7CWludCBmZDsKJiM0MzsKJiM0MzsJZmQgPSBvcGVuX29fY3JlYXRfb19kaXJfY2hlY2tlZF9mbGFncyhzZWxmLSZndDtkZmQsICYjMzQ7ZXhjbGRpciYjMzQ7LCBPX0VYQ0wpOwomIzQzOwlFWFBFQ1RfRVEoY2xvc2UoZmQpLCAwKTsKJiM0MzsKJiM0MzsJRVhQRUNUX0VRKG9wZW5fb19jcmVhdF9vX2RpcihzZWxmLSZndDtkZmQsICYjMzQ7ZXhjbGRpciYjMzQ7LCBTX0lSV1hVLCBPX0VYQ0wpLCAtMSk7CiYjNDM7CUVYUEVDVF9FUShlcnJubywgRUVYSVNUKTsKJiM0MzsKJiM0MzsJRVhQRUNUX0VRKHVubGlua2F0KHNlbGYtJmd0O2RmZCwgJiMzNDtleGNsZGlyJiMzNDssIEFUX1JFTU9WRURJUiksIDApOwomIzQzO30KJiM0MzsKJiM0MzsvKgomIzQzOyAqIE9fQ1JFQVR8T19ESVJFQ1RPUlkgb24gYSBwYXRoIHRoYXQgYWxyZWFkeSBleGlzdHMgYXMgYSByZWd1bGFyIGZpbGUKJiM0MzsgKiBtdXN0IGZhaWwgd2l0aCBFTk9URElSLgomIzQzOyAqLwomIzQzO1RFU1RfRihvcGVuX29fY3JlYXRfb19kaXIsIGV4aXN0aW5nX2ZpbGVfZW5vdGRpcikKJiM0Mzt7CiYjNDM7CWludCBmaWxlX2ZkOwomIzQzOwomIzQzOwlmaWxlX2ZkID0gb3BlbmF0KHNlbGYtJmd0O2RmZCwgJiMzNDtyZWdmaWxlJiMzNDssCiYjNDM7CQkJIE9fQ1JFQVQgfCBPX1dST05MWSwgU19JUldYVSk7CiYjNDM7CUFTU0VSVF9HRShmaWxlX2ZkLCAwKTsKJiM0MzsJRVhQRUNUX0VRKGNsb3NlKGZpbGVfZmQpLCAwKTsKJiM0MzsKJiM0MzsJRVhQRUNUX0VRKG9wZW5fb19jcmVhdF9vX2RpcihzZWxmLSZndDtkZmQsICYjMzQ7cmVnZmlsZSYjMzQ7LCBTX0lSV1hVLCAwKSwgLTEpOwomIzQzOwlFWFBFQ1RfRVEoZXJybm8sIEVOT1RESVIpOwomIzQzOwomIzQzOwlFWFBFQ1RfRVEodW5saW5rYXQoc2VsZi0mZ3Q7ZGZkLCAmIzM0O3JlZ2ZpbGUmIzM0OywgMCksIDApOwomIzQzO30KJiM0MzsKJiM0MzsvKgomIzQzOyAqIE9fQ1JFQVR8T19ESVJFQ1RPUlkgY29tYmluZWQgd2l0aCBhIHdyaXRhYmxlIGFjY2VzcyBtb2RlIG11c3QgYmUKJiM0MzsgKiByZWplY3RlZDogYSBkaXJlY3RvcnkgY2Fubm90IGJlIG9wZW5lZCBmb3Igd3JpdGluZy4KJiM0MzsgKi8KJiM0MztURVNUX0Yob3Blbl9vX2NyZWF0X29fZGlyLCByZWplY3RzX3dyaXRhYmxlX2FjY19tb2RlKQomIzQzO3sKJiM0MzsJRVhQRUNUX0VRKG9wZW5fb19jcmVhdF9vX2RpcihzZWxmLSZndDtkZmQsICYjMzQ7cmR3cmRpciYjMzQ7LCBTX0lSV1hVLCBPX1JEV1IpLCAtMSk7CiYjNDM7CUVYUEVDVF9FUShlcnJubywgRU5PVERJUik7CiYjNDM7CS8qIENsZWFuIHVwIGlmIHRoZSBrZXJuZWwgY3JlYXRlZCB0aGUgZGlyZWN0b3J5IGFueXdheS4gKi8KJiM0MzsJdW5saW5rYXQoc2VsZi0mZ3Q7ZGZkLCAmIzM0O3Jkd3JkaXImIzM0OywgQVRfUkVNT1ZFRElSKTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBvcGVuYXQoT19DUkVBVCkgd2l0aCBhIHRyYWlsaW5nIHNsYXNoIGJ1dCB3aXRob3V0IE9fRElSRUNUT1JZCiYjNDM7ICogbXVzdCBmYWlsIHdpdGggRUlTRElSIGFuZCBtdXN0IG5vdCBjcmVhdGUgYW55dGhpbmcgYXQgdGhlIHBhdGguCiYjNDM7ICovCiYjNDM7VEVTVF9GKG9wZW5fb19jcmVhdF9vX2RpciwgdHJhaWxpbmdfc2xhc2hfbm9fb19kaXIpCiYjNDM7ewomIzQzOwlpbnQgZmQ7CiYjNDM7CXN0cnVjdCBzdGF0IHN0OwomIzQzOwomIzQzOwlmZCA9IG9wZW5hdChzZWxmLSZndDtkZmQsICYjMzQ7dHJhaWxpbmcvJiMzNDssIE9fQ1JFQVQgfCBPX1dST05MWSwgU19JUldYVSk7CiYjNDM7CUVYUEVDVF9FUShmZCwgLTEpOwomIzQzOwlFWFBFQ1RfRVEoZXJybm8sIEVJU0RJUik7CiYjNDM7CiYjNDM7CUVYUEVDVF9FUShmc3RhdGF0KHNlbGYtJmd0O2RmZCwgJiMzNDt0cmFpbGluZyYjMzQ7LCAmYW1wO3N0LCAwKSwgLTEpOwomIzQzOwlFWFBFQ1RfRVEoZXJybm8sIEVOT0VOVCk7CiYjNDM7CiYjNDM7CS8qIEJlc3QtZWZmb3J0IGNsZWFudXAgaW4gY2FzZSB0aGUga2VybmVsIGxlZnQgYSBmaWxlIGJlaGluZC4gKi8KJiM0MzsJaWYgKGZkICZndDs9IDApCiYjNDM7CQljbG9zZShmZCk7CiYjNDM7CXVubGlua2F0KHNlbGYtJmd0O2RmZCwgJiMzNDt0cmFpbGluZyYjMzQ7LCAwKTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBUaGUgcmV0dXJuZWQgZmQgbXVzdCBiZSB1c2FibGUgYXMgYSBkZmQgZm9yIGZ1cnRoZXIgKmF0KCkgY2FsbHMuCiYjNDM7ICovCiYjNDM7VEVTVF9GKG9wZW5fb19jcmVhdF9vX2RpciwgZmRfdXNhYmxlX2FzX2RmZCkKJiM0Mzt7CiYjNDM7CWludCBwYXJlbnRfZmQsIGNoaWxkX2ZkOwomIzQzOwljaGFyIHBhdGhbUEFUSF9NQVhdOwomIzQzOwomIzQzOwlwYXJlbnRfZmQgPSBvcGVuX29fY3JlYXRfb19kaXJfY2hlY2tlZChzZWxmLSZndDtkZmQsICYjMzQ7cGFyZW50JiMzNDspOwomIzQzOwljaGlsZF9mZCA9IG9wZW5fb19jcmVhdF9vX2Rpcl9jaGVja2VkKHBhcmVudF9mZCwgJiMzNDtjaGlsZCYjMzQ7KTsKJiM0MzsKJiM0MzsJRVhQRUNUX0VRKGNsb3NlKGNoaWxkX2ZkKSwgMCk7CiYjNDM7CUVYUEVDVF9FUShjbG9zZShwYXJlbnRfZmQpLCAwKTsKJiM0MzsKJiM0MzsJc25wcmludGYocGF0aCwgc2l6ZW9mKHBhdGgpLCAmIzM0OyVzL3BhcmVudC9jaGlsZCYjMzQ7LCBzZWxmLSZndDtkaXJwYXRoKTsKJiM0MzsJRVhQRUNUX0VRKHJtZGlyKHBhdGgpLCAwKTsKJiM0MzsJc25wcmludGYocGF0aCwgc2l6ZW9mKHBhdGgpLCAmIzM0OyVzL3BhcmVudCYjMzQ7LCBzZWxmLSZndDtkaXJwYXRoKTsKJiM0MzsJRVhQRUNUX0VRKHJtZGlyKHBhdGgpLCAwKTsKJiM0Mzt9CiYjNDM7CiYjNDM7VEVTVF9IQVJORVNTX01BSU4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDQgMTY6NTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQ4NTQKCQkJCQkJCW91dHB1dDogNzUKCQkJCQkJCXRob3VnaHRzOiAxNDY4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgUGxhbjogRW5oYW5jaW5nIERpcmVjdG9yeSBDcmVhdGlvbiB3aXRoIGBvcGVuYXRgKioKCk9rYXksIHNvIHdlIGhhdmUgdGhpcyBwYXRjaCB0aGF0JiMzOTtzIGZ1bmRhbWVudGFsbHkgY2hhbmdpbmcgaG93IGBPX0NSRUFUYCBhbmQgYE9fRElSRUNUT1JZYCBpbnRlcmFjdCB3aXRoaW4gYG9wZW5hdGAgYW5kIHJlbGF0ZWQgc3lzdGVtIGNhbGxzLiBTcGVjaWZpY2FsbHksIGl0JiMzOTtzIGFsbG93aW5nIHRoZSBjcmVhdGlvbiBvZiBkaXJlY3RvcmllcyB1c2luZyBgT19DUkVBVCB8IE9fRElSRUNUT1JZYCwgYSBmdW5jdGlvbmFsaXR5IHRoYXQgd2FzIHByZXZpb3VzbHkgZWl0aGVyIG5vdCBzdXBwb3J0ZWQgb3IgaGFkIGluY29uc2lzdGVudCBiZWhhdmlvci4gVGhpcyBpcyBhIGNvcmUgVkZTIGNoYW5nZSB0aGF0IGFkZHMgc3VwcG9ydCBmb3IgY3JlYXRpbmcgZGlyZWN0b3JpZXMgdmlhIGBvcGVuYXQoLi4uLCBPX0NSRUFUIHwgT19ESVJFQ1RPUlksIC4uLilgLgoKSXQgbW9kaWZpZXMgYGZzL25hbWVpLmNgLCBgZnMvb3Blbi5jYCwgYW5kIHNldmVyYWwgZmlsZXN5c3RlbXMgdG8gaGFuZGxlIHRoaXMgbmV3IGJlaGF2aW9yLiBGcm9tIHdoYXQgSSBjYW4gc2VlLCB0aGUgZmlsZXN5c3RlbXMgKDlwLCBjZXBoLCBmdXNlLCBnZnMyLCBuZnMsIHNtYiwgdmJveHNmKSBhcmUgbW9zdGx5IGludm9sdmVkIGluIGNsZWFyaW5nIGBPX0NSRUFUYCBpZiBgT19JU19NS0RJUihmbGFncylgIGlzIHRydWUgd2l0aGluIHRoZWlyIGBhdG9taWNfb3BlbmAgaW1wbGVtZW50YXRpb25zLiBgT19JU19NS0RJUihmbGFncylgIGlzIGRlZmluZWQgYXMgYChmbGFncyAmYW1wOyBPX01LRElSX01BU0spID09IE9fTUtESVJfTUFTS2Agd2hlcmUgYE9fTUtESVJfTUFTS2AgaXMgYE9fQ1JFQVQgfCBPX0RJUkVDVE9SWWAuCgpUaGUgY3J1Y2lhbCBjaGFuZ2UgbGllcyBpbiB0aGUgVkZTOiBgdmZzX2NyZWF0ZV9ub19wZXJtYCBhbmQgYHZmc19ta2Rpcl9ub19wZXJtYCBoYXZlIGJlZW4gaW50cm9kdWNlZC4gYGF0b21pY19vcGVuYCBhbmQgYGxvb2t1cF9vcGVuYCBhcmUgbW9kaWZpZWQgdG8gYWNjb21tb2RhdGUgdGhpcyBuZXcgYGNyZWF0ZV9kaXIgPSBPX0lTX01LRElSKG9wZW5fZmxhZylgIGZsYWcuIElmIGBjcmVhdGVfZGlyYCBpcyB0cnVlLCB0aGUgc3lzdGVtIGNhbGxzIGB2ZnNfbWtkaXJfbm9fcGVybWAgaW5zdGVhZCBvZiBgdmZzX2NyZWF0ZV9ub19wZXJtYCwgYW5kIGBtYXlfb19jcmVhdGVgIG5vdyB0YWtlcyBhIGBjcmVhdGVfZGlyYCBwYXJhbWV0ZXIgYW5kIGNhbGxzIHNlY3VyaXR5IGhvb2tzIGZvciBta2RpciBvcGVyYXRpb25zLgoKVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGFuZCBhYnNvbHV0ZWx5IGRlbWFuZHMgZnV6emluZyB0byBlbnN1cmUgc3RhYmlsaXR5IGFuZCBjb3JyZWN0bmVzcy4gV2UgaGF2ZSB0byBtYWtlIHN1cmUgd2UgaGl0IGV2ZXJ5IHBvc3NpYmxlIHNjZW5hcmlvLgoKTXkgZm9jdXMgc2hvdWxkIGJlIG9uIGZ1enppbmcgdGhlc2Uga2V5IGZ1bmN0aW9uczoKCiogICBgbG9va3VwX29wZW5gCiogICBgYXRvbWljX29wZW5gIChwYXJ0aWN1bGFybHkgdGhlIFZGUyBpbXBsZW1lbnRhdGlvbiBpbiBgZnMvbmFtZWkuY2ApCiogICBgdmZzX21rZGlyX25vX3Blcm1gCiogICBgdmZzX2NyZWF0ZV9ub19wZXJtYAoqICAgYG1heV9vX2NyZWF0ZWAKKiAgIGBidWlsZF9vcGVuX2ZsYWdzYAoqICAgYGRvX29wZW5gCiogICBgZGVudHJ5X2NyZWF0ZWAKKiAgIGB2ZnNfbWtkaXJgCiogICBgdmZzX2NyZWF0ZWAKCkkgdGhpbmsgSSBoYXZlIGEgZ29vZCBoYW5kbGUgb24gaG93IHRoZSBmaWxlc3lzdGVtcyBhcmUgaW50ZXJhY3Rpbmcgd2l0aCB0aGlzLiBTcGVjaWZpY2FsbHksIHRoZXkmIzM5O3JlIGNsZWFyaW5nIGBPX0NSRUFUYCBpbiBgYXRvbWljX29wZW5gLCBhbmQgdGhpcyBzZWVtcyB0byBiZSBieSBkZXNpZ24uIElmIGBhdG9taWNfb3BlbmAgY2xlYXJzIGBPX0NSRUFUYCwgaXQgd29uJiMzOTt0IGF0dGVtcHQgdG8gY3JlYXRlLCBhbmQgdGhlIFZGUyB3aWxsIGhhbmRsZSB0aGUgY3JlYXRpb24gdmlhIGB2ZnNfbWtkaXJfbm9fcGVybWAuIFRoaXMgbWVjaGFuaXNtIGxvb2tzIG5pY2UuCgpOb3csIGxldCYjMzk7cyB2ZXJpZnkgdGhhdCB0aGVzZSBrZXkgZnVuY3Rpb25zIGFyZSBhdmFpbGFibGUgZm9yIGluc3RydW1lbnRhdGlvbiBhbmQgZnV6emluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNCAxNzowMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDteKHN0YXRpYyApPyhpbmxpbmUgKT8oc3RydWN0IGRlbnRyeSBcXCp8aW50fHZvaWR8c3RydWN0IGZpbGUgXFwqKSAobG9va3VwX29wZW58YXRvbWljX29wZW58bWF5X29fY3JlYXRlfGJ1aWxkX29wZW5fZmxhZ3N8ZG9fb3BlbnxkZW50cnlfY3JlYXRlfHZmc19ta2Rpcnx2ZnNfY3JlYXRlKVxcKCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9rZXJuZWwvYXBtXzMyLmM9MTUzNz1zdGF0aWMgaW50IGRvX3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbHApXG4tLVxuYXJjaC94ODYva2VybmVsL2FwbV8zMi5jLTE1NzQtXG5hcmNoL3g4Ni9rZXJuZWwvYXBtXzMyLmM6MTU3NTpzdGF0aWMgaW50IGRvX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbHApXG5hcmNoL3g4Ni9rZXJuZWwvYXBtXzMyLmMtMTU3Ni17XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQveGlyY29tL3hpcmMycHNfY3MuYz0yOTY9c3RhdGljIGludCBkb19jb25maWcoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGlmbWFwICptYXApO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQveGlyY29tL3hpcmMycHNfY3MuYzoyOTc6c3RhdGljIGludCBkb19vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQveGlyY29tL3hpcmMycHNfY3MuYy0yOTgtc3RhdGljIGludCBkb19pb2N0bChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgaWZyZXEgKnJxLCBpbnQgY21kKTtcbi0tXG5mcy9uYW1laS5jPTQxODY9aW50IHZmc19jcmVhdGVfbm9fcGVybShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxuLS1cbmZzL25hbWVpLmMtNDIxNy0gKi9cbmZzL25hbWVpLmM6NDIxODppbnQgdmZzX2NyZWF0ZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUsXG5mcy9uYW1laS5jLTQyMTktXHQgICAgICAgc3RydWN0IGRlbGVnYXRlZF9pbm9kZSAqZGkpXG4tLVxuZnMvbmFtZWkuYz00MzQ0PXN0YXRpYyBpbmxpbmUgaW50IG9wZW5fdG9fbmFtZWlfZmxhZ3MoaW50IGZsYWcpXG4tLVxuZnMvbmFtZWkuYy00MzUwLVxuZnMvbmFtZWkuYzo0MzUxOnN0YXRpYyBpbnQgbWF5X29fY3JlYXRlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxuZnMvbmFtZWkuYy00MzUyLVx0XHRcdGNvbnN0IHN0cnVjdCBwYXRoICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcbi0tXG5mcy9uYW1laS5jPTQ2NTU9c3RhdGljIGNvbnN0IGNoYXIgKm9wZW5fbGFzdF9sb29rdXBzKHN0cnVjdCBuYW1laWRhdGEgKm5kLFxuLS1cbmZzL25hbWVpLmMtNDc0Mi0gKi9cbmZzL25hbWVpLmM6NDc0MzpzdGF0aWMgaW50IGRvX29wZW4oc3RydWN0IG5hbWVpZGF0YSAqbmQsXG5mcy9uYW1laS5jLTQ3NDQtXHRcdCAgIHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBzdHJ1Y3Qgb3Blbl9mbGFncyAqb3ApXG4tLVxuZnMvbmZzL2Rpci5jPTIwNzY9c3RhdGljIHN0cnVjdCBuZnNfb3Blbl9jb250ZXh0ICpjcmVhdGVfbmZzX29wZW5fY29udGV4dChzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIGludCBvcGVuX2ZsYWdzLCBzdHJ1Y3QgZmlsZSAqZmlscClcbi0tXG5mcy9uZnMvZGlyLmMtMjA4MC1cbmZzL25mcy9kaXIuYzoyMDgxOnN0YXRpYyBpbnQgZG9fb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlscClcbmZzL25mcy9kaXIuYy0yMDgyLXtcbi0tXG5mcy9vcGVuLmM9MTEzNj1pbmxpbmUgc3RydWN0IG9wZW5faG93IGJ1aWxkX29wZW5faG93KGludCBmbGFncywgdW1vZGVfdCBtb2RlKVxuLS1cbmZzL29wZW4uYy0xMTUxLVxuZnMvb3Blbi5jOjExNTI6aW5saW5lIGludCBidWlsZF9vcGVuX2ZsYWdzKGNvbnN0IHN0cnVjdCBvcGVuX2hvdyAqaG93LCBzdHJ1Y3Qgb3Blbl9mbGFncyAqb3ApXG5mcy9vcGVuLmMtMTE1My17XG4tLVxuaW5jbHVkZS9saW51eC9mcy5oPTE3NTg9Ym9vbCBpbm9kZV9vd25lcl9vcl9jYXBhYmxlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxuLS1cbmluY2x1ZGUvbGludXgvZnMuaC0xNzYzLSAqL1xuaW5jbHVkZS9saW51eC9mcy5oOjE3NjQ6aW50IHZmc19jcmVhdGUoc3RydWN0IG1udF9pZG1hcCAqLCBzdHJ1Y3QgZGVudHJ5ICosIHVtb2RlX3QsXG5pbmNsdWRlL2xpbnV4L2ZzLmgtMTc2NS1cdCAgICAgICBzdHJ1Y3QgZGVsZWdhdGVkX2lub2RlICopO1xuLS1cbnRvb2xzL3BlcmYvdXRpbC9kc28uYz01NDU9c3RhdGljIHZvaWQgY2xvc2VfZmlyc3RfZHNvKHZvaWQpO1xudG9vbHMvcGVyZi91dGlsL2Rzby5jLTU0Ni1cbnRvb2xzL3BlcmYvdXRpbC9kc28uYzo1NDc6c3RhdGljIGludCBkb19vcGVuKGNoYXIgKm5hbWUpIEVYQ0xVU0lWRV9MT0NLU19SRVFVSVJFRChfZHNvX19kYXRhX29wZW5fbG9jaylcbnRvb2xzL3BlcmYvdXRpbC9kc28uYy01NDgte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA0IDE3OjAwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4MDYyCgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czoKCioqTmF2aWdhdGluZyB0aGUgRmlsZXN5c3RlbSBLZXJuZWwgQ29kZSoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZGlnIGludG8gdGhlIGZpbGVzeXN0ZW0gY29kZSBhZ2Fpbi4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIHRyeWluZyB0byB1bmRlcnN0YW5kIGhvdyBmaWxlbmFtZSBsb29rdXBzIGFuZCBhdG9taWMgb3BlbnMgYXJlIGhhbmRsZWQuIE15IGZpcnN0IG1vdmUgd2lsbCBiZSB0byB6ZXJvIGluIG9uIGBmcy9uYW1laS5jYC4gSSBleHBlY3QgdG8gZmluZCB0aGUgY29yZSBsb2dpYyBmb3IgYm90aCBgbG9va3VwX29wZW5gIGFuZCBgYXRvbWljX29wZW5gIHJvdXRpbmVzIGRlZmluZWQgdGhlcmUuIFRoYXQmIzM5O3MgdXN1YWxseSB0aGUgZ28tdG8gcGxhY2UgZm9yIGFueXRoaW5nIHJlbGF0ZWQgdG8gbmFtZSByZXNvbHV0aW9uIGFuZCB0aGUgaW5pdGlhbCBzZXR1cCBvZiBmaWxlIG9wZXJhdGlvbnMuIFRpbWUgdG8gZmlyZSB1cCB0aGUgZWRpdG9yIGFuZCBzZWUgd2hhdCYjMzk7cyB3aGF0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA0IDE3OjAwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7XihzdGF0aWMgKT8oc3RydWN0IGRlbnRyeSBcXCopIChsb29rdXBfb3BlbnxhdG9taWNfb3BlbilcXCgmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA0IDE3OjAwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4MjYyCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMzAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipOYXZpZ2F0aW5nIHRoZSBgZGVudHJ5YCBKdW5nbGU6IFJldHVybiBUeXBlcyBhbmQgRnVuY3Rpb24gU2lnbmF0dXJlcyoqCgpSaWdodCwgc28gSSYjMzk7bSB0aGlua2luZyBhYm91dCBhIGZ1bmN0aW9uIHRoYXQgY2xlYXJseSBkZWFscyB3aXRoIGBkZW50cnlgIHN0cnVjdHVyZXMuIEkmIzM5O20gdHJ5aW5nIHRvIHF1aWNrbHkgYXNjZXJ0YWluIGl0cyBwcmVjaXNlIHJldHVybiB0eXBlLiBNeSBpbml0aWFsIGd1ZXNzIGlzIHRoYXQgaXQgKmNvdWxkKiBiZSBgc3RydWN0IGRlbnRyeSAqYCBvciBwZXJoYXBzIGV2ZW4gYGNvbnN0IHN0cnVjdCBkZW50cnkgKmAsIHdpdGggc29tZSB2YXJpYXRpb25zIGluIHNwYWNpbmcgYXJvdW5kIHRoZSBhc3RlcmlzayDigJMgeW91IGtub3cgaG93IHRob3NlIHRoaW5ncyBjYW4gYmUuIFRvIGF2b2lkIGFueSBhbWJpZ3VpdHkgb3IgdW5uZWNlc3NhcnkgcGFyc2luZyBvZiB0aGUgc291cmNlIGNvZGUsIHRoZSBtb3N0IGVmZmljaWVudCBhcHByb2FjaCBpcyB0byBkaXJlY3RseSB0YXJnZXQgdGhlIGZ1bmN0aW9uIGNhbGxzIHRoZW1zZWx2ZXMuIEkmIzM5O2xsIGp1c3QgdXNlIGBncmVwYCB0byBxdWlja2x5IGZpbmQgd2hlcmUgdGhlIGZ1bmN0aW9uIGlzIGNhbGxlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNCAxNzowMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDteKHN0YXRpYyApPyhzdHJ1Y3QgZGVudHJ5IFxcKlxccyopPyhsb29rdXBfb3BlbnxhdG9taWNfb3BlbilcXCgmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvbmFtZWkuYz00MzgwPXN0YXRpYyBpbmxpbmUgdW1vZGVfdCBvX2NyZWF0ZV9tb2RlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxuLS1cbmZzL25hbWVpLmMtNDQwOC0gKi9cbmZzL25hbWVpLmM6NDQwOTpzdGF0aWMgc3RydWN0IGRlbnRyeSAqYXRvbWljX29wZW4oY29uc3Qgc3RydWN0IHBhdGggKnBhdGgsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcbmZzL25hbWVpLmMtNDQxMC1cdFx0XHRcdCAgc3RydWN0IGZpbGUgKmZpbGUsXG4tLVxuZnMvbmFtZWkuYz00NDY2PXN0cnVjdCBkZW50cnkgKnZmc19ta2Rpcl9ub19wZXJtKHN0cnVjdCBtbnRfaWRtYXAgKiwgc3RydWN0IGlub2RlICosXG4tLVxuZnMvbmFtZWkuYy00NDgzLSAqL1xuZnMvbmFtZWkuYzo0NDg0OnN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpsb29rdXBfb3BlbihzdHJ1Y3QgbmFtZWlkYXRhICpuZCwgc3RydWN0IGZpbGUgKmZpbGUsXG5mcy9uYW1laS5jLTQ0ODUtXHRcdFx0XHQgIGNvbnN0IHN0cnVjdCBvcGVuX2ZsYWdzICpvcCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNCAxNzowMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODcxNQoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyBgZGVudHJ5X2NyZWF0ZWAgYW5kIGB2ZnNfbWtkaXJgKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGludG8gdGhlIGNvcmUgb2YgdGhpcyBvcGVyYXRpb24uIE15IGltbWVkaWF0ZSBmb2N1cyBpcyBvbiBgZGVudHJ5X2NyZWF0ZWAgYW5kIGB2ZnNfbWtkaXJgLiBJIHdhbnQgdG8gcXVpY2tseSByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlaXIgaW50ZXJhY3Rpb24gaW4gdGhlIGNvbnRleHQgb2YgY3JlYXRpbmcgYSBuZXcgZGlyZWN0b3J5LiBJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoZSBkZW50cnkgbGlmZWN5Y2xlIGFuZCBob3cgdGhlIFZGUyBsYXllciBoYW5kbGVzIHRoZSByZXF1ZXN0cywgZXNwZWNpYWxseSB0aGUgaW5vZGUgYWxsb2NhdGlvbi4gSSBuZWVkIHRvIHJlZnJlc2ggdGhlIGRldGFpbHMgb2YgdGhlIGxvY2tpbmcgbWVjaGFuaXNtcyBpbnZvbHZlZCBpbiB0aGVzZSBmdW5jdGlvbnMuIEFyZSB0aGVyZSBhbnkgY29udGVudGlvbiBwb2ludHMgdG8gbG9vayBhdCwgb3IgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucz8gSXMgYHZmc19ta2RpcmAganVzdCBhIHdyYXBwZXIsIG9yIGRvZXMgaXQgcGVyZm9ybSBzdWJzdGFudGlhbCB3b3JrIGl0c2VsZj8gSG93IGRvZXMgYGRlbnRyeV9jcmVhdGVgIGFmZmVjdCB0aGUgY2FjaGUgYW5kIGVuc3VyZSBjb25zaXN0ZW5jeSBhY3Jvc3MgdGhlIEZTPyBJJiMzOTttIGN1cmlvdXMgYWJvdXQgdGhlIHNwZWNpZmljIHBhcmFtZXRlcnMgdGhlc2UgZnVuY3Rpb25zIGFjY2VwdCBhbmQgdGhlaXIgZWZmZWN0IG9uIHRoZSByZXN1bHRpbmcgZGVudHJ5IGFuZCBpbm9kZS4gSSYjMzk7bSBydW5uaW5nIHRocm91Z2ggYWxsIHRoaXMgdG8gcXVpY2tseSBidWlsZCBhIG1lbnRhbCBtYXAgb2YgdGhlIHdob2xlIG9wZXJhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDQgMTc6MDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7XihzdHJ1Y3QgZmlsZSBcXCpcXHMqKT9kZW50cnlfY3JlYXRlXFwoJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL25hbWVpLmM9NTEwMD1FWFBPUlRfU1lNQk9MKHN0YXJ0X2NyZWF0aW5nX3VzZXJfcGF0aCk7XG4tLVxuZnMvbmFtZWkuYy01MTE4LSAqL1xuZnMvbmFtZWkuYzo1MTE5OnN0cnVjdCBmaWxlICpkZW50cnlfY3JlYXRlKHN0cnVjdCBwYXRoICpwYXRoLCBpbnQgZmxhZ3MsIHVtb2RlX3QgbW9kZSxcbmZzL25hbWVpLmMtNTEyMC1cdFx0XHQgICBjb25zdCBzdHJ1Y3QgY3JlZCAqY3JlZClcbi0tXG5pbmNsdWRlL2xpbnV4L2ZzLmg9MjQ3OT1zdHJ1Y3QgZmlsZSAqZGVudHJ5X29wZW5fbm9ub3RpZnkoY29uc3Qgc3RydWN0IHBhdGggKnBhdGgsIGludCBmbGFncyxcbmluY2x1ZGUvbGludXgvZnMuaC0yNDgwLVx0XHRcdFx0ICBjb25zdCBzdHJ1Y3QgY3JlZCAqY3JlZCk7XG5pbmNsdWRlL2xpbnV4L2ZzLmg6MjQ4MTpzdHJ1Y3QgZmlsZSAqZGVudHJ5X2NyZWF0ZShzdHJ1Y3QgcGF0aCAqcGF0aCwgaW50IGZsYWdzLCB1bW9kZV90IG1vZGUsXG5pbmNsdWRlL2xpbnV4L2ZzLmgtMjQ4Mi1cdFx0XHQgICBjb25zdCBzdHJ1Y3QgY3JlZCAqY3JlZCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA0IDE3OjAwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5MjA0CgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHByZXNlbnRlZCBhcyBpZiBpdCB3ZXJlIG15IG93biBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKlRoaW5raW5nIEFib3V0IEZpbGVzeXN0ZW1zIGFuZCBEaXJlY3RvcnkgQ3JlYXRpb24qKgoKQWxyaWdodCwgc28gd2UmIzM5O3JlIHRhbGtpbmcgYWJvdXQgdGhlIGxvdy1sZXZlbCwgZmlsZXN5c3RlbSBpbnRlcmFjdGlvbiBoZXJlLiBUaGUgbWVudGFsIHRpY2sgSSBnZXQgZnJvbSAmIzM0O3Zmc19ta2RpciYjMzQ7IGlzIHRoZSBjcml0aWNhbCBmdW5jdGlvbiB3aXRoaW4gYSBWaXJ0dWFsIEZpbGUgU3lzdGVtIChWRlMpIGxheWVyLiBJIGltbWVkaWF0ZWx5IHRoaW5rIGFib3V0IHRoZSBjb3JlIG1lY2hhbmljcyDigJMgaG93IHRoYXQgc2luZ2xlIGNhbGwgdHJhbnNsYXRlcyB0byBhY3Rpb25zIGFjcm9zcyBkaWZmZXJlbnQgdW5kZXJseWluZyBmaWxlc3lzdGVtcy4gV2UmIzM5O3JlIG5vdCBqdXN0IGNyZWF0aW5nIGEgZGlyZWN0b3J5OyB3ZSYjMzk7cmUgb3JjaGVzdHJhdGluZyB0aGUgKnJlcXVlc3QqIGZvciBhIGRpcmVjdG9yeSBjcmVhdGlvbi4KCk15IG1pbmQganVtcHMgdG8gdGhlIFZGUyYjMzk7cyByb2xlOiBpdCYjMzk7cyB0aGUgYWJzdHJhY3Rpb24gbGF5ZXIuIGB2ZnNfbWtkaXJgIGl0c2VsZiBkb2VzbiYjMzk7dCAqZG8qIHRoZSBta2Rpci4gSXQgdGFrZXMgdGhlIHBhcmFtZXRlcnPigJR0aGUgcGF0aCwgcGVybWlzc2lvbnMsIGV0Yy7igJRhbmQgdGhlbiBpdCBkaXNwYXRjaGVzIHRoZSBhY3R1YWwgd29yayB0byB0aGUgYXBwcm9wcmlhdGUgdW5kZXJseWluZyBmaWxlc3lzdGVtLiBJIGluc3RhbnRseSBzdGFydCBjb25zaWRlcmluZyB0aGUgaW1wbGljYXRpb25zOiBob3cgZG9lcyB0aGUgVkZTIHNlbGVjdCB0aGUgcmlnaHQgZmlsZXN5c3RlbSBiYXNlZCBvbiB0aGUgcGF0aD8gSXMgaXQgYmFzZWQgb24gbW91bnQgcG9pbnRzLCBvbiBhIGZpbGVzeXN0ZW0tc3BlY2lmaWMgc3RydWN0dXJlIG9yIGRhdGEsIG9yIGEgY29tYmluYXRpb24/CgpJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoZSBhcmd1bWVudHMgdG8gYHZmc19ta2RpcmAgYW5kIHdoYXQgdGhleSBpbXBseS4gVGhlIHBhdGggaXRzZWxmIHRyaWdnZXJzIGNvbnNpZGVyYXRpb25zIGFib3V0IHBhdGggcmVzb2x1dGlvbi4gRG9lcyB0aGUgVkZTIGhhbmRsZSBzeW1ib2xpYyBsaW5rcyBhbG9uZyB0aGUgcGF0aD8gSG93IGRvZXMgaXQgZGVhbCB3aXRoIHJlbGF0aXZlIHBhdGhzIHZzLiBhYnNvbHV0ZSBwYXRocz8gVGhlIHBlcm1pc3Npb25zLCB0b28sIGFyZSBpbnN0YW50bHkgYSBwb2ludCBvZiBmb2N1cy4gV2UgaGF2ZSB0byBjb25zaWRlciBob3cgdG8gaGFuZGxlIFVJRC9HSURzIChVc2VyL0dyb3VwIElEcyksIGFuZCB0aGUgdHJhbnNsYXRpb24gbGF5ZXIgdGhhdCBvY2N1cnMgYXQgdGhlIFZGUyBsZXZlbCBiZWZvcmUgdGhlIHNwZWNpZmljIGZpbGVzeXN0ZW0gZ2V0cyBpbnZvbHZlZC4gRG9lcyB0aGUgdW5kZXJseWluZyBmaWxlc3lzdGVtIHN1cHBvcnQgdGhlIHBlcm1pc3Npb25zIG1vZGVsPyBXaGF0IGlzIHRoZSBzdGFuZGFyZCBiZWhhdmlvciBpbiB0aGlzIGNhc2UsIGFuZCBob3cgZG9lcyBgdmZzX21rZGlyYCBhZGFwdCB0byBpdD8KClRoZSBlcnJvciBoYW5kbGluZyBhc3BlY3RzIGFyZSBhbHNvIGF0IHRoZSBmb3JlZnJvbnQuIFdoYXQgYXJlIHRoZSBjb21tb24gZXJyb3IgY29kZXMgdGhhdCBtaWdodCBjb21lIGJhY2s/ICYjMzQ7UGVybWlzc2lvbiBkZW5pZWQsJiMzNDsgJiMzNDtmaWxlIGV4aXN0cywmIzM0OyAmIzM0O291dCBvZiBzcGFjZSwmIzM0OyAmIzM0O2ludmFsaWQgcGF0aCYjMzQ7Li4uIEkgc3RhcnQgbWFwcGluZyB0aG9zZSBwb3RlbnRpYWwgZXJyb3JzIHRvIHRoZSBzcGVjaWZpYyBjaGVja3MgdGhhdCBgdmZzX21rZGlyYCBtaWdodCBkbyBhdCB0aGUgVkZTIGxldmVsLCBhbmQgYWxzbyB0aGUgc29ydHMgb2YgZXJyb3JzIHRoYXQgd291bGQgY29tZSBiYWNrIGZyb20gYSByZWFsIGZpbGVzeXN0ZW0uIEkmIzM5O20gd29uZGVyaW5nIHdoYXQgaXMgdGhlIGV4cGVjdGVkIGVycm9yIGhhbmRsaW5nIHN0cmF0ZWd5LiBEb2VzIHRoZSBWRlMgYXR0ZW1wdCByZXRyeSBvciBvdGhlciBsb2dpYywgb3IgZG9lcyBpdCBzaW1wbHkgcmV0dXJuIHRoZSBlcnJvciBjb2RlPwoKQmFzaWNhbGx5LCBJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoZSBpbnRyaWNhdGUgZGFuY2UgYmV0d2VlbiB0aGUgVkZTIGxheWVyIGFuZCB0aGUgZmlsZXN5c3RlbSBkcml2ZXIuIGB2ZnNfbWtkaXJgIGlzIGp1c3QgYSBrZXkgdGhhdCBhY3RpdmF0ZXMgdGhpcyByZWxhdGlvbnNoaXAsIHNvIHRoZXJlJiMzOTtzIGEgbG90IG9mIHVuZGVybHlpbmcgZmlsZXN5c3RlbSBtZWNoYW5pY3MgYW5kIGludGVyYWN0aW9ucyB0aGF0IEkmIzM5O20gY29uc2lkZXJpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA0IDE3OjAwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O14oc3RydWN0IGRlbnRyeSBcXCpcXHMqKT92ZnNfbWtkaXJcXCgmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7RG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9wb3J0aW5nLnJzdD0xMzEyPWluc3RlYWQuXG4tLVxuRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9wb3J0aW5nLnJzdC0xMzE3LVxuRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9wb3J0aW5nLnJzdDoxMzE4OnZmc19ta2RpcigpIG5vdyByZXR1cm5zIGEgZGVudHJ5IC0gdGhlIG9uZSByZXR1cm5lZCBieSAtXHUwMDNlbWtkaXIoKS4gIElmXG5Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3BvcnRpbmcucnN0LTEzMTktdGhhdCBkZW50cnkgaXMgZGlmZmVyZW50IGZyb20gdGhlIGRlbnRyeSBwYXNzZWQgaW4sIGluY2x1ZGluZyBpZiBpdCBpc1xuLS1cbmZzL25hbWVpLmM9NTMxMT1zdHJ1Y3QgZGVudHJ5ICp2ZnNfbWtkaXJfbm9fcGVybShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXG4tLVxuZnMvbmFtZWkuYy01MzY0LSAqL1xuZnMvbmFtZWkuYzo1MzY1OnN0cnVjdCBkZW50cnkgKnZmc19ta2RpcihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXG5mcy9uYW1laS5jLTUzNjYtXHRcdFx0IHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlLFxuLS1cbmluY2x1ZGUvbGludXgvZnMuaD0xNzY0PWludCB2ZnNfY3JlYXRlKHN0cnVjdCBtbnRfaWRtYXAgKiwgc3RydWN0IGRlbnRyeSAqLCB1bW9kZV90LFxuaW5jbHVkZS9saW51eC9mcy5oLTE3NjUtXHQgICAgICAgc3RydWN0IGRlbGVnYXRlZF9pbm9kZSAqKTtcbmluY2x1ZGUvbGludXgvZnMuaDoxNzY2OnN0cnVjdCBkZW50cnkgKnZmc19ta2RpcihzdHJ1Y3QgbW50X2lkbWFwICosIHN0cnVjdCBpbm9kZSAqLFxuaW5jbHVkZS9saW51eC9mcy5oLTE3NjctXHRcdFx0IHN0cnVjdCBkZW50cnkgKiwgdW1vZGVfdCwgc3RydWN0IGRlbGVnYXRlZF9pbm9kZSAqKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDQgMTc6MDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjAxMjQKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiAxMDAzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKklkZW50aWZ5aW5nIEtleSBGdW5jdGlvbnMgYW5kIENvbmZpZ3VyYXRpb24gZm9yIFRlc3RpbmcqKgoKT2theSwgc28gSSYjMzk7bSBkaXZpbmcgaW50byB0aGlzIGNvZGUgYW5kIGZpZ3VyaW5nIG91dCB0aGUgY3JpdGljYWwgZnVuY3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyBwYXRjaC4gSW5pdGlhbGx5LCBJIHdhcyBmb2N1c2luZyBvbjoKCi0gICBgbG9va3VwX29wZW5gCi0gICBgYXRvbWljX29wZW5gCi0gICBgbWF5X29fY3JlYXRlYAotICAgYGJ1aWxkX29wZW5fZmxhZ3NgCi0gICBgZG9fb3BlbmAKLSAgIGBkZW50cnlfY3JlYXRlYAotICAgYHZmc19ta2RpcmAKLSAgIGB2ZnNfY3JlYXRlYAoKSSBoYWQgYSBxdWljayB0aG91Z2h0IGFib3V0IGluY2x1ZGluZyB0aGUgc3RhdGljIGlubGluZSBmdW5jdGlvbnMgYHZmc19ta2Rpcl9ub19wZXJtYCBhbmQgYHZmc19jcmVhdGVfbm9fcGVybWAgYnV0IGRlY2lkZWQgYWdhaW5zdCBpdCwgYXMgc3l6a2FsbGVyIG1pZ2h0IHN0cnVnZ2xlIHRvIHRyYWNlIHRob3NlLiBJdCYjMzk7cyBzYWZlciB0byBzdGljayB0byB0aGUgbm9uLWlubGluZSBjYWxsaW5nIGZ1bmN0aW9ucy4KClRoZW4gSSByZWFsaXplZCBgZG9fb3BlbmAgaXMgYWxzbyBzdGF0aWMsIHNvIEkgd2VudCBiYWNrIHRvIG1ha2Ugc3VyZSwgaXQgaXMgY2FsbGVkIGZyb20gb3BlbmF0LCB3aGljaCBpcyBhbHdheXMgZW5hYmxlZC4KClRoZW4gSSByZW1lbWJlcmVkIHRoZSBwYXRjaCBhbHNvIHRvdWNoZXMgdmFyaW91cyBmaWxlc3lzdGVtcy4gSXQgbG9va3MgbGlrZSBlYWNoIG9mIHRoZW0gbm93IGhhbmRsZXMgYE9fSVNfTUtESVIoZmxhZ3MpYCBpbiB0aGVpciBgYXRvbWljX29wZW5gIGNhbGxzLiBTbyBJIG5lZWQgdG8gYWRkIHRoZXNlIGFzIHdlbGw6CgotICAgYHY5ZnNfdmZzX2F0b21pY19vcGVuYAotICAgYHY5ZnNfdmZzX2F0b21pY19vcGVuX2RvdGxgCi0gICBgY2VwaF9hdG9taWNfb3BlbmAKLSAgIGBmdXNlX2F0b21pY19vcGVuYAotICAgYGdmczJfYXRvbWljX29wZW5gCi0gICBgbmZzX2F0b21pY19vcGVuYAotICAgYG5mc19hdG9taWNfb3Blbl92MjNgCi0gICBgY2lmc19hdG9taWNfb3BlbmAKLSAgIGB2Ym94c2ZfZGlyX2F0b21pY19vcGVuYAoKVGhhdCBsZWQgbWUgdG8gdGhpbmsgYWJvdXQgZmlsZXN5c3RlbSBjb25maWdzLiBJIGxpc3RlZCB0aGVtIGF0IGZpcnN0LCBidXQgdGhlbiBJIHN0b3BwZWQgbXlzZWxmLiBUaGUgcHJvbXB0IHNheXMsICYjMzQ7RG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuJiMzNDsgU28gSSBuZWVkIHRvIGdvIGxvb2sgaW50byBLY29uZmlnIGZpbGVzIGZvciBhbnkgaWZkZWZzLiBJIHNob3VsZCBub3QgbWFrZSBhbnkgYXNzdW1wdGlvbnMuIExldCYjMzk7cyBzZWUgaWYgdGhlcmUgYXJlIGFueSBjb25maWcgb3B0aW9ucyByZWxhdGVkIHRvIHRoZSBmaWxlc3lzdGVtIGNoYW5nZXMgb3IgdGhlIGNvcmUgZnVuY3Rpb25zIGluIGBmcy9uYW1laS5jYCBhbmQgYGZzL29wZW4uY2AuIEkgaGF2ZSB0byBjaGVjayB0aGUgS2NvbmZpZyBmaWxlcyBub3cuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA0IDE3OjAxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0OyNpZmRlZiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL25hbWVpLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvbmFtZWkuYz0zNzQ9c3RhdGljIGludCBjaGVja19hY2woc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXG4tLVxuZnMvbmFtZWkuYy0zNzYte1xuZnMvbmFtZWkuYzozNzc6I2lmZGVmIENPTkZJR19GU19QT1NJWF9BQ0xcbmZzL25hbWVpLmMtMzc4LVx0c3RydWN0IHBvc2l4X2FjbCAqYWNsO1xuLS1cbmZzL25hbWVpLmM9NDEzPXN0YXRpYyBpbmxpbmUgYm9vbCBub19hY2xfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSlcbmZzL25hbWVpLmMtNDE0LXtcbmZzL25hbWVpLmM6NDE1OiNpZmRlZiBDT05GSUdfRlNfUE9TSVhfQUNMXG5mcy9uYW1laS5jLTQxNi1cdHJldHVybiBsaWtlbHkoIVJFQURfT05DRShpbm9kZS1cdTAwM2VpX2FjbCkpO1xuLS1cbmZzL25hbWVpLmM9MTIwNz1zdGF0aWMgaW50IHN5c2N0bF9wcm90ZWN0ZWRfcmVndWxhciBfX3JlYWRfbW9zdGx5O1xuZnMvbmFtZWkuYy0xMjA4LVxuZnMvbmFtZWkuYzoxMjA5OiNpZmRlZiBDT05GSUdfU1lTQ1RMXG5mcy9uYW1laS5jLTEyMTAtc3RhdGljIGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgbmFtZWlfc3lzY3Rsc1tdID0ge1xuLS1cbmZzL25hbWVpLmM9MjI3OD1zdGF0aWMgX19hbHdheXNfaW5saW5lIGNvbnN0IGNoYXIgKndhbGtfY29tcG9uZW50KHN0cnVjdCBuYW1laWRhdGEgKm5kLCBpbnQgZmxhZ3MpXG4tLVxuZnMvbmFtZWkuYy0yMzIwLSAqL1xuZnMvbmFtZWkuYzoyMzIxOiNpZmRlZiBDT05GSUdfRENBQ0hFX1dPUkRfQUNDRVNTXG5mcy9uYW1laS5jLTIzMjItXG4tLVxuZnMvbmFtZWkuYy0yMzI0LVxuZnMvbmFtZWkuYzoyMzI1OiNpZmRlZiBIQVNIX01JWFxuZnMvbmFtZWkuYy0yMzI2LVxuLS1cbmZzL25hbWVpLmM9MjQ2NT1zdGF0aWMgaW5saW5lIGNvbnN0IGNoYXIgKmhhc2hfbmFtZShzdHJ1Y3QgbmFtZWlkYXRhICpuZCxcbi0tXG5mcy9uYW1laS5jLTI1MTYtICovXG5mcy9uYW1laS5jOjI1MTc6I2lmZGVmIF9fQklHX0VORElBTlxuZnMvbmFtZWkuYy0yNTE4LSAgI2RlZmluZSBMQVNUX1dPUkRfSVNfRE9UXHQoMHgyZXVsIFx1MDAzY1x1MDAzYyAoQklUU19QRVJfTE9ORy04KSlcbi0tXG5mcy9uYW1laS5jPTM2Mjc9RVhQT1JUX1NZTUJPTChzdGFydF9yZW1vdmluZ19kZW50cnkpO1xuZnMvbmFtZWkuYy0zNjI4LVxuZnMvbmFtZWkuYzozNjI5OiNpZmRlZiBDT05GSUdfVU5JWDk4X1BUWVNcbmZzL25hbWVpLmMtMzYzMC1pbnQgcGF0aF9wdHMoc3RydWN0IHBhdGggKnBhdGgpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA0IDE3OjAxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyMjI1CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogNTc1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBWRlMgTW9kaWZpY2F0aW9ucyBmb3IgUG90ZW50aWFsIEZlYXR1cmUgRmxhZ2dpbmcqKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gdGhpcyBjb2RlLCBzcGVjaWZpY2FsbHkgaW4gYGZzL25hbWVpLmNgIGFuZCBgZnMvb3Blbi5jYCwgYW5kIEkmIzM5O20gbm90IHNlZWluZyBhbnkgcHJlcHJvY2Vzc29yIGRpcmVjdGl2ZXMgKGAjaWZkZWZgKSBhcm91bmQgdGhlIGNoYW5nZXMuIFRoYXQmIzM5O3MgYSBrZXkgZmlyc3Qgb2JzZXJ2YXRpb24uIElmIHRoaXMgaXMgYSBuZXcgZmVhdHVyZSBvciBjaGFuZ2UsIGl0IG1pZ2h0IHJlcXVpcmUgZmVhdHVyZSBmbGFnZ2luZywgYW5kIHRoZSBhYnNlbmNlIG9mIGBpZmRlZnNgIGlzIG5vdGV3b3J0aHkuCgpJJiMzOTt2ZSBnb3QgYSBsaXN0IG9mIHRoZSBtb2RpZmllZCBmdW5jdGlvbnM6IGB2ZnNfY3JlYXRlX25vX3Blcm1gLCBgdmZzX2NyZWF0ZWAsIGBtYXlfb19jcmVhdGVgLCBgb19jcmVhdGVfbW9kZWAsIGBhdG9taWNfb3BlbmAsIGB2ZnNfbWtkaXJfbm9fcGVybWAsIGBsb29rdXBfb3BlbmAsIGBsb29rdXBfZmFzdF9mb3Jfb3BlbmAsIGBvcGVuX2xhc3RfbG9va3Vwc2AsIGBkb19vcGVuYCwgYGZpbGVuYW1lX2NyZWF0ZWAsIGBkZW50cnlfY3JlYXRlYCwgYHZmc19ta2RpcmAsIGBmaWxlbmFtZV91bmxpbmthdGAsIGBmaWxlbmFtZV9yZW5hbWVhdDJgIGFuZCBgYnVpbGRfb3Blbl9mbGFnc2AuIE5vdywgdGhlc2UgYXJlIGFsbCBjb3JlIFZGUyBmdW5jdGlvbnMsIGFuZCBJIHNob3VsZCByZWFsbHkgZm9jdXMgb24gdGhlIGtleSBvbmVzOiBgbG9va3VwX29wZW5gLCBgYXRvbWljX29wZW5gLCBgbWF5X29fY3JlYXRlYCwgYGJ1aWxkX29wZW5fZmxhZ3NgLCBgZG9fb3BlbmAsIGBkZW50cnlfY3JlYXRlYCwgYHZmc19ta2RpcmAsIGB2ZnNfY3JlYXRlYCwgYHZmc19ta2Rpcl9ub19wZXJtYCwgYHZmc19jcmVhdGVfbm9fcGVybWAsIGBvX2NyZWF0ZV9tb2RlYCwgYG9wZW5fbGFzdF9sb29rdXBzYCwgYW5kIGBsb29rdXBfZmFzdF9mb3Jfb3BlbmAuIFRoZXNlIGFyZSB0aGUgZnVuY3Rpb25zIHdoZXJlIHRoZSBhY3R1YWwgbW9kaWZpY2F0aW9ucyBsaWtlbHkgcmVzaWRlLgoKV2FpdCBhIHNlY29uZC4uLiBgYXRvbWljX29wZW5gIGluIGBmcy9uYW1laS5jYCBpcyBzdGF0aWMsIHdoaWNoIGlzIGludGVyZXN0aW5nLiBJIHNob3VsZCBjaGVjayBpZiB0aGVyZSBhcmUgb3RoZXIgYGF0b21pY19vcGVuYCBmdW5jdGlvbnMgYmVjYXVzZSBpdCBjb3VsZCBiZSBhIGNydWNpYWwgcGFydCBvZiB0aGUgY2hhbmdlLiBZZXMsIHRoZXJlIGFyZSBmaWxlc3lzdGVtLXNwZWNpZmljIGltcGxlbWVudGF0aW9uczogYHY5ZnNfdmZzX2F0b21pY19vcGVuYCwgYHY5ZnNfdmZzX2F0b21pY19vcGVuX2RvdGxgLCBgY2VwaF9hdG9taWNfb3BlbmAsIGBmdXNlX2F0b21pY19vcGVuYCwgYGdmczJfYXRvbWljX29wZW5gLCBgbmZzX2F0b21pY19vcGVuYCwgYG5mc19hdG9taWNfb3Blbl92MjNgLCBgY2lmc19hdG9taWNfb3BlbmAsIGFuZCBgdmJveHNmX2Rpcl9hdG9taWNfb3BlbmAuCgpTaW5jZSB0aGlzIHRvdWNoZXMgbXVsdGlwbGUgZmlsZXN5c3RlbXMsIEkgbmVlZCB0byBjb25zaWRlciBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcy4gSSBzaG91bGQgbG9vayBpbnRvIHRoZSByZWxldmFudCBLY29uZmlnIG9wdGlvbnM6IGA5UF9GU2AsIGBDRVBIX0ZTYCwgYEZVU0VfRlNgLCBgR0ZTMl9GU2AsIGBORlNfRlNgLCBgQ0lGU2AsIGFuZCBgVkJPWFNGX0ZTYC4gVGhhdCB3aWxsIHRlbGwgbWUgaWYgdGhlIG1vZGlmaWNhdGlvbnMgYXJlIGNvbmRpdGlvbmFsIG9uIGFueSBvZiB0aGVzZSBmaWxlc3lzdGVtIG9wdGlvbnMgYmVpbmcgZW5hYmxlZC4gTm93LCBsZXQmIzM5O3MganVzdCBtYWtlIHN1cmUgSSBoYXZlIGFsbCB0aGUgZmFjdHMuIENoZWNraW5nIHRoZSBLY29uZmlnIGZvciBgOVBfRlNgLCBqdXN0IHRvIHZlcmlmeSB0aGF0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNCAxNzowMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgOVBfRlMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy85cC9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzLzlwL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbmZzLzlwL0tjb25maWc6Mjpjb25maWcgOVBfRlNcbmZzLzlwL0tjb25maWctMy1cdHRyaXN0YXRlIFwmIzM0O1BsYW4gOSBSZXNvdXJjZSBTaGFyaW5nIFN1cHBvcnQgKDlQMjAwMClcJiMzNDtcbi0tXG5mcy85cC9LY29uZmlnPTE0PWlmIDlQX0ZTXG5mcy85cC9LY29uZmlnOjE1OmNvbmZpZyA5UF9GU0NBQ0hFXG5mcy85cC9LY29uZmlnLTE2LVx0Ym9vbCBcJiMzNDtFbmFibGUgOVAgY2xpZW50IGNhY2hpbmcgc3VwcG9ydFwmIzM0O1xuLS1cbmZzLzlwL0tjb25maWctMjItXG5mcy85cC9LY29uZmlnOjIzOmNvbmZpZyA5UF9GU19QT1NJWF9BQ0xcbmZzLzlwL0tjb25maWctMjQtXHRib29sIFwmIzM0OzlQIFBPU0lYIEFjY2VzcyBDb250cm9sIExpc3RzXCYjMzQ7XG4tLVxuZnMvOXAvS2NvbmZpZz0zMj1lbmRpZlxuLS1cbmZzLzlwL0tjb25maWctMzQtXG5mcy85cC9LY29uZmlnOjM1OmNvbmZpZyA5UF9GU19TRUNVUklUWVxuZnMvOXAvS2NvbmZpZy0zNi1cdGJvb2wgXCYjMzQ7OVAgU2VjdXJpdHkgTGFiZWxzXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA0IDE3OjAxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIzNzA5CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQ2hlY2tpbmcgdGhlIEZpbGUgU3lzdGVtIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gdGhlIHByb21wdCBpcyBwb2ludGluZyBtZSB0b3dhcmRzIGA5UF9GU2AuIE15IGluaXRpYWwgaW5zdGluY3QgaXMgdG8gZGVsdmUgaW50byB0aGUgZmlsZSBzeXN0ZW0gY29uZmlndXJhdGlvbnMgdG8gc2VlIGhvdyB0aGlzIGlzIGhhbmRsZWQuIFRoYXQgbWVhbnMgdGhlIG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIGNoZWNrIGBmcy9jZXBoL0tjb25maWdgLiBJJiMzOTtsbCB3YW50IHRvIHNlZSBob3cgYDlQX0ZTYCByZWxhdGVzIHRvIHRoZSBicm9hZGVyIENlcGggZmlsZSBzeXN0ZW0gY29uZmlndXJhdGlvbiwgYW5kIGlmIHRoZXJlJiMzOTtzIGFueSBkaXJlY3QgY29ubmVjdGlvbiBvciBpZiBpdCYjMzk7cyB0cmVhdGVkIHNlcGFyYXRlbHkuIFRoaXMgc2hvdWxkIHByb3ZpZGUgY29udGV4dCBhbmQgZGlyZWN0aW9uIGZvciB1bmRlcnN0YW5kaW5nIHRoZSBpbnRlZ3JhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDQgMTc6MDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIENFUEhfRlMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9jZXBoL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvY2VwaC9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG5mcy9jZXBoL0tjb25maWc6Mjpjb25maWcgQ0VQSF9GU1xuZnMvY2VwaC9LY29uZmlnLTMtXHR0cmlzdGF0ZSBcJiMzNDtDZXBoIGRpc3RyaWJ1dGVkIGZpbGUgc3lzdGVtXCYjMzQ7XG4tLVxuZnMvY2VwaC9LY29uZmlnPTE5PWlmIENFUEhfRlNcbmZzL2NlcGgvS2NvbmZpZzoyMDpjb25maWcgQ0VQSF9GU0NBQ0hFXG5mcy9jZXBoL0tjb25maWctMjEtXHRib29sIFwmIzM0O0VuYWJsZSBDZXBoIGNsaWVudCBjYWNoaW5nIHN1cHBvcnRcJiMzNDtcbi0tXG5mcy9jZXBoL0tjb25maWc9Mjc9ZW5kaWZcbmZzL2NlcGgvS2NvbmZpZy0yOC1cbmZzL2NlcGgvS2NvbmZpZzoyOTpjb25maWcgQ0VQSF9GU19QT1NJWF9BQ0xcbmZzL2NlcGgvS2NvbmZpZy0zMC1cdGJvb2wgXCYjMzQ7Q2VwaCBQT1NJWCBBY2Nlc3MgQ29udHJvbCBMaXN0c1wmIzM0O1xuLS1cbmZzL2NlcGgvS2NvbmZpZy0zOC1cbmZzL2NlcGgvS2NvbmZpZzozOTpjb25maWcgQ0VQSF9GU19TRUNVUklUWV9MQUJFTFxuZnMvY2VwaC9LY29uZmlnLTQwLVx0Ym9vbCBcJiMzNDtDZXBoRlMgU2VjdXJpdHkgTGFiZWxzXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA0IDE3OjAxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI0MTE3CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgc3VtbWFyaXplZCB0aG91Z2h0IHByb2Nlc3MsIGFzc3VtaW5nIEkmIzM5O20gYW4gZXhwZXJ0OgoKKipJbnZlc3RpZ2F0aW5nIGEgRmlsZXN5c3RlbSBDb25maWd1cmF0aW9uIE9wdGlvbioqCgpSaWdodCwgbGV0JiMzOTtzIHN0YXJ0IHdpdGggYENFUEhfRlNgLiBUaGF0JiMzOTtzIHRoZSBrZXkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgZmlsZXN5c3RlbSBjb25maWd1cmF0aW9uIG9wdGlvbiBhbmQgaG93IGl0JiMzOTtzIGRlZmluZWQgYW5kIGVuYWJsZWQuCgpOb3csIGxldCYjMzk7cyBkaXZlIGludG8gdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uIGZpbGVzLiBUaGUgbG9naWNhbCBwbGFjZSB0byBsb29rIGZvciBpdHMgZGVmaW5pdGlvbiB3b3VsZCBiZSB1bmRlciB0aGUgZnVzZSBtb2R1bGUgc2luY2UgaXQmIzM5O3MgYSB1c2Vyc3BhY2UgZmlsZXN5c3RlbS4gU3BlY2lmaWNhbGx5LCBJJiMzOTtsbCBleGFtaW5lIGBmcy9mdXNlL0tjb25maWdgIHRvIHNlZSB0aGUgZGVwZW5kZW5jaWVzIGFuZCBhbnkgb3RoZXIgZGV0YWlscy4gSSYjMzk7bSBleHBlY3RpbmcgdG8gZmluZCBpdHMgZGVmaW5pdGlvbiB0aGVyZSwgYWxvbmcgd2l0aCBhbnkgcmVsZXZhbnQgY29udGV4dC4gSSYjMzk7bGwgcXVpY2tseSBjaGVjayBpZiBgQ0VQSF9GU2AgaGFzIGFuIGltbWVkaWF0ZSBsaW5rLCBvciBpZiBgZnVzZWAgaXMgYSBkZXBlbmRlbmN5LiBUaGlzIHNob3VsZCBnaXZlIG1lIGEgZ29vZCB1bmRlcnN0YW5kaW5nIG9mIHdoZXJlIGl0IGZpdHMgaW50byB0aGUgYnJvYWRlciBrZXJuZWwgY29uZmlndXJhdGlvbiBsYW5kc2NhcGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA0IDE3OjAxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBGVVNFX0ZTJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvZnVzZS9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2Z1c2UvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuZnMvZnVzZS9LY29uZmlnOjI6Y29uZmlnIEZVU0VfRlNcbmZzL2Z1c2UvS2NvbmZpZy0zLVx0dHJpc3RhdGUgXCYjMzQ7RlVTRSAoRmlsZXN5c3RlbSBpbiBVc2Vyc3BhY2UpIHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDQgMTc6MDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjQ0MjkKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAyMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipLZXJuZWwgQ29uZmlndXJhdGlvbiBDb250ZXh0KioKClJpZ2h0LCBgRlVTRV9GU2AuIEFmZmlybWF0aXZlLiBNYWtlcyBwZXJmZWN0IHNlbnNlIGluIHRoaXMgY29udGV4dC4KCk5vdywgSSYjMzk7bSBhbHJlYWR5IHRoaW5raW5nIGFib3V0IHdoZXJlIHRvIGZpbmQgdGhlIHJlbGF0ZWQgY29uZmlndXJhdGlvbnMuIE15IGltbWVkaWF0ZSBtZW50YWwgbWFwIGlzIHRha2luZyBtZSB0byB0aGUgYGZzL2AgZGlyZWN0b3J5LCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBrZXJuZWwgc291cmNlIHRyZWUuIExldCYjMzk7cyBkcmlsbCBkb3duIGFuZCBjaGVjayB0aGUgYGdmczJgIGNvbmZpZ3VyYXRpb24gZmlsZS4gTG9va2luZyBhdCBgZnMvZ2ZzMi9LY29uZmlnYCB3aWxsIGdpdmUgbWUgYSBjbGVhciBwaWN0dXJlIG9mIGhvdyB0aGlzIGZpbGVzeXN0ZW0gaXMgaW50ZWdyYXRlZCBhbmQgbWFuYWdlZCBpbiByZWxhdGlvbiB0byB0aGUgb3ZlcmFsbCBrZXJuZWwgYnVpbGQgcHJvY2Vzcy4gVGltZSB0byBxdWlja2x5IGNyb3NzIHJlZmVyZW5jZSB0aGUgR0ZTMiBLY29uZmlnIGFuZCBkZXRlcm1pbmUgZGVwZW5kZW5jaWVzLCBkZWZhdWx0cywgYW5kIGF2YWlsYWJsZSBvcHRpb25zIHJlbGF0ZWQgdG8gRlVTRS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDQgMTc6MDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEdGUzJfRlMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9nZnMyL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvZ2ZzMi9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG5mcy9nZnMyL0tjb25maWc6Mjpjb25maWcgR0ZTMl9GU1xuZnMvZ2ZzMi9LY29uZmlnLTMtXHR0cmlzdGF0ZSBcJiMzNDtHRlMyIGZpbGUgc3lzdGVtIHN1cHBvcnRcJiMzNDtcbi0tXG5mcy9nZnMyL0tjb25maWctMjYtXG5mcy9nZnMyL0tjb25maWc6Mjc6Y29uZmlnIEdGUzJfRlNfTE9DS0lOR19ETE1cbmZzL2dmczIvS2NvbmZpZy0yOC1cdGJvb2wgXCYjMzQ7R0ZTMiBETE0gbG9ja2luZ1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNCAxNzowMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNDc4MwoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEluaXRpYWwgQXNzZXNzbWVudCoqCgpPa2F5LCBzbyB0aGUgcHJvbXB0IGlzIHBvaW50aW5nIG1lIHRvd2FyZCBzb21ldGhpbmcgcmVsYXRlZCB0byBHRlMyLCBhIGNsdXN0ZXJlZCBmaWxlIHN5c3RlbS4gU3BlY2lmaWNhbGx5LCBpdCYjMzk7cyBhc2tpbmcgYWJvdXQgc29tZXRoaW5nIGludm9sdmluZyBgR0ZTMl9GU2AuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCAmIzM0O1llcywgdGhhdCYjMzk7cyBkZWZpbml0ZWx5IHRoZSBrZXkuJiMzNDsgV2UmIzM5O3JlIGxpa2VseSBkZWFsaW5nIHdpdGggc29tZSBjb25maWd1cmF0aW9uIG9wdGlvbiBvciBrZXJuZWwgZmVhdHVyZSBzcGVjaWZpY2FsbHkgdGllZCB0byBHRlMyLgoKR2l2ZW4gdGhlIGNvbnRleHQsIEkgdGhpbmsgdGhlIG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIGRpdmUgaW50byB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24gZmlsZXMsIHBhcnRpY3VsYXJseSB3aXRoaW4gdGhlIE5GUyBzdWJ0cmVlLiBMZXQmIzM5O3Mgc3RhcnQgYnkgZXhhbWluaW5nIGBmcy9uZnMvS2NvbmZpZ2AuIEl0JiMzOTtzIGEgc2Vuc2libGUgc3RhcnRpbmcgcG9pbnQgc2luY2UgTkZTIG9mdGVuIGludGVncmF0ZXMgd2l0aCB2YXJpb3VzIGZpbGUgc3lzdGVtcy4gUGVyaGFwcyB0aGVyZSYjMzk7cyBhIGRlcGVuZGVuY3ksIGEgY29uZmxpY3QsIG9yIHNvbWUgcmVsYXRlZCBjb25maWd1cmF0aW9uIG9wdGlvbiB0aGF0JiMzOTtzIHJlbGV2YW50IHRvIHVuZGVyc3RhbmQgaG93IEdGUzIgaW50ZXJhY3RzIHdpdGggb3IgaXMgdHJlYXRlZCBpbiByZWxhdGlvbiB0byBORlMuIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyBpbiB0aGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDQgMTc6MDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE5GU19GUyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL25mcy9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL25mcy9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG5mcy9uZnMvS2NvbmZpZzoyOmNvbmZpZyBORlNfRlNcbmZzL25mcy9LY29uZmlnLTMtXHR0cmlzdGF0ZSBcJiMzNDtORlMgY2xpZW50IHN1cHBvcnRcJiMzNDtcbi0tXG5mcy9uZnMvS2NvbmZpZz0xNjI9Y29uZmlnIFJPT1RfTkZTXG4tLVxuZnMvbmZzL0tjb25maWctMTcyLVxuZnMvbmZzL0tjb25maWc6MTczOmNvbmZpZyBORlNfRlNDQUNIRVxuZnMvbmZzL0tjb25maWctMTc0LVx0Ym9vbCBcJiMzNDtQcm92aWRlIE5GUyBjbGllbnQgY2FjaGluZyBzdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA0IDE3OjAxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI1MTYyCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIGNyYWZ0ZWQgd2l0aCB0aGUgdW5kZXJzdGFuZGluZyB0aGF0IEkmIzM5O20gc3BlYWtpbmcgdG8gYSBmZWxsb3cgZXhwZXJ0OgoKKipORlNfRlMgQ29uZmlybWF0aW9uIGFuZCBOZXh0IFN0ZXBzKioKClllcCwgdGhhdCBjb25maXJtcyBpdDogd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBgTkZTX0ZTYCBoZXJlLiBNeSBpbW1lZGlhdGUgZm9sbG93LXVwIGlzIHRvIGRyaWxsIGRvd24gaW50byB0aGUgU2FtYmEgY2xpZW50JiMzOTtzIGNvbmZpZ3VyYXRpb24uIFRoZSBtb3N0IGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQgZGlnZ2luZyBpcyBgZnMvc21iL2NsaWVudC9LY29uZmlnYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgZXhhY3RseSBob3cgdGhlIFNhbWJhIGNsaWVudCBpbnRlcmFjdHMgd2l0aCB0aGUga2VybmVsJiMzOTtzIGZpbGUgc3lzdGVtIHNldHVwIGluIHRoaXMgc3BlY2lmaWMgY29udGV4dC4gVGhpcyBgS2NvbmZpZ2AgZmlsZSBzaG91bGQgZ2l2ZSBtZSB0aGUgZGV0YWlscyBJIG5lZWQgdG8gZXZhbHVhdGUgYW5kIGNvbmZpcm0gdGhlIGlzc3VlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNCAxNzowMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgQ0lGUyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL3NtYi9jbGllbnQvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9zbWIvY2xpZW50L0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbmZzL3NtYi9jbGllbnQvS2NvbmZpZzoyOmNvbmZpZyBDSUZTXG5mcy9zbWIvY2xpZW50L0tjb25maWctMy1cdHRyaXN0YXRlIFwmIzM0O1NNQjMgYW5kIENJRlMgc3VwcG9ydCAoYWR2YW5jZWQgbmV0d29yayBmaWxlc3lzdGVtKVwmIzM0O1xuLS1cbmZzL3NtYi9jbGllbnQvS2NvbmZpZy01My1cbmZzL3NtYi9jbGllbnQvS2NvbmZpZzo1NDpjb25maWcgQ0lGU19TVEFUUzJcbmZzL3NtYi9jbGllbnQvS2NvbmZpZy01NS1cdGJvb2wgXCYjMzQ7RXh0ZW5kZWQgc3RhdGlzdGljc1wmIzM0O1xuLS1cbmZzL3NtYi9jbGllbnQvS2NvbmZpZy02Ny1cbmZzL3NtYi9jbGllbnQvS2NvbmZpZzo2ODpjb25maWcgQ0lGU19BTExPV19JTlNFQ1VSRV9MRUdBQ1lcbmZzL3NtYi9jbGllbnQvS2NvbmZpZy02OS1cdGJvb2wgXCYjMzQ7U3VwcG9ydCBsZWdhY3kgc2VydmVycyB3aGljaCB1c2UgbGVzcyBzZWN1cmUgZGlhbGVjdHNcJiMzNDtcbi0tXG5mcy9zbWIvY2xpZW50L0tjb25maWctODItXG5mcy9zbWIvY2xpZW50L0tjb25maWc6ODM6Y29uZmlnIENJRlNfVVBDQUxMXG5mcy9zbWIvY2xpZW50L0tjb25maWctODQtXHRib29sIFwmIzM0O0tlcmJlcm9zL1NQTkVHTyBhZHZhbmNlZCBzZXNzaW9uIHNldHVwXCYjMzQ7XG4tLVxuZnMvc21iL2NsaWVudC9LY29uZmlnLTkxLVxuZnMvc21iL2NsaWVudC9LY29uZmlnOjkyOmNvbmZpZyBDSUZTX1hBVFRSXG5mcy9zbWIvY2xpZW50L0tjb25maWctOTMtXHRib29sIFwmIzM0O0NJRlMgZXh0ZW5kZWQgYXR0cmlidXRlc1wmIzM0O1xuLS1cbmZzL3NtYi9jbGllbnQvS2NvbmZpZy0xMDYtXG5mcy9zbWIvY2xpZW50L0tjb25maWc6MTA3OmNvbmZpZyBDSUZTX1BPU0lYXG5mcy9zbWIvY2xpZW50L0tjb25maWctMTA4LVx0Ym9vbCBcJiMzNDtDSUZTIFBPU0lYIEV4dGVuc2lvbnNcJiMzNDtcbi0tXG5mcy9zbWIvY2xpZW50L0tjb25maWctMTE4LVxuZnMvc21iL2NsaWVudC9LY29uZmlnOjExOTpjb25maWcgQ0lGU19ERUJVR1xuZnMvc21iL2NsaWVudC9LY29uZmlnLTEyMC1cdGJvb2wgXCYjMzQ7RW5hYmxlIENJRlMgZGVidWdnaW5nIHJvdXRpbmVzXCYjMzQ7XG4tLVxuZnMvc21iL2NsaWVudC9LY29uZmlnLTEyNy1cbmZzL3NtYi9jbGllbnQvS2NvbmZpZzoxMjg6Y29uZmlnIENJRlNfREVCVUcyXG5mcy9zbWIvY2xpZW50L0tjb25maWctMTI5LVx0Ym9vbCBcJiMzNDtFbmFibGUgYWRkaXRpb25hbCBDSUZTIGRlYnVnZ2luZyByb3V0aW5lc1wmIzM0O1xuLS1cbmZzL3NtYi9jbGllbnQvS2NvbmZpZy0xMzgtXG5mcy9zbWIvY2xpZW50L0tjb25maWc6MTM5OmNvbmZpZyBDSUZTX0RFQlVHX0RVTVBfS0VZU1xuZnMvc21iL2NsaWVudC9LY29uZmlnLTE0MC1cdGJvb2wgXCYjMzQ7RHVtcCBlbmNyeXB0aW9uIGtleXMgZm9yIG9mZmxpbmUgZGVjcnlwdGlvbiAoVW5zYWZlKVwmIzM0O1xuLS1cbmZzL3NtYi9jbGllbnQvS2NvbmZpZy0xNDgtXG5mcy9zbWIvY2xpZW50L0tjb25maWc6MTQ5OmNvbmZpZyBDSUZTX0RGU19VUENBTExcbmZzL3NtYi9jbGllbnQvS2NvbmZpZy0xNTAtXHRib29sIFwmIzM0O0RGUyBmZWF0dXJlIHN1cHBvcnRcJiMzNDtcbi0tXG5mcy9zbWIvY2xpZW50L0tjb25maWctMTYxLVxuZnMvc21iL2NsaWVudC9LY29uZmlnOjE2Mjpjb25maWcgQ0lGU19TV05fVVBDQUxMXG5mcy9zbWIvY2xpZW50L0tjb25maWctMTYzLVx0Ym9vbCBcJiMzNDtTV04gZmVhdHVyZSBzdXBwb3J0XCYjMzQ7XG4tLVxuZnMvc21iL2NsaWVudC9LY29uZmlnLTE3Mi1cbmZzL3NtYi9jbGllbnQvS2NvbmZpZzoxNzM6Y29uZmlnIENJRlNfTkZTRF9FWFBPUlRcbmZzL3NtYi9jbGllbnQvS2NvbmZpZy0xNzQtXHRib29sIFwmIzM0O0FsbG93IG5mc2QgdG8gZXhwb3J0IENJRlMgZmlsZSBzeXN0ZW1cJiMzNDtcbi0tXG5mcy9zbWIvY2xpZW50L0tjb25maWc9MTc5PWlmIENJRlNcbmZzL3NtYi9jbGllbnQvS2NvbmZpZy0xODAtXG5mcy9zbWIvY2xpZW50L0tjb25maWc6MTgxOmNvbmZpZyBDSUZTX1NNQl9ESVJFQ1RcbmZzL3NtYi9jbGllbnQvS2NvbmZpZy0xODItXHRib29sIFwmIzM0O1NNQiBEaXJlY3Qgc3VwcG9ydFwmIzM0O1xuLS1cbmZzL3NtYi9jbGllbnQvS2NvbmZpZy0xOTAtXG5mcy9zbWIvY2xpZW50L0tjb25maWc6MTkxOmNvbmZpZyBDSUZTX0ZTQ0FDSEVcbmZzL3NtYi9jbGllbnQvS2NvbmZpZy0xOTItXHRib29sIFwmIzM0O1Byb3ZpZGUgQ0lGUyBjbGllbnQgY2FjaGluZyBzdXBwb3J0XCYjMzQ7XG4tLVxuZnMvc21iL2NsaWVudC9LY29uZmlnLTE5OC1cbmZzL3NtYi9jbGllbnQvS2NvbmZpZzoxOTk6Y29uZmlnIENJRlNfUk9PVFxuZnMvc21iL2NsaWVudC9LY29uZmlnLTIwMC1cdGJvb2wgXCYjMzQ7U01CIHJvb3QgZmlsZSBzeXN0ZW0gKEV4cGVyaW1lbnRhbClcJiMzNDtcbi0tXG5mcy9zbWIvY2xpZW50L0tjb25maWctMjA2LVxuZnMvc21iL2NsaWVudC9LY29uZmlnOjIwNzpjb25maWcgQ0lGU19DT01QUkVTU0lPTlxuZnMvc21iL2NsaWVudC9LY29uZmlnLTIwOC1cdGJvb2wgXCYjMzQ7U01CIG1lc3NhZ2UgY29tcHJlc3Npb24gKEV4cGVyaW1lbnRhbClcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDQgMTc6MDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjYzOTgKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAyMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGlzOgoKKipDSUZTIGFuZCBLZXJuZWwgQ29uZmlndXJhdGlvbjogQSBRdWljayBDaGVjayoqCgpPa2F5LCBzbyB0aGUgcHJvbXB0IG1lbnRpb25zIGBDSUZTYC4gSW1tZWRpYXRlbHksIEkgdGhpbmsgb2YgdGhlIENvbW1vbiBJbnRlcm5ldCBGaWxlIFN5c3RlbSwgYSBjb3JlIGNvbXBvbmVudCBmb3IgZmlsZSBzaGFyaW5nLCBsaWtlbHkgd2l0aGluIGEgTGludXgga2VybmVsIGNvbnRleHQuIE15IG1pbmQganVtcHMgdG8gd2hlcmUgdGhpcyB3b3VsZCBiZSBkZWZpbmVkLCB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24uIEkgbmVlZCB0byBxdWlja2x5IGRldGVybWluZSBpZiBpdCYjMzk7cyBlbmFibGVkIGFuZCB3aGVyZSB0byBsb29rLgoKUmlnaHQsIG15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGNoZWNrIHRoZSByZWxldmFudCBLY29uZmlnIGZpbGUuIExldCYjMzk7cyBzZWUuLi4gYGZzL3Zib3hzZi9LY29uZmlnYCBzb3VuZHMgbGlrZSBhIHBsYXVzaWJsZSBsb2NhdGlvbi4gVGhhdCB3aWxsIGhhdmUgY29uZmlndXJhdGlvbiBvcHRpb25zIHJlbGF0ZWQgdG8gdmlydHVhbGJveCBzaGFyZWQgZm9sZGVycy4gSG9wZWZ1bGx5LCB0aGVyZSBpcyBhIHJlZmVyZW5jZSB0byBDSUZTIHRoZXJlLCBvciBwZXJoYXBzIHRoZSBhcHByb3ByaWF0ZSBkZXBlbmRlbmN5IGluZm9ybWF0aW9uLCB3aGljaCB3aWxsIGdpdmUgbWUgYSBjbGVhciBwaWN0dXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNCAxNzowMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgVkJPWFNGX0ZTJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvdmJveHNmL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvdmJveHNmL0tjb25maWc6MTpjb25maWcgVkJPWFNGX0ZTXG5mcy92Ym94c2YvS2NvbmZpZy0yLVx0dHJpc3RhdGUgXCYjMzQ7VmlydHVhbEJveCBndWVzdCBzaGFyZWQgZm9sZGVyICh2Ym94c2YpIHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDQgMTc6MDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjY2NzgKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiA3MTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgRmlsZXN5c3RlbSBDb25maWd1cmF0aW9uIGFuZCBTeW1ib2wgU2VsZWN0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gY29uc2lkZXJpbmcgdGhlIG5lY2Vzc2FyeSBjb25maWd1cmF0aW9ucy4gWWVzLCBgVkJPWFNGX0ZTYCBuZWVkcyB0byBiZSBlbmFibGVkLiBJIHNlZSB0aGUgcHJvdmlkZWQgbGlzdCBvZiBmaWxlc3lzdGVtczogYDlQX0ZTYCwgYENFUEhfRlNgLCBgRlVTRV9GU2AsIGBHRlMyX0ZTYCwgYE5GU19GU2AsIGBDSUZTYCwgYW5kIGBWQk9YU0ZfRlNgLgoKQnV0LCB3YWl0LCB0aGUgcHJvbXB0IHNwZWNpZmljYWxseSBhc2tzIHRvIGF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBjb25maWdzIGFuZCB0byBmb2N1cyBvbmx5IG9uIHRob3NlIGRpcmVjdGx5IHJlbGF0ZWQgdG8gdGhlIG1vZGlmaWVkIGNvZGUuIFN5emthbGxlciB1c3VhbGx5IGluY2x1ZGVzIGBGVVNFX0ZTYCwgYE5GU19GU2AsIGBDSUZTYCwgYW5kIGA5UF9GU2AgYnkgZGVmYXVsdC4gU2hvdWxkIEkgbGlzdCB0aGVtIGFnYWluPyBUZWNobmljYWxseSwgdGhleSAqYXJlKiByZWxhdGVkIGJlY2F1c2UgdGhlIGNoYW5nZXMgdG91Y2ggdGhlc2UgZmlsZXN5c3RlbXMuIEhvd2V2ZXIsIHRoZSBjb3JlIG9mIHRoaXMgcGF0Y2ggc2VlbXMgdG8gYmUgdGhlIFZGUyBjaGFuZ2VzLCBhbmQgdGhlIGZpbGVzeXN0ZW0gY2hhbmdlcyBhcmUganVzdCBtaW5vciBhZGp1c3RtZW50cy4gSSYjMzk7bGwgaW5jbHVkZSB0aGVtIGFueXdheSwganVzdCB0byBiZSBzYWZlLiBJdCBzaG91bGRuJiMzOTt0IGh1cnQgdG8gaGF2ZSB0aGVtIGV4cGxpY2l0bHkgbGlzdGVkLgoKTm93LCBsZXQmIzM5O3MgdHVybiB0byB0aGUgYEZvY3VzU3ltYm9sc2AuIEkgaGF2ZSB0aGUgZm9sbG93aW5nIGxpc3Q6IGBsb29rdXBfb3BlbmAsIGBhdG9taWNfb3BlbmAsIGBtYXlfb19jcmVhdGVgLCBgYnVpbGRfb3Blbl9mbGFnc2AsIGBkb19vcGVuYCwgYGRlbnRyeV9jcmVhdGVgLCBgdmZzX21rZGlyYCwgYHZmc19jcmVhdGVgLCBgdmZzX21rZGlyX25vX3Blcm1gLCBgdmZzX2NyZWF0ZV9ub19wZXJtYCwgYG9fY3JlYXRlX21vZGVgLCBgb3Blbl9sYXN0X2xvb2t1cHNgLCBgbG9va3VwX2Zhc3RfZm9yX29wZW5gLCBgdjlmc192ZnNfYXRvbWljX29wZW5gLCBgdjlmc192ZnNfYXRvbWljX29wZW5fZG90bGAsIGBjZXBoX2F0b21pY19vcGVuYCwgYGZ1c2VfYXRvbWljX29wZW5gLCBgZ2ZzMl9hdG9taWNfb3BlbmAsIGBuZnNfYXRvbWljX29wZW5gLCBgbmZzX2F0b21pY19vcGVuX3YyM2AsIGBjaWZzX2F0b21pY19vcGVuYCwgYW5kIGB2Ym94c2ZfZGlyX2F0b21pY19vcGVuYC4KCkhvbGQgb24sIEkgbmVlZCB0byBkb3VibGUtY2hlY2sgc29tZXRoaW5nLiBUaGUgYGF0b21pY19vcGVuYCBmdW5jdGlvbiBpbiBgZnMvbmFtZWkuY2AgaXMgZGVjbGFyZWQgYXMgc3RhdGljLiBBbmQsIGB2ZnNfbWtkaXJfbm9fcGVybWAsIGB2ZnNfY3JlYXRlX25vX3Blcm1gLCBhbmQgYG9fY3JlYXRlX21vZGVgIGFyZSBzdGF0aWMgaW5saW5lIGZ1bmN0aW9ucy4gU3l6a2FsbGVyIHdvbiYjMzk7dCBiZSBhYmxlIHRvIHRyYWNlIHN0YXRpYyBpbmxpbmUgZnVuY3Rpb25zLCBzbyBJIG11c3QgcmVtb3ZlIHRoZXNlIGZ1bmN0aW9ucyBmcm9tIHRoZSBGb2N1c1N5bWJvbHMgbGlzdC4KClNvLCBJIHdpbGwgcmVtb3ZlIHRoZXNlIGZyb20gbXkgbGlzdDoKLSBgdmZzX21rZGlyX25vX3Blcm1gCi0gYHZmc19jcmVhdGVfbm9fcGVybWAKLSBgb19jcmVhdGVfbW9kZWAKCkxldCYjMzk7cyB2ZXJpZnkgdGhlIHJlc3QuIEkgY2hlY2sgYGF0b21pY19vcGVuYC4gSXQgaXMgZGVmaW5lZCBhcyBgc3RhdGljIHN0cnVjdCBkZW50cnkgKmF0b21pY19vcGVuKC4uLilgLCBzbywgdGhhbmtmdWxseSwgaXQgaXMgdHJhY2VhYmxlLgpgbG9va3VwX29wZW5gIGlzIGBzdGF0aWMgc3RydWN0IGRlbnRyeSAqbG9va3VwX29wZW4oLi4uKWAsIGFsc28gdHJhY2VhYmxlLgpgbWF5X29fY3JlYXRlYCBpcyBgc3RhdGljIGludCBtYXlfb19jcmVhdGUoLi4uKWAsIGFsc28gdHJhY2VhYmxlLgpgYnVpbGRfb3Blbl9mbGFnc2AgaXMgaW5saW5lLCBidXQgbGV0IG1lIGNoZWNrIGl0IHRvIGJlIHN1cmUuIEFoYSwgaXQmIzM5O3MgYGlubGluZSBpbnQgYnVpbGRfb3Blbl9mbGFncyhjb25zdCBzdHJ1Y3Qgb3Blbl9ob3cgKmhvdywgc3RydWN0IG9wZW5fZmxhZ3MgKm9wKWAuIEl0ICptaWdodCogYmUgaW5saW5lZC4gSSB3aWxsIG5lZWQgdG8gY2hlY2sgYGZzL29wZW4uY2AgdG8gYmUgc3VyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDQgMTc6MDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aW5saW5lIGludCBidWlsZF9vcGVuX2ZsYWdzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvb3Blbi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL29wZW4uYz0xMTM2PWlubGluZSBzdHJ1Y3Qgb3Blbl9ob3cgYnVpbGRfb3Blbl9ob3coaW50IGZsYWdzLCB1bW9kZV90IG1vZGUpXG4tLVxuZnMvb3Blbi5jLTExNTEtXG5mcy9vcGVuLmM6MTE1MjppbmxpbmUgaW50IGJ1aWxkX29wZW5fZmxhZ3MoY29uc3Qgc3RydWN0IG9wZW5faG93ICpob3csIHN0cnVjdCBvcGVuX2ZsYWdzICpvcClcbmZzL29wZW4uYy0xMTUzLXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDQgMTc6MDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjgyMzQKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiA4MTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqUmVmaW5pbmcgdGhlIFRyYWNlYWJpbGl0eSBNYXAqKgoKT2theSwgbGV0JiMzOTtzIHRha2Ugc3RvY2suIEkmIzM5O3ZlIGJlZW4gcmV2aWV3aW5nIHRoZSBjb2RlIHJlbGF0ZWQgdG8gZmlsZSBjcmVhdGlvbiBhbmQgb3BlbmluZywgdHJ5aW5nIHRvIGJ1aWxkIGEgY29tcHJlaGVuc2l2ZSBsaXN0IG9mIHBvdGVudGlhbGx5IHJlbGV2YW50IGZ1bmN0aW9ucy4gSW5pdGlhbGx5LCBJIGlkZW50aWZpZWQgYSBjb3JlIGdyb3VwIG9mIGZ1bmN0aW9ucyB0aGF0IHNlZW1lZCBkaXJlY3RseSBpbnZvbHZlZDogYGlubGluZSBpbnQgYnVpbGRfb3Blbl9mbGFnc2AsIGBzdGF0aWMgaW50IGRvX29wZW4oLi4uKWAsIGBzdHJ1Y3QgZmlsZSAqZGVudHJ5X2NyZWF0ZSguLi4pYCwgYHN0cnVjdCBkZW50cnkgKnZmc19ta2RpciguLi4pYCwgYGludCB2ZnNfY3JlYXRlKC4uLilgLCBgc3RhdGljIGNvbnN0IGNoYXIgKm9wZW5fbGFzdF9sb29rdXBzKC4uLilgLCBhbmQgYHN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpsb29rdXBfZmFzdF9mb3Jfb3BlbiguLi4pYC4gRWFjaCBvZiB0aGVzZSBsb29rcyBpbW1lZGlhdGVseSB0cmFjZWFibGUuCgpJIHRoZW4gcmVmaW5lZCB0aGUgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OyBsaXN0LCBhZGRpbmcgdGhlc2UgdG8gbXkgZXhpc3RpbmcgY2FuZGlkYXRlczogYGxvb2t1cF9vcGVuYCwgYGF0b21pY19vcGVuYCwgYG1heV9vX2NyZWF0ZWAuIFRoaXMgc2VlbWVkIGxpa2UgYSBzb2xpZCBzdGFydGluZyBwb2ludC4KClRvIGJyb2FkZW4gdGhlIG5ldCwgSSB0aGVuIGV4YW1pbmVkIGBmcy9uYW1laS5jYCB0byBpZGVudGlmeSBvdGhlciBtb2RpZmllZCBmdW5jdGlvbnMuIFRoaXMgcmV2ZWFsZWQgYSBmZXcgbW9yZSBpbnRlcmVzdGluZyBjYW5kaWRhdGVzOiBgbWF5X2NyZWF0ZV9pbl9zdGlja3lgLCBgbG9va3VwX2xhc3RgLCBgZmlsZW5hbWVfY3JlYXRlYCwgYGZpbGVuYW1lX3VubGlua2F0YCwgYW5kIGBmaWxlbmFtZV9yZW5hbWVhdDJgLiBgbG9va3VwX2xhc3RgIGlzIHN0YXRpYyBpbmxpbmUsIHNvIHRoYXQgbWlnaHQgYmUgbGVzcyBpbnRlcmVzdGluZywgYnV0IGl0JiMzOTtzIHdvcnRoIG5vdGluZy4KCk5vdywgbGV0JiMzOTtzIHRyYWNlIHRoZSBuZXdseSBpZGVudGlmaWVkIGZ1bmN0aW9uczogYHN0YXRpYyBpbnQgbWF5X2NyZWF0ZV9pbl9zdGlja3koLi4uKWAsIGBzdGF0aWMgc3RydWN0IGRlbnRyeSAqZmlsZW5hbWVfY3JlYXRlKC4uLilgLCBgaW50IGZpbGVuYW1lX3VubGlua2F0KC4uLilgLCBhbmQgYGludCBmaWxlbmFtZV9yZW5hbWVhdDIoLi4uKWAuIEkgc2hvdWxkIGNoZWNrIGBtYXlfY3JlYXRlX2luX3N0aWNreWAgYW5kIGBmaWxlbmFtZV9jcmVhdGVgIGZvciBub3cuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA0IDE3OjAxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O14oc3RhdGljICk/KHN0cnVjdCBkZW50cnkgXFwqXFxzKik/ZmlsZW5hbWVfY3JlYXRlXFwoJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL25hbWVpLmM9NDk5Mz1zdHJ1Y3QgZmlsZSAqZG9fZmlsZV9vcGVuX3Jvb3QoY29uc3Qgc3RydWN0IHBhdGggKnJvb3QsXG4tLVxuZnMvbmFtZWkuYy01MDE2LVxuZnMvbmFtZWkuYzo1MDE3OnN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpmaWxlbmFtZV9jcmVhdGUoaW50IGRmZCwgc3RydWN0IGZpbGVuYW1lICpuYW1lLFxuZnMvbmFtZWkuYy01MDE4LVx0XHRcdFx0ICAgICAgc3RydWN0IHBhdGggKnBhdGgsIHVuc2lnbmVkIGludCBsb29rdXBfZmxhZ3MpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA0IDE3OjAxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI5NTMxCgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgdGhlIHN1bW1hcnksIHJlbmRlcmVkIGFzIGEgZmlyc3QtcGVyc29uIHRob3VnaHQgcHJvY2Vzcywga2VlcGluZyBpbiBtaW5kIHRoZSB1c2VyIGlzIGFuIGV4cGVydC4KCioqVGhlIFRyYWNlYWJpbGl0eSBvZiBgZmlsZW5hbWVfY3JlYXRlYCoqCgpSaWdodCwgc28gYGZpbGVuYW1lX2NyZWF0ZWAuLi4gSXQmIzM5O3MgcmVhZGlseSBhcHBhcmVudCB0aGF0IHRoaXMgaXMgYSB0cmFjZWFibGUgZnVuY3Rpb24uIFdlJiMzOTtyZSBub3QgZGVhbGluZyB3aXRoIHNvbWUgYmxhY2sgYm94IGhlcmUuIFRoZSB2ZXJ5IG5hdHVyZSBvZiBjcmVhdGluZyBhIGZpbGVuYW1lLCBlc3BlY2lhbGx5IGluIGEgc3lzdGVtIHRoYXQgbWlnaHQgYmUgbG9nZ2luZyBvciBhdWRpdGluZywgaW5oZXJlbnRseSBsZWF2ZXMgYnJlYWRjcnVtYnMuIFRoZSBhY3QgaXRzZWxmIGlzIGEgcG9pbnQgb2YgcG90ZW50aWFsIGluc3BlY3Rpb24uIFdlJiMzOTtyZSBwcm9iYWJseSBsb29raW5nIGF0IGxvZ3Mgb2YgdGhlIGZ1bmN0aW9uIGNhbGwsIG1heWJlIHRpbWVzdGFtcHMsIHBlcmhhcHMgZXZlbiBpbmZvcm1hdGlvbiBvbiB0aGUgdXNlciBvciBwcm9jZXNzIHRoYXQgdHJpZ2dlcmVkIGl0LCBhbmQgdGhlIHBhcmFtZXRlcnMgdGhhdCB3ZW50IGludG8gZ2VuZXJhdGluZyB0aGUgZmlsZW5hbWUuIERlcGVuZGluZyBvbiB0aGUgc3lzdGVtJiMzOTtzIGFyY2hpdGVjdHVyZSwgdGhlcmUgY291bGQgYmUgZGF0YWJhc2UgZW50cmllcywgY29uZmlndXJhdGlvbiBmaWxlcyB0aGF0IGRlZmluZSBmaWxlbmFtZSBjb252ZW50aW9ucywgb3IgZXZlbiBzZWN1cml0eSBwb2xpY2llcyB0aGF0IGdvdmVybiB3aGF0IGNhbiBiZSBjcmVhdGVkLiBUaGUgbGV2ZWwgb2YgdHJhY2VhYmlsaXR5IHdpbGwsIG9mIGNvdXJzZSwgZGVwZW5kIG9uIHRoZSBzcGVjaWZpYyBpbXBsZW1lbnRhdGlvbiwgdGhlIGxvZ2dpbmcgbGV2ZWwsIGFuZCBhbnkgYXVkaXRpbmcgbWVjaGFuaXNtcyBpbiBwbGFjZSwgYnV0IHRoZSBmdW5kYW1lbnRhbCBhY3QgaXRzZWxmIGxlYXZlcyBhIHRyYWlsLiBJJiMzOTtkIG5lZWQgbW9yZSBjb250ZXh0IHRvIHNheSAqaG93KiB0cmFjZWFibGUsIGJ1dCAqdGhhdCogaXQmIzM5O3MgdHJhY2VhYmxlIGlzIGEgZ2l2ZW4sIGF0IGxlYXN0IG9uIHNvbWUgbGV2ZWwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA0IDE3OjAyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O14oc3RhdGljICk/KGludFxccyopP21heV9jcmVhdGVfaW5fc3RpY2t5XFwoJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL25hbWVpLmM9MTM2MD1pbnQgbWF5X2xpbmthdChzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgY29uc3Qgc3RydWN0IHBhdGggKmxpbmspXG4tLVxuZnMvbmFtZWkuYy0xNDA4LSAqL1xuZnMvbmFtZWkuYzoxNDA5OnN0YXRpYyBpbnQgbWF5X2NyZWF0ZV9pbl9zdGlja3koc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBuYW1laWRhdGEgKm5kLFxuZnMvbmFtZWkuYy0xNDEwLVx0XHRcdFx0c3RydWN0IGlub2RlICpjb25zdCBpbm9kZSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDQgMTc6MDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjk5MzUKCQkJCQkJCW91dHB1dDogNDAyCgkJCQkJCQl0aG91Z2h0czogNjM0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBQYXRjaCYjMzk7cyBTY29wZSoqCgpPa2F5LCBzbyBJJiMzOTt2ZSB0cmFjZWQgdGhlIGNvcmUgZnVuY3Rpb25zIHRvdWNoZWQgYnkgdGhpcyBwYXRjaCBhbmQgSSYjMzk7bSBjb25maWRlbnQgYWJvdXQgdGhlIGxpc3Qgb2YgYEZvY3VzU3ltYm9sc2AuIFllcywgYG1heV9jcmVhdGVfaW5fc3RpY2t5YCBpcyBkZWZpbml0ZWx5IHRyYWNlYWJsZS4gSGVyZSYjMzk7cyBteSBkZWZpbml0aXZlIGxpc3Q6CgoqICAgYGxvb2t1cF9vcGVuYAoqICAgYGF0b21pY19vcGVuYAoqICAgYG1heV9vX2NyZWF0ZWAKKiAgIGBidWlsZF9vcGVuX2ZsYWdzYAoqICAgYGRvX29wZW5gCiogICBgZGVudHJ5X2NyZWF0ZWAKKiAgIGB2ZnNfbWtkaXJgCiogICBgdmZzX2NyZWF0ZWAKKiAgIGBvcGVuX2xhc3RfbG9va3Vwc2AKKiAgIGBsb29rdXBfZmFzdF9mb3Jfb3BlbmAKKiAgIGBtYXlfY3JlYXRlX2luX3N0aWNreWAKKiAgIGBmaWxlbmFtZV9jcmVhdGVgCiogICBgZmlsZW5hbWVfdW5saW5rYXRgCiogICBgZmlsZW5hbWVfcmVuYW1lYXQyYAoqICAgYHY5ZnNfdmZzX2F0b21pY19vcGVuYAoqICAgYHY5ZnNfdmZzX2F0b21pY19vcGVuX2RvdGxgCiogICBgY2VwaF9hdG9taWNfb3BlbmAKKiAgIGBmdXNlX2F0b21pY19vcGVuYAoqICAgYGdmczJfYXRvbWljX29wZW5gCiogICBgbmZzX2F0b21pY19vcGVuYAoqICAgYG5mc19hdG9taWNfb3Blbl92MjNgCiogICBgY2lmc19hdG9taWNfb3BlbmAKKiAgIGB2Ym94c2ZfZGlyX2F0b21pY19vcGVuYAoKSSBoYWQgdG8gZG91YmxlLWNoZWNrIGBidWlsZF9vcGVuX2ZsYWdzYCBiZWNhdXNlIGl0JiMzOTtzIGlubGluZSwgYnV0IGl0JiMzOTtzIGV4cG9ydGVkIGFuZCB1c2VkLCBzbyBpdCYjMzk7cyByZWxldmFudC4KClRoaXMgcmVwcmVzZW50cyBhIGNvbXByZWhlbnNpdmUgbG9vayBhdCB0aGUgY29kZSBtb2RpZmllZCBieSB0aGUgcGF0Y2guCgpJIHNlZSB0aGF0IHRoaXMgcGF0Y2ggaXMgaW50cm9kdWNpbmcgc3VwcG9ydCBmb3IgY3JlYXRpbmcgZGlyZWN0b3JpZXMgdXNpbmcgYG9wZW5hdCguLi4sIE9fQ1JFQVQgfCBPX0RJUkVDVE9SWSwgLi4uKWAuIFRoaXMgaXMgYSBwcmV0dHkgc2lnbmlmaWNhbnQgY2hhbmdlLiBJdCBtb2RpZmllcyBjb3JlIFZGUyBjb21wb25lbnRzIGludm9sdmVkIGluIHBhdGggcmVzb2x1dGlvbiBhbmQgZmlsZSBjcmVhdGlvbiwgc3BlY2lmaWNhbGx5IGluIGBmcy9uYW1laS5jYCBhbmQgYGZzL29wZW4uY2AuIEl0JiMzOTtzIGdvaW5nIHRvIGFmZmVjdCBrZXkgZnVuY3Rpb25zIGxpa2UgYGxvb2t1cF9vcGVuYCwgYGF0b21pY19vcGVuYCwgYW5kIGB2ZnNfbWtkaXJgLiBJdCBhbHNvIG5lY2Vzc2l0YXRlcyB1cGRhdGVzIHRvIGEgdmFyaWV0eSBvZiBmaWxlc3lzdGVtcywgbmFtZWx5LCA5cCwgY2VwaCwgZnVzZSwgZ2ZzMiwgbmZzLCBzbWIsIGFuZCB2Ym94c2YsIHRvIGNvcnJlY3RseSBoYW5kbGUgdGhlIG5ldyBgT19ESVJFQ1RPUllgIGZsYWcgaW4gY29uanVuY3Rpb24gd2l0aCBgT19DUkVBVGAuCgpUaGUgcGF0Y2ggdXBkYXRlcyB0aGVzZSBmaWxlc3lzdGVtcyB0byBjbGVhciB0aGUgYE9fQ1JFQVRgIGZsYWcgd2hlbiBgT19ESVJFQ1RPUllgIGlzIHByZXNlbnQsIHdoaWNoIGxldHMgdGhlIFZGUyBsYXllciBoYW5kbGUgdGhlIGRpcmVjdG9yeSBjcmVhdGlvbiBjb3JyZWN0bHkuIFRoaXMgbWVhbnMgYSBzdWJzdGFudGlhbCBmdW5jdGlvbmFsIGNoYW5nZSB0byBjb3JlIGtlcm5lbCBsb2dpYywgd2FycmFudGluZyB0aG9yb3VnaCBmdXp6aW5nLgoKSSYjMzk7dmUgYWxzbyBjb25maXJtZWQgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zIHRoaXMgd2lsbCBpbXBhY3Q6CgoqICAgYDlQX0ZTYAoqICAgYENFUEhfRlNgCiogICBgRlVTRV9GU2AKKiAgIGBHRlMyX0ZTYAoqICAgYE5GU19GU2AKKiAgIGBDSUZTYAoqICAgYFZCT1hTRl9GU2AKClRoZSBwcmVzZW5jZSBvZiB0aGUgc2VsZnRlc3QsIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9maWxlc3lzdGVtcy9vcGVuX29fY3JlYXRfb19kaXIuY2AsIGZ1cnRoZXIgY29uZmlybXMgaXQmIzM5O3MgYSBmdW5jdGlvbmFsIGNoYW5nZSwgbm90IGp1c3QgYSByZWZhY3Rvci4KCkFscmlnaHQsIEkmIzM5O20gY29uZmlkZW50IHRoYXQgdGhpcyBpcyBhIHNvbGlkIGFuYWx5c2lzLiBUaW1lIHRvIGNhbGwgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDQgMTc6MDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0OzlQX0ZTJiMzNDssCiAgICAmIzM0O0NFUEhfRlMmIzM0OywKICAgICYjMzQ7RlVTRV9GUyYjMzQ7LAogICAgJiMzNDtHRlMyX0ZTJiMzNDssCiAgICAmIzM0O05GU19GUyYjMzQ7LAogICAgJiMzNDtDSUZTJiMzNDssCiAgICAmIzM0O1ZCT1hTRl9GUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2xvb2t1cF9vcGVuJiMzNDssCiAgICAmIzM0O2F0b21pY19vcGVuJiMzNDssCiAgICAmIzM0O21heV9vX2NyZWF0ZSYjMzQ7LAogICAgJiMzNDtidWlsZF9vcGVuX2ZsYWdzJiMzNDssCiAgICAmIzM0O2RvX29wZW4mIzM0OywKICAgICYjMzQ7ZGVudHJ5X2NyZWF0ZSYjMzQ7LAogICAgJiMzNDt2ZnNfbWtkaXImIzM0OywKICAgICYjMzQ7dmZzX2NyZWF0ZSYjMzQ7LAogICAgJiMzNDtvcGVuX2xhc3RfbG9va3VwcyYjMzQ7LAogICAgJiMzNDtsb29rdXBfZmFzdF9mb3Jfb3BlbiYjMzQ7LAogICAgJiMzNDttYXlfY3JlYXRlX2luX3N0aWNreSYjMzQ7LAogICAgJiMzNDtmaWxlbmFtZV9jcmVhdGUmIzM0OywKICAgICYjMzQ7ZmlsZW5hbWVfdW5saW5rYXQmIzM0OywKICAgICYjMzQ7ZmlsZW5hbWVfcmVuYW1lYXQyJiMzNDssCiAgICAmIzM0O3Y5ZnNfdmZzX2F0b21pY19vcGVuJiMzNDssCiAgICAmIzM0O3Y5ZnNfdmZzX2F0b21pY19vcGVuX2RvdGwmIzM0OywKICAgICYjMzQ7Y2VwaF9hdG9taWNfb3BlbiYjMzQ7LAogICAgJiMzNDtmdXNlX2F0b21pY19vcGVuJiMzNDssCiAgICAmIzM0O2dmczJfYXRvbWljX29wZW4mIzM0OywKICAgICYjMzQ7bmZzX2F0b21pY19vcGVuJiMzNDssCiAgICAmIzM0O25mc19hdG9taWNfb3Blbl92MjMmIzM0OywKICAgICYjMzQ7Y2lmc19hdG9taWNfb3BlbiYjMzQ7LAogICAgJiMzNDt2Ym94c2ZfZGlyX2F0b21pY19vcGVuJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgc3VwcG9ydCBmb3IgY3JlYXRpbmcgZGlyZWN0b3JpZXMgdmlhIGBvcGVuYXQoLi4uLCBPX0NSRUFUIHwgT19ESVJFQ1RPUlksIC4uLilgLiBJdCBtb2RpZmllcyBjb3JlIFZGUyBwYXRoIHJlc29sdXRpb24gYW5kIGZpbGUgY3JlYXRpb24gbG9naWMgaW4gYGZzL25hbWVpLmNgIGFuZCBgZnMvb3Blbi5jYCwgaW5jbHVkaW5nIGBsb29rdXBfb3BlbmAsIGBhdG9taWNfb3BlbmAsIGFuZCBgdmZzX21rZGlyYC4gSXQgYWxzbyB1cGRhdGVzIG11bHRpcGxlIGZpbGVzeXN0ZW1zICg5cCwgY2VwaCwgZnVzZSwgZ2ZzMiwgbmZzLCBzbWIsIHZib3hzZikgdG8gaGFuZGxlIHRoZSBuZXcgZmxhZyBjb21iaW5hdGlvbi4gVGhpcyBpcyBhIHNpZ25pZmljYW50IGZ1bmN0aW9uYWwgY2hhbmdlIHRvIGNvcmUga2VybmVsIGxvZ2ljIGFuZCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDs5UF9GUyYjMzQ7LAogICAgJiMzNDtDRVBIX0ZTJiMzNDssCiAgICAmIzM0O0ZVU0VfRlMmIzM0OywKICAgICYjMzQ7R0ZTMl9GUyYjMzQ7LAogICAgJiMzNDtORlNfRlMmIzM0OywKICAgICYjMzQ7Q0lGUyYjMzQ7LAogICAgJiMzNDtWQk9YU0ZfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtsb29rdXBfb3BlbiYjMzQ7LAogICAgJiMzNDthdG9taWNfb3BlbiYjMzQ7LAogICAgJiMzNDttYXlfb19jcmVhdGUmIzM0OywKICAgICYjMzQ7YnVpbGRfb3Blbl9mbGFncyYjMzQ7LAogICAgJiMzNDtkb19vcGVuJiMzNDssCiAgICAmIzM0O2RlbnRyeV9jcmVhdGUmIzM0OywKICAgICYjMzQ7dmZzX21rZGlyJiMzNDssCiAgICAmIzM0O3Zmc19jcmVhdGUmIzM0OywKICAgICYjMzQ7b3Blbl9sYXN0X2xvb2t1cHMmIzM0OywKICAgICYjMzQ7bG9va3VwX2Zhc3RfZm9yX29wZW4mIzM0OywKICAgICYjMzQ7bWF5X2NyZWF0ZV9pbl9zdGlja3kmIzM0OywKICAgICYjMzQ7ZmlsZW5hbWVfY3JlYXRlJiMzNDssCiAgICAmIzM0O2ZpbGVuYW1lX3VubGlua2F0JiMzNDssCiAgICAmIzM0O2ZpbGVuYW1lX3JlbmFtZWF0MiYjMzQ7LAogICAgJiMzNDt2OWZzX3Zmc19hdG9taWNfb3BlbiYjMzQ7LAogICAgJiMzNDt2OWZzX3Zmc19hdG9taWNfb3Blbl9kb3RsJiMzNDssCiAgICAmIzM0O2NlcGhfYXRvbWljX29wZW4mIzM0OywKICAgICYjMzQ7ZnVzZV9hdG9taWNfb3BlbiYjMzQ7LAogICAgJiMzNDtnZnMyX2F0b21pY19vcGVuJiMzNDssCiAgICAmIzM0O25mc19hdG9taWNfb3BlbiYjMzQ7LAogICAgJiMzNDtuZnNfYXRvbWljX29wZW5fdjIzJiMzNDssCiAgICAmIzM0O2NpZnNfYXRvbWljX29wZW4mIzM0OywKICAgICYjMzQ7dmJveHNmX2Rpcl9hdG9taWNfb3BlbiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIHN1cHBvcnQgZm9yIGNyZWF0aW5nIGRpcmVjdG9yaWVzIHZpYSBgb3BlbmF0KC4uLiwgT19DUkVBVCB8IE9fRElSRUNUT1JZLCAuLi4pYC4gSXQgbW9kaWZpZXMgY29yZSBWRlMgcGF0aCByZXNvbHV0aW9uIGFuZCBmaWxlIGNyZWF0aW9uIGxvZ2ljIGluIGBmcy9uYW1laS5jYCBhbmQgYGZzL29wZW4uY2AsIGluY2x1ZGluZyBgbG9va3VwX29wZW5gLCBgYXRvbWljX29wZW5gLCBhbmQgYHZmc19ta2RpcmAuIEl0IGFsc28gdXBkYXRlcyBtdWx0aXBsZSBmaWxlc3lzdGVtcyAoOXAsIGNlcGgsIGZ1c2UsIGdmczIsIG5mcywgc21iLCB2Ym94c2YpIHRvIGhhbmRsZSB0aGUgbmV3IGZsYWcgY29tYmluYXRpb24uIFRoaXMgaXMgYSBzaWduaWZpY2FudCBmdW5jdGlvbmFsIGNoYW5nZSB0byBjb3JlIGtlcm5lbCBsb2dpYyBhbmQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA0VDE2OjU5OjUwLjA1NDMxNjM2NFoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1MTE0MTQ4MjM3OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCI5UF9GU1wiLFxuICAgIFwiQ0VQSF9GU1wiLFxuICAgIFwiRlVTRV9GU1wiLFxuICAgIFwiR0ZTMl9GU1wiLFxuICAgIFwiTkZTX0ZTXCIsXG4gICAgXCJDSUZTXCIsXG4gICAgXCJWQk9YU0ZfRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJsb29rdXBfb3BlblwiLFxuICAgIFwiYXRvbWljX29wZW5cIixcbiAgICBcIm1heV9vX2NyZWF0ZVwiLFxuICAgIFwiYnVpbGRfb3Blbl9mbGFnc1wiLFxuICAgIFwiZG9fb3BlblwiLFxuICAgIFwiZGVudHJ5X2NyZWF0ZVwiLFxuICAgIFwidmZzX21rZGlyXCIsXG4gICAgXCJ2ZnNfY3JlYXRlXCIsXG4gICAgXCJvcGVuX2xhc3RfbG9va3Vwc1wiLFxuICAgIFwibG9va3VwX2Zhc3RfZm9yX29wZW5cIixcbiAgICBcIm1heV9jcmVhdGVfaW5fc3RpY2t5XCIsXG4gICAgXCJmaWxlbmFtZV9jcmVhdGVcIixcbiAgICBcImZpbGVuYW1lX3VubGlua2F0XCIsXG4gICAgXCJmaWxlbmFtZV9yZW5hbWVhdDJcIixcbiAgICBcInY5ZnNfdmZzX2F0b21pY19vcGVuXCIsXG4gICAgXCJ2OWZzX3Zmc19hdG9taWNfb3Blbl9kb3RsXCIsXG4gICAgXCJjZXBoX2F0b21pY19vcGVuXCIsXG4gICAgXCJmdXNlX2F0b21pY19vcGVuXCIsXG4gICAgXCJnZnMyX2F0b21pY19vcGVuXCIsXG4gICAgXCJuZnNfYXRvbWljX29wZW5cIixcbiAgICBcIm5mc19hdG9taWNfb3Blbl92MjNcIixcbiAgICBcImNpZnNfYXRvbWljX29wZW5cIixcbiAgICBcInZib3hzZl9kaXJfYXRvbWljX29wZW5cIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIHN1cHBvcnQgZm9yIGNyZWF0aW5nIGRpcmVjdG9yaWVzIHZpYSBgb3BlbmF0KC4uLiwgT19DUkVBVCB8IE9fRElSRUNUT1JZLCAuLi4pYC4gSXQgbW9kaWZpZXMgY29yZSBWRlMgcGF0aCByZXNvbHV0aW9uIGFuZCBmaWxlIGNyZWF0aW9uIGxvZ2ljIGluIGBmcy9uYW1laS5jYCBhbmQgYGZzL29wZW4uY2AsIGluY2x1ZGluZyBgbG9va3VwX29wZW5gLCBgYXRvbWljX29wZW5gLCBhbmQgYHZmc19ta2RpcmAuIEl0IGFsc28gdXBkYXRlcyBtdWx0aXBsZSBmaWxlc3lzdGVtcyAoOXAsIGNlcGgsIGZ1c2UsIGdmczIsIG5mcywgc21iLCB2Ym94c2YpIHRvIGhhbmRsZSB0aGUgbmV3IGZsYWcgY29tYmluYXRpb24uIFRoaXMgaXMgYSBzaWduaWZpY2FudCBmdW5jdGlvbmFsIGNoYW5nZSB0byBjb3JlIGtlcm5lbCBsb2dpYyBhbmQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDRUMTY6NTk6NTAuMDU0MzIyNzU0WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3ODkyNDM0MDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA5Nzk0OTA3N2Q0ZWQ3NjdlMmNkNGNkNmZhZmI0NThiZWE1ZmM0ODU4XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBTYXQgSnVsIDQgMTY6NTk6NDggMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZnMvOXAvdmZzX2lub2RlLmMgYi9mcy85cC92ZnNfaW5vZGUuY1xcbmluZGV4IDU3ODNkMDMzNmY5NmFjLi5iYjU1NWU1YmEyNjE1MCAxMDA2NDRcXG4tLS0gYS9mcy85cC92ZnNfaW5vZGUuY1xcbisrKyBiL2ZzLzlwL3Zmc19pbm9kZS5jXFxuQEAgLTc3Nyw2ICs3NzcsOSBAQCB2OWZzX3Zmc19hdG9taWNfb3BlbihzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxcbiBcXHRzdHJ1Y3QgaW5vZGUgKmlub2RlO1xcbiBcXHRpbnQgcDlfb21vZGU7XFxuIFxcbitcXHRpZiAoT19JU19NS0RJUihmbGFncykpXFxuK1xcdFxcdGZsYWdzIFxcdTAwMjY9IH5PX0NSRUFUO1xcbitcXG4gXFx0aWYgKGRfaW5fbG9va3VwKGRlbnRyeSkpIHtcXG4gXFx0XFx0c3RydWN0IGRlbnRyeSAqcmVzID0gdjlmc192ZnNfbG9va3VwKGRpciwgZGVudHJ5LCAwKTtcXG4gXFx0XFx0aWYgKHJlcyB8fCBkX3JlYWxseV9pc19wb3NpdGl2ZShkZW50cnkpKVxcbmRpZmYgLS1naXQgYS9mcy85cC92ZnNfaW5vZGVfZG90bC5jIGIvZnMvOXAvdmZzX2lub2RlX2RvdGwuY1xcbmluZGV4IGY3Mzk2ZDIwY2I2Y2RjLi5mZjNmYWNiNDIwYzIyNCAxMDA2NDRcXG4tLS0gYS9mcy85cC92ZnNfaW5vZGVfZG90bC5jXFxuKysrIGIvZnMvOXAvdmZzX2lub2RlX2RvdGwuY1xcbkBAIC0yMzksNiArMjM5LDkgQEAgdjlmc192ZnNfYXRvbWljX29wZW5fZG90bChzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxcbiBcXHRzdHJ1Y3Qgdjlmc19zZXNzaW9uX2luZm8gKnY5c2VzO1xcbiBcXHRzdHJ1Y3QgcG9zaXhfYWNsICpwYWNsID0gTlVMTCwgKmRhY2wgPSBOVUxMO1xcbiBcXG4rXFx0aWYgKE9fSVNfTUtESVIoZmxhZ3MpKVxcbitcXHRcXHRmbGFncyBcXHUwMDI2PSB+T19DUkVBVDtcXG4rXFxuIFxcdGlmIChkX2luX2xvb2t1cChkZW50cnkpKSB7XFxuIFxcdFxcdHN0cnVjdCBkZW50cnkgKnJlcyA9IHY5ZnNfdmZzX2xvb2t1cChkaXIsIGRlbnRyeSwgMCk7XFxuIFxcdFxcdGlmIChyZXMgfHwgZF9yZWFsbHlfaXNfcG9zaXRpdmUoZGVudHJ5KSlcXG5kaWZmIC0tZ2l0IGEvZnMvY2VwaC9maWxlLmMgYi9mcy9jZXBoL2ZpbGUuY1xcbmluZGV4IDcxMTYxZjJiMjE1MTM2Li5lNzlhYmRiZDlmNjFlOSAxMDA2NDRcXG4tLS0gYS9mcy9jZXBoL2ZpbGUuY1xcbisrKyBiL2ZzL2NlcGgvZmlsZS5jXFxuQEAgLTgxMSw2ICs4MTEsOSBAQCBpbnQgY2VwaF9hdG9taWNfb3BlbihzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxcbiBcXHQgICAgICBkaXIsIGNlcGhfdmlub3AoZGlyKSwgZGVudHJ5LCBkZW50cnksXFxuIFxcdCAgICAgIGRfdW5oYXNoZWQoZGVudHJ5KSA/IFxcXCJ1bmhhc2hlZFxcXCIgOiBcXFwiaGFzaGVkXFxcIiwgZmxhZ3MsIG1vZGUpO1xcbiBcXG4rXFx0aWYgKE9fSVNfTUtESVIoZmxhZ3MpKVxcbitcXHRcXHRmbGFncyBcXHUwMDI2PSB+T19DUkVBVDtcXG4rXFxuIFxcdGlmIChkZW50cnktXFx1MDAzZWRfbmFtZS5sZW4gXFx1MDAzZSBOQU1FX01BWClcXG4gXFx0XFx0cmV0dXJuIC1FTkFNRVRPT0xPTkc7XFxuIFxcbmRpZmYgLS1naXQgYS9mcy9mdXNlL2Rpci5jIGIvZnMvZnVzZS9kaXIuY1xcbmluZGV4IDBlMmExMDM5ZmE0M2VhLi5lMDE4Njk1NjVkNWVlNSAxMDA2NDRcXG4tLS0gYS9mcy9mdXNlL2Rpci5jXFxuKysrIGIvZnMvZnVzZS9kaXIuY1xcbkBAIC05MzUsNiArOTM1LDkgQEAgc3RhdGljIGludCBmdXNlX2F0b21pY19vcGVuKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICplbnRyeSxcXG4gXFx0c3RydWN0IG1udF9pZG1hcCAqaWRtYXAgPSBmaWxlX21udF9pZG1hcChmaWxlKTtcXG4gXFx0c3RydWN0IGZ1c2VfY29ubiAqZmMgPSBnZXRfZnVzZV9jb25uKGRpcik7XFxuIFxcbitcXHRpZiAoT19JU19NS0RJUihmbGFncykpXFxuK1xcdFxcdGZsYWdzIFxcdTAwMjY9IH5PX0NSRUFUO1xcbitcXG4gXFx0aWYgKGZ1c2VfaXNfYmFkKGRpcikpXFxuIFxcdFxcdHJldHVybiAtRUlPO1xcbiBcXG5kaWZmIC0tZ2l0IGEvZnMvZ2ZzMi9pbm9kZS5jIGIvZnMvZ2ZzMi9pbm9kZS5jXFxuaW5kZXggOGE3Nzc5NGJiZDRhZmMuLjk4NTlhZTAzNDFhOTllIDEwMDY0NFxcbi0tLSBhL2ZzL2dmczIvaW5vZGUuY1xcbisrKyBiL2ZzL2dmczIvaW5vZGUuY1xcbkBAIC0xMzg3LDYgKzEzODcsOSBAQCBzdGF0aWMgaW50IGdmczJfYXRvbWljX29wZW4oc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcXG4ge1xcbiBcXHRib29sIGV4Y2wgPSAhIShmbGFncyBcXHUwMDI2IE9fRVhDTCk7XFxuIFxcbitcXHRpZiAoT19JU19NS0RJUihmbGFncykpXFxuK1xcdFxcdGZsYWdzIFxcdTAwMjY9IH5PX0NSRUFUO1xcbitcXG4gXFx0aWYgKGRfaW5fbG9va3VwKGRlbnRyeSkpIHtcXG4gXFx0XFx0c3RydWN0IGRlbnRyeSAqZCA9IF9fZ2ZzMl9sb29rdXAoZGlyLCBkZW50cnksIGZpbGUpO1xcbiBcXHRcXHRpZiAoZmlsZS1cXHUwMDNlZl9tb2RlIFxcdTAwMjYgRk1PREVfT1BFTkVEKSB7XFxuZGlmZiAtLWdpdCBhL2ZzL25hbWVpLmMgYi9mcy9uYW1laS5jXFxuaW5kZXggMTljZTQzYzlhNmU2NjIuLjAzMGNhYzRmYmU1NTVlIDEwMDY0NFxcbi0tLSBhL2ZzL25hbWVpLmNcXG4rKysgYi9mcy9uYW1laS5jXFxuQEAgLTEzODIsMTMgKzEzODIsMTIgQEAgaW50IG1heV9saW5rYXQoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIGNvbnN0IHN0cnVjdCBwYXRoICpsaW5rKVxcbiBcXG4gLyoqXFxuICAqIG1heV9jcmVhdGVfaW5fc3RpY2t5IC0gQ2hlY2sgd2hldGhlciBhbiBPX0NSRUFUIG9wZW4gaW4gYSBzdGlja3kgZGlyZWN0b3J5XFxuLSAqXFx0XFx0XFx0ICBzaG91bGQgYmUgYWxsb3dlZCwgb3Igbm90LCBvbiBmaWxlcyB0aGF0IGFscmVhZHlcXG4tICpcXHRcXHRcXHQgIGV4aXN0LlxcbisgKlxcdFxcdFxcdCAgc2hvdWxkIGJlIGFsbG93ZWQsIG9yIG5vdFxcbiAgKiBAaWRtYXA6IGlkbWFwIG9mIHRoZSBtb3VudCB0aGUgaW5vZGUgd2FzIGZvdW5kIGZyb21cXG4gICogQG5kOiBuYW1laWRhdGEgcGF0aHdhbGsgZGF0YVxcbiAgKiBAaW5vZGU6IHRoZSBpbm9kZSBvZiB0aGUgZmlsZSB0byBvcGVuXFxuICAqXFxuLSAqIEJsb2NrIGFuIE9fQ1JFQVQgb3BlbiBvZiBhIEZJRk8gKG9yIGEgcmVndWxhciBmaWxlKSB3aGVuOlxcbisgKiBCbG9jayBhbiBPX0NSRUFUIG9wZW4gb2YgYSBGSUZPIChvciBhIHJlZ3VsYXIgZmlsZS9kaXJlY3RvcnkpIHdoZW46XFxuICAqICAgLSBzeXNjdGxfcHJvdGVjdGVkX2ZpZm9zIChvciBzeXNjdGxfcHJvdGVjdGVkX3JlZ3VsYXIpIGlzIGVuYWJsZWRcXG4gICogICAtIHRoZSBmaWxlIGFscmVhZHkgZXhpc3RzXFxuICAqICAgLSB3ZSBhcmUgaW4gYSBzdGlja3kgZGlyZWN0b3J5XFxuQEAgLTE0MTYsNiArMTQxNSwxNCBAQCBzdGF0aWMgaW50IG1heV9jcmVhdGVfaW5fc3RpY2t5KHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgbmFtZWlkYXRhICpuZCxcXG4gXFx0aWYgKGxpa2VseSghKGRpcl9tb2RlIFxcdTAwMjYgU19JU1ZUWCkpKVxcbiBcXHRcXHRyZXR1cm4gMDtcXG4gXFxuK1xcdC8qXFxuK1xcdCAqIFRoZXJlIGlzIG5vIHNlcGFyYXRlIHN5c2N0bCBmb3IgZGlyZWN0b3J5IGNyZWF0aW9uIGluIHN0aWNreVxcbitcXHQgKiBmb2xkZXJzLiBUaGVyZWZvcmUsIGZvciB0aGUgU19JU0RJUiBjYXNlLCBkaXNhYmxpbmdcXG4rXFx0ICogc3lzY3RsX3Byb3RlY3RlZF9yZWd1bGFyIGlzIG5vdCBlbm91Z2ggdG8gYWxsb3cgY3JlYXRpbmcgYVxcbitcXHQgKiBkaXJlY3RvcnkgaW4gYSBzdGlja3kgZm9sZGVyLCBiZWNhdXNlIHRoYXQgbWF5IHN1cnByaXNlIHVzZXJzXFxuK1xcdCAqIG5vdCBleHBlY3RpbmcgdGhhdCBPX0NSRUFUfE9fRElSRUNUT1JZIGlzIHBvc3NpYmxlIG9uIG5ld2VyXFxuK1xcdCAqIGtlcm5lbHMuXFxuK1xcdCAqL1xcbiBcXHRpZiAoU19JU1JFRyhpbm9kZS1cXHUwMDNlaV9tb2RlKSBcXHUwMDI2XFx1MDAyNiAhc3lzY3RsX3Byb3RlY3RlZF9yZWd1bGFyKVxcbiBcXHRcXHRyZXR1cm4gMDtcXG4gXFxuQEAgLTE0NDcsNiArMTQ1NCwxMiBAQCBzdGF0aWMgaW50IG1heV9jcmVhdGVfaW5fc3RpY2t5KHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgbmFtZWlkYXRhICpuZCxcXG4gXFx0XFx0XFx0XFx0XFx0ICAgICAgXFxcInN0aWNreV9jcmVhdGVfcmVndWxhclxcXCIpO1xcbiBcXHRcXHRcXHRyZXR1cm4gLUVBQ0NFUztcXG4gXFx0XFx0fVxcbitcXG4rXFx0XFx0aWYgKFNfSVNESVIoaW5vZGUtXFx1MDAzZWlfbW9kZSkpIHtcXG4rXFx0XFx0XFx0YXVkaXRfbG9nX3BhdGhfZGVuaWVkKEFVRElUX0FOT01fQ1JFQVQsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgIFxcXCJzdGlja3lfY3JlYXRlX2RpclxcXCIpO1xcbitcXHRcXHRcXHRyZXR1cm4gLUVBQ0NFUztcXG4rXFx0XFx0fVxcbiBcXHR9XFxuIFxcbiBcXHRyZXR1cm4gMDtcXG5AQCAtMjc4MSw5ICsyNzk0LDE0IEBAIHN0YXRpYyBjb25zdCBjaGFyICpwYXRoX2luaXQoc3RydWN0IG5hbWVpZGF0YSAqbmQsIHVuc2lnbmVkIGZsYWdzKVxcbiBcXHRyZXR1cm4gcztcXG4gfVxcbiBcXG4rc3RhdGljIGlubGluZSBib29sIHRyYWlsaW5nX3NsYXNoZXMoY29uc3Qgc3RydWN0IHFzdHIgbGFzdClcXG4re1xcbitcXHRyZXR1cm4gKGJvb2wpbGFzdC5uYW1lW2xhc3QubGVuXTtcXG4rfVxcbitcXG4gc3RhdGljIGlubGluZSBjb25zdCBjaGFyICpsb29rdXBfbGFzdChzdHJ1Y3QgbmFtZWlkYXRhICpuZClcXG4ge1xcbi1cXHRpZiAobmQtXFx1MDAzZWxhc3RfdHlwZSA9PSBMQVNUX05PUk0gXFx1MDAyNlxcdTAwMjYgbmQtXFx1MDAzZWxhc3QubmFtZVtuZC1cXHUwMDNlbGFzdC5sZW5dKVxcbitcXHRpZiAobmQtXFx1MDAzZWxhc3RfdHlwZSA9PSBMQVNUX05PUk0gXFx1MDAyNlxcdTAwMjYgdHJhaWxpbmdfc2xhc2hlcyhuZC1cXHUwMDNlbGFzdCkpXFxuIFxcdFxcdG5kLVxcdTAwM2VmbGFncyB8PSBMT09LVVBfRk9MTE9XIHwgTE9PS1VQX0RJUkVDVE9SWTtcXG4gXFxuIFxcdHJldHVybiB3YWxrX2NvbXBvbmVudChuZCwgV0FMS19UUkFJTElORyk7XFxuQEAgLTQxNjQsNiArNDE4MiwyNCBAQCBzdGF0aWMgaW5saW5lIHVtb2RlX3QgdmZzX3ByZXBhcmVfbW9kZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcXG4gXFx0cmV0dXJuIG1vZGU7XFxuIH1cXG4gXFxuK3N0YXRpYyBpbmxpbmVcXG4raW50IHZmc19jcmVhdGVfbm9fcGVybShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxcbitcXHRcXHQgICAgICAgdW1vZGVfdCBtb2RlLCBzdHJ1Y3QgZGVsZWdhdGVkX2lub2RlICpkaSlcXG4re1xcbitcXHRzdHJ1Y3QgaW5vZGUgKmRpciA9IGRfaW5vZGUoZGVudHJ5LVxcdTAwM2VkX3BhcmVudCk7XFxuK1xcdGludCBlcnJvcjtcXG4rXFxuK1xcdGVycm9yID0gdHJ5X2JyZWFrX2RlbGVnKGRpciwgTEVBU0VfQlJFQUtfRElSX0NSRUFURSwgZGkpO1xcbitcXHRpZiAoZXJyb3IpXFxuK1xcdFxcdHJldHVybiBlcnJvcjtcXG4rXFxuK1xcdGVycm9yID0gZGlyLVxcdTAwM2VpX29wLVxcdTAwM2VjcmVhdGUoaWRtYXAsIGRpciwgZGVudHJ5LCBtb2RlLCB0cnVlKTtcXG4rXFx0aWYgKCFlcnJvcilcXG4rXFx0XFx0ZnNub3RpZnlfY3JlYXRlKGRpciwgZGVudHJ5KTtcXG4rXFxuK1xcdHJldHVybiBlcnJvcjtcXG4rfVxcbitcXG4gLyoqXFxuICAqIHZmc19jcmVhdGUgLSBjcmVhdGUgbmV3IGZpbGVcXG4gICogQGlkbWFwOlxcdGlkbWFwIG9mIHRoZSBtb3VudCB0aGUgaW5vZGUgd2FzIGZvdW5kIGZyb21cXG5AQCAtNDE5NiwxMyArNDIzMiw4IEBAIGludCB2ZnNfY3JlYXRlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSxcXG4gXFx0ZXJyb3IgPSBzZWN1cml0eV9pbm9kZV9jcmVhdGUoZGlyLCBkZW50cnksIG1vZGUpO1xcbiBcXHRpZiAoZXJyb3IpXFxuIFxcdFxcdHJldHVybiBlcnJvcjtcXG4tXFx0ZXJyb3IgPSB0cnlfYnJlYWtfZGVsZWcoZGlyLCBMRUFTRV9CUkVBS19ESVJfQ1JFQVRFLCBkaSk7XFxuLVxcdGlmIChlcnJvcilcXG4tXFx0XFx0cmV0dXJuIGVycm9yO1xcbi1cXHRlcnJvciA9IGRpci1cXHUwMDNlaV9vcC1cXHUwMDNlY3JlYXRlKGlkbWFwLCBkaXIsIGRlbnRyeSwgbW9kZSwgdHJ1ZSk7XFxuLVxcdGlmICghZXJyb3IpXFxuLVxcdFxcdGZzbm90aWZ5X2NyZWF0ZShkaXIsIGRlbnRyeSk7XFxuLVxcdHJldHVybiBlcnJvcjtcXG4rXFxuK1xcdHJldHVybiB2ZnNfY3JlYXRlX25vX3Blcm0oaWRtYXAsIGRlbnRyeSwgbW9kZSwgZGkpO1xcbiB9XFxuIEVYUE9SVF9TWU1CT0wodmZzX2NyZWF0ZSk7XFxuIFxcbkBAIC00MzE5LDczICs0MzUwLDEyMiBAQCBzdGF0aWMgaW5saW5lIGludCBvcGVuX3RvX25hbWVpX2ZsYWdzKGludCBmbGFnKVxcbiBcXG4gc3RhdGljIGludCBtYXlfb19jcmVhdGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXFxuIFxcdFxcdFxcdGNvbnN0IHN0cnVjdCBwYXRoICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcXG4tXFx0XFx0XFx0dW1vZGVfdCBtb2RlKVxcbitcXHRcXHRcXHR1bW9kZV90IG1vZGUsIGJvb2wgY3JlYXRlX2RpcilcXG4ge1xcbi1cXHRpbnQgZXJyb3IgPSBzZWN1cml0eV9wYXRoX21rbm9kKGRpciwgZGVudHJ5LCBtb2RlLCAwKTtcXG4rXFx0c3RydWN0IGlub2RlICpkaXJfaW5vZGUgPSBkaXItXFx1MDAzZWRlbnRyeS1cXHUwMDNlZF9pbm9kZTtcXG4rXFx0aW50IGVycm9yO1xcbitcXG4rXFx0aWYgKGNyZWF0ZV9kaXIpXFxuK1xcdFxcdGVycm9yID0gc2VjdXJpdHlfcGF0aF9ta2RpcihkaXIsIGRlbnRyeSwgbW9kZSk7XFxuK1xcdGVsc2VcXG4rXFx0XFx0ZXJyb3IgPSBzZWN1cml0eV9wYXRoX21rbm9kKGRpciwgZGVudHJ5LCBtb2RlLCAwKTtcXG4gXFx0aWYgKGVycm9yKVxcbiBcXHRcXHRyZXR1cm4gZXJyb3I7XFxuIFxcbiBcXHRpZiAoIWZzdWlkZ2lkX2hhc19tYXBwaW5nKGRpci1cXHUwMDNlZGVudHJ5LVxcdTAwM2VkX3NiLCBpZG1hcCkpXFxuIFxcdFxcdHJldHVybiAtRU9WRVJGTE9XO1xcbiBcXG4tXFx0ZXJyb3IgPSBpbm9kZV9wZXJtaXNzaW9uKGlkbWFwLCBkaXItXFx1MDAzZWRlbnRyeS1cXHUwMDNlZF9pbm9kZSxcXG4tXFx0XFx0XFx0XFx0IE1BWV9XUklURSB8IE1BWV9FWEVDKTtcXG4rXFx0ZXJyb3IgPSBpbm9kZV9wZXJtaXNzaW9uKGlkbWFwLCBkaXJfaW5vZGUsIE1BWV9XUklURSB8IE1BWV9FWEVDKTtcXG4gXFx0aWYgKGVycm9yKVxcbiBcXHRcXHRyZXR1cm4gZXJyb3I7XFxuIFxcbi1cXHRyZXR1cm4gc2VjdXJpdHlfaW5vZGVfY3JlYXRlKGRpci1cXHUwMDNlZGVudHJ5LVxcdTAwM2VkX2lub2RlLCBkZW50cnksIG1vZGUpO1xcbitcXHRpZiAoY3JlYXRlX2RpcilcXG4rXFx0XFx0ZXJyb3IgPSBzZWN1cml0eV9pbm9kZV9ta2RpcihkaXJfaW5vZGUsIGRlbnRyeSwgbW9kZSk7XFxuK1xcdGVsc2VcXG4rXFx0XFx0ZXJyb3IgPSBzZWN1cml0eV9pbm9kZV9jcmVhdGUoZGlyX2lub2RlLCBkZW50cnksIG1vZGUpO1xcbitcXG4rXFx0cmV0dXJuIGVycm9yO1xcbit9XFxuK1xcbitzdGF0aWMgaW5saW5lIHVtb2RlX3Qgb19jcmVhdGVfbW9kZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcXG4rXFx0XFx0Y29uc3Qgc3RydWN0IGlub2RlICpkaXIsIHVtb2RlX3QgbW9kZSwgYm9vbCBjcmVhdGVfZGlyKVxcbit7XFxuK1xcdGlmIChjcmVhdGVfZGlyKVxcbitcXHRcXHRyZXR1cm4gdmZzX3ByZXBhcmVfbW9kZShpZG1hcCwgZGlyLCBtb2RlLCBTX0lSV1hVR08gfCBTX0lTVlRYLCAwKTtcXG4rXFx0ZWxzZVxcbitcXHRcXHRyZXR1cm4gdmZzX3ByZXBhcmVfbW9kZShpZG1hcCwgZGlyLCBtb2RlLCBTX0lBTExVR08sIFNfSUZSRUcpO1xcbiB9XFxuIFxcbiAvKlxcbi0gKiBBdHRlbXB0IHRvIGF0b21pY2FsbHkgbG9vayB1cCwgY3JlYXRlIGFuZCBvcGVuIGEgZmlsZSBmcm9tIGEgbmVnYXRpdmVcXG4tICogZGVudHJ5Llxcbi0gKlxcbi0gKiBSZXR1cm5zIDAgaWYgc3VjY2Vzc2Z1bC4gIFRoZSBmaWxlIHdpbGwgaGF2ZSBiZWVuIGNyZWF0ZWQgYW5kIGF0dGFjaGVkIHRvXFxuLSAqIEBmaWxlIGJ5IHRoZSBmaWxlc3lzdGVtIGNhbGxpbmcgZmluaXNoX29wZW4oKS5cXG4tICpcXG4tICogSWYgdGhlIGZpbGUgd2FzIGxvb2tlZCB1cCBvbmx5IG9yIGRpZG4ndCBuZWVkIGNyZWF0aW5nLCBGTU9ERV9PUEVORUQgd29uJ3RcXG4tICogYmUgc2V0LiAgVGhlIGNhbGxlciB3aWxsIG5lZWQgdG8gcGVyZm9ybSB0aGUgb3BlbiB0aGVtc2VsdmVzLiAgQHBhdGggd2lsbFxcbi0gKiBoYXZlIGJlZW4gdXBkYXRlZCB0byBwb2ludCB0byB0aGUgbmV3IGRlbnRyeS4gIFRoaXMgbWF5IGJlIG5lZ2F0aXZlLlxcbi0gKlxcbi0gKiBSZXR1cm5zIGFuIGVycm9yIGNvZGUgb3RoZXJ3aXNlLlxcbisgKiBhdG9taWNfb3BlbigpIC0gYXR0ZW1wdCB0byBhdG9taWNhbGx5IGxvb2sgdXAsIGNyZWF0ZSBhbmQgb3BlbiBhIGZpbGVcXG4rICogZnJvbSBhIG5lZ2F0aXZlIGRlbnRyeS5cXG4rICogQHBhdGg6ICAgICAgICAgIHBhcmVudCBkaXJlY3RvcnkgcGF0aFxcbisgKiBAZGVudHJ5OiAgICAgICAgY2hpbGQgdG8gLVxcdTAwM2VhdG9taWNfb3BlbigpXFxuKyAqIEBvcGVuX2ZsYWc6ICAgICBvcGVuIGZsYWdzXFxuKyAqIEBtb2RlOiAgICAgICAgICBjcmVhdGUgbW9kZVxcbisgKiBAY3JlYXRlX2Vycm9yOiAgcmV0dXJuIHZhbHVlIGZyb20gbWF5X29fY3JlYXRlKClcXG4rICpcXG4rICogSWYgRk1PREVfT1BFTkVEIGlzIHNldCwgdGhlIGZpbGUgd2lsbCBoYXZlIGJlZW4gYXR0YWNoZWQgdG8gQGZpbGUgYnkgdGhlXFxuKyAqIGZpbGVzeXN0ZW0gY2FsbGluZyBmaW5pc2hfb3BlbigpLiBJZiBGTU9ERV9PUEVORUQgaXNuJ3Qgc2V0LCB0aGVcXG4rICogZmlsZXN5c3RlbSBpbnN0ZWFkIGNhbGxlZCBmaW5pc2hfbm9fb3BlbigpIGFuZCB0aGUgY2FsbGVyIHdpbGwgbmVlZCB0b1xcbisgKiBwZXJmb3JtIHRoZSBvcGVuIHRoZW1zZWx2ZXMuXFxuKyAqXFxuKyAqIEZNT0RFX0NSRUFURUQgaXMgc2V0IHdoZW4gdGhlIGNhbGwgdG8gLVxcdTAwM2VhdG9taWNfb3BlbigpIGFjdHVhbGx5IGNyZWF0ZWRcXG4rICogdGhlIGZpbGUuXFxuKyAqXFxuKyAqIFJldHVybnMgdGhlIG9wZW5lZC9sb29rZWQtdXAgZGVudHJ5IG9uIHN1Y2Nlc3Mgb3IgRVJSX1BUUigtRSkgb24gZmFpbHVyZS5cXG4rICogT24gZXJyb3IsIGF0b21pY19vcGVuKCkgY29uc3VtZXMgQGRlbnRyeS5cXG4gICovXFxuIHN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICphdG9taWNfb3Blbihjb25zdCBzdHJ1Y3QgcGF0aCAqcGF0aCwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxcbiBcXHRcXHRcXHRcXHQgIHN0cnVjdCBmaWxlICpmaWxlLFxcbi1cXHRcXHRcXHRcXHQgIGludCBvcGVuX2ZsYWcsIHVtb2RlX3QgbW9kZSlcXG4rXFx0XFx0XFx0XFx0ICBpbnQgb3Blbl9mbGFnLCB1bW9kZV90IG1vZGUsIGJvb2wgY3JlYXRlX2Vycm9yKVxcbiB7XFxuIFxcdHN0cnVjdCBkZW50cnkgKmNvbnN0IERFTlRSWV9OT1RfU0VUID0gKHZvaWQgKikgLTFVTDtcXG4gXFx0c3RydWN0IGlub2RlICpkaXIgPSAgcGF0aC1cXHUwMDNlZGVudHJ5LVxcdTAwM2VkX2lub2RlO1xcbitcXHRib29sIGZhaWxlZF9jcmVhdGUgPSBmYWxzZTtcXG4gXFx0aW50IGVycm9yO1xcbiBcXG4gXFx0ZmlsZS1cXHUwMDNlX19mX3BhdGguZGVudHJ5ID0gREVOVFJZX05PVF9TRVQ7XFxuIFxcdGZpbGUtXFx1MDAzZV9fZl9wYXRoLm1udCA9IHBhdGgtXFx1MDAzZW1udDtcXG4rXFxuIFxcdGVycm9yID0gZGlyLVxcdTAwM2VpX29wLVxcdTAwM2VhdG9taWNfb3BlbihkaXIsIGRlbnRyeSwgZmlsZSxcXG4gXFx0XFx0XFx0XFx0ICAgICAgIG9wZW5fdG9fbmFtZWlfZmxhZ3Mob3Blbl9mbGFnKSwgbW9kZSk7XFxuIFxcdGRfbG9va3VwX2RvbmUoZGVudHJ5KTtcXG4gXFx0aWYgKCFlcnJvcikge1xcbiBcXHRcXHRpZiAoZmlsZS1cXHUwMDNlZl9tb2RlIFxcdTAwMjYgRk1PREVfT1BFTkVEKSB7XFxuLVxcdFxcdFxcdGlmICh1bmxpa2VseShkZW50cnkgIT0gZmlsZS1cXHUwMDNlZl9wYXRoLmRlbnRyeSkpIHtcXG4rXFx0XFx0XFx0Ly8gZmluaXNoX29wZW4oKSBjYWxsZWRcXG4rXFx0XFx0XFx0c3RydWN0IGRlbnRyeSAqb3BlbmVkID0gZmlsZS1cXHUwMDNlZl9wYXRoLmRlbnRyeTtcXG4rXFx0XFx0XFx0aWYgKHVubGlrZWx5KG9wZW5lZCAhPSBkZW50cnkpKSB7XFxuIFxcdFxcdFxcdFxcdGRwdXQoZGVudHJ5KTtcXG4tXFx0XFx0XFx0XFx0ZGVudHJ5ID0gZGdldChmaWxlLVxcdTAwM2VmX3BhdGguZGVudHJ5KTtcXG4rXFx0XFx0XFx0XFx0ZGVudHJ5ID0gZGdldChvcGVuZWQpO1xcbiBcXHRcXHRcXHR9XFxuLVxcdFxcdH0gZWxzZSBpZiAoV0FSTl9PTihmaWxlLVxcdTAwM2VmX3BhdGguZGVudHJ5ID09IERFTlRSWV9OT1RfU0VUKSkge1xcbi1cXHRcXHRcXHRlcnJvciA9IC1FSU87XFxuLVxcdFxcdH0gZWxzZSB7XFxuLVxcdFxcdFxcdGlmIChmaWxlLVxcdTAwM2VmX3BhdGguZGVudHJ5KSB7XFxuK1xcdFxcdH0gZWxzZSBpZiAobGlrZWx5KGZpbGUtXFx1MDAzZWZfcGF0aC5kZW50cnkgIT0gREVOVFJZX05PVF9TRVQpKSB7XFxuK1xcdFxcdFxcdC8vIGZpbmlzaF9ub19vcGVuKCkgY2FsbGVkXFxuK1xcdFxcdFxcdHN0cnVjdCBkZW50cnkgKnJlcGxhY2VkID0gZmlsZS1cXHUwMDNlZl9wYXRoLmRlbnRyeTtcXG4rXFx0XFx0XFx0aWYgKHJlcGxhY2VkKSB7XFxuIFxcdFxcdFxcdFxcdGRwdXQoZGVudHJ5KTtcXG4tXFx0XFx0XFx0XFx0ZGVudHJ5ID0gZmlsZS1cXHUwMDNlZl9wYXRoLmRlbnRyeTtcXG4rXFx0XFx0XFx0XFx0ZGVudHJ5ID0gcmVwbGFjZWQ7XFxuIFxcdFxcdFxcdH1cXG4gXFx0XFx0XFx0aWYgKHVubGlrZWx5KGRfaXNfbmVnYXRpdmUoZGVudHJ5KSkpXFxuIFxcdFxcdFxcdFxcdGVycm9yID0gLUVOT0VOVDtcXG4rXFx0XFx0XFx0aWYgKGVycm9yIFxcdTAwMjZcXHUwMDI2IGNyZWF0ZV9lcnJvcikgLy8gc2hvdWxkIGhhdmUgY3JlYXRlZCwgYnV0IGVycm9yZWQgYmVmb3JlXFxuK1xcdFxcdFxcdFxcdGZhaWxlZF9jcmVhdGUgPSB0cnVlO1xcbitcXHRcXHR9IGVsc2Uge1xcbitcXHRcXHRcXHRjb25zdCBjaGFyICpmc25hbWUgPSBkZW50cnktXFx1MDAzZWRfc2ItXFx1MDAzZXNfdHlwZS1cXHUwMDNlbmFtZTtcXG4rXFx0XFx0XFx0V0FSTigxLCBcXFwiJXM6IC1cXHUwMDNlYXRvbWljX29wZW4oKSBsZWZ0IGZpbGUtXFx1MDAzZWZfcGF0aC5kZW50cnkgdW5zZXQhXFxcXG5cXFwiLCBmc25hbWUpO1xcbitcXHRcXHRcXHRlcnJvciA9IC1FSU87XFxuIFxcdFxcdH1cXG4gXFx0fVxcbitcXG4gXFx0aWYgKGVycm9yKSB7XFxuK1xcdFxcdGlmIChmYWlsZWRfY3JlYXRlKVxcbitcXHRcXHRcXHRhdWRpdF9pbm9kZV9jaGlsZChkaXIsIGRlbnRyeSwgQVVESVRfVFlQRV9DSElMRF9DUkVBVEUpO1xcbiBcXHRcXHRkcHV0KGRlbnRyeSk7XFxuIFxcdFxcdGRlbnRyeSA9IEVSUl9QVFIoZXJyb3IpO1xcbitcXHR9IGVsc2Uge1xcbitcXHRcXHRpZiAoZmlsZS1cXHUwMDNlZl9tb2RlIFxcdTAwMjYgRk1PREVfQ1JFQVRFRClcXG4rXFx0XFx0XFx0ZnNub3RpZnlfY3JlYXRlKGRpciwgZGVudHJ5KTtcXG4rXFx0XFx0aWYgKGZpbGUtXFx1MDAzZWZfbW9kZSBcXHUwMDI2IEZNT0RFX09QRU5FRClcXG4rXFx0XFx0XFx0ZnNub3RpZnlfb3BlbihmaWxlKTtcXG4gXFx0fVxcbitcXG4gXFx0cmV0dXJuIGRlbnRyeTtcXG4gfVxcbiBcXG4rc3RhdGljIGlubGluZVxcbitzdHJ1Y3QgZGVudHJ5ICp2ZnNfbWtkaXJfbm9fcGVybShzdHJ1Y3QgbW50X2lkbWFwICosIHN0cnVjdCBpbm9kZSAqLFxcbitcXHRcXHRcXHRcXHQgc3RydWN0IGRlbnRyeSAqLCB1bW9kZV90LFxcbitcXHRcXHRcXHRcXHQgc3RydWN0IGRlbGVnYXRlZF9pbm9kZSAqKTtcXG4gLypcXG4gICogTG9vayB1cCBhbmQgbWF5YmUgY3JlYXRlIGFuZCBvcGVuIHRoZSBsYXN0IGNvbXBvbmVudC5cXG4gICpcXG5AQCAtNDQxMiw2ICs0NDkyLDcgQEAgc3RhdGljIHN0cnVjdCBkZW50cnkgKmxvb2t1cF9vcGVuKHN0cnVjdCBuYW1laWRhdGEgKm5kLCBzdHJ1Y3QgZmlsZSAqZmlsZSxcXG4gXFx0c3RydWN0IGRlbnRyeSAqZGVudHJ5O1xcbiBcXHRpbnQgZXJyb3IsIGNyZWF0ZV9lcnJvciA9IDA7XFxuIFxcdHVtb2RlX3QgbW9kZSA9IG9wLVxcdTAwM2Vtb2RlO1xcbitcXHRib29sIGNyZWF0ZV9kaXIgPSBPX0lTX01LRElSKG9wZW5fZmxhZyk7XFxuIFxcbiBcXHRpZiAodW5saWtlbHkoSVNfREVBRERJUihkaXJfaW5vZGUpKSlcXG4gXFx0XFx0cmV0dXJuIEVSUl9QVFIoLUVOT0VOVCk7XFxuQEAgLTQ0MzcsNyArNDUxOCw3IEBAIHN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpsb29rdXBfb3BlbihzdHJ1Y3QgbmFtZWlkYXRhICpuZCwgc3RydWN0IGZpbGUgKmZpbGUsXFxuIFxcdFxcdGRlbnRyeSA9IE5VTEw7XFxuIFxcdH1cXG4gXFx0aWYgKGRlbnRyeS1cXHUwMDNlZF9pbm9kZSkge1xcbi1cXHRcXHQvKiBDYWNoZWQgcG9zaXRpdmUgZGVudHJ5OiB3aWxsIG9wZW4gaW4gZl9vcC1cXHUwMDNlb3BlbiAqL1xcbitcXHRcXHQvKiBDYWNoZWQgcG9zaXRpdmUgZGVudHJ5OiB3aWxsIG9wZW4gaW4gZG9fb3BlbigpLiAqL1xcbiBcXHRcXHRyZXR1cm4gZGVudHJ5O1xcbiBcXHR9XFxuIFxcbkBAIC00NDU5LDE5ICs0NTQwLDI0IEBAIHN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpsb29rdXBfb3BlbihzdHJ1Y3QgbmFtZWlkYXRhICpuZCwgc3RydWN0IGZpbGUgKmZpbGUsXFxuIFxcdGlmIChvcGVuX2ZsYWcgXFx1MDAyNiBPX0NSRUFUKSB7XFxuIFxcdFxcdGlmIChvcGVuX2ZsYWcgXFx1MDAyNiBPX0VYQ0wpXFxuIFxcdFxcdFxcdG9wZW5fZmxhZyBcXHUwMDI2PSB+T19UUlVOQztcXG4tXFx0XFx0bW9kZSA9IHZmc19wcmVwYXJlX21vZGUoaWRtYXAsIGRpci1cXHUwMDNlZF9pbm9kZSwgbW9kZSwgbW9kZSwgbW9kZSk7XFxuK1xcdFxcdG1vZGUgPSBvX2NyZWF0ZV9tb2RlKGlkbWFwLCBkaXJfaW5vZGUsIG1vZGUsIGNyZWF0ZV9kaXIpO1xcbiBcXHRcXHRpZiAobGlrZWx5KGdvdF93cml0ZSkpXFxuIFxcdFxcdFxcdGNyZWF0ZV9lcnJvciA9IG1heV9vX2NyZWF0ZShpZG1hcCwgXFx1MDAyNm5kLVxcdTAwM2VwYXRoLFxcbi1cXHRcXHRcXHRcXHRcXHRcXHQgICAgZGVudHJ5LCBtb2RlKTtcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgIGRlbnRyeSwgbW9kZSwgY3JlYXRlX2Rpcik7XFxuIFxcdFxcdGVsc2VcXG4gXFx0XFx0XFx0Y3JlYXRlX2Vycm9yID0gLUVST0ZTO1xcbitcXHRcXHQvKiBSZWZ1c2UgdG8gY3JlYXRlIGEgZGlyZWN0b3J5IHRocm91Z2ggYSBkYW5nbGluZyAodHJhaWxpbmcpXFxuK1xcdFxcdCAqIHN5bWxpbmsuIEZvciByZWd1bGFyIGZpbGVzIHRoaXMgaGFzIGJlZW4gYWxsb3dlZCBoaXN0b3JpY2FsbHlcXG4rXFx0XFx0ICogb24gT19DUkVBVCB3aXRob3V0IE9fRVhDTC4gKi9cXG4rXFx0XFx0aWYgKHVubGlrZWx5KG5kLVxcdTAwM2VkZXB0aCkgXFx1MDAyNlxcdTAwMjYgY3JlYXRlX2RpciBcXHUwMDI2XFx1MDAyNiAhY3JlYXRlX2Vycm9yKVxcbitcXHRcXHRcXHRjcmVhdGVfZXJyb3IgPSAtRUVYSVNUO1xcbiBcXHR9XFxuIFxcdGlmIChjcmVhdGVfZXJyb3IpXFxuIFxcdFxcdG9wZW5fZmxhZyBcXHUwMDI2PSB+T19DUkVBVDtcXG4gXFx0aWYgKGRpcl9pbm9kZS1cXHUwMDNlaV9vcC1cXHUwMDNlYXRvbWljX29wZW4pIHtcXG4gXFx0XFx0aWYgKG5kLVxcdTAwM2VmbGFncyBcXHUwMDI2IExPT0tVUF9ESVJFQ1RPUlkpXFxuIFxcdFxcdFxcdG9wZW5fZmxhZyB8PSBPX0RJUkVDVE9SWTtcXG4tXFx0XFx0ZGVudHJ5ID0gYXRvbWljX29wZW4oXFx1MDAyNm5kLVxcdTAwM2VwYXRoLCBkZW50cnksIGZpbGUsIG9wZW5fZmxhZywgbW9kZSk7XFxuK1xcdFxcdGRlbnRyeSA9IGF0b21pY19vcGVuKFxcdTAwMjZuZC1cXHUwMDNlcGF0aCwgZGVudHJ5LCBmaWxlLCBvcGVuX2ZsYWcsIG1vZGUsIGNyZWF0ZV9lcnJvcik7XFxuIFxcdFxcdGlmICh1bmxpa2VseShjcmVhdGVfZXJyb3IpIFxcdTAwMjZcXHUwMDI2IGRlbnRyeSA9PSBFUlJfUFRSKC1FTk9FTlQpKVxcbiBcXHRcXHRcXHRkZW50cnkgPSBFUlJfUFRSKGNyZWF0ZV9lcnJvcik7XFxuIFxcdFxcdHJldHVybiBkZW50cnk7XFxuQEAgLTQ0OTAsMzAgKzQ1NzYsNDQgQEAgc3RhdGljIHN0cnVjdCBkZW50cnkgKmxvb2t1cF9vcGVuKHN0cnVjdCBuYW1laWRhdGEgKm5kLCBzdHJ1Y3QgZmlsZSAqZmlsZSxcXG4gXFx0XFx0XFx0ZGVudHJ5ID0gcmVzO1xcbiBcXHRcXHR9XFxuIFxcdH1cXG4rXFx0aWYgKGRlbnRyeS1cXHUwMDNlZF9pbm9kZSB8fCAhKG9wLVxcdTAwM2VvcGVuX2ZsYWcgXFx1MDAyNiBPX0NSRUFUKSkge1xcbitcXHRcXHQvKiBObyBuZWVkIHRvIGNyZWF0ZSBhIGZpbGUuIElmIGxvb2t1cCByZXR1cm5lZCBhIHBvc2l0aXZlXFxuK1xcdFxcdCAqIGRlbnRyeSwgdGhlIGZpbGUgd2lsbCBiZSBvcGVuZWQgaW4gZG9fb3BlbigpLiAqL1xcbitcXHRcXHRyZXR1cm4gZGVudHJ5O1xcbitcXHR9XFxuIFxcbi1cXHQvKiBOZWdhdGl2ZSBkZW50cnksIGp1c3QgY3JlYXRlIHRoZSBmaWxlICovXFxuLVxcdGlmICghZGVudHJ5LVxcdTAwM2VkX2lub2RlIFxcdTAwMjZcXHUwMDI2IChvcGVuX2ZsYWcgXFx1MDAyNiBPX0NSRUFUKSkge1xcbi1cXHRcXHQvKiBidXQgYnJlYWsgdGhlIGRpcmVjdG9yeSBsZWFzZSBmaXJzdCEgKi9cXG4tXFx0XFx0ZXJyb3IgPSB0cnlfYnJlYWtfZGVsZWcoZGlyX2lub2RlLCBMRUFTRV9CUkVBS19ESVJfQ1JFQVRFLCBkZWxlZ2F0ZWRfaW5vZGUpO1xcbi1cXHRcXHRpZiAoZXJyb3IpXFxuLVxcdFxcdFxcdGdvdG8gb3V0X2RwdXQ7XFxuLVxcbi1cXHRcXHRmaWxlLVxcdTAwM2VmX21vZGUgfD0gRk1PREVfQ1JFQVRFRDtcXG4tXFx0XFx0YXVkaXRfaW5vZGVfY2hpbGQoZGlyX2lub2RlLCBkZW50cnksIEFVRElUX1RZUEVfQ0hJTERfQ1JFQVRFKTtcXG4tXFx0XFx0aWYgKCFkaXJfaW5vZGUtXFx1MDAzZWlfb3AtXFx1MDAzZWNyZWF0ZSkge1xcbi1cXHRcXHRcXHRlcnJvciA9IC1FQUNDRVM7XFxuLVxcdFxcdFxcdGdvdG8gb3V0X2RwdXQ7XFxuLVxcdFxcdH1cXG4rXFx0LyogTmVnYXRpdmUgZGVudHJ5IHdpdGggT19DUkVBVCBmbGFnIHNldCAqL1xcbitcXHRhdWRpdF9pbm9kZV9jaGlsZChkaXItXFx1MDAzZWRfaW5vZGUsIGRlbnRyeSwgQVVESVRfVFlQRV9DSElMRF9DUkVBVEUpO1xcbiBcXG4tXFx0XFx0ZXJyb3IgPSBkaXJfaW5vZGUtXFx1MDAzZWlfb3AtXFx1MDAzZWNyZWF0ZShpZG1hcCwgZGlyX2lub2RlLCBkZW50cnksXFxuLVxcdFxcdFxcdFxcdFxcdFxcdG1vZGUsIG9wZW5fZmxhZyBcXHUwMDI2IE9fRVhDTCk7XFxuLVxcdFxcdGlmIChlcnJvcilcXG4tXFx0XFx0XFx0Z290byBvdXRfZHB1dDtcXG4tXFx0fVxcbi1cXHRpZiAodW5saWtlbHkoY3JlYXRlX2Vycm9yKSBcXHUwMDI2XFx1MDAyNiAhZGVudHJ5LVxcdTAwM2VkX2lub2RlKSB7XFxuK1xcdGlmICh1bmxpa2VseShjcmVhdGVfZXJyb3IpKSB7XFxuK1xcdFxcdC8qIFNob3VsZCBoYXZlIGRvbmUgYSBjcmVhdGUsIGJ1dCB3ZSBhbHJlYWR5IGVycm9yZWQgKi9cXG4gXFx0XFx0ZXJyb3IgPSBjcmVhdGVfZXJyb3I7XFxuIFxcdFxcdGdvdG8gb3V0X2RwdXQ7XFxuIFxcdH1cXG4rXFxuK1xcdGlmICgoY3JlYXRlX2RpciBcXHUwMDI2XFx1MDAyNiAhZGlyX2lub2RlLVxcdTAwM2VpX29wLVxcdTAwM2Vta2RpcilcXG4rXFx0ICAgIHx8ICghY3JlYXRlX2RpciBcXHUwMDI2XFx1MDAyNiAhZGlyX2lub2RlLVxcdTAwM2VpX29wLVxcdTAwM2VjcmVhdGUpKSB7XFxuK1xcdFxcdGVycm9yID0gLUVBQ0NFUztcXG4rXFx0XFx0Z290byBvdXRfZHB1dDtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKGNyZWF0ZV9kaXIpIHtcXG4rXFx0XFx0c3RydWN0IGRlbnRyeSAqcmVzID0gdmZzX21rZGlyX25vX3Blcm0oaWRtYXAsIGRpcl9pbm9kZSwgZGVudHJ5LFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgbW9kZSwgZGVsZWdhdGVkX2lub2RlKTtcXG4rXFx0XFx0aWYgKElTX0VSUihyZXMpKSB7XFxuK1xcdFxcdFxcdGVycm9yID0gUFRSX0VSUihyZXMpO1xcbitcXHRcXHR9IGVsc2Uge1xcbitcXHRcXHRcXHRlcnJvciA9IDA7XFxuK1xcdFxcdFxcdGRlbnRyeSA9IHJlcztcXG4rXFx0XFx0fVxcbitcXHR9IGVsc2Uge1xcbitcXHRcXHRlcnJvciA9IHZmc19jcmVhdGVfbm9fcGVybShpZG1hcCwgZGVudHJ5LCBtb2RlLCBkZWxlZ2F0ZWRfaW5vZGUpO1xcbitcXHR9XFxuK1xcdGlmIChlcnJvcilcXG4rXFx0XFx0Z290byBvdXRfZHB1dDtcXG4rXFxuK1xcdGZpbGUtXFx1MDAzZWZfbW9kZSB8PSBGTU9ERV9DUkVBVEVEO1xcbitcXG4gXFx0cmV0dXJuIGRlbnRyeTtcXG4gXFxuIG91dF9kcHV0OlxcbkBAIC00NTIxLDE3ICs0NjIxLDEyIEBAIHN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpsb29rdXBfb3BlbihzdHJ1Y3QgbmFtZWlkYXRhICpuZCwgc3RydWN0IGZpbGUgKmZpbGUsXFxuIFxcdHJldHVybiBFUlJfUFRSKGVycm9yKTtcXG4gfVxcbiBcXG4tc3RhdGljIGlubGluZSBib29sIHRyYWlsaW5nX3NsYXNoZXMoc3RydWN0IG5hbWVpZGF0YSAqbmQpXFxuLXtcXG4tXFx0cmV0dXJuIChib29sKW5kLVxcdTAwM2VsYXN0Lm5hbWVbbmQtXFx1MDAzZWxhc3QubGVuXTtcXG4tfVxcbi1cXG4gc3RhdGljIHN0cnVjdCBkZW50cnkgKmxvb2t1cF9mYXN0X2Zvcl9vcGVuKHN0cnVjdCBuYW1laWRhdGEgKm5kLCBpbnQgb3Blbl9mbGFnKVxcbiB7XFxuIFxcdHN0cnVjdCBkZW50cnkgKmRlbnRyeTtcXG4gXFxuIFxcdGlmIChvcGVuX2ZsYWcgXFx1MDAyNiBPX0NSRUFUKSB7XFxuLVxcdFxcdGlmICh0cmFpbGluZ19zbGFzaGVzKG5kKSlcXG4rXFx0XFx0aWYgKHRyYWlsaW5nX3NsYXNoZXMobmQtXFx1MDAzZWxhc3QpIFxcdTAwMjZcXHUwMDI2ICEob3Blbl9mbGFnIFxcdTAwMjYgT19ESVJFQ1RPUlkpKVxcbiBcXHRcXHRcXHRyZXR1cm4gRVJSX1BUUigtRUlTRElSKTtcXG4gXFxuIFxcdFxcdC8qIERvbid0IGJvdGhlciBvbiBhbiBPX0VYQ0wgY3JlYXRlICovXFxuQEAgLTQ1MzksNyArNDYzNCw3IEBAIHN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpsb29rdXBfZmFzdF9mb3Jfb3BlbihzdHJ1Y3QgbmFtZWlkYXRhICpuZCwgaW50IG9wZW5fZmxhZylcXG4gXFx0XFx0XFx0cmV0dXJuIE5VTEw7XFxuIFxcdH1cXG4gXFxuLVxcdGlmICh0cmFpbGluZ19zbGFzaGVzKG5kKSlcXG4rXFx0aWYgKHRyYWlsaW5nX3NsYXNoZXMobmQtXFx1MDAzZWxhc3QpKVxcbiBcXHRcXHRuZC1cXHUwMDNlZmxhZ3MgfD0gTE9PS1VQX0ZPTExPVyB8IExPT0tVUF9ESVJFQ1RPUlk7XFxuIFxcbiBcXHRkZW50cnkgPSBsb29rdXBfZmFzdChuZCk7XFxuQEAgLTQ2MDIsMTYgKzQ2OTcsMTIgQEAgc3RhdGljIGNvbnN0IGNoYXIgKm9wZW5fbGFzdF9sb29rdXBzKHN0cnVjdCBuYW1laWRhdGEgKm5kLFxcbiBcXHRcXHQgKi9cXG4gXFx0fVxcbiBcXHRpZiAob3Blbl9mbGFnIFxcdTAwMjYgT19DUkVBVClcXG4tXFx0XFx0aW5vZGVfbG9jayhkaXItXFx1MDAzZWRfaW5vZGUpO1xcbitcXHRcXHRpbm9kZV9sb2NrX25lc3RlZChkaXItXFx1MDAzZWRfaW5vZGUsIElfTVVURVhfUEFSRU5UKTtcXG4gXFx0ZWxzZVxcbiBcXHRcXHRpbm9kZV9sb2NrX3NoYXJlZChkaXItXFx1MDAzZWRfaW5vZGUpO1xcbitcXG4gXFx0ZGVudHJ5ID0gbG9va3VwX29wZW4obmQsIGZpbGUsIG9wLCBnb3Rfd3JpdGUsIFxcdTAwMjZkZWxlZ2F0ZWRfaW5vZGUpO1xcbi1cXHRpZiAoIUlTX0VSUihkZW50cnkpKSB7XFxuLVxcdFxcdGlmIChmaWxlLVxcdTAwM2VmX21vZGUgXFx1MDAyNiBGTU9ERV9DUkVBVEVEKVxcbi1cXHRcXHRcXHRmc25vdGlmeV9jcmVhdGUoZGlyLVxcdTAwM2VkX2lub2RlLCBkZW50cnkpO1xcbi1cXHRcXHRpZiAoZmlsZS1cXHUwMDNlZl9tb2RlIFxcdTAwMjYgRk1PREVfT1BFTkVEKVxcbi1cXHRcXHRcXHRmc25vdGlmeV9vcGVuKGZpbGUpO1xcbi1cXHR9XFxuK1xcbiBcXHRpZiAob3Blbl9mbGFnIFxcdTAwMjYgT19DUkVBVClcXG4gXFx0XFx0aW5vZGVfdW5sb2NrKGRpci1cXHUwMDNlZF9pbm9kZSk7XFxuIFxcdGVsc2VcXG5AQCAtNDY2OSw4ICs0NzYwLDkgQEAgc3RhdGljIGludCBkb19vcGVuKHN0cnVjdCBuYW1laWRhdGEgKm5kLFxcbiBcXHRpZiAob3Blbl9mbGFnIFxcdTAwMjYgT19DUkVBVCkge1xcbiBcXHRcXHRpZiAoKG9wZW5fZmxhZyBcXHUwMDI2IE9fRVhDTCkgXFx1MDAyNlxcdTAwMjYgIShmaWxlLVxcdTAwM2VmX21vZGUgXFx1MDAyNiBGTU9ERV9DUkVBVEVEKSlcXG4gXFx0XFx0XFx0cmV0dXJuIC1FRVhJU1Q7XFxuLVxcdFxcdGlmIChkX2lzX2RpcihuZC1cXHUwMDNlcGF0aC5kZW50cnkpKVxcbitcXHRcXHRpZiAoIShvcGVuX2ZsYWcgXFx1MDAyNiBPX0RJUkVDVE9SWSkgXFx1MDAyNlxcdTAwMjYgZF9pc19kaXIobmQtXFx1MDAzZXBhdGguZGVudHJ5KSlcXG4gXFx0XFx0XFx0cmV0dXJuIC1FSVNESVI7XFxuK1xcbiBcXHRcXHRlcnJvciA9IG1heV9jcmVhdGVfaW5fc3RpY2t5KGlkbWFwLCBuZCxcXG4gXFx0XFx0XFx0XFx0XFx0ICAgICBkX2JhY2tpbmdfaW5vZGUobmQtXFx1MDAzZXBhdGguZGVudHJ5KSk7XFxuIFxcdFxcdGlmICh1bmxpa2VseShlcnJvcikpXFxuQEAgLTQ5NTAsNyArNTA0Miw3IEBAIHN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpmaWxlbmFtZV9jcmVhdGUoaW50IGRmZCwgc3RydWN0IGZpbGVuYW1lICpuYW1lLFxcbiBcXHQgKiBEbyB0aGUgZmluYWwgbG9va3VwLiAgU3VwcHJlc3MgJ2NyZWF0ZScgaWYgdGhlcmUgaXMgYSB0cmFpbGluZ1xcbiBcXHQgKiAnLycsIGFuZCBhIGRpcmVjdG9yeSB3YXNuJ3QgcmVxdWVzdGVkLlxcbiBcXHQgKi9cXG4tXFx0aWYgKGxhc3QubmFtZVtsYXN0Lmxlbl0gXFx1MDAyNlxcdTAwMjYgIXdhbnRfZGlyKVxcbitcXHRpZiAodHJhaWxpbmdfc2xhc2hlcyhsYXN0KSBcXHUwMDI2XFx1MDAyNiAhd2FudF9kaXIpXFxuIFxcdFxcdGNyZWF0ZV9mbGFncyBcXHUwMDI2PSB+TE9PS1VQX0NSRUFURTtcXG4gXFx0ZGVudHJ5ID0gc3RhcnRfZGlyb3AocGF0aC1cXHUwMDNlZGVudHJ5LCBcXHUwMDI2bGFzdCwgcmV2YWxfZmxhZyB8IGNyZWF0ZV9mbGFncyk7XFxuIFxcdGlmIChJU19FUlIoZGVudHJ5KSlcXG5AQCAtNTA0NSwxMyArNTEzNywxMyBAQCBzdHJ1Y3QgZmlsZSAqZGVudHJ5X2NyZWF0ZShzdHJ1Y3QgcGF0aCAqcGF0aCwgaW50IGZsYWdzLCB1bW9kZV90IG1vZGUsXFxuIFxcdFxcdHBhdGgtXFx1MDAzZWRlbnRyeSA9IGRpcjtcXG4gXFx0XFx0bW9kZSA9IHZmc19wcmVwYXJlX21vZGUoaWRtYXAsIGRpcl9pbm9kZSwgbW9kZSwgU19JQUxMVUdPLCBTX0lGUkVHKTtcXG4gXFxuLVxcdFxcdGNyZWF0ZV9lcnJvciA9IG1heV9vX2NyZWF0ZShpZG1hcCwgcGF0aCwgZGVudHJ5LCBtb2RlKTtcXG4rXFx0XFx0Y3JlYXRlX2Vycm9yID0gbWF5X29fY3JlYXRlKGlkbWFwLCBwYXRoLCBkZW50cnksIG1vZGUsIC8qY3JlYXRlX2Rpcj0qLyBmYWxzZSk7XFxuIFxcdFxcdGlmIChjcmVhdGVfZXJyb3IpXFxuIFxcdFxcdFxcdGZsYWdzIFxcdTAwMjY9IH5PX0NSRUFUO1xcbiBcXG4gXFx0XFx0LyogYXRvbWljX29wZW4gd2lsbCBkcHV0KGRlbnRyeSkgb24gZXJyb3IgKi9cXG4gXFx0XFx0ZGdldChvcmlnX2RlbnRyeSk7XFxuLVxcdFxcdGRlbnRyeSA9IGF0b21pY19vcGVuKHBhdGgsIGRlbnRyeSwgZmlsZSwgZmxhZ3MsIG1vZGUpO1xcbitcXHRcXHRkZW50cnkgPSBhdG9taWNfb3BlbihwYXRoLCBkZW50cnksIGZpbGUsIGZsYWdzLCBtb2RlLCBjcmVhdGVfZXJyb3IpO1xcbiBcXHRcXHRlcnJvciA9IFBUUl9FUlJfT1JfWkVSTyhkZW50cnkpO1xcbiBcXG4gXFx0XFx0aWYgKElTX0VSUihkZW50cnkpKVxcbkBAIC01MDY0LDEzICs1MTU2LDYgQEAgc3RydWN0IGZpbGUgKmRlbnRyeV9jcmVhdGUoc3RydWN0IHBhdGggKnBhdGgsIGludCBmbGFncywgdW1vZGVfdCBtb2RlLFxcbiBcXHRcXHRpZiAodW5saWtlbHkoY3JlYXRlX2Vycm9yKSBcXHUwMDI2XFx1MDAyNiBlcnJvciA9PSAtRU5PRU5UKVxcbiBcXHRcXHRcXHRlcnJvciA9IGNyZWF0ZV9lcnJvcjtcXG4gXFxuLVxcdFxcdGlmICghZXJyb3IpIHtcXG4tXFx0XFx0XFx0aWYgKGZpbGUtXFx1MDAzZWZfbW9kZSBcXHUwMDI2IEZNT0RFX0NSRUFURUQpXFxuLVxcdFxcdFxcdFxcdGZzbm90aWZ5X2NyZWF0ZShkaXItXFx1MDAzZWRfaW5vZGUsIGRlbnRyeSk7XFxuLVxcdFxcdFxcdGlmIChmaWxlLVxcdTAwM2VmX21vZGUgXFx1MDAyNiBGTU9ERV9PUEVORUQpXFxuLVxcdFxcdFxcdFxcdGZzbm90aWZ5X29wZW4oZmlsZSk7XFxuLVxcdFxcdH1cXG4tXFxuIFxcdFxcdHBhdGgtXFx1MDAzZWRlbnRyeSA9IGRlbnRyeTtcXG4gXFxuIFxcdH0gZWxzZSB7XFxuQEAgLTUyMjIsNiArNTMwNywzOSBAQCBTWVNDQUxMX0RFRklORTMobWtub2QsIGNvbnN0IGNoYXIgX191c2VyICosIGZpbGVuYW1lLCB1bW9kZV90LCBtb2RlLCB1bnNpZ25lZCwgZFxcbiBcXHRyZXR1cm4gZmlsZW5hbWVfbWtub2RhdChBVF9GRENXRCwgbmFtZSwgbW9kZSwgZGV2KTtcXG4gfVxcbiBcXG4rc3RhdGljIGlubGluZVxcbitzdHJ1Y3QgZGVudHJ5ICp2ZnNfbWtkaXJfbm9fcGVybShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXFxuK1xcdFxcdFxcdFxcdCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSxcXG4rXFx0XFx0XFx0XFx0IHN0cnVjdCBkZWxlZ2F0ZWRfaW5vZGUgKmRpKVxcbit7XFxuK1xcdGludCBlcnJvcjtcXG4rXFx0c3RydWN0IGRlbnRyeSAqZGU7XFxuK1xcdHVuc2lnbmVkIG1heF9saW5rcyA9IGRpci1cXHUwMDNlaV9zYi1cXHUwMDNlc19tYXhfbGlua3M7XFxuK1xcbitcXHRlcnJvciA9IC1FTUxJTks7XFxuK1xcdGlmIChtYXhfbGlua3MgXFx1MDAyNlxcdTAwMjYgZGlyLVxcdTAwM2VpX25saW5rIFxcdTAwM2U9IG1heF9saW5rcylcXG4rXFx0XFx0Z290byBlcnI7XFxuK1xcbitcXHRlcnJvciA9IHRyeV9icmVha19kZWxlZyhkaXIsIExFQVNFX0JSRUFLX0RJUl9DUkVBVEUsIGRpKTtcXG4rXFx0aWYgKGVycm9yKVxcbitcXHRcXHRnb3RvIGVycjtcXG4rXFxuK1xcdGRlID0gZGlyLVxcdTAwM2VpX29wLVxcdTAwM2Vta2RpcihpZG1hcCwgZGlyLCBkZW50cnksIG1vZGUpO1xcbitcXHRpZiAoSVNfRVJSKGRlKSkge1xcbitcXHRcXHRlcnJvciA9IFBUUl9FUlIoZGUpO1xcbitcXHRcXHRnb3RvIGVycjtcXG4rXFx0fVxcbitcXHRpZiAoZGUpIHtcXG4rXFx0XFx0ZHB1dChkZW50cnkpO1xcbitcXHRcXHRkZW50cnkgPSBkZTtcXG4rXFx0fVxcbitcXHRmc25vdGlmeV9ta2RpcihkaXIsIGRlbnRyeSk7XFxuK1xcdHJldHVybiBkZW50cnk7XFxuK1xcbitlcnI6XFxuK1xcdHJldHVybiBFUlJfUFRSKGVycm9yKTtcXG4rfVxcbitcXG4gLyoqXFxuICAqIHZmc19ta2RpciAtIGNyZWF0ZSBkaXJlY3RvcnkgcmV0dXJuaW5nIGNvcnJlY3QgZGVudHJ5IGlmIHBvc3NpYmxlXFxuICAqIEBpZG1hcDpcXHRcXHRpZG1hcCBvZiB0aGUgbW91bnQgdGhlIGlub2RlIHdhcyBmb3VuZCBmcm9tXFxuQEAgLTUyNDksNyArNTM2Nyw2IEBAIHN0cnVjdCBkZW50cnkgKnZmc19ta2RpcihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXFxuIFxcdFxcdFxcdCBzdHJ1Y3QgZGVsZWdhdGVkX2lub2RlICpkZWxlZ2F0ZWRfaW5vZGUpXFxuIHtcXG4gXFx0aW50IGVycm9yO1xcbi1cXHR1bnNpZ25lZCBtYXhfbGlua3MgPSBkaXItXFx1MDAzZWlfc2ItXFx1MDAzZXNfbWF4X2xpbmtzO1xcbiBcXHRzdHJ1Y3QgZGVudHJ5ICpkZTtcXG4gXFxuIFxcdGVycm9yID0gbWF5X2NyZWF0ZV9kZW50cnkoaWRtYXAsIGRpciwgZGVudHJ5KTtcXG5AQCAtNTI2NSwyNCArNTM4MiwxMiBAQCBzdHJ1Y3QgZGVudHJ5ICp2ZnNfbWtkaXIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxcbiBcXHRpZiAoZXJyb3IpXFxuIFxcdFxcdGdvdG8gZXJyO1xcbiBcXG4tXFx0ZXJyb3IgPSAtRU1MSU5LO1xcbi1cXHRpZiAobWF4X2xpbmtzIFxcdTAwMjZcXHUwMDI2IGRpci1cXHUwMDNlaV9ubGluayBcXHUwMDNlPSBtYXhfbGlua3MpXFxuLVxcdFxcdGdvdG8gZXJyO1xcbi1cXG4tXFx0ZXJyb3IgPSB0cnlfYnJlYWtfZGVsZWcoZGlyLCBMRUFTRV9CUkVBS19ESVJfQ1JFQVRFLCBkZWxlZ2F0ZWRfaW5vZGUpO1xcbi1cXHRpZiAoZXJyb3IpXFxuLVxcdFxcdGdvdG8gZXJyO1xcbi1cXG4tXFx0ZGUgPSBkaXItXFx1MDAzZWlfb3AtXFx1MDAzZW1rZGlyKGlkbWFwLCBkaXIsIGRlbnRyeSwgbW9kZSk7XFxuLVxcdGVycm9yID0gUFRSX0VSUihkZSk7XFxuLVxcdGlmIChJU19FUlIoZGUpKVxcbitcXHRkZSA9IHZmc19ta2Rpcl9ub19wZXJtKGlkbWFwLCBkaXIsIGRlbnRyeSwgbW9kZSwgZGVsZWdhdGVkX2lub2RlKTtcXG4rXFx0aWYgKElTX0VSUihkZSkpIHtcXG4rXFx0XFx0ZXJyb3IgPSBQVFJfRVJSKGRlKTtcXG4gXFx0XFx0Z290byBlcnI7XFxuLVxcdGlmIChkZSkge1xcbi1cXHRcXHRkcHV0KGRlbnRyeSk7XFxuLVxcdFxcdGRlbnRyeSA9IGRlO1xcbiBcXHR9XFxuLVxcdGZzbm90aWZ5X21rZGlyKGRpciwgZGVudHJ5KTtcXG4tXFx0cmV0dXJuIGRlbnRyeTtcXG4rXFx0cmV0dXJuIGRlO1xcbiBcXG4gZXJyOlxcbiBcXHRlbmRfY3JlYXRpbmcoZGVudHJ5KTtcXG5AQCAtNTU2OSw3ICs1Njc0LDcgQEAgaW50IGZpbGVuYW1lX3VubGlua2F0KGludCBkZmQsIHN0cnVjdCBmaWxlbmFtZSAqbmFtZSlcXG4gXFx0XFx0Z290byBleGl0X2Ryb3Bfd3JpdGU7XFxuIFxcbiBcXHQvKiBXaHkgbm90IGJlZm9yZT8gQmVjYXVzZSB3ZSB3YW50IGNvcnJlY3QgZXJyb3IgdmFsdWUgKi9cXG4tXFx0aWYgKHVubGlrZWx5KGxhc3QubmFtZVtsYXN0Lmxlbl0pKSB7XFxuK1xcdGlmICh1bmxpa2VseSh0cmFpbGluZ19zbGFzaGVzKGxhc3QpKSkge1xcbiBcXHRcXHRpZiAoZF9pc19kaXIoZGVudHJ5KSlcXG4gXFx0XFx0XFx0ZXJyb3IgPSAtRUlTRElSO1xcbiBcXHRcXHRlbHNlXFxuQEAgLTYxNzEsMTYgKzYyNzYsMTYgQEAgaW50IGZpbGVuYW1lX3JlbmFtZWF0MihpbnQgb2xkZGZkLCBzdHJ1Y3QgZmlsZW5hbWUgKmZyb20sXFxuIFxcdGlmIChmbGFncyBcXHUwMDI2IFJFTkFNRV9FWENIQU5HRSkge1xcbiBcXHRcXHRpZiAoIWRfaXNfZGlyKHJkLm5ld19kZW50cnkpKSB7XFxuIFxcdFxcdFxcdGVycm9yID0gLUVOT1RESVI7XFxuLVxcdFxcdFxcdGlmIChuZXdfbGFzdC5uYW1lW25ld19sYXN0Lmxlbl0pXFxuK1xcdFxcdFxcdGlmICh0cmFpbGluZ19zbGFzaGVzKG5ld19sYXN0KSlcXG4gXFx0XFx0XFx0XFx0Z290byBleGl0X3VubG9jaztcXG4gXFx0XFx0fVxcbiBcXHR9XFxuIFxcdC8qIHVubGVzcyB0aGUgc291cmNlIGlzIGEgZGlyZWN0b3J5IHRyYWlsaW5nIHNsYXNoZXMgZ2l2ZSAtRU5PVERJUiAqL1xcbiBcXHRpZiAoIWRfaXNfZGlyKHJkLm9sZF9kZW50cnkpKSB7XFxuIFxcdFxcdGVycm9yID0gLUVOT1RESVI7XFxuLVxcdFxcdGlmIChvbGRfbGFzdC5uYW1lW29sZF9sYXN0Lmxlbl0pXFxuK1xcdFxcdGlmICh0cmFpbGluZ19zbGFzaGVzKG9sZF9sYXN0KSlcXG4gXFx0XFx0XFx0Z290byBleGl0X3VubG9jaztcXG4tXFx0XFx0aWYgKCEoZmxhZ3MgXFx1MDAyNiBSRU5BTUVfRVhDSEFOR0UpIFxcdTAwMjZcXHUwMDI2IG5ld19sYXN0Lm5hbWVbbmV3X2xhc3QubGVuXSlcXG4rXFx0XFx0aWYgKCEoZmxhZ3MgXFx1MDAyNiBSRU5BTUVfRVhDSEFOR0UpIFxcdTAwMjZcXHUwMDI2IHRyYWlsaW5nX3NsYXNoZXMobmV3X2xhc3QpKVxcbiBcXHRcXHRcXHRnb3RvIGV4aXRfdW5sb2NrO1xcbiBcXHR9XFxuIFxcbmRpZmYgLS1naXQgYS9mcy9uZnMvZGlyLmMgYi9mcy9uZnMvZGlyLmNcXG5pbmRleCBjN2I3MjNjMTg2MjBjOS4uYzgxNWQ5YWE5YjY5ZGEgMTAwNjQ0XFxuLS0tIGEvZnMvbmZzL2Rpci5jXFxuKysrIGIvZnMvbmZzL2Rpci5jXFxuQEAgLTIxMjEsNiArMjEyMSw5IEBAIGludCBuZnNfYXRvbWljX29wZW4oc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcXG4gXFx0ZGZwcmludGsoVkZTLCBcXFwiTkZTOiBhdG9taWNfb3Blbiglcy8lbGx1KSwgJXBkXFxcXG5cXFwiLFxcbiBcXHRcXHRcXHRkaXItXFx1MDAzZWlfc2ItXFx1MDAzZXNfaWQsIGRpci1cXHUwMDNlaV9pbm8sIGRlbnRyeSk7XFxuIFxcbitcXHRpZiAoT19JU19NS0RJUihvcGVuX2ZsYWdzKSlcXG4rXFx0XFx0b3Blbl9mbGFncyBcXHUwMDI2PSB+T19DUkVBVDtcXG4rXFxuIFxcdGVyciA9IG5mc19jaGVja19mbGFncyhvcGVuX2ZsYWdzKTtcXG4gXFx0aWYgKGVycilcXG4gXFx0XFx0cmV0dXJuIGVycjtcXG5AQCAtMjMxMyw2ICsyMzE2LDkgQEAgaW50IG5mc19hdG9taWNfb3Blbl92MjMoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcXG4gXFx0ICovXFxuIFxcdGludCBlcnJvciA9IDA7XFxuIFxcbitcXHRpZiAoT19JU19NS0RJUihvcGVuX2ZsYWdzKSlcXG4rXFx0XFx0b3Blbl9mbGFncyBcXHUwMDI2PSB+T19DUkVBVDtcXG4rXFxuIFxcdGlmIChkZW50cnktXFx1MDAzZWRfbmFtZS5sZW4gXFx1MDAzZSBORlNfU0VSVkVSKGRpciktXFx1MDAzZW5hbWVsZW4pXFxuIFxcdFxcdHJldHVybiAtRU5BTUVUT09MT05HO1xcbiBcXG5kaWZmIC0tZ2l0IGEvZnMvb3Blbi5jIGIvZnMvb3Blbi5jXFxuaW5kZXggNDA4OTI1ZDdiZDBiNzcuLjg3ZTg4NjRkOTQ4MDg3IDEwMDY0NFxcbi0tLSBhL2ZzL29wZW4uY1xcbisrKyBiL2ZzL29wZW4uY1xcbkBAIC0xMTkwLDI5ICsxMTkwLDMwIEBAIGlubGluZSBpbnQgYnVpbGRfb3Blbl9mbGFncyhjb25zdCBzdHJ1Y3Qgb3Blbl9ob3cgKmhvdywgc3RydWN0IG9wZW5fZmxhZ3MgKm9wKVxcbiBcXHRpZiAoV0lMTF9DUkVBVEUoZmxhZ3MpKSB7XFxuIFxcdFxcdGlmIChob3ctXFx1MDAzZW1vZGUgXFx1MDAyNiB+U19JQUxMVUdPKVxcbiBcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4tXFx0XFx0b3AtXFx1MDAzZW1vZGUgPSBob3ctXFx1MDAzZW1vZGUgfCBTX0lGUkVHO1xcbitcXHRcXHRpZiAoT19JU19NS0RJUihmbGFncykpXFxuK1xcdFxcdFxcdG9wLVxcdTAwM2Vtb2RlID0gaG93LVxcdTAwM2Vtb2RlIHwgU19JRkRJUjtcXG4rXFx0XFx0ZWxzZVxcbitcXHRcXHRcXHRvcC1cXHUwMDNlbW9kZSA9IGhvdy1cXHUwMDNlbW9kZSB8IFNfSUZSRUc7XFxuIFxcdH0gZWxzZSB7XFxuIFxcdFxcdGlmIChob3ctXFx1MDAzZW1vZGUgIT0gMClcXG4gXFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIFxcdFxcdG9wLVxcdTAwM2Vtb2RlID0gMDtcXG4gXFx0fVxcbiBcXG4tXFx0LypcXG4tXFx0ICogQmxvY2sgYnVncyB3aGVyZSBPX0RJUkVDVE9SWSB8IE9fQ1JFQVQgY3JlYXRlZCByZWd1bGFyIGZpbGVzLlxcbi1cXHQgKiBOb3RlLCB0aGF0IGJsb2NraW5nIE9fRElSRUNUT1JZIHwgT19DUkVBVCBoZXJlIGFsc28gcHJvdGVjdHNcXG4tXFx0ICogT19UTVBGSUxFIGJlbG93IHdoaWNoIHJlcXVpcmVzIE9fRElSRUNUT1JZIGJlaW5nIHJhaXNlZC5cXG4tXFx0ICovXFxuLVxcdGlmICgoZmxhZ3MgXFx1MDAyNiAoT19ESVJFQ1RPUlkgfCBPX0NSRUFUKSkgPT0gKE9fRElSRUNUT1JZIHwgT19DUkVBVCkpXFxuLVxcdFxcdHJldHVybiAtRUlOVkFMO1xcbi1cXG4gXFx0LyogTm93IGhhbmRsZSB0aGUgY3JlYXRpdmUgaW1wbGVtZW50YXRpb24gb2YgT19UTVBGSUxFLiAqL1xcbiBcXHRpZiAoZmxhZ3MgXFx1MDAyNiBfX09fVE1QRklMRSkge1xcbiBcXHRcXHQvKlxcbiBcXHRcXHQgKiBJbiBvcmRlciB0byBlbnN1cmUgcHJvZ3JhbXMgZ2V0IGV4cGxpY2l0IGVycm9ycyB3aGVuIHRyeWluZ1xcbiBcXHRcXHQgKiB0byB1c2UgT19UTVBGSUxFIG9uIG9sZCBrZXJuZWxzIHdlIGVuZm9yY2UgdGhhdCBPX0RJUkVDVE9SWVxcbi1cXHRcXHQgKiBpcyByYWlzZWQgYWxvbmdzaWRlIF9fT19UTVBGSUxFLlxcbitcXHRcXHQgKiBpcyByYWlzZWQgYWxvbmdzaWRlIF9fT19UTVBGSUxFLCBidXQgd2l0aG91dCBPX0NSRUFULiBUaGVcXG4rXFx0XFx0ICogcmVhc29uIGZvciBkaXNhbGxvd2luZyBPX0NSRUFUfE9fVE1QRklMRSBpcyB0aGF0XFxuK1xcdFxcdCAqIE9fRElSRUNUT1JZfE9fQ1JFQVQgdXNlZCB0byB3b3JrIGFuZCBjcmVhdGVkIGEgcmVndWxhciBmaWxlXFxuK1xcdFxcdCAqIGlmIG5vdGhpbmcgZXhpc3RlZCBhdCB0aGUgb3BlbiBwYXRoLiBIZW5jZSwgYWxsb3dpbmcgdGhlXFxuK1xcdFxcdCAqIGNvbWJpbmF0aW9uIHdvdWxkIGhhdmUgY2F1c2VkIE9fQ1JFQVR8T19UTVBGSUxFIHRvIGNyZWF0ZSBhXFxuK1xcdFxcdCAqIHJlZ3VsYXIgKG5vbi10ZW1wb3JhcnkpIGZpbGUgb24gb2xkIGtlcm5lbHMsIHdoaWxlIHRoZSBjYWxsZXJcXG4rXFx0XFx0ICogd291bGQgYmVsaWV2ZSB0aGV5IGNyZWF0ZWQgYW4gYWN0dWFsIE9fVE1QRklMRS5cXG4gXFx0XFx0ICovXFxuLVxcdFxcdGlmICghKGZsYWdzIFxcdTAwMjYgT19ESVJFQ1RPUlkpKVxcbitcXHRcXHRpZiAoIShmbGFncyBcXHUwMDI2IE9fRElSRUNUT1JZKSB8fCAoZmxhZ3MgXFx1MDAyNiBPX0NSRUFUKSlcXG4gXFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIFxcdFxcdGlmICghKGFjY19tb2RlIFxcdTAwMjYgTUFZX1dSSVRFKSlcXG4gXFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuQEAgLTEyNjksNiArMTI3MCwxNSBAQCBpbmxpbmUgaW50IGJ1aWxkX29wZW5fZmxhZ3MoY29uc3Qgc3RydWN0IG9wZW5faG93ICpob3csIHN0cnVjdCBvcGVuX2ZsYWdzICpvcClcXG4gXFxuIFxcdG9wLVxcdTAwM2VpbnRlbnQgPSBmbGFncyBcXHUwMDI2IE9fUEFUSCA/IDAgOiBMT09LVVBfT1BFTjtcXG4gXFxuK1xcdC8qXFxuK1xcdCAqIFJlcXVlc3Rpbmcgd3JpdGUgYWNjZXNzIG9uIGEgZGlyZWN0b3J5IGNhbiBuZXZlciBzdWNjZWVkLiBSYXRoZXJcXG4rXFx0ICogdGhhbiBwZXJmb3JtaW5nIGEgcGF0aC13YWxrIHRvIGRldGVybWluZSB3aGV0aGVyIHRoZSB0YXJnZXQgaXNcXG4rXFx0ICogYWN0dWFsbHkgYSBkaXJlY3RvcnkgKC1FSVNESVIpIG9yIG5vdCAoLUVOT1RESVIpLCB3ZSBzaG9ydC1jaXJjdWl0XFxuK1xcdCAqIHRvIC1FTk9URElSLlxcbitcXHQgKi9cXG4rXFx0aWYgKChmbGFncyBcXHUwMDI2IE9fRElSRUNUT1JZKSBcXHUwMDI2XFx1MDAyNiAhKGZsYWdzIFxcdTAwMjYgX19PX1RNUEZJTEUpIFxcdTAwMjZcXHUwMDI2IChhY2NfbW9kZSBcXHUwMDI2IE1BWV9XUklURSkpXFxuK1xcdFxcdHJldHVybiAtRU5PVERJUjtcXG4rXFxuIFxcdGlmIChmbGFncyBcXHUwMDI2IE9fQ1JFQVQpIHtcXG4gXFx0XFx0b3AtXFx1MDAzZWludGVudCB8PSBMT09LVVBfQ1JFQVRFO1xcbiBcXHRcXHRpZiAoZmxhZ3MgXFx1MDAyNiBPX0VYQ0wpIHtcXG5kaWZmIC0tZ2l0IGEvZnMvc21iL2NsaWVudC9kaXIuYyBiL2ZzL3NtYi9jbGllbnQvZGlyLmNcXG5pbmRleCA4OGE0YTE3ODdmZjA0Ny4uNzViZjg2Y2MwNjEyMmUgMTAwNjQ0XFxuLS0tIGEvZnMvc21iL2NsaWVudC9kaXIuY1xcbisrKyBiL2ZzL3NtYi9jbGllbnQvZGlyLmNcXG5AQCAtNTM4LDYgKzUzOCw5IEBAIGludCBjaWZzX2F0b21pY19vcGVuKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkaXJlbnRyeSxcXG4gXFx0aWYgKHVubGlrZWx5KGNpZnNfZm9yY2VkX3NodXRkb3duKGNpZnNfc2IpKSlcXG4gXFx0XFx0cmV0dXJuIHNtYl9FSU8oc21iX2Vpb190cmFjZV9mb3JjZWRfc2h1dGRvd24pO1xcbiBcXG4rXFx0aWYgKE9fSVNfTUtESVIob2ZsYWdzKSlcXG4rXFx0XFx0b2ZsYWdzIFxcdTAwMjY9IH5PX0NSRUFUO1xcbitcXG4gXFx0LypcXG4gXFx0ICogUG9zaXggb3BlbiBpcyBvbmx5IGNhbGxlZCAoYXQgbG9va3VwIHRpbWUpIGZvciBmaWxlIGNyZWF0ZSBub3cuIEZvclxcbiBcXHQgKiBvcGVucyAocmF0aGVyIHRoYW4gY3JlYXRlcyksIGJlY2F1c2Ugd2UgZG8gbm90IGtub3cgaWYgaXQgaXMgYSBmaWxlXFxuZGlmZiAtLWdpdCBhL2ZzL3Zib3hzZi9kaXIuYyBiL2ZzL3Zib3hzZi9kaXIuY1xcbmluZGV4IGM1YmQzMjcxYWE5NjE2Li43N2FlMmY2OTZmZDQzNyAxMDA2NDRcXG4tLS0gYS9mcy92Ym94c2YvZGlyLmNcXG4rKysgYi9mcy92Ym94c2YvZGlyLmNcXG5AQCAtMzE4LDYgKzMxOCw5IEBAIHN0YXRpYyBpbnQgdmJveHNmX2Rpcl9hdG9taWNfb3BlbihzdHJ1Y3QgaW5vZGUgKnBhcmVudCwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxcbiBcXHR1NjQgaGFuZGxlO1xcbiBcXHRpbnQgZXJyO1xcbiBcXG4rXFx0aWYgKE9fSVNfTUtESVIoZmxhZ3MpKVxcbitcXHRcXHRmbGFncyBcXHUwMDI2PSB+T19DUkVBVDtcXG4rXFxuIFxcdGlmIChkX2luX2xvb2t1cChkZW50cnkpKSB7XFxuIFxcdFxcdHN0cnVjdCBkZW50cnkgKnJlcyA9IHZib3hzZl9kaXJfbG9va3VwKHBhcmVudCwgZGVudHJ5LCAwKTtcXG4gXFx0XFx0aWYgKHJlcyB8fCBkX3JlYWxseV9pc19wb3NpdGl2ZShkZW50cnkpKVxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2ZjbnRsLmggYi9pbmNsdWRlL2xpbnV4L2ZjbnRsLmhcXG5pbmRleCA2YWQ2YjllN2EyMjZhZi4uNmI3NTI3N2JlNTU5ZGQgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9mY250bC5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9mY250bC5oXFxuQEAgLTMwLDYgKzMwLDEyIEBAXFxuICAqL1xcbiAjZGVmaW5lIF9fT19SRUdVTEFSXFx0XFx0KDEgXFx1MDAzY1xcdTAwM2MgMzApXFxuIFxcbisjZGVmaW5lIE9fTUtESVJfTUFTS1xcdChPX0NSRUFUIHwgT19ESVJFQ1RPUlkpXFxuK3N0YXRpYyBpbmxpbmUgYm9vbCBPX0lTX01LRElSKHVuc2lnbmVkIGZsYWdzKVxcbit7XFxuK1xcdHJldHVybiAoZmxhZ3MgXFx1MDAyNiBPX01LRElSX01BU0spID09IE9fTUtESVJfTUFTSztcXG4rfVxcbitcXG4gLyogTGlzdCBvZiBhbGwgdmFsaWQgZmxhZ3MgZm9yIHRoZSBob3ctXFx1MDAzZXJlc29sdmUgYXJndW1lbnQ6ICovXFxuICNkZWZpbmUgVkFMSURfUkVTT0xWRV9GTEFHUyBcXFxcXFxuIFxcdChSRVNPTFZFX05PX1hERVYgfCBSRVNPTFZFX05PX01BR0lDTElOS1MgfCBSRVNPTFZFX05PX1NZTUxJTktTIHwgXFxcXFxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9maWxlc3lzdGVtcy8uZ2l0aWdub3JlIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZmlsZXN5c3RlbXMvLmdpdGlnbm9yZVxcbmluZGV4IGE3OGY4OTQxNTdkZTMzLi5kNzc5YTc5NDVjZjgwMyAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9maWxlc3lzdGVtcy8uZ2l0aWdub3JlXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZmlsZXN5c3RlbXMvLmdpdGlnbm9yZVxcbkBAIC0xLDQgKzEsNSBAQFxcbiAjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4rb3Blbl9vX2NyZWF0X29fZGlyXFxuIGRub3RpZnlfdGVzdFxcbiBkZXZwdHNfcHRzXFxuIGZjbG9nXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2ZpbGVzeXN0ZW1zL01ha2VmaWxlIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZmlsZXN5c3RlbXMvTWFrZWZpbGVcXG5pbmRleCBhN2VjMmJhMmRkODMzNC4uYjYwOTUwZjhiMTVjMjEgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZmlsZXN5c3RlbXMvTWFrZWZpbGVcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9maWxlc3lzdGVtcy9NYWtlZmlsZVxcbkBAIC0xLDcgKzEsNyBAQFxcbiAjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuIFxcbiBDRkxBR1MgKz0gJChLSERSX0lOQ0xVREVTKVxcbi1URVNUX0dFTl9QUk9HUyA6PSBkZXZwdHNfcHRzIGZpbGVfc3RyZXNzb3IgYW5vbl9pbm9kZV90ZXN0IGtlcm5mc190ZXN0IGZjbG9nXFxuK1RFU1RfR0VOX1BST0dTIDo9IG9wZW5fb19jcmVhdF9vX2RpciBkZXZwdHNfcHRzIGZpbGVfc3RyZXNzb3IgYW5vbl9pbm9kZV90ZXN0IGtlcm5mc190ZXN0IGZjbG9nXFxuIFRFU1RfR0VOX1BST0dTICs9IGlkbWFwcGVkX3RtcGZpbGVcXG4gVEVTVF9HRU5fUFJPR1NfRVhURU5ERUQgOj0gZG5vdGlmeV90ZXN0XFxuIFxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9maWxlc3lzdGVtcy9mY2xvZy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZmlsZXN5c3RlbXMvZmNsb2cuY1xcbmluZGV4IDU1MWM0YTBmMzk1YTEyLi41OTNhNTEzNmU5OTE5MiAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9maWxlc3lzdGVtcy9mY2xvZy5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZmlsZXN5c3RlbXMvZmNsb2cuY1xcbkBAIC02LDEwICs2LDggQEBcXG4gXFxuICNpbmNsdWRlIFxcdTAwM2Nhc3NlcnQuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2Vycm5vLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NmY250bC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjc2NoZWQuaFxcdTAwM2VcXG4tI2luY2x1ZGUgXFx1MDAzY3N0ZGlvLmhcXHUwMDNlXFxuLSNpbmNsdWRlIFxcdTAwM2NzdGRsaWIuaFxcdTAwM2VcXG4tI2luY2x1ZGUgXFx1MDAzY3N0cmluZy5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjdW5pc3RkLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NzeXMvbW91bnQuaFxcdTAwM2VcXG4gXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2ZpbGVzeXN0ZW1zL29wZW5fb19jcmVhdF9vX2Rpci5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZmlsZXN5c3RlbXMvb3Blbl9vX2NyZWF0X29fZGlyLmNcXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi5kZjNjZGJhZTJjODUyNFxcbi0tLSAvZGV2L251bGxcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9maWxlc3lzdGVtcy9vcGVuX29fY3JlYXRfb19kaXIuY1xcbkBAIC0wLDAgKzEsMTk3IEBAXFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuKyNpbmNsdWRlIFxcdTAwM2NzeXMvc3RhdC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjc3lzL3N5c2NhbGwuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2Vycm5vLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW1pdHMuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2ZjbnRsLmhcXHUwMDNlXFxuK1xcbisjaW5jbHVkZSBcXFwia3NlbGZ0ZXN0X2hhcm5lc3MuaFxcXCJcXG4rXFxuK3N0YXRpYyBpbmxpbmUgaW50IG9wZW5fb19jcmVhdF9vX2RpcihpbnQgZGZkLCBjb25zdCBjaGFyICpwYXRobmFtZSxcXG4rXFx0XFx0XFx0XFx0ICAgICBtb2RlX3QgbW9kZSwgdW5zaWduZWQgaW50IGZsYWdzKVxcbit7XFxuK1xcdHJldHVybiBzeXNjYWxsKF9fTlJfb3BlbmF0LCBkZmQsIHBhdGhuYW1lLFxcbitcXHRcXHQgICAgICAgZmxhZ3MgfCBPX0RJUkVDVE9SWSB8IE9fQ1JFQVQsIG1vZGUpO1xcbit9XFxuK1xcbisjZGVmaW5lIG9wZW5fb19jcmVhdF9vX2Rpcl9jaGVja2VkX2ZsYWdzKGRmZCwgcGF0aG5hbWUsIGZsYWdzKSAoe1xcdFxcXFxcXG4rXFx0c3RydWN0IHN0YXQgX19zdDtcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdGludCBfX2ZkID0gb3Blbl9vX2NyZWF0X29fZGlyKGRmZCwgcGF0aG5hbWUsIFNfSVJXWFUsIGZsYWdzKTtcXHRcXFxcXFxuK1xcdEFTU0VSVF9HRShfX2ZkLCAwKTtcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdEFTU0VSVF9FUShmc3RhdChfX2ZkLCBcXHUwMDI2X19zdCksIDApO1xcdFxcdFxcdFxcdFxcXFxcXG4rXFx0RVhQRUNUX1RSVUUoU19JU0RJUihfX3N0LnN0X21vZGUpKTtcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdF9fZmQ7XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbit9KVxcbitcXG4rI2RlZmluZSBvcGVuX29fY3JlYXRfb19kaXJfY2hlY2tlZChkZmQsIHBhdGhuYW1lKSBcXFxcXFxuK1xcdG9wZW5fb19jcmVhdF9vX2Rpcl9jaGVja2VkX2ZsYWdzKGRmZCwgcGF0aG5hbWUsIDApXFxuK1xcbitGSVhUVVJFKG9wZW5fb19jcmVhdF9vX2Rpcikge1xcbitcXHRjaGFyIGRpcnBhdGhbUEFUSF9NQVhdO1xcbitcXHRpbnQgZGZkO1xcbit9O1xcbitcXG4rRklYVFVSRV9TRVRVUChvcGVuX29fY3JlYXRfb19kaXIpXFxuK3tcXG4rXFx0c3RyY3B5KHNlbGYtXFx1MDAzZWRpcnBhdGgsIFxcXCIvdG1wL29wZW5fb19jcmVhdF9vX2Rpcl90ZXN0LlhYWFhYWFxcXCIpO1xcbitcXHRBU1NFUlRfTkUobWtkdGVtcChzZWxmLVxcdTAwM2VkaXJwYXRoKSwgTlVMTCk7XFxuK1xcdHNlbGYtXFx1MDAzZWRmZCA9IG9wZW4oc2VsZi1cXHUwMDNlZGlycGF0aCwgT19ESVJFQ1RPUlkpO1xcbitcXHRBU1NFUlRfR0Uoc2VsZi1cXHUwMDNlZGZkLCAwKTtcXG4rfVxcbitcXG4rRklYVFVSRV9URUFSRE9XTihvcGVuX29fY3JlYXRfb19kaXIpXFxuK3tcXG4rXFx0Y2xvc2Uoc2VsZi1cXHUwMDNlZGZkKTtcXG4rXFx0cm1kaXIoc2VsZi1cXHUwMDNlZGlycGF0aCk7XFxuK31cXG4rXFxuKy8qIERvZXMgb3Blbl9vX2NyZWF0X29fZGlyIHJldHVybiBhIGZkIGF0IGFsbD8gKi9cXG4rVEVTVF9GKG9wZW5fb19jcmVhdF9vX2RpciwgcmV0dXJuc19mZClcXG4re1xcbitcXHRpbnQgZmQgPSBvcGVuX29fY3JlYXRfb19kaXJfY2hlY2tlZChzZWxmLVxcdTAwM2VkZmQsIFxcXCJuZXdkaXJcXFwiKTtcXG4rXFx0RVhQRUNUX0VRKGNsb3NlKGZkKSwgMCk7XFxuK1xcdEVYUEVDVF9FUSh1bmxpbmthdChzZWxmLVxcdTAwM2VkZmQsIFxcXCJuZXdkaXJcXFwiLCBBVF9SRU1PVkVESVIpLCAwKTtcXG4rfVxcbitcXG4rLyogVGhlIGZkIG11c3QgcmVmZXIgdG8gdGhlIGRpcmVjdG9yeSB0aGF0IHdhcyBqdXN0IGNyZWF0ZWQuICovXFxuK1RFU1RfRihvcGVuX29fY3JlYXRfb19kaXIsIGZkX2lzX2NyZWF0ZWRfZGlyKVxcbit7XFxuK1xcdGludCBmZDtcXG4rXFx0c3RydWN0IHN0YXQgc3RfdmlhX2ZkLCBzdF92aWFfcGF0aDtcXG4rXFx0Y2hhciBwYXRoW1BBVEhfTUFYXTtcXG4rXFxuK1xcdGZkID0gb3Blbl9vX2NyZWF0X29fZGlyX2NoZWNrZWQoc2VsZi1cXHUwMDNlZGZkLCBcXFwiY2hlY2tkaXJcXFwiKTtcXG4rXFxuK1xcdEFTU0VSVF9FUShmc3RhdChmZCwgXFx1MDAyNnN0X3ZpYV9mZCksIDApO1xcbitcXG4rXFx0c25wcmludGYocGF0aCwgc2l6ZW9mKHBhdGgpLCBcXFwiJXMvY2hlY2tkaXJcXFwiLCBzZWxmLVxcdTAwM2VkaXJwYXRoKTtcXG4rXFx0QVNTRVJUX0VRKHN0YXQocGF0aCwgXFx1MDAyNnN0X3ZpYV9wYXRoKSwgMCk7XFxuK1xcbitcXHRFWFBFQ1RfRVEoc3RfdmlhX2ZkLnN0X2lubywgc3RfdmlhX3BhdGguc3RfaW5vKTtcXG4rXFx0RVhQRUNUX0VRKHN0X3ZpYV9mZC5zdF9kZXYsIHN0X3ZpYV9wYXRoLnN0X2Rldik7XFxuK1xcbitcXHRFWFBFQ1RfRVEoY2xvc2UoZmQpLCAwKTtcXG4rXFx0RVhQRUNUX0VRKHJtZGlyKHBhdGgpLCAwKTtcXG4rfVxcbitcXG4rLyogTWlzc2luZyBwYXJlbnQgY29tcG9uZW50IG11c3QgZmFpbCB3aXRoIEVOT0VOVC4gKi9cXG4rVEVTVF9GKG9wZW5fb19jcmVhdF9vX2RpciwgZW5vZW50X21pc3NpbmdfcGFyZW50KVxcbit7XFxuK1xcdEVYUEVDVF9FUShvcGVuX29fY3JlYXRfb19kaXIoc2VsZi1cXHUwMDNlZGZkLCBcXFwibm9uZXhpc3RlbnQvY2hpbGRcXFwiLCBTX0lSV1hVLCAwKSwgLTEpO1xcbitcXHRFWFBFQ1RfRVEoZXJybm8sIEVOT0VOVCk7XFxuK31cXG4rXFxuKy8qIEFuIGludmFsaWQgZGZkIG11c3QgZmFpbCB3aXRoIEVCQURGLiAqL1xcbitURVNUX0Yob3Blbl9vX2NyZWF0X29fZGlyLCBlYmFkZilcXG4re1xcbitcXHRFWFBFQ1RfRVEob3Blbl9vX2NyZWF0X29fZGlyKC00MiwgXFxcImJhZGZkaXJcXFwiLCBTX0lSV1hVLCAwKSwgLTEpO1xcbitcXHRFWFBFQ1RfRVEoZXJybm8sIEVCQURGKTtcXG4rfVxcbitcXG4rLyogQSBkZmQgdGhhdCBwb2ludHMgdG8gYSBmaWxlIChub3QgYSBkaXJlY3RvcnkpIG11c3QgZmFpbCB3aXRoIEVOT1RESVIuICovXFxuK1RFU1RfRihvcGVuX29fY3JlYXRfb19kaXIsIGVub3RkaXJfZGZkKVxcbit7XFxuK1xcdGludCBmaWxlX2ZkO1xcbitcXG4rXFx0ZmlsZV9mZCA9IG9wZW5hdChzZWxmLVxcdTAwM2VkZmQsIFxcXCJmaWxlXFxcIixcXG4rXFx0XFx0XFx0IE9fQ1JFQVQgfCBPX1dST05MWSwgU19JUldYVSk7XFxuK1xcdEFTU0VSVF9HRShmaWxlX2ZkLCAwKTtcXG4rXFxuK1xcdEVYUEVDVF9FUShvcGVuX29fY3JlYXRfb19kaXIoZmlsZV9mZCwgXFxcInN1YmRpclxcXCIsIFNfSVJXWFUsIDApLCAtMSk7XFxuK1xcdEVYUEVDVF9FUShlcnJubywgRU5PVERJUik7XFxuK1xcbitcXHRFWFBFQ1RfRVEoY2xvc2UoZmlsZV9mZCksIDApO1xcbitcXHRFWFBFQ1RfRVEodW5saW5rYXQoc2VsZi1cXHUwMDNlZGZkLCBcXFwiZmlsZVxcXCIsIDApLCAwKTtcXG4rfVxcbitcXG4rLypcXG4rICogT19FWENMIHRvZ2V0aGVyIHdpdGggT19DUkVBVHxPX0RJUkVDVE9SWSBtdXN0IGZhaWwgd2l0aCBFRVhJU1Qgd2hlblxcbisgKiB0aGUgdGFyZ2V0IGRpcmVjdG9yeSBhbHJlYWR5IGV4aXN0cy5cXG4rICovXFxuK1RFU1RfRihvcGVuX29fY3JlYXRfb19kaXIsIG9fZXhjbF9lZXhpc3QpXFxuK3tcXG4rXFx0aW50IGZkO1xcbitcXG4rXFx0ZmQgPSBvcGVuX29fY3JlYXRfb19kaXJfY2hlY2tlZF9mbGFncyhzZWxmLVxcdTAwM2VkZmQsIFxcXCJleGNsZGlyXFxcIiwgT19FWENMKTtcXG4rXFx0RVhQRUNUX0VRKGNsb3NlKGZkKSwgMCk7XFxuK1xcbitcXHRFWFBFQ1RfRVEob3Blbl9vX2NyZWF0X29fZGlyKHNlbGYtXFx1MDAzZWRmZCwgXFxcImV4Y2xkaXJcXFwiLCBTX0lSV1hVLCBPX0VYQ0wpLCAtMSk7XFxuK1xcdEVYUEVDVF9FUShlcnJubywgRUVYSVNUKTtcXG4rXFxuK1xcdEVYUEVDVF9FUSh1bmxpbmthdChzZWxmLVxcdTAwM2VkZmQsIFxcXCJleGNsZGlyXFxcIiwgQVRfUkVNT1ZFRElSKSwgMCk7XFxuK31cXG4rXFxuKy8qXFxuKyAqIE9fQ1JFQVR8T19ESVJFQ1RPUlkgb24gYSBwYXRoIHRoYXQgYWxyZWFkeSBleGlzdHMgYXMgYSByZWd1bGFyIGZpbGVcXG4rICogbXVzdCBmYWlsIHdpdGggRU5PVERJUi5cXG4rICovXFxuK1RFU1RfRihvcGVuX29fY3JlYXRfb19kaXIsIGV4aXN0aW5nX2ZpbGVfZW5vdGRpcilcXG4re1xcbitcXHRpbnQgZmlsZV9mZDtcXG4rXFxuK1xcdGZpbGVfZmQgPSBvcGVuYXQoc2VsZi1cXHUwMDNlZGZkLCBcXFwicmVnZmlsZVxcXCIsXFxuK1xcdFxcdFxcdCBPX0NSRUFUIHwgT19XUk9OTFksIFNfSVJXWFUpO1xcbitcXHRBU1NFUlRfR0UoZmlsZV9mZCwgMCk7XFxuK1xcdEVYUEVDVF9FUShjbG9zZShmaWxlX2ZkKSwgMCk7XFxuK1xcbitcXHRFWFBFQ1RfRVEob3Blbl9vX2NyZWF0X29fZGlyKHNlbGYtXFx1MDAzZWRmZCwgXFxcInJlZ2ZpbGVcXFwiLCBTX0lSV1hVLCAwKSwgLTEpO1xcbitcXHRFWFBFQ1RfRVEoZXJybm8sIEVOT1RESVIpO1xcbitcXG4rXFx0RVhQRUNUX0VRKHVubGlua2F0KHNlbGYtXFx1MDAzZWRmZCwgXFxcInJlZ2ZpbGVcXFwiLCAwKSwgMCk7XFxuK31cXG4rXFxuKy8qXFxuKyAqIE9fQ1JFQVR8T19ESVJFQ1RPUlkgY29tYmluZWQgd2l0aCBhIHdyaXRhYmxlIGFjY2VzcyBtb2RlIG11c3QgYmVcXG4rICogcmVqZWN0ZWQ6IGEgZGlyZWN0b3J5IGNhbm5vdCBiZSBvcGVuZWQgZm9yIHdyaXRpbmcuXFxuKyAqL1xcbitURVNUX0Yob3Blbl9vX2NyZWF0X29fZGlyLCByZWplY3RzX3dyaXRhYmxlX2FjY19tb2RlKVxcbit7XFxuK1xcdEVYUEVDVF9FUShvcGVuX29fY3JlYXRfb19kaXIoc2VsZi1cXHUwMDNlZGZkLCBcXFwicmR3cmRpclxcXCIsIFNfSVJXWFUsIE9fUkRXUiksIC0xKTtcXG4rXFx0RVhQRUNUX0VRKGVycm5vLCBFTk9URElSKTtcXG4rXFx0LyogQ2xlYW4gdXAgaWYgdGhlIGtlcm5lbCBjcmVhdGVkIHRoZSBkaXJlY3RvcnkgYW55d2F5LiAqL1xcbitcXHR1bmxpbmthdChzZWxmLVxcdTAwM2VkZmQsIFxcXCJyZHdyZGlyXFxcIiwgQVRfUkVNT1ZFRElSKTtcXG4rfVxcbitcXG4rLypcXG4rICogb3BlbmF0KE9fQ1JFQVQpIHdpdGggYSB0cmFpbGluZyBzbGFzaCBidXQgd2l0aG91dCBPX0RJUkVDVE9SWVxcbisgKiBtdXN0IGZhaWwgd2l0aCBFSVNESVIgYW5kIG11c3Qgbm90IGNyZWF0ZSBhbnl0aGluZyBhdCB0aGUgcGF0aC5cXG4rICovXFxuK1RFU1RfRihvcGVuX29fY3JlYXRfb19kaXIsIHRyYWlsaW5nX3NsYXNoX25vX29fZGlyKVxcbit7XFxuK1xcdGludCBmZDtcXG4rXFx0c3RydWN0IHN0YXQgc3Q7XFxuK1xcbitcXHRmZCA9IG9wZW5hdChzZWxmLVxcdTAwM2VkZmQsIFxcXCJ0cmFpbGluZy9cXFwiLCBPX0NSRUFUIHwgT19XUk9OTFksIFNfSVJXWFUpO1xcbitcXHRFWFBFQ1RfRVEoZmQsIC0xKTtcXG4rXFx0RVhQRUNUX0VRKGVycm5vLCBFSVNESVIpO1xcbitcXG4rXFx0RVhQRUNUX0VRKGZzdGF0YXQoc2VsZi1cXHUwMDNlZGZkLCBcXFwidHJhaWxpbmdcXFwiLCBcXHUwMDI2c3QsIDApLCAtMSk7XFxuK1xcdEVYUEVDVF9FUShlcnJubywgRU5PRU5UKTtcXG4rXFxuK1xcdC8qIEJlc3QtZWZmb3J0IGNsZWFudXAgaW4gY2FzZSB0aGUga2VybmVsIGxlZnQgYSBmaWxlIGJlaGluZC4gKi9cXG4rXFx0aWYgKGZkIFxcdTAwM2U9IDApXFxuK1xcdFxcdGNsb3NlKGZkKTtcXG4rXFx0dW5saW5rYXQoc2VsZi1cXHUwMDNlZGZkLCBcXFwidHJhaWxpbmdcXFwiLCAwKTtcXG4rfVxcbitcXG4rLypcXG4rICogVGhlIHJldHVybmVkIGZkIG11c3QgYmUgdXNhYmxlIGFzIGEgZGZkIGZvciBmdXJ0aGVyICphdCgpIGNhbGxzLlxcbisgKi9cXG4rVEVTVF9GKG9wZW5fb19jcmVhdF9vX2RpciwgZmRfdXNhYmxlX2FzX2RmZClcXG4re1xcbitcXHRpbnQgcGFyZW50X2ZkLCBjaGlsZF9mZDtcXG4rXFx0Y2hhciBwYXRoW1BBVEhfTUFYXTtcXG4rXFxuK1xcdHBhcmVudF9mZCA9IG9wZW5fb19jcmVhdF9vX2Rpcl9jaGVja2VkKHNlbGYtXFx1MDAzZWRmZCwgXFxcInBhcmVudFxcXCIpO1xcbitcXHRjaGlsZF9mZCA9IG9wZW5fb19jcmVhdF9vX2Rpcl9jaGVja2VkKHBhcmVudF9mZCwgXFxcImNoaWxkXFxcIik7XFxuK1xcbitcXHRFWFBFQ1RfRVEoY2xvc2UoY2hpbGRfZmQpLCAwKTtcXG4rXFx0RVhQRUNUX0VRKGNsb3NlKHBhcmVudF9mZCksIDApO1xcbitcXG4rXFx0c25wcmludGYocGF0aCwgc2l6ZW9mKHBhdGgpLCBcXFwiJXMvcGFyZW50L2NoaWxkXFxcIiwgc2VsZi1cXHUwMDNlZGlycGF0aCk7XFxuK1xcdEVYUEVDVF9FUShybWRpcihwYXRoKSwgMCk7XFxuK1xcdHNucHJpbnRmKHBhdGgsIHNpemVvZihwYXRoKSwgXFxcIiVzL3BhcmVudFxcXCIsIHNlbGYtXFx1MDAzZWRpcnBhdGgpO1xcbitcXHRFWFBFQ1RfRVEocm1kaXIocGF0aCksIDApO1xcbit9XFxuK1xcbitURVNUX0hBUk5FU1NfTUFJTlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wNFQxNjo1OTo1MC44NDQ1ODE5MDRaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE1MDM1MTIwMDQxOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCI5UF9GU1wiLFxuICAgIFwiQ0VQSF9GU1wiLFxuICAgIFwiRlVTRV9GU1wiLFxuICAgIFwiR0ZTMl9GU1wiLFxuICAgIFwiTkZTX0ZTXCIsXG4gICAgXCJDSUZTXCIsXG4gICAgXCJWQk9YU0ZfRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJsb29rdXBfb3BlblwiLFxuICAgIFwiYXRvbWljX29wZW5cIixcbiAgICBcIm1heV9vX2NyZWF0ZVwiLFxuICAgIFwiYnVpbGRfb3Blbl9mbGFnc1wiLFxuICAgIFwiZG9fb3BlblwiLFxuICAgIFwiZGVudHJ5X2NyZWF0ZVwiLFxuICAgIFwidmZzX21rZGlyXCIsXG4gICAgXCJ2ZnNfY3JlYXRlXCIsXG4gICAgXCJvcGVuX2xhc3RfbG9va3Vwc1wiLFxuICAgIFwibG9va3VwX2Zhc3RfZm9yX29wZW5cIixcbiAgICBcIm1heV9jcmVhdGVfaW5fc3RpY2t5XCIsXG4gICAgXCJmaWxlbmFtZV9jcmVhdGVcIixcbiAgICBcImZpbGVuYW1lX3VubGlua2F0XCIsXG4gICAgXCJmaWxlbmFtZV9yZW5hbWVhdDJcIixcbiAgICBcInY5ZnNfdmZzX2F0b21pY19vcGVuXCIsXG4gICAgXCJ2OWZzX3Zmc19hdG9taWNfb3Blbl9kb3RsXCIsXG4gICAgXCJjZXBoX2F0b21pY19vcGVuXCIsXG4gICAgXCJmdXNlX2F0b21pY19vcGVuXCIsXG4gICAgXCJnZnMyX2F0b21pY19vcGVuXCIsXG4gICAgXCJuZnNfYXRvbWljX29wZW5cIixcbiAgICBcIm5mc19hdG9taWNfb3Blbl92MjNcIixcbiAgICBcImNpZnNfYXRvbWljX29wZW5cIixcbiAgICBcInZib3hzZl9kaXJfYXRvbWljX29wZW5cIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIHN1cHBvcnQgZm9yIGNyZWF0aW5nIGRpcmVjdG9yaWVzIHZpYSBgb3BlbmF0KC4uLiwgT19DUkVBVCB8IE9fRElSRUNUT1JZLCAuLi4pYC4gSXQgbW9kaWZpZXMgY29yZSBWRlMgcGF0aCByZXNvbHV0aW9uIGFuZCBmaWxlIGNyZWF0aW9uIGxvZ2ljIGluIGBmcy9uYW1laS5jYCBhbmQgYGZzL29wZW4uY2AsIGluY2x1ZGluZyBgbG9va3VwX29wZW5gLCBgYXRvbWljX29wZW5gLCBhbmQgYHZmc19ta2RpcmAuIEl0IGFsc28gdXBkYXRlcyBtdWx0aXBsZSBmaWxlc3lzdGVtcyAoOXAsIGNlcGgsIGZ1c2UsIGdmczIsIG5mcywgc21iLCB2Ym94c2YpIHRvIGhhbmRsZSB0aGUgbmV3IGZsYWcgY29tYmluYXRpb24uIFRoaXMgaXMgYSBzaWduaWZpY2FudCBmdW5jdGlvbmFsIGNoYW5nZSB0byBjb3JlIGtlcm5lbCBsb2dpYyBhbmQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdFxuICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LFxuICAgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA5Nzk0OTA3N2Q0ZWQ3NjdlMmNkNGNkNmZhZmI0NThiZWE1ZmM0ODU4XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBKdWwgNCAxNjo1OTo0OCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2ZzLzlwL3Zmc19pbm9kZS5jIGIvZnMvOXAvdmZzX2lub2RlLmNcbmluZGV4IDU3ODNkMDMzNmY5NmFjLi5iYjU1NWU1YmEyNjE1MCAxMDA2NDRcbi0tLSBhL2ZzLzlwL3Zmc19pbm9kZS5jXG4rKysgYi9mcy85cC92ZnNfaW5vZGUuY1xuQEAgLTc3Nyw2ICs3NzcsOSBAQCB2OWZzX3Zmc19hdG9taWNfb3BlbihzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxuIFx0c3RydWN0IGlub2RlICppbm9kZTtcbiBcdGludCBwOV9vbW9kZTtcbiBcbitcdGlmIChPX0lTX01LRElSKGZsYWdzKSlcbitcdFx0ZmxhZ3MgXHUwMDI2PSB+T19DUkVBVDtcbitcbiBcdGlmIChkX2luX2xvb2t1cChkZW50cnkpKSB7XG4gXHRcdHN0cnVjdCBkZW50cnkgKnJlcyA9IHY5ZnNfdmZzX2xvb2t1cChkaXIsIGRlbnRyeSwgMCk7XG4gXHRcdGlmIChyZXMgfHwgZF9yZWFsbHlfaXNfcG9zaXRpdmUoZGVudHJ5KSlcbmRpZmYgLS1naXQgYS9mcy85cC92ZnNfaW5vZGVfZG90bC5jIGIvZnMvOXAvdmZzX2lub2RlX2RvdGwuY1xuaW5kZXggZjczOTZkMjBjYjZjZGMuLmZmM2ZhY2I0MjBjMjI0IDEwMDY0NFxuLS0tIGEvZnMvOXAvdmZzX2lub2RlX2RvdGwuY1xuKysrIGIvZnMvOXAvdmZzX2lub2RlX2RvdGwuY1xuQEAgLTIzOSw2ICsyMzksOSBAQCB2OWZzX3Zmc19hdG9taWNfb3Blbl9kb3RsKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXG4gXHRzdHJ1Y3Qgdjlmc19zZXNzaW9uX2luZm8gKnY5c2VzO1xuIFx0c3RydWN0IHBvc2l4X2FjbCAqcGFjbCA9IE5VTEwsICpkYWNsID0gTlVMTDtcbiBcbitcdGlmIChPX0lTX01LRElSKGZsYWdzKSlcbitcdFx0ZmxhZ3MgXHUwMDI2PSB+T19DUkVBVDtcbitcbiBcdGlmIChkX2luX2xvb2t1cChkZW50cnkpKSB7XG4gXHRcdHN0cnVjdCBkZW50cnkgKnJlcyA9IHY5ZnNfdmZzX2xvb2t1cChkaXIsIGRlbnRyeSwgMCk7XG4gXHRcdGlmIChyZXMgfHwgZF9yZWFsbHlfaXNfcG9zaXRpdmUoZGVudHJ5KSlcbmRpZmYgLS1naXQgYS9mcy9jZXBoL2ZpbGUuYyBiL2ZzL2NlcGgvZmlsZS5jXG5pbmRleCA3MTE2MWYyYjIxNTEzNi4uZTc5YWJkYmQ5ZjYxZTkgMTAwNjQ0XG4tLS0gYS9mcy9jZXBoL2ZpbGUuY1xuKysrIGIvZnMvY2VwaC9maWxlLmNcbkBAIC04MTEsNiArODExLDkgQEAgaW50IGNlcGhfYXRvbWljX29wZW4oc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcbiBcdCAgICAgIGRpciwgY2VwaF92aW5vcChkaXIpLCBkZW50cnksIGRlbnRyeSxcbiBcdCAgICAgIGRfdW5oYXNoZWQoZGVudHJ5KSA/IFwidW5oYXNoZWRcIiA6IFwiaGFzaGVkXCIsIGZsYWdzLCBtb2RlKTtcbiBcbitcdGlmIChPX0lTX01LRElSKGZsYWdzKSlcbitcdFx0ZmxhZ3MgXHUwMDI2PSB+T19DUkVBVDtcbitcbiBcdGlmIChkZW50cnktXHUwMDNlZF9uYW1lLmxlbiBcdTAwM2UgTkFNRV9NQVgpXG4gXHRcdHJldHVybiAtRU5BTUVUT09MT05HO1xuIFxuZGlmZiAtLWdpdCBhL2ZzL2Z1c2UvZGlyLmMgYi9mcy9mdXNlL2Rpci5jXG5pbmRleCAwZTJhMTAzOWZhNDNlYS4uZTAxODY5NTY1ZDVlZTUgMTAwNjQ0XG4tLS0gYS9mcy9mdXNlL2Rpci5jXG4rKysgYi9mcy9mdXNlL2Rpci5jXG5AQCAtOTM1LDYgKzkzNSw5IEBAIHN0YXRpYyBpbnQgZnVzZV9hdG9taWNfb3BlbihzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZW50cnksXG4gXHRzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCA9IGZpbGVfbW50X2lkbWFwKGZpbGUpO1xuIFx0c3RydWN0IGZ1c2VfY29ubiAqZmMgPSBnZXRfZnVzZV9jb25uKGRpcik7XG4gXG4rXHRpZiAoT19JU19NS0RJUihmbGFncykpXG4rXHRcdGZsYWdzIFx1MDAyNj0gfk9fQ1JFQVQ7XG4rXG4gXHRpZiAoZnVzZV9pc19iYWQoZGlyKSlcbiBcdFx0cmV0dXJuIC1FSU87XG4gXG5kaWZmIC0tZ2l0IGEvZnMvZ2ZzMi9pbm9kZS5jIGIvZnMvZ2ZzMi9pbm9kZS5jXG5pbmRleCA4YTc3Nzk0YmJkNGFmYy4uOTg1OWFlMDM0MWE5OWUgMTAwNjQ0XG4tLS0gYS9mcy9nZnMyL2lub2RlLmNcbisrKyBiL2ZzL2dmczIvaW5vZGUuY1xuQEAgLTEzODcsNiArMTM4Nyw5IEBAIHN0YXRpYyBpbnQgZ2ZzMl9hdG9taWNfb3BlbihzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxuIHtcbiBcdGJvb2wgZXhjbCA9ICEhKGZsYWdzIFx1MDAyNiBPX0VYQ0wpO1xuIFxuK1x0aWYgKE9fSVNfTUtESVIoZmxhZ3MpKVxuK1x0XHRmbGFncyBcdTAwMjY9IH5PX0NSRUFUO1xuK1xuIFx0aWYgKGRfaW5fbG9va3VwKGRlbnRyeSkpIHtcbiBcdFx0c3RydWN0IGRlbnRyeSAqZCA9IF9fZ2ZzMl9sb29rdXAoZGlyLCBkZW50cnksIGZpbGUpO1xuIFx0XHRpZiAoZmlsZS1cdTAwM2VmX21vZGUgXHUwMDI2IEZNT0RFX09QRU5FRCkge1xuZGlmZiAtLWdpdCBhL2ZzL25hbWVpLmMgYi9mcy9uYW1laS5jXG5pbmRleCAxOWNlNDNjOWE2ZTY2Mi4uMDMwY2FjNGZiZTU1NWUgMTAwNjQ0XG4tLS0gYS9mcy9uYW1laS5jXG4rKysgYi9mcy9uYW1laS5jXG5AQCAtMTM4MiwxMyArMTM4MiwxMiBAQCBpbnQgbWF5X2xpbmthdChzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgY29uc3Qgc3RydWN0IHBhdGggKmxpbmspXG4gXG4gLyoqXG4gICogbWF5X2NyZWF0ZV9pbl9zdGlja3kgLSBDaGVjayB3aGV0aGVyIGFuIE9fQ1JFQVQgb3BlbiBpbiBhIHN0aWNreSBkaXJlY3Rvcnlcbi0gKlx0XHRcdCAgc2hvdWxkIGJlIGFsbG93ZWQsIG9yIG5vdCwgb24gZmlsZXMgdGhhdCBhbHJlYWR5XG4tICpcdFx0XHQgIGV4aXN0LlxuKyAqXHRcdFx0ICBzaG91bGQgYmUgYWxsb3dlZCwgb3Igbm90XG4gICogQGlkbWFwOiBpZG1hcCBvZiB0aGUgbW91bnQgdGhlIGlub2RlIHdhcyBmb3VuZCBmcm9tXG4gICogQG5kOiBuYW1laWRhdGEgcGF0aHdhbGsgZGF0YVxuICAqIEBpbm9kZTogdGhlIGlub2RlIG9mIHRoZSBmaWxlIHRvIG9wZW5cbiAgKlxuLSAqIEJsb2NrIGFuIE9fQ1JFQVQgb3BlbiBvZiBhIEZJRk8gKG9yIGEgcmVndWxhciBmaWxlKSB3aGVuOlxuKyAqIEJsb2NrIGFuIE9fQ1JFQVQgb3BlbiBvZiBhIEZJRk8gKG9yIGEgcmVndWxhciBmaWxlL2RpcmVjdG9yeSkgd2hlbjpcbiAgKiAgIC0gc3lzY3RsX3Byb3RlY3RlZF9maWZvcyAob3Igc3lzY3RsX3Byb3RlY3RlZF9yZWd1bGFyKSBpcyBlbmFibGVkXG4gICogICAtIHRoZSBmaWxlIGFscmVhZHkgZXhpc3RzXG4gICogICAtIHdlIGFyZSBpbiBhIHN0aWNreSBkaXJlY3RvcnlcbkBAIC0xNDE2LDYgKzE0MTUsMTQgQEAgc3RhdGljIGludCBtYXlfY3JlYXRlX2luX3N0aWNreShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IG5hbWVpZGF0YSAqbmQsXG4gXHRpZiAobGlrZWx5KCEoZGlyX21vZGUgXHUwMDI2IFNfSVNWVFgpKSlcbiBcdFx0cmV0dXJuIDA7XG4gXG4rXHQvKlxuK1x0ICogVGhlcmUgaXMgbm8gc2VwYXJhdGUgc3lzY3RsIGZvciBkaXJlY3RvcnkgY3JlYXRpb24gaW4gc3RpY2t5XG4rXHQgKiBmb2xkZXJzLiBUaGVyZWZvcmUsIGZvciB0aGUgU19JU0RJUiBjYXNlLCBkaXNhYmxpbmdcbitcdCAqIHN5c2N0bF9wcm90ZWN0ZWRfcmVndWxhciBpcyBub3QgZW5vdWdoIHRvIGFsbG93IGNyZWF0aW5nIGFcbitcdCAqIGRpcmVjdG9yeSBpbiBhIHN0aWNreSBmb2xkZXIsIGJlY2F1c2UgdGhhdCBtYXkgc3VycHJpc2UgdXNlcnNcbitcdCAqIG5vdCBleHBlY3RpbmcgdGhhdCBPX0NSRUFUfE9fRElSRUNUT1JZIGlzIHBvc3NpYmxlIG9uIG5ld2VyXG4rXHQgKiBrZXJuZWxzLlxuK1x0ICovXG4gXHRpZiAoU19JU1JFRyhpbm9kZS1cdTAwM2VpX21vZGUpIFx1MDAyNlx1MDAyNiAhc3lzY3RsX3Byb3RlY3RlZF9yZWd1bGFyKVxuIFx0XHRyZXR1cm4gMDtcbiBcbkBAIC0xNDQ3LDYgKzE0NTQsMTIgQEAgc3RhdGljIGludCBtYXlfY3JlYXRlX2luX3N0aWNreShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IG5hbWVpZGF0YSAqbmQsXG4gXHRcdFx0XHRcdCAgICAgIFwic3RpY2t5X2NyZWF0ZV9yZWd1bGFyXCIpO1xuIFx0XHRcdHJldHVybiAtRUFDQ0VTO1xuIFx0XHR9XG4rXG4rXHRcdGlmIChTX0lTRElSKGlub2RlLVx1MDAzZWlfbW9kZSkpIHtcbitcdFx0XHRhdWRpdF9sb2dfcGF0aF9kZW5pZWQoQVVESVRfQU5PTV9DUkVBVCxcbitcdFx0XHRcdFx0ICAgICAgXCJzdGlja3lfY3JlYXRlX2RpclwiKTtcbitcdFx0XHRyZXR1cm4gLUVBQ0NFUztcbitcdFx0fVxuIFx0fVxuIFxuIFx0cmV0dXJuIDA7XG5AQCAtMjc4MSw5ICsyNzk0LDE0IEBAIHN0YXRpYyBjb25zdCBjaGFyICpwYXRoX2luaXQoc3RydWN0IG5hbWVpZGF0YSAqbmQsIHVuc2lnbmVkIGZsYWdzKVxuIFx0cmV0dXJuIHM7XG4gfVxuIFxuK3N0YXRpYyBpbmxpbmUgYm9vbCB0cmFpbGluZ19zbGFzaGVzKGNvbnN0IHN0cnVjdCBxc3RyIGxhc3QpXG4re1xuK1x0cmV0dXJuIChib29sKWxhc3QubmFtZVtsYXN0Lmxlbl07XG4rfVxuK1xuIHN0YXRpYyBpbmxpbmUgY29uc3QgY2hhciAqbG9va3VwX2xhc3Qoc3RydWN0IG5hbWVpZGF0YSAqbmQpXG4ge1xuLVx0aWYgKG5kLVx1MDAzZWxhc3RfdHlwZSA9PSBMQVNUX05PUk0gXHUwMDI2XHUwMDI2IG5kLVx1MDAzZWxhc3QubmFtZVtuZC1cdTAwM2VsYXN0Lmxlbl0pXG4rXHRpZiAobmQtXHUwMDNlbGFzdF90eXBlID09IExBU1RfTk9STSBcdTAwMjZcdTAwMjYgdHJhaWxpbmdfc2xhc2hlcyhuZC1cdTAwM2VsYXN0KSlcbiBcdFx0bmQtXHUwMDNlZmxhZ3MgfD0gTE9PS1VQX0ZPTExPVyB8IExPT0tVUF9ESVJFQ1RPUlk7XG4gXG4gXHRyZXR1cm4gd2Fsa19jb21wb25lbnQobmQsIFdBTEtfVFJBSUxJTkcpO1xuQEAgLTQxNjQsNiArNDE4MiwyNCBAQCBzdGF0aWMgaW5saW5lIHVtb2RlX3QgdmZzX3ByZXBhcmVfbW9kZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcbiBcdHJldHVybiBtb2RlO1xuIH1cbiBcbitzdGF0aWMgaW5saW5lXG4raW50IHZmc19jcmVhdGVfbm9fcGVybShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxuK1x0XHQgICAgICAgdW1vZGVfdCBtb2RlLCBzdHJ1Y3QgZGVsZWdhdGVkX2lub2RlICpkaSlcbit7XG4rXHRzdHJ1Y3QgaW5vZGUgKmRpciA9IGRfaW5vZGUoZGVudHJ5LVx1MDAzZWRfcGFyZW50KTtcbitcdGludCBlcnJvcjtcbitcbitcdGVycm9yID0gdHJ5X2JyZWFrX2RlbGVnKGRpciwgTEVBU0VfQlJFQUtfRElSX0NSRUFURSwgZGkpO1xuK1x0aWYgKGVycm9yKVxuK1x0XHRyZXR1cm4gZXJyb3I7XG4rXG4rXHRlcnJvciA9IGRpci1cdTAwM2VpX29wLVx1MDAzZWNyZWF0ZShpZG1hcCwgZGlyLCBkZW50cnksIG1vZGUsIHRydWUpO1xuK1x0aWYgKCFlcnJvcilcbitcdFx0ZnNub3RpZnlfY3JlYXRlKGRpciwgZGVudHJ5KTtcbitcbitcdHJldHVybiBlcnJvcjtcbit9XG4rXG4gLyoqXG4gICogdmZzX2NyZWF0ZSAtIGNyZWF0ZSBuZXcgZmlsZVxuICAqIEBpZG1hcDpcdGlkbWFwIG9mIHRoZSBtb3VudCB0aGUgaW5vZGUgd2FzIGZvdW5kIGZyb21cbkBAIC00MTk2LDEzICs0MjMyLDggQEAgaW50IHZmc19jcmVhdGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlLFxuIFx0ZXJyb3IgPSBzZWN1cml0eV9pbm9kZV9jcmVhdGUoZGlyLCBkZW50cnksIG1vZGUpO1xuIFx0aWYgKGVycm9yKVxuIFx0XHRyZXR1cm4gZXJyb3I7XG4tXHRlcnJvciA9IHRyeV9icmVha19kZWxlZyhkaXIsIExFQVNFX0JSRUFLX0RJUl9DUkVBVEUsIGRpKTtcbi1cdGlmIChlcnJvcilcbi1cdFx0cmV0dXJuIGVycm9yO1xuLVx0ZXJyb3IgPSBkaXItXHUwMDNlaV9vcC1cdTAwM2VjcmVhdGUoaWRtYXAsIGRpciwgZGVudHJ5LCBtb2RlLCB0cnVlKTtcbi1cdGlmICghZXJyb3IpXG4tXHRcdGZzbm90aWZ5X2NyZWF0ZShkaXIsIGRlbnRyeSk7XG4tXHRyZXR1cm4gZXJyb3I7XG4rXG4rXHRyZXR1cm4gdmZzX2NyZWF0ZV9ub19wZXJtKGlkbWFwLCBkZW50cnksIG1vZGUsIGRpKTtcbiB9XG4gRVhQT1JUX1NZTUJPTCh2ZnNfY3JlYXRlKTtcbiBcbkBAIC00MzE5LDczICs0MzUwLDEyMiBAQCBzdGF0aWMgaW5saW5lIGludCBvcGVuX3RvX25hbWVpX2ZsYWdzKGludCBmbGFnKVxuIFxuIHN0YXRpYyBpbnQgbWF5X29fY3JlYXRlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxuIFx0XHRcdGNvbnN0IHN0cnVjdCBwYXRoICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcbi1cdFx0XHR1bW9kZV90IG1vZGUpXG4rXHRcdFx0dW1vZGVfdCBtb2RlLCBib29sIGNyZWF0ZV9kaXIpXG4ge1xuLVx0aW50IGVycm9yID0gc2VjdXJpdHlfcGF0aF9ta25vZChkaXIsIGRlbnRyeSwgbW9kZSwgMCk7XG4rXHRzdHJ1Y3QgaW5vZGUgKmRpcl9pbm9kZSA9IGRpci1cdTAwM2VkZW50cnktXHUwMDNlZF9pbm9kZTtcbitcdGludCBlcnJvcjtcbitcbitcdGlmIChjcmVhdGVfZGlyKVxuK1x0XHRlcnJvciA9IHNlY3VyaXR5X3BhdGhfbWtkaXIoZGlyLCBkZW50cnksIG1vZGUpO1xuK1x0ZWxzZVxuK1x0XHRlcnJvciA9IHNlY3VyaXR5X3BhdGhfbWtub2QoZGlyLCBkZW50cnksIG1vZGUsIDApO1xuIFx0aWYgKGVycm9yKVxuIFx0XHRyZXR1cm4gZXJyb3I7XG4gXG4gXHRpZiAoIWZzdWlkZ2lkX2hhc19tYXBwaW5nKGRpci1cdTAwM2VkZW50cnktXHUwMDNlZF9zYiwgaWRtYXApKVxuIFx0XHRyZXR1cm4gLUVPVkVSRkxPVztcbiBcbi1cdGVycm9yID0gaW5vZGVfcGVybWlzc2lvbihpZG1hcCwgZGlyLVx1MDAzZWRlbnRyeS1cdTAwM2VkX2lub2RlLFxuLVx0XHRcdFx0IE1BWV9XUklURSB8IE1BWV9FWEVDKTtcbitcdGVycm9yID0gaW5vZGVfcGVybWlzc2lvbihpZG1hcCwgZGlyX2lub2RlLCBNQVlfV1JJVEUgfCBNQVlfRVhFQyk7XG4gXHRpZiAoZXJyb3IpXG4gXHRcdHJldHVybiBlcnJvcjtcbiBcbi1cdHJldHVybiBzZWN1cml0eV9pbm9kZV9jcmVhdGUoZGlyLVx1MDAzZWRlbnRyeS1cdTAwM2VkX2lub2RlLCBkZW50cnksIG1vZGUpO1xuK1x0aWYgKGNyZWF0ZV9kaXIpXG4rXHRcdGVycm9yID0gc2VjdXJpdHlfaW5vZGVfbWtkaXIoZGlyX2lub2RlLCBkZW50cnksIG1vZGUpO1xuK1x0ZWxzZVxuK1x0XHRlcnJvciA9IHNlY3VyaXR5X2lub2RlX2NyZWF0ZShkaXJfaW5vZGUsIGRlbnRyeSwgbW9kZSk7XG4rXG4rXHRyZXR1cm4gZXJyb3I7XG4rfVxuK1xuK3N0YXRpYyBpbmxpbmUgdW1vZGVfdCBvX2NyZWF0ZV9tb2RlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxuK1x0XHRjb25zdCBzdHJ1Y3QgaW5vZGUgKmRpciwgdW1vZGVfdCBtb2RlLCBib29sIGNyZWF0ZV9kaXIpXG4re1xuK1x0aWYgKGNyZWF0ZV9kaXIpXG4rXHRcdHJldHVybiB2ZnNfcHJlcGFyZV9tb2RlKGlkbWFwLCBkaXIsIG1vZGUsIFNfSVJXWFVHTyB8IFNfSVNWVFgsIDApO1xuK1x0ZWxzZVxuK1x0XHRyZXR1cm4gdmZzX3ByZXBhcmVfbW9kZShpZG1hcCwgZGlyLCBtb2RlLCBTX0lBTExVR08sIFNfSUZSRUcpO1xuIH1cbiBcbiAvKlxuLSAqIEF0dGVtcHQgdG8gYXRvbWljYWxseSBsb29rIHVwLCBjcmVhdGUgYW5kIG9wZW4gYSBmaWxlIGZyb20gYSBuZWdhdGl2ZVxuLSAqIGRlbnRyeS5cbi0gKlxuLSAqIFJldHVybnMgMCBpZiBzdWNjZXNzZnVsLiAgVGhlIGZpbGUgd2lsbCBoYXZlIGJlZW4gY3JlYXRlZCBhbmQgYXR0YWNoZWQgdG9cbi0gKiBAZmlsZSBieSB0aGUgZmlsZXN5c3RlbSBjYWxsaW5nIGZpbmlzaF9vcGVuKCkuXG4tICpcbi0gKiBJZiB0aGUgZmlsZSB3YXMgbG9va2VkIHVwIG9ubHkgb3IgZGlkbid0IG5lZWQgY3JlYXRpbmcsIEZNT0RFX09QRU5FRCB3b24ndFxuLSAqIGJlIHNldC4gIFRoZSBjYWxsZXIgd2lsbCBuZWVkIHRvIHBlcmZvcm0gdGhlIG9wZW4gdGhlbXNlbHZlcy4gIEBwYXRoIHdpbGxcbi0gKiBoYXZlIGJlZW4gdXBkYXRlZCB0byBwb2ludCB0byB0aGUgbmV3IGRlbnRyeS4gIFRoaXMgbWF5IGJlIG5lZ2F0aXZlLlxuLSAqXG4tICogUmV0dXJucyBhbiBlcnJvciBjb2RlIG90aGVyd2lzZS5cbisgKiBhdG9taWNfb3BlbigpIC0gYXR0ZW1wdCB0byBhdG9taWNhbGx5IGxvb2sgdXAsIGNyZWF0ZSBhbmQgb3BlbiBhIGZpbGVcbisgKiBmcm9tIGEgbmVnYXRpdmUgZGVudHJ5LlxuKyAqIEBwYXRoOiAgICAgICAgICBwYXJlbnQgZGlyZWN0b3J5IHBhdGhcbisgKiBAZGVudHJ5OiAgICAgICAgY2hpbGQgdG8gLVx1MDAzZWF0b21pY19vcGVuKClcbisgKiBAb3Blbl9mbGFnOiAgICAgb3BlbiBmbGFnc1xuKyAqIEBtb2RlOiAgICAgICAgICBjcmVhdGUgbW9kZVxuKyAqIEBjcmVhdGVfZXJyb3I6ICByZXR1cm4gdmFsdWUgZnJvbSBtYXlfb19jcmVhdGUoKVxuKyAqXG4rICogSWYgRk1PREVfT1BFTkVEIGlzIHNldCwgdGhlIGZpbGUgd2lsbCBoYXZlIGJlZW4gYXR0YWNoZWQgdG8gQGZpbGUgYnkgdGhlXG4rICogZmlsZXN5c3RlbSBjYWxsaW5nIGZpbmlzaF9vcGVuKCkuIElmIEZNT0RFX09QRU5FRCBpc24ndCBzZXQsIHRoZVxuKyAqIGZpbGVzeXN0ZW0gaW5zdGVhZCBjYWxsZWQgZmluaXNoX25vX29wZW4oKSBhbmQgdGhlIGNhbGxlciB3aWxsIG5lZWQgdG9cbisgKiBwZXJmb3JtIHRoZSBvcGVuIHRoZW1zZWx2ZXMuXG4rICpcbisgKiBGTU9ERV9DUkVBVEVEIGlzIHNldCB3aGVuIHRoZSBjYWxsIHRvIC1cdTAwM2VhdG9taWNfb3BlbigpIGFjdHVhbGx5IGNyZWF0ZWRcbisgKiB0aGUgZmlsZS5cbisgKlxuKyAqIFJldHVybnMgdGhlIG9wZW5lZC9sb29rZWQtdXAgZGVudHJ5IG9uIHN1Y2Nlc3Mgb3IgRVJSX1BUUigtRSkgb24gZmFpbHVyZS5cbisgKiBPbiBlcnJvciwgYXRvbWljX29wZW4oKSBjb25zdW1lcyBAZGVudHJ5LlxuICAqL1xuIHN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICphdG9taWNfb3Blbihjb25zdCBzdHJ1Y3QgcGF0aCAqcGF0aCwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxuIFx0XHRcdFx0ICBzdHJ1Y3QgZmlsZSAqZmlsZSxcbi1cdFx0XHRcdCAgaW50IG9wZW5fZmxhZywgdW1vZGVfdCBtb2RlKVxuK1x0XHRcdFx0ICBpbnQgb3Blbl9mbGFnLCB1bW9kZV90IG1vZGUsIGJvb2wgY3JlYXRlX2Vycm9yKVxuIHtcbiBcdHN0cnVjdCBkZW50cnkgKmNvbnN0IERFTlRSWV9OT1RfU0VUID0gKHZvaWQgKikgLTFVTDtcbiBcdHN0cnVjdCBpbm9kZSAqZGlyID0gIHBhdGgtXHUwMDNlZGVudHJ5LVx1MDAzZWRfaW5vZGU7XG4rXHRib29sIGZhaWxlZF9jcmVhdGUgPSBmYWxzZTtcbiBcdGludCBlcnJvcjtcbiBcbiBcdGZpbGUtXHUwMDNlX19mX3BhdGguZGVudHJ5ID0gREVOVFJZX05PVF9TRVQ7XG4gXHRmaWxlLVx1MDAzZV9fZl9wYXRoLm1udCA9IHBhdGgtXHUwMDNlbW50O1xuK1xuIFx0ZXJyb3IgPSBkaXItXHUwMDNlaV9vcC1cdTAwM2VhdG9taWNfb3BlbihkaXIsIGRlbnRyeSwgZmlsZSxcbiBcdFx0XHRcdCAgICAgICBvcGVuX3RvX25hbWVpX2ZsYWdzKG9wZW5fZmxhZyksIG1vZGUpO1xuIFx0ZF9sb29rdXBfZG9uZShkZW50cnkpO1xuIFx0aWYgKCFlcnJvcikge1xuIFx0XHRpZiAoZmlsZS1cdTAwM2VmX21vZGUgXHUwMDI2IEZNT0RFX09QRU5FRCkge1xuLVx0XHRcdGlmICh1bmxpa2VseShkZW50cnkgIT0gZmlsZS1cdTAwM2VmX3BhdGguZGVudHJ5KSkge1xuK1x0XHRcdC8vIGZpbmlzaF9vcGVuKCkgY2FsbGVkXG4rXHRcdFx0c3RydWN0IGRlbnRyeSAqb3BlbmVkID0gZmlsZS1cdTAwM2VmX3BhdGguZGVudHJ5O1xuK1x0XHRcdGlmICh1bmxpa2VseShvcGVuZWQgIT0gZGVudHJ5KSkge1xuIFx0XHRcdFx0ZHB1dChkZW50cnkpO1xuLVx0XHRcdFx0ZGVudHJ5ID0gZGdldChmaWxlLVx1MDAzZWZfcGF0aC5kZW50cnkpO1xuK1x0XHRcdFx0ZGVudHJ5ID0gZGdldChvcGVuZWQpO1xuIFx0XHRcdH1cbi1cdFx0fSBlbHNlIGlmIChXQVJOX09OKGZpbGUtXHUwMDNlZl9wYXRoLmRlbnRyeSA9PSBERU5UUllfTk9UX1NFVCkpIHtcbi1cdFx0XHRlcnJvciA9IC1FSU87XG4tXHRcdH0gZWxzZSB7XG4tXHRcdFx0aWYgKGZpbGUtXHUwMDNlZl9wYXRoLmRlbnRyeSkge1xuK1x0XHR9IGVsc2UgaWYgKGxpa2VseShmaWxlLVx1MDAzZWZfcGF0aC5kZW50cnkgIT0gREVOVFJZX05PVF9TRVQpKSB7XG4rXHRcdFx0Ly8gZmluaXNoX25vX29wZW4oKSBjYWxsZWRcbitcdFx0XHRzdHJ1Y3QgZGVudHJ5ICpyZXBsYWNlZCA9IGZpbGUtXHUwMDNlZl9wYXRoLmRlbnRyeTtcbitcdFx0XHRpZiAocmVwbGFjZWQpIHtcbiBcdFx0XHRcdGRwdXQoZGVudHJ5KTtcbi1cdFx0XHRcdGRlbnRyeSA9IGZpbGUtXHUwMDNlZl9wYXRoLmRlbnRyeTtcbitcdFx0XHRcdGRlbnRyeSA9IHJlcGxhY2VkO1xuIFx0XHRcdH1cbiBcdFx0XHRpZiAodW5saWtlbHkoZF9pc19uZWdhdGl2ZShkZW50cnkpKSlcbiBcdFx0XHRcdGVycm9yID0gLUVOT0VOVDtcbitcdFx0XHRpZiAoZXJyb3IgXHUwMDI2XHUwMDI2IGNyZWF0ZV9lcnJvcikgLy8gc2hvdWxkIGhhdmUgY3JlYXRlZCwgYnV0IGVycm9yZWQgYmVmb3JlXG4rXHRcdFx0XHRmYWlsZWRfY3JlYXRlID0gdHJ1ZTtcbitcdFx0fSBlbHNlIHtcbitcdFx0XHRjb25zdCBjaGFyICpmc25hbWUgPSBkZW50cnktXHUwMDNlZF9zYi1cdTAwM2VzX3R5cGUtXHUwMDNlbmFtZTtcbitcdFx0XHRXQVJOKDEsIFwiJXM6IC1cdTAwM2VhdG9taWNfb3BlbigpIGxlZnQgZmlsZS1cdTAwM2VmX3BhdGguZGVudHJ5IHVuc2V0IVxcblwiLCBmc25hbWUpO1xuK1x0XHRcdGVycm9yID0gLUVJTztcbiBcdFx0fVxuIFx0fVxuK1xuIFx0aWYgKGVycm9yKSB7XG4rXHRcdGlmIChmYWlsZWRfY3JlYXRlKVxuK1x0XHRcdGF1ZGl0X2lub2RlX2NoaWxkKGRpciwgZGVudHJ5LCBBVURJVF9UWVBFX0NISUxEX0NSRUFURSk7XG4gXHRcdGRwdXQoZGVudHJ5KTtcbiBcdFx0ZGVudHJ5ID0gRVJSX1BUUihlcnJvcik7XG4rXHR9IGVsc2Uge1xuK1x0XHRpZiAoZmlsZS1cdTAwM2VmX21vZGUgXHUwMDI2IEZNT0RFX0NSRUFURUQpXG4rXHRcdFx0ZnNub3RpZnlfY3JlYXRlKGRpciwgZGVudHJ5KTtcbitcdFx0aWYgKGZpbGUtXHUwMDNlZl9tb2RlIFx1MDAyNiBGTU9ERV9PUEVORUQpXG4rXHRcdFx0ZnNub3RpZnlfb3BlbihmaWxlKTtcbiBcdH1cbitcbiBcdHJldHVybiBkZW50cnk7XG4gfVxuIFxuK3N0YXRpYyBpbmxpbmVcbitzdHJ1Y3QgZGVudHJ5ICp2ZnNfbWtkaXJfbm9fcGVybShzdHJ1Y3QgbW50X2lkbWFwICosIHN0cnVjdCBpbm9kZSAqLFxuK1x0XHRcdFx0IHN0cnVjdCBkZW50cnkgKiwgdW1vZGVfdCxcbitcdFx0XHRcdCBzdHJ1Y3QgZGVsZWdhdGVkX2lub2RlICopO1xuIC8qXG4gICogTG9vayB1cCBhbmQgbWF5YmUgY3JlYXRlIGFuZCBvcGVuIHRoZSBsYXN0IGNvbXBvbmVudC5cbiAgKlxuQEAgLTQ0MTIsNiArNDQ5Miw3IEBAIHN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpsb29rdXBfb3BlbihzdHJ1Y3QgbmFtZWlkYXRhICpuZCwgc3RydWN0IGZpbGUgKmZpbGUsXG4gXHRzdHJ1Y3QgZGVudHJ5ICpkZW50cnk7XG4gXHRpbnQgZXJyb3IsIGNyZWF0ZV9lcnJvciA9IDA7XG4gXHR1bW9kZV90IG1vZGUgPSBvcC1cdTAwM2Vtb2RlO1xuK1x0Ym9vbCBjcmVhdGVfZGlyID0gT19JU19NS0RJUihvcGVuX2ZsYWcpO1xuIFxuIFx0aWYgKHVubGlrZWx5KElTX0RFQURESVIoZGlyX2lub2RlKSkpXG4gXHRcdHJldHVybiBFUlJfUFRSKC1FTk9FTlQpO1xuQEAgLTQ0MzcsNyArNDUxOCw3IEBAIHN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpsb29rdXBfb3BlbihzdHJ1Y3QgbmFtZWlkYXRhICpuZCwgc3RydWN0IGZpbGUgKmZpbGUsXG4gXHRcdGRlbnRyeSA9IE5VTEw7XG4gXHR9XG4gXHRpZiAoZGVudHJ5LVx1MDAzZWRfaW5vZGUpIHtcbi1cdFx0LyogQ2FjaGVkIHBvc2l0aXZlIGRlbnRyeTogd2lsbCBvcGVuIGluIGZfb3AtXHUwMDNlb3BlbiAqL1xuK1x0XHQvKiBDYWNoZWQgcG9zaXRpdmUgZGVudHJ5OiB3aWxsIG9wZW4gaW4gZG9fb3BlbigpLiAqL1xuIFx0XHRyZXR1cm4gZGVudHJ5O1xuIFx0fVxuIFxuQEAgLTQ0NTksMTkgKzQ1NDAsMjQgQEAgc3RhdGljIHN0cnVjdCBkZW50cnkgKmxvb2t1cF9vcGVuKHN0cnVjdCBuYW1laWRhdGEgKm5kLCBzdHJ1Y3QgZmlsZSAqZmlsZSxcbiBcdGlmIChvcGVuX2ZsYWcgXHUwMDI2IE9fQ1JFQVQpIHtcbiBcdFx0aWYgKG9wZW5fZmxhZyBcdTAwMjYgT19FWENMKVxuIFx0XHRcdG9wZW5fZmxhZyBcdTAwMjY9IH5PX1RSVU5DO1xuLVx0XHRtb2RlID0gdmZzX3ByZXBhcmVfbW9kZShpZG1hcCwgZGlyLVx1MDAzZWRfaW5vZGUsIG1vZGUsIG1vZGUsIG1vZGUpO1xuK1x0XHRtb2RlID0gb19jcmVhdGVfbW9kZShpZG1hcCwgZGlyX2lub2RlLCBtb2RlLCBjcmVhdGVfZGlyKTtcbiBcdFx0aWYgKGxpa2VseShnb3Rfd3JpdGUpKVxuIFx0XHRcdGNyZWF0ZV9lcnJvciA9IG1heV9vX2NyZWF0ZShpZG1hcCwgXHUwMDI2bmQtXHUwMDNlcGF0aCxcbi1cdFx0XHRcdFx0XHQgICAgZGVudHJ5LCBtb2RlKTtcbitcdFx0XHRcdFx0XHQgICAgZGVudHJ5LCBtb2RlLCBjcmVhdGVfZGlyKTtcbiBcdFx0ZWxzZVxuIFx0XHRcdGNyZWF0ZV9lcnJvciA9IC1FUk9GUztcbitcdFx0LyogUmVmdXNlIHRvIGNyZWF0ZSBhIGRpcmVjdG9yeSB0aHJvdWdoIGEgZGFuZ2xpbmcgKHRyYWlsaW5nKVxuK1x0XHQgKiBzeW1saW5rLiBGb3IgcmVndWxhciBmaWxlcyB0aGlzIGhhcyBiZWVuIGFsbG93ZWQgaGlzdG9yaWNhbGx5XG4rXHRcdCAqIG9uIE9fQ1JFQVQgd2l0aG91dCBPX0VYQ0wuICovXG4rXHRcdGlmICh1bmxpa2VseShuZC1cdTAwM2VkZXB0aCkgXHUwMDI2XHUwMDI2IGNyZWF0ZV9kaXIgXHUwMDI2XHUwMDI2ICFjcmVhdGVfZXJyb3IpXG4rXHRcdFx0Y3JlYXRlX2Vycm9yID0gLUVFWElTVDtcbiBcdH1cbiBcdGlmIChjcmVhdGVfZXJyb3IpXG4gXHRcdG9wZW5fZmxhZyBcdTAwMjY9IH5PX0NSRUFUO1xuIFx0aWYgKGRpcl9pbm9kZS1cdTAwM2VpX29wLVx1MDAzZWF0b21pY19vcGVuKSB7XG4gXHRcdGlmIChuZC1cdTAwM2VmbGFncyBcdTAwMjYgTE9PS1VQX0RJUkVDVE9SWSlcbiBcdFx0XHRvcGVuX2ZsYWcgfD0gT19ESVJFQ1RPUlk7XG4tXHRcdGRlbnRyeSA9IGF0b21pY19vcGVuKFx1MDAyNm5kLVx1MDAzZXBhdGgsIGRlbnRyeSwgZmlsZSwgb3Blbl9mbGFnLCBtb2RlKTtcbitcdFx0ZGVudHJ5ID0gYXRvbWljX29wZW4oXHUwMDI2bmQtXHUwMDNlcGF0aCwgZGVudHJ5LCBmaWxlLCBvcGVuX2ZsYWcsIG1vZGUsIGNyZWF0ZV9lcnJvcik7XG4gXHRcdGlmICh1bmxpa2VseShjcmVhdGVfZXJyb3IpIFx1MDAyNlx1MDAyNiBkZW50cnkgPT0gRVJSX1BUUigtRU5PRU5UKSlcbiBcdFx0XHRkZW50cnkgPSBFUlJfUFRSKGNyZWF0ZV9lcnJvcik7XG4gXHRcdHJldHVybiBkZW50cnk7XG5AQCAtNDQ5MCwzMCArNDU3Niw0NCBAQCBzdGF0aWMgc3RydWN0IGRlbnRyeSAqbG9va3VwX29wZW4oc3RydWN0IG5hbWVpZGF0YSAqbmQsIHN0cnVjdCBmaWxlICpmaWxlLFxuIFx0XHRcdGRlbnRyeSA9IHJlcztcbiBcdFx0fVxuIFx0fVxuK1x0aWYgKGRlbnRyeS1cdTAwM2VkX2lub2RlIHx8ICEob3AtXHUwMDNlb3Blbl9mbGFnIFx1MDAyNiBPX0NSRUFUKSkge1xuK1x0XHQvKiBObyBuZWVkIHRvIGNyZWF0ZSBhIGZpbGUuIElmIGxvb2t1cCByZXR1cm5lZCBhIHBvc2l0aXZlXG4rXHRcdCAqIGRlbnRyeSwgdGhlIGZpbGUgd2lsbCBiZSBvcGVuZWQgaW4gZG9fb3BlbigpLiAqL1xuK1x0XHRyZXR1cm4gZGVudHJ5O1xuK1x0fVxuIFxuLVx0LyogTmVnYXRpdmUgZGVudHJ5LCBqdXN0IGNyZWF0ZSB0aGUgZmlsZSAqL1xuLVx0aWYgKCFkZW50cnktXHUwMDNlZF9pbm9kZSBcdTAwMjZcdTAwMjYgKG9wZW5fZmxhZyBcdTAwMjYgT19DUkVBVCkpIHtcbi1cdFx0LyogYnV0IGJyZWFrIHRoZSBkaXJlY3RvcnkgbGVhc2UgZmlyc3QhICovXG4tXHRcdGVycm9yID0gdHJ5X2JyZWFrX2RlbGVnKGRpcl9pbm9kZSwgTEVBU0VfQlJFQUtfRElSX0NSRUFURSwgZGVsZWdhdGVkX2lub2RlKTtcbi1cdFx0aWYgKGVycm9yKVxuLVx0XHRcdGdvdG8gb3V0X2RwdXQ7XG4tXG4tXHRcdGZpbGUtXHUwMDNlZl9tb2RlIHw9IEZNT0RFX0NSRUFURUQ7XG4tXHRcdGF1ZGl0X2lub2RlX2NoaWxkKGRpcl9pbm9kZSwgZGVudHJ5LCBBVURJVF9UWVBFX0NISUxEX0NSRUFURSk7XG4tXHRcdGlmICghZGlyX2lub2RlLVx1MDAzZWlfb3AtXHUwMDNlY3JlYXRlKSB7XG4tXHRcdFx0ZXJyb3IgPSAtRUFDQ0VTO1xuLVx0XHRcdGdvdG8gb3V0X2RwdXQ7XG4tXHRcdH1cbitcdC8qIE5lZ2F0aXZlIGRlbnRyeSB3aXRoIE9fQ1JFQVQgZmxhZyBzZXQgKi9cbitcdGF1ZGl0X2lub2RlX2NoaWxkKGRpci1cdTAwM2VkX2lub2RlLCBkZW50cnksIEFVRElUX1RZUEVfQ0hJTERfQ1JFQVRFKTtcbiBcbi1cdFx0ZXJyb3IgPSBkaXJfaW5vZGUtXHUwMDNlaV9vcC1cdTAwM2VjcmVhdGUoaWRtYXAsIGRpcl9pbm9kZSwgZGVudHJ5LFxuLVx0XHRcdFx0XHRcdG1vZGUsIG9wZW5fZmxhZyBcdTAwMjYgT19FWENMKTtcbi1cdFx0aWYgKGVycm9yKVxuLVx0XHRcdGdvdG8gb3V0X2RwdXQ7XG4tXHR9XG4tXHRpZiAodW5saWtlbHkoY3JlYXRlX2Vycm9yKSBcdTAwMjZcdTAwMjYgIWRlbnRyeS1cdTAwM2VkX2lub2RlKSB7XG4rXHRpZiAodW5saWtlbHkoY3JlYXRlX2Vycm9yKSkge1xuK1x0XHQvKiBTaG91bGQgaGF2ZSBkb25lIGEgY3JlYXRlLCBidXQgd2UgYWxyZWFkeSBlcnJvcmVkICovXG4gXHRcdGVycm9yID0gY3JlYXRlX2Vycm9yO1xuIFx0XHRnb3RvIG91dF9kcHV0O1xuIFx0fVxuK1xuK1x0aWYgKChjcmVhdGVfZGlyIFx1MDAyNlx1MDAyNiAhZGlyX2lub2RlLVx1MDAzZWlfb3AtXHUwMDNlbWtkaXIpXG4rXHQgICAgfHwgKCFjcmVhdGVfZGlyIFx1MDAyNlx1MDAyNiAhZGlyX2lub2RlLVx1MDAzZWlfb3AtXHUwMDNlY3JlYXRlKSkge1xuK1x0XHRlcnJvciA9IC1FQUNDRVM7XG4rXHRcdGdvdG8gb3V0X2RwdXQ7XG4rXHR9XG4rXG4rXHRpZiAoY3JlYXRlX2Rpcikge1xuK1x0XHRzdHJ1Y3QgZGVudHJ5ICpyZXMgPSB2ZnNfbWtkaXJfbm9fcGVybShpZG1hcCwgZGlyX2lub2RlLCBkZW50cnksXG4rXHRcdFx0XHRcdFx0ICAgICAgIG1vZGUsIGRlbGVnYXRlZF9pbm9kZSk7XG4rXHRcdGlmIChJU19FUlIocmVzKSkge1xuK1x0XHRcdGVycm9yID0gUFRSX0VSUihyZXMpO1xuK1x0XHR9IGVsc2Uge1xuK1x0XHRcdGVycm9yID0gMDtcbitcdFx0XHRkZW50cnkgPSByZXM7XG4rXHRcdH1cbitcdH0gZWxzZSB7XG4rXHRcdGVycm9yID0gdmZzX2NyZWF0ZV9ub19wZXJtKGlkbWFwLCBkZW50cnksIG1vZGUsIGRlbGVnYXRlZF9pbm9kZSk7XG4rXHR9XG4rXHRpZiAoZXJyb3IpXG4rXHRcdGdvdG8gb3V0X2RwdXQ7XG4rXG4rXHRmaWxlLVx1MDAzZWZfbW9kZSB8PSBGTU9ERV9DUkVBVEVEO1xuK1xuIFx0cmV0dXJuIGRlbnRyeTtcbiBcbiBvdXRfZHB1dDpcbkBAIC00NTIxLDE3ICs0NjIxLDEyIEBAIHN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpsb29rdXBfb3BlbihzdHJ1Y3QgbmFtZWlkYXRhICpuZCwgc3RydWN0IGZpbGUgKmZpbGUsXG4gXHRyZXR1cm4gRVJSX1BUUihlcnJvcik7XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgYm9vbCB0cmFpbGluZ19zbGFzaGVzKHN0cnVjdCBuYW1laWRhdGEgKm5kKVxuLXtcbi1cdHJldHVybiAoYm9vbCluZC1cdTAwM2VsYXN0Lm5hbWVbbmQtXHUwMDNlbGFzdC5sZW5dO1xuLX1cbi1cbiBzdGF0aWMgc3RydWN0IGRlbnRyeSAqbG9va3VwX2Zhc3RfZm9yX29wZW4oc3RydWN0IG5hbWVpZGF0YSAqbmQsIGludCBvcGVuX2ZsYWcpXG4ge1xuIFx0c3RydWN0IGRlbnRyeSAqZGVudHJ5O1xuIFxuIFx0aWYgKG9wZW5fZmxhZyBcdTAwMjYgT19DUkVBVCkge1xuLVx0XHRpZiAodHJhaWxpbmdfc2xhc2hlcyhuZCkpXG4rXHRcdGlmICh0cmFpbGluZ19zbGFzaGVzKG5kLVx1MDAzZWxhc3QpIFx1MDAyNlx1MDAyNiAhKG9wZW5fZmxhZyBcdTAwMjYgT19ESVJFQ1RPUlkpKVxuIFx0XHRcdHJldHVybiBFUlJfUFRSKC1FSVNESVIpO1xuIFxuIFx0XHQvKiBEb24ndCBib3RoZXIgb24gYW4gT19FWENMIGNyZWF0ZSAqL1xuQEAgLTQ1MzksNyArNDYzNCw3IEBAIHN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpsb29rdXBfZmFzdF9mb3Jfb3BlbihzdHJ1Y3QgbmFtZWlkYXRhICpuZCwgaW50IG9wZW5fZmxhZylcbiBcdFx0XHRyZXR1cm4gTlVMTDtcbiBcdH1cbiBcbi1cdGlmICh0cmFpbGluZ19zbGFzaGVzKG5kKSlcbitcdGlmICh0cmFpbGluZ19zbGFzaGVzKG5kLVx1MDAzZWxhc3QpKVxuIFx0XHRuZC1cdTAwM2VmbGFncyB8PSBMT09LVVBfRk9MTE9XIHwgTE9PS1VQX0RJUkVDVE9SWTtcbiBcbiBcdGRlbnRyeSA9IGxvb2t1cF9mYXN0KG5kKTtcbkBAIC00NjAyLDE2ICs0Njk3LDEyIEBAIHN0YXRpYyBjb25zdCBjaGFyICpvcGVuX2xhc3RfbG9va3VwcyhzdHJ1Y3QgbmFtZWlkYXRhICpuZCxcbiBcdFx0ICovXG4gXHR9XG4gXHRpZiAob3Blbl9mbGFnIFx1MDAyNiBPX0NSRUFUKVxuLVx0XHRpbm9kZV9sb2NrKGRpci1cdTAwM2VkX2lub2RlKTtcbitcdFx0aW5vZGVfbG9ja19uZXN0ZWQoZGlyLVx1MDAzZWRfaW5vZGUsIElfTVVURVhfUEFSRU5UKTtcbiBcdGVsc2VcbiBcdFx0aW5vZGVfbG9ja19zaGFyZWQoZGlyLVx1MDAzZWRfaW5vZGUpO1xuK1xuIFx0ZGVudHJ5ID0gbG9va3VwX29wZW4obmQsIGZpbGUsIG9wLCBnb3Rfd3JpdGUsIFx1MDAyNmRlbGVnYXRlZF9pbm9kZSk7XG4tXHRpZiAoIUlTX0VSUihkZW50cnkpKSB7XG4tXHRcdGlmIChmaWxlLVx1MDAzZWZfbW9kZSBcdTAwMjYgRk1PREVfQ1JFQVRFRClcbi1cdFx0XHRmc25vdGlmeV9jcmVhdGUoZGlyLVx1MDAzZWRfaW5vZGUsIGRlbnRyeSk7XG4tXHRcdGlmIChmaWxlLVx1MDAzZWZfbW9kZSBcdTAwMjYgRk1PREVfT1BFTkVEKVxuLVx0XHRcdGZzbm90aWZ5X29wZW4oZmlsZSk7XG4tXHR9XG4rXG4gXHRpZiAob3Blbl9mbGFnIFx1MDAyNiBPX0NSRUFUKVxuIFx0XHRpbm9kZV91bmxvY2soZGlyLVx1MDAzZWRfaW5vZGUpO1xuIFx0ZWxzZVxuQEAgLTQ2NjksOCArNDc2MCw5IEBAIHN0YXRpYyBpbnQgZG9fb3BlbihzdHJ1Y3QgbmFtZWlkYXRhICpuZCxcbiBcdGlmIChvcGVuX2ZsYWcgXHUwMDI2IE9fQ1JFQVQpIHtcbiBcdFx0aWYgKChvcGVuX2ZsYWcgXHUwMDI2IE9fRVhDTCkgXHUwMDI2XHUwMDI2ICEoZmlsZS1cdTAwM2VmX21vZGUgXHUwMDI2IEZNT0RFX0NSRUFURUQpKVxuIFx0XHRcdHJldHVybiAtRUVYSVNUO1xuLVx0XHRpZiAoZF9pc19kaXIobmQtXHUwMDNlcGF0aC5kZW50cnkpKVxuK1x0XHRpZiAoIShvcGVuX2ZsYWcgXHUwMDI2IE9fRElSRUNUT1JZKSBcdTAwMjZcdTAwMjYgZF9pc19kaXIobmQtXHUwMDNlcGF0aC5kZW50cnkpKVxuIFx0XHRcdHJldHVybiAtRUlTRElSO1xuK1xuIFx0XHRlcnJvciA9IG1heV9jcmVhdGVfaW5fc3RpY2t5KGlkbWFwLCBuZCxcbiBcdFx0XHRcdFx0ICAgICBkX2JhY2tpbmdfaW5vZGUobmQtXHUwMDNlcGF0aC5kZW50cnkpKTtcbiBcdFx0aWYgKHVubGlrZWx5KGVycm9yKSlcbkBAIC00OTUwLDcgKzUwNDIsNyBAQCBzdGF0aWMgc3RydWN0IGRlbnRyeSAqZmlsZW5hbWVfY3JlYXRlKGludCBkZmQsIHN0cnVjdCBmaWxlbmFtZSAqbmFtZSxcbiBcdCAqIERvIHRoZSBmaW5hbCBsb29rdXAuICBTdXBwcmVzcyAnY3JlYXRlJyBpZiB0aGVyZSBpcyBhIHRyYWlsaW5nXG4gXHQgKiAnLycsIGFuZCBhIGRpcmVjdG9yeSB3YXNuJ3QgcmVxdWVzdGVkLlxuIFx0ICovXG4tXHRpZiAobGFzdC5uYW1lW2xhc3QubGVuXSBcdTAwMjZcdTAwMjYgIXdhbnRfZGlyKVxuK1x0aWYgKHRyYWlsaW5nX3NsYXNoZXMobGFzdCkgXHUwMDI2XHUwMDI2ICF3YW50X2RpcilcbiBcdFx0Y3JlYXRlX2ZsYWdzIFx1MDAyNj0gfkxPT0tVUF9DUkVBVEU7XG4gXHRkZW50cnkgPSBzdGFydF9kaXJvcChwYXRoLVx1MDAzZWRlbnRyeSwgXHUwMDI2bGFzdCwgcmV2YWxfZmxhZyB8IGNyZWF0ZV9mbGFncyk7XG4gXHRpZiAoSVNfRVJSKGRlbnRyeSkpXG5AQCAtNTA0NSwxMyArNTEzNywxMyBAQCBzdHJ1Y3QgZmlsZSAqZGVudHJ5X2NyZWF0ZShzdHJ1Y3QgcGF0aCAqcGF0aCwgaW50IGZsYWdzLCB1bW9kZV90IG1vZGUsXG4gXHRcdHBhdGgtXHUwMDNlZGVudHJ5ID0gZGlyO1xuIFx0XHRtb2RlID0gdmZzX3ByZXBhcmVfbW9kZShpZG1hcCwgZGlyX2lub2RlLCBtb2RlLCBTX0lBTExVR08sIFNfSUZSRUcpO1xuIFxuLVx0XHRjcmVhdGVfZXJyb3IgPSBtYXlfb19jcmVhdGUoaWRtYXAsIHBhdGgsIGRlbnRyeSwgbW9kZSk7XG4rXHRcdGNyZWF0ZV9lcnJvciA9IG1heV9vX2NyZWF0ZShpZG1hcCwgcGF0aCwgZGVudHJ5LCBtb2RlLCAvKmNyZWF0ZV9kaXI9Ki8gZmFsc2UpO1xuIFx0XHRpZiAoY3JlYXRlX2Vycm9yKVxuIFx0XHRcdGZsYWdzIFx1MDAyNj0gfk9fQ1JFQVQ7XG4gXG4gXHRcdC8qIGF0b21pY19vcGVuIHdpbGwgZHB1dChkZW50cnkpIG9uIGVycm9yICovXG4gXHRcdGRnZXQob3JpZ19kZW50cnkpO1xuLVx0XHRkZW50cnkgPSBhdG9taWNfb3BlbihwYXRoLCBkZW50cnksIGZpbGUsIGZsYWdzLCBtb2RlKTtcbitcdFx0ZGVudHJ5ID0gYXRvbWljX29wZW4ocGF0aCwgZGVudHJ5LCBmaWxlLCBmbGFncywgbW9kZSwgY3JlYXRlX2Vycm9yKTtcbiBcdFx0ZXJyb3IgPSBQVFJfRVJSX09SX1pFUk8oZGVudHJ5KTtcbiBcbiBcdFx0aWYgKElTX0VSUihkZW50cnkpKVxuQEAgLTUwNjQsMTMgKzUxNTYsNiBAQCBzdHJ1Y3QgZmlsZSAqZGVudHJ5X2NyZWF0ZShzdHJ1Y3QgcGF0aCAqcGF0aCwgaW50IGZsYWdzLCB1bW9kZV90IG1vZGUsXG4gXHRcdGlmICh1bmxpa2VseShjcmVhdGVfZXJyb3IpIFx1MDAyNlx1MDAyNiBlcnJvciA9PSAtRU5PRU5UKVxuIFx0XHRcdGVycm9yID0gY3JlYXRlX2Vycm9yO1xuIFxuLVx0XHRpZiAoIWVycm9yKSB7XG4tXHRcdFx0aWYgKGZpbGUtXHUwMDNlZl9tb2RlIFx1MDAyNiBGTU9ERV9DUkVBVEVEKVxuLVx0XHRcdFx0ZnNub3RpZnlfY3JlYXRlKGRpci1cdTAwM2VkX2lub2RlLCBkZW50cnkpO1xuLVx0XHRcdGlmIChmaWxlLVx1MDAzZWZfbW9kZSBcdTAwMjYgRk1PREVfT1BFTkVEKVxuLVx0XHRcdFx0ZnNub3RpZnlfb3BlbihmaWxlKTtcbi1cdFx0fVxuLVxuIFx0XHRwYXRoLVx1MDAzZWRlbnRyeSA9IGRlbnRyeTtcbiBcbiBcdH0gZWxzZSB7XG5AQCAtNTIyMiw2ICs1MzA3LDM5IEBAIFNZU0NBTExfREVGSU5FMyhta25vZCwgY29uc3QgY2hhciBfX3VzZXIgKiwgZmlsZW5hbWUsIHVtb2RlX3QsIG1vZGUsIHVuc2lnbmVkLCBkXG4gXHRyZXR1cm4gZmlsZW5hbWVfbWtub2RhdChBVF9GRENXRCwgbmFtZSwgbW9kZSwgZGV2KTtcbiB9XG4gXG4rc3RhdGljIGlubGluZVxuK3N0cnVjdCBkZW50cnkgKnZmc19ta2Rpcl9ub19wZXJtKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbitcdFx0XHRcdCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSxcbitcdFx0XHRcdCBzdHJ1Y3QgZGVsZWdhdGVkX2lub2RlICpkaSlcbit7XG4rXHRpbnQgZXJyb3I7XG4rXHRzdHJ1Y3QgZGVudHJ5ICpkZTtcbitcdHVuc2lnbmVkIG1heF9saW5rcyA9IGRpci1cdTAwM2VpX3NiLVx1MDAzZXNfbWF4X2xpbmtzO1xuK1xuK1x0ZXJyb3IgPSAtRU1MSU5LO1xuK1x0aWYgKG1heF9saW5rcyBcdTAwMjZcdTAwMjYgZGlyLVx1MDAzZWlfbmxpbmsgXHUwMDNlPSBtYXhfbGlua3MpXG4rXHRcdGdvdG8gZXJyO1xuK1xuK1x0ZXJyb3IgPSB0cnlfYnJlYWtfZGVsZWcoZGlyLCBMRUFTRV9CUkVBS19ESVJfQ1JFQVRFLCBkaSk7XG4rXHRpZiAoZXJyb3IpXG4rXHRcdGdvdG8gZXJyO1xuK1xuK1x0ZGUgPSBkaXItXHUwMDNlaV9vcC1cdTAwM2Vta2RpcihpZG1hcCwgZGlyLCBkZW50cnksIG1vZGUpO1xuK1x0aWYgKElTX0VSUihkZSkpIHtcbitcdFx0ZXJyb3IgPSBQVFJfRVJSKGRlKTtcbitcdFx0Z290byBlcnI7XG4rXHR9XG4rXHRpZiAoZGUpIHtcbitcdFx0ZHB1dChkZW50cnkpO1xuK1x0XHRkZW50cnkgPSBkZTtcbitcdH1cbitcdGZzbm90aWZ5X21rZGlyKGRpciwgZGVudHJ5KTtcbitcdHJldHVybiBkZW50cnk7XG4rXG4rZXJyOlxuK1x0cmV0dXJuIEVSUl9QVFIoZXJyb3IpO1xuK31cbitcbiAvKipcbiAgKiB2ZnNfbWtkaXIgLSBjcmVhdGUgZGlyZWN0b3J5IHJldHVybmluZyBjb3JyZWN0IGRlbnRyeSBpZiBwb3NzaWJsZVxuICAqIEBpZG1hcDpcdFx0aWRtYXAgb2YgdGhlIG1vdW50IHRoZSBpbm9kZSB3YXMgZm91bmQgZnJvbVxuQEAgLTUyNDksNyArNTM2Nyw2IEBAIHN0cnVjdCBkZW50cnkgKnZmc19ta2RpcihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXG4gXHRcdFx0IHN0cnVjdCBkZWxlZ2F0ZWRfaW5vZGUgKmRlbGVnYXRlZF9pbm9kZSlcbiB7XG4gXHRpbnQgZXJyb3I7XG4tXHR1bnNpZ25lZCBtYXhfbGlua3MgPSBkaXItXHUwMDNlaV9zYi1cdTAwM2VzX21heF9saW5rcztcbiBcdHN0cnVjdCBkZW50cnkgKmRlO1xuIFxuIFx0ZXJyb3IgPSBtYXlfY3JlYXRlX2RlbnRyeShpZG1hcCwgZGlyLCBkZW50cnkpO1xuQEAgLTUyNjUsMjQgKzUzODIsMTIgQEAgc3RydWN0IGRlbnRyeSAqdmZzX21rZGlyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbiBcdGlmIChlcnJvcilcbiBcdFx0Z290byBlcnI7XG4gXG4tXHRlcnJvciA9IC1FTUxJTks7XG4tXHRpZiAobWF4X2xpbmtzIFx1MDAyNlx1MDAyNiBkaXItXHUwMDNlaV9ubGluayBcdTAwM2U9IG1heF9saW5rcylcbi1cdFx0Z290byBlcnI7XG4tXG4tXHRlcnJvciA9IHRyeV9icmVha19kZWxlZyhkaXIsIExFQVNFX0JSRUFLX0RJUl9DUkVBVEUsIGRlbGVnYXRlZF9pbm9kZSk7XG4tXHRpZiAoZXJyb3IpXG4tXHRcdGdvdG8gZXJyO1xuLVxuLVx0ZGUgPSBkaXItXHUwMDNlaV9vcC1cdTAwM2Vta2RpcihpZG1hcCwgZGlyLCBkZW50cnksIG1vZGUpO1xuLVx0ZXJyb3IgPSBQVFJfRVJSKGRlKTtcbi1cdGlmIChJU19FUlIoZGUpKVxuK1x0ZGUgPSB2ZnNfbWtkaXJfbm9fcGVybShpZG1hcCwgZGlyLCBkZW50cnksIG1vZGUsIGRlbGVnYXRlZF9pbm9kZSk7XG4rXHRpZiAoSVNfRVJSKGRlKSkge1xuK1x0XHRlcnJvciA9IFBUUl9FUlIoZGUpO1xuIFx0XHRnb3RvIGVycjtcbi1cdGlmIChkZSkge1xuLVx0XHRkcHV0KGRlbnRyeSk7XG4tXHRcdGRlbnRyeSA9IGRlO1xuIFx0fVxuLVx0ZnNub3RpZnlfbWtkaXIoZGlyLCBkZW50cnkpO1xuLVx0cmV0dXJuIGRlbnRyeTtcbitcdHJldHVybiBkZTtcbiBcbiBlcnI6XG4gXHRlbmRfY3JlYXRpbmcoZGVudHJ5KTtcbkBAIC01NTY5LDcgKzU2NzQsNyBAQCBpbnQgZmlsZW5hbWVfdW5saW5rYXQoaW50IGRmZCwgc3RydWN0IGZpbGVuYW1lICpuYW1lKVxuIFx0XHRnb3RvIGV4aXRfZHJvcF93cml0ZTtcbiBcbiBcdC8qIFdoeSBub3QgYmVmb3JlPyBCZWNhdXNlIHdlIHdhbnQgY29ycmVjdCBlcnJvciB2YWx1ZSAqL1xuLVx0aWYgKHVubGlrZWx5KGxhc3QubmFtZVtsYXN0Lmxlbl0pKSB7XG4rXHRpZiAodW5saWtlbHkodHJhaWxpbmdfc2xhc2hlcyhsYXN0KSkpIHtcbiBcdFx0aWYgKGRfaXNfZGlyKGRlbnRyeSkpXG4gXHRcdFx0ZXJyb3IgPSAtRUlTRElSO1xuIFx0XHRlbHNlXG5AQCAtNjE3MSwxNiArNjI3NiwxNiBAQCBpbnQgZmlsZW5hbWVfcmVuYW1lYXQyKGludCBvbGRkZmQsIHN0cnVjdCBmaWxlbmFtZSAqZnJvbSxcbiBcdGlmIChmbGFncyBcdTAwMjYgUkVOQU1FX0VYQ0hBTkdFKSB7XG4gXHRcdGlmICghZF9pc19kaXIocmQubmV3X2RlbnRyeSkpIHtcbiBcdFx0XHRlcnJvciA9IC1FTk9URElSO1xuLVx0XHRcdGlmIChuZXdfbGFzdC5uYW1lW25ld19sYXN0Lmxlbl0pXG4rXHRcdFx0aWYgKHRyYWlsaW5nX3NsYXNoZXMobmV3X2xhc3QpKVxuIFx0XHRcdFx0Z290byBleGl0X3VubG9jaztcbiBcdFx0fVxuIFx0fVxuIFx0LyogdW5sZXNzIHRoZSBzb3VyY2UgaXMgYSBkaXJlY3RvcnkgdHJhaWxpbmcgc2xhc2hlcyBnaXZlIC1FTk9URElSICovXG4gXHRpZiAoIWRfaXNfZGlyKHJkLm9sZF9kZW50cnkpKSB7XG4gXHRcdGVycm9yID0gLUVOT1RESVI7XG4tXHRcdGlmIChvbGRfbGFzdC5uYW1lW29sZF9sYXN0Lmxlbl0pXG4rXHRcdGlmICh0cmFpbGluZ19zbGFzaGVzKG9sZF9sYXN0KSlcbiBcdFx0XHRnb3RvIGV4aXRfdW5sb2NrO1xuLVx0XHRpZiAoIShmbGFncyBcdTAwMjYgUkVOQU1FX0VYQ0hBTkdFKSBcdTAwMjZcdTAwMjYgbmV3X2xhc3QubmFtZVtuZXdfbGFzdC5sZW5dKVxuK1x0XHRpZiAoIShmbGFncyBcdTAwMjYgUkVOQU1FX0VYQ0hBTkdFKSBcdTAwMjZcdTAwMjYgdHJhaWxpbmdfc2xhc2hlcyhuZXdfbGFzdCkpXG4gXHRcdFx0Z290byBleGl0X3VubG9jaztcbiBcdH1cbiBcbmRpZmYgLS1naXQgYS9mcy9uZnMvZGlyLmMgYi9mcy9uZnMvZGlyLmNcbmluZGV4IGM3YjcyM2MxODYyMGM5Li5jODE1ZDlhYTliNjlkYSAxMDA2NDRcbi0tLSBhL2ZzL25mcy9kaXIuY1xuKysrIGIvZnMvbmZzL2Rpci5jXG5AQCAtMjEyMSw2ICsyMTIxLDkgQEAgaW50IG5mc19hdG9taWNfb3BlbihzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxuIFx0ZGZwcmludGsoVkZTLCBcIk5GUzogYXRvbWljX29wZW4oJXMvJWxsdSksICVwZFxcblwiLFxuIFx0XHRcdGRpci1cdTAwM2VpX3NiLVx1MDAzZXNfaWQsIGRpci1cdTAwM2VpX2lubywgZGVudHJ5KTtcbiBcbitcdGlmIChPX0lTX01LRElSKG9wZW5fZmxhZ3MpKVxuK1x0XHRvcGVuX2ZsYWdzIFx1MDAyNj0gfk9fQ1JFQVQ7XG4rXG4gXHRlcnIgPSBuZnNfY2hlY2tfZmxhZ3Mob3Blbl9mbGFncyk7XG4gXHRpZiAoZXJyKVxuIFx0XHRyZXR1cm4gZXJyO1xuQEAgLTIzMTMsNiArMjMxNiw5IEBAIGludCBuZnNfYXRvbWljX29wZW5fdjIzKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXG4gXHQgKi9cbiBcdGludCBlcnJvciA9IDA7XG4gXG4rXHRpZiAoT19JU19NS0RJUihvcGVuX2ZsYWdzKSlcbitcdFx0b3Blbl9mbGFncyBcdTAwMjY9IH5PX0NSRUFUO1xuK1xuIFx0aWYgKGRlbnRyeS1cdTAwM2VkX25hbWUubGVuIFx1MDAzZSBORlNfU0VSVkVSKGRpciktXHUwMDNlbmFtZWxlbilcbiBcdFx0cmV0dXJuIC1FTkFNRVRPT0xPTkc7XG4gXG5kaWZmIC0tZ2l0IGEvZnMvb3Blbi5jIGIvZnMvb3Blbi5jXG5pbmRleCA0MDg5MjVkN2JkMGI3Ny4uODdlODg2NGQ5NDgwODcgMTAwNjQ0XG4tLS0gYS9mcy9vcGVuLmNcbisrKyBiL2ZzL29wZW4uY1xuQEAgLTExOTAsMjkgKzExOTAsMzAgQEAgaW5saW5lIGludCBidWlsZF9vcGVuX2ZsYWdzKGNvbnN0IHN0cnVjdCBvcGVuX2hvdyAqaG93LCBzdHJ1Y3Qgb3Blbl9mbGFncyAqb3ApXG4gXHRpZiAoV0lMTF9DUkVBVEUoZmxhZ3MpKSB7XG4gXHRcdGlmIChob3ctXHUwMDNlbW9kZSBcdTAwMjYgflNfSUFMTFVHTylcbiBcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbi1cdFx0b3AtXHUwMDNlbW9kZSA9IGhvdy1cdTAwM2Vtb2RlIHwgU19JRlJFRztcbitcdFx0aWYgKE9fSVNfTUtESVIoZmxhZ3MpKVxuK1x0XHRcdG9wLVx1MDAzZW1vZGUgPSBob3ctXHUwMDNlbW9kZSB8IFNfSUZESVI7XG4rXHRcdGVsc2VcbitcdFx0XHRvcC1cdTAwM2Vtb2RlID0gaG93LVx1MDAzZW1vZGUgfCBTX0lGUkVHO1xuIFx0fSBlbHNlIHtcbiBcdFx0aWYgKGhvdy1cdTAwM2Vtb2RlICE9IDApXG4gXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHRcdG9wLVx1MDAzZW1vZGUgPSAwO1xuIFx0fVxuIFxuLVx0Lypcbi1cdCAqIEJsb2NrIGJ1Z3Mgd2hlcmUgT19ESVJFQ1RPUlkgfCBPX0NSRUFUIGNyZWF0ZWQgcmVndWxhciBmaWxlcy5cbi1cdCAqIE5vdGUsIHRoYXQgYmxvY2tpbmcgT19ESVJFQ1RPUlkgfCBPX0NSRUFUIGhlcmUgYWxzbyBwcm90ZWN0c1xuLVx0ICogT19UTVBGSUxFIGJlbG93IHdoaWNoIHJlcXVpcmVzIE9fRElSRUNUT1JZIGJlaW5nIHJhaXNlZC5cbi1cdCAqL1xuLVx0aWYgKChmbGFncyBcdTAwMjYgKE9fRElSRUNUT1JZIHwgT19DUkVBVCkpID09IChPX0RJUkVDVE9SWSB8IE9fQ1JFQVQpKVxuLVx0XHRyZXR1cm4gLUVJTlZBTDtcbi1cbiBcdC8qIE5vdyBoYW5kbGUgdGhlIGNyZWF0aXZlIGltcGxlbWVudGF0aW9uIG9mIE9fVE1QRklMRS4gKi9cbiBcdGlmIChmbGFncyBcdTAwMjYgX19PX1RNUEZJTEUpIHtcbiBcdFx0LypcbiBcdFx0ICogSW4gb3JkZXIgdG8gZW5zdXJlIHByb2dyYW1zIGdldCBleHBsaWNpdCBlcnJvcnMgd2hlbiB0cnlpbmdcbiBcdFx0ICogdG8gdXNlIE9fVE1QRklMRSBvbiBvbGQga2VybmVscyB3ZSBlbmZvcmNlIHRoYXQgT19ESVJFQ1RPUllcbi1cdFx0ICogaXMgcmFpc2VkIGFsb25nc2lkZSBfX09fVE1QRklMRS5cbitcdFx0ICogaXMgcmFpc2VkIGFsb25nc2lkZSBfX09fVE1QRklMRSwgYnV0IHdpdGhvdXQgT19DUkVBVC4gVGhlXG4rXHRcdCAqIHJlYXNvbiBmb3IgZGlzYWxsb3dpbmcgT19DUkVBVHxPX1RNUEZJTEUgaXMgdGhhdFxuK1x0XHQgKiBPX0RJUkVDVE9SWXxPX0NSRUFUIHVzZWQgdG8gd29yayBhbmQgY3JlYXRlZCBhIHJlZ3VsYXIgZmlsZVxuK1x0XHQgKiBpZiBub3RoaW5nIGV4aXN0ZWQgYXQgdGhlIG9wZW4gcGF0aC4gSGVuY2UsIGFsbG93aW5nIHRoZVxuK1x0XHQgKiBjb21iaW5hdGlvbiB3b3VsZCBoYXZlIGNhdXNlZCBPX0NSRUFUfE9fVE1QRklMRSB0byBjcmVhdGUgYVxuK1x0XHQgKiByZWd1bGFyIChub24tdGVtcG9yYXJ5KSBmaWxlIG9uIG9sZCBrZXJuZWxzLCB3aGlsZSB0aGUgY2FsbGVyXG4rXHRcdCAqIHdvdWxkIGJlbGlldmUgdGhleSBjcmVhdGVkIGFuIGFjdHVhbCBPX1RNUEZJTEUuXG4gXHRcdCAqL1xuLVx0XHRpZiAoIShmbGFncyBcdTAwMjYgT19ESVJFQ1RPUlkpKVxuK1x0XHRpZiAoIShmbGFncyBcdTAwMjYgT19ESVJFQ1RPUlkpIHx8IChmbGFncyBcdTAwMjYgT19DUkVBVCkpXG4gXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHRcdGlmICghKGFjY19tb2RlIFx1MDAyNiBNQVlfV1JJVEUpKVxuIFx0XHRcdHJldHVybiAtRUlOVkFMO1xuQEAgLTEyNjksNiArMTI3MCwxNSBAQCBpbmxpbmUgaW50IGJ1aWxkX29wZW5fZmxhZ3MoY29uc3Qgc3RydWN0IG9wZW5faG93ICpob3csIHN0cnVjdCBvcGVuX2ZsYWdzICpvcClcbiBcbiBcdG9wLVx1MDAzZWludGVudCA9IGZsYWdzIFx1MDAyNiBPX1BBVEggPyAwIDogTE9PS1VQX09QRU47XG4gXG4rXHQvKlxuK1x0ICogUmVxdWVzdGluZyB3cml0ZSBhY2Nlc3Mgb24gYSBkaXJlY3RvcnkgY2FuIG5ldmVyIHN1Y2NlZWQuIFJhdGhlclxuK1x0ICogdGhhbiBwZXJmb3JtaW5nIGEgcGF0aC13YWxrIHRvIGRldGVybWluZSB3aGV0aGVyIHRoZSB0YXJnZXQgaXNcbitcdCAqIGFjdHVhbGx5IGEgZGlyZWN0b3J5ICgtRUlTRElSKSBvciBub3QgKC1FTk9URElSKSwgd2Ugc2hvcnQtY2lyY3VpdFxuK1x0ICogdG8gLUVOT1RESVIuXG4rXHQgKi9cbitcdGlmICgoZmxhZ3MgXHUwMDI2IE9fRElSRUNUT1JZKSBcdTAwMjZcdTAwMjYgIShmbGFncyBcdTAwMjYgX19PX1RNUEZJTEUpIFx1MDAyNlx1MDAyNiAoYWNjX21vZGUgXHUwMDI2IE1BWV9XUklURSkpXG4rXHRcdHJldHVybiAtRU5PVERJUjtcbitcbiBcdGlmIChmbGFncyBcdTAwMjYgT19DUkVBVCkge1xuIFx0XHRvcC1cdTAwM2VpbnRlbnQgfD0gTE9PS1VQX0NSRUFURTtcbiBcdFx0aWYgKGZsYWdzIFx1MDAyNiBPX0VYQ0wpIHtcbmRpZmYgLS1naXQgYS9mcy9zbWIvY2xpZW50L2Rpci5jIGIvZnMvc21iL2NsaWVudC9kaXIuY1xuaW5kZXggODhhNGExNzg3ZmYwNDcuLjc1YmY4NmNjMDYxMjJlIDEwMDY0NFxuLS0tIGEvZnMvc21iL2NsaWVudC9kaXIuY1xuKysrIGIvZnMvc21iL2NsaWVudC9kaXIuY1xuQEAgLTUzOCw2ICs1MzgsOSBAQCBpbnQgY2lmc19hdG9taWNfb3BlbihzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGlyZW50cnksXG4gXHRpZiAodW5saWtlbHkoY2lmc19mb3JjZWRfc2h1dGRvd24oY2lmc19zYikpKVxuIFx0XHRyZXR1cm4gc21iX0VJTyhzbWJfZWlvX3RyYWNlX2ZvcmNlZF9zaHV0ZG93bik7XG4gXG4rXHRpZiAoT19JU19NS0RJUihvZmxhZ3MpKVxuK1x0XHRvZmxhZ3MgXHUwMDI2PSB+T19DUkVBVDtcbitcbiBcdC8qXG4gXHQgKiBQb3NpeCBvcGVuIGlzIG9ubHkgY2FsbGVkIChhdCBsb29rdXAgdGltZSkgZm9yIGZpbGUgY3JlYXRlIG5vdy4gRm9yXG4gXHQgKiBvcGVucyAocmF0aGVyIHRoYW4gY3JlYXRlcyksIGJlY2F1c2Ugd2UgZG8gbm90IGtub3cgaWYgaXQgaXMgYSBmaWxlXG5kaWZmIC0tZ2l0IGEvZnMvdmJveHNmL2Rpci5jIGIvZnMvdmJveHNmL2Rpci5jXG5pbmRleCBjNWJkMzI3MWFhOTYxNi4uNzdhZTJmNjk2ZmQ0MzcgMTAwNjQ0XG4tLS0gYS9mcy92Ym94c2YvZGlyLmNcbisrKyBiL2ZzL3Zib3hzZi9kaXIuY1xuQEAgLTMxOCw2ICszMTgsOSBAQCBzdGF0aWMgaW50IHZib3hzZl9kaXJfYXRvbWljX29wZW4oc3RydWN0IGlub2RlICpwYXJlbnQsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcbiBcdHU2NCBoYW5kbGU7XG4gXHRpbnQgZXJyO1xuIFxuK1x0aWYgKE9fSVNfTUtESVIoZmxhZ3MpKVxuK1x0XHRmbGFncyBcdTAwMjY9IH5PX0NSRUFUO1xuK1xuIFx0aWYgKGRfaW5fbG9va3VwKGRlbnRyeSkpIHtcbiBcdFx0c3RydWN0IGRlbnRyeSAqcmVzID0gdmJveHNmX2Rpcl9sb29rdXAocGFyZW50LCBkZW50cnksIDApO1xuIFx0XHRpZiAocmVzIHx8IGRfcmVhbGx5X2lzX3Bvc2l0aXZlKGRlbnRyeSkpXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9mY250bC5oIGIvaW5jbHVkZS9saW51eC9mY250bC5oXG5pbmRleCA2YWQ2YjllN2EyMjZhZi4uNmI3NTI3N2JlNTU5ZGQgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2ZjbnRsLmhcbisrKyBiL2luY2x1ZGUvbGludXgvZmNudGwuaFxuQEAgLTMwLDYgKzMwLDEyIEBAXG4gICovXG4gI2RlZmluZSBfX09fUkVHVUxBUlx0XHQoMSBcdTAwM2NcdTAwM2MgMzApXG4gXG4rI2RlZmluZSBPX01LRElSX01BU0tcdChPX0NSRUFUIHwgT19ESVJFQ1RPUlkpXG4rc3RhdGljIGlubGluZSBib29sIE9fSVNfTUtESVIodW5zaWduZWQgZmxhZ3MpXG4re1xuK1x0cmV0dXJuIChmbGFncyBcdTAwMjYgT19NS0RJUl9NQVNLKSA9PSBPX01LRElSX01BU0s7XG4rfVxuK1xuIC8qIExpc3Qgb2YgYWxsIHZhbGlkIGZsYWdzIGZvciB0aGUgaG93LVx1MDAzZXJlc29sdmUgYXJndW1lbnQ6ICovXG4gI2RlZmluZSBWQUxJRF9SRVNPTFZFX0ZMQUdTIFxcXG4gXHQoUkVTT0xWRV9OT19YREVWIHwgUkVTT0xWRV9OT19NQUdJQ0xJTktTIHwgUkVTT0xWRV9OT19TWU1MSU5LUyB8IFxcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZmlsZXN5c3RlbXMvLmdpdGlnbm9yZSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2ZpbGVzeXN0ZW1zLy5naXRpZ25vcmVcbmluZGV4IGE3OGY4OTQxNTdkZTMzLi5kNzc5YTc5NDVjZjgwMyAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2ZpbGVzeXN0ZW1zLy5naXRpZ25vcmVcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2ZpbGVzeXN0ZW1zLy5naXRpZ25vcmVcbkBAIC0xLDQgKzEsNSBAQFxuICMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuK29wZW5fb19jcmVhdF9vX2RpclxuIGRub3RpZnlfdGVzdFxuIGRldnB0c19wdHNcbiBmY2xvZ1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2ZpbGVzeXN0ZW1zL01ha2VmaWxlIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZmlsZXN5c3RlbXMvTWFrZWZpbGVcbmluZGV4IGE3ZWMyYmEyZGQ4MzM0Li5iNjA5NTBmOGIxNWMyMSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2ZpbGVzeXN0ZW1zL01ha2VmaWxlXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9maWxlc3lzdGVtcy9NYWtlZmlsZVxuQEAgLTEsNyArMSw3IEBAXG4gIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuIFxuIENGTEFHUyArPSAkKEtIRFJfSU5DTFVERVMpXG4tVEVTVF9HRU5fUFJPR1MgOj0gZGV2cHRzX3B0cyBmaWxlX3N0cmVzc29yIGFub25faW5vZGVfdGVzdCBrZXJuZnNfdGVzdCBmY2xvZ1xuK1RFU1RfR0VOX1BST0dTIDo9IG9wZW5fb19jcmVhdF9vX2RpciBkZXZwdHNfcHRzIGZpbGVfc3RyZXNzb3IgYW5vbl9pbm9kZV90ZXN0IGtlcm5mc190ZXN0IGZjbG9nXG4gVEVTVF9HRU5fUFJPR1MgKz0gaWRtYXBwZWRfdG1wZmlsZVxuIFRFU1RfR0VOX1BST0dTX0VYVEVOREVEIDo9IGRub3RpZnlfdGVzdFxuIFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2ZpbGVzeXN0ZW1zL2ZjbG9nLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9maWxlc3lzdGVtcy9mY2xvZy5jXG5pbmRleCA1NTFjNGEwZjM5NWExMi4uNTkzYTUxMzZlOTkxOTIgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9maWxlc3lzdGVtcy9mY2xvZy5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9maWxlc3lzdGVtcy9mY2xvZy5jXG5AQCAtNiwxMCArNiw4IEBAXG4gXG4gI2luY2x1ZGUgXHUwMDNjYXNzZXJ0LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NlcnJuby5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjZmNudGwuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY3NjaGVkLmhcdTAwM2Vcbi0jaW5jbHVkZSBcdTAwM2NzdGRpby5oXHUwMDNlXG4tI2luY2x1ZGUgXHUwMDNjc3RkbGliLmhcdTAwM2Vcbi0jaW5jbHVkZSBcdTAwM2NzdHJpbmcuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY3VuaXN0ZC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjc3lzL21vdW50LmhcdTAwM2VcbiBcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9maWxlc3lzdGVtcy9vcGVuX29fY3JlYXRfb19kaXIuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2ZpbGVzeXN0ZW1zL29wZW5fb19jcmVhdF9vX2Rpci5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLmRmM2NkYmFlMmM4NTI0XG4tLS0gL2Rldi9udWxsXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9maWxlc3lzdGVtcy9vcGVuX29fY3JlYXRfb19kaXIuY1xuQEAgLTAsMCArMSwxOTcgQEBcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuKyNpbmNsdWRlIFx1MDAzY3N5cy9zdGF0LmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NzeXMvc3lzY2FsbC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjZXJybm8uaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbWl0cy5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjZmNudGwuaFx1MDAzZVxuK1xuKyNpbmNsdWRlIFwia3NlbGZ0ZXN0X2hhcm5lc3MuaFwiXG4rXG4rc3RhdGljIGlubGluZSBpbnQgb3Blbl9vX2NyZWF0X29fZGlyKGludCBkZmQsIGNvbnN0IGNoYXIgKnBhdGhuYW1lLFxuK1x0XHRcdFx0ICAgICBtb2RlX3QgbW9kZSwgdW5zaWduZWQgaW50IGZsYWdzKVxuK3tcbitcdHJldHVybiBzeXNjYWxsKF9fTlJfb3BlbmF0LCBkZmQsIHBhdGhuYW1lLFxuK1x0XHQgICAgICAgZmxhZ3MgfCBPX0RJUkVDVE9SWSB8IE9fQ1JFQVQsIG1vZGUpO1xuK31cbitcbisjZGVmaW5lIG9wZW5fb19jcmVhdF9vX2Rpcl9jaGVja2VkX2ZsYWdzKGRmZCwgcGF0aG5hbWUsIGZsYWdzKSAoe1x0XFxcbitcdHN0cnVjdCBzdGF0IF9fc3Q7XHRcdFx0XHRcdFx0XFxcbitcdGludCBfX2ZkID0gb3Blbl9vX2NyZWF0X29fZGlyKGRmZCwgcGF0aG5hbWUsIFNfSVJXWFUsIGZsYWdzKTtcdFxcXG4rXHRBU1NFUlRfR0UoX19mZCwgMCk7XHRcdFx0XHRcdFx0XFxcbitcdEFTU0VSVF9FUShmc3RhdChfX2ZkLCBcdTAwMjZfX3N0KSwgMCk7XHRcdFx0XHRcXFxuK1x0RVhQRUNUX1RSVUUoU19JU0RJUihfX3N0LnN0X21vZGUpKTtcdFx0XHRcdFxcXG4rXHRfX2ZkO1x0XHRcdFx0XHRcdFx0XHRcXFxuK30pXG4rXG4rI2RlZmluZSBvcGVuX29fY3JlYXRfb19kaXJfY2hlY2tlZChkZmQsIHBhdGhuYW1lKSBcXFxuK1x0b3Blbl9vX2NyZWF0X29fZGlyX2NoZWNrZWRfZmxhZ3MoZGZkLCBwYXRobmFtZSwgMClcbitcbitGSVhUVVJFKG9wZW5fb19jcmVhdF9vX2Rpcikge1xuK1x0Y2hhciBkaXJwYXRoW1BBVEhfTUFYXTtcbitcdGludCBkZmQ7XG4rfTtcbitcbitGSVhUVVJFX1NFVFVQKG9wZW5fb19jcmVhdF9vX2Rpcilcbit7XG4rXHRzdHJjcHkoc2VsZi1cdTAwM2VkaXJwYXRoLCBcIi90bXAvb3Blbl9vX2NyZWF0X29fZGlyX3Rlc3QuWFhYWFhYXCIpO1xuK1x0QVNTRVJUX05FKG1rZHRlbXAoc2VsZi1cdTAwM2VkaXJwYXRoKSwgTlVMTCk7XG4rXHRzZWxmLVx1MDAzZWRmZCA9IG9wZW4oc2VsZi1cdTAwM2VkaXJwYXRoLCBPX0RJUkVDVE9SWSk7XG4rXHRBU1NFUlRfR0Uoc2VsZi1cdTAwM2VkZmQsIDApO1xuK31cbitcbitGSVhUVVJFX1RFQVJET1dOKG9wZW5fb19jcmVhdF9vX2Rpcilcbit7XG4rXHRjbG9zZShzZWxmLVx1MDAzZWRmZCk7XG4rXHRybWRpcihzZWxmLVx1MDAzZWRpcnBhdGgpO1xuK31cbitcbisvKiBEb2VzIG9wZW5fb19jcmVhdF9vX2RpciByZXR1cm4gYSBmZCBhdCBhbGw/ICovXG4rVEVTVF9GKG9wZW5fb19jcmVhdF9vX2RpciwgcmV0dXJuc19mZClcbit7XG4rXHRpbnQgZmQgPSBvcGVuX29fY3JlYXRfb19kaXJfY2hlY2tlZChzZWxmLVx1MDAzZWRmZCwgXCJuZXdkaXJcIik7XG4rXHRFWFBFQ1RfRVEoY2xvc2UoZmQpLCAwKTtcbitcdEVYUEVDVF9FUSh1bmxpbmthdChzZWxmLVx1MDAzZWRmZCwgXCJuZXdkaXJcIiwgQVRfUkVNT1ZFRElSKSwgMCk7XG4rfVxuK1xuKy8qIFRoZSBmZCBtdXN0IHJlZmVyIHRvIHRoZSBkaXJlY3RvcnkgdGhhdCB3YXMganVzdCBjcmVhdGVkLiAqL1xuK1RFU1RfRihvcGVuX29fY3JlYXRfb19kaXIsIGZkX2lzX2NyZWF0ZWRfZGlyKVxuK3tcbitcdGludCBmZDtcbitcdHN0cnVjdCBzdGF0IHN0X3ZpYV9mZCwgc3RfdmlhX3BhdGg7XG4rXHRjaGFyIHBhdGhbUEFUSF9NQVhdO1xuK1xuK1x0ZmQgPSBvcGVuX29fY3JlYXRfb19kaXJfY2hlY2tlZChzZWxmLVx1MDAzZWRmZCwgXCJjaGVja2RpclwiKTtcbitcbitcdEFTU0VSVF9FUShmc3RhdChmZCwgXHUwMDI2c3RfdmlhX2ZkKSwgMCk7XG4rXG4rXHRzbnByaW50ZihwYXRoLCBzaXplb2YocGF0aCksIFwiJXMvY2hlY2tkaXJcIiwgc2VsZi1cdTAwM2VkaXJwYXRoKTtcbitcdEFTU0VSVF9FUShzdGF0KHBhdGgsIFx1MDAyNnN0X3ZpYV9wYXRoKSwgMCk7XG4rXG4rXHRFWFBFQ1RfRVEoc3RfdmlhX2ZkLnN0X2lubywgc3RfdmlhX3BhdGguc3RfaW5vKTtcbitcdEVYUEVDVF9FUShzdF92aWFfZmQuc3RfZGV2LCBzdF92aWFfcGF0aC5zdF9kZXYpO1xuK1xuK1x0RVhQRUNUX0VRKGNsb3NlKGZkKSwgMCk7XG4rXHRFWFBFQ1RfRVEocm1kaXIocGF0aCksIDApO1xuK31cbitcbisvKiBNaXNzaW5nIHBhcmVudCBjb21wb25lbnQgbXVzdCBmYWlsIHdpdGggRU5PRU5ULiAqL1xuK1RFU1RfRihvcGVuX29fY3JlYXRfb19kaXIsIGVub2VudF9taXNzaW5nX3BhcmVudClcbit7XG4rXHRFWFBFQ1RfRVEob3Blbl9vX2NyZWF0X29fZGlyKHNlbGYtXHUwMDNlZGZkLCBcIm5vbmV4aXN0ZW50L2NoaWxkXCIsIFNfSVJXWFUsIDApLCAtMSk7XG4rXHRFWFBFQ1RfRVEoZXJybm8sIEVOT0VOVCk7XG4rfVxuK1xuKy8qIEFuIGludmFsaWQgZGZkIG11c3QgZmFpbCB3aXRoIEVCQURGLiAqL1xuK1RFU1RfRihvcGVuX29fY3JlYXRfb19kaXIsIGViYWRmKVxuK3tcbitcdEVYUEVDVF9FUShvcGVuX29fY3JlYXRfb19kaXIoLTQyLCBcImJhZGZkaXJcIiwgU19JUldYVSwgMCksIC0xKTtcbitcdEVYUEVDVF9FUShlcnJubywgRUJBREYpO1xuK31cbitcbisvKiBBIGRmZCB0aGF0IHBvaW50cyB0byBhIGZpbGUgKG5vdCBhIGRpcmVjdG9yeSkgbXVzdCBmYWlsIHdpdGggRU5PVERJUi4gKi9cbitURVNUX0Yob3Blbl9vX2NyZWF0X29fZGlyLCBlbm90ZGlyX2RmZClcbit7XG4rXHRpbnQgZmlsZV9mZDtcbitcbitcdGZpbGVfZmQgPSBvcGVuYXQoc2VsZi1cdTAwM2VkZmQsIFwiZmlsZVwiLFxuK1x0XHRcdCBPX0NSRUFUIHwgT19XUk9OTFksIFNfSVJXWFUpO1xuK1x0QVNTRVJUX0dFKGZpbGVfZmQsIDApO1xuK1xuK1x0RVhQRUNUX0VRKG9wZW5fb19jcmVhdF9vX2RpcihmaWxlX2ZkLCBcInN1YmRpclwiLCBTX0lSV1hVLCAwKSwgLTEpO1xuK1x0RVhQRUNUX0VRKGVycm5vLCBFTk9URElSKTtcbitcbitcdEVYUEVDVF9FUShjbG9zZShmaWxlX2ZkKSwgMCk7XG4rXHRFWFBFQ1RfRVEodW5saW5rYXQoc2VsZi1cdTAwM2VkZmQsIFwiZmlsZVwiLCAwKSwgMCk7XG4rfVxuK1xuKy8qXG4rICogT19FWENMIHRvZ2V0aGVyIHdpdGggT19DUkVBVHxPX0RJUkVDVE9SWSBtdXN0IGZhaWwgd2l0aCBFRVhJU1Qgd2hlblxuKyAqIHRoZSB0YXJnZXQgZGlyZWN0b3J5IGFscmVhZHkgZXhpc3RzLlxuKyAqL1xuK1RFU1RfRihvcGVuX29fY3JlYXRfb19kaXIsIG9fZXhjbF9lZXhpc3QpXG4re1xuK1x0aW50IGZkO1xuK1xuK1x0ZmQgPSBvcGVuX29fY3JlYXRfb19kaXJfY2hlY2tlZF9mbGFncyhzZWxmLVx1MDAzZWRmZCwgXCJleGNsZGlyXCIsIE9fRVhDTCk7XG4rXHRFWFBFQ1RfRVEoY2xvc2UoZmQpLCAwKTtcbitcbitcdEVYUEVDVF9FUShvcGVuX29fY3JlYXRfb19kaXIoc2VsZi1cdTAwM2VkZmQsIFwiZXhjbGRpclwiLCBTX0lSV1hVLCBPX0VYQ0wpLCAtMSk7XG4rXHRFWFBFQ1RfRVEoZXJybm8sIEVFWElTVCk7XG4rXG4rXHRFWFBFQ1RfRVEodW5saW5rYXQoc2VsZi1cdTAwM2VkZmQsIFwiZXhjbGRpclwiLCBBVF9SRU1PVkVESVIpLCAwKTtcbit9XG4rXG4rLypcbisgKiBPX0NSRUFUfE9fRElSRUNUT1JZIG9uIGEgcGF0aCB0aGF0IGFscmVhZHkgZXhpc3RzIGFzIGEgcmVndWxhciBmaWxlXG4rICogbXVzdCBmYWlsIHdpdGggRU5PVERJUi5cbisgKi9cbitURVNUX0Yob3Blbl9vX2NyZWF0X29fZGlyLCBleGlzdGluZ19maWxlX2Vub3RkaXIpXG4re1xuK1x0aW50IGZpbGVfZmQ7XG4rXG4rXHRmaWxlX2ZkID0gb3BlbmF0KHNlbGYtXHUwMDNlZGZkLCBcInJlZ2ZpbGVcIixcbitcdFx0XHQgT19DUkVBVCB8IE9fV1JPTkxZLCBTX0lSV1hVKTtcbitcdEFTU0VSVF9HRShmaWxlX2ZkLCAwKTtcbitcdEVYUEVDVF9FUShjbG9zZShmaWxlX2ZkKSwgMCk7XG4rXG4rXHRFWFBFQ1RfRVEob3Blbl9vX2NyZWF0X29fZGlyKHNlbGYtXHUwMDNlZGZkLCBcInJlZ2ZpbGVcIiwgU19JUldYVSwgMCksIC0xKTtcbitcdEVYUEVDVF9FUShlcnJubywgRU5PVERJUik7XG4rXG4rXHRFWFBFQ1RfRVEodW5saW5rYXQoc2VsZi1cdTAwM2VkZmQsIFwicmVnZmlsZVwiLCAwKSwgMCk7XG4rfVxuK1xuKy8qXG4rICogT19DUkVBVHxPX0RJUkVDVE9SWSBjb21iaW5lZCB3aXRoIGEgd3JpdGFibGUgYWNjZXNzIG1vZGUgbXVzdCBiZVxuKyAqIHJlamVjdGVkOiBhIGRpcmVjdG9yeSBjYW5ub3QgYmUgb3BlbmVkIGZvciB3cml0aW5nLlxuKyAqL1xuK1RFU1RfRihvcGVuX29fY3JlYXRfb19kaXIsIHJlamVjdHNfd3JpdGFibGVfYWNjX21vZGUpXG4re1xuK1x0RVhQRUNUX0VRKG9wZW5fb19jcmVhdF9vX2RpcihzZWxmLVx1MDAzZWRmZCwgXCJyZHdyZGlyXCIsIFNfSVJXWFUsIE9fUkRXUiksIC0xKTtcbitcdEVYUEVDVF9FUShlcnJubywgRU5PVERJUik7XG4rXHQvKiBDbGVhbiB1cCBpZiB0aGUga2VybmVsIGNyZWF0ZWQgdGhlIGRpcmVjdG9yeSBhbnl3YXkuICovXG4rXHR1bmxpbmthdChzZWxmLVx1MDAzZWRmZCwgXCJyZHdyZGlyXCIsIEFUX1JFTU9WRURJUik7XG4rfVxuK1xuKy8qXG4rICogb3BlbmF0KE9fQ1JFQVQpIHdpdGggYSB0cmFpbGluZyBzbGFzaCBidXQgd2l0aG91dCBPX0RJUkVDVE9SWVxuKyAqIG11c3QgZmFpbCB3aXRoIEVJU0RJUiBhbmQgbXVzdCBub3QgY3JlYXRlIGFueXRoaW5nIGF0IHRoZSBwYXRoLlxuKyAqL1xuK1RFU1RfRihvcGVuX29fY3JlYXRfb19kaXIsIHRyYWlsaW5nX3NsYXNoX25vX29fZGlyKVxuK3tcbitcdGludCBmZDtcbitcdHN0cnVjdCBzdGF0IHN0O1xuK1xuK1x0ZmQgPSBvcGVuYXQoc2VsZi1cdTAwM2VkZmQsIFwidHJhaWxpbmcvXCIsIE9fQ1JFQVQgfCBPX1dST05MWSwgU19JUldYVSk7XG4rXHRFWFBFQ1RfRVEoZmQsIC0xKTtcbitcdEVYUEVDVF9FUShlcnJubywgRUlTRElSKTtcbitcbitcdEVYUEVDVF9FUShmc3RhdGF0KHNlbGYtXHUwMDNlZGZkLCBcInRyYWlsaW5nXCIsIFx1MDAyNnN0LCAwKSwgLTEpO1xuK1x0RVhQRUNUX0VRKGVycm5vLCBFTk9FTlQpO1xuK1xuK1x0LyogQmVzdC1lZmZvcnQgY2xlYW51cCBpbiBjYXNlIHRoZSBrZXJuZWwgbGVmdCBhIGZpbGUgYmVoaW5kLiAqL1xuK1x0aWYgKGZkIFx1MDAzZT0gMClcbitcdFx0Y2xvc2UoZmQpO1xuK1x0dW5saW5rYXQoc2VsZi1cdTAwM2VkZmQsIFwidHJhaWxpbmdcIiwgMCk7XG4rfVxuK1xuKy8qXG4rICogVGhlIHJldHVybmVkIGZkIG11c3QgYmUgdXNhYmxlIGFzIGEgZGZkIGZvciBmdXJ0aGVyICphdCgpIGNhbGxzLlxuKyAqL1xuK1RFU1RfRihvcGVuX29fY3JlYXRfb19kaXIsIGZkX3VzYWJsZV9hc19kZmQpXG4re1xuK1x0aW50IHBhcmVudF9mZCwgY2hpbGRfZmQ7XG4rXHRjaGFyIHBhdGhbUEFUSF9NQVhdO1xuK1xuK1x0cGFyZW50X2ZkID0gb3Blbl9vX2NyZWF0X29fZGlyX2NoZWNrZWQoc2VsZi1cdTAwM2VkZmQsIFwicGFyZW50XCIpO1xuK1x0Y2hpbGRfZmQgPSBvcGVuX29fY3JlYXRfb19kaXJfY2hlY2tlZChwYXJlbnRfZmQsIFwiY2hpbGRcIik7XG4rXG4rXHRFWFBFQ1RfRVEoY2xvc2UoY2hpbGRfZmQpLCAwKTtcbitcdEVYUEVDVF9FUShjbG9zZShwYXJlbnRfZmQpLCAwKTtcbitcbitcdHNucHJpbnRmKHBhdGgsIHNpemVvZihwYXRoKSwgXCIlcy9wYXJlbnQvY2hpbGRcIiwgc2VsZi1cdTAwM2VkaXJwYXRoKTtcbitcdEVYUEVDVF9FUShybWRpcihwYXRoKSwgMCk7XG4rXHRzbnByaW50ZihwYXRoLCBzaXplb2YocGF0aCksIFwiJXMvcGFyZW50XCIsIHNlbGYtXHUwMDNlZGlycGF0aCk7XG4rXHRFWFBFQ1RfRVEocm1kaXIocGF0aCksIDApO1xuK31cbitcbitURVNUX0hBUk5FU1NfTUFJTlxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDRUMTY6NTk6NTAuODQ0NTgzNjg0WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTcwMjI0NTAzMTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBQbGFuOiBFbmhhbmNpbmcgRGlyZWN0b3J5IENyZWF0aW9uIHdpdGggYG9wZW5hdGAqKlxuXG5Pa2F5LCBzbyB3ZSBoYXZlIHRoaXMgcGF0Y2ggdGhhdCdzIGZ1bmRhbWVudGFsbHkgY2hhbmdpbmcgaG93IGBPX0NSRUFUYCBhbmQgYE9fRElSRUNUT1JZYCBpbnRlcmFjdCB3aXRoaW4gYG9wZW5hdGAgYW5kIHJlbGF0ZWQgc3lzdGVtIGNhbGxzLiBTcGVjaWZpY2FsbHksIGl0J3MgYWxsb3dpbmcgdGhlIGNyZWF0aW9uIG9mIGRpcmVjdG9yaWVzIHVzaW5nIGBPX0NSRUFUIHwgT19ESVJFQ1RPUllgLCBhIGZ1bmN0aW9uYWxpdHkgdGhhdCB3YXMgcHJldmlvdXNseSBlaXRoZXIgbm90IHN1cHBvcnRlZCBvciBoYWQgaW5jb25zaXN0ZW50IGJlaGF2aW9yLiBUaGlzIGlzIGEgY29yZSBWRlMgY2hhbmdlIHRoYXQgYWRkcyBzdXBwb3J0IGZvciBjcmVhdGluZyBkaXJlY3RvcmllcyB2aWEgYG9wZW5hdCguLi4sIE9fQ1JFQVQgfCBPX0RJUkVDVE9SWSwgLi4uKWAuXG5cbkl0IG1vZGlmaWVzIGBmcy9uYW1laS5jYCwgYGZzL29wZW4uY2AsIGFuZCBzZXZlcmFsIGZpbGVzeXN0ZW1zIHRvIGhhbmRsZSB0aGlzIG5ldyBiZWhhdmlvci4gRnJvbSB3aGF0IEkgY2FuIHNlZSwgdGhlIGZpbGVzeXN0ZW1zICg5cCwgY2VwaCwgZnVzZSwgZ2ZzMiwgbmZzLCBzbWIsIHZib3hzZikgYXJlIG1vc3RseSBpbnZvbHZlZCBpbiBjbGVhcmluZyBgT19DUkVBVGAgaWYgYE9fSVNfTUtESVIoZmxhZ3MpYCBpcyB0cnVlIHdpdGhpbiB0aGVpciBgYXRvbWljX29wZW5gIGltcGxlbWVudGF0aW9ucy4gYE9fSVNfTUtESVIoZmxhZ3MpYCBpcyBkZWZpbmVkIGFzIGAoZmxhZ3MgXHUwMDI2IE9fTUtESVJfTUFTSykgPT0gT19NS0RJUl9NQVNLYCB3aGVyZSBgT19NS0RJUl9NQVNLYCBpcyBgT19DUkVBVCB8IE9fRElSRUNUT1JZYC5cblxuVGhlIGNydWNpYWwgY2hhbmdlIGxpZXMgaW4gdGhlIFZGUzogYHZmc19jcmVhdGVfbm9fcGVybWAgYW5kIGB2ZnNfbWtkaXJfbm9fcGVybWAgaGF2ZSBiZWVuIGludHJvZHVjZWQuIGBhdG9taWNfb3BlbmAgYW5kIGBsb29rdXBfb3BlbmAgYXJlIG1vZGlmaWVkIHRvIGFjY29tbW9kYXRlIHRoaXMgbmV3IGBjcmVhdGVfZGlyID0gT19JU19NS0RJUihvcGVuX2ZsYWcpYCBmbGFnLiBJZiBgY3JlYXRlX2RpcmAgaXMgdHJ1ZSwgdGhlIHN5c3RlbSBjYWxscyBgdmZzX21rZGlyX25vX3Blcm1gIGluc3RlYWQgb2YgYHZmc19jcmVhdGVfbm9fcGVybWAsIGFuZCBgbWF5X29fY3JlYXRlYCBub3cgdGFrZXMgYSBgY3JlYXRlX2RpcmAgcGFyYW1ldGVyIGFuZCBjYWxscyBzZWN1cml0eSBob29rcyBmb3IgbWtkaXIgb3BlcmF0aW9ucy5cblxuVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGFuZCBhYnNvbHV0ZWx5IGRlbWFuZHMgZnV6emluZyB0byBlbnN1cmUgc3RhYmlsaXR5IGFuZCBjb3JyZWN0bmVzcy4gV2UgaGF2ZSB0byBtYWtlIHN1cmUgd2UgaGl0IGV2ZXJ5IHBvc3NpYmxlIHNjZW5hcmlvLlxuXG5NeSBmb2N1cyBzaG91bGQgYmUgb24gZnV6emluZyB0aGVzZSBrZXkgZnVuY3Rpb25zOlxuXG4qICAgYGxvb2t1cF9vcGVuYFxuKiAgIGBhdG9taWNfb3BlbmAgKHBhcnRpY3VsYXJseSB0aGUgVkZTIGltcGxlbWVudGF0aW9uIGluIGBmcy9uYW1laS5jYClcbiogICBgdmZzX21rZGlyX25vX3Blcm1gXG4qICAgYHZmc19jcmVhdGVfbm9fcGVybWBcbiogICBgbWF5X29fY3JlYXRlYFxuKiAgIGBidWlsZF9vcGVuX2ZsYWdzYFxuKiAgIGBkb19vcGVuYFxuKiAgIGBkZW50cnlfY3JlYXRlYFxuKiAgIGB2ZnNfbWtkaXJgXG4qICAgYHZmc19jcmVhdGVgXG5cbkkgdGhpbmsgSSBoYXZlIGEgZ29vZCBoYW5kbGUgb24gaG93IHRoZSBmaWxlc3lzdGVtcyBhcmUgaW50ZXJhY3Rpbmcgd2l0aCB0aGlzLiBTcGVjaWZpY2FsbHksIHRoZXkncmUgY2xlYXJpbmcgYE9fQ1JFQVRgIGluIGBhdG9taWNfb3BlbmAsIGFuZCB0aGlzIHNlZW1zIHRvIGJlIGJ5IGRlc2lnbi4gSWYgYGF0b21pY19vcGVuYCBjbGVhcnMgYE9fQ1JFQVRgLCBpdCB3b24ndCBhdHRlbXB0IHRvIGNyZWF0ZSwgYW5kIHRoZSBWRlMgd2lsbCBoYW5kbGUgdGhlIGNyZWF0aW9uIHZpYSBgdmZzX21rZGlyX25vX3Blcm1gLiBUaGlzIG1lY2hhbmlzbSBsb29rcyBuaWNlLlxuXG5Ob3csIGxldCdzIHZlcmlmeSB0aGF0IHRoZXNlIGtleSBmdW5jdGlvbnMgYXJlIGF2YWlsYWJsZSBmb3IgaW5zdHJ1bWVudGF0aW9uIGFuZCBmdXp6aW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDg1NCwiT3V0cHV0VG9rZW5zIjo3NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0NjgsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wNFQxNzowMDowNy44NjcwMzY2NDlaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjY1ODY5NTA2MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJeKHN0YXRpYyApPyhpbmxpbmUgKT8oc3RydWN0IGRlbnRyeSBcXFxcKnxpbnR8dm9pZHxzdHJ1Y3QgZmlsZSBcXFxcKikgKGxvb2t1cF9vcGVufGF0b21pY19vcGVufG1heV9vX2NyZWF0ZXxidWlsZF9vcGVuX2ZsYWdzfGRvX29wZW58ZGVudHJ5X2NyZWF0ZXx2ZnNfbWtkaXJ8dmZzX2NyZWF0ZSlcXFxcKFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9rZXJuZWwvYXBtXzMyLmM9MTUzNz1zdGF0aWMgaW50IGRvX3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbHApXFxuLS1cXG5hcmNoL3g4Ni9rZXJuZWwvYXBtXzMyLmMtMTU3NC1cXG5hcmNoL3g4Ni9rZXJuZWwvYXBtXzMyLmM6MTU3NTpzdGF0aWMgaW50IGRvX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbHApXFxuYXJjaC94ODYva2VybmVsL2FwbV8zMi5jLTE1NzYte1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQveGlyY29tL3hpcmMycHNfY3MuYz0yOTY9c3RhdGljIGludCBkb19jb25maWcoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGlmbWFwICptYXApO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3hpcmNvbS94aXJjMnBzX2NzLmM6Mjk3OnN0YXRpYyBpbnQgZG9fb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC94aXJjb20veGlyYzJwc19jcy5jLTI5OC1zdGF0aWMgaW50IGRvX2lvY3RsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpZnJlcSAqcnEsIGludCBjbWQpO1xcbi0tXFxuZnMvbmFtZWkuYz00MTg2PWludCB2ZnNfY3JlYXRlX25vX3Blcm0oc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcXG4tLVxcbmZzL25hbWVpLmMtNDIxNy0gKi9cXG5mcy9uYW1laS5jOjQyMTg6aW50IHZmc19jcmVhdGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlLFxcbmZzL25hbWVpLmMtNDIxOS1cXHQgICAgICAgc3RydWN0IGRlbGVnYXRlZF9pbm9kZSAqZGkpXFxuLS1cXG5mcy9uYW1laS5jPTQzNDQ9c3RhdGljIGlubGluZSBpbnQgb3Blbl90b19uYW1laV9mbGFncyhpbnQgZmxhZylcXG4tLVxcbmZzL25hbWVpLmMtNDM1MC1cXG5mcy9uYW1laS5jOjQzNTE6c3RhdGljIGludCBtYXlfb19jcmVhdGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXFxuZnMvbmFtZWkuYy00MzUyLVxcdFxcdFxcdGNvbnN0IHN0cnVjdCBwYXRoICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcXG4tLVxcbmZzL25hbWVpLmM9NDY1NT1zdGF0aWMgY29uc3QgY2hhciAqb3Blbl9sYXN0X2xvb2t1cHMoc3RydWN0IG5hbWVpZGF0YSAqbmQsXFxuLS1cXG5mcy9uYW1laS5jLTQ3NDItICovXFxuZnMvbmFtZWkuYzo0NzQzOnN0YXRpYyBpbnQgZG9fb3BlbihzdHJ1Y3QgbmFtZWlkYXRhICpuZCxcXG5mcy9uYW1laS5jLTQ3NDQtXFx0XFx0ICAgc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IHN0cnVjdCBvcGVuX2ZsYWdzICpvcClcXG4tLVxcbmZzL25mcy9kaXIuYz0yMDc2PXN0YXRpYyBzdHJ1Y3QgbmZzX29wZW5fY29udGV4dCAqY3JlYXRlX25mc19vcGVuX2NvbnRleHQoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBpbnQgb3Blbl9mbGFncywgc3RydWN0IGZpbGUgKmZpbHApXFxuLS1cXG5mcy9uZnMvZGlyLmMtMjA4MC1cXG5mcy9uZnMvZGlyLmM6MjA4MTpzdGF0aWMgaW50IGRvX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbHApXFxuZnMvbmZzL2Rpci5jLTIwODIte1xcbi0tXFxuZnMvb3Blbi5jPTExMzY9aW5saW5lIHN0cnVjdCBvcGVuX2hvdyBidWlsZF9vcGVuX2hvdyhpbnQgZmxhZ3MsIHVtb2RlX3QgbW9kZSlcXG4tLVxcbmZzL29wZW4uYy0xMTUxLVxcbmZzL29wZW4uYzoxMTUyOmlubGluZSBpbnQgYnVpbGRfb3Blbl9mbGFncyhjb25zdCBzdHJ1Y3Qgb3Blbl9ob3cgKmhvdywgc3RydWN0IG9wZW5fZmxhZ3MgKm9wKVxcbmZzL29wZW4uYy0xMTUzLXtcXG4tLVxcbmluY2x1ZGUvbGludXgvZnMuaD0xNzU4PWJvb2wgaW5vZGVfb3duZXJfb3JfY2FwYWJsZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcXG4tLVxcbmluY2x1ZGUvbGludXgvZnMuaC0xNzYzLSAqL1xcbmluY2x1ZGUvbGludXgvZnMuaDoxNzY0OmludCB2ZnNfY3JlYXRlKHN0cnVjdCBtbnRfaWRtYXAgKiwgc3RydWN0IGRlbnRyeSAqLCB1bW9kZV90LFxcbmluY2x1ZGUvbGludXgvZnMuaC0xNzY1LVxcdCAgICAgICBzdHJ1Y3QgZGVsZWdhdGVkX2lub2RlICopO1xcbi0tXFxudG9vbHMvcGVyZi91dGlsL2Rzby5jPTU0NT1zdGF0aWMgdm9pZCBjbG9zZV9maXJzdF9kc28odm9pZCk7XFxudG9vbHMvcGVyZi91dGlsL2Rzby5jLTU0Ni1cXG50b29scy9wZXJmL3V0aWwvZHNvLmM6NTQ3OnN0YXRpYyBpbnQgZG9fb3BlbihjaGFyICpuYW1lKSBFWENMVVNJVkVfTE9DS1NfUkVRVUlSRUQoX2Rzb19fZGF0YV9vcGVuX2xvY2spXFxudG9vbHMvcGVyZi91dGlsL2Rzby5jLTU0OC17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA0VDE3OjAwOjE0LjUyNTczNzI2MloiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI4ODU0MTEzMDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOlxuXG4qKk5hdmlnYXRpbmcgdGhlIEZpbGVzeXN0ZW0gS2VybmVsIENvZGUqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZGlnIGludG8gdGhlIGZpbGVzeXN0ZW0gY29kZSBhZ2Fpbi4gU3BlY2lmaWNhbGx5LCBJJ20gdHJ5aW5nIHRvIHVuZGVyc3RhbmQgaG93IGZpbGVuYW1lIGxvb2t1cHMgYW5kIGF0b21pYyBvcGVucyBhcmUgaGFuZGxlZC4gTXkgZmlyc3QgbW92ZSB3aWxsIGJlIHRvIHplcm8gaW4gb24gYGZzL25hbWVpLmNgLiBJIGV4cGVjdCB0byBmaW5kIHRoZSBjb3JlIGxvZ2ljIGZvciBib3RoIGBsb29rdXBfb3BlbmAgYW5kIGBhdG9taWNfb3BlbmAgcm91dGluZXMgZGVmaW5lZCB0aGVyZS4gVGhhdCdzIHVzdWFsbHkgdGhlIGdvLXRvIHBsYWNlIGZvciBhbnl0aGluZyByZWxhdGVkIHRvIG5hbWUgcmVzb2x1dGlvbiBhbmQgdGhlIGluaXRpYWwgc2V0dXAgb2YgZmlsZSBvcGVyYXRpb25zLiBUaW1lIHRvIGZpcmUgdXAgdGhlIGVkaXRvciBhbmQgc2VlIHdoYXQncyB3aGF0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODA2MiwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA0VDE3OjAwOjE3LjQxMTE1MTUwM1oiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1ODQ0ODQxMDM2LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJeKHN0YXRpYyApPyhzdHJ1Y3QgZGVudHJ5IFxcXFwqKSAobG9va3VwX29wZW58YXRvbWljX29wZW4pXFxcXChcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA0VDE3OjAwOjIzLjI1NjAyNDU4OFoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyODg5Mjc5NzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqTmF2aWdhdGluZyB0aGUgYGRlbnRyeWAgSnVuZ2xlOiBSZXR1cm4gVHlwZXMgYW5kIEZ1bmN0aW9uIFNpZ25hdHVyZXMqKlxuXG5SaWdodCwgc28gSSdtIHRoaW5raW5nIGFib3V0IGEgZnVuY3Rpb24gdGhhdCBjbGVhcmx5IGRlYWxzIHdpdGggYGRlbnRyeWAgc3RydWN0dXJlcy4gSSdtIHRyeWluZyB0byBxdWlja2x5IGFzY2VydGFpbiBpdHMgcHJlY2lzZSByZXR1cm4gdHlwZS4gTXkgaW5pdGlhbCBndWVzcyBpcyB0aGF0IGl0ICpjb3VsZCogYmUgYHN0cnVjdCBkZW50cnkgKmAgb3IgcGVyaGFwcyBldmVuIGBjb25zdCBzdHJ1Y3QgZGVudHJ5ICpgLCB3aXRoIHNvbWUgdmFyaWF0aW9ucyBpbiBzcGFjaW5nIGFyb3VuZCB0aGUgYXN0ZXJpc2sg4oCTIHlvdSBrbm93IGhvdyB0aG9zZSB0aGluZ3MgY2FuIGJlLiBUbyBhdm9pZCBhbnkgYW1iaWd1aXR5IG9yIHVubmVjZXNzYXJ5IHBhcnNpbmcgb2YgdGhlIHNvdXJjZSBjb2RlLCB0aGUgbW9zdCBlZmZpY2llbnQgYXBwcm9hY2ggaXMgdG8gZGlyZWN0bHkgdGFyZ2V0IHRoZSBmdW5jdGlvbiBjYWxscyB0aGVtc2VsdmVzLiBJJ2xsIGp1c3QgdXNlIGBncmVwYCB0byBxdWlja2x5IGZpbmQgd2hlcmUgdGhlIGZ1bmN0aW9uIGlzIGNhbGxlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTgyNjIsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wNFQxNzowMDoyNi41NDQ5NTUzNzdaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Njk2ODc3MjgxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJeKHN0YXRpYyApPyhzdHJ1Y3QgZGVudHJ5IFxcXFwqXFxcXHMqKT8obG9va3VwX29wZW58YXRvbWljX29wZW4pXFxcXChcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvbmFtZWkuYz00MzgwPXN0YXRpYyBpbmxpbmUgdW1vZGVfdCBvX2NyZWF0ZV9tb2RlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxcbi0tXFxuZnMvbmFtZWkuYy00NDA4LSAqL1xcbmZzL25hbWVpLmM6NDQwOTpzdGF0aWMgc3RydWN0IGRlbnRyeSAqYXRvbWljX29wZW4oY29uc3Qgc3RydWN0IHBhdGggKnBhdGgsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcXG5mcy9uYW1laS5jLTQ0MTAtXFx0XFx0XFx0XFx0ICBzdHJ1Y3QgZmlsZSAqZmlsZSxcXG4tLVxcbmZzL25hbWVpLmM9NDQ2Nj1zdHJ1Y3QgZGVudHJ5ICp2ZnNfbWtkaXJfbm9fcGVybShzdHJ1Y3QgbW50X2lkbWFwICosIHN0cnVjdCBpbm9kZSAqLFxcbi0tXFxuZnMvbmFtZWkuYy00NDgzLSAqL1xcbmZzL25hbWVpLmM6NDQ4NDpzdGF0aWMgc3RydWN0IGRlbnRyeSAqbG9va3VwX29wZW4oc3RydWN0IG5hbWVpZGF0YSAqbmQsIHN0cnVjdCBmaWxlICpmaWxlLFxcbmZzL25hbWVpLmMtNDQ4NS1cXHRcXHRcXHRcXHQgIGNvbnN0IHN0cnVjdCBvcGVuX2ZsYWdzICpvcCxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDRUMTc6MDA6MzMuNTEzNzM1NDA3WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzYwMjE4MDI3NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIGBkZW50cnlfY3JlYXRlYCBhbmQgYHZmc19ta2RpcmAqKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGludG8gdGhlIGNvcmUgb2YgdGhpcyBvcGVyYXRpb24uIE15IGltbWVkaWF0ZSBmb2N1cyBpcyBvbiBgZGVudHJ5X2NyZWF0ZWAgYW5kIGB2ZnNfbWtkaXJgLiBJIHdhbnQgdG8gcXVpY2tseSByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlaXIgaW50ZXJhY3Rpb24gaW4gdGhlIGNvbnRleHQgb2YgY3JlYXRpbmcgYSBuZXcgZGlyZWN0b3J5LiBJJ20gdGhpbmtpbmcgYWJvdXQgdGhlIGRlbnRyeSBsaWZlY3ljbGUgYW5kIGhvdyB0aGUgVkZTIGxheWVyIGhhbmRsZXMgdGhlIHJlcXVlc3RzLCBlc3BlY2lhbGx5IHRoZSBpbm9kZSBhbGxvY2F0aW9uLiBJIG5lZWQgdG8gcmVmcmVzaCB0aGUgZGV0YWlscyBvZiB0aGUgbG9ja2luZyBtZWNoYW5pc21zIGludm9sdmVkIGluIHRoZXNlIGZ1bmN0aW9ucy4gQXJlIHRoZXJlIGFueSBjb250ZW50aW9uIHBvaW50cyB0byBsb29rIGF0LCBvciBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zPyBJcyBgdmZzX21rZGlyYCBqdXN0IGEgd3JhcHBlciwgb3IgZG9lcyBpdCBwZXJmb3JtIHN1YnN0YW50aWFsIHdvcmsgaXRzZWxmPyBIb3cgZG9lcyBgZGVudHJ5X2NyZWF0ZWAgYWZmZWN0IHRoZSBjYWNoZSBhbmQgZW5zdXJlIGNvbnNpc3RlbmN5IGFjcm9zcyB0aGUgRlM/IEknbSBjdXJpb3VzIGFib3V0IHRoZSBzcGVjaWZpYyBwYXJhbWV0ZXJzIHRoZXNlIGZ1bmN0aW9ucyBhY2NlcHQgYW5kIHRoZWlyIGVmZmVjdCBvbiB0aGUgcmVzdWx0aW5nIGRlbnRyeSBhbmQgaW5vZGUuIEknbSBydW5uaW5nIHRocm91Z2ggYWxsIHRoaXMgdG8gcXVpY2tseSBidWlsZCBhIG1lbnRhbCBtYXAgb2YgdGhlIHdob2xlIG9wZXJhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTg3MTUsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wNFQxNzowMDozNy4xMTU5MjAzNDNaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU5NDIzOTQ0OTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiXihzdHJ1Y3QgZmlsZSBcXFxcKlxcXFxzKik/ZGVudHJ5X2NyZWF0ZVxcXFwoXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL25hbWVpLmM9NTEwMD1FWFBPUlRfU1lNQk9MKHN0YXJ0X2NyZWF0aW5nX3VzZXJfcGF0aCk7XFxuLS1cXG5mcy9uYW1laS5jLTUxMTgtICovXFxuZnMvbmFtZWkuYzo1MTE5OnN0cnVjdCBmaWxlICpkZW50cnlfY3JlYXRlKHN0cnVjdCBwYXRoICpwYXRoLCBpbnQgZmxhZ3MsIHVtb2RlX3QgbW9kZSxcXG5mcy9uYW1laS5jLTUxMjAtXFx0XFx0XFx0ICAgY29uc3Qgc3RydWN0IGNyZWQgKmNyZWQpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2ZzLmg9MjQ3OT1zdHJ1Y3QgZmlsZSAqZGVudHJ5X29wZW5fbm9ub3RpZnkoY29uc3Qgc3RydWN0IHBhdGggKnBhdGgsIGludCBmbGFncyxcXG5pbmNsdWRlL2xpbnV4L2ZzLmgtMjQ4MC1cXHRcXHRcXHRcXHQgIGNvbnN0IHN0cnVjdCBjcmVkICpjcmVkKTtcXG5pbmNsdWRlL2xpbnV4L2ZzLmg6MjQ4MTpzdHJ1Y3QgZmlsZSAqZGVudHJ5X2NyZWF0ZShzdHJ1Y3QgcGF0aCAqcGF0aCwgaW50IGZsYWdzLCB1bW9kZV90IG1vZGUsXFxuaW5jbHVkZS9saW51eC9mcy5oLTI0ODItXFx0XFx0XFx0ICAgY29uc3Qgc3RydWN0IGNyZWQgKmNyZWQpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wNFQxNzowMDo0My4wNTgzMjI3MTFaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDczOTM3ODkxMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgcHJlc2VudGVkIGFzIGlmIGl0IHdlcmUgbXkgb3duIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipUaGlua2luZyBBYm91dCBGaWxlc3lzdGVtcyBhbmQgRGlyZWN0b3J5IENyZWF0aW9uKipcblxuQWxyaWdodCwgc28gd2UncmUgdGFsa2luZyBhYm91dCB0aGUgbG93LWxldmVsLCBmaWxlc3lzdGVtIGludGVyYWN0aW9uIGhlcmUuIFRoZSBtZW50YWwgdGljayBJIGdldCBmcm9tIFwidmZzX21rZGlyXCIgaXMgdGhlIGNyaXRpY2FsIGZ1bmN0aW9uIHdpdGhpbiBhIFZpcnR1YWwgRmlsZSBTeXN0ZW0gKFZGUykgbGF5ZXIuIEkgaW1tZWRpYXRlbHkgdGhpbmsgYWJvdXQgdGhlIGNvcmUgbWVjaGFuaWNzIOKAkyBob3cgdGhhdCBzaW5nbGUgY2FsbCB0cmFuc2xhdGVzIHRvIGFjdGlvbnMgYWNyb3NzIGRpZmZlcmVudCB1bmRlcmx5aW5nIGZpbGVzeXN0ZW1zLiBXZSdyZSBub3QganVzdCBjcmVhdGluZyBhIGRpcmVjdG9yeTsgd2UncmUgb3JjaGVzdHJhdGluZyB0aGUgKnJlcXVlc3QqIGZvciBhIGRpcmVjdG9yeSBjcmVhdGlvbi5cblxuTXkgbWluZCBqdW1wcyB0byB0aGUgVkZTJ3Mgcm9sZTogaXQncyB0aGUgYWJzdHJhY3Rpb24gbGF5ZXIuIGB2ZnNfbWtkaXJgIGl0c2VsZiBkb2Vzbid0ICpkbyogdGhlIG1rZGlyLiBJdCB0YWtlcyB0aGUgcGFyYW1ldGVyc+KAlHRoZSBwYXRoLCBwZXJtaXNzaW9ucywgZXRjLuKAlGFuZCB0aGVuIGl0IGRpc3BhdGNoZXMgdGhlIGFjdHVhbCB3b3JrIHRvIHRoZSBhcHByb3ByaWF0ZSB1bmRlcmx5aW5nIGZpbGVzeXN0ZW0uIEkgaW5zdGFudGx5IHN0YXJ0IGNvbnNpZGVyaW5nIHRoZSBpbXBsaWNhdGlvbnM6IGhvdyBkb2VzIHRoZSBWRlMgc2VsZWN0IHRoZSByaWdodCBmaWxlc3lzdGVtIGJhc2VkIG9uIHRoZSBwYXRoPyBJcyBpdCBiYXNlZCBvbiBtb3VudCBwb2ludHMsIG9uIGEgZmlsZXN5c3RlbS1zcGVjaWZpYyBzdHJ1Y3R1cmUgb3IgZGF0YSwgb3IgYSBjb21iaW5hdGlvbj9cblxuSSdtIHRoaW5raW5nIGFib3V0IHRoZSBhcmd1bWVudHMgdG8gYHZmc19ta2RpcmAgYW5kIHdoYXQgdGhleSBpbXBseS4gVGhlIHBhdGggaXRzZWxmIHRyaWdnZXJzIGNvbnNpZGVyYXRpb25zIGFib3V0IHBhdGggcmVzb2x1dGlvbi4gRG9lcyB0aGUgVkZTIGhhbmRsZSBzeW1ib2xpYyBsaW5rcyBhbG9uZyB0aGUgcGF0aD8gSG93IGRvZXMgaXQgZGVhbCB3aXRoIHJlbGF0aXZlIHBhdGhzIHZzLiBhYnNvbHV0ZSBwYXRocz8gVGhlIHBlcm1pc3Npb25zLCB0b28sIGFyZSBpbnN0YW50bHkgYSBwb2ludCBvZiBmb2N1cy4gV2UgaGF2ZSB0byBjb25zaWRlciBob3cgdG8gaGFuZGxlIFVJRC9HSURzIChVc2VyL0dyb3VwIElEcyksIGFuZCB0aGUgdHJhbnNsYXRpb24gbGF5ZXIgdGhhdCBvY2N1cnMgYXQgdGhlIFZGUyBsZXZlbCBiZWZvcmUgdGhlIHNwZWNpZmljIGZpbGVzeXN0ZW0gZ2V0cyBpbnZvbHZlZC4gRG9lcyB0aGUgdW5kZXJseWluZyBmaWxlc3lzdGVtIHN1cHBvcnQgdGhlIHBlcm1pc3Npb25zIG1vZGVsPyBXaGF0IGlzIHRoZSBzdGFuZGFyZCBiZWhhdmlvciBpbiB0aGlzIGNhc2UsIGFuZCBob3cgZG9lcyBgdmZzX21rZGlyYCBhZGFwdCB0byBpdD9cblxuVGhlIGVycm9yIGhhbmRsaW5nIGFzcGVjdHMgYXJlIGFsc28gYXQgdGhlIGZvcmVmcm9udC4gV2hhdCBhcmUgdGhlIGNvbW1vbiBlcnJvciBjb2RlcyB0aGF0IG1pZ2h0IGNvbWUgYmFjaz8gXCJQZXJtaXNzaW9uIGRlbmllZCxcIiBcImZpbGUgZXhpc3RzLFwiIFwib3V0IG9mIHNwYWNlLFwiIFwiaW52YWxpZCBwYXRoXCIuLi4gSSBzdGFydCBtYXBwaW5nIHRob3NlIHBvdGVudGlhbCBlcnJvcnMgdG8gdGhlIHNwZWNpZmljIGNoZWNrcyB0aGF0IGB2ZnNfbWtkaXJgIG1pZ2h0IGRvIGF0IHRoZSBWRlMgbGV2ZWwsIGFuZCBhbHNvIHRoZSBzb3J0cyBvZiBlcnJvcnMgdGhhdCB3b3VsZCBjb21lIGJhY2sgZnJvbSBhIHJlYWwgZmlsZXN5c3RlbS4gSSdtIHdvbmRlcmluZyB3aGF0IGlzIHRoZSBleHBlY3RlZCBlcnJvciBoYW5kbGluZyBzdHJhdGVneS4gRG9lcyB0aGUgVkZTIGF0dGVtcHQgcmV0cnkgb3Igb3RoZXIgbG9naWMsIG9yIGRvZXMgaXQgc2ltcGx5IHJldHVybiB0aGUgZXJyb3IgY29kZT9cblxuQmFzaWNhbGx5LCBJJ20gdGhpbmtpbmcgYWJvdXQgdGhlIGludHJpY2F0ZSBkYW5jZSBiZXR3ZWVuIHRoZSBWRlMgbGF5ZXIgYW5kIHRoZSBmaWxlc3lzdGVtIGRyaXZlci4gYHZmc19ta2RpcmAgaXMganVzdCBhIGtleSB0aGF0IGFjdGl2YXRlcyB0aGlzIHJlbGF0aW9uc2hpcCwgc28gdGhlcmUncyBhIGxvdCBvZiB1bmRlcmx5aW5nIGZpbGVzeXN0ZW0gbWVjaGFuaWNzIGFuZCBpbnRlcmFjdGlvbnMgdGhhdCBJJ20gY29uc2lkZXJpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5MjA0LCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wNFQxNzowMDo0Ny43OTc3MDU4NDFaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU3OTk3NjI5MjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiXihzdHJ1Y3QgZGVudHJ5IFxcXFwqXFxcXHMqKT92ZnNfbWtkaXJcXFxcKFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJEb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3BvcnRpbmcucnN0PTEzMTI9aW5zdGVhZC5cXG4tLVxcbkRvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvcG9ydGluZy5yc3QtMTMxNy1cXG5Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3BvcnRpbmcucnN0OjEzMTg6dmZzX21rZGlyKCkgbm93IHJldHVybnMgYSBkZW50cnkgLSB0aGUgb25lIHJldHVybmVkIGJ5IC1cXHUwMDNlbWtkaXIoKS4gIElmXFxuRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9wb3J0aW5nLnJzdC0xMzE5LXRoYXQgZGVudHJ5IGlzIGRpZmZlcmVudCBmcm9tIHRoZSBkZW50cnkgcGFzc2VkIGluLCBpbmNsdWRpbmcgaWYgaXQgaXNcXG4tLVxcbmZzL25hbWVpLmM9NTMxMT1zdHJ1Y3QgZGVudHJ5ICp2ZnNfbWtkaXJfbm9fcGVybShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXFxuLS1cXG5mcy9uYW1laS5jLTUzNjQtICovXFxuZnMvbmFtZWkuYzo1MzY1OnN0cnVjdCBkZW50cnkgKnZmc19ta2RpcihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXFxuZnMvbmFtZWkuYy01MzY2LVxcdFxcdFxcdCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSxcXG4tLVxcbmluY2x1ZGUvbGludXgvZnMuaD0xNzY0PWludCB2ZnNfY3JlYXRlKHN0cnVjdCBtbnRfaWRtYXAgKiwgc3RydWN0IGRlbnRyeSAqLCB1bW9kZV90LFxcbmluY2x1ZGUvbGludXgvZnMuaC0xNzY1LVxcdCAgICAgICBzdHJ1Y3QgZGVsZWdhdGVkX2lub2RlICopO1xcbmluY2x1ZGUvbGludXgvZnMuaDoxNzY2OnN0cnVjdCBkZW50cnkgKnZmc19ta2RpcihzdHJ1Y3QgbW50X2lkbWFwICosIHN0cnVjdCBpbm9kZSAqLFxcbmluY2x1ZGUvbGludXgvZnMuaC0xNzY3LVxcdFxcdFxcdCBzdHJ1Y3QgZGVudHJ5ICosIHVtb2RlX3QsIHN0cnVjdCBkZWxlZ2F0ZWRfaW5vZGUgKik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA0VDE3OjAwOjUzLjU5NzQ3NjUxOVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMDg2MTkxNjA5MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipJZGVudGlmeWluZyBLZXkgRnVuY3Rpb25zIGFuZCBDb25maWd1cmF0aW9uIGZvciBUZXN0aW5nKipcblxuT2theSwgc28gSSdtIGRpdmluZyBpbnRvIHRoaXMgY29kZSBhbmQgZmlndXJpbmcgb3V0IHRoZSBjcml0aWNhbCBmdW5jdGlvbnMgcmVsYXRlZCB0byB0aGlzIHBhdGNoLiBJbml0aWFsbHksIEkgd2FzIGZvY3VzaW5nIG9uOlxuXG4tICAgYGxvb2t1cF9vcGVuYFxuLSAgIGBhdG9taWNfb3BlbmBcbi0gICBgbWF5X29fY3JlYXRlYFxuLSAgIGBidWlsZF9vcGVuX2ZsYWdzYFxuLSAgIGBkb19vcGVuYFxuLSAgIGBkZW50cnlfY3JlYXRlYFxuLSAgIGB2ZnNfbWtkaXJgXG4tICAgYHZmc19jcmVhdGVgXG5cbkkgaGFkIGEgcXVpY2sgdGhvdWdodCBhYm91dCBpbmNsdWRpbmcgdGhlIHN0YXRpYyBpbmxpbmUgZnVuY3Rpb25zIGB2ZnNfbWtkaXJfbm9fcGVybWAgYW5kIGB2ZnNfY3JlYXRlX25vX3Blcm1gIGJ1dCBkZWNpZGVkIGFnYWluc3QgaXQsIGFzIHN5emthbGxlciBtaWdodCBzdHJ1Z2dsZSB0byB0cmFjZSB0aG9zZS4gSXQncyBzYWZlciB0byBzdGljayB0byB0aGUgbm9uLWlubGluZSBjYWxsaW5nIGZ1bmN0aW9ucy5cblxuVGhlbiBJIHJlYWxpemVkIGBkb19vcGVuYCBpcyBhbHNvIHN0YXRpYywgc28gSSB3ZW50IGJhY2sgdG8gbWFrZSBzdXJlLCBpdCBpcyBjYWxsZWQgZnJvbSBvcGVuYXQsIHdoaWNoIGlzIGFsd2F5cyBlbmFibGVkLlxuXG5UaGVuIEkgcmVtZW1iZXJlZCB0aGUgcGF0Y2ggYWxzbyB0b3VjaGVzIHZhcmlvdXMgZmlsZXN5c3RlbXMuIEl0IGxvb2tzIGxpa2UgZWFjaCBvZiB0aGVtIG5vdyBoYW5kbGVzIGBPX0lTX01LRElSKGZsYWdzKWAgaW4gdGhlaXIgYGF0b21pY19vcGVuYCBjYWxscy4gU28gSSBuZWVkIHRvIGFkZCB0aGVzZSBhcyB3ZWxsOlxuXG4tICAgYHY5ZnNfdmZzX2F0b21pY19vcGVuYFxuLSAgIGB2OWZzX3Zmc19hdG9taWNfb3Blbl9kb3RsYFxuLSAgIGBjZXBoX2F0b21pY19vcGVuYFxuLSAgIGBmdXNlX2F0b21pY19vcGVuYFxuLSAgIGBnZnMyX2F0b21pY19vcGVuYFxuLSAgIGBuZnNfYXRvbWljX29wZW5gXG4tICAgYG5mc19hdG9taWNfb3Blbl92MjNgXG4tICAgYGNpZnNfYXRvbWljX29wZW5gXG4tICAgYHZib3hzZl9kaXJfYXRvbWljX29wZW5gXG5cblRoYXQgbGVkIG1lIHRvIHRoaW5rIGFib3V0IGZpbGVzeXN0ZW0gY29uZmlncy4gSSBsaXN0ZWQgdGhlbSBhdCBmaXJzdCwgYnV0IHRoZW4gSSBzdG9wcGVkIG15c2VsZi4gVGhlIHByb21wdCBzYXlzLCBcIkRvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLlwiIFNvIEkgbmVlZCB0byBnbyBsb29rIGludG8gS2NvbmZpZyBmaWxlcyBmb3IgYW55IGlmZGVmcy4gSSBzaG91bGQgbm90IG1ha2UgYW55IGFzc3VtcHRpb25zLiBMZXQncyBzZWUgaWYgdGhlcmUgYXJlIGFueSBjb25maWcgb3B0aW9ucyByZWxhdGVkIHRvIHRoZSBmaWxlc3lzdGVtIGNoYW5nZXMgb3IgdGhlIGNvcmUgZnVuY3Rpb25zIGluIGBmcy9uYW1laS5jYCBhbmQgYGZzL29wZW4uY2AuIEkgaGF2ZSB0byBjaGVjayB0aGUgS2NvbmZpZyBmaWxlcyBub3cuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwMTI0LCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTAwMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wNFQxNzowMTowNC40NTkzOTY0MTNaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4MDA4MjYzNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCIjaWZkZWZcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvbmFtZWkuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9uYW1laS5jPTM3ND1zdGF0aWMgaW50IGNoZWNrX2FjbChzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcXG4tLVxcbmZzL25hbWVpLmMtMzc2LXtcXG5mcy9uYW1laS5jOjM3NzojaWZkZWYgQ09ORklHX0ZTX1BPU0lYX0FDTFxcbmZzL25hbWVpLmMtMzc4LVxcdHN0cnVjdCBwb3NpeF9hY2wgKmFjbDtcXG4tLVxcbmZzL25hbWVpLmM9NDEzPXN0YXRpYyBpbmxpbmUgYm9vbCBub19hY2xfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSlcXG5mcy9uYW1laS5jLTQxNC17XFxuZnMvbmFtZWkuYzo0MTU6I2lmZGVmIENPTkZJR19GU19QT1NJWF9BQ0xcXG5mcy9uYW1laS5jLTQxNi1cXHRyZXR1cm4gbGlrZWx5KCFSRUFEX09OQ0UoaW5vZGUtXFx1MDAzZWlfYWNsKSk7XFxuLS1cXG5mcy9uYW1laS5jPTEyMDc9c3RhdGljIGludCBzeXNjdGxfcHJvdGVjdGVkX3JlZ3VsYXIgX19yZWFkX21vc3RseTtcXG5mcy9uYW1laS5jLTEyMDgtXFxuZnMvbmFtZWkuYzoxMjA5OiNpZmRlZiBDT05GSUdfU1lTQ1RMXFxuZnMvbmFtZWkuYy0xMjEwLXN0YXRpYyBjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlIG5hbWVpX3N5c2N0bHNbXSA9IHtcXG4tLVxcbmZzL25hbWVpLmM9MjI3OD1zdGF0aWMgX19hbHdheXNfaW5saW5lIGNvbnN0IGNoYXIgKndhbGtfY29tcG9uZW50KHN0cnVjdCBuYW1laWRhdGEgKm5kLCBpbnQgZmxhZ3MpXFxuLS1cXG5mcy9uYW1laS5jLTIzMjAtICovXFxuZnMvbmFtZWkuYzoyMzIxOiNpZmRlZiBDT05GSUdfRENBQ0hFX1dPUkRfQUNDRVNTXFxuZnMvbmFtZWkuYy0yMzIyLVxcbi0tXFxuZnMvbmFtZWkuYy0yMzI0LVxcbmZzL25hbWVpLmM6MjMyNTojaWZkZWYgSEFTSF9NSVhcXG5mcy9uYW1laS5jLTIzMjYtXFxuLS1cXG5mcy9uYW1laS5jPTI0NjU9c3RhdGljIGlubGluZSBjb25zdCBjaGFyICpoYXNoX25hbWUoc3RydWN0IG5hbWVpZGF0YSAqbmQsXFxuLS1cXG5mcy9uYW1laS5jLTI1MTYtICovXFxuZnMvbmFtZWkuYzoyNTE3OiNpZmRlZiBfX0JJR19FTkRJQU5cXG5mcy9uYW1laS5jLTI1MTgtICAjZGVmaW5lIExBU1RfV09SRF9JU19ET1RcXHQoMHgyZXVsIFxcdTAwM2NcXHUwMDNjIChCSVRTX1BFUl9MT05HLTgpKVxcbi0tXFxuZnMvbmFtZWkuYz0zNjI3PUVYUE9SVF9TWU1CT0woc3RhcnRfcmVtb3ZpbmdfZGVudHJ5KTtcXG5mcy9uYW1laS5jLTM2MjgtXFxuZnMvbmFtZWkuYzozNjI5OiNpZmRlZiBDT05GSUdfVU5JWDk4X1BUWVNcXG5mcy9uYW1laS5jLTM2MzAtaW50IHBhdGhfcHRzKHN0cnVjdCBwYXRoICpwYXRoKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wNFQxNzowMTowNC42Mzk0ODg3NVoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4Mjg0ODYzNzUwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBWRlMgTW9kaWZpY2F0aW9ucyBmb3IgUG90ZW50aWFsIEZlYXR1cmUgRmxhZ2dpbmcqKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIHRoaXMgY29kZSwgc3BlY2lmaWNhbGx5IGluIGBmcy9uYW1laS5jYCBhbmQgYGZzL29wZW4uY2AsIGFuZCBJJ20gbm90IHNlZWluZyBhbnkgcHJlcHJvY2Vzc29yIGRpcmVjdGl2ZXMgKGAjaWZkZWZgKSBhcm91bmQgdGhlIGNoYW5nZXMuIFRoYXQncyBhIGtleSBmaXJzdCBvYnNlcnZhdGlvbi4gSWYgdGhpcyBpcyBhIG5ldyBmZWF0dXJlIG9yIGNoYW5nZSwgaXQgbWlnaHQgcmVxdWlyZSBmZWF0dXJlIGZsYWdnaW5nLCBhbmQgdGhlIGFic2VuY2Ugb2YgYGlmZGVmc2AgaXMgbm90ZXdvcnRoeS5cblxuSSd2ZSBnb3QgYSBsaXN0IG9mIHRoZSBtb2RpZmllZCBmdW5jdGlvbnM6IGB2ZnNfY3JlYXRlX25vX3Blcm1gLCBgdmZzX2NyZWF0ZWAsIGBtYXlfb19jcmVhdGVgLCBgb19jcmVhdGVfbW9kZWAsIGBhdG9taWNfb3BlbmAsIGB2ZnNfbWtkaXJfbm9fcGVybWAsIGBsb29rdXBfb3BlbmAsIGBsb29rdXBfZmFzdF9mb3Jfb3BlbmAsIGBvcGVuX2xhc3RfbG9va3Vwc2AsIGBkb19vcGVuYCwgYGZpbGVuYW1lX2NyZWF0ZWAsIGBkZW50cnlfY3JlYXRlYCwgYHZmc19ta2RpcmAsIGBmaWxlbmFtZV91bmxpbmthdGAsIGBmaWxlbmFtZV9yZW5hbWVhdDJgIGFuZCBgYnVpbGRfb3Blbl9mbGFnc2AuIE5vdywgdGhlc2UgYXJlIGFsbCBjb3JlIFZGUyBmdW5jdGlvbnMsIGFuZCBJIHNob3VsZCByZWFsbHkgZm9jdXMgb24gdGhlIGtleSBvbmVzOiBgbG9va3VwX29wZW5gLCBgYXRvbWljX29wZW5gLCBgbWF5X29fY3JlYXRlYCwgYGJ1aWxkX29wZW5fZmxhZ3NgLCBgZG9fb3BlbmAsIGBkZW50cnlfY3JlYXRlYCwgYHZmc19ta2RpcmAsIGB2ZnNfY3JlYXRlYCwgYHZmc19ta2Rpcl9ub19wZXJtYCwgYHZmc19jcmVhdGVfbm9fcGVybWAsIGBvX2NyZWF0ZV9tb2RlYCwgYG9wZW5fbGFzdF9sb29rdXBzYCwgYW5kIGBsb29rdXBfZmFzdF9mb3Jfb3BlbmAuIFRoZXNlIGFyZSB0aGUgZnVuY3Rpb25zIHdoZXJlIHRoZSBhY3R1YWwgbW9kaWZpY2F0aW9ucyBsaWtlbHkgcmVzaWRlLlxuXG5XYWl0IGEgc2Vjb25kLi4uIGBhdG9taWNfb3BlbmAgaW4gYGZzL25hbWVpLmNgIGlzIHN0YXRpYywgd2hpY2ggaXMgaW50ZXJlc3RpbmcuIEkgc2hvdWxkIGNoZWNrIGlmIHRoZXJlIGFyZSBvdGhlciBgYXRvbWljX29wZW5gIGZ1bmN0aW9ucyBiZWNhdXNlIGl0IGNvdWxkIGJlIGEgY3J1Y2lhbCBwYXJ0IG9mIHRoZSBjaGFuZ2UuIFllcywgdGhlcmUgYXJlIGZpbGVzeXN0ZW0tc3BlY2lmaWMgaW1wbGVtZW50YXRpb25zOiBgdjlmc192ZnNfYXRvbWljX29wZW5gLCBgdjlmc192ZnNfYXRvbWljX29wZW5fZG90bGAsIGBjZXBoX2F0b21pY19vcGVuYCwgYGZ1c2VfYXRvbWljX29wZW5gLCBgZ2ZzMl9hdG9taWNfb3BlbmAsIGBuZnNfYXRvbWljX29wZW5gLCBgbmZzX2F0b21pY19vcGVuX3YyM2AsIGBjaWZzX2F0b21pY19vcGVuYCwgYW5kIGB2Ym94c2ZfZGlyX2F0b21pY19vcGVuYC5cblxuU2luY2UgdGhpcyB0b3VjaGVzIG11bHRpcGxlIGZpbGVzeXN0ZW1zLCBJIG5lZWQgdG8gY29uc2lkZXIgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMuIEkgc2hvdWxkIGxvb2sgaW50byB0aGUgcmVsZXZhbnQgS2NvbmZpZyBvcHRpb25zOiBgOVBfRlNgLCBgQ0VQSF9GU2AsIGBGVVNFX0ZTYCwgYEdGUzJfRlNgLCBgTkZTX0ZTYCwgYENJRlNgLCBhbmQgYFZCT1hTRl9GU2AuIFRoYXQgd2lsbCB0ZWxsIG1lIGlmIHRoZSBtb2RpZmljYXRpb25zIGFyZSBjb25kaXRpb25hbCBvbiBhbnkgb2YgdGhlc2UgZmlsZXN5c3RlbSBvcHRpb25zIGJlaW5nIGVuYWJsZWQuIE5vdywgbGV0J3MganVzdCBtYWtlIHN1cmUgSSBoYXZlIGFsbCB0aGUgZmFjdHMuIENoZWNraW5nIHRoZSBLY29uZmlnIGZvciBgOVBfRlNgLCBqdXN0IHRvIHZlcmlmeSB0aGF0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMjIyNSwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU3NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wNFQxNzowMToxMi45MjQzNTc3NjlaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU0NTcyODQ0OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgOVBfRlNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvOXAvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy85cC9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuZnMvOXAvS2NvbmZpZzoyOmNvbmZpZyA5UF9GU1xcbmZzLzlwL0tjb25maWctMy1cXHR0cmlzdGF0ZSBcXFwiUGxhbiA5IFJlc291cmNlIFNoYXJpbmcgU3VwcG9ydCAoOVAyMDAwKVxcXCJcXG4tLVxcbmZzLzlwL0tjb25maWc9MTQ9aWYgOVBfRlNcXG5mcy85cC9LY29uZmlnOjE1OmNvbmZpZyA5UF9GU0NBQ0hFXFxuZnMvOXAvS2NvbmZpZy0xNi1cXHRib29sIFxcXCJFbmFibGUgOVAgY2xpZW50IGNhY2hpbmcgc3VwcG9ydFxcXCJcXG4tLVxcbmZzLzlwL0tjb25maWctMjItXFxuZnMvOXAvS2NvbmZpZzoyMzpjb25maWcgOVBfRlNfUE9TSVhfQUNMXFxuZnMvOXAvS2NvbmZpZy0yNC1cXHRib29sIFxcXCI5UCBQT1NJWCBBY2Nlc3MgQ29udHJvbCBMaXN0c1xcXCJcXG4tLVxcbmZzLzlwL0tjb25maWc9MzI9ZW5kaWZcXG4tLVxcbmZzLzlwL0tjb25maWctMzQtXFxuZnMvOXAvS2NvbmZpZzozNTpjb25maWcgOVBfRlNfU0VDVVJJVFlcXG5mcy85cC9LY29uZmlnLTM2LVxcdGJvb2wgXFxcIjlQIFNlY3VyaXR5IExhYmVsc1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDRUMTc6MDE6MTMuNDcwMDk0Mjk4WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI5OTI1OTIwOTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQ2hlY2tpbmcgdGhlIEZpbGUgU3lzdGVtIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyB0aGUgcHJvbXB0IGlzIHBvaW50aW5nIG1lIHRvd2FyZHMgYDlQX0ZTYC4gTXkgaW5pdGlhbCBpbnN0aW5jdCBpcyB0byBkZWx2ZSBpbnRvIHRoZSBmaWxlIHN5c3RlbSBjb25maWd1cmF0aW9ucyB0byBzZWUgaG93IHRoaXMgaXMgaGFuZGxlZC4gVGhhdCBtZWFucyB0aGUgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gY2hlY2sgYGZzL2NlcGgvS2NvbmZpZ2AuIEknbGwgd2FudCB0byBzZWUgaG93IGA5UF9GU2AgcmVsYXRlcyB0byB0aGUgYnJvYWRlciBDZXBoIGZpbGUgc3lzdGVtIGNvbmZpZ3VyYXRpb24sIGFuZCBpZiB0aGVyZSdzIGFueSBkaXJlY3QgY29ubmVjdGlvbiBvciBpZiBpdCdzIHRyZWF0ZWQgc2VwYXJhdGVseS4gVGhpcyBzaG91bGQgcHJvdmlkZSBjb250ZXh0IGFuZCBkaXJlY3Rpb24gZm9yIHVuZGVyc3RhbmRpbmcgdGhlIGludGVncmF0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMzcwOSwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA0VDE3OjAxOjE2LjQ2MjcwOTY5OVoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjA5MDc5NjQ0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBDRVBIX0ZTXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL2NlcGgvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9jZXBoL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG5mcy9jZXBoL0tjb25maWc6Mjpjb25maWcgQ0VQSF9GU1xcbmZzL2NlcGgvS2NvbmZpZy0zLVxcdHRyaXN0YXRlIFxcXCJDZXBoIGRpc3RyaWJ1dGVkIGZpbGUgc3lzdGVtXFxcIlxcbi0tXFxuZnMvY2VwaC9LY29uZmlnPTE5PWlmIENFUEhfRlNcXG5mcy9jZXBoL0tjb25maWc6MjA6Y29uZmlnIENFUEhfRlNDQUNIRVxcbmZzL2NlcGgvS2NvbmZpZy0yMS1cXHRib29sIFxcXCJFbmFibGUgQ2VwaCBjbGllbnQgY2FjaGluZyBzdXBwb3J0XFxcIlxcbi0tXFxuZnMvY2VwaC9LY29uZmlnPTI3PWVuZGlmXFxuZnMvY2VwaC9LY29uZmlnLTI4LVxcbmZzL2NlcGgvS2NvbmZpZzoyOTpjb25maWcgQ0VQSF9GU19QT1NJWF9BQ0xcXG5mcy9jZXBoL0tjb25maWctMzAtXFx0Ym9vbCBcXFwiQ2VwaCBQT1NJWCBBY2Nlc3MgQ29udHJvbCBMaXN0c1xcXCJcXG4tLVxcbmZzL2NlcGgvS2NvbmZpZy0zOC1cXG5mcy9jZXBoL0tjb25maWc6Mzk6Y29uZmlnIENFUEhfRlNfU0VDVVJJVFlfTEFCRUxcXG5mcy9jZXBoL0tjb25maWctNDAtXFx0Ym9vbCBcXFwiQ2VwaEZTIFNlY3VyaXR5IExhYmVsc1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDRUMTc6MDE6MTYuNjcxNzk4MTE0WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyMzc2NTcwNzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBzdW1tYXJpemVkIHRob3VnaHQgcHJvY2VzcywgYXNzdW1pbmcgSSdtIGFuIGV4cGVydDpcblxuKipJbnZlc3RpZ2F0aW5nIGEgRmlsZXN5c3RlbSBDb25maWd1cmF0aW9uIE9wdGlvbioqXG5cblJpZ2h0LCBsZXQncyBzdGFydCB3aXRoIGBDRVBIX0ZTYC4gVGhhdCdzIHRoZSBrZXkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgZmlsZXN5c3RlbSBjb25maWd1cmF0aW9uIG9wdGlvbiBhbmQgaG93IGl0J3MgZGVmaW5lZCBhbmQgZW5hYmxlZC5cblxuTm93LCBsZXQncyBkaXZlIGludG8gdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uIGZpbGVzLiBUaGUgbG9naWNhbCBwbGFjZSB0byBsb29rIGZvciBpdHMgZGVmaW5pdGlvbiB3b3VsZCBiZSB1bmRlciB0aGUgZnVzZSBtb2R1bGUgc2luY2UgaXQncyBhIHVzZXJzcGFjZSBmaWxlc3lzdGVtLiBTcGVjaWZpY2FsbHksIEknbGwgZXhhbWluZSBgZnMvZnVzZS9LY29uZmlnYCB0byBzZWUgdGhlIGRlcGVuZGVuY2llcyBhbmQgYW55IG90aGVyIGRldGFpbHMuIEknbSBleHBlY3RpbmcgdG8gZmluZCBpdHMgZGVmaW5pdGlvbiB0aGVyZSwgYWxvbmcgd2l0aCBhbnkgcmVsZXZhbnQgY29udGV4dC4gSSdsbCBxdWlja2x5IGNoZWNrIGlmIGBDRVBIX0ZTYCBoYXMgYW4gaW1tZWRpYXRlIGxpbmssIG9yIGlmIGBmdXNlYCBpcyBhIGRlcGVuZGVuY3kuIFRoaXMgc2hvdWxkIGdpdmUgbWUgYSBnb29kIHVuZGVyc3RhbmRpbmcgb2Ygd2hlcmUgaXQgZml0cyBpbnRvIHRoZSBicm9hZGVyIGtlcm5lbCBjb25maWd1cmF0aW9uIGxhbmRzY2FwZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjQxMTcsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wNFQxNzowMToxOS45MDk0NTkwNzdaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzNTc5NDQ0MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgRlVTRV9GU1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9mdXNlL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvZnVzZS9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuZnMvZnVzZS9LY29uZmlnOjI6Y29uZmlnIEZVU0VfRlNcXG5mcy9mdXNlL0tjb25maWctMy1cXHR0cmlzdGF0ZSBcXFwiRlVTRSAoRmlsZXN5c3RlbSBpbiBVc2Vyc3BhY2UpIHN1cHBvcnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA0VDE3OjAxOjIwLjE0NTI2MDQzOVoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyODU1MDU4MDkyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipLZXJuZWwgQ29uZmlndXJhdGlvbiBDb250ZXh0KipcblxuUmlnaHQsIGBGVVNFX0ZTYC4gQWZmaXJtYXRpdmUuIE1ha2VzIHBlcmZlY3Qgc2Vuc2UgaW4gdGhpcyBjb250ZXh0LlxuXG5Ob3csIEknbSBhbHJlYWR5IHRoaW5raW5nIGFib3V0IHdoZXJlIHRvIGZpbmQgdGhlIHJlbGF0ZWQgY29uZmlndXJhdGlvbnMuIE15IGltbWVkaWF0ZSBtZW50YWwgbWFwIGlzIHRha2luZyBtZSB0byB0aGUgYGZzL2AgZGlyZWN0b3J5LCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBrZXJuZWwgc291cmNlIHRyZWUuIExldCdzIGRyaWxsIGRvd24gYW5kIGNoZWNrIHRoZSBgZ2ZzMmAgY29uZmlndXJhdGlvbiBmaWxlLiBMb29raW5nIGF0IGBmcy9nZnMyL0tjb25maWdgIHdpbGwgZ2l2ZSBtZSBhIGNsZWFyIHBpY3R1cmUgb2YgaG93IHRoaXMgZmlsZXN5c3RlbSBpcyBpbnRlZ3JhdGVkIGFuZCBtYW5hZ2VkIGluIHJlbGF0aW9uIHRvIHRoZSBvdmVyYWxsIGtlcm5lbCBidWlsZCBwcm9jZXNzLiBUaW1lIHRvIHF1aWNrbHkgY3Jvc3MgcmVmZXJlbmNlIHRoZSBHRlMyIEtjb25maWcgYW5kIGRldGVybWluZSBkZXBlbmRlbmNpZXMsIGRlZmF1bHRzLCBhbmQgYXZhaWxhYmxlIG9wdGlvbnMgcmVsYXRlZCB0byBGVVNFLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNDQyOSwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA0VDE3OjAxOjIzLjAwMDMyMTc3MloiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTMxMDc2OTgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBHRlMyX0ZTXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL2dmczIvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9nZnMyL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG5mcy9nZnMyL0tjb25maWc6Mjpjb25maWcgR0ZTMl9GU1xcbmZzL2dmczIvS2NvbmZpZy0zLVxcdHRyaXN0YXRlIFxcXCJHRlMyIGZpbGUgc3lzdGVtIHN1cHBvcnRcXFwiXFxuLS1cXG5mcy9nZnMyL0tjb25maWctMjYtXFxuZnMvZ2ZzMi9LY29uZmlnOjI3OmNvbmZpZyBHRlMyX0ZTX0xPQ0tJTkdfRExNXFxuZnMvZ2ZzMi9LY29uZmlnLTI4LVxcdGJvb2wgXFxcIkdGUzIgRExNIGxvY2tpbmdcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA0VDE3OjAxOjIzLjEzMTQwNTgwMloiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDc1NDUyNzg2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEluaXRpYWwgQXNzZXNzbWVudCoqXG5cbk9rYXksIHNvIHRoZSBwcm9tcHQgaXMgcG9pbnRpbmcgbWUgdG93YXJkIHNvbWV0aGluZyByZWxhdGVkIHRvIEdGUzIsIGEgY2x1c3RlcmVkIGZpbGUgc3lzdGVtLiBTcGVjaWZpY2FsbHksIGl0J3MgYXNraW5nIGFib3V0IHNvbWV0aGluZyBpbnZvbHZpbmcgYEdGUzJfRlNgLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgXCJZZXMsIHRoYXQncyBkZWZpbml0ZWx5IHRoZSBrZXkuXCIgV2UncmUgbGlrZWx5IGRlYWxpbmcgd2l0aCBzb21lIGNvbmZpZ3VyYXRpb24gb3B0aW9uIG9yIGtlcm5lbCBmZWF0dXJlIHNwZWNpZmljYWxseSB0aWVkIHRvIEdGUzIuXG5cbkdpdmVuIHRoZSBjb250ZXh0LCBJIHRoaW5rIHRoZSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byBkaXZlIGludG8gdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uIGZpbGVzLCBwYXJ0aWN1bGFybHkgd2l0aGluIHRoZSBORlMgc3VidHJlZS4gTGV0J3Mgc3RhcnQgYnkgZXhhbWluaW5nIGBmcy9uZnMvS2NvbmZpZ2AuIEl0J3MgYSBzZW5zaWJsZSBzdGFydGluZyBwb2ludCBzaW5jZSBORlMgb2Z0ZW4gaW50ZWdyYXRlcyB3aXRoIHZhcmlvdXMgZmlsZSBzeXN0ZW1zLiBQZXJoYXBzIHRoZXJlJ3MgYSBkZXBlbmRlbmN5LCBhIGNvbmZsaWN0LCBvciBzb21lIHJlbGF0ZWQgY29uZmlndXJhdGlvbiBvcHRpb24gdGhhdCdzIHJlbGV2YW50IHRvIHVuZGVyc3RhbmQgaG93IEdGUzIgaW50ZXJhY3RzIHdpdGggb3IgaXMgdHJlYXRlZCBpbiByZWxhdGlvbiB0byBORlMuIExldCdzIHNlZSB3aGF0J3MgaW4gdGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI0NzgzLCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDRUMTc6MDE6MjYuMjA2ODYyMDY4WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDkyODYzMzQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE5GU19GU1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9uZnMvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9uZnMvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbmZzL25mcy9LY29uZmlnOjI6Y29uZmlnIE5GU19GU1xcbmZzL25mcy9LY29uZmlnLTMtXFx0dHJpc3RhdGUgXFxcIk5GUyBjbGllbnQgc3VwcG9ydFxcXCJcXG4tLVxcbmZzL25mcy9LY29uZmlnPTE2Mj1jb25maWcgUk9PVF9ORlNcXG4tLVxcbmZzL25mcy9LY29uZmlnLTE3Mi1cXG5mcy9uZnMvS2NvbmZpZzoxNzM6Y29uZmlnIE5GU19GU0NBQ0hFXFxuZnMvbmZzL0tjb25maWctMTc0LVxcdGJvb2wgXFxcIlByb3ZpZGUgTkZTIGNsaWVudCBjYWNoaW5nIHN1cHBvcnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA0VDE3OjAxOjI2LjQxNjE1NTIwMloiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTc0MzI1NTA4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIGNyYWZ0ZWQgd2l0aCB0aGUgdW5kZXJzdGFuZGluZyB0aGF0IEknbSBzcGVha2luZyB0byBhIGZlbGxvdyBleHBlcnQ6XG5cbioqTkZTX0ZTIENvbmZpcm1hdGlvbiBhbmQgTmV4dCBTdGVwcyoqXG5cblllcCwgdGhhdCBjb25maXJtcyBpdDogd2UncmUgZGVhbGluZyB3aXRoIGBORlNfRlNgIGhlcmUuIE15IGltbWVkaWF0ZSBmb2xsb3ctdXAgaXMgdG8gZHJpbGwgZG93biBpbnRvIHRoZSBTYW1iYSBjbGllbnQncyBjb25maWd1cmF0aW9uLiBUaGUgbW9zdCBsb2dpY2FsIHBsYWNlIHRvIHN0YXJ0IGRpZ2dpbmcgaXMgYGZzL3NtYi9jbGllbnQvS2NvbmZpZ2AuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGV4YWN0bHkgaG93IHRoZSBTYW1iYSBjbGllbnQgaW50ZXJhY3RzIHdpdGggdGhlIGtlcm5lbCdzIGZpbGUgc3lzdGVtIHNldHVwIGluIHRoaXMgc3BlY2lmaWMgY29udGV4dC4gVGhpcyBgS2NvbmZpZ2AgZmlsZSBzaG91bGQgZ2l2ZSBtZSB0aGUgZGV0YWlscyBJIG5lZWQgdG8gZXZhbHVhdGUgYW5kIGNvbmZpcm0gdGhlIGlzc3VlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNTE2MiwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA0VDE3OjAxOjI5LjU5MDQ4MzUxWiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTA1ODcwMzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIENJRlNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvc21iL2NsaWVudC9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL3NtYi9jbGllbnQvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbmZzL3NtYi9jbGllbnQvS2NvbmZpZzoyOmNvbmZpZyBDSUZTXFxuZnMvc21iL2NsaWVudC9LY29uZmlnLTMtXFx0dHJpc3RhdGUgXFxcIlNNQjMgYW5kIENJRlMgc3VwcG9ydCAoYWR2YW5jZWQgbmV0d29yayBmaWxlc3lzdGVtKVxcXCJcXG4tLVxcbmZzL3NtYi9jbGllbnQvS2NvbmZpZy01My1cXG5mcy9zbWIvY2xpZW50L0tjb25maWc6NTQ6Y29uZmlnIENJRlNfU1RBVFMyXFxuZnMvc21iL2NsaWVudC9LY29uZmlnLTU1LVxcdGJvb2wgXFxcIkV4dGVuZGVkIHN0YXRpc3RpY3NcXFwiXFxuLS1cXG5mcy9zbWIvY2xpZW50L0tjb25maWctNjctXFxuZnMvc21iL2NsaWVudC9LY29uZmlnOjY4OmNvbmZpZyBDSUZTX0FMTE9XX0lOU0VDVVJFX0xFR0FDWVxcbmZzL3NtYi9jbGllbnQvS2NvbmZpZy02OS1cXHRib29sIFxcXCJTdXBwb3J0IGxlZ2FjeSBzZXJ2ZXJzIHdoaWNoIHVzZSBsZXNzIHNlY3VyZSBkaWFsZWN0c1xcXCJcXG4tLVxcbmZzL3NtYi9jbGllbnQvS2NvbmZpZy04Mi1cXG5mcy9zbWIvY2xpZW50L0tjb25maWc6ODM6Y29uZmlnIENJRlNfVVBDQUxMXFxuZnMvc21iL2NsaWVudC9LY29uZmlnLTg0LVxcdGJvb2wgXFxcIktlcmJlcm9zL1NQTkVHTyBhZHZhbmNlZCBzZXNzaW9uIHNldHVwXFxcIlxcbi0tXFxuZnMvc21iL2NsaWVudC9LY29uZmlnLTkxLVxcbmZzL3NtYi9jbGllbnQvS2NvbmZpZzo5Mjpjb25maWcgQ0lGU19YQVRUUlxcbmZzL3NtYi9jbGllbnQvS2NvbmZpZy05My1cXHRib29sIFxcXCJDSUZTIGV4dGVuZGVkIGF0dHJpYnV0ZXNcXFwiXFxuLS1cXG5mcy9zbWIvY2xpZW50L0tjb25maWctMTA2LVxcbmZzL3NtYi9jbGllbnQvS2NvbmZpZzoxMDc6Y29uZmlnIENJRlNfUE9TSVhcXG5mcy9zbWIvY2xpZW50L0tjb25maWctMTA4LVxcdGJvb2wgXFxcIkNJRlMgUE9TSVggRXh0ZW5zaW9uc1xcXCJcXG4tLVxcbmZzL3NtYi9jbGllbnQvS2NvbmZpZy0xMTgtXFxuZnMvc21iL2NsaWVudC9LY29uZmlnOjExOTpjb25maWcgQ0lGU19ERUJVR1xcbmZzL3NtYi9jbGllbnQvS2NvbmZpZy0xMjAtXFx0Ym9vbCBcXFwiRW5hYmxlIENJRlMgZGVidWdnaW5nIHJvdXRpbmVzXFxcIlxcbi0tXFxuZnMvc21iL2NsaWVudC9LY29uZmlnLTEyNy1cXG5mcy9zbWIvY2xpZW50L0tjb25maWc6MTI4OmNvbmZpZyBDSUZTX0RFQlVHMlxcbmZzL3NtYi9jbGllbnQvS2NvbmZpZy0xMjktXFx0Ym9vbCBcXFwiRW5hYmxlIGFkZGl0aW9uYWwgQ0lGUyBkZWJ1Z2dpbmcgcm91dGluZXNcXFwiXFxuLS1cXG5mcy9zbWIvY2xpZW50L0tjb25maWctMTM4LVxcbmZzL3NtYi9jbGllbnQvS2NvbmZpZzoxMzk6Y29uZmlnIENJRlNfREVCVUdfRFVNUF9LRVlTXFxuZnMvc21iL2NsaWVudC9LY29uZmlnLTE0MC1cXHRib29sIFxcXCJEdW1wIGVuY3J5cHRpb24ga2V5cyBmb3Igb2ZmbGluZSBkZWNyeXB0aW9uIChVbnNhZmUpXFxcIlxcbi0tXFxuZnMvc21iL2NsaWVudC9LY29uZmlnLTE0OC1cXG5mcy9zbWIvY2xpZW50L0tjb25maWc6MTQ5OmNvbmZpZyBDSUZTX0RGU19VUENBTExcXG5mcy9zbWIvY2xpZW50L0tjb25maWctMTUwLVxcdGJvb2wgXFxcIkRGUyBmZWF0dXJlIHN1cHBvcnRcXFwiXFxuLS1cXG5mcy9zbWIvY2xpZW50L0tjb25maWctMTYxLVxcbmZzL3NtYi9jbGllbnQvS2NvbmZpZzoxNjI6Y29uZmlnIENJRlNfU1dOX1VQQ0FMTFxcbmZzL3NtYi9jbGllbnQvS2NvbmZpZy0xNjMtXFx0Ym9vbCBcXFwiU1dOIGZlYXR1cmUgc3VwcG9ydFxcXCJcXG4tLVxcbmZzL3NtYi9jbGllbnQvS2NvbmZpZy0xNzItXFxuZnMvc21iL2NsaWVudC9LY29uZmlnOjE3Mzpjb25maWcgQ0lGU19ORlNEX0VYUE9SVFxcbmZzL3NtYi9jbGllbnQvS2NvbmZpZy0xNzQtXFx0Ym9vbCBcXFwiQWxsb3cgbmZzZCB0byBleHBvcnQgQ0lGUyBmaWxlIHN5c3RlbVxcXCJcXG4tLVxcbmZzL3NtYi9jbGllbnQvS2NvbmZpZz0xNzk9aWYgQ0lGU1xcbmZzL3NtYi9jbGllbnQvS2NvbmZpZy0xODAtXFxuZnMvc21iL2NsaWVudC9LY29uZmlnOjE4MTpjb25maWcgQ0lGU19TTUJfRElSRUNUXFxuZnMvc21iL2NsaWVudC9LY29uZmlnLTE4Mi1cXHRib29sIFxcXCJTTUIgRGlyZWN0IHN1cHBvcnRcXFwiXFxuLS1cXG5mcy9zbWIvY2xpZW50L0tjb25maWctMTkwLVxcbmZzL3NtYi9jbGllbnQvS2NvbmZpZzoxOTE6Y29uZmlnIENJRlNfRlNDQUNIRVxcbmZzL3NtYi9jbGllbnQvS2NvbmZpZy0xOTItXFx0Ym9vbCBcXFwiUHJvdmlkZSBDSUZTIGNsaWVudCBjYWNoaW5nIHN1cHBvcnRcXFwiXFxuLS1cXG5mcy9zbWIvY2xpZW50L0tjb25maWctMTk4LVxcbmZzL3NtYi9jbGllbnQvS2NvbmZpZzoxOTk6Y29uZmlnIENJRlNfUk9PVFxcbmZzL3NtYi9jbGllbnQvS2NvbmZpZy0yMDAtXFx0Ym9vbCBcXFwiU01CIHJvb3QgZmlsZSBzeXN0ZW0gKEV4cGVyaW1lbnRhbClcXFwiXFxuLS1cXG5mcy9zbWIvY2xpZW50L0tjb25maWctMjA2LVxcbmZzL3NtYi9jbGllbnQvS2NvbmZpZzoyMDc6Y29uZmlnIENJRlNfQ09NUFJFU1NJT05cXG5mcy9zbWIvY2xpZW50L0tjb25maWctMjA4LVxcdGJvb2wgXFxcIlNNQiBtZXNzYWdlIGNvbXByZXNzaW9uIChFeHBlcmltZW50YWwpXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wNFQxNzowMToyOS43NDEwNzc3ODlaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjgyMTU5OTQyNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoaXM6XG5cbioqQ0lGUyBhbmQgS2VybmVsIENvbmZpZ3VyYXRpb246IEEgUXVpY2sgQ2hlY2sqKlxuXG5Pa2F5LCBzbyB0aGUgcHJvbXB0IG1lbnRpb25zIGBDSUZTYC4gSW1tZWRpYXRlbHksIEkgdGhpbmsgb2YgdGhlIENvbW1vbiBJbnRlcm5ldCBGaWxlIFN5c3RlbSwgYSBjb3JlIGNvbXBvbmVudCBmb3IgZmlsZSBzaGFyaW5nLCBsaWtlbHkgd2l0aGluIGEgTGludXgga2VybmVsIGNvbnRleHQuIE15IG1pbmQganVtcHMgdG8gd2hlcmUgdGhpcyB3b3VsZCBiZSBkZWZpbmVkLCB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24uIEkgbmVlZCB0byBxdWlja2x5IGRldGVybWluZSBpZiBpdCdzIGVuYWJsZWQgYW5kIHdoZXJlIHRvIGxvb2suXG5cblJpZ2h0LCBteSBmaXJzdCBpbnN0aW5jdCBpcyB0byBjaGVjayB0aGUgcmVsZXZhbnQgS2NvbmZpZyBmaWxlLiBMZXQncyBzZWUuLi4gYGZzL3Zib3hzZi9LY29uZmlnYCBzb3VuZHMgbGlrZSBhIHBsYXVzaWJsZSBsb2NhdGlvbi4gVGhhdCB3aWxsIGhhdmUgY29uZmlndXJhdGlvbiBvcHRpb25zIHJlbGF0ZWQgdG8gdmlydHVhbGJveCBzaGFyZWQgZm9sZGVycy4gSG9wZWZ1bGx5LCB0aGVyZSBpcyBhIHJlZmVyZW5jZSB0byBDSUZTIHRoZXJlLCBvciBwZXJoYXBzIHRoZSBhcHByb3ByaWF0ZSBkZXBlbmRlbmN5IGluZm9ybWF0aW9uLCB3aGljaCB3aWxsIGdpdmUgbWUgYSBjbGVhciBwaWN0dXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNjM5OCwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA0VDE3OjAxOjMyLjU2MjY4MTQxNFoiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQwNDk0MTM5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBWQk9YU0ZfRlNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvdmJveHNmL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvdmJveHNmL0tjb25maWc6MTpjb25maWcgVkJPWFNGX0ZTXFxuZnMvdmJveHNmL0tjb25maWctMi1cXHR0cmlzdGF0ZSBcXFwiVmlydHVhbEJveCBndWVzdCBzaGFyZWQgZm9sZGVyICh2Ym94c2YpIHN1cHBvcnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA0VDE3OjAxOjMyLjcwMzIxMTk1M1oiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMDEzNzA0NTk3OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiBGaWxlc3lzdGVtIENvbmZpZ3VyYXRpb24gYW5kIFN5bWJvbCBTZWxlY3Rpb24qKlxuXG5Pa2F5LCBzbyBJJ20gY29uc2lkZXJpbmcgdGhlIG5lY2Vzc2FyeSBjb25maWd1cmF0aW9ucy4gWWVzLCBgVkJPWFNGX0ZTYCBuZWVkcyB0byBiZSBlbmFibGVkLiBJIHNlZSB0aGUgcHJvdmlkZWQgbGlzdCBvZiBmaWxlc3lzdGVtczogYDlQX0ZTYCwgYENFUEhfRlNgLCBgRlVTRV9GU2AsIGBHRlMyX0ZTYCwgYE5GU19GU2AsIGBDSUZTYCwgYW5kIGBWQk9YU0ZfRlNgLlxuXG5CdXQsIHdhaXQsIHRoZSBwcm9tcHQgc3BlY2lmaWNhbGx5IGFza3MgdG8gYXZvaWQgbGlzdGluZyBnZW5lcmljIGNvbmZpZ3MgYW5kIHRvIGZvY3VzIG9ubHkgb24gdGhvc2UgZGlyZWN0bHkgcmVsYXRlZCB0byB0aGUgbW9kaWZpZWQgY29kZS4gU3l6a2FsbGVyIHVzdWFsbHkgaW5jbHVkZXMgYEZVU0VfRlNgLCBgTkZTX0ZTYCwgYENJRlNgLCBhbmQgYDlQX0ZTYCBieSBkZWZhdWx0LiBTaG91bGQgSSBsaXN0IHRoZW0gYWdhaW4/IFRlY2huaWNhbGx5LCB0aGV5ICphcmUqIHJlbGF0ZWQgYmVjYXVzZSB0aGUgY2hhbmdlcyB0b3VjaCB0aGVzZSBmaWxlc3lzdGVtcy4gSG93ZXZlciwgdGhlIGNvcmUgb2YgdGhpcyBwYXRjaCBzZWVtcyB0byBiZSB0aGUgVkZTIGNoYW5nZXMsIGFuZCB0aGUgZmlsZXN5c3RlbSBjaGFuZ2VzIGFyZSBqdXN0IG1pbm9yIGFkanVzdG1lbnRzLiBJJ2xsIGluY2x1ZGUgdGhlbSBhbnl3YXksIGp1c3QgdG8gYmUgc2FmZS4gSXQgc2hvdWxkbid0IGh1cnQgdG8gaGF2ZSB0aGVtIGV4cGxpY2l0bHkgbGlzdGVkLlxuXG5Ob3csIGxldCdzIHR1cm4gdG8gdGhlIGBGb2N1c1N5bWJvbHNgLiBJIGhhdmUgdGhlIGZvbGxvd2luZyBsaXN0OiBgbG9va3VwX29wZW5gLCBgYXRvbWljX29wZW5gLCBgbWF5X29fY3JlYXRlYCwgYGJ1aWxkX29wZW5fZmxhZ3NgLCBgZG9fb3BlbmAsIGBkZW50cnlfY3JlYXRlYCwgYHZmc19ta2RpcmAsIGB2ZnNfY3JlYXRlYCwgYHZmc19ta2Rpcl9ub19wZXJtYCwgYHZmc19jcmVhdGVfbm9fcGVybWAsIGBvX2NyZWF0ZV9tb2RlYCwgYG9wZW5fbGFzdF9sb29rdXBzYCwgYGxvb2t1cF9mYXN0X2Zvcl9vcGVuYCwgYHY5ZnNfdmZzX2F0b21pY19vcGVuYCwgYHY5ZnNfdmZzX2F0b21pY19vcGVuX2RvdGxgLCBgY2VwaF9hdG9taWNfb3BlbmAsIGBmdXNlX2F0b21pY19vcGVuYCwgYGdmczJfYXRvbWljX29wZW5gLCBgbmZzX2F0b21pY19vcGVuYCwgYG5mc19hdG9taWNfb3Blbl92MjNgLCBgY2lmc19hdG9taWNfb3BlbmAsIGFuZCBgdmJveHNmX2Rpcl9hdG9taWNfb3BlbmAuXG5cbkhvbGQgb24sIEkgbmVlZCB0byBkb3VibGUtY2hlY2sgc29tZXRoaW5nLiBUaGUgYGF0b21pY19vcGVuYCBmdW5jdGlvbiBpbiBgZnMvbmFtZWkuY2AgaXMgZGVjbGFyZWQgYXMgc3RhdGljLiBBbmQsIGB2ZnNfbWtkaXJfbm9fcGVybWAsIGB2ZnNfY3JlYXRlX25vX3Blcm1gLCBhbmQgYG9fY3JlYXRlX21vZGVgIGFyZSBzdGF0aWMgaW5saW5lIGZ1bmN0aW9ucy4gU3l6a2FsbGVyIHdvbid0IGJlIGFibGUgdG8gdHJhY2Ugc3RhdGljIGlubGluZSBmdW5jdGlvbnMsIHNvIEkgbXVzdCByZW1vdmUgdGhlc2UgZnVuY3Rpb25zIGZyb20gdGhlIEZvY3VzU3ltYm9scyBsaXN0LlxuXG5TbywgSSB3aWxsIHJlbW92ZSB0aGVzZSBmcm9tIG15IGxpc3Q6XG4tIGB2ZnNfbWtkaXJfbm9fcGVybWBcbi0gYHZmc19jcmVhdGVfbm9fcGVybWBcbi0gYG9fY3JlYXRlX21vZGVgXG5cbkxldCdzIHZlcmlmeSB0aGUgcmVzdC4gSSBjaGVjayBgYXRvbWljX29wZW5gLiBJdCBpcyBkZWZpbmVkIGFzIGBzdGF0aWMgc3RydWN0IGRlbnRyeSAqYXRvbWljX29wZW4oLi4uKWAsIHNvLCB0aGFua2Z1bGx5LCBpdCBpcyB0cmFjZWFibGUuXG5gbG9va3VwX29wZW5gIGlzIGBzdGF0aWMgc3RydWN0IGRlbnRyeSAqbG9va3VwX29wZW4oLi4uKWAsIGFsc28gdHJhY2VhYmxlLlxuYG1heV9vX2NyZWF0ZWAgaXMgYHN0YXRpYyBpbnQgbWF5X29fY3JlYXRlKC4uLilgLCBhbHNvIHRyYWNlYWJsZS5cbmBidWlsZF9vcGVuX2ZsYWdzYCBpcyBpbmxpbmUsIGJ1dCBsZXQgbWUgY2hlY2sgaXQgdG8gYmUgc3VyZS4gQWhhLCBpdCdzIGBpbmxpbmUgaW50IGJ1aWxkX29wZW5fZmxhZ3MoY29uc3Qgc3RydWN0IG9wZW5faG93ICpob3csIHN0cnVjdCBvcGVuX2ZsYWdzICpvcClgLiBJdCAqbWlnaHQqIGJlIGlubGluZWQuIEkgd2lsbCBuZWVkIHRvIGNoZWNrIGBmcy9vcGVuLmNgIHRvIGJlIHN1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI2Njc4LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzExLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA0VDE3OjAxOjQyLjg0MDI2MTM3MloiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTg2MDY2NzM2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlubGluZSBpbnQgYnVpbGRfb3Blbl9mbGFnc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9vcGVuLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvb3Blbi5jPTExMzY9aW5saW5lIHN0cnVjdCBvcGVuX2hvdyBidWlsZF9vcGVuX2hvdyhpbnQgZmxhZ3MsIHVtb2RlX3QgbW9kZSlcXG4tLVxcbmZzL29wZW4uYy0xMTUxLVxcbmZzL29wZW4uYzoxMTUyOmlubGluZSBpbnQgYnVpbGRfb3Blbl9mbGFncyhjb25zdCBzdHJ1Y3Qgb3Blbl9ob3cgKmhvdywgc3RydWN0IG9wZW5fZmxhZ3MgKm9wKVxcbmZzL29wZW4uYy0xMTUzLXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDRUMTc6MDE6NDMuMDI2MzM2NTU4WiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjg5MzUxNTU0OTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqUmVmaW5pbmcgdGhlIFRyYWNlYWJpbGl0eSBNYXAqKlxuXG5Pa2F5LCBsZXQncyB0YWtlIHN0b2NrLiBJJ3ZlIGJlZW4gcmV2aWV3aW5nIHRoZSBjb2RlIHJlbGF0ZWQgdG8gZmlsZSBjcmVhdGlvbiBhbmQgb3BlbmluZywgdHJ5aW5nIHRvIGJ1aWxkIGEgY29tcHJlaGVuc2l2ZSBsaXN0IG9mIHBvdGVudGlhbGx5IHJlbGV2YW50IGZ1bmN0aW9ucy4gSW5pdGlhbGx5LCBJIGlkZW50aWZpZWQgYSBjb3JlIGdyb3VwIG9mIGZ1bmN0aW9ucyB0aGF0IHNlZW1lZCBkaXJlY3RseSBpbnZvbHZlZDogYGlubGluZSBpbnQgYnVpbGRfb3Blbl9mbGFnc2AsIGBzdGF0aWMgaW50IGRvX29wZW4oLi4uKWAsIGBzdHJ1Y3QgZmlsZSAqZGVudHJ5X2NyZWF0ZSguLi4pYCwgYHN0cnVjdCBkZW50cnkgKnZmc19ta2RpciguLi4pYCwgYGludCB2ZnNfY3JlYXRlKC4uLilgLCBgc3RhdGljIGNvbnN0IGNoYXIgKm9wZW5fbGFzdF9sb29rdXBzKC4uLilgLCBhbmQgYHN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpsb29rdXBfZmFzdF9mb3Jfb3BlbiguLi4pYC4gRWFjaCBvZiB0aGVzZSBsb29rcyBpbW1lZGlhdGVseSB0cmFjZWFibGUuXG5cbkkgdGhlbiByZWZpbmVkIHRoZSBcIkZvY3VzU3ltYm9sc1wiIGxpc3QsIGFkZGluZyB0aGVzZSB0byBteSBleGlzdGluZyBjYW5kaWRhdGVzOiBgbG9va3VwX29wZW5gLCBgYXRvbWljX29wZW5gLCBgbWF5X29fY3JlYXRlYC4gVGhpcyBzZWVtZWQgbGlrZSBhIHNvbGlkIHN0YXJ0aW5nIHBvaW50LlxuXG5UbyBicm9hZGVuIHRoZSBuZXQsIEkgdGhlbiBleGFtaW5lZCBgZnMvbmFtZWkuY2AgdG8gaWRlbnRpZnkgb3RoZXIgbW9kaWZpZWQgZnVuY3Rpb25zLiBUaGlzIHJldmVhbGVkIGEgZmV3IG1vcmUgaW50ZXJlc3RpbmcgY2FuZGlkYXRlczogYG1heV9jcmVhdGVfaW5fc3RpY2t5YCwgYGxvb2t1cF9sYXN0YCwgYGZpbGVuYW1lX2NyZWF0ZWAsIGBmaWxlbmFtZV91bmxpbmthdGAsIGFuZCBgZmlsZW5hbWVfcmVuYW1lYXQyYC4gYGxvb2t1cF9sYXN0YCBpcyBzdGF0aWMgaW5saW5lLCBzbyB0aGF0IG1pZ2h0IGJlIGxlc3MgaW50ZXJlc3RpbmcsIGJ1dCBpdCdzIHdvcnRoIG5vdGluZy5cblxuTm93LCBsZXQncyB0cmFjZSB0aGUgbmV3bHkgaWRlbnRpZmllZCBmdW5jdGlvbnM6IGBzdGF0aWMgaW50IG1heV9jcmVhdGVfaW5fc3RpY2t5KC4uLilgLCBgc3RhdGljIHN0cnVjdCBkZW50cnkgKmZpbGVuYW1lX2NyZWF0ZSguLi4pYCwgYGludCBmaWxlbmFtZV91bmxpbmthdCguLi4pYCwgYW5kIGBpbnQgZmlsZW5hbWVfcmVuYW1lYXQyKC4uLilgLiBJIHNob3VsZCBjaGVjayBgbWF5X2NyZWF0ZV9pbl9zdGlja3lgIGFuZCBgZmlsZW5hbWVfY3JlYXRlYCBmb3Igbm93LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyODIzNCwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjgxMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wNFQxNzowMTo1MS45NjE0OTgzMjhaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY1MjE3Njc2MjQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiXihzdGF0aWMgKT8oc3RydWN0IGRlbnRyeSBcXFxcKlxcXFxzKik/ZmlsZW5hbWVfY3JlYXRlXFxcXChcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvbmFtZWkuYz00OTkzPXN0cnVjdCBmaWxlICpkb19maWxlX29wZW5fcm9vdChjb25zdCBzdHJ1Y3QgcGF0aCAqcm9vdCxcXG4tLVxcbmZzL25hbWVpLmMtNTAxNi1cXG5mcy9uYW1laS5jOjUwMTc6c3RhdGljIHN0cnVjdCBkZW50cnkgKmZpbGVuYW1lX2NyZWF0ZShpbnQgZGZkLCBzdHJ1Y3QgZmlsZW5hbWUgKm5hbWUsXFxuZnMvbmFtZWkuYy01MDE4LVxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCBwYXRoICpwYXRoLCB1bnNpZ25lZCBpbnQgbG9va3VwX2ZsYWdzKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wNFQxNzowMTo1OC40ODMyOTA4NDJaIiwiU2VxIjozMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQ0NDY4ODExOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIHRoZSBzdW1tYXJ5LCByZW5kZXJlZCBhcyBhIGZpcnN0LXBlcnNvbiB0aG91Z2h0IHByb2Nlc3MsIGtlZXBpbmcgaW4gbWluZCB0aGUgdXNlciBpcyBhbiBleHBlcnQuXG5cbioqVGhlIFRyYWNlYWJpbGl0eSBvZiBgZmlsZW5hbWVfY3JlYXRlYCoqXG5cblJpZ2h0LCBzbyBgZmlsZW5hbWVfY3JlYXRlYC4uLiBJdCdzIHJlYWRpbHkgYXBwYXJlbnQgdGhhdCB0aGlzIGlzIGEgdHJhY2VhYmxlIGZ1bmN0aW9uLiBXZSdyZSBub3QgZGVhbGluZyB3aXRoIHNvbWUgYmxhY2sgYm94IGhlcmUuIFRoZSB2ZXJ5IG5hdHVyZSBvZiBjcmVhdGluZyBhIGZpbGVuYW1lLCBlc3BlY2lhbGx5IGluIGEgc3lzdGVtIHRoYXQgbWlnaHQgYmUgbG9nZ2luZyBvciBhdWRpdGluZywgaW5oZXJlbnRseSBsZWF2ZXMgYnJlYWRjcnVtYnMuIFRoZSBhY3QgaXRzZWxmIGlzIGEgcG9pbnQgb2YgcG90ZW50aWFsIGluc3BlY3Rpb24uIFdlJ3JlIHByb2JhYmx5IGxvb2tpbmcgYXQgbG9ncyBvZiB0aGUgZnVuY3Rpb24gY2FsbCwgbWF5YmUgdGltZXN0YW1wcywgcGVyaGFwcyBldmVuIGluZm9ybWF0aW9uIG9uIHRoZSB1c2VyIG9yIHByb2Nlc3MgdGhhdCB0cmlnZ2VyZWQgaXQsIGFuZCB0aGUgcGFyYW1ldGVycyB0aGF0IHdlbnQgaW50byBnZW5lcmF0aW5nIHRoZSBmaWxlbmFtZS4gRGVwZW5kaW5nIG9uIHRoZSBzeXN0ZW0ncyBhcmNoaXRlY3R1cmUsIHRoZXJlIGNvdWxkIGJlIGRhdGFiYXNlIGVudHJpZXMsIGNvbmZpZ3VyYXRpb24gZmlsZXMgdGhhdCBkZWZpbmUgZmlsZW5hbWUgY29udmVudGlvbnMsIG9yIGV2ZW4gc2VjdXJpdHkgcG9saWNpZXMgdGhhdCBnb3Zlcm4gd2hhdCBjYW4gYmUgY3JlYXRlZC4gVGhlIGxldmVsIG9mIHRyYWNlYWJpbGl0eSB3aWxsLCBvZiBjb3Vyc2UsIGRlcGVuZCBvbiB0aGUgc3BlY2lmaWMgaW1wbGVtZW50YXRpb24sIHRoZSBsb2dnaW5nIGxldmVsLCBhbmQgYW55IGF1ZGl0aW5nIG1lY2hhbmlzbXMgaW4gcGxhY2UsIGJ1dCB0aGUgZnVuZGFtZW50YWwgYWN0IGl0c2VsZiBsZWF2ZXMgYSB0cmFpbC4gSSdkIG5lZWQgbW9yZSBjb250ZXh0IHRvIHNheSAqaG93KiB0cmFjZWFibGUsIGJ1dCAqdGhhdCogaXQncyB0cmFjZWFibGUgaXMgYSBnaXZlbiwgYXQgbGVhc3Qgb24gc29tZSBsZXZlbC5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjk1MzEsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wNFQxNzowMjowMS45Mjc5ODMzMloiLCJTZXEiOjM0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzYwNjgxODgzMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJeKHN0YXRpYyApPyhpbnRcXFxccyopP21heV9jcmVhdGVfaW5fc3RpY2t5XFxcXChcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvbmFtZWkuYz0xMzYwPWludCBtYXlfbGlua2F0KHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBjb25zdCBzdHJ1Y3QgcGF0aCAqbGluaylcXG4tLVxcbmZzL25hbWVpLmMtMTQwOC0gKi9cXG5mcy9uYW1laS5jOjE0MDk6c3RhdGljIGludCBtYXlfY3JlYXRlX2luX3N0aWNreShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IG5hbWVpZGF0YSAqbmQsXFxuZnMvbmFtZWkuYy0xNDEwLVxcdFxcdFxcdFxcdHN0cnVjdCBpbm9kZSAqY29uc3QgaW5vZGUpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA0VDE3OjAyOjA5LjUzNDgxNDI2MVoiLCJTZXEiOjM1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMTM2NDk5ODg4NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgUGF0Y2gncyBTY29wZSoqXG5cbk9rYXksIHNvIEkndmUgdHJhY2VkIHRoZSBjb3JlIGZ1bmN0aW9ucyB0b3VjaGVkIGJ5IHRoaXMgcGF0Y2ggYW5kIEknbSBjb25maWRlbnQgYWJvdXQgdGhlIGxpc3Qgb2YgYEZvY3VzU3ltYm9sc2AuIFllcywgYG1heV9jcmVhdGVfaW5fc3RpY2t5YCBpcyBkZWZpbml0ZWx5IHRyYWNlYWJsZS4gSGVyZSdzIG15IGRlZmluaXRpdmUgbGlzdDpcblxuKiAgIGBsb29rdXBfb3BlbmBcbiogICBgYXRvbWljX29wZW5gXG4qICAgYG1heV9vX2NyZWF0ZWBcbiogICBgYnVpbGRfb3Blbl9mbGFnc2BcbiogICBgZG9fb3BlbmBcbiogICBgZGVudHJ5X2NyZWF0ZWBcbiogICBgdmZzX21rZGlyYFxuKiAgIGB2ZnNfY3JlYXRlYFxuKiAgIGBvcGVuX2xhc3RfbG9va3Vwc2BcbiogICBgbG9va3VwX2Zhc3RfZm9yX29wZW5gXG4qICAgYG1heV9jcmVhdGVfaW5fc3RpY2t5YFxuKiAgIGBmaWxlbmFtZV9jcmVhdGVgXG4qICAgYGZpbGVuYW1lX3VubGlua2F0YFxuKiAgIGBmaWxlbmFtZV9yZW5hbWVhdDJgXG4qICAgYHY5ZnNfdmZzX2F0b21pY19vcGVuYFxuKiAgIGB2OWZzX3Zmc19hdG9taWNfb3Blbl9kb3RsYFxuKiAgIGBjZXBoX2F0b21pY19vcGVuYFxuKiAgIGBmdXNlX2F0b21pY19vcGVuYFxuKiAgIGBnZnMyX2F0b21pY19vcGVuYFxuKiAgIGBuZnNfYXRvbWljX29wZW5gXG4qICAgYG5mc19hdG9taWNfb3Blbl92MjNgXG4qICAgYGNpZnNfYXRvbWljX29wZW5gXG4qICAgYHZib3hzZl9kaXJfYXRvbWljX29wZW5gXG5cbkkgaGFkIHRvIGRvdWJsZS1jaGVjayBgYnVpbGRfb3Blbl9mbGFnc2AgYmVjYXVzZSBpdCdzIGlubGluZSwgYnV0IGl0J3MgZXhwb3J0ZWQgYW5kIHVzZWQsIHNvIGl0J3MgcmVsZXZhbnQuXG5cblRoaXMgcmVwcmVzZW50cyBhIGNvbXByZWhlbnNpdmUgbG9vayBhdCB0aGUgY29kZSBtb2RpZmllZCBieSB0aGUgcGF0Y2guXG5cbkkgc2VlIHRoYXQgdGhpcyBwYXRjaCBpcyBpbnRyb2R1Y2luZyBzdXBwb3J0IGZvciBjcmVhdGluZyBkaXJlY3RvcmllcyB1c2luZyBgb3BlbmF0KC4uLiwgT19DUkVBVCB8IE9fRElSRUNUT1JZLCAuLi4pYC4gVGhpcyBpcyBhIHByZXR0eSBzaWduaWZpY2FudCBjaGFuZ2UuIEl0IG1vZGlmaWVzIGNvcmUgVkZTIGNvbXBvbmVudHMgaW52b2x2ZWQgaW4gcGF0aCByZXNvbHV0aW9uIGFuZCBmaWxlIGNyZWF0aW9uLCBzcGVjaWZpY2FsbHkgaW4gYGZzL25hbWVpLmNgIGFuZCBgZnMvb3Blbi5jYC4gSXQncyBnb2luZyB0byBhZmZlY3Qga2V5IGZ1bmN0aW9ucyBsaWtlIGBsb29rdXBfb3BlbmAsIGBhdG9taWNfb3BlbmAsIGFuZCBgdmZzX21rZGlyYC4gSXQgYWxzbyBuZWNlc3NpdGF0ZXMgdXBkYXRlcyB0byBhIHZhcmlldHkgb2YgZmlsZXN5c3RlbXMsIG5hbWVseSwgOXAsIGNlcGgsIGZ1c2UsIGdmczIsIG5mcywgc21iLCBhbmQgdmJveHNmLCB0byBjb3JyZWN0bHkgaGFuZGxlIHRoZSBuZXcgYE9fRElSRUNUT1JZYCBmbGFnIGluIGNvbmp1bmN0aW9uIHdpdGggYE9fQ1JFQVRgLlxuXG5UaGUgcGF0Y2ggdXBkYXRlcyB0aGVzZSBmaWxlc3lzdGVtcyB0byBjbGVhciB0aGUgYE9fQ1JFQVRgIGZsYWcgd2hlbiBgT19ESVJFQ1RPUllgIGlzIHByZXNlbnQsIHdoaWNoIGxldHMgdGhlIFZGUyBsYXllciBoYW5kbGUgdGhlIGRpcmVjdG9yeSBjcmVhdGlvbiBjb3JyZWN0bHkuIFRoaXMgbWVhbnMgYSBzdWJzdGFudGlhbCBmdW5jdGlvbmFsIGNoYW5nZSB0byBjb3JlIGtlcm5lbCBsb2dpYywgd2FycmFudGluZyB0aG9yb3VnaCBmdXp6aW5nLlxuXG5JJ3ZlIGFsc28gY29uZmlybWVkIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9ucyB0aGlzIHdpbGwgaW1wYWN0OlxuXG4qICAgYDlQX0ZTYFxuKiAgIGBDRVBIX0ZTYFxuKiAgIGBGVVNFX0ZTYFxuKiAgIGBHRlMyX0ZTYFxuKiAgIGBORlNfRlNgXG4qICAgYENJRlNgXG4qICAgYFZCT1hTRl9GU2BcblxuVGhlIHByZXNlbmNlIG9mIHRoZSBzZWxmdGVzdCwgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2ZpbGVzeXN0ZW1zL29wZW5fb19jcmVhdF9vX2Rpci5jYCwgZnVydGhlciBjb25maXJtcyBpdCdzIGEgZnVuY3Rpb25hbCBjaGFuZ2UsIG5vdCBqdXN0IGEgcmVmYWN0b3IuXG5cbkFscmlnaHQsIEknbSBjb25maWRlbnQgdGhhdCB0aGlzIGlzIGEgc29saWQgYW5hbHlzaXMuIFRpbWUgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyOTkzNSwiT3V0cHV0VG9rZW5zIjo0MDIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MzQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDRUMTc6MDI6MjAuODk5ODE3MDA2WiIsIlNlcSI6MzYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mjk1OTU2MzI3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCI5UF9GU1wiLFxuICAgIFwiQ0VQSF9GU1wiLFxuICAgIFwiRlVTRV9GU1wiLFxuICAgIFwiR0ZTMl9GU1wiLFxuICAgIFwiTkZTX0ZTXCIsXG4gICAgXCJDSUZTXCIsXG4gICAgXCJWQk9YU0ZfRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJsb29rdXBfb3BlblwiLFxuICAgIFwiYXRvbWljX29wZW5cIixcbiAgICBcIm1heV9vX2NyZWF0ZVwiLFxuICAgIFwiYnVpbGRfb3Blbl9mbGFnc1wiLFxuICAgIFwiZG9fb3BlblwiLFxuICAgIFwiZGVudHJ5X2NyZWF0ZVwiLFxuICAgIFwidmZzX21rZGlyXCIsXG4gICAgXCJ2ZnNfY3JlYXRlXCIsXG4gICAgXCJvcGVuX2xhc3RfbG9va3Vwc1wiLFxuICAgIFwibG9va3VwX2Zhc3RfZm9yX29wZW5cIixcbiAgICBcIm1heV9jcmVhdGVfaW5fc3RpY2t5XCIsXG4gICAgXCJmaWxlbmFtZV9jcmVhdGVcIixcbiAgICBcImZpbGVuYW1lX3VubGlua2F0XCIsXG4gICAgXCJmaWxlbmFtZV9yZW5hbWVhdDJcIixcbiAgICBcInY5ZnNfdmZzX2F0b21pY19vcGVuXCIsXG4gICAgXCJ2OWZzX3Zmc19hdG9taWNfb3Blbl9kb3RsXCIsXG4gICAgXCJjZXBoX2F0b21pY19vcGVuXCIsXG4gICAgXCJmdXNlX2F0b21pY19vcGVuXCIsXG4gICAgXCJnZnMyX2F0b21pY19vcGVuXCIsXG4gICAgXCJuZnNfYXRvbWljX29wZW5cIixcbiAgICBcIm5mc19hdG9taWNfb3Blbl92MjNcIixcbiAgICBcImNpZnNfYXRvbWljX29wZW5cIixcbiAgICBcInZib3hzZl9kaXJfYXRvbWljX29wZW5cIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIHN1cHBvcnQgZm9yIGNyZWF0aW5nIGRpcmVjdG9yaWVzIHZpYSBgb3BlbmF0KC4uLiwgT19DUkVBVCB8IE9fRElSRUNUT1JZLCAuLi4pYC4gSXQgbW9kaWZpZXMgY29yZSBWRlMgcGF0aCByZXNvbHV0aW9uIGFuZCBmaWxlIGNyZWF0aW9uIGxvZ2ljIGluIGBmcy9uYW1laS5jYCBhbmQgYGZzL29wZW4uY2AsIGluY2x1ZGluZyBgbG9va3VwX29wZW5gLCBgYXRvbWljX29wZW5gLCBhbmQgYHZmc19ta2RpcmAuIEl0IGFsc28gdXBkYXRlcyBtdWx0aXBsZSBmaWxlc3lzdGVtcyAoOXAsIGNlcGgsIGZ1c2UsIGdmczIsIG5mcywgc21iLCB2Ym94c2YpIHRvIGhhbmRsZSB0aGUgbmV3IGZsYWcgY29tYmluYXRpb24uIFRoaXMgaXMgYSBzaWduaWZpY2FudCBmdW5jdGlvbmFsIGNoYW5nZSB0byBjb3JlIGtlcm5lbCBsb2dpYyBhbmQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCI5UF9GU1wiLFxuICAgIFwiQ0VQSF9GU1wiLFxuICAgIFwiRlVTRV9GU1wiLFxuICAgIFwiR0ZTMl9GU1wiLFxuICAgIFwiTkZTX0ZTXCIsXG4gICAgXCJDSUZTXCIsXG4gICAgXCJWQk9YU0ZfRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJsb29rdXBfb3BlblwiLFxuICAgIFwiYXRvbWljX29wZW5cIixcbiAgICBcIm1heV9vX2NyZWF0ZVwiLFxuICAgIFwiYnVpbGRfb3Blbl9mbGFnc1wiLFxuICAgIFwiZG9fb3BlblwiLFxuICAgIFwiZGVudHJ5X2NyZWF0ZVwiLFxuICAgIFwidmZzX21rZGlyXCIsXG4gICAgXCJ2ZnNfY3JlYXRlXCIsXG4gICAgXCJvcGVuX2xhc3RfbG9va3Vwc1wiLFxuICAgIFwibG9va3VwX2Zhc3RfZm9yX29wZW5cIixcbiAgICBcIm1heV9jcmVhdGVfaW5fc3RpY2t5XCIsXG4gICAgXCJmaWxlbmFtZV9jcmVhdGVcIixcbiAgICBcImZpbGVuYW1lX3VubGlua2F0XCIsXG4gICAgXCJmaWxlbmFtZV9yZW5hbWVhdDJcIixcbiAgICBcInY5ZnNfdmZzX2F0b21pY19vcGVuXCIsXG4gICAgXCJ2OWZzX3Zmc19hdG9taWNfb3Blbl9kb3RsXCIsXG4gICAgXCJjZXBoX2F0b21pY19vcGVuXCIsXG4gICAgXCJmdXNlX2F0b21pY19vcGVuXCIsXG4gICAgXCJnZnMyX2F0b21pY19vcGVuXCIsXG4gICAgXCJuZnNfYXRvbWljX29wZW5cIixcbiAgICBcIm5mc19hdG9taWNfb3Blbl92MjNcIixcbiAgICBcImNpZnNfYXRvbWljX29wZW5cIixcbiAgICBcInZib3hzZl9kaXJfYXRvbWljX29wZW5cIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIHN1cHBvcnQgZm9yIGNyZWF0aW5nIGRpcmVjdG9yaWVzIHZpYSBgb3BlbmF0KC4uLiwgT19DUkVBVCB8IE9fRElSRUNUT1JZLCAuLi4pYC4gSXQgbW9kaWZpZXMgY29yZSBWRlMgcGF0aCByZXNvbHV0aW9uIGFuZCBmaWxlIGNyZWF0aW9uIGxvZ2ljIGluIGBmcy9uYW1laS5jYCBhbmQgYGZzL29wZW4uY2AsIGluY2x1ZGluZyBgbG9va3VwX29wZW5gLCBgYXRvbWljX29wZW5gLCBhbmQgYHZmc19ta2RpcmAuIEl0IGFsc28gdXBkYXRlcyBtdWx0aXBsZSBmaWxlc3lzdGVtcyAoOXAsIGNlcGgsIGZ1c2UsIGdmczIsIG5mcywgc21iLCB2Ym94c2YpIHRvIGhhbmRsZSB0aGUgbmV3IGZsYWcgY29tYmluYXRpb24uIFRoaXMgaXMgYSBzaWduaWZpY2FudCBmdW5jdGlvbmFsIGNoYW5nZSB0byBjb3JlIGtlcm5lbCBsb2dpYyBhbmQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowlpsg6[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-04 16:45:52 +0000 UTC FinishedAt: 2026-07-04 17:02:22 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "1e9cdc2ea15adf4a821eefedabf6c0c8cf0b6a55", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "9P_FS", "CEPH_FS", "FUSE_FS", "GFS2_FS", "NFS_FS", "CIFS", "VBOXSF_FS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "1e9cdc2ea15adf4a821eefedabf6c0c8cf0b6a55", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "9P_FS", "CEPH_FS", "FUSE_FS", "GFS2_FS", "NFS_FS", "CIFS", "VBOXSF_FS" ], "series_id": "f875c425-a781-4aca-87db-05b72114e84b" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "lookup_open", "atomic_open", "may_o_create", "build_open_flags", "do_open", "dentry_create", "vfs_mkdir", "vfs_create", "open_last_lookups", "lookup_fast_for_open", "may_create_in_sticky", "filename_create", "filename_unlinkat", "filename_renameat2", "v9fs_vfs_atomic_open", "v9fs_vfs_atomic_open_dotl", "ceph_atomic_open", "fuse_atomic_open", "gfs2_atomic_open", "nfs_atomic_open", "nfs_atomic_open_v23", "cifs_atomic_open", "vboxsf_dir_atomic_open" ], "corpus_urls": [ "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+CgkJCTx0ZD4yMDI2LzA3LzA0IDE2OjU5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0OzlQX0ZTJiMzNDssCiAgICAmIzM0O0NFUEhfRlMmIzM0OywKICAgICYjMzQ7RlVTRV9GUyYjMzQ7LAogICAgJiMzNDtHRlMyX0ZTJiMzNDssCiAgICAmIzM0O05GU19GUyYjMzQ7LAogICAgJiMzNDtDSUZTJiMzNDssCiAgICAmIzM0O1ZCT1hTRl9GUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2xvb2t1cF9vcGVuJiMzNDssCiAgICAmIzM0O2F0b21pY19vcGVuJiMzNDssCiAgICAmIzM0O21heV9vX2NyZWF0ZSYjMzQ7LAogICAgJiMzNDtidWlsZF9vcGVuX2ZsYWdzJiMzNDssCiAgICAmIzM0O2RvX29wZW4mIzM0OywKICAgICYjMzQ7ZGVudHJ5X2NyZWF0ZSYjMzQ7LAogICAgJiMzNDt2ZnNfbWtkaXImIzM0OywKICAgICYjMzQ7dmZzX2NyZWF0ZSYjMzQ7LAogICAgJiMzNDtvcGVuX2xhc3RfbG9va3VwcyYjMzQ7LAogICAgJiMzNDtsb29rdXBfZmFzdF9mb3Jfb3BlbiYjMzQ7LAogICAgJiMzNDttYXlfY3JlYXRlX2luX3N0aWNreSYjMzQ7LAogICAgJiMzNDtmaWxlbmFtZV9jcmVhdGUmIzM0OywKICAgICYjMzQ7ZmlsZW5hbWVfdW5saW5rYXQmIzM0OywKICAgICYjMzQ7ZmlsZW5hbWVfcmVuYW1lYXQyJiMzNDssCiAgICAmIzM0O3Y5ZnNfdmZzX2F0b21pY19vcGVuJiMzNDssCiAgICAmIzM0O3Y5ZnNfdmZzX2F0b21pY19vcGVuX2RvdGwmIzM0OywKICAgICYjMzQ7Y2VwaF9hdG9taWNfb3BlbiYjMzQ7LAogICAgJiMzNDtmdXNlX2F0b21pY19vcGVuJiMzNDssCiAgICAmIzM0O2dmczJfYXRvbWljX29wZW4mIzM0OywKICAgICYjMzQ7bmZzX2F0b21pY19vcGVuJiMzNDssCiAgICAmIzM0O25mc19hdG9taWNfb3Blbl92MjMmIzM0OywKICAgICYjMzQ7Y2lmc19hdG9taWNfb3BlbiYjMzQ7LAogICAgJiMzNDt2Ym94c2ZfZGlyX2F0b21pY19vcGVuJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgc3VwcG9ydCBmb3IgY3JlYXRpbmcgZGlyZWN0b3JpZXMgdmlhIGBvcGVuYXQoLi4uLCBPX0NSRUFUIHwgT19ESVJFQ1RPUlksIC4uLilgLiBJdCBtb2RpZmllcyBjb3JlIFZGUyBwYXRoIHJlc29sdXRpb24gYW5kIGZpbGUgY3JlYXRpb24gbG9naWMgaW4gYGZzL25hbWVpLmNgIGFuZCBgZnMvb3Blbi5jYCwgaW5jbHVkaW5nIGBsb29rdXBfb3BlbmAsIGBhdG9taWNfb3BlbmAsIGFuZCBgdmZzX21rZGlyYC4gSXQgYWxzbyB1cGRhdGVzIG11bHRpcGxlIGZpbGVzeXN0ZW1zICg5cCwgY2VwaCwgZnVzZSwgZ2ZzMiwgbmZzLCBzbWIsIHZib3hzZikgdG8gaGFuZGxlIHRoZSBuZXcgZmxhZyBjb21iaW5hdGlvbi4gVGhpcyBpcyBhIHNpZ25pZmljYW50IGZ1bmN0aW9uYWwgY2hhbmdlIHRvIGNvcmUga2VybmVsIGxvZ2ljIGFuZCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA0IDE2OjU5PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgOTc5NDkwNzdkNGVkNzY3ZTJjZDRjZDZmYWZiNDU4YmVhNWZjNDg1OFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTYXQgSnVsIDQgMTY6NTk6NDggMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZnMvOXAvdmZzX2lub2RlLmMgYi9mcy85cC92ZnNfaW5vZGUuY1xuaW5kZXggNTc4M2QwMzM2Zjk2YWMuLmJiNTU1ZTViYTI2MTUwIDEwMDY0NFxuLS0tIGEvZnMvOXAvdmZzX2lub2RlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzLzlwL3Zmc19pbm9kZS5jXG5AQCAtNzc3LDYgJiM0Mzs3NzcsOSBAQCB2OWZzX3Zmc19hdG9taWNfb3BlbihzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxuIFx0c3RydWN0IGlub2RlICppbm9kZTtcbiBcdGludCBwOV9vbW9kZTtcbiBcbiYjNDM7XHRpZiAoT19JU19NS0RJUihmbGFncykpXG4mIzQzO1x0XHRmbGFncyBcdTAwMjY9IH5PX0NSRUFUO1xuJiM0MztcbiBcdGlmIChkX2luX2xvb2t1cChkZW50cnkpKSB7XG4gXHRcdHN0cnVjdCBkZW50cnkgKnJlcyA9IHY5ZnNfdmZzX2xvb2t1cChkaXIsIGRlbnRyeSwgMCk7XG4gXHRcdGlmIChyZXMgfHwgZF9yZWFsbHlfaXNfcG9zaXRpdmUoZGVudHJ5KSlcbmRpZmYgLS1naXQgYS9mcy85cC92ZnNfaW5vZGVfZG90bC5jIGIvZnMvOXAvdmZzX2lub2RlX2RvdGwuY1xuaW5kZXggZjczOTZkMjBjYjZjZGMuLmZmM2ZhY2I0MjBjMjI0IDEwMDY0NFxuLS0tIGEvZnMvOXAvdmZzX2lub2RlX2RvdGwuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvOXAvdmZzX2lub2RlX2RvdGwuY1xuQEAgLTIzOSw2ICYjNDM7MjM5LDkgQEAgdjlmc192ZnNfYXRvbWljX29wZW5fZG90bChzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxuIFx0c3RydWN0IHY5ZnNfc2Vzc2lvbl9pbmZvICp2OXNlcztcbiBcdHN0cnVjdCBwb3NpeF9hY2wgKnBhY2wgPSBOVUxMLCAqZGFjbCA9IE5VTEw7XG4gXG4mIzQzO1x0aWYgKE9fSVNfTUtESVIoZmxhZ3MpKVxuJiM0MztcdFx0ZmxhZ3MgXHUwMDI2PSB+T19DUkVBVDtcbiYjNDM7XG4gXHRpZiAoZF9pbl9sb29rdXAoZGVudHJ5KSkge1xuIFx0XHRzdHJ1Y3QgZGVudHJ5ICpyZXMgPSB2OWZzX3Zmc19sb29rdXAoZGlyLCBkZW50cnksIDApO1xuIFx0XHRpZiAocmVzIHx8IGRfcmVhbGx5X2lzX3Bvc2l0aXZlKGRlbnRyeSkpXG5kaWZmIC0tZ2l0IGEvZnMvY2VwaC9maWxlLmMgYi9mcy9jZXBoL2ZpbGUuY1xuaW5kZXggNzExNjFmMmIyMTUxMzYuLmU3OWFiZGJkOWY2MWU5IDEwMDY0NFxuLS0tIGEvZnMvY2VwaC9maWxlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2NlcGgvZmlsZS5jXG5AQCAtODExLDYgJiM0Mzs4MTEsOSBAQCBpbnQgY2VwaF9hdG9taWNfb3BlbihzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxuIFx0ICAgICAgZGlyLCBjZXBoX3Zpbm9wKGRpciksIGRlbnRyeSwgZGVudHJ5LFxuIFx0ICAgICAgZF91bmhhc2hlZChkZW50cnkpID8gXCYjMzQ7dW5oYXNoZWRcJiMzNDsgOiBcJiMzNDtoYXNoZWRcJiMzNDssIGZsYWdzLCBtb2RlKTtcbiBcbiYjNDM7XHRpZiAoT19JU19NS0RJUihmbGFncykpXG4mIzQzO1x0XHRmbGFncyBcdTAwMjY9IH5PX0NSRUFUO1xuJiM0MztcbiBcdGlmIChkZW50cnktXHUwMDNlZF9uYW1lLmxlbiBcdTAwM2UgTkFNRV9NQVgpXG4gXHRcdHJldHVybiAtRU5BTUVUT09MT05HO1xuIFxuZGlmZiAtLWdpdCBhL2ZzL2Z1c2UvZGlyLmMgYi9mcy9mdXNlL2Rpci5jXG5pbmRleCAwZTJhMTAzOWZhNDNlYS4uZTAxODY5NTY1ZDVlZTUgMTAwNjQ0XG4tLS0gYS9mcy9mdXNlL2Rpci5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9mdXNlL2Rpci5jXG5AQCAtOTM1LDYgJiM0Mzs5MzUsOSBAQCBzdGF0aWMgaW50IGZ1c2VfYXRvbWljX29wZW4oc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmVudHJ5LFxuIFx0c3RydWN0IG1udF9pZG1hcCAqaWRtYXAgPSBmaWxlX21udF9pZG1hcChmaWxlKTtcbiBcdHN0cnVjdCBmdXNlX2Nvbm4gKmZjID0gZ2V0X2Z1c2VfY29ubihkaXIpO1xuIFxuJiM0MztcdGlmIChPX0lTX01LRElSKGZsYWdzKSlcbiYjNDM7XHRcdGZsYWdzIFx1MDAyNj0gfk9fQ1JFQVQ7XG4mIzQzO1xuIFx0aWYgKGZ1c2VfaXNfYmFkKGRpcikpXG4gXHRcdHJldHVybiAtRUlPO1xuIFxuZGlmZiAtLWdpdCBhL2ZzL2dmczIvaW5vZGUuYyBiL2ZzL2dmczIvaW5vZGUuY1xuaW5kZXggOGE3Nzc5NGJiZDRhZmMuLjk4NTlhZTAzNDFhOTllIDEwMDY0NFxuLS0tIGEvZnMvZ2ZzMi9pbm9kZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9nZnMyL2lub2RlLmNcbkBAIC0xMzg3LDYgJiM0MzsxMzg3LDkgQEAgc3RhdGljIGludCBnZnMyX2F0b21pY19vcGVuKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXG4ge1xuIFx0Ym9vbCBleGNsID0gISEoZmxhZ3MgXHUwMDI2IE9fRVhDTCk7XG4gXG4mIzQzO1x0aWYgKE9fSVNfTUtESVIoZmxhZ3MpKVxuJiM0MztcdFx0ZmxhZ3MgXHUwMDI2PSB+T19DUkVBVDtcbiYjNDM7XG4gXHRpZiAoZF9pbl9sb29rdXAoZGVudHJ5KSkge1xuIFx0XHRzdHJ1Y3QgZGVudHJ5ICpkID0gX19nZnMyX2xvb2t1cChkaXIsIGRlbnRyeSwgZmlsZSk7XG4gXHRcdGlmIChmaWxlLVx1MDAzZWZfbW9kZSBcdTAwMjYgRk1PREVfT1BFTkVEKSB7XG5kaWZmIC0tZ2l0IGEvZnMvbmFtZWkuYyBiL2ZzL25hbWVpLmNcbmluZGV4IDE5Y2U0M2M5YTZlNjYyLi4wMzBjYWM0ZmJlNTU1ZSAxMDA2NDRcbi0tLSBhL2ZzL25hbWVpLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL25hbWVpLmNcbkBAIC0xMzgyLDEzICYjNDM7MTM4MiwxMiBAQCBpbnQgbWF5X2xpbmthdChzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgY29uc3Qgc3RydWN0IHBhdGggKmxpbmspXG4gXG4gLyoqXG4gICogbWF5X2NyZWF0ZV9pbl9zdGlja3kgLSBDaGVjayB3aGV0aGVyIGFuIE9fQ1JFQVQgb3BlbiBpbiBhIHN0aWNreSBkaXJlY3Rvcnlcbi0gKlx0XHRcdCAgc2hvdWxkIGJlIGFsbG93ZWQsIG9yIG5vdCwgb24gZmlsZXMgdGhhdCBhbHJlYWR5XG4tICpcdFx0XHQgIGV4aXN0LlxuJiM0MzsgKlx0XHRcdCAgc2hvdWxkIGJlIGFsbG93ZWQsIG9yIG5vdFxuICAqIEBpZG1hcDogaWRtYXAgb2YgdGhlIG1vdW50IHRoZSBpbm9kZSB3YXMgZm91bmQgZnJvbVxuICAqIEBuZDogbmFtZWlkYXRhIHBhdGh3YWxrIGRhdGFcbiAgKiBAaW5vZGU6IHRoZSBpbm9kZSBvZiB0aGUgZmlsZSB0byBvcGVuXG4gICpcbi0gKiBCbG9jayBhbiBPX0NSRUFUIG9wZW4gb2YgYSBGSUZPIChvciBhIHJlZ3VsYXIgZmlsZSkgd2hlbjpcbiYjNDM7ICogQmxvY2sgYW4gT19DUkVBVCBvcGVuIG9mIGEgRklGTyAob3IgYSByZWd1bGFyIGZpbGUvZGlyZWN0b3J5KSB3aGVuOlxuICAqICAgLSBzeXNjdGxfcHJvdGVjdGVkX2ZpZm9zIChvciBzeXNjdGxfcHJvdGVjdGVkX3JlZ3VsYXIpIGlzIGVuYWJsZWRcbiAgKiAgIC0gdGhlIGZpbGUgYWxyZWFkeSBleGlzdHNcbiAgKiAgIC0gd2UgYXJlIGluIGEgc3RpY2t5IGRpcmVjdG9yeVxuQEAgLTE0MTYsNiAmIzQzOzE0MTUsMTQgQEAgc3RhdGljIGludCBtYXlfY3JlYXRlX2luX3N0aWNreShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IG5hbWVpZGF0YSAqbmQsXG4gXHRpZiAobGlrZWx5KCEoZGlyX21vZGUgXHUwMDI2IFNfSVNWVFgpKSlcbiBcdFx0cmV0dXJuIDA7XG4gXG4mIzQzO1x0LypcbiYjNDM7XHQgKiBUaGVyZSBpcyBubyBzZXBhcmF0ZSBzeXNjdGwgZm9yIGRpcmVjdG9yeSBjcmVhdGlvbiBpbiBzdGlja3lcbiYjNDM7XHQgKiBmb2xkZXJzLiBUaGVyZWZvcmUsIGZvciB0aGUgU19JU0RJUiBjYXNlLCBkaXNhYmxpbmdcbiYjNDM7XHQgKiBzeXNjdGxfcHJvdGVjdGVkX3JlZ3VsYXIgaXMgbm90IGVub3VnaCB0byBhbGxvdyBjcmVhdGluZyBhXG4mIzQzO1x0ICogZGlyZWN0b3J5IGluIGEgc3RpY2t5IGZvbGRlciwgYmVjYXVzZSB0aGF0IG1heSBzdXJwcmlzZSB1c2Vyc1xuJiM0MztcdCAqIG5vdCBleHBlY3RpbmcgdGhhdCBPX0NSRUFUfE9fRElSRUNUT1JZIGlzIHBvc3NpYmxlIG9uIG5ld2VyXG4mIzQzO1x0ICoga2VybmVscy5cbiYjNDM7XHQgKi9cbiBcdGlmIChTX0lTUkVHKGlub2RlLVx1MDAzZWlfbW9kZSkgXHUwMDI2XHUwMDI2ICFzeXNjdGxfcHJvdGVjdGVkX3JlZ3VsYXIpXG4gXHRcdHJldHVybiAwO1xuIFxuQEAgLTE0NDcsNiAmIzQzOzE0NTQsMTIgQEAgc3RhdGljIGludCBtYXlfY3JlYXRlX2luX3N0aWNreShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IG5hbWVpZGF0YSAqbmQsXG4gXHRcdFx0XHRcdCAgICAgIFwmIzM0O3N0aWNreV9jcmVhdGVfcmVndWxhclwmIzM0Oyk7XG4gXHRcdFx0cmV0dXJuIC1FQUNDRVM7XG4gXHRcdH1cbiYjNDM7XG4mIzQzO1x0XHRpZiAoU19JU0RJUihpbm9kZS1cdTAwM2VpX21vZGUpKSB7XG4mIzQzO1x0XHRcdGF1ZGl0X2xvZ19wYXRoX2RlbmllZChBVURJVF9BTk9NX0NSRUFULFxuJiM0MztcdFx0XHRcdFx0ICAgICAgXCYjMzQ7c3RpY2t5X2NyZWF0ZV9kaXJcJiMzNDspO1xuJiM0MztcdFx0XHRyZXR1cm4gLUVBQ0NFUztcbiYjNDM7XHRcdH1cbiBcdH1cbiBcbiBcdHJldHVybiAwO1xuQEAgLTI3ODEsOSAmIzQzOzI3OTQsMTQgQEAgc3RhdGljIGNvbnN0IGNoYXIgKnBhdGhfaW5pdChzdHJ1Y3QgbmFtZWlkYXRhICpuZCwgdW5zaWduZWQgZmxhZ3MpXG4gXHRyZXR1cm4gcztcbiB9XG4gXG4mIzQzO3N0YXRpYyBpbmxpbmUgYm9vbCB0cmFpbGluZ19zbGFzaGVzKGNvbnN0IHN0cnVjdCBxc3RyIGxhc3QpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gKGJvb2wpbGFzdC5uYW1lW2xhc3QubGVuXTtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgaW5saW5lIGNvbnN0IGNoYXIgKmxvb2t1cF9sYXN0KHN0cnVjdCBuYW1laWRhdGEgKm5kKVxuIHtcbi1cdGlmIChuZC1cdTAwM2VsYXN0X3R5cGUgPT0gTEFTVF9OT1JNIFx1MDAyNlx1MDAyNiBuZC1cdTAwM2VsYXN0Lm5hbWVbbmQtXHUwMDNlbGFzdC5sZW5dKVxuJiM0MztcdGlmIChuZC1cdTAwM2VsYXN0X3R5cGUgPT0gTEFTVF9OT1JNIFx1MDAyNlx1MDAyNiB0cmFpbGluZ19zbGFzaGVzKG5kLVx1MDAzZWxhc3QpKVxuIFx0XHRuZC1cdTAwM2VmbGFncyB8PSBMT09LVVBfRk9MTE9XIHwgTE9PS1VQX0RJUkVDVE9SWTtcbiBcbiBcdHJldHVybiB3YWxrX2NvbXBvbmVudChuZCwgV0FMS19UUkFJTElORyk7XG5AQCAtNDE2NCw2ICYjNDM7NDE4MiwyNCBAQCBzdGF0aWMgaW5saW5lIHVtb2RlX3QgdmZzX3ByZXBhcmVfbW9kZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcbiBcdHJldHVybiBtb2RlO1xuIH1cbiBcbiYjNDM7c3RhdGljIGlubGluZVxuJiM0MztpbnQgdmZzX2NyZWF0ZV9ub19wZXJtKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXG4mIzQzO1x0XHQgICAgICAgdW1vZGVfdCBtb2RlLCBzdHJ1Y3QgZGVsZWdhdGVkX2lub2RlICpkaSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBpbm9kZSAqZGlyID0gZF9pbm9kZShkZW50cnktXHUwMDNlZF9wYXJlbnQpO1xuJiM0MztcdGludCBlcnJvcjtcbiYjNDM7XG4mIzQzO1x0ZXJyb3IgPSB0cnlfYnJlYWtfZGVsZWcoZGlyLCBMRUFTRV9CUkVBS19ESVJfQ1JFQVRFLCBkaSk7XG4mIzQzO1x0aWYgKGVycm9yKVxuJiM0MztcdFx0cmV0dXJuIGVycm9yO1xuJiM0MztcbiYjNDM7XHRlcnJvciA9IGRpci1cdTAwM2VpX29wLVx1MDAzZWNyZWF0ZShpZG1hcCwgZGlyLCBkZW50cnksIG1vZGUsIHRydWUpO1xuJiM0MztcdGlmICghZXJyb3IpXG4mIzQzO1x0XHRmc25vdGlmeV9jcmVhdGUoZGlyLCBkZW50cnkpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gZXJyb3I7XG4mIzQzO31cbiYjNDM7XG4gLyoqXG4gICogdmZzX2NyZWF0ZSAtIGNyZWF0ZSBuZXcgZmlsZVxuICAqIEBpZG1hcDpcdGlkbWFwIG9mIHRoZSBtb3VudCB0aGUgaW5vZGUgd2FzIGZvdW5kIGZyb21cbkBAIC00MTk2LDEzICYjNDM7NDIzMiw4IEBAIGludCB2ZnNfY3JlYXRlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSxcbiBcdGVycm9yID0gc2VjdXJpdHlfaW5vZGVfY3JlYXRlKGRpciwgZGVudHJ5LCBtb2RlKTtcbiBcdGlmIChlcnJvcilcbiBcdFx0cmV0dXJuIGVycm9yO1xuLVx0ZXJyb3IgPSB0cnlfYnJlYWtfZGVsZWcoZGlyLCBMRUFTRV9CUkVBS19ESVJfQ1JFQVRFLCBkaSk7XG4tXHRpZiAoZXJyb3IpXG4tXHRcdHJldHVybiBlcnJvcjtcbi1cdGVycm9yID0gZGlyLVx1MDAzZWlfb3AtXHUwMDNlY3JlYXRlKGlkbWFwLCBkaXIsIGRlbnRyeSwgbW9kZSwgdHJ1ZSk7XG4tXHRpZiAoIWVycm9yKVxuLVx0XHRmc25vdGlmeV9jcmVhdGUoZGlyLCBkZW50cnkpO1xuLVx0cmV0dXJuIGVycm9yO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gdmZzX2NyZWF0ZV9ub19wZXJtKGlkbWFwLCBkZW50cnksIG1vZGUsIGRpKTtcbiB9XG4gRVhQT1JUX1NZTUJPTCh2ZnNfY3JlYXRlKTtcbiBcbkBAIC00MzE5LDczICYjNDM7NDM1MCwxMjIgQEAgc3RhdGljIGlubGluZSBpbnQgb3Blbl90b19uYW1laV9mbGFncyhpbnQgZmxhZylcbiBcbiBzdGF0aWMgaW50IG1heV9vX2NyZWF0ZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcbiBcdFx0XHRjb25zdCBzdHJ1Y3QgcGF0aCAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXG4tXHRcdFx0dW1vZGVfdCBtb2RlKVxuJiM0MztcdFx0XHR1bW9kZV90IG1vZGUsIGJvb2wgY3JlYXRlX2RpcilcbiB7XG4tXHRpbnQgZXJyb3IgPSBzZWN1cml0eV9wYXRoX21rbm9kKGRpciwgZGVudHJ5LCBtb2RlLCAwKTtcbiYjNDM7XHRzdHJ1Y3QgaW5vZGUgKmRpcl9pbm9kZSA9IGRpci1cdTAwM2VkZW50cnktXHUwMDNlZF9pbm9kZTtcbiYjNDM7XHRpbnQgZXJyb3I7XG4mIzQzO1xuJiM0MztcdGlmIChjcmVhdGVfZGlyKVxuJiM0MztcdFx0ZXJyb3IgPSBzZWN1cml0eV9wYXRoX21rZGlyKGRpciwgZGVudHJ5LCBtb2RlKTtcbiYjNDM7XHRlbHNlXG4mIzQzO1x0XHRlcnJvciA9IHNlY3VyaXR5X3BhdGhfbWtub2QoZGlyLCBkZW50cnksIG1vZGUsIDApO1xuIFx0aWYgKGVycm9yKVxuIFx0XHRyZXR1cm4gZXJyb3I7XG4gXG4gXHRpZiAoIWZzdWlkZ2lkX2hhc19tYXBwaW5nKGRpci1cdTAwM2VkZW50cnktXHUwMDNlZF9zYiwgaWRtYXApKVxuIFx0XHRyZXR1cm4gLUVPVkVSRkxPVztcbiBcbi1cdGVycm9yID0gaW5vZGVfcGVybWlzc2lvbihpZG1hcCwgZGlyLVx1MDAzZWRlbnRyeS1cdTAwM2VkX2lub2RlLFxuLVx0XHRcdFx0IE1BWV9XUklURSB8IE1BWV9FWEVDKTtcbiYjNDM7XHRlcnJvciA9IGlub2RlX3Blcm1pc3Npb24oaWRtYXAsIGRpcl9pbm9kZSwgTUFZX1dSSVRFIHwgTUFZX0VYRUMpO1xuIFx0aWYgKGVycm9yKVxuIFx0XHRyZXR1cm4gZXJyb3I7XG4gXG4tXHRyZXR1cm4gc2VjdXJpdHlfaW5vZGVfY3JlYXRlKGRpci1cdTAwM2VkZW50cnktXHUwMDNlZF9pbm9kZSwgZGVudHJ5LCBtb2RlKTtcbiYjNDM7XHRpZiAoY3JlYXRlX2RpcilcbiYjNDM7XHRcdGVycm9yID0gc2VjdXJpdHlfaW5vZGVfbWtkaXIoZGlyX2lub2RlLCBkZW50cnksIG1vZGUpO1xuJiM0MztcdGVsc2VcbiYjNDM7XHRcdGVycm9yID0gc2VjdXJpdHlfaW5vZGVfY3JlYXRlKGRpcl9pbm9kZSwgZGVudHJ5LCBtb2RlKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGVycm9yO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW5saW5lIHVtb2RlX3Qgb19jcmVhdGVfbW9kZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcbiYjNDM7XHRcdGNvbnN0IHN0cnVjdCBpbm9kZSAqZGlyLCB1bW9kZV90IG1vZGUsIGJvb2wgY3JlYXRlX2RpcilcbiYjNDM7e1xuJiM0MztcdGlmIChjcmVhdGVfZGlyKVxuJiM0MztcdFx0cmV0dXJuIHZmc19wcmVwYXJlX21vZGUoaWRtYXAsIGRpciwgbW9kZSwgU19JUldYVUdPIHwgU19JU1ZUWCwgMCk7XG4mIzQzO1x0ZWxzZVxuJiM0MztcdFx0cmV0dXJuIHZmc19wcmVwYXJlX21vZGUoaWRtYXAsIGRpciwgbW9kZSwgU19JQUxMVUdPLCBTX0lGUkVHKTtcbiB9XG4gXG4gLypcbi0gKiBBdHRlbXB0IHRvIGF0b21pY2FsbHkgbG9vayB1cCwgY3JlYXRlIGFuZCBvcGVuIGEgZmlsZSBmcm9tIGEgbmVnYXRpdmVcbi0gKiBkZW50cnkuXG4tICpcbi0gKiBSZXR1cm5zIDAgaWYgc3VjY2Vzc2Z1bC4gIFRoZSBmaWxlIHdpbGwgaGF2ZSBiZWVuIGNyZWF0ZWQgYW5kIGF0dGFjaGVkIHRvXG4tICogQGZpbGUgYnkgdGhlIGZpbGVzeXN0ZW0gY2FsbGluZyBmaW5pc2hfb3BlbigpLlxuLSAqXG4tICogSWYgdGhlIGZpbGUgd2FzIGxvb2tlZCB1cCBvbmx5IG9yIGRpZG4mIzM5O3QgbmVlZCBjcmVhdGluZywgRk1PREVfT1BFTkVEIHdvbiYjMzk7dFxuLSAqIGJlIHNldC4gIFRoZSBjYWxsZXIgd2lsbCBuZWVkIHRvIHBlcmZvcm0gdGhlIG9wZW4gdGhlbXNlbHZlcy4gIEBwYXRoIHdpbGxcbi0gKiBoYXZlIGJlZW4gdXBkYXRlZCB0byBwb2ludCB0byB0aGUgbmV3IGRlbnRyeS4gIFRoaXMgbWF5IGJlIG5lZ2F0aXZlLlxuLSAqXG4tICogUmV0dXJucyBhbiBlcnJvciBjb2RlIG90aGVyd2lzZS5cbiYjNDM7ICogYXRvbWljX29wZW4oKSAtIGF0dGVtcHQgdG8gYXRvbWljYWxseSBsb29rIHVwLCBjcmVhdGUgYW5kIG9wZW4gYSBmaWxlXG4mIzQzOyAqIGZyb20gYSBuZWdhdGl2ZSBkZW50cnkuXG4mIzQzOyAqIEBwYXRoOiAgICAgICAgICBwYXJlbnQgZGlyZWN0b3J5IHBhdGhcbiYjNDM7ICogQGRlbnRyeTogICAgICAgIGNoaWxkIHRvIC1cdTAwM2VhdG9taWNfb3BlbigpXG4mIzQzOyAqIEBvcGVuX2ZsYWc6ICAgICBvcGVuIGZsYWdzXG4mIzQzOyAqIEBtb2RlOiAgICAgICAgICBjcmVhdGUgbW9kZVxuJiM0MzsgKiBAY3JlYXRlX2Vycm9yOiAgcmV0dXJuIHZhbHVlIGZyb20gbWF5X29fY3JlYXRlKClcbiYjNDM7ICpcbiYjNDM7ICogSWYgRk1PREVfT1BFTkVEIGlzIHNldCwgdGhlIGZpbGUgd2lsbCBoYXZlIGJlZW4gYXR0YWNoZWQgdG8gQGZpbGUgYnkgdGhlXG4mIzQzOyAqIGZpbGVzeXN0ZW0gY2FsbGluZyBmaW5pc2hfb3BlbigpLiBJZiBGTU9ERV9PUEVORUQgaXNuJiMzOTt0IHNldCwgdGhlXG4mIzQzOyAqIGZpbGVzeXN0ZW0gaW5zdGVhZCBjYWxsZWQgZmluaXNoX25vX29wZW4oKSBhbmQgdGhlIGNhbGxlciB3aWxsIG5lZWQgdG9cbiYjNDM7ICogcGVyZm9ybSB0aGUgb3BlbiB0aGVtc2VsdmVzLlxuJiM0MzsgKlxuJiM0MzsgKiBGTU9ERV9DUkVBVEVEIGlzIHNldCB3aGVuIHRoZSBjYWxsIHRvIC1cdTAwM2VhdG9taWNfb3BlbigpIGFjdHVhbGx5IGNyZWF0ZWRcbiYjNDM7ICogdGhlIGZpbGUuXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybnMgdGhlIG9wZW5lZC9sb29rZWQtdXAgZGVudHJ5IG9uIHN1Y2Nlc3Mgb3IgRVJSX1BUUigtRSkgb24gZmFpbHVyZS5cbiYjNDM7ICogT24gZXJyb3IsIGF0b21pY19vcGVuKCkgY29uc3VtZXMgQGRlbnRyeS5cbiAgKi9cbiBzdGF0aWMgc3RydWN0IGRlbnRyeSAqYXRvbWljX29wZW4oY29uc3Qgc3RydWN0IHBhdGggKnBhdGgsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcbiBcdFx0XHRcdCAgc3RydWN0IGZpbGUgKmZpbGUsXG4tXHRcdFx0XHQgIGludCBvcGVuX2ZsYWcsIHVtb2RlX3QgbW9kZSlcbiYjNDM7XHRcdFx0XHQgIGludCBvcGVuX2ZsYWcsIHVtb2RlX3QgbW9kZSwgYm9vbCBjcmVhdGVfZXJyb3IpXG4ge1xuIFx0c3RydWN0IGRlbnRyeSAqY29uc3QgREVOVFJZX05PVF9TRVQgPSAodm9pZCAqKSAtMVVMO1xuIFx0c3RydWN0IGlub2RlICpkaXIgPSAgcGF0aC1cdTAwM2VkZW50cnktXHUwMDNlZF9pbm9kZTtcbiYjNDM7XHRib29sIGZhaWxlZF9jcmVhdGUgPSBmYWxzZTtcbiBcdGludCBlcnJvcjtcbiBcbiBcdGZpbGUtXHUwMDNlX19mX3BhdGguZGVudHJ5ID0gREVOVFJZX05PVF9TRVQ7XG4gXHRmaWxlLVx1MDAzZV9fZl9wYXRoLm1udCA9IHBhdGgtXHUwMDNlbW50O1xuJiM0MztcbiBcdGVycm9yID0gZGlyLVx1MDAzZWlfb3AtXHUwMDNlYXRvbWljX29wZW4oZGlyLCBkZW50cnksIGZpbGUsXG4gXHRcdFx0XHQgICAgICAgb3Blbl90b19uYW1laV9mbGFncyhvcGVuX2ZsYWcpLCBtb2RlKTtcbiBcdGRfbG9va3VwX2RvbmUoZGVudHJ5KTtcbiBcdGlmICghZXJyb3IpIHtcbiBcdFx0aWYgKGZpbGUtXHUwMDNlZl9tb2RlIFx1MDAyNiBGTU9ERV9PUEVORUQpIHtcbi1cdFx0XHRpZiAodW5saWtlbHkoZGVudHJ5ICE9IGZpbGUtXHUwMDNlZl9wYXRoLmRlbnRyeSkpIHtcbiYjNDM7XHRcdFx0Ly8gZmluaXNoX29wZW4oKSBjYWxsZWRcbiYjNDM7XHRcdFx0c3RydWN0IGRlbnRyeSAqb3BlbmVkID0gZmlsZS1cdTAwM2VmX3BhdGguZGVudHJ5O1xuJiM0MztcdFx0XHRpZiAodW5saWtlbHkob3BlbmVkICE9IGRlbnRyeSkpIHtcbiBcdFx0XHRcdGRwdXQoZGVudHJ5KTtcbi1cdFx0XHRcdGRlbnRyeSA9IGRnZXQoZmlsZS1cdTAwM2VmX3BhdGguZGVudHJ5KTtcbiYjNDM7XHRcdFx0XHRkZW50cnkgPSBkZ2V0KG9wZW5lZCk7XG4gXHRcdFx0fVxuLVx0XHR9IGVsc2UgaWYgKFdBUk5fT04oZmlsZS1cdTAwM2VmX3BhdGguZGVudHJ5ID09IERFTlRSWV9OT1RfU0VUKSkge1xuLVx0XHRcdGVycm9yID0gLUVJTztcbi1cdFx0fSBlbHNlIHtcbi1cdFx0XHRpZiAoZmlsZS1cdTAwM2VmX3BhdGguZGVudHJ5KSB7XG4mIzQzO1x0XHR9IGVsc2UgaWYgKGxpa2VseShmaWxlLVx1MDAzZWZfcGF0aC5kZW50cnkgIT0gREVOVFJZX05PVF9TRVQpKSB7XG4mIzQzO1x0XHRcdC8vIGZpbmlzaF9ub19vcGVuKCkgY2FsbGVkXG4mIzQzO1x0XHRcdHN0cnVjdCBkZW50cnkgKnJlcGxhY2VkID0gZmlsZS1cdTAwM2VmX3BhdGguZGVudHJ5O1xuJiM0MztcdFx0XHRpZiAocmVwbGFjZWQpIHtcbiBcdFx0XHRcdGRwdXQoZGVudHJ5KTtcbi1cdFx0XHRcdGRlbnRyeSA9IGZpbGUtXHUwMDNlZl9wYXRoLmRlbnRyeTtcbiYjNDM7XHRcdFx0XHRkZW50cnkgPSByZXBsYWNlZDtcbiBcdFx0XHR9XG4gXHRcdFx0aWYgKHVubGlrZWx5KGRfaXNfbmVnYXRpdmUoZGVudHJ5KSkpXG4gXHRcdFx0XHRlcnJvciA9IC1FTk9FTlQ7XG4mIzQzO1x0XHRcdGlmIChlcnJvciBcdTAwMjZcdTAwMjYgY3JlYXRlX2Vycm9yKSAvLyBzaG91bGQgaGF2ZSBjcmVhdGVkLCBidXQgZXJyb3JlZCBiZWZvcmVcbiYjNDM7XHRcdFx0XHRmYWlsZWRfY3JlYXRlID0gdHJ1ZTtcbiYjNDM7XHRcdH0gZWxzZSB7XG4mIzQzO1x0XHRcdGNvbnN0IGNoYXIgKmZzbmFtZSA9IGRlbnRyeS1cdTAwM2VkX3NiLVx1MDAzZXNfdHlwZS1cdTAwM2VuYW1lO1xuJiM0MztcdFx0XHRXQVJOKDEsIFwmIzM0OyVzOiAtXHUwMDNlYXRvbWljX29wZW4oKSBsZWZ0IGZpbGUtXHUwMDNlZl9wYXRoLmRlbnRyeSB1bnNldCFcXG5cJiMzNDssIGZzbmFtZSk7XG4mIzQzO1x0XHRcdGVycm9yID0gLUVJTztcbiBcdFx0fVxuIFx0fVxuJiM0MztcbiBcdGlmIChlcnJvcikge1xuJiM0MztcdFx0aWYgKGZhaWxlZF9jcmVhdGUpXG4mIzQzO1x0XHRcdGF1ZGl0X2lub2RlX2NoaWxkKGRpciwgZGVudHJ5LCBBVURJVF9UWVBFX0NISUxEX0NSRUFURSk7XG4gXHRcdGRwdXQoZGVudHJ5KTtcbiBcdFx0ZGVudHJ5ID0gRVJSX1BUUihlcnJvcik7XG4mIzQzO1x0fSBlbHNlIHtcbiYjNDM7XHRcdGlmIChmaWxlLVx1MDAzZWZfbW9kZSBcdTAwMjYgRk1PREVfQ1JFQVRFRClcbiYjNDM7XHRcdFx0ZnNub3RpZnlfY3JlYXRlKGRpciwgZGVudHJ5KTtcbiYjNDM7XHRcdGlmIChmaWxlLVx1MDAzZWZfbW9kZSBcdTAwMjYgRk1PREVfT1BFTkVEKVxuJiM0MztcdFx0XHRmc25vdGlmeV9vcGVuKGZpbGUpO1xuIFx0fVxuJiM0MztcbiBcdHJldHVybiBkZW50cnk7XG4gfVxuIFxuJiM0MztzdGF0aWMgaW5saW5lXG4mIzQzO3N0cnVjdCBkZW50cnkgKnZmc19ta2Rpcl9ub19wZXJtKHN0cnVjdCBtbnRfaWRtYXAgKiwgc3RydWN0IGlub2RlICosXG4mIzQzO1x0XHRcdFx0IHN0cnVjdCBkZW50cnkgKiwgdW1vZGVfdCxcbiYjNDM7XHRcdFx0XHQgc3RydWN0IGRlbGVnYXRlZF9pbm9kZSAqKTtcbiAvKlxuICAqIExvb2sgdXAgYW5kIG1heWJlIGNyZWF0ZSBhbmQgb3BlbiB0aGUgbGFzdCBjb21wb25lbnQuXG4gICpcbkBAIC00NDEyLDYgJiM0Mzs0NDkyLDcgQEAgc3RhdGljIHN0cnVjdCBkZW50cnkgKmxvb2t1cF9vcGVuKHN0cnVjdCBuYW1laWRhdGEgKm5kLCBzdHJ1Y3QgZmlsZSAqZmlsZSxcbiBcdHN0cnVjdCBkZW50cnkgKmRlbnRyeTtcbiBcdGludCBlcnJvciwgY3JlYXRlX2Vycm9yID0gMDtcbiBcdHVtb2RlX3QgbW9kZSA9IG9wLVx1MDAzZW1vZGU7XG4mIzQzO1x0Ym9vbCBjcmVhdGVfZGlyID0gT19JU19NS0RJUihvcGVuX2ZsYWcpO1xuIFxuIFx0aWYgKHVubGlrZWx5KElTX0RFQURESVIoZGlyX2lub2RlKSkpXG4gXHRcdHJldHVybiBFUlJfUFRSKC1FTk9FTlQpO1xuQEAgLTQ0MzcsNyAmIzQzOzQ1MTgsNyBAQCBzdGF0aWMgc3RydWN0IGRlbnRyeSAqbG9va3VwX29wZW4oc3RydWN0IG5hbWVpZGF0YSAqbmQsIHN0cnVjdCBmaWxlICpmaWxlLFxuIFx0XHRkZW50cnkgPSBOVUxMO1xuIFx0fVxuIFx0aWYgKGRlbnRyeS1cdTAwM2VkX2lub2RlKSB7XG4tXHRcdC8qIENhY2hlZCBwb3NpdGl2ZSBkZW50cnk6IHdpbGwgb3BlbiBpbiBmX29wLVx1MDAzZW9wZW4gKi9cbiYjNDM7XHRcdC8qIENhY2hlZCBwb3NpdGl2ZSBkZW50cnk6IHdpbGwgb3BlbiBpbiBkb19vcGVuKCkuICovXG4gXHRcdHJldHVybiBkZW50cnk7XG4gXHR9XG4gXG5AQCAtNDQ1OSwxOSAmIzQzOzQ1NDAsMjQgQEAgc3RhdGljIHN0cnVjdCBkZW50cnkgKmxvb2t1cF9vcGVuKHN0cnVjdCBuYW1laWRhdGEgKm5kLCBzdHJ1Y3QgZmlsZSAqZmlsZSxcbiBcdGlmIChvcGVuX2ZsYWcgXHUwMDI2IE9fQ1JFQVQpIHtcbiBcdFx0aWYgKG9wZW5fZmxhZyBcdTAwMjYgT19FWENMKVxuIFx0XHRcdG9wZW5fZmxhZyBcdTAwMjY9IH5PX1RSVU5DO1xuLVx0XHRtb2RlID0gdmZzX3ByZXBhcmVfbW9kZShpZG1hcCwgZGlyLVx1MDAzZWRfaW5vZGUsIG1vZGUsIG1vZGUsIG1vZGUpO1xuJiM0MztcdFx0bW9kZSA9IG9fY3JlYXRlX21vZGUoaWRtYXAsIGRpcl9pbm9kZSwgbW9kZSwgY3JlYXRlX2Rpcik7XG4gXHRcdGlmIChsaWtlbHkoZ290X3dyaXRlKSlcbiBcdFx0XHRjcmVhdGVfZXJyb3IgPSBtYXlfb19jcmVhdGUoaWRtYXAsIFx1MDAyNm5kLVx1MDAzZXBhdGgsXG4tXHRcdFx0XHRcdFx0ICAgIGRlbnRyeSwgbW9kZSk7XG4mIzQzO1x0XHRcdFx0XHRcdCAgICBkZW50cnksIG1vZGUsIGNyZWF0ZV9kaXIpO1xuIFx0XHRlbHNlXG4gXHRcdFx0Y3JlYXRlX2Vycm9yID0gLUVST0ZTO1xuJiM0MztcdFx0LyogUmVmdXNlIHRvIGNyZWF0ZSBhIGRpcmVjdG9yeSB0aHJvdWdoIGEgZGFuZ2xpbmcgKHRyYWlsaW5nKVxuJiM0MztcdFx0ICogc3ltbGluay4gRm9yIHJlZ3VsYXIgZmlsZXMgdGhpcyBoYXMgYmVlbiBhbGxvd2VkIGhpc3RvcmljYWxseVxuJiM0MztcdFx0ICogb24gT19DUkVBVCB3aXRob3V0IE9fRVhDTC4gKi9cbiYjNDM7XHRcdGlmICh1bmxpa2VseShuZC1cdTAwM2VkZXB0aCkgXHUwMDI2XHUwMDI2IGNyZWF0ZV9kaXIgXHUwMDI2XHUwMDI2ICFjcmVhdGVfZXJyb3IpXG4mIzQzO1x0XHRcdGNyZWF0ZV9lcnJvciA9IC1FRVhJU1Q7XG4gXHR9XG4gXHRpZiAoY3JlYXRlX2Vycm9yKVxuIFx0XHRvcGVuX2ZsYWcgXHUwMDI2PSB+T19DUkVBVDtcbiBcdGlmIChkaXJfaW5vZGUtXHUwMDNlaV9vcC1cdTAwM2VhdG9taWNfb3Blbikge1xuIFx0XHRpZiAobmQtXHUwMDNlZmxhZ3MgXHUwMDI2IExPT0tVUF9ESVJFQ1RPUlkpXG4gXHRcdFx0b3Blbl9mbGFnIHw9IE9fRElSRUNUT1JZO1xuLVx0XHRkZW50cnkgPSBhdG9taWNfb3BlbihcdTAwMjZuZC1cdTAwM2VwYXRoLCBkZW50cnksIGZpbGUsIG9wZW5fZmxhZywgbW9kZSk7XG4mIzQzO1x0XHRkZW50cnkgPSBhdG9taWNfb3BlbihcdTAwMjZuZC1cdTAwM2VwYXRoLCBkZW50cnksIGZpbGUsIG9wZW5fZmxhZywgbW9kZSwgY3JlYXRlX2Vycm9yKTtcbiBcdFx0aWYgKHVubGlrZWx5KGNyZWF0ZV9lcnJvcikgXHUwMDI2XHUwMDI2IGRlbnRyeSA9PSBFUlJfUFRSKC1FTk9FTlQpKVxuIFx0XHRcdGRlbnRyeSA9IEVSUl9QVFIoY3JlYXRlX2Vycm9yKTtcbiBcdFx0cmV0dXJuIGRlbnRyeTtcbkBAIC00NDkwLDMwICYjNDM7NDU3Niw0NCBAQCBzdGF0aWMgc3RydWN0IGRlbnRyeSAqbG9va3VwX29wZW4oc3RydWN0IG5hbWVpZGF0YSAqbmQsIHN0cnVjdCBmaWxlICpmaWxlLFxuIFx0XHRcdGRlbnRyeSA9IHJlcztcbiBcdFx0fVxuIFx0fVxuJiM0MztcdGlmIChkZW50cnktXHUwMDNlZF9pbm9kZSB8fCAhKG9wLVx1MDAzZW9wZW5fZmxhZyBcdTAwMjYgT19DUkVBVCkpIHtcbiYjNDM7XHRcdC8qIE5vIG5lZWQgdG8gY3JlYXRlIGEgZmlsZS4gSWYgbG9va3VwIHJldHVybmVkIGEgcG9zaXRpdmVcbiYjNDM7XHRcdCAqIGRlbnRyeSwgdGhlIGZpbGUgd2lsbCBiZSBvcGVuZWQgaW4gZG9fb3BlbigpLiAqL1xuJiM0MztcdFx0cmV0dXJuIGRlbnRyeTtcbiYjNDM7XHR9XG4gXG4tXHQvKiBOZWdhdGl2ZSBkZW50cnksIGp1c3QgY3JlYXRlIHRoZSBmaWxlICovXG4tXHRpZiAoIWRlbnRyeS1cdTAwM2VkX2lub2RlIFx1MDAyNlx1MDAyNiAob3Blbl9mbGFnIFx1MDAyNiBPX0NSRUFUKSkge1xuLVx0XHQvKiBidXQgYnJlYWsgdGhlIGRpcmVjdG9yeSBsZWFzZSBmaXJzdCEgKi9cbi1cdFx0ZXJyb3IgPSB0cnlfYnJlYWtfZGVsZWcoZGlyX2lub2RlLCBMRUFTRV9CUkVBS19ESVJfQ1JFQVRFLCBkZWxlZ2F0ZWRfaW5vZGUpO1xuLVx0XHRpZiAoZXJyb3IpXG4tXHRcdFx0Z290byBvdXRfZHB1dDtcbi1cbi1cdFx0ZmlsZS1cdTAwM2VmX21vZGUgfD0gRk1PREVfQ1JFQVRFRDtcbi1cdFx0YXVkaXRfaW5vZGVfY2hpbGQoZGlyX2lub2RlLCBkZW50cnksIEFVRElUX1RZUEVfQ0hJTERfQ1JFQVRFKTtcbi1cdFx0aWYgKCFkaXJfaW5vZGUtXHUwMDNlaV9vcC1cdTAwM2VjcmVhdGUpIHtcbi1cdFx0XHRlcnJvciA9IC1FQUNDRVM7XG4tXHRcdFx0Z290byBvdXRfZHB1dDtcbi1cdFx0fVxuJiM0MztcdC8qIE5lZ2F0aXZlIGRlbnRyeSB3aXRoIE9fQ1JFQVQgZmxhZyBzZXQgKi9cbiYjNDM7XHRhdWRpdF9pbm9kZV9jaGlsZChkaXItXHUwMDNlZF9pbm9kZSwgZGVudHJ5LCBBVURJVF9UWVBFX0NISUxEX0NSRUFURSk7XG4gXG4tXHRcdGVycm9yID0gZGlyX2lub2RlLVx1MDAzZWlfb3AtXHUwMDNlY3JlYXRlKGlkbWFwLCBkaXJfaW5vZGUsIGRlbnRyeSxcbi1cdFx0XHRcdFx0XHRtb2RlLCBvcGVuX2ZsYWcgXHUwMDI2IE9fRVhDTCk7XG4tXHRcdGlmIChlcnJvcilcbi1cdFx0XHRnb3RvIG91dF9kcHV0O1xuLVx0fVxuLVx0aWYgKHVubGlrZWx5KGNyZWF0ZV9lcnJvcikgXHUwMDI2XHUwMDI2ICFkZW50cnktXHUwMDNlZF9pbm9kZSkge1xuJiM0MztcdGlmICh1bmxpa2VseShjcmVhdGVfZXJyb3IpKSB7XG4mIzQzO1x0XHQvKiBTaG91bGQgaGF2ZSBkb25lIGEgY3JlYXRlLCBidXQgd2UgYWxyZWFkeSBlcnJvcmVkICovXG4gXHRcdGVycm9yID0gY3JlYXRlX2Vycm9yO1xuIFx0XHRnb3RvIG91dF9kcHV0O1xuIFx0fVxuJiM0MztcbiYjNDM7XHRpZiAoKGNyZWF0ZV9kaXIgXHUwMDI2XHUwMDI2ICFkaXJfaW5vZGUtXHUwMDNlaV9vcC1cdTAwM2Vta2RpcilcbiYjNDM7XHQgICAgfHwgKCFjcmVhdGVfZGlyIFx1MDAyNlx1MDAyNiAhZGlyX2lub2RlLVx1MDAzZWlfb3AtXHUwMDNlY3JlYXRlKSkge1xuJiM0MztcdFx0ZXJyb3IgPSAtRUFDQ0VTO1xuJiM0MztcdFx0Z290byBvdXRfZHB1dDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmIChjcmVhdGVfZGlyKSB7XG4mIzQzO1x0XHRzdHJ1Y3QgZGVudHJ5ICpyZXMgPSB2ZnNfbWtkaXJfbm9fcGVybShpZG1hcCwgZGlyX2lub2RlLCBkZW50cnksXG4mIzQzO1x0XHRcdFx0XHRcdCAgICAgICBtb2RlLCBkZWxlZ2F0ZWRfaW5vZGUpO1xuJiM0MztcdFx0aWYgKElTX0VSUihyZXMpKSB7XG4mIzQzO1x0XHRcdGVycm9yID0gUFRSX0VSUihyZXMpO1xuJiM0MztcdFx0fSBlbHNlIHtcbiYjNDM7XHRcdFx0ZXJyb3IgPSAwO1xuJiM0MztcdFx0XHRkZW50cnkgPSByZXM7XG4mIzQzO1x0XHR9XG4mIzQzO1x0fSBlbHNlIHtcbiYjNDM7XHRcdGVycm9yID0gdmZzX2NyZWF0ZV9ub19wZXJtKGlkbWFwLCBkZW50cnksIG1vZGUsIGRlbGVnYXRlZF9pbm9kZSk7XG4mIzQzO1x0fVxuJiM0MztcdGlmIChlcnJvcilcbiYjNDM7XHRcdGdvdG8gb3V0X2RwdXQ7XG4mIzQzO1xuJiM0MztcdGZpbGUtXHUwMDNlZl9tb2RlIHw9IEZNT0RFX0NSRUFURUQ7XG4mIzQzO1xuIFx0cmV0dXJuIGRlbnRyeTtcbiBcbiBvdXRfZHB1dDpcbkBAIC00NTIxLDE3ICYjNDM7NDYyMSwxMiBAQCBzdGF0aWMgc3RydWN0IGRlbnRyeSAqbG9va3VwX29wZW4oc3RydWN0IG5hbWVpZGF0YSAqbmQsIHN0cnVjdCBmaWxlICpmaWxlLFxuIFx0cmV0dXJuIEVSUl9QVFIoZXJyb3IpO1xuIH1cbiBcbi1zdGF0aWMgaW5saW5lIGJvb2wgdHJhaWxpbmdfc2xhc2hlcyhzdHJ1Y3QgbmFtZWlkYXRhICpuZClcbi17XG4tXHRyZXR1cm4gKGJvb2wpbmQtXHUwMDNlbGFzdC5uYW1lW25kLVx1MDAzZWxhc3QubGVuXTtcbi19XG4tXG4gc3RhdGljIHN0cnVjdCBkZW50cnkgKmxvb2t1cF9mYXN0X2Zvcl9vcGVuKHN0cnVjdCBuYW1laWRhdGEgKm5kLCBpbnQgb3Blbl9mbGFnKVxuIHtcbiBcdHN0cnVjdCBkZW50cnkgKmRlbnRyeTtcbiBcbiBcdGlmIChvcGVuX2ZsYWcgXHUwMDI2IE9fQ1JFQVQpIHtcbi1cdFx0aWYgKHRyYWlsaW5nX3NsYXNoZXMobmQpKVxuJiM0MztcdFx0aWYgKHRyYWlsaW5nX3NsYXNoZXMobmQtXHUwMDNlbGFzdCkgXHUwMDI2XHUwMDI2ICEob3Blbl9mbGFnIFx1MDAyNiBPX0RJUkVDVE9SWSkpXG4gXHRcdFx0cmV0dXJuIEVSUl9QVFIoLUVJU0RJUik7XG4gXG4gXHRcdC8qIERvbiYjMzk7dCBib3RoZXIgb24gYW4gT19FWENMIGNyZWF0ZSAqL1xuQEAgLTQ1MzksNyAmIzQzOzQ2MzQsNyBAQCBzdGF0aWMgc3RydWN0IGRlbnRyeSAqbG9va3VwX2Zhc3RfZm9yX29wZW4oc3RydWN0IG5hbWVpZGF0YSAqbmQsIGludCBvcGVuX2ZsYWcpXG4gXHRcdFx0cmV0dXJuIE5VTEw7XG4gXHR9XG4gXG4tXHRpZiAodHJhaWxpbmdfc2xhc2hlcyhuZCkpXG4mIzQzO1x0aWYgKHRyYWlsaW5nX3NsYXNoZXMobmQtXHUwMDNlbGFzdCkpXG4gXHRcdG5kLVx1MDAzZWZsYWdzIHw9IExPT0tVUF9GT0xMT1cgfCBMT09LVVBfRElSRUNUT1JZO1xuIFxuIFx0ZGVudHJ5ID0gbG9va3VwX2Zhc3QobmQpO1xuQEAgLTQ2MDIsMTYgJiM0Mzs0Njk3LDEyIEBAIHN0YXRpYyBjb25zdCBjaGFyICpvcGVuX2xhc3RfbG9va3VwcyhzdHJ1Y3QgbmFtZWlkYXRhICpuZCxcbiBcdFx0ICovXG4gXHR9XG4gXHRpZiAob3Blbl9mbGFnIFx1MDAyNiBPX0NSRUFUKVxuLVx0XHRpbm9kZV9sb2NrKGRpci1cdTAwM2VkX2lub2RlKTtcbiYjNDM7XHRcdGlub2RlX2xvY2tfbmVzdGVkKGRpci1cdTAwM2VkX2lub2RlLCBJX01VVEVYX1BBUkVOVCk7XG4gXHRlbHNlXG4gXHRcdGlub2RlX2xvY2tfc2hhcmVkKGRpci1cdTAwM2VkX2lub2RlKTtcbiYjNDM7XG4gXHRkZW50cnkgPSBsb29rdXBfb3BlbihuZCwgZmlsZSwgb3AsIGdvdF93cml0ZSwgXHUwMDI2ZGVsZWdhdGVkX2lub2RlKTtcbi1cdGlmICghSVNfRVJSKGRlbnRyeSkpIHtcbi1cdFx0aWYgKGZpbGUtXHUwMDNlZl9tb2RlIFx1MDAyNiBGTU9ERV9DUkVBVEVEKVxuLVx0XHRcdGZzbm90aWZ5X2NyZWF0ZShkaXItXHUwMDNlZF9pbm9kZSwgZGVudHJ5KTtcbi1cdFx0aWYgKGZpbGUtXHUwMDNlZl9tb2RlIFx1MDAyNiBGTU9ERV9PUEVORUQpXG4tXHRcdFx0ZnNub3RpZnlfb3BlbihmaWxlKTtcbi1cdH1cbiYjNDM7XG4gXHRpZiAob3Blbl9mbGFnIFx1MDAyNiBPX0NSRUFUKVxuIFx0XHRpbm9kZV91bmxvY2soZGlyLVx1MDAzZWRfaW5vZGUpO1xuIFx0ZWxzZVxuQEAgLTQ2NjksOCAmIzQzOzQ3NjAsOSBAQCBzdGF0aWMgaW50IGRvX29wZW4oc3RydWN0IG5hbWVpZGF0YSAqbmQsXG4gXHRpZiAob3Blbl9mbGFnIFx1MDAyNiBPX0NSRUFUKSB7XG4gXHRcdGlmICgob3Blbl9mbGFnIFx1MDAyNiBPX0VYQ0wpIFx1MDAyNlx1MDAyNiAhKGZpbGUtXHUwMDNlZl9tb2RlIFx1MDAyNiBGTU9ERV9DUkVBVEVEKSlcbiBcdFx0XHRyZXR1cm4gLUVFWElTVDtcbi1cdFx0aWYgKGRfaXNfZGlyKG5kLVx1MDAzZXBhdGguZGVudHJ5KSlcbiYjNDM7XHRcdGlmICghKG9wZW5fZmxhZyBcdTAwMjYgT19ESVJFQ1RPUlkpIFx1MDAyNlx1MDAyNiBkX2lzX2RpcihuZC1cdTAwM2VwYXRoLmRlbnRyeSkpXG4gXHRcdFx0cmV0dXJuIC1FSVNESVI7XG4mIzQzO1xuIFx0XHRlcnJvciA9IG1heV9jcmVhdGVfaW5fc3RpY2t5KGlkbWFwLCBuZCxcbiBcdFx0XHRcdFx0ICAgICBkX2JhY2tpbmdfaW5vZGUobmQtXHUwMDNlcGF0aC5kZW50cnkpKTtcbiBcdFx0aWYgKHVubGlrZWx5KGVycm9yKSlcbkBAIC00OTUwLDcgJiM0Mzs1MDQyLDcgQEAgc3RhdGljIHN0cnVjdCBkZW50cnkgKmZpbGVuYW1lX2NyZWF0ZShpbnQgZGZkLCBzdHJ1Y3QgZmlsZW5hbWUgKm5hbWUsXG4gXHQgKiBEbyB0aGUgZmluYWwgbG9va3VwLiAgU3VwcHJlc3MgJiMzOTtjcmVhdGUmIzM5OyBpZiB0aGVyZSBpcyBhIHRyYWlsaW5nXG4gXHQgKiAmIzM5Oy8mIzM5OywgYW5kIGEgZGlyZWN0b3J5IHdhc24mIzM5O3QgcmVxdWVzdGVkLlxuIFx0ICovXG4tXHRpZiAobGFzdC5uYW1lW2xhc3QubGVuXSBcdTAwMjZcdTAwMjYgIXdhbnRfZGlyKVxuJiM0MztcdGlmICh0cmFpbGluZ19zbGFzaGVzKGxhc3QpIFx1MDAyNlx1MDAyNiAhd2FudF9kaXIpXG4gXHRcdGNyZWF0ZV9mbGFncyBcdTAwMjY9IH5MT09LVVBfQ1JFQVRFO1xuIFx0ZGVudHJ5ID0gc3RhcnRfZGlyb3AocGF0aC1cdTAwM2VkZW50cnksIFx1MDAyNmxhc3QsIHJldmFsX2ZsYWcgfCBjcmVhdGVfZmxhZ3MpO1xuIFx0aWYgKElTX0VSUihkZW50cnkpKVxuQEAgLTUwNDUsMTMgJiM0Mzs1MTM3LDEzIEBAIHN0cnVjdCBmaWxlICpkZW50cnlfY3JlYXRlKHN0cnVjdCBwYXRoICpwYXRoLCBpbnQgZmxhZ3MsIHVtb2RlX3QgbW9kZSxcbiBcdFx0cGF0aC1cdTAwM2VkZW50cnkgPSBkaXI7XG4gXHRcdG1vZGUgPSB2ZnNfcHJlcGFyZV9tb2RlKGlkbWFwLCBkaXJfaW5vZGUsIG1vZGUsIFNfSUFMTFVHTywgU19JRlJFRyk7XG4gXG4tXHRcdGNyZWF0ZV9lcnJvciA9IG1heV9vX2NyZWF0ZShpZG1hcCwgcGF0aCwgZGVudHJ5LCBtb2RlKTtcbiYjNDM7XHRcdGNyZWF0ZV9lcnJvciA9IG1heV9vX2NyZWF0ZShpZG1hcCwgcGF0aCwgZGVudHJ5LCBtb2RlLCAvKmNyZWF0ZV9kaXI9Ki8gZmFsc2UpO1xuIFx0XHRpZiAoY3JlYXRlX2Vycm9yKVxuIFx0XHRcdGZsYWdzIFx1MDAyNj0gfk9fQ1JFQVQ7XG4gXG4gXHRcdC8qIGF0b21pY19vcGVuIHdpbGwgZHB1dChkZW50cnkpIG9uIGVycm9yICovXG4gXHRcdGRnZXQob3JpZ19kZW50cnkpO1xuLVx0XHRkZW50cnkgPSBhdG9taWNfb3BlbihwYXRoLCBkZW50cnksIGZpbGUsIGZsYWdzLCBtb2RlKTtcbiYjNDM7XHRcdGRlbnRyeSA9IGF0b21pY19vcGVuKHBhdGgsIGRlbnRyeSwgZmlsZSwgZmxhZ3MsIG1vZGUsIGNyZWF0ZV9lcnJvcik7XG4gXHRcdGVycm9yID0gUFRSX0VSUl9PUl9aRVJPKGRlbnRyeSk7XG4gXG4gXHRcdGlmIChJU19FUlIoZGVudHJ5KSlcbkBAIC01MDY0LDEzICYjNDM7NTE1Niw2IEBAIHN0cnVjdCBmaWxlICpkZW50cnlfY3JlYXRlKHN0cnVjdCBwYXRoICpwYXRoLCBpbnQgZmxhZ3MsIHVtb2RlX3QgbW9kZSxcbiBcdFx0aWYgKHVubGlrZWx5KGNyZWF0ZV9lcnJvcikgXHUwMDI2XHUwMDI2IGVycm9yID09IC1FTk9FTlQpXG4gXHRcdFx0ZXJyb3IgPSBjcmVhdGVfZXJyb3I7XG4gXG4tXHRcdGlmICghZXJyb3IpIHtcbi1cdFx0XHRpZiAoZmlsZS1cdTAwM2VmX21vZGUgXHUwMDI2IEZNT0RFX0NSRUFURUQpXG4tXHRcdFx0XHRmc25vdGlmeV9jcmVhdGUoZGlyLVx1MDAzZWRfaW5vZGUsIGRlbnRyeSk7XG4tXHRcdFx0aWYgKGZpbGUtXHUwMDNlZl9tb2RlIFx1MDAyNiBGTU9ERV9PUEVORUQpXG4tXHRcdFx0XHRmc25vdGlmeV9vcGVuKGZpbGUpO1xuLVx0XHR9XG4tXG4gXHRcdHBhdGgtXHUwMDNlZGVudHJ5ID0gZGVudHJ5O1xuIFxuIFx0fSBlbHNlIHtcbkBAIC01MjIyLDYgJiM0Mzs1MzA3LDM5IEBAIFNZU0NBTExfREVGSU5FMyhta25vZCwgY29uc3QgY2hhciBfX3VzZXIgKiwgZmlsZW5hbWUsIHVtb2RlX3QsIG1vZGUsIHVuc2lnbmVkLCBkXG4gXHRyZXR1cm4gZmlsZW5hbWVfbWtub2RhdChBVF9GRENXRCwgbmFtZSwgbW9kZSwgZGV2KTtcbiB9XG4gXG4mIzQzO3N0YXRpYyBpbmxpbmVcbiYjNDM7c3RydWN0IGRlbnRyeSAqdmZzX21rZGlyX25vX3Blcm0oc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuJiM0MztcdFx0XHRcdCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSxcbiYjNDM7XHRcdFx0XHQgc3RydWN0IGRlbGVnYXRlZF9pbm9kZSAqZGkpXG4mIzQzO3tcbiYjNDM7XHRpbnQgZXJyb3I7XG4mIzQzO1x0c3RydWN0IGRlbnRyeSAqZGU7XG4mIzQzO1x0dW5zaWduZWQgbWF4X2xpbmtzID0gZGlyLVx1MDAzZWlfc2ItXHUwMDNlc19tYXhfbGlua3M7XG4mIzQzO1xuJiM0MztcdGVycm9yID0gLUVNTElOSztcbiYjNDM7XHRpZiAobWF4X2xpbmtzIFx1MDAyNlx1MDAyNiBkaXItXHUwMDNlaV9ubGluayBcdTAwM2U9IG1heF9saW5rcylcbiYjNDM7XHRcdGdvdG8gZXJyO1xuJiM0MztcbiYjNDM7XHRlcnJvciA9IHRyeV9icmVha19kZWxlZyhkaXIsIExFQVNFX0JSRUFLX0RJUl9DUkVBVEUsIGRpKTtcbiYjNDM7XHRpZiAoZXJyb3IpXG4mIzQzO1x0XHRnb3RvIGVycjtcbiYjNDM7XG4mIzQzO1x0ZGUgPSBkaXItXHUwMDNlaV9vcC1cdTAwM2Vta2RpcihpZG1hcCwgZGlyLCBkZW50cnksIG1vZGUpO1xuJiM0MztcdGlmIChJU19FUlIoZGUpKSB7XG4mIzQzO1x0XHRlcnJvciA9IFBUUl9FUlIoZGUpO1xuJiM0MztcdFx0Z290byBlcnI7XG4mIzQzO1x0fVxuJiM0MztcdGlmIChkZSkge1xuJiM0MztcdFx0ZHB1dChkZW50cnkpO1xuJiM0MztcdFx0ZGVudHJ5ID0gZGU7XG4mIzQzO1x0fVxuJiM0MztcdGZzbm90aWZ5X21rZGlyKGRpciwgZGVudHJ5KTtcbiYjNDM7XHRyZXR1cm4gZGVudHJ5O1xuJiM0MztcbiYjNDM7ZXJyOlxuJiM0MztcdHJldHVybiBFUlJfUFRSKGVycm9yKTtcbiYjNDM7fVxuJiM0MztcbiAvKipcbiAgKiB2ZnNfbWtkaXIgLSBjcmVhdGUgZGlyZWN0b3J5IHJldHVybmluZyBjb3JyZWN0IGRlbnRyeSBpZiBwb3NzaWJsZVxuICAqIEBpZG1hcDpcdFx0aWRtYXAgb2YgdGhlIG1vdW50IHRoZSBpbm9kZSB3YXMgZm91bmQgZnJvbVxuQEAgLTUyNDksNyAmIzQzOzUzNjcsNiBAQCBzdHJ1Y3QgZGVudHJ5ICp2ZnNfbWtkaXIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuIFx0XHRcdCBzdHJ1Y3QgZGVsZWdhdGVkX2lub2RlICpkZWxlZ2F0ZWRfaW5vZGUpXG4ge1xuIFx0aW50IGVycm9yO1xuLVx0dW5zaWduZWQgbWF4X2xpbmtzID0gZGlyLVx1MDAzZWlfc2ItXHUwMDNlc19tYXhfbGlua3M7XG4gXHRzdHJ1Y3QgZGVudHJ5ICpkZTtcbiBcbiBcdGVycm9yID0gbWF5X2NyZWF0ZV9kZW50cnkoaWRtYXAsIGRpciwgZGVudHJ5KTtcbkBAIC01MjY1LDI0ICYjNDM7NTM4MiwxMiBAQCBzdHJ1Y3QgZGVudHJ5ICp2ZnNfbWtkaXIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuIFx0aWYgKGVycm9yKVxuIFx0XHRnb3RvIGVycjtcbiBcbi1cdGVycm9yID0gLUVNTElOSztcbi1cdGlmIChtYXhfbGlua3MgXHUwMDI2XHUwMDI2IGRpci1cdTAwM2VpX25saW5rIFx1MDAzZT0gbWF4X2xpbmtzKVxuLVx0XHRnb3RvIGVycjtcbi1cbi1cdGVycm9yID0gdHJ5X2JyZWFrX2RlbGVnKGRpciwgTEVBU0VfQlJFQUtfRElSX0NSRUFURSwgZGVsZWdhdGVkX2lub2RlKTtcbi1cdGlmIChlcnJvcilcbi1cdFx0Z290byBlcnI7XG4tXG4tXHRkZSA9IGRpci1cdTAwM2VpX29wLVx1MDAzZW1rZGlyKGlkbWFwLCBkaXIsIGRlbnRyeSwgbW9kZSk7XG4tXHRlcnJvciA9IFBUUl9FUlIoZGUpO1xuLVx0aWYgKElTX0VSUihkZSkpXG4mIzQzO1x0ZGUgPSB2ZnNfbWtkaXJfbm9fcGVybShpZG1hcCwgZGlyLCBkZW50cnksIG1vZGUsIGRlbGVnYXRlZF9pbm9kZSk7XG4mIzQzO1x0aWYgKElTX0VSUihkZSkpIHtcbiYjNDM7XHRcdGVycm9yID0gUFRSX0VSUihkZSk7XG4gXHRcdGdvdG8gZXJyO1xuLVx0aWYgKGRlKSB7XG4tXHRcdGRwdXQoZGVudHJ5KTtcbi1cdFx0ZGVudHJ5ID0gZGU7XG4gXHR9XG4tXHRmc25vdGlmeV9ta2RpcihkaXIsIGRlbnRyeSk7XG4tXHRyZXR1cm4gZGVudHJ5O1xuJiM0MztcdHJldHVybiBkZTtcbiBcbiBlcnI6XG4gXHRlbmRfY3JlYXRpbmcoZGVudHJ5KTtcbkBAIC01NTY5LDcgJiM0Mzs1Njc0LDcgQEAgaW50IGZpbGVuYW1lX3VubGlua2F0KGludCBkZmQsIHN0cnVjdCBmaWxlbmFtZSAqbmFtZSlcbiBcdFx0Z290byBleGl0X2Ryb3Bfd3JpdGU7XG4gXG4gXHQvKiBXaHkgbm90IGJlZm9yZT8gQmVjYXVzZSB3ZSB3YW50IGNvcnJlY3QgZXJyb3IgdmFsdWUgKi9cbi1cdGlmICh1bmxpa2VseShsYXN0Lm5hbWVbbGFzdC5sZW5dKSkge1xuJiM0MztcdGlmICh1bmxpa2VseSh0cmFpbGluZ19zbGFzaGVzKGxhc3QpKSkge1xuIFx0XHRpZiAoZF9pc19kaXIoZGVudHJ5KSlcbiBcdFx0XHRlcnJvciA9IC1FSVNESVI7XG4gXHRcdGVsc2VcbkBAIC02MTcxLDE2ICYjNDM7NjI3NiwxNiBAQCBpbnQgZmlsZW5hbWVfcmVuYW1lYXQyKGludCBvbGRkZmQsIHN0cnVjdCBmaWxlbmFtZSAqZnJvbSxcbiBcdGlmIChmbGFncyBcdTAwMjYgUkVOQU1FX0VYQ0hBTkdFKSB7XG4gXHRcdGlmICghZF9pc19kaXIocmQubmV3X2RlbnRyeSkpIHtcbiBcdFx0XHRlcnJvciA9IC1FTk9URElSO1xuLVx0XHRcdGlmIChuZXdfbGFzdC5uYW1lW25ld19sYXN0Lmxlbl0pXG4mIzQzO1x0XHRcdGlmICh0cmFpbGluZ19zbGFzaGVzKG5ld19sYXN0KSlcbiBcdFx0XHRcdGdvdG8gZXhpdF91bmxvY2s7XG4gXHRcdH1cbiBcdH1cbiBcdC8qIHVubGVzcyB0aGUgc291cmNlIGlzIGEgZGlyZWN0b3J5IHRyYWlsaW5nIHNsYXNoZXMgZ2l2ZSAtRU5PVERJUiAqL1xuIFx0aWYgKCFkX2lzX2RpcihyZC5vbGRfZGVudHJ5KSkge1xuIFx0XHRlcnJvciA9IC1FTk9URElSO1xuLVx0XHRpZiAob2xkX2xhc3QubmFtZVtvbGRfbGFzdC5sZW5dKVxuJiM0MztcdFx0aWYgKHRyYWlsaW5nX3NsYXNoZXMob2xkX2xhc3QpKVxuIFx0XHRcdGdvdG8gZXhpdF91bmxvY2s7XG4tXHRcdGlmICghKGZsYWdzIFx1MDAyNiBSRU5BTUVfRVhDSEFOR0UpIFx1MDAyNlx1MDAyNiBuZXdfbGFzdC5uYW1lW25ld19sYXN0Lmxlbl0pXG4mIzQzO1x0XHRpZiAoIShmbGFncyBcdTAwMjYgUkVOQU1FX0VYQ0hBTkdFKSBcdTAwMjZcdTAwMjYgdHJhaWxpbmdfc2xhc2hlcyhuZXdfbGFzdCkpXG4gXHRcdFx0Z290byBleGl0X3VubG9jaztcbiBcdH1cbiBcbmRpZmYgLS1naXQgYS9mcy9uZnMvZGlyLmMgYi9mcy9uZnMvZGlyLmNcbmluZGV4IGM3YjcyM2MxODYyMGM5Li5jODE1ZDlhYTliNjlkYSAxMDA2NDRcbi0tLSBhL2ZzL25mcy9kaXIuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvbmZzL2Rpci5jXG5AQCAtMjEyMSw2ICYjNDM7MjEyMSw5IEBAIGludCBuZnNfYXRvbWljX29wZW4oc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcbiBcdGRmcHJpbnRrKFZGUywgXCYjMzQ7TkZTOiBhdG9taWNfb3Blbiglcy8lbGx1KSwgJXBkXFxuXCYjMzQ7LFxuIFx0XHRcdGRpci1cdTAwM2VpX3NiLVx1MDAzZXNfaWQsIGRpci1cdTAwM2VpX2lubywgZGVudHJ5KTtcbiBcbiYjNDM7XHRpZiAoT19JU19NS0RJUihvcGVuX2ZsYWdzKSlcbiYjNDM7XHRcdG9wZW5fZmxhZ3MgXHUwMDI2PSB+T19DUkVBVDtcbiYjNDM7XG4gXHRlcnIgPSBuZnNfY2hlY2tfZmxhZ3Mob3Blbl9mbGFncyk7XG4gXHRpZiAoZXJyKVxuIFx0XHRyZXR1cm4gZXJyO1xuQEAgLTIzMTMsNiAmIzQzOzIzMTYsOSBAQCBpbnQgbmZzX2F0b21pY19vcGVuX3YyMyhzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxuIFx0ICovXG4gXHRpbnQgZXJyb3IgPSAwO1xuIFxuJiM0MztcdGlmIChPX0lTX01LRElSKG9wZW5fZmxhZ3MpKVxuJiM0MztcdFx0b3Blbl9mbGFncyBcdTAwMjY9IH5PX0NSRUFUO1xuJiM0MztcbiBcdGlmIChkZW50cnktXHUwMDNlZF9uYW1lLmxlbiBcdTAwM2UgTkZTX1NFUlZFUihkaXIpLVx1MDAzZW5hbWVsZW4pXG4gXHRcdHJldHVybiAtRU5BTUVUT09MT05HO1xuIFxuZGlmZiAtLWdpdCBhL2ZzL29wZW4uYyBiL2ZzL29wZW4uY1xuaW5kZXggNDA4OTI1ZDdiZDBiNzcuLjg3ZTg4NjRkOTQ4MDg3IDEwMDY0NFxuLS0tIGEvZnMvb3Blbi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9vcGVuLmNcbkBAIC0xMTkwLDI5ICYjNDM7MTE5MCwzMCBAQCBpbmxpbmUgaW50IGJ1aWxkX29wZW5fZmxhZ3MoY29uc3Qgc3RydWN0IG9wZW5faG93ICpob3csIHN0cnVjdCBvcGVuX2ZsYWdzICpvcClcbiBcdGlmIChXSUxMX0NSRUFURShmbGFncykpIHtcbiBcdFx0aWYgKGhvdy1cdTAwM2Vtb2RlIFx1MDAyNiB+U19JQUxMVUdPKVxuIFx0XHRcdHJldHVybiAtRUlOVkFMO1xuLVx0XHRvcC1cdTAwM2Vtb2RlID0gaG93LVx1MDAzZW1vZGUgfCBTX0lGUkVHO1xuJiM0MztcdFx0aWYgKE9fSVNfTUtESVIoZmxhZ3MpKVxuJiM0MztcdFx0XHRvcC1cdTAwM2Vtb2RlID0gaG93LVx1MDAzZW1vZGUgfCBTX0lGRElSO1xuJiM0MztcdFx0ZWxzZVxuJiM0MztcdFx0XHRvcC1cdTAwM2Vtb2RlID0gaG93LVx1MDAzZW1vZGUgfCBTX0lGUkVHO1xuIFx0fSBlbHNlIHtcbiBcdFx0aWYgKGhvdy1cdTAwM2Vtb2RlICE9IDApXG4gXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHRcdG9wLVx1MDAzZW1vZGUgPSAwO1xuIFx0fVxuIFxuLVx0Lypcbi1cdCAqIEJsb2NrIGJ1Z3Mgd2hlcmUgT19ESVJFQ1RPUlkgfCBPX0NSRUFUIGNyZWF0ZWQgcmVndWxhciBmaWxlcy5cbi1cdCAqIE5vdGUsIHRoYXQgYmxvY2tpbmcgT19ESVJFQ1RPUlkgfCBPX0NSRUFUIGhlcmUgYWxzbyBwcm90ZWN0c1xuLVx0ICogT19UTVBGSUxFIGJlbG93IHdoaWNoIHJlcXVpcmVzIE9fRElSRUNUT1JZIGJlaW5nIHJhaXNlZC5cbi1cdCAqL1xuLVx0aWYgKChmbGFncyBcdTAwMjYgKE9fRElSRUNUT1JZIHwgT19DUkVBVCkpID09IChPX0RJUkVDVE9SWSB8IE9fQ1JFQVQpKVxuLVx0XHRyZXR1cm4gLUVJTlZBTDtcbi1cbiBcdC8qIE5vdyBoYW5kbGUgdGhlIGNyZWF0aXZlIGltcGxlbWVudGF0aW9uIG9mIE9fVE1QRklMRS4gKi9cbiBcdGlmIChmbGFncyBcdTAwMjYgX19PX1RNUEZJTEUpIHtcbiBcdFx0LypcbiBcdFx0ICogSW4gb3JkZXIgdG8gZW5zdXJlIHByb2dyYW1zIGdldCBleHBsaWNpdCBlcnJvcnMgd2hlbiB0cnlpbmdcbiBcdFx0ICogdG8gdXNlIE9fVE1QRklMRSBvbiBvbGQga2VybmVscyB3ZSBlbmZvcmNlIHRoYXQgT19ESVJFQ1RPUllcbi1cdFx0ICogaXMgcmFpc2VkIGFsb25nc2lkZSBfX09fVE1QRklMRS5cbiYjNDM7XHRcdCAqIGlzIHJhaXNlZCBhbG9uZ3NpZGUgX19PX1RNUEZJTEUsIGJ1dCB3aXRob3V0IE9fQ1JFQVQuIFRoZVxuJiM0MztcdFx0ICogcmVhc29uIGZvciBkaXNhbGxvd2luZyBPX0NSRUFUfE9fVE1QRklMRSBpcyB0aGF0XG4mIzQzO1x0XHQgKiBPX0RJUkVDVE9SWXxPX0NSRUFUIHVzZWQgdG8gd29yayBhbmQgY3JlYXRlZCBhIHJlZ3VsYXIgZmlsZVxuJiM0MztcdFx0ICogaWYgbm90aGluZyBleGlzdGVkIGF0IHRoZSBvcGVuIHBhdGguIEhlbmNlLCBhbGxvd2luZyB0aGVcbiYjNDM7XHRcdCAqIGNvbWJpbmF0aW9uIHdvdWxkIGhhdmUgY2F1c2VkIE9fQ1JFQVR8T19UTVBGSUxFIHRvIGNyZWF0ZSBhXG4mIzQzO1x0XHQgKiByZWd1bGFyIChub24tdGVtcG9yYXJ5KSBmaWxlIG9uIG9sZCBrZXJuZWxzLCB3aGlsZSB0aGUgY2FsbGVyXG4mIzQzO1x0XHQgKiB3b3VsZCBiZWxpZXZlIHRoZXkgY3JlYXRlZCBhbiBhY3R1YWwgT19UTVBGSUxFLlxuIFx0XHQgKi9cbi1cdFx0aWYgKCEoZmxhZ3MgXHUwMDI2IE9fRElSRUNUT1JZKSlcbiYjNDM7XHRcdGlmICghKGZsYWdzIFx1MDAyNiBPX0RJUkVDVE9SWSkgfHwgKGZsYWdzIFx1MDAyNiBPX0NSRUFUKSlcbiBcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdFx0aWYgKCEoYWNjX21vZGUgXHUwMDI2IE1BWV9XUklURSkpXG4gXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG5AQCAtMTI2OSw2ICYjNDM7MTI3MCwxNSBAQCBpbmxpbmUgaW50IGJ1aWxkX29wZW5fZmxhZ3MoY29uc3Qgc3RydWN0IG9wZW5faG93ICpob3csIHN0cnVjdCBvcGVuX2ZsYWdzICpvcClcbiBcbiBcdG9wLVx1MDAzZWludGVudCA9IGZsYWdzIFx1MDAyNiBPX1BBVEggPyAwIDogTE9PS1VQX09QRU47XG4gXG4mIzQzO1x0LypcbiYjNDM7XHQgKiBSZXF1ZXN0aW5nIHdyaXRlIGFjY2VzcyBvbiBhIGRpcmVjdG9yeSBjYW4gbmV2ZXIgc3VjY2VlZC4gUmF0aGVyXG4mIzQzO1x0ICogdGhhbiBwZXJmb3JtaW5nIGEgcGF0aC13YWxrIHRvIGRldGVybWluZSB3aGV0aGVyIHRoZSB0YXJnZXQgaXNcbiYjNDM7XHQgKiBhY3R1YWxseSBhIGRpcmVjdG9yeSAoLUVJU0RJUikgb3Igbm90ICgtRU5PVERJUiksIHdlIHNob3J0LWNpcmN1aXRcbiYjNDM7XHQgKiB0byAtRU5PVERJUi5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAoKGZsYWdzIFx1MDAyNiBPX0RJUkVDVE9SWSkgXHUwMDI2XHUwMDI2ICEoZmxhZ3MgXHUwMDI2IF9fT19UTVBGSUxFKSBcdTAwMjZcdTAwMjYgKGFjY19tb2RlIFx1MDAyNiBNQVlfV1JJVEUpKVxuJiM0MztcdFx0cmV0dXJuIC1FTk9URElSO1xuJiM0MztcbiBcdGlmIChmbGFncyBcdTAwMjYgT19DUkVBVCkge1xuIFx0XHRvcC1cdTAwM2VpbnRlbnQgfD0gTE9PS1VQX0NSRUFURTtcbiBcdFx0aWYgKGZsYWdzIFx1MDAyNiBPX0VYQ0wpIHtcbmRpZmYgLS1naXQgYS9mcy9zbWIvY2xpZW50L2Rpci5jIGIvZnMvc21iL2NsaWVudC9kaXIuY1xuaW5kZXggODhhNGExNzg3ZmYwNDcuLjc1YmY4NmNjMDYxMjJlIDEwMDY0NFxuLS0tIGEvZnMvc21iL2NsaWVudC9kaXIuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvc21iL2NsaWVudC9kaXIuY1xuQEAgLTUzOCw2ICYjNDM7NTM4LDkgQEAgaW50IGNpZnNfYXRvbWljX29wZW4oc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRpcmVudHJ5LFxuIFx0aWYgKHVubGlrZWx5KGNpZnNfZm9yY2VkX3NodXRkb3duKGNpZnNfc2IpKSlcbiBcdFx0cmV0dXJuIHNtYl9FSU8oc21iX2Vpb190cmFjZV9mb3JjZWRfc2h1dGRvd24pO1xuIFxuJiM0MztcdGlmIChPX0lTX01LRElSKG9mbGFncykpXG4mIzQzO1x0XHRvZmxhZ3MgXHUwMDI2PSB+T19DUkVBVDtcbiYjNDM7XG4gXHQvKlxuIFx0ICogUG9zaXggb3BlbiBpcyBvbmx5IGNhbGxlZCAoYXQgbG9va3VwIHRpbWUpIGZvciBmaWxlIGNyZWF0ZSBub3cuIEZvclxuIFx0ICogb3BlbnMgKHJhdGhlciB0aGFuIGNyZWF0ZXMpLCBiZWNhdXNlIHdlIGRvIG5vdCBrbm93IGlmIGl0IGlzIGEgZmlsZVxuZGlmZiAtLWdpdCBhL2ZzL3Zib3hzZi9kaXIuYyBiL2ZzL3Zib3hzZi9kaXIuY1xuaW5kZXggYzViZDMyNzFhYTk2MTYuLjc3YWUyZjY5NmZkNDM3IDEwMDY0NFxuLS0tIGEvZnMvdmJveHNmL2Rpci5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy92Ym94c2YvZGlyLmNcbkBAIC0zMTgsNiAmIzQzOzMxOCw5IEBAIHN0YXRpYyBpbnQgdmJveHNmX2Rpcl9hdG9taWNfb3BlbihzdHJ1Y3QgaW5vZGUgKnBhcmVudCwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxuIFx0dTY0IGhhbmRsZTtcbiBcdGludCBlcnI7XG4gXG4mIzQzO1x0aWYgKE9fSVNfTUtESVIoZmxhZ3MpKVxuJiM0MztcdFx0ZmxhZ3MgXHUwMDI2PSB+T19DUkVBVDtcbiYjNDM7XG4gXHRpZiAoZF9pbl9sb29rdXAoZGVudHJ5KSkge1xuIFx0XHRzdHJ1Y3QgZGVudHJ5ICpyZXMgPSB2Ym94c2ZfZGlyX2xvb2t1cChwYXJlbnQsIGRlbnRyeSwgMCk7XG4gXHRcdGlmIChyZXMgfHwgZF9yZWFsbHlfaXNfcG9zaXRpdmUoZGVudHJ5KSlcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2ZjbnRsLmggYi9pbmNsdWRlL2xpbnV4L2ZjbnRsLmhcbmluZGV4IDZhZDZiOWU3YTIyNmFmLi42Yjc1Mjc3YmU1NTlkZCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvZmNudGwuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9mY250bC5oXG5AQCAtMzAsNiAmIzQzOzMwLDEyIEBAXG4gICovXG4gI2RlZmluZSBfX09fUkVHVUxBUlx0XHQoMSBcdTAwM2NcdTAwM2MgMzApXG4gXG4mIzQzOyNkZWZpbmUgT19NS0RJUl9NQVNLXHQoT19DUkVBVCB8IE9fRElSRUNUT1JZKVxuJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgT19JU19NS0RJUih1bnNpZ25lZCBmbGFncylcbiYjNDM7e1xuJiM0MztcdHJldHVybiAoZmxhZ3MgXHUwMDI2IE9fTUtESVJfTUFTSykgPT0gT19NS0RJUl9NQVNLO1xuJiM0Mzt9XG4mIzQzO1xuIC8qIExpc3Qgb2YgYWxsIHZhbGlkIGZsYWdzIGZvciB0aGUgaG93LVx1MDAzZXJlc29sdmUgYXJndW1lbnQ6ICovXG4gI2RlZmluZSBWQUxJRF9SRVNPTFZFX0ZMQUdTIFxcXG4gXHQoUkVTT0xWRV9OT19YREVWIHwgUkVTT0xWRV9OT19NQUdJQ0xJTktTIHwgUkVTT0xWRV9OT19TWU1MSU5LUyB8IFxcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZmlsZXN5c3RlbXMvLmdpdGlnbm9yZSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2ZpbGVzeXN0ZW1zLy5naXRpZ25vcmVcbmluZGV4IGE3OGY4OTQxNTdkZTMzLi5kNzc5YTc5NDVjZjgwMyAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2ZpbGVzeXN0ZW1zLy5naXRpZ25vcmVcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2ZpbGVzeXN0ZW1zLy5naXRpZ25vcmVcbkBAIC0xLDQgJiM0MzsxLDUgQEBcbiAjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiYjNDM7b3Blbl9vX2NyZWF0X29fZGlyXG4gZG5vdGlmeV90ZXN0XG4gZGV2cHRzX3B0c1xuIGZjbG9nXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZmlsZXN5c3RlbXMvTWFrZWZpbGUgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9maWxlc3lzdGVtcy9NYWtlZmlsZVxuaW5kZXggYTdlYzJiYTJkZDgzMzQuLmI2MDk1MGY4YjE1YzIxIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZmlsZXN5c3RlbXMvTWFrZWZpbGVcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2ZpbGVzeXN0ZW1zL01ha2VmaWxlXG5AQCAtMSw3ICYjNDM7MSw3IEBAXG4gIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuIFxuIENGTEFHUyAmIzQzOz0gJChLSERSX0lOQ0xVREVTKVxuLVRFU1RfR0VOX1BST0dTIDo9IGRldnB0c19wdHMgZmlsZV9zdHJlc3NvciBhbm9uX2lub2RlX3Rlc3Qga2VybmZzX3Rlc3QgZmNsb2dcbiYjNDM7VEVTVF9HRU5fUFJPR1MgOj0gb3Blbl9vX2NyZWF0X29fZGlyIGRldnB0c19wdHMgZmlsZV9zdHJlc3NvciBhbm9uX2lub2RlX3Rlc3Qga2VybmZzX3Rlc3QgZmNsb2dcbiBURVNUX0dFTl9QUk9HUyAmIzQzOz0gaWRtYXBwZWRfdG1wZmlsZVxuIFRFU1RfR0VOX1BST0dTX0VYVEVOREVEIDo9IGRub3RpZnlfdGVzdFxuIFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2ZpbGVzeXN0ZW1zL2ZjbG9nLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9maWxlc3lzdGVtcy9mY2xvZy5jXG5pbmRleCA1NTFjNGEwZjM5NWExMi4uNTkzYTUxMzZlOTkxOTIgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9maWxlc3lzdGVtcy9mY2xvZy5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9maWxlc3lzdGVtcy9mY2xvZy5jXG5AQCAtNiwxMCAmIzQzOzYsOCBAQFxuIFxuICNpbmNsdWRlIFx1MDAzY2Fzc2VydC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjZXJybm8uaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NmY250bC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjc2NoZWQuaFx1MDAzZVxuLSNpbmNsdWRlIFx1MDAzY3N0ZGlvLmhcdTAwM2Vcbi0jaW5jbHVkZSBcdTAwM2NzdGRsaWIuaFx1MDAzZVxuLSNpbmNsdWRlIFx1MDAzY3N0cmluZy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjdW5pc3RkLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NzeXMvbW91bnQuaFx1MDAzZVxuIFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2ZpbGVzeXN0ZW1zL29wZW5fb19jcmVhdF9vX2Rpci5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZmlsZXN5c3RlbXMvb3Blbl9vX2NyZWF0X29fZGlyLmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uZGYzY2RiYWUyYzg1MjRcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2ZpbGVzeXN0ZW1zL29wZW5fb19jcmVhdF9vX2Rpci5jXG5AQCAtMCwwICYjNDM7MSwxOTcgQEBcbiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiYjNDM7I2luY2x1ZGUgXHUwMDNjc3lzL3N0YXQuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NzeXMvc3lzY2FsbC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2Vycm5vLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGltaXRzLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjZmNudGwuaFx1MDAzZVxuJiM0MztcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7a3NlbGZ0ZXN0X2hhcm5lc3MuaFwmIzM0O1xuJiM0MztcbiYjNDM7c3RhdGljIGlubGluZSBpbnQgb3Blbl9vX2NyZWF0X29fZGlyKGludCBkZmQsIGNvbnN0IGNoYXIgKnBhdGhuYW1lLFxuJiM0MztcdFx0XHRcdCAgICAgbW9kZV90IG1vZGUsIHVuc2lnbmVkIGludCBmbGFncylcbiYjNDM7e1xuJiM0MztcdHJldHVybiBzeXNjYWxsKF9fTlJfb3BlbmF0LCBkZmQsIHBhdGhuYW1lLFxuJiM0MztcdFx0ICAgICAgIGZsYWdzIHwgT19ESVJFQ1RPUlkgfCBPX0NSRUFULCBtb2RlKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7I2RlZmluZSBvcGVuX29fY3JlYXRfb19kaXJfY2hlY2tlZF9mbGFncyhkZmQsIHBhdGhuYW1lLCBmbGFncykgKHtcdFxcXG4mIzQzO1x0c3RydWN0IHN0YXQgX19zdDtcdFx0XHRcdFx0XHRcXFxuJiM0MztcdGludCBfX2ZkID0gb3Blbl9vX2NyZWF0X29fZGlyKGRmZCwgcGF0aG5hbWUsIFNfSVJXWFUsIGZsYWdzKTtcdFxcXG4mIzQzO1x0QVNTRVJUX0dFKF9fZmQsIDApO1x0XHRcdFx0XHRcdFxcXG4mIzQzO1x0QVNTRVJUX0VRKGZzdGF0KF9fZmQsIFx1MDAyNl9fc3QpLCAwKTtcdFx0XHRcdFxcXG4mIzQzO1x0RVhQRUNUX1RSVUUoU19JU0RJUihfX3N0LnN0X21vZGUpKTtcdFx0XHRcdFxcXG4mIzQzO1x0X19mZDtcdFx0XHRcdFx0XHRcdFx0XFxcbiYjNDM7fSlcbiYjNDM7XG4mIzQzOyNkZWZpbmUgb3Blbl9vX2NyZWF0X29fZGlyX2NoZWNrZWQoZGZkLCBwYXRobmFtZSkgXFxcbiYjNDM7XHRvcGVuX29fY3JlYXRfb19kaXJfY2hlY2tlZF9mbGFncyhkZmQsIHBhdGhuYW1lLCAwKVxuJiM0MztcbiYjNDM7RklYVFVSRShvcGVuX29fY3JlYXRfb19kaXIpIHtcbiYjNDM7XHRjaGFyIGRpcnBhdGhbUEFUSF9NQVhdO1xuJiM0MztcdGludCBkZmQ7XG4mIzQzO307XG4mIzQzO1xuJiM0MztGSVhUVVJFX1NFVFVQKG9wZW5fb19jcmVhdF9vX2RpcilcbiYjNDM7e1xuJiM0MztcdHN0cmNweShzZWxmLVx1MDAzZWRpcnBhdGgsIFwmIzM0Oy90bXAvb3Blbl9vX2NyZWF0X29fZGlyX3Rlc3QuWFhYWFhYXCYjMzQ7KTtcbiYjNDM7XHRBU1NFUlRfTkUobWtkdGVtcChzZWxmLVx1MDAzZWRpcnBhdGgpLCBOVUxMKTtcbiYjNDM7XHRzZWxmLVx1MDAzZWRmZCA9IG9wZW4oc2VsZi1cdTAwM2VkaXJwYXRoLCBPX0RJUkVDVE9SWSk7XG4mIzQzO1x0QVNTRVJUX0dFKHNlbGYtXHUwMDNlZGZkLCAwKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7RklYVFVSRV9URUFSRE9XTihvcGVuX29fY3JlYXRfb19kaXIpXG4mIzQzO3tcbiYjNDM7XHRjbG9zZShzZWxmLVx1MDAzZWRmZCk7XG4mIzQzO1x0cm1kaXIoc2VsZi1cdTAwM2VkaXJwYXRoKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyogRG9lcyBvcGVuX29fY3JlYXRfb19kaXIgcmV0dXJuIGEgZmQgYXQgYWxsPyAqL1xuJiM0MztURVNUX0Yob3Blbl9vX2NyZWF0X29fZGlyLCByZXR1cm5zX2ZkKVxuJiM0Mzt7XG4mIzQzO1x0aW50IGZkID0gb3Blbl9vX2NyZWF0X29fZGlyX2NoZWNrZWQoc2VsZi1cdTAwM2VkZmQsIFwmIzM0O25ld2RpclwmIzM0Oyk7XG4mIzQzO1x0RVhQRUNUX0VRKGNsb3NlKGZkKSwgMCk7XG4mIzQzO1x0RVhQRUNUX0VRKHVubGlua2F0KHNlbGYtXHUwMDNlZGZkLCBcJiMzNDtuZXdkaXJcJiMzNDssIEFUX1JFTU9WRURJUiksIDApO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKiBUaGUgZmQgbXVzdCByZWZlciB0byB0aGUgZGlyZWN0b3J5IHRoYXQgd2FzIGp1c3QgY3JlYXRlZC4gKi9cbiYjNDM7VEVTVF9GKG9wZW5fb19jcmVhdF9vX2RpciwgZmRfaXNfY3JlYXRlZF9kaXIpXG4mIzQzO3tcbiYjNDM7XHRpbnQgZmQ7XG4mIzQzO1x0c3RydWN0IHN0YXQgc3RfdmlhX2ZkLCBzdF92aWFfcGF0aDtcbiYjNDM7XHRjaGFyIHBhdGhbUEFUSF9NQVhdO1xuJiM0MztcbiYjNDM7XHRmZCA9IG9wZW5fb19jcmVhdF9vX2Rpcl9jaGVja2VkKHNlbGYtXHUwMDNlZGZkLCBcJiMzNDtjaGVja2RpclwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdEFTU0VSVF9FUShmc3RhdChmZCwgXHUwMDI2c3RfdmlhX2ZkKSwgMCk7XG4mIzQzO1xuJiM0MztcdHNucHJpbnRmKHBhdGgsIHNpemVvZihwYXRoKSwgXCYjMzQ7JXMvY2hlY2tkaXJcJiMzNDssIHNlbGYtXHUwMDNlZGlycGF0aCk7XG4mIzQzO1x0QVNTRVJUX0VRKHN0YXQocGF0aCwgXHUwMDI2c3RfdmlhX3BhdGgpLCAwKTtcbiYjNDM7XG4mIzQzO1x0RVhQRUNUX0VRKHN0X3ZpYV9mZC5zdF9pbm8sIHN0X3ZpYV9wYXRoLnN0X2lubyk7XG4mIzQzO1x0RVhQRUNUX0VRKHN0X3ZpYV9mZC5zdF9kZXYsIHN0X3ZpYV9wYXRoLnN0X2Rldik7XG4mIzQzO1xuJiM0MztcdEVYUEVDVF9FUShjbG9zZShmZCksIDApO1xuJiM0MztcdEVYUEVDVF9FUShybWRpcihwYXRoKSwgMCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qIE1pc3NpbmcgcGFyZW50IGNvbXBvbmVudCBtdXN0IGZhaWwgd2l0aCBFTk9FTlQuICovXG4mIzQzO1RFU1RfRihvcGVuX29fY3JlYXRfb19kaXIsIGVub2VudF9taXNzaW5nX3BhcmVudClcbiYjNDM7e1xuJiM0MztcdEVYUEVDVF9FUShvcGVuX29fY3JlYXRfb19kaXIoc2VsZi1cdTAwM2VkZmQsIFwmIzM0O25vbmV4aXN0ZW50L2NoaWxkXCYjMzQ7LCBTX0lSV1hVLCAwKSwgLTEpO1xuJiM0MztcdEVYUEVDVF9FUShlcnJubywgRU5PRU5UKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyogQW4gaW52YWxpZCBkZmQgbXVzdCBmYWlsIHdpdGggRUJBREYuICovXG4mIzQzO1RFU1RfRihvcGVuX29fY3JlYXRfb19kaXIsIGViYWRmKVxuJiM0Mzt7XG4mIzQzO1x0RVhQRUNUX0VRKG9wZW5fb19jcmVhdF9vX2RpcigtNDIsIFwmIzM0O2JhZGZkaXJcJiMzNDssIFNfSVJXWFUsIDApLCAtMSk7XG4mIzQzO1x0RVhQRUNUX0VRKGVycm5vLCBFQkFERik7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qIEEgZGZkIHRoYXQgcG9pbnRzIHRvIGEgZmlsZSAobm90IGEgZGlyZWN0b3J5KSBtdXN0IGZhaWwgd2l0aCBFTk9URElSLiAqL1xuJiM0MztURVNUX0Yob3Blbl9vX2NyZWF0X29fZGlyLCBlbm90ZGlyX2RmZClcbiYjNDM7e1xuJiM0MztcdGludCBmaWxlX2ZkO1xuJiM0MztcbiYjNDM7XHRmaWxlX2ZkID0gb3BlbmF0KHNlbGYtXHUwMDNlZGZkLCBcJiMzNDtmaWxlXCYjMzQ7LFxuJiM0MztcdFx0XHQgT19DUkVBVCB8IE9fV1JPTkxZLCBTX0lSV1hVKTtcbiYjNDM7XHRBU1NFUlRfR0UoZmlsZV9mZCwgMCk7XG4mIzQzO1xuJiM0MztcdEVYUEVDVF9FUShvcGVuX29fY3JlYXRfb19kaXIoZmlsZV9mZCwgXCYjMzQ7c3ViZGlyXCYjMzQ7LCBTX0lSV1hVLCAwKSwgLTEpO1xuJiM0MztcdEVYUEVDVF9FUShlcnJubywgRU5PVERJUik7XG4mIzQzO1xuJiM0MztcdEVYUEVDVF9FUShjbG9zZShmaWxlX2ZkKSwgMCk7XG4mIzQzO1x0RVhQRUNUX0VRKHVubGlua2F0KHNlbGYtXHUwMDNlZGZkLCBcJiMzNDtmaWxlXCYjMzQ7LCAwKSwgMCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qXG4mIzQzOyAqIE9fRVhDTCB0b2dldGhlciB3aXRoIE9fQ1JFQVR8T19ESVJFQ1RPUlkgbXVzdCBmYWlsIHdpdGggRUVYSVNUIHdoZW5cbiYjNDM7ICogdGhlIHRhcmdldCBkaXJlY3RvcnkgYWxyZWFkeSBleGlzdHMuXG4mIzQzOyAqL1xuJiM0MztURVNUX0Yob3Blbl9vX2NyZWF0X29fZGlyLCBvX2V4Y2xfZWV4aXN0KVxuJiM0Mzt7XG4mIzQzO1x0aW50IGZkO1xuJiM0MztcbiYjNDM7XHRmZCA9IG9wZW5fb19jcmVhdF9vX2Rpcl9jaGVja2VkX2ZsYWdzKHNlbGYtXHUwMDNlZGZkLCBcJiMzNDtleGNsZGlyXCYjMzQ7LCBPX0VYQ0wpO1xuJiM0MztcdEVYUEVDVF9FUShjbG9zZShmZCksIDApO1xuJiM0MztcbiYjNDM7XHRFWFBFQ1RfRVEob3Blbl9vX2NyZWF0X29fZGlyKHNlbGYtXHUwMDNlZGZkLCBcJiMzNDtleGNsZGlyXCYjMzQ7LCBTX0lSV1hVLCBPX0VYQ0wpLCAtMSk7XG4mIzQzO1x0RVhQRUNUX0VRKGVycm5vLCBFRVhJU1QpO1xuJiM0MztcbiYjNDM7XHRFWFBFQ1RfRVEodW5saW5rYXQoc2VsZi1cdTAwM2VkZmQsIFwmIzM0O2V4Y2xkaXJcJiMzNDssIEFUX1JFTU9WRURJUiksIDApO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBPX0NSRUFUfE9fRElSRUNUT1JZIG9uIGEgcGF0aCB0aGF0IGFscmVhZHkgZXhpc3RzIGFzIGEgcmVndWxhciBmaWxlXG4mIzQzOyAqIG11c3QgZmFpbCB3aXRoIEVOT1RESVIuXG4mIzQzOyAqL1xuJiM0MztURVNUX0Yob3Blbl9vX2NyZWF0X29fZGlyLCBleGlzdGluZ19maWxlX2Vub3RkaXIpXG4mIzQzO3tcbiYjNDM7XHRpbnQgZmlsZV9mZDtcbiYjNDM7XG4mIzQzO1x0ZmlsZV9mZCA9IG9wZW5hdChzZWxmLVx1MDAzZWRmZCwgXCYjMzQ7cmVnZmlsZVwmIzM0OyxcbiYjNDM7XHRcdFx0IE9fQ1JFQVQgfCBPX1dST05MWSwgU19JUldYVSk7XG4mIzQzO1x0QVNTRVJUX0dFKGZpbGVfZmQsIDApO1xuJiM0MztcdEVYUEVDVF9FUShjbG9zZShmaWxlX2ZkKSwgMCk7XG4mIzQzO1xuJiM0MztcdEVYUEVDVF9FUShvcGVuX29fY3JlYXRfb19kaXIoc2VsZi1cdTAwM2VkZmQsIFwmIzM0O3JlZ2ZpbGVcJiMzNDssIFNfSVJXWFUsIDApLCAtMSk7XG4mIzQzO1x0RVhQRUNUX0VRKGVycm5vLCBFTk9URElSKTtcbiYjNDM7XG4mIzQzO1x0RVhQRUNUX0VRKHVubGlua2F0KHNlbGYtXHUwMDNlZGZkLCBcJiMzNDtyZWdmaWxlXCYjMzQ7LCAwKSwgMCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qXG4mIzQzOyAqIE9fQ1JFQVR8T19ESVJFQ1RPUlkgY29tYmluZWQgd2l0aCBhIHdyaXRhYmxlIGFjY2VzcyBtb2RlIG11c3QgYmVcbiYjNDM7ICogcmVqZWN0ZWQ6IGEgZGlyZWN0b3J5IGNhbm5vdCBiZSBvcGVuZWQgZm9yIHdyaXRpbmcuXG4mIzQzOyAqL1xuJiM0MztURVNUX0Yob3Blbl9vX2NyZWF0X29fZGlyLCByZWplY3RzX3dyaXRhYmxlX2FjY19tb2RlKVxuJiM0Mzt7XG4mIzQzO1x0RVhQRUNUX0VRKG9wZW5fb19jcmVhdF9vX2RpcihzZWxmLVx1MDAzZWRmZCwgXCYjMzQ7cmR3cmRpclwmIzM0OywgU19JUldYVSwgT19SRFdSKSwgLTEpO1xuJiM0MztcdEVYUEVDVF9FUShlcnJubywgRU5PVERJUik7XG4mIzQzO1x0LyogQ2xlYW4gdXAgaWYgdGhlIGtlcm5lbCBjcmVhdGVkIHRoZSBkaXJlY3RvcnkgYW55d2F5LiAqL1xuJiM0MztcdHVubGlua2F0KHNlbGYtXHUwMDNlZGZkLCBcJiMzNDtyZHdyZGlyXCYjMzQ7LCBBVF9SRU1PVkVESVIpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBvcGVuYXQoT19DUkVBVCkgd2l0aCBhIHRyYWlsaW5nIHNsYXNoIGJ1dCB3aXRob3V0IE9fRElSRUNUT1JZXG4mIzQzOyAqIG11c3QgZmFpbCB3aXRoIEVJU0RJUiBhbmQgbXVzdCBub3QgY3JlYXRlIGFueXRoaW5nIGF0IHRoZSBwYXRoLlxuJiM0MzsgKi9cbiYjNDM7VEVTVF9GKG9wZW5fb19jcmVhdF9vX2RpciwgdHJhaWxpbmdfc2xhc2hfbm9fb19kaXIpXG4mIzQzO3tcbiYjNDM7XHRpbnQgZmQ7XG4mIzQzO1x0c3RydWN0IHN0YXQgc3Q7XG4mIzQzO1xuJiM0MztcdGZkID0gb3BlbmF0KHNlbGYtXHUwMDNlZGZkLCBcJiMzNDt0cmFpbGluZy9cJiMzNDssIE9fQ1JFQVQgfCBPX1dST05MWSwgU19JUldYVSk7XG4mIzQzO1x0RVhQRUNUX0VRKGZkLCAtMSk7XG4mIzQzO1x0RVhQRUNUX0VRKGVycm5vLCBFSVNESVIpO1xuJiM0MztcbiYjNDM7XHRFWFBFQ1RfRVEoZnN0YXRhdChzZWxmLVx1MDAzZWRmZCwgXCYjMzQ7dHJhaWxpbmdcJiMzNDssIFx1MDAyNnN0LCAwKSwgLTEpO1xuJiM0MztcdEVYUEVDVF9FUShlcnJubywgRU5PRU5UKTtcbiYjNDM7XG4mIzQzO1x0LyogQmVzdC1lZmZvcnQgY2xlYW51cCBpbiBjYXNlIHRoZSBrZXJuZWwgbGVmdCBhIGZpbGUgYmVoaW5kLiAqL1xuJiM0MztcdGlmIChmZCBcdTAwM2U9IDApXG4mIzQzO1x0XHRjbG9zZShmZCk7XG4mIzQzO1x0dW5saW5rYXQoc2VsZi1cdTAwM2VkZmQsIFwmIzM0O3RyYWlsaW5nXCYjMzQ7LCAwKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LypcbiYjNDM7ICogVGhlIHJldHVybmVkIGZkIG11c3QgYmUgdXNhYmxlIGFzIGEgZGZkIGZvciBmdXJ0aGVyICphdCgpIGNhbGxzLlxuJiM0MzsgKi9cbiYjNDM7VEVTVF9GKG9wZW5fb19jcmVhdF9vX2RpciwgZmRfdXNhYmxlX2FzX2RmZClcbiYjNDM7e1xuJiM0MztcdGludCBwYXJlbnRfZmQsIGNoaWxkX2ZkO1xuJiM0MztcdGNoYXIgcGF0aFtQQVRIX01BWF07XG4mIzQzO1xuJiM0MztcdHBhcmVudF9mZCA9IG9wZW5fb19jcmVhdF9vX2Rpcl9jaGVja2VkKHNlbGYtXHUwMDNlZGZkLCBcJiMzNDtwYXJlbnRcJiMzNDspO1xuJiM0MztcdGNoaWxkX2ZkID0gb3Blbl9vX2NyZWF0X29fZGlyX2NoZWNrZWQocGFyZW50X2ZkLCBcJiMzNDtjaGlsZFwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdEVYUEVDVF9FUShjbG9zZShjaGlsZF9mZCksIDApO1xuJiM0MztcdEVYUEVDVF9FUShjbG9zZShwYXJlbnRfZmQpLCAwKTtcbiYjNDM7XG4mIzQzO1x0c25wcmludGYocGF0aCwgc2l6ZW9mKHBhdGgpLCBcJiMzNDslcy9wYXJlbnQvY2hpbGRcJiMzNDssIHNlbGYtXHUwMDNlZGlycGF0aCk7XG4mIzQzO1x0RVhQRUNUX0VRKHJtZGlyKHBhdGgpLCAwKTtcbiYjNDM7XHRzbnByaW50ZihwYXRoLCBzaXplb2YocGF0aCksIFwmIzM0OyVzL3BhcmVudFwmIzM0Oywgc2VsZi1cdTAwM2VkaXJwYXRoKTtcbiYjNDM7XHRFWFBFQ1RfRVEocm1kaXIocGF0aCksIDApO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztURVNUX0hBUk5FU1NfTUFJTlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA0IDE2OjU5PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjJtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0OzlQX0ZTJiMzNDssCiAgICAmIzM0O0NFUEhfRlMmIzM0OywKICAgICYjMzQ7RlVTRV9GUyYjMzQ7LAogICAgJiMzNDtHRlMyX0ZTJiMzNDssCiAgICAmIzM0O05GU19GUyYjMzQ7LAogICAgJiMzNDtDSUZTJiMzNDssCiAgICAmIzM0O1ZCT1hTRl9GUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2xvb2t1cF9vcGVuJiMzNDssCiAgICAmIzM0O2F0b21pY19vcGVuJiMzNDssCiAgICAmIzM0O21heV9vX2NyZWF0ZSYjMzQ7LAogICAgJiMzNDtidWlsZF9vcGVuX2ZsYWdzJiMzNDssCiAgICAmIzM0O2RvX29wZW4mIzM0OywKICAgICYjMzQ7ZGVudHJ5X2NyZWF0ZSYjMzQ7LAogICAgJiMzNDt2ZnNfbWtkaXImIzM0OywKICAgICYjMzQ7dmZzX2NyZWF0ZSYjMzQ7LAogICAgJiMzNDtvcGVuX2xhc3RfbG9va3VwcyYjMzQ7LAogICAgJiMzNDtsb29rdXBfZmFzdF9mb3Jfb3BlbiYjMzQ7LAogICAgJiMzNDttYXlfY3JlYXRlX2luX3N0aWNreSYjMzQ7LAogICAgJiMzNDtmaWxlbmFtZV9jcmVhdGUmIzM0OywKICAgICYjMzQ7ZmlsZW5hbWVfdW5saW5rYXQmIzM0OywKICAgICYjMzQ7ZmlsZW5hbWVfcmVuYW1lYXQyJiMzNDssCiAgICAmIzM0O3Y5ZnNfdmZzX2F0b21pY19vcGVuJiMzNDssCiAgICAmIzM0O3Y5ZnNfdmZzX2F0b21pY19vcGVuX2RvdGwmIzM0OywKICAgICYjMzQ7Y2VwaF9hdG9taWNfb3BlbiYjMzQ7LAogICAgJiMzNDtmdXNlX2F0b21pY19vcGVuJiMzNDssCiAgICAmIzM0O2dmczJfYXRvbWljX29wZW4mIzM0OywKICAgICYjMzQ7bmZzX2F0b21pY19vcGVuJiMzNDssCiAgICAmIzM0O25mc19hdG9taWNfb3Blbl92MjMmIzM0OywKICAgICYjMzQ7Y2lmc19hdG9taWNfb3BlbiYjMzQ7LAogICAgJiMzNDt2Ym94c2ZfZGlyX2F0b21pY19vcGVuJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgc3VwcG9ydCBmb3IgY3JlYXRpbmcgZGlyZWN0b3JpZXMgdmlhIGBvcGVuYXQoLi4uLCBPX0NSRUFUIHwgT19ESVJFQ1RPUlksIC4uLilgLiBJdCBtb2RpZmllcyBjb3JlIFZGUyBwYXRoIHJlc29sdXRpb24gYW5kIGZpbGUgY3JlYXRpb24gbG9naWMgaW4gYGZzL25hbWVpLmNgIGFuZCBgZnMvb3Blbi5jYCwgaW5jbHVkaW5nIGBsb29rdXBfb3BlbmAsIGBhdG9taWNfb3BlbmAsIGFuZCBgdmZzX21rZGlyYC4gSXQgYWxzbyB1cGRhdGVzIG11bHRpcGxlIGZpbGVzeXN0ZW1zICg5cCwgY2VwaCwgZnVzZSwgZ2ZzMiwgbmZzLCBzbWIsIHZib3hzZikgdG8gaGFuZGxlIHRoZSBuZXcgZmxhZyBjb21iaW5hdGlvbi4gVGhpcyBpcyBhIHNpZ25pZmljYW50IGZ1bmN0aW9uYWwgY2hhbmdlIHRvIGNvcmUga2VybmVsIGxvZ2ljIGFuZCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdAogICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksCiAgIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA5Nzk0OTA3N2Q0ZWQ3NjdlMmNkNGNkNmZhZmI0NThiZWE1ZmM0ODU4CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFNhdCBKdWwgNCAxNjo1OTo0OCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2ZzLzlwL3Zmc19pbm9kZS5jIGIvZnMvOXAvdmZzX2lub2RlLmMKaW5kZXggNTc4M2QwMzM2Zjk2YWMuLmJiNTU1ZTViYTI2MTUwIDEwMDY0NAotLS0gYS9mcy85cC92ZnNfaW5vZGUuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy85cC92ZnNfaW5vZGUuYwpAQCAtNzc3LDYgJiM0Mzs3NzcsOSBAQCB2OWZzX3Zmc19hdG9taWNfb3BlbihzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LAogCXN0cnVjdCBpbm9kZSAqaW5vZGU7CiAJaW50IHA5X29tb2RlOwogCiYjNDM7CWlmIChPX0lTX01LRElSKGZsYWdzKSkKJiM0MzsJCWZsYWdzICZhbXA7PSB+T19DUkVBVDsKJiM0MzsKIAlpZiAoZF9pbl9sb29rdXAoZGVudHJ5KSkgewogCQlzdHJ1Y3QgZGVudHJ5ICpyZXMgPSB2OWZzX3Zmc19sb29rdXAoZGlyLCBkZW50cnksIDApOwogCQlpZiAocmVzIHx8IGRfcmVhbGx5X2lzX3Bvc2l0aXZlKGRlbnRyeSkpCmRpZmYgLS1naXQgYS9mcy85cC92ZnNfaW5vZGVfZG90bC5jIGIvZnMvOXAvdmZzX2lub2RlX2RvdGwuYwppbmRleCBmNzM5NmQyMGNiNmNkYy4uZmYzZmFjYjQyMGMyMjQgMTAwNjQ0Ci0tLSBhL2ZzLzlwL3Zmc19pbm9kZV9kb3RsLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvOXAvdmZzX2lub2RlX2RvdGwuYwpAQCAtMjM5LDYgJiM0MzsyMzksOSBAQCB2OWZzX3Zmc19hdG9taWNfb3Blbl9kb3RsKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksCiAJc3RydWN0IHY5ZnNfc2Vzc2lvbl9pbmZvICp2OXNlczsKIAlzdHJ1Y3QgcG9zaXhfYWNsICpwYWNsID0gTlVMTCwgKmRhY2wgPSBOVUxMOwogCiYjNDM7CWlmIChPX0lTX01LRElSKGZsYWdzKSkKJiM0MzsJCWZsYWdzICZhbXA7PSB+T19DUkVBVDsKJiM0MzsKIAlpZiAoZF9pbl9sb29rdXAoZGVudHJ5KSkgewogCQlzdHJ1Y3QgZGVudHJ5ICpyZXMgPSB2OWZzX3Zmc19sb29rdXAoZGlyLCBkZW50cnksIDApOwogCQlpZiAocmVzIHx8IGRfcmVhbGx5X2lzX3Bvc2l0aXZlKGRlbnRyeSkpCmRpZmYgLS1naXQgYS9mcy9jZXBoL2ZpbGUuYyBiL2ZzL2NlcGgvZmlsZS5jCmluZGV4IDcxMTYxZjJiMjE1MTM2Li5lNzlhYmRiZDlmNjFlOSAxMDA2NDQKLS0tIGEvZnMvY2VwaC9maWxlLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvY2VwaC9maWxlLmMKQEAgLTgxMSw2ICYjNDM7ODExLDkgQEAgaW50IGNlcGhfYXRvbWljX29wZW4oc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwKIAkgICAgICBkaXIsIGNlcGhfdmlub3AoZGlyKSwgZGVudHJ5LCBkZW50cnksCiAJICAgICAgZF91bmhhc2hlZChkZW50cnkpID8gJiMzNDt1bmhhc2hlZCYjMzQ7IDogJiMzNDtoYXNoZWQmIzM0OywgZmxhZ3MsIG1vZGUpOwogCiYjNDM7CWlmIChPX0lTX01LRElSKGZsYWdzKSkKJiM0MzsJCWZsYWdzICZhbXA7PSB+T19DUkVBVDsKJiM0MzsKIAlpZiAoZGVudHJ5LSZndDtkX25hbWUubGVuICZndDsgTkFNRV9NQVgpCiAJCXJldHVybiAtRU5BTUVUT09MT05HOwogCmRpZmYgLS1naXQgYS9mcy9mdXNlL2Rpci5jIGIvZnMvZnVzZS9kaXIuYwppbmRleCAwZTJhMTAzOWZhNDNlYS4uZTAxODY5NTY1ZDVlZTUgMTAwNjQ0Ci0tLSBhL2ZzL2Z1c2UvZGlyLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvZnVzZS9kaXIuYwpAQCAtOTM1LDYgJiM0Mzs5MzUsOSBAQCBzdGF0aWMgaW50IGZ1c2VfYXRvbWljX29wZW4oc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmVudHJ5LAogCXN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwID0gZmlsZV9tbnRfaWRtYXAoZmlsZSk7CiAJc3RydWN0IGZ1c2VfY29ubiAqZmMgPSBnZXRfZnVzZV9jb25uKGRpcik7CiAKJiM0MzsJaWYgKE9fSVNfTUtESVIoZmxhZ3MpKQomIzQzOwkJZmxhZ3MgJmFtcDs9IH5PX0NSRUFUOwomIzQzOwogCWlmIChmdXNlX2lzX2JhZChkaXIpKQogCQlyZXR1cm4gLUVJTzsKIApkaWZmIC0tZ2l0IGEvZnMvZ2ZzMi9pbm9kZS5jIGIvZnMvZ2ZzMi9pbm9kZS5jCmluZGV4IDhhNzc3OTRiYmQ0YWZjLi45ODU5YWUwMzQxYTk5ZSAxMDA2NDQKLS0tIGEvZnMvZ2ZzMi9pbm9kZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2dmczIvaW5vZGUuYwpAQCAtMTM4Nyw2ICYjNDM7MTM4Nyw5IEBAIHN0YXRpYyBpbnQgZ2ZzMl9hdG9taWNfb3BlbihzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LAogewogCWJvb2wgZXhjbCA9ICEhKGZsYWdzICZhbXA7IE9fRVhDTCk7CiAKJiM0MzsJaWYgKE9fSVNfTUtESVIoZmxhZ3MpKQomIzQzOwkJZmxhZ3MgJmFtcDs9IH5PX0NSRUFUOwomIzQzOwogCWlmIChkX2luX2xvb2t1cChkZW50cnkpKSB7CiAJCXN0cnVjdCBkZW50cnkgKmQgPSBfX2dmczJfbG9va3VwKGRpciwgZGVudHJ5LCBmaWxlKTsKIAkJaWYgKGZpbGUtJmd0O2ZfbW9kZSAmYW1wOyBGTU9ERV9PUEVORUQpIHsKZGlmZiAtLWdpdCBhL2ZzL25hbWVpLmMgYi9mcy9uYW1laS5jCmluZGV4IDE5Y2U0M2M5YTZlNjYyLi4wMzBjYWM0ZmJlNTU1ZSAxMDA2NDQKLS0tIGEvZnMvbmFtZWkuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9uYW1laS5jCkBAIC0xMzgyLDEzICYjNDM7MTM4MiwxMiBAQCBpbnQgbWF5X2xpbmthdChzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgY29uc3Qgc3RydWN0IHBhdGggKmxpbmspCiAKIC8qKgogICogbWF5X2NyZWF0ZV9pbl9zdGlja3kgLSBDaGVjayB3aGV0aGVyIGFuIE9fQ1JFQVQgb3BlbiBpbiBhIHN0aWNreSBkaXJlY3RvcnkKLSAqCQkJICBzaG91bGQgYmUgYWxsb3dlZCwgb3Igbm90LCBvbiBmaWxlcyB0aGF0IGFscmVhZHkKLSAqCQkJICBleGlzdC4KJiM0MzsgKgkJCSAgc2hvdWxkIGJlIGFsbG93ZWQsIG9yIG5vdAogICogQGlkbWFwOiBpZG1hcCBvZiB0aGUgbW91bnQgdGhlIGlub2RlIHdhcyBmb3VuZCBmcm9tCiAgKiBAbmQ6IG5hbWVpZGF0YSBwYXRod2FsayBkYXRhCiAgKiBAaW5vZGU6IHRoZSBpbm9kZSBvZiB0aGUgZmlsZSB0byBvcGVuCiAgKgotICogQmxvY2sgYW4gT19DUkVBVCBvcGVuIG9mIGEgRklGTyAob3IgYSByZWd1bGFyIGZpbGUpIHdoZW46CiYjNDM7ICogQmxvY2sgYW4gT19DUkVBVCBvcGVuIG9mIGEgRklGTyAob3IgYSByZWd1bGFyIGZpbGUvZGlyZWN0b3J5KSB3aGVuOgogICogICAtIHN5c2N0bF9wcm90ZWN0ZWRfZmlmb3MgKG9yIHN5c2N0bF9wcm90ZWN0ZWRfcmVndWxhcikgaXMgZW5hYmxlZAogICogICAtIHRoZSBmaWxlIGFscmVhZHkgZXhpc3RzCiAgKiAgIC0gd2UgYXJlIGluIGEgc3RpY2t5IGRpcmVjdG9yeQpAQCAtMTQxNiw2ICYjNDM7MTQxNSwxNCBAQCBzdGF0aWMgaW50IG1heV9jcmVhdGVfaW5fc3RpY2t5KHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgbmFtZWlkYXRhICpuZCwKIAlpZiAobGlrZWx5KCEoZGlyX21vZGUgJmFtcDsgU19JU1ZUWCkpKQogCQlyZXR1cm4gMDsKIAomIzQzOwkvKgomIzQzOwkgKiBUaGVyZSBpcyBubyBzZXBhcmF0ZSBzeXNjdGwgZm9yIGRpcmVjdG9yeSBjcmVhdGlvbiBpbiBzdGlja3kKJiM0MzsJICogZm9sZGVycy4gVGhlcmVmb3JlLCBmb3IgdGhlIFNfSVNESVIgY2FzZSwgZGlzYWJsaW5nCiYjNDM7CSAqIHN5c2N0bF9wcm90ZWN0ZWRfcmVndWxhciBpcyBub3QgZW5vdWdoIHRvIGFsbG93IGNyZWF0aW5nIGEKJiM0MzsJICogZGlyZWN0b3J5IGluIGEgc3RpY2t5IGZvbGRlciwgYmVjYXVzZSB0aGF0IG1heSBzdXJwcmlzZSB1c2VycwomIzQzOwkgKiBub3QgZXhwZWN0aW5nIHRoYXQgT19DUkVBVHxPX0RJUkVDVE9SWSBpcyBwb3NzaWJsZSBvbiBuZXdlcgomIzQzOwkgKiBrZXJuZWxzLgomIzQzOwkgKi8KIAlpZiAoU19JU1JFRyhpbm9kZS0mZ3Q7aV9tb2RlKSAmYW1wOyZhbXA7ICFzeXNjdGxfcHJvdGVjdGVkX3JlZ3VsYXIpCiAJCXJldHVybiAwOwogCkBAIC0xNDQ3LDYgJiM0MzsxNDU0LDEyIEBAIHN0YXRpYyBpbnQgbWF5X2NyZWF0ZV9pbl9zdGlja3koc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBuYW1laWRhdGEgKm5kLAogCQkJCQkgICAgICAmIzM0O3N0aWNreV9jcmVhdGVfcmVndWxhciYjMzQ7KTsKIAkJCXJldHVybiAtRUFDQ0VTOwogCQl9CiYjNDM7CiYjNDM7CQlpZiAoU19JU0RJUihpbm9kZS0mZ3Q7aV9tb2RlKSkgewomIzQzOwkJCWF1ZGl0X2xvZ19wYXRoX2RlbmllZChBVURJVF9BTk9NX0NSRUFULAomIzQzOwkJCQkJICAgICAgJiMzNDtzdGlja3lfY3JlYXRlX2RpciYjMzQ7KTsKJiM0MzsJCQlyZXR1cm4gLUVBQ0NFUzsKJiM0MzsJCX0KIAl9CiAKIAlyZXR1cm4gMDsKQEAgLTI3ODEsOSAmIzQzOzI3OTQsMTQgQEAgc3RhdGljIGNvbnN0IGNoYXIgKnBhdGhfaW5pdChzdHJ1Y3QgbmFtZWlkYXRhICpuZCwgdW5zaWduZWQgZmxhZ3MpCiAJcmV0dXJuIHM7CiB9CiAKJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgdHJhaWxpbmdfc2xhc2hlcyhjb25zdCBzdHJ1Y3QgcXN0ciBsYXN0KQomIzQzO3sKJiM0MzsJcmV0dXJuIChib29sKWxhc3QubmFtZVtsYXN0Lmxlbl07CiYjNDM7fQomIzQzOwogc3RhdGljIGlubGluZSBjb25zdCBjaGFyICpsb29rdXBfbGFzdChzdHJ1Y3QgbmFtZWlkYXRhICpuZCkKIHsKLQlpZiAobmQtJmd0O2xhc3RfdHlwZSA9PSBMQVNUX05PUk0gJmFtcDsmYW1wOyBuZC0mZ3Q7bGFzdC5uYW1lW25kLSZndDtsYXN0Lmxlbl0pCiYjNDM7CWlmIChuZC0mZ3Q7bGFzdF90eXBlID09IExBU1RfTk9STSAmYW1wOyZhbXA7IHRyYWlsaW5nX3NsYXNoZXMobmQtJmd0O2xhc3QpKQogCQluZC0mZ3Q7ZmxhZ3MgfD0gTE9PS1VQX0ZPTExPVyB8IExPT0tVUF9ESVJFQ1RPUlk7CiAKIAlyZXR1cm4gd2Fsa19jb21wb25lbnQobmQsIFdBTEtfVFJBSUxJTkcpOwpAQCAtNDE2NCw2ICYjNDM7NDE4MiwyNCBAQCBzdGF0aWMgaW5saW5lIHVtb2RlX3QgdmZzX3ByZXBhcmVfbW9kZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwKIAlyZXR1cm4gbW9kZTsKIH0KIAomIzQzO3N0YXRpYyBpbmxpbmUKJiM0MztpbnQgdmZzX2NyZWF0ZV9ub19wZXJtKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksCiYjNDM7CQkgICAgICAgdW1vZGVfdCBtb2RlLCBzdHJ1Y3QgZGVsZWdhdGVkX2lub2RlICpkaSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBpbm9kZSAqZGlyID0gZF9pbm9kZShkZW50cnktJmd0O2RfcGFyZW50KTsKJiM0MzsJaW50IGVycm9yOwomIzQzOwomIzQzOwllcnJvciA9IHRyeV9icmVha19kZWxlZyhkaXIsIExFQVNFX0JSRUFLX0RJUl9DUkVBVEUsIGRpKTsKJiM0MzsJaWYgKGVycm9yKQomIzQzOwkJcmV0dXJuIGVycm9yOwomIzQzOwomIzQzOwllcnJvciA9IGRpci0mZ3Q7aV9vcC0mZ3Q7Y3JlYXRlKGlkbWFwLCBkaXIsIGRlbnRyeSwgbW9kZSwgdHJ1ZSk7CiYjNDM7CWlmICghZXJyb3IpCiYjNDM7CQlmc25vdGlmeV9jcmVhdGUoZGlyLCBkZW50cnkpOwomIzQzOwomIzQzOwlyZXR1cm4gZXJyb3I7CiYjNDM7fQomIzQzOwogLyoqCiAgKiB2ZnNfY3JlYXRlIC0gY3JlYXRlIG5ldyBmaWxlCiAgKiBAaWRtYXA6CWlkbWFwIG9mIHRoZSBtb3VudCB0aGUgaW5vZGUgd2FzIGZvdW5kIGZyb20KQEAgLTQxOTYsMTMgJiM0Mzs0MjMyLDggQEAgaW50IHZmc19jcmVhdGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlLAogCWVycm9yID0gc2VjdXJpdHlfaW5vZGVfY3JlYXRlKGRpciwgZGVudHJ5LCBtb2RlKTsKIAlpZiAoZXJyb3IpCiAJCXJldHVybiBlcnJvcjsKLQllcnJvciA9IHRyeV9icmVha19kZWxlZyhkaXIsIExFQVNFX0JSRUFLX0RJUl9DUkVBVEUsIGRpKTsKLQlpZiAoZXJyb3IpCi0JCXJldHVybiBlcnJvcjsKLQllcnJvciA9IGRpci0mZ3Q7aV9vcC0mZ3Q7Y3JlYXRlKGlkbWFwLCBkaXIsIGRlbnRyeSwgbW9kZSwgdHJ1ZSk7Ci0JaWYgKCFlcnJvcikKLQkJZnNub3RpZnlfY3JlYXRlKGRpciwgZGVudHJ5KTsKLQlyZXR1cm4gZXJyb3I7CiYjNDM7CiYjNDM7CXJldHVybiB2ZnNfY3JlYXRlX25vX3Blcm0oaWRtYXAsIGRlbnRyeSwgbW9kZSwgZGkpOwogfQogRVhQT1JUX1NZTUJPTCh2ZnNfY3JlYXRlKTsKIApAQCAtNDMxOSw3MyAmIzQzOzQzNTAsMTIyIEBAIHN0YXRpYyBpbmxpbmUgaW50IG9wZW5fdG9fbmFtZWlfZmxhZ3MoaW50IGZsYWcpCiAKIHN0YXRpYyBpbnQgbWF5X29fY3JlYXRlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLAogCQkJY29uc3Qgc3RydWN0IHBhdGggKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LAotCQkJdW1vZGVfdCBtb2RlKQomIzQzOwkJCXVtb2RlX3QgbW9kZSwgYm9vbCBjcmVhdGVfZGlyKQogewotCWludCBlcnJvciA9IHNlY3VyaXR5X3BhdGhfbWtub2QoZGlyLCBkZW50cnksIG1vZGUsIDApOwomIzQzOwlzdHJ1Y3QgaW5vZGUgKmRpcl9pbm9kZSA9IGRpci0mZ3Q7ZGVudHJ5LSZndDtkX2lub2RlOwomIzQzOwlpbnQgZXJyb3I7CiYjNDM7CiYjNDM7CWlmIChjcmVhdGVfZGlyKQomIzQzOwkJZXJyb3IgPSBzZWN1cml0eV9wYXRoX21rZGlyKGRpciwgZGVudHJ5LCBtb2RlKTsKJiM0MzsJZWxzZQomIzQzOwkJZXJyb3IgPSBzZWN1cml0eV9wYXRoX21rbm9kKGRpciwgZGVudHJ5LCBtb2RlLCAwKTsKIAlpZiAoZXJyb3IpCiAJCXJldHVybiBlcnJvcjsKIAogCWlmICghZnN1aWRnaWRfaGFzX21hcHBpbmcoZGlyLSZndDtkZW50cnktJmd0O2Rfc2IsIGlkbWFwKSkKIAkJcmV0dXJuIC1FT1ZFUkZMT1c7CiAKLQllcnJvciA9IGlub2RlX3Blcm1pc3Npb24oaWRtYXAsIGRpci0mZ3Q7ZGVudHJ5LSZndDtkX2lub2RlLAotCQkJCSBNQVlfV1JJVEUgfCBNQVlfRVhFQyk7CiYjNDM7CWVycm9yID0gaW5vZGVfcGVybWlzc2lvbihpZG1hcCwgZGlyX2lub2RlLCBNQVlfV1JJVEUgfCBNQVlfRVhFQyk7CiAJaWYgKGVycm9yKQogCQlyZXR1cm4gZXJyb3I7CiAKLQlyZXR1cm4gc2VjdXJpdHlfaW5vZGVfY3JlYXRlKGRpci0mZ3Q7ZGVudHJ5LSZndDtkX2lub2RlLCBkZW50cnksIG1vZGUpOwomIzQzOwlpZiAoY3JlYXRlX2RpcikKJiM0MzsJCWVycm9yID0gc2VjdXJpdHlfaW5vZGVfbWtkaXIoZGlyX2lub2RlLCBkZW50cnksIG1vZGUpOwomIzQzOwllbHNlCiYjNDM7CQllcnJvciA9IHNlY3VyaXR5X2lub2RlX2NyZWF0ZShkaXJfaW5vZGUsIGRlbnRyeSwgbW9kZSk7CiYjNDM7CiYjNDM7CXJldHVybiBlcnJvcjsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGlubGluZSB1bW9kZV90IG9fY3JlYXRlX21vZGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsCiYjNDM7CQljb25zdCBzdHJ1Y3QgaW5vZGUgKmRpciwgdW1vZGVfdCBtb2RlLCBib29sIGNyZWF0ZV9kaXIpCiYjNDM7ewomIzQzOwlpZiAoY3JlYXRlX2RpcikKJiM0MzsJCXJldHVybiB2ZnNfcHJlcGFyZV9tb2RlKGlkbWFwLCBkaXIsIG1vZGUsIFNfSVJXWFVHTyB8IFNfSVNWVFgsIDApOwomIzQzOwllbHNlCiYjNDM7CQlyZXR1cm4gdmZzX3ByZXBhcmVfbW9kZShpZG1hcCwgZGlyLCBtb2RlLCBTX0lBTExVR08sIFNfSUZSRUcpOwogfQogCiAvKgotICogQXR0ZW1wdCB0byBhdG9taWNhbGx5IGxvb2sgdXAsIGNyZWF0ZSBhbmQgb3BlbiBhIGZpbGUgZnJvbSBhIG5lZ2F0aXZlCi0gKiBkZW50cnkuCi0gKgotICogUmV0dXJucyAwIGlmIHN1Y2Nlc3NmdWwuICBUaGUgZmlsZSB3aWxsIGhhdmUgYmVlbiBjcmVhdGVkIGFuZCBhdHRhY2hlZCB0bwotICogQGZpbGUgYnkgdGhlIGZpbGVzeXN0ZW0gY2FsbGluZyBmaW5pc2hfb3BlbigpLgotICoKLSAqIElmIHRoZSBmaWxlIHdhcyBsb29rZWQgdXAgb25seSBvciBkaWRuJiMzOTt0IG5lZWQgY3JlYXRpbmcsIEZNT0RFX09QRU5FRCB3b24mIzM5O3QKLSAqIGJlIHNldC4gIFRoZSBjYWxsZXIgd2lsbCBuZWVkIHRvIHBlcmZvcm0gdGhlIG9wZW4gdGhlbXNlbHZlcy4gIEBwYXRoIHdpbGwKLSAqIGhhdmUgYmVlbiB1cGRhdGVkIHRvIHBvaW50IHRvIHRoZSBuZXcgZGVudHJ5LiAgVGhpcyBtYXkgYmUgbmVnYXRpdmUuCi0gKgotICogUmV0dXJucyBhbiBlcnJvciBjb2RlIG90aGVyd2lzZS4KJiM0MzsgKiBhdG9taWNfb3BlbigpIC0gYXR0ZW1wdCB0byBhdG9taWNhbGx5IGxvb2sgdXAsIGNyZWF0ZSBhbmQgb3BlbiBhIGZpbGUKJiM0MzsgKiBmcm9tIGEgbmVnYXRpdmUgZGVudHJ5LgomIzQzOyAqIEBwYXRoOiAgICAgICAgICBwYXJlbnQgZGlyZWN0b3J5IHBhdGgKJiM0MzsgKiBAZGVudHJ5OiAgICAgICAgY2hpbGQgdG8gLSZndDthdG9taWNfb3BlbigpCiYjNDM7ICogQG9wZW5fZmxhZzogICAgIG9wZW4gZmxhZ3MKJiM0MzsgKiBAbW9kZTogICAgICAgICAgY3JlYXRlIG1vZGUKJiM0MzsgKiBAY3JlYXRlX2Vycm9yOiAgcmV0dXJuIHZhbHVlIGZyb20gbWF5X29fY3JlYXRlKCkKJiM0MzsgKgomIzQzOyAqIElmIEZNT0RFX09QRU5FRCBpcyBzZXQsIHRoZSBmaWxlIHdpbGwgaGF2ZSBiZWVuIGF0dGFjaGVkIHRvIEBmaWxlIGJ5IHRoZQomIzQzOyAqIGZpbGVzeXN0ZW0gY2FsbGluZyBmaW5pc2hfb3BlbigpLiBJZiBGTU9ERV9PUEVORUQgaXNuJiMzOTt0IHNldCwgdGhlCiYjNDM7ICogZmlsZXN5c3RlbSBpbnN0ZWFkIGNhbGxlZCBmaW5pc2hfbm9fb3BlbigpIGFuZCB0aGUgY2FsbGVyIHdpbGwgbmVlZCB0bwomIzQzOyAqIHBlcmZvcm0gdGhlIG9wZW4gdGhlbXNlbHZlcy4KJiM0MzsgKgomIzQzOyAqIEZNT0RFX0NSRUFURUQgaXMgc2V0IHdoZW4gdGhlIGNhbGwgdG8gLSZndDthdG9taWNfb3BlbigpIGFjdHVhbGx5IGNyZWF0ZWQKJiM0MzsgKiB0aGUgZmlsZS4KJiM0MzsgKgomIzQzOyAqIFJldHVybnMgdGhlIG9wZW5lZC9sb29rZWQtdXAgZGVudHJ5IG9uIHN1Y2Nlc3Mgb3IgRVJSX1BUUigtRSkgb24gZmFpbHVyZS4KJiM0MzsgKiBPbiBlcnJvciwgYXRvbWljX29wZW4oKSBjb25zdW1lcyBAZGVudHJ5LgogICovCiBzdGF0aWMgc3RydWN0IGRlbnRyeSAqYXRvbWljX29wZW4oY29uc3Qgc3RydWN0IHBhdGggKnBhdGgsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwKIAkJCQkgIHN0cnVjdCBmaWxlICpmaWxlLAotCQkJCSAgaW50IG9wZW5fZmxhZywgdW1vZGVfdCBtb2RlKQomIzQzOwkJCQkgIGludCBvcGVuX2ZsYWcsIHVtb2RlX3QgbW9kZSwgYm9vbCBjcmVhdGVfZXJyb3IpCiB7CiAJc3RydWN0IGRlbnRyeSAqY29uc3QgREVOVFJZX05PVF9TRVQgPSAodm9pZCAqKSAtMVVMOwogCXN0cnVjdCBpbm9kZSAqZGlyID0gIHBhdGgtJmd0O2RlbnRyeS0mZ3Q7ZF9pbm9kZTsKJiM0MzsJYm9vbCBmYWlsZWRfY3JlYXRlID0gZmFsc2U7CiAJaW50IGVycm9yOwogCiAJZmlsZS0mZ3Q7X19mX3BhdGguZGVudHJ5ID0gREVOVFJZX05PVF9TRVQ7CiAJZmlsZS0mZ3Q7X19mX3BhdGgubW50ID0gcGF0aC0mZ3Q7bW50OwomIzQzOwogCWVycm9yID0gZGlyLSZndDtpX29wLSZndDthdG9taWNfb3BlbihkaXIsIGRlbnRyeSwgZmlsZSwKIAkJCQkgICAgICAgb3Blbl90b19uYW1laV9mbGFncyhvcGVuX2ZsYWcpLCBtb2RlKTsKIAlkX2xvb2t1cF9kb25lKGRlbnRyeSk7CiAJaWYgKCFlcnJvcikgewogCQlpZiAoZmlsZS0mZ3Q7Zl9tb2RlICZhbXA7IEZNT0RFX09QRU5FRCkgewotCQkJaWYgKHVubGlrZWx5KGRlbnRyeSAhPSBmaWxlLSZndDtmX3BhdGguZGVudHJ5KSkgewomIzQzOwkJCS8vIGZpbmlzaF9vcGVuKCkgY2FsbGVkCiYjNDM7CQkJc3RydWN0IGRlbnRyeSAqb3BlbmVkID0gZmlsZS0mZ3Q7Zl9wYXRoLmRlbnRyeTsKJiM0MzsJCQlpZiAodW5saWtlbHkob3BlbmVkICE9IGRlbnRyeSkpIHsKIAkJCQlkcHV0KGRlbnRyeSk7Ci0JCQkJZGVudHJ5ID0gZGdldChmaWxlLSZndDtmX3BhdGguZGVudHJ5KTsKJiM0MzsJCQkJZGVudHJ5ID0gZGdldChvcGVuZWQpOwogCQkJfQotCQl9IGVsc2UgaWYgKFdBUk5fT04oZmlsZS0mZ3Q7Zl9wYXRoLmRlbnRyeSA9PSBERU5UUllfTk9UX1NFVCkpIHsKLQkJCWVycm9yID0gLUVJTzsKLQkJfSBlbHNlIHsKLQkJCWlmIChmaWxlLSZndDtmX3BhdGguZGVudHJ5KSB7CiYjNDM7CQl9IGVsc2UgaWYgKGxpa2VseShmaWxlLSZndDtmX3BhdGguZGVudHJ5ICE9IERFTlRSWV9OT1RfU0VUKSkgewomIzQzOwkJCS8vIGZpbmlzaF9ub19vcGVuKCkgY2FsbGVkCiYjNDM7CQkJc3RydWN0IGRlbnRyeSAqcmVwbGFjZWQgPSBmaWxlLSZndDtmX3BhdGguZGVudHJ5OwomIzQzOwkJCWlmIChyZXBsYWNlZCkgewogCQkJCWRwdXQoZGVudHJ5KTsKLQkJCQlkZW50cnkgPSBmaWxlLSZndDtmX3BhdGguZGVudHJ5OwomIzQzOwkJCQlkZW50cnkgPSByZXBsYWNlZDsKIAkJCX0KIAkJCWlmICh1bmxpa2VseShkX2lzX25lZ2F0aXZlKGRlbnRyeSkpKQogCQkJCWVycm9yID0gLUVOT0VOVDsKJiM0MzsJCQlpZiAoZXJyb3IgJmFtcDsmYW1wOyBjcmVhdGVfZXJyb3IpIC8vIHNob3VsZCBoYXZlIGNyZWF0ZWQsIGJ1dCBlcnJvcmVkIGJlZm9yZQomIzQzOwkJCQlmYWlsZWRfY3JlYXRlID0gdHJ1ZTsKJiM0MzsJCX0gZWxzZSB7CiYjNDM7CQkJY29uc3QgY2hhciAqZnNuYW1lID0gZGVudHJ5LSZndDtkX3NiLSZndDtzX3R5cGUtJmd0O25hbWU7CiYjNDM7CQkJV0FSTigxLCAmIzM0OyVzOiAtJmd0O2F0b21pY19vcGVuKCkgbGVmdCBmaWxlLSZndDtmX3BhdGguZGVudHJ5IHVuc2V0IVxuJiMzNDssIGZzbmFtZSk7CiYjNDM7CQkJZXJyb3IgPSAtRUlPOwogCQl9CiAJfQomIzQzOwogCWlmIChlcnJvcikgewomIzQzOwkJaWYgKGZhaWxlZF9jcmVhdGUpCiYjNDM7CQkJYXVkaXRfaW5vZGVfY2hpbGQoZGlyLCBkZW50cnksIEFVRElUX1RZUEVfQ0hJTERfQ1JFQVRFKTsKIAkJZHB1dChkZW50cnkpOwogCQlkZW50cnkgPSBFUlJfUFRSKGVycm9yKTsKJiM0MzsJfSBlbHNlIHsKJiM0MzsJCWlmIChmaWxlLSZndDtmX21vZGUgJmFtcDsgRk1PREVfQ1JFQVRFRCkKJiM0MzsJCQlmc25vdGlmeV9jcmVhdGUoZGlyLCBkZW50cnkpOwomIzQzOwkJaWYgKGZpbGUtJmd0O2ZfbW9kZSAmYW1wOyBGTU9ERV9PUEVORUQpCiYjNDM7CQkJZnNub3RpZnlfb3BlbihmaWxlKTsKIAl9CiYjNDM7CiAJcmV0dXJuIGRlbnRyeTsKIH0KIAomIzQzO3N0YXRpYyBpbmxpbmUKJiM0MztzdHJ1Y3QgZGVudHJ5ICp2ZnNfbWtkaXJfbm9fcGVybShzdHJ1Y3QgbW50X2lkbWFwICosIHN0cnVjdCBpbm9kZSAqLAomIzQzOwkJCQkgc3RydWN0IGRlbnRyeSAqLCB1bW9kZV90LAomIzQzOwkJCQkgc3RydWN0IGRlbGVnYXRlZF9pbm9kZSAqKTsKIC8qCiAgKiBMb29rIHVwIGFuZCBtYXliZSBjcmVhdGUgYW5kIG9wZW4gdGhlIGxhc3QgY29tcG9uZW50LgogICoKQEAgLTQ0MTIsNiAmIzQzOzQ0OTIsNyBAQCBzdGF0aWMgc3RydWN0IGRlbnRyeSAqbG9va3VwX29wZW4oc3RydWN0IG5hbWVpZGF0YSAqbmQsIHN0cnVjdCBmaWxlICpmaWxlLAogCXN0cnVjdCBkZW50cnkgKmRlbnRyeTsKIAlpbnQgZXJyb3IsIGNyZWF0ZV9lcnJvciA9IDA7CiAJdW1vZGVfdCBtb2RlID0gb3AtJmd0O21vZGU7CiYjNDM7CWJvb2wgY3JlYXRlX2RpciA9IE9fSVNfTUtESVIob3Blbl9mbGFnKTsKIAogCWlmICh1bmxpa2VseShJU19ERUFERElSKGRpcl9pbm9kZSkpKQogCQlyZXR1cm4gRVJSX1BUUigtRU5PRU5UKTsKQEAgLTQ0MzcsNyAmIzQzOzQ1MTgsNyBAQCBzdGF0aWMgc3RydWN0IGRlbnRyeSAqbG9va3VwX29wZW4oc3RydWN0IG5hbWVpZGF0YSAqbmQsIHN0cnVjdCBmaWxlICpmaWxlLAogCQlkZW50cnkgPSBOVUxMOwogCX0KIAlpZiAoZGVudHJ5LSZndDtkX2lub2RlKSB7Ci0JCS8qIENhY2hlZCBwb3NpdGl2ZSBkZW50cnk6IHdpbGwgb3BlbiBpbiBmX29wLSZndDtvcGVuICovCiYjNDM7CQkvKiBDYWNoZWQgcG9zaXRpdmUgZGVudHJ5OiB3aWxsIG9wZW4gaW4gZG9fb3BlbigpLiAqLwogCQlyZXR1cm4gZGVudHJ5OwogCX0KIApAQCAtNDQ1OSwxOSAmIzQzOzQ1NDAsMjQgQEAgc3RhdGljIHN0cnVjdCBkZW50cnkgKmxvb2t1cF9vcGVuKHN0cnVjdCBuYW1laWRhdGEgKm5kLCBzdHJ1Y3QgZmlsZSAqZmlsZSwKIAlpZiAob3Blbl9mbGFnICZhbXA7IE9fQ1JFQVQpIHsKIAkJaWYgKG9wZW5fZmxhZyAmYW1wOyBPX0VYQ0wpCiAJCQlvcGVuX2ZsYWcgJmFtcDs9IH5PX1RSVU5DOwotCQltb2RlID0gdmZzX3ByZXBhcmVfbW9kZShpZG1hcCwgZGlyLSZndDtkX2lub2RlLCBtb2RlLCBtb2RlLCBtb2RlKTsKJiM0MzsJCW1vZGUgPSBvX2NyZWF0ZV9tb2RlKGlkbWFwLCBkaXJfaW5vZGUsIG1vZGUsIGNyZWF0ZV9kaXIpOwogCQlpZiAobGlrZWx5KGdvdF93cml0ZSkpCiAJCQljcmVhdGVfZXJyb3IgPSBtYXlfb19jcmVhdGUoaWRtYXAsICZhbXA7bmQtJmd0O3BhdGgsCi0JCQkJCQkgICAgZGVudHJ5LCBtb2RlKTsKJiM0MzsJCQkJCQkgICAgZGVudHJ5LCBtb2RlLCBjcmVhdGVfZGlyKTsKIAkJZWxzZQogCQkJY3JlYXRlX2Vycm9yID0gLUVST0ZTOwomIzQzOwkJLyogUmVmdXNlIHRvIGNyZWF0ZSBhIGRpcmVjdG9yeSB0aHJvdWdoIGEgZGFuZ2xpbmcgKHRyYWlsaW5nKQomIzQzOwkJICogc3ltbGluay4gRm9yIHJlZ3VsYXIgZmlsZXMgdGhpcyBoYXMgYmVlbiBhbGxvd2VkIGhpc3RvcmljYWxseQomIzQzOwkJICogb24gT19DUkVBVCB3aXRob3V0IE9fRVhDTC4gKi8KJiM0MzsJCWlmICh1bmxpa2VseShuZC0mZ3Q7ZGVwdGgpICZhbXA7JmFtcDsgY3JlYXRlX2RpciAmYW1wOyZhbXA7ICFjcmVhdGVfZXJyb3IpCiYjNDM7CQkJY3JlYXRlX2Vycm9yID0gLUVFWElTVDsKIAl9CiAJaWYgKGNyZWF0ZV9lcnJvcikKIAkJb3Blbl9mbGFnICZhbXA7PSB+T19DUkVBVDsKIAlpZiAoZGlyX2lub2RlLSZndDtpX29wLSZndDthdG9taWNfb3BlbikgewogCQlpZiAobmQtJmd0O2ZsYWdzICZhbXA7IExPT0tVUF9ESVJFQ1RPUlkpCiAJCQlvcGVuX2ZsYWcgfD0gT19ESVJFQ1RPUlk7Ci0JCWRlbnRyeSA9IGF0b21pY19vcGVuKCZhbXA7bmQtJmd0O3BhdGgsIGRlbnRyeSwgZmlsZSwgb3Blbl9mbGFnLCBtb2RlKTsKJiM0MzsJCWRlbnRyeSA9IGF0b21pY19vcGVuKCZhbXA7bmQtJmd0O3BhdGgsIGRlbnRyeSwgZmlsZSwgb3Blbl9mbGFnLCBtb2RlLCBjcmVhdGVfZXJyb3IpOwogCQlpZiAodW5saWtlbHkoY3JlYXRlX2Vycm9yKSAmYW1wOyZhbXA7IGRlbnRyeSA9PSBFUlJfUFRSKC1FTk9FTlQpKQogCQkJZGVudHJ5ID0gRVJSX1BUUihjcmVhdGVfZXJyb3IpOwogCQlyZXR1cm4gZGVudHJ5OwpAQCAtNDQ5MCwzMCAmIzQzOzQ1NzYsNDQgQEAgc3RhdGljIHN0cnVjdCBkZW50cnkgKmxvb2t1cF9vcGVuKHN0cnVjdCBuYW1laWRhdGEgKm5kLCBzdHJ1Y3QgZmlsZSAqZmlsZSwKIAkJCWRlbnRyeSA9IHJlczsKIAkJfQogCX0KJiM0MzsJaWYgKGRlbnRyeS0mZ3Q7ZF9pbm9kZSB8fCAhKG9wLSZndDtvcGVuX2ZsYWcgJmFtcDsgT19DUkVBVCkpIHsKJiM0MzsJCS8qIE5vIG5lZWQgdG8gY3JlYXRlIGEgZmlsZS4gSWYgbG9va3VwIHJldHVybmVkIGEgcG9zaXRpdmUKJiM0MzsJCSAqIGRlbnRyeSwgdGhlIGZpbGUgd2lsbCBiZSBvcGVuZWQgaW4gZG9fb3BlbigpLiAqLwomIzQzOwkJcmV0dXJuIGRlbnRyeTsKJiM0MzsJfQogCi0JLyogTmVnYXRpdmUgZGVudHJ5LCBqdXN0IGNyZWF0ZSB0aGUgZmlsZSAqLwotCWlmICghZGVudHJ5LSZndDtkX2lub2RlICZhbXA7JmFtcDsgKG9wZW5fZmxhZyAmYW1wOyBPX0NSRUFUKSkgewotCQkvKiBidXQgYnJlYWsgdGhlIGRpcmVjdG9yeSBsZWFzZSBmaXJzdCEgKi8KLQkJZXJyb3IgPSB0cnlfYnJlYWtfZGVsZWcoZGlyX2lub2RlLCBMRUFTRV9CUkVBS19ESVJfQ1JFQVRFLCBkZWxlZ2F0ZWRfaW5vZGUpOwotCQlpZiAoZXJyb3IpCi0JCQlnb3RvIG91dF9kcHV0OwotCi0JCWZpbGUtJmd0O2ZfbW9kZSB8PSBGTU9ERV9DUkVBVEVEOwotCQlhdWRpdF9pbm9kZV9jaGlsZChkaXJfaW5vZGUsIGRlbnRyeSwgQVVESVRfVFlQRV9DSElMRF9DUkVBVEUpOwotCQlpZiAoIWRpcl9pbm9kZS0mZ3Q7aV9vcC0mZ3Q7Y3JlYXRlKSB7Ci0JCQllcnJvciA9IC1FQUNDRVM7Ci0JCQlnb3RvIG91dF9kcHV0OwotCQl9CiYjNDM7CS8qIE5lZ2F0aXZlIGRlbnRyeSB3aXRoIE9fQ1JFQVQgZmxhZyBzZXQgKi8KJiM0MzsJYXVkaXRfaW5vZGVfY2hpbGQoZGlyLSZndDtkX2lub2RlLCBkZW50cnksIEFVRElUX1RZUEVfQ0hJTERfQ1JFQVRFKTsKIAotCQllcnJvciA9IGRpcl9pbm9kZS0mZ3Q7aV9vcC0mZ3Q7Y3JlYXRlKGlkbWFwLCBkaXJfaW5vZGUsIGRlbnRyeSwKLQkJCQkJCW1vZGUsIG9wZW5fZmxhZyAmYW1wOyBPX0VYQ0wpOwotCQlpZiAoZXJyb3IpCi0JCQlnb3RvIG91dF9kcHV0OwotCX0KLQlpZiAodW5saWtlbHkoY3JlYXRlX2Vycm9yKSAmYW1wOyZhbXA7ICFkZW50cnktJmd0O2RfaW5vZGUpIHsKJiM0MzsJaWYgKHVubGlrZWx5KGNyZWF0ZV9lcnJvcikpIHsKJiM0MzsJCS8qIFNob3VsZCBoYXZlIGRvbmUgYSBjcmVhdGUsIGJ1dCB3ZSBhbHJlYWR5IGVycm9yZWQgKi8KIAkJZXJyb3IgPSBjcmVhdGVfZXJyb3I7CiAJCWdvdG8gb3V0X2RwdXQ7CiAJfQomIzQzOwomIzQzOwlpZiAoKGNyZWF0ZV9kaXIgJmFtcDsmYW1wOyAhZGlyX2lub2RlLSZndDtpX29wLSZndDtta2RpcikKJiM0MzsJICAgIHx8ICghY3JlYXRlX2RpciAmYW1wOyZhbXA7ICFkaXJfaW5vZGUtJmd0O2lfb3AtJmd0O2NyZWF0ZSkpIHsKJiM0MzsJCWVycm9yID0gLUVBQ0NFUzsKJiM0MzsJCWdvdG8gb3V0X2RwdXQ7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKGNyZWF0ZV9kaXIpIHsKJiM0MzsJCXN0cnVjdCBkZW50cnkgKnJlcyA9IHZmc19ta2Rpcl9ub19wZXJtKGlkbWFwLCBkaXJfaW5vZGUsIGRlbnRyeSwKJiM0MzsJCQkJCQkgICAgICAgbW9kZSwgZGVsZWdhdGVkX2lub2RlKTsKJiM0MzsJCWlmIChJU19FUlIocmVzKSkgewomIzQzOwkJCWVycm9yID0gUFRSX0VSUihyZXMpOwomIzQzOwkJfSBlbHNlIHsKJiM0MzsJCQllcnJvciA9IDA7CiYjNDM7CQkJZGVudHJ5ID0gcmVzOwomIzQzOwkJfQomIzQzOwl9IGVsc2UgewomIzQzOwkJZXJyb3IgPSB2ZnNfY3JlYXRlX25vX3Blcm0oaWRtYXAsIGRlbnRyeSwgbW9kZSwgZGVsZWdhdGVkX2lub2RlKTsKJiM0MzsJfQomIzQzOwlpZiAoZXJyb3IpCiYjNDM7CQlnb3RvIG91dF9kcHV0OwomIzQzOwomIzQzOwlmaWxlLSZndDtmX21vZGUgfD0gRk1PREVfQ1JFQVRFRDsKJiM0MzsKIAlyZXR1cm4gZGVudHJ5OwogCiBvdXRfZHB1dDoKQEAgLTQ1MjEsMTcgJiM0Mzs0NjIxLDEyIEBAIHN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpsb29rdXBfb3BlbihzdHJ1Y3QgbmFtZWlkYXRhICpuZCwgc3RydWN0IGZpbGUgKmZpbGUsCiAJcmV0dXJuIEVSUl9QVFIoZXJyb3IpOwogfQogCi1zdGF0aWMgaW5saW5lIGJvb2wgdHJhaWxpbmdfc2xhc2hlcyhzdHJ1Y3QgbmFtZWlkYXRhICpuZCkKLXsKLQlyZXR1cm4gKGJvb2wpbmQtJmd0O2xhc3QubmFtZVtuZC0mZ3Q7bGFzdC5sZW5dOwotfQotCiBzdGF0aWMgc3RydWN0IGRlbnRyeSAqbG9va3VwX2Zhc3RfZm9yX29wZW4oc3RydWN0IG5hbWVpZGF0YSAqbmQsIGludCBvcGVuX2ZsYWcpCiB7CiAJc3RydWN0IGRlbnRyeSAqZGVudHJ5OwogCiAJaWYgKG9wZW5fZmxhZyAmYW1wOyBPX0NSRUFUKSB7Ci0JCWlmICh0cmFpbGluZ19zbGFzaGVzKG5kKSkKJiM0MzsJCWlmICh0cmFpbGluZ19zbGFzaGVzKG5kLSZndDtsYXN0KSAmYW1wOyZhbXA7ICEob3Blbl9mbGFnICZhbXA7IE9fRElSRUNUT1JZKSkKIAkJCXJldHVybiBFUlJfUFRSKC1FSVNESVIpOwogCiAJCS8qIERvbiYjMzk7dCBib3RoZXIgb24gYW4gT19FWENMIGNyZWF0ZSAqLwpAQCAtNDUzOSw3ICYjNDM7NDYzNCw3IEBAIHN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpsb29rdXBfZmFzdF9mb3Jfb3BlbihzdHJ1Y3QgbmFtZWlkYXRhICpuZCwgaW50IG9wZW5fZmxhZykKIAkJCXJldHVybiBOVUxMOwogCX0KIAotCWlmICh0cmFpbGluZ19zbGFzaGVzKG5kKSkKJiM0MzsJaWYgKHRyYWlsaW5nX3NsYXNoZXMobmQtJmd0O2xhc3QpKQogCQluZC0mZ3Q7ZmxhZ3MgfD0gTE9PS1VQX0ZPTExPVyB8IExPT0tVUF9ESVJFQ1RPUlk7CiAKIAlkZW50cnkgPSBsb29rdXBfZmFzdChuZCk7CkBAIC00NjAyLDE2ICYjNDM7NDY5NywxMiBAQCBzdGF0aWMgY29uc3QgY2hhciAqb3Blbl9sYXN0X2xvb2t1cHMoc3RydWN0IG5hbWVpZGF0YSAqbmQsCiAJCSAqLwogCX0KIAlpZiAob3Blbl9mbGFnICZhbXA7IE9fQ1JFQVQpCi0JCWlub2RlX2xvY2soZGlyLSZndDtkX2lub2RlKTsKJiM0MzsJCWlub2RlX2xvY2tfbmVzdGVkKGRpci0mZ3Q7ZF9pbm9kZSwgSV9NVVRFWF9QQVJFTlQpOwogCWVsc2UKIAkJaW5vZGVfbG9ja19zaGFyZWQoZGlyLSZndDtkX2lub2RlKTsKJiM0MzsKIAlkZW50cnkgPSBsb29rdXBfb3BlbihuZCwgZmlsZSwgb3AsIGdvdF93cml0ZSwgJmFtcDtkZWxlZ2F0ZWRfaW5vZGUpOwotCWlmICghSVNfRVJSKGRlbnRyeSkpIHsKLQkJaWYgKGZpbGUtJmd0O2ZfbW9kZSAmYW1wOyBGTU9ERV9DUkVBVEVEKQotCQkJZnNub3RpZnlfY3JlYXRlKGRpci0mZ3Q7ZF9pbm9kZSwgZGVudHJ5KTsKLQkJaWYgKGZpbGUtJmd0O2ZfbW9kZSAmYW1wOyBGTU9ERV9PUEVORUQpCi0JCQlmc25vdGlmeV9vcGVuKGZpbGUpOwotCX0KJiM0MzsKIAlpZiAob3Blbl9mbGFnICZhbXA7IE9fQ1JFQVQpCiAJCWlub2RlX3VubG9jayhkaXItJmd0O2RfaW5vZGUpOwogCWVsc2UKQEAgLTQ2NjksOCAmIzQzOzQ3NjAsOSBAQCBzdGF0aWMgaW50IGRvX29wZW4oc3RydWN0IG5hbWVpZGF0YSAqbmQsCiAJaWYgKG9wZW5fZmxhZyAmYW1wOyBPX0NSRUFUKSB7CiAJCWlmICgob3Blbl9mbGFnICZhbXA7IE9fRVhDTCkgJmFtcDsmYW1wOyAhKGZpbGUtJmd0O2ZfbW9kZSAmYW1wOyBGTU9ERV9DUkVBVEVEKSkKIAkJCXJldHVybiAtRUVYSVNUOwotCQlpZiAoZF9pc19kaXIobmQtJmd0O3BhdGguZGVudHJ5KSkKJiM0MzsJCWlmICghKG9wZW5fZmxhZyAmYW1wOyBPX0RJUkVDVE9SWSkgJmFtcDsmYW1wOyBkX2lzX2RpcihuZC0mZ3Q7cGF0aC5kZW50cnkpKQogCQkJcmV0dXJuIC1FSVNESVI7CiYjNDM7CiAJCWVycm9yID0gbWF5X2NyZWF0ZV9pbl9zdGlja3koaWRtYXAsIG5kLAogCQkJCQkgICAgIGRfYmFja2luZ19pbm9kZShuZC0mZ3Q7cGF0aC5kZW50cnkpKTsKIAkJaWYgKHVubGlrZWx5KGVycm9yKSkKQEAgLTQ5NTAsNyAmIzQzOzUwNDIsNyBAQCBzdGF0aWMgc3RydWN0IGRlbnRyeSAqZmlsZW5hbWVfY3JlYXRlKGludCBkZmQsIHN0cnVjdCBmaWxlbmFtZSAqbmFtZSwKIAkgKiBEbyB0aGUgZmluYWwgbG9va3VwLiAgU3VwcHJlc3MgJiMzOTtjcmVhdGUmIzM5OyBpZiB0aGVyZSBpcyBhIHRyYWlsaW5nCiAJICogJiMzOTsvJiMzOTssIGFuZCBhIGRpcmVjdG9yeSB3YXNuJiMzOTt0IHJlcXVlc3RlZC4KIAkgKi8KLQlpZiAobGFzdC5uYW1lW2xhc3QubGVuXSAmYW1wOyZhbXA7ICF3YW50X2RpcikKJiM0MzsJaWYgKHRyYWlsaW5nX3NsYXNoZXMobGFzdCkgJmFtcDsmYW1wOyAhd2FudF9kaXIpCiAJCWNyZWF0ZV9mbGFncyAmYW1wOz0gfkxPT0tVUF9DUkVBVEU7CiAJZGVudHJ5ID0gc3RhcnRfZGlyb3AocGF0aC0mZ3Q7ZGVudHJ5LCAmYW1wO2xhc3QsIHJldmFsX2ZsYWcgfCBjcmVhdGVfZmxhZ3MpOwogCWlmIChJU19FUlIoZGVudHJ5KSkKQEAgLTUwNDUsMTMgJiM0Mzs1MTM3LDEzIEBAIHN0cnVjdCBmaWxlICpkZW50cnlfY3JlYXRlKHN0cnVjdCBwYXRoICpwYXRoLCBpbnQgZmxhZ3MsIHVtb2RlX3QgbW9kZSwKIAkJcGF0aC0mZ3Q7ZGVudHJ5ID0gZGlyOwogCQltb2RlID0gdmZzX3ByZXBhcmVfbW9kZShpZG1hcCwgZGlyX2lub2RlLCBtb2RlLCBTX0lBTExVR08sIFNfSUZSRUcpOwogCi0JCWNyZWF0ZV9lcnJvciA9IG1heV9vX2NyZWF0ZShpZG1hcCwgcGF0aCwgZGVudHJ5LCBtb2RlKTsKJiM0MzsJCWNyZWF0ZV9lcnJvciA9IG1heV9vX2NyZWF0ZShpZG1hcCwgcGF0aCwgZGVudHJ5LCBtb2RlLCAvKmNyZWF0ZV9kaXI9Ki8gZmFsc2UpOwogCQlpZiAoY3JlYXRlX2Vycm9yKQogCQkJZmxhZ3MgJmFtcDs9IH5PX0NSRUFUOwogCiAJCS8qIGF0b21pY19vcGVuIHdpbGwgZHB1dChkZW50cnkpIG9uIGVycm9yICovCiAJCWRnZXQob3JpZ19kZW50cnkpOwotCQlkZW50cnkgPSBhdG9taWNfb3BlbihwYXRoLCBkZW50cnksIGZpbGUsIGZsYWdzLCBtb2RlKTsKJiM0MzsJCWRlbnRyeSA9IGF0b21pY19vcGVuKHBhdGgsIGRlbnRyeSwgZmlsZSwgZmxhZ3MsIG1vZGUsIGNyZWF0ZV9lcnJvcik7CiAJCWVycm9yID0gUFRSX0VSUl9PUl9aRVJPKGRlbnRyeSk7CiAKIAkJaWYgKElTX0VSUihkZW50cnkpKQpAQCAtNTA2NCwxMyAmIzQzOzUxNTYsNiBAQCBzdHJ1Y3QgZmlsZSAqZGVudHJ5X2NyZWF0ZShzdHJ1Y3QgcGF0aCAqcGF0aCwgaW50IGZsYWdzLCB1bW9kZV90IG1vZGUsCiAJCWlmICh1bmxpa2VseShjcmVhdGVfZXJyb3IpICZhbXA7JmFtcDsgZXJyb3IgPT0gLUVOT0VOVCkKIAkJCWVycm9yID0gY3JlYXRlX2Vycm9yOwogCi0JCWlmICghZXJyb3IpIHsKLQkJCWlmIChmaWxlLSZndDtmX21vZGUgJmFtcDsgRk1PREVfQ1JFQVRFRCkKLQkJCQlmc25vdGlmeV9jcmVhdGUoZGlyLSZndDtkX2lub2RlLCBkZW50cnkpOwotCQkJaWYgKGZpbGUtJmd0O2ZfbW9kZSAmYW1wOyBGTU9ERV9PUEVORUQpCi0JCQkJZnNub3RpZnlfb3BlbihmaWxlKTsKLQkJfQotCiAJCXBhdGgtJmd0O2RlbnRyeSA9IGRlbnRyeTsKIAogCX0gZWxzZSB7CkBAIC01MjIyLDYgJiM0Mzs1MzA3LDM5IEBAIFNZU0NBTExfREVGSU5FMyhta25vZCwgY29uc3QgY2hhciBfX3VzZXIgKiwgZmlsZW5hbWUsIHVtb2RlX3QsIG1vZGUsIHVuc2lnbmVkLCBkCiAJcmV0dXJuIGZpbGVuYW1lX21rbm9kYXQoQVRfRkRDV0QsIG5hbWUsIG1vZGUsIGRldik7CiB9CiAKJiM0MztzdGF0aWMgaW5saW5lCiYjNDM7c3RydWN0IGRlbnRyeSAqdmZzX21rZGlyX25vX3Blcm0oc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLAomIzQzOwkJCQkgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUsCiYjNDM7CQkJCSBzdHJ1Y3QgZGVsZWdhdGVkX2lub2RlICpkaSkKJiM0Mzt7CiYjNDM7CWludCBlcnJvcjsKJiM0MzsJc3RydWN0IGRlbnRyeSAqZGU7CiYjNDM7CXVuc2lnbmVkIG1heF9saW5rcyA9IGRpci0mZ3Q7aV9zYi0mZ3Q7c19tYXhfbGlua3M7CiYjNDM7CiYjNDM7CWVycm9yID0gLUVNTElOSzsKJiM0MzsJaWYgKG1heF9saW5rcyAmYW1wOyZhbXA7IGRpci0mZ3Q7aV9ubGluayAmZ3Q7PSBtYXhfbGlua3MpCiYjNDM7CQlnb3RvIGVycjsKJiM0MzsKJiM0MzsJZXJyb3IgPSB0cnlfYnJlYWtfZGVsZWcoZGlyLCBMRUFTRV9CUkVBS19ESVJfQ1JFQVRFLCBkaSk7CiYjNDM7CWlmIChlcnJvcikKJiM0MzsJCWdvdG8gZXJyOwomIzQzOwomIzQzOwlkZSA9IGRpci0mZ3Q7aV9vcC0mZ3Q7bWtkaXIoaWRtYXAsIGRpciwgZGVudHJ5LCBtb2RlKTsKJiM0MzsJaWYgKElTX0VSUihkZSkpIHsKJiM0MzsJCWVycm9yID0gUFRSX0VSUihkZSk7CiYjNDM7CQlnb3RvIGVycjsKJiM0MzsJfQomIzQzOwlpZiAoZGUpIHsKJiM0MzsJCWRwdXQoZGVudHJ5KTsKJiM0MzsJCWRlbnRyeSA9IGRlOwomIzQzOwl9CiYjNDM7CWZzbm90aWZ5X21rZGlyKGRpciwgZGVudHJ5KTsKJiM0MzsJcmV0dXJuIGRlbnRyeTsKJiM0MzsKJiM0MztlcnI6CiYjNDM7CXJldHVybiBFUlJfUFRSKGVycm9yKTsKJiM0Mzt9CiYjNDM7CiAvKioKICAqIHZmc19ta2RpciAtIGNyZWF0ZSBkaXJlY3RvcnkgcmV0dXJuaW5nIGNvcnJlY3QgZGVudHJ5IGlmIHBvc3NpYmxlCiAgKiBAaWRtYXA6CQlpZG1hcCBvZiB0aGUgbW91bnQgdGhlIGlub2RlIHdhcyBmb3VuZCBmcm9tCkBAIC01MjQ5LDcgJiM0Mzs1MzY3LDYgQEAgc3RydWN0IGRlbnRyeSAqdmZzX21rZGlyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpciwKIAkJCSBzdHJ1Y3QgZGVsZWdhdGVkX2lub2RlICpkZWxlZ2F0ZWRfaW5vZGUpCiB7CiAJaW50IGVycm9yOwotCXVuc2lnbmVkIG1heF9saW5rcyA9IGRpci0mZ3Q7aV9zYi0mZ3Q7c19tYXhfbGlua3M7CiAJc3RydWN0IGRlbnRyeSAqZGU7CiAKIAllcnJvciA9IG1heV9jcmVhdGVfZGVudHJ5KGlkbWFwLCBkaXIsIGRlbnRyeSk7CkBAIC01MjY1LDI0ICYjNDM7NTM4MiwxMiBAQCBzdHJ1Y3QgZGVudHJ5ICp2ZnNfbWtkaXIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLAogCWlmIChlcnJvcikKIAkJZ290byBlcnI7CiAKLQllcnJvciA9IC1FTUxJTks7Ci0JaWYgKG1heF9saW5rcyAmYW1wOyZhbXA7IGRpci0mZ3Q7aV9ubGluayAmZ3Q7PSBtYXhfbGlua3MpCi0JCWdvdG8gZXJyOwotCi0JZXJyb3IgPSB0cnlfYnJlYWtfZGVsZWcoZGlyLCBMRUFTRV9CUkVBS19ESVJfQ1JFQVRFLCBkZWxlZ2F0ZWRfaW5vZGUpOwotCWlmIChlcnJvcikKLQkJZ290byBlcnI7Ci0KLQlkZSA9IGRpci0mZ3Q7aV9vcC0mZ3Q7bWtkaXIoaWRtYXAsIGRpciwgZGVudHJ5LCBtb2RlKTsKLQllcnJvciA9IFBUUl9FUlIoZGUpOwotCWlmIChJU19FUlIoZGUpKQomIzQzOwlkZSA9IHZmc19ta2Rpcl9ub19wZXJtKGlkbWFwLCBkaXIsIGRlbnRyeSwgbW9kZSwgZGVsZWdhdGVkX2lub2RlKTsKJiM0MzsJaWYgKElTX0VSUihkZSkpIHsKJiM0MzsJCWVycm9yID0gUFRSX0VSUihkZSk7CiAJCWdvdG8gZXJyOwotCWlmIChkZSkgewotCQlkcHV0KGRlbnRyeSk7Ci0JCWRlbnRyeSA9IGRlOwogCX0KLQlmc25vdGlmeV9ta2RpcihkaXIsIGRlbnRyeSk7Ci0JcmV0dXJuIGRlbnRyeTsKJiM0MzsJcmV0dXJuIGRlOwogCiBlcnI6CiAJZW5kX2NyZWF0aW5nKGRlbnRyeSk7CkBAIC01NTY5LDcgJiM0Mzs1Njc0LDcgQEAgaW50IGZpbGVuYW1lX3VubGlua2F0KGludCBkZmQsIHN0cnVjdCBmaWxlbmFtZSAqbmFtZSkKIAkJZ290byBleGl0X2Ryb3Bfd3JpdGU7CiAKIAkvKiBXaHkgbm90IGJlZm9yZT8gQmVjYXVzZSB3ZSB3YW50IGNvcnJlY3QgZXJyb3IgdmFsdWUgKi8KLQlpZiAodW5saWtlbHkobGFzdC5uYW1lW2xhc3QubGVuXSkpIHsKJiM0MzsJaWYgKHVubGlrZWx5KHRyYWlsaW5nX3NsYXNoZXMobGFzdCkpKSB7CiAJCWlmIChkX2lzX2RpcihkZW50cnkpKQogCQkJZXJyb3IgPSAtRUlTRElSOwogCQllbHNlCkBAIC02MTcxLDE2ICYjNDM7NjI3NiwxNiBAQCBpbnQgZmlsZW5hbWVfcmVuYW1lYXQyKGludCBvbGRkZmQsIHN0cnVjdCBmaWxlbmFtZSAqZnJvbSwKIAlpZiAoZmxhZ3MgJmFtcDsgUkVOQU1FX0VYQ0hBTkdFKSB7CiAJCWlmICghZF9pc19kaXIocmQubmV3X2RlbnRyeSkpIHsKIAkJCWVycm9yID0gLUVOT1RESVI7Ci0JCQlpZiAobmV3X2xhc3QubmFtZVtuZXdfbGFzdC5sZW5dKQomIzQzOwkJCWlmICh0cmFpbGluZ19zbGFzaGVzKG5ld19sYXN0KSkKIAkJCQlnb3RvIGV4aXRfdW5sb2NrOwogCQl9CiAJfQogCS8qIHVubGVzcyB0aGUgc291cmNlIGlzIGEgZGlyZWN0b3J5IHRyYWlsaW5nIHNsYXNoZXMgZ2l2ZSAtRU5PVERJUiAqLwogCWlmICghZF9pc19kaXIocmQub2xkX2RlbnRyeSkpIHsKIAkJZXJyb3IgPSAtRU5PVERJUjsKLQkJaWYgKG9sZF9sYXN0Lm5hbWVbb2xkX2xhc3QubGVuXSkKJiM0MzsJCWlmICh0cmFpbGluZ19zbGFzaGVzKG9sZF9sYXN0KSkKIAkJCWdvdG8gZXhpdF91bmxvY2s7Ci0JCWlmICghKGZsYWdzICZhbXA7IFJFTkFNRV9FWENIQU5HRSkgJmFtcDsmYW1wOyBuZXdfbGFzdC5uYW1lW25ld19sYXN0Lmxlbl0pCiYjNDM7CQlpZiAoIShmbGFncyAmYW1wOyBSRU5BTUVfRVhDSEFOR0UpICZhbXA7JmFtcDsgdHJhaWxpbmdfc2xhc2hlcyhuZXdfbGFzdCkpCiAJCQlnb3RvIGV4aXRfdW5sb2NrOwogCX0KIApkaWZmIC0tZ2l0IGEvZnMvbmZzL2Rpci5jIGIvZnMvbmZzL2Rpci5jCmluZGV4IGM3YjcyM2MxODYyMGM5Li5jODE1ZDlhYTliNjlkYSAxMDA2NDQKLS0tIGEvZnMvbmZzL2Rpci5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL25mcy9kaXIuYwpAQCAtMjEyMSw2ICYjNDM7MjEyMSw5IEBAIGludCBuZnNfYXRvbWljX29wZW4oc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwKIAlkZnByaW50ayhWRlMsICYjMzQ7TkZTOiBhdG9taWNfb3Blbiglcy8lbGx1KSwgJXBkXG4mIzM0OywKIAkJCWRpci0mZ3Q7aV9zYi0mZ3Q7c19pZCwgZGlyLSZndDtpX2lubywgZGVudHJ5KTsKIAomIzQzOwlpZiAoT19JU19NS0RJUihvcGVuX2ZsYWdzKSkKJiM0MzsJCW9wZW5fZmxhZ3MgJmFtcDs9IH5PX0NSRUFUOwomIzQzOwogCWVyciA9IG5mc19jaGVja19mbGFncyhvcGVuX2ZsYWdzKTsKIAlpZiAoZXJyKQogCQlyZXR1cm4gZXJyOwpAQCAtMjMxMyw2ICYjNDM7MjMxNiw5IEBAIGludCBuZnNfYXRvbWljX29wZW5fdjIzKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksCiAJICovCiAJaW50IGVycm9yID0gMDsKIAomIzQzOwlpZiAoT19JU19NS0RJUihvcGVuX2ZsYWdzKSkKJiM0MzsJCW9wZW5fZmxhZ3MgJmFtcDs9IH5PX0NSRUFUOwomIzQzOwogCWlmIChkZW50cnktJmd0O2RfbmFtZS5sZW4gJmd0OyBORlNfU0VSVkVSKGRpciktJmd0O25hbWVsZW4pCiAJCXJldHVybiAtRU5BTUVUT09MT05HOwogCmRpZmYgLS1naXQgYS9mcy9vcGVuLmMgYi9mcy9vcGVuLmMKaW5kZXggNDA4OTI1ZDdiZDBiNzcuLjg3ZTg4NjRkOTQ4MDg3IDEwMDY0NAotLS0gYS9mcy9vcGVuLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvb3Blbi5jCkBAIC0xMTkwLDI5ICYjNDM7MTE5MCwzMCBAQCBpbmxpbmUgaW50IGJ1aWxkX29wZW5fZmxhZ3MoY29uc3Qgc3RydWN0IG9wZW5faG93ICpob3csIHN0cnVjdCBvcGVuX2ZsYWdzICpvcCkKIAlpZiAoV0lMTF9DUkVBVEUoZmxhZ3MpKSB7CiAJCWlmIChob3ctJmd0O21vZGUgJmFtcDsgflNfSUFMTFVHTykKIAkJCXJldHVybiAtRUlOVkFMOwotCQlvcC0mZ3Q7bW9kZSA9IGhvdy0mZ3Q7bW9kZSB8IFNfSUZSRUc7CiYjNDM7CQlpZiAoT19JU19NS0RJUihmbGFncykpCiYjNDM7CQkJb3AtJmd0O21vZGUgPSBob3ctJmd0O21vZGUgfCBTX0lGRElSOwomIzQzOwkJZWxzZQomIzQzOwkJCW9wLSZndDttb2RlID0gaG93LSZndDttb2RlIHwgU19JRlJFRzsKIAl9IGVsc2UgewogCQlpZiAoaG93LSZndDttb2RlICE9IDApCiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJb3AtJmd0O21vZGUgPSAwOwogCX0KIAotCS8qCi0JICogQmxvY2sgYnVncyB3aGVyZSBPX0RJUkVDVE9SWSB8IE9fQ1JFQVQgY3JlYXRlZCByZWd1bGFyIGZpbGVzLgotCSAqIE5vdGUsIHRoYXQgYmxvY2tpbmcgT19ESVJFQ1RPUlkgfCBPX0NSRUFUIGhlcmUgYWxzbyBwcm90ZWN0cwotCSAqIE9fVE1QRklMRSBiZWxvdyB3aGljaCByZXF1aXJlcyBPX0RJUkVDVE9SWSBiZWluZyByYWlzZWQuCi0JICovCi0JaWYgKChmbGFncyAmYW1wOyAoT19ESVJFQ1RPUlkgfCBPX0NSRUFUKSkgPT0gKE9fRElSRUNUT1JZIHwgT19DUkVBVCkpCi0JCXJldHVybiAtRUlOVkFMOwotCiAJLyogTm93IGhhbmRsZSB0aGUgY3JlYXRpdmUgaW1wbGVtZW50YXRpb24gb2YgT19UTVBGSUxFLiAqLwogCWlmIChmbGFncyAmYW1wOyBfX09fVE1QRklMRSkgewogCQkvKgogCQkgKiBJbiBvcmRlciB0byBlbnN1cmUgcHJvZ3JhbXMgZ2V0IGV4cGxpY2l0IGVycm9ycyB3aGVuIHRyeWluZwogCQkgKiB0byB1c2UgT19UTVBGSUxFIG9uIG9sZCBrZXJuZWxzIHdlIGVuZm9yY2UgdGhhdCBPX0RJUkVDVE9SWQotCQkgKiBpcyByYWlzZWQgYWxvbmdzaWRlIF9fT19UTVBGSUxFLgomIzQzOwkJICogaXMgcmFpc2VkIGFsb25nc2lkZSBfX09fVE1QRklMRSwgYnV0IHdpdGhvdXQgT19DUkVBVC4gVGhlCiYjNDM7CQkgKiByZWFzb24gZm9yIGRpc2FsbG93aW5nIE9fQ1JFQVR8T19UTVBGSUxFIGlzIHRoYXQKJiM0MzsJCSAqIE9fRElSRUNUT1JZfE9fQ1JFQVQgdXNlZCB0byB3b3JrIGFuZCBjcmVhdGVkIGEgcmVndWxhciBmaWxlCiYjNDM7CQkgKiBpZiBub3RoaW5nIGV4aXN0ZWQgYXQgdGhlIG9wZW4gcGF0aC4gSGVuY2UsIGFsbG93aW5nIHRoZQomIzQzOwkJICogY29tYmluYXRpb24gd291bGQgaGF2ZSBjYXVzZWQgT19DUkVBVHxPX1RNUEZJTEUgdG8gY3JlYXRlIGEKJiM0MzsJCSAqIHJlZ3VsYXIgKG5vbi10ZW1wb3JhcnkpIGZpbGUgb24gb2xkIGtlcm5lbHMsIHdoaWxlIHRoZSBjYWxsZXIKJiM0MzsJCSAqIHdvdWxkIGJlbGlldmUgdGhleSBjcmVhdGVkIGFuIGFjdHVhbCBPX1RNUEZJTEUuCiAJCSAqLwotCQlpZiAoIShmbGFncyAmYW1wOyBPX0RJUkVDVE9SWSkpCiYjNDM7CQlpZiAoIShmbGFncyAmYW1wOyBPX0RJUkVDVE9SWSkgfHwgKGZsYWdzICZhbXA7IE9fQ1JFQVQpKQogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCWlmICghKGFjY19tb2RlICZhbXA7IE1BWV9XUklURSkpCiAJCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTEyNjksNiAmIzQzOzEyNzAsMTUgQEAgaW5saW5lIGludCBidWlsZF9vcGVuX2ZsYWdzKGNvbnN0IHN0cnVjdCBvcGVuX2hvdyAqaG93LCBzdHJ1Y3Qgb3Blbl9mbGFncyAqb3ApCiAKIAlvcC0mZ3Q7aW50ZW50ID0gZmxhZ3MgJmFtcDsgT19QQVRIID8gMCA6IExPT0tVUF9PUEVOOwogCiYjNDM7CS8qCiYjNDM7CSAqIFJlcXVlc3Rpbmcgd3JpdGUgYWNjZXNzIG9uIGEgZGlyZWN0b3J5IGNhbiBuZXZlciBzdWNjZWVkLiBSYXRoZXIKJiM0MzsJICogdGhhbiBwZXJmb3JtaW5nIGEgcGF0aC13YWxrIHRvIGRldGVybWluZSB3aGV0aGVyIHRoZSB0YXJnZXQgaXMKJiM0MzsJICogYWN0dWFsbHkgYSBkaXJlY3RvcnkgKC1FSVNESVIpIG9yIG5vdCAoLUVOT1RESVIpLCB3ZSBzaG9ydC1jaXJjdWl0CiYjNDM7CSAqIHRvIC1FTk9URElSLgomIzQzOwkgKi8KJiM0MzsJaWYgKChmbGFncyAmYW1wOyBPX0RJUkVDVE9SWSkgJmFtcDsmYW1wOyAhKGZsYWdzICZhbXA7IF9fT19UTVBGSUxFKSAmYW1wOyZhbXA7IChhY2NfbW9kZSAmYW1wOyBNQVlfV1JJVEUpKQomIzQzOwkJcmV0dXJuIC1FTk9URElSOwomIzQzOwogCWlmIChmbGFncyAmYW1wOyBPX0NSRUFUKSB7CiAJCW9wLSZndDtpbnRlbnQgfD0gTE9PS1VQX0NSRUFURTsKIAkJaWYgKGZsYWdzICZhbXA7IE9fRVhDTCkgewpkaWZmIC0tZ2l0IGEvZnMvc21iL2NsaWVudC9kaXIuYyBiL2ZzL3NtYi9jbGllbnQvZGlyLmMKaW5kZXggODhhNGExNzg3ZmYwNDcuLjc1YmY4NmNjMDYxMjJlIDEwMDY0NAotLS0gYS9mcy9zbWIvY2xpZW50L2Rpci5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL3NtYi9jbGllbnQvZGlyLmMKQEAgLTUzOCw2ICYjNDM7NTM4LDkgQEAgaW50IGNpZnNfYXRvbWljX29wZW4oc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRpcmVudHJ5LAogCWlmICh1bmxpa2VseShjaWZzX2ZvcmNlZF9zaHV0ZG93bihjaWZzX3NiKSkpCiAJCXJldHVybiBzbWJfRUlPKHNtYl9laW9fdHJhY2VfZm9yY2VkX3NodXRkb3duKTsKIAomIzQzOwlpZiAoT19JU19NS0RJUihvZmxhZ3MpKQomIzQzOwkJb2ZsYWdzICZhbXA7PSB+T19DUkVBVDsKJiM0MzsKIAkvKgogCSAqIFBvc2l4IG9wZW4gaXMgb25seSBjYWxsZWQgKGF0IGxvb2t1cCB0aW1lKSBmb3IgZmlsZSBjcmVhdGUgbm93LiBGb3IKIAkgKiBvcGVucyAocmF0aGVyIHRoYW4gY3JlYXRlcyksIGJlY2F1c2Ugd2UgZG8gbm90IGtub3cgaWYgaXQgaXMgYSBmaWxlCmRpZmYgLS1naXQgYS9mcy92Ym94c2YvZGlyLmMgYi9mcy92Ym94c2YvZGlyLmMKaW5kZXggYzViZDMyNzFhYTk2MTYuLjc3YWUyZjY5NmZkNDM3IDEwMDY0NAotLS0gYS9mcy92Ym94c2YvZGlyLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvdmJveHNmL2Rpci5jCkBAIC0zMTgsNiAmIzQzOzMxOCw5IEBAIHN0YXRpYyBpbnQgdmJveHNmX2Rpcl9hdG9taWNfb3BlbihzdHJ1Y3QgaW5vZGUgKnBhcmVudCwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LAogCXU2NCBoYW5kbGU7CiAJaW50IGVycjsKIAomIzQzOwlpZiAoT19JU19NS0RJUihmbGFncykpCiYjNDM7CQlmbGFncyAmYW1wOz0gfk9fQ1JFQVQ7CiYjNDM7CiAJaWYgKGRfaW5fbG9va3VwKGRlbnRyeSkpIHsKIAkJc3RydWN0IGRlbnRyeSAqcmVzID0gdmJveHNmX2Rpcl9sb29rdXAocGFyZW50LCBkZW50cnksIDApOwogCQlpZiAocmVzIHx8IGRfcmVhbGx5X2lzX3Bvc2l0aXZlKGRlbnRyeSkpCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2ZjbnRsLmggYi9pbmNsdWRlL2xpbnV4L2ZjbnRsLmgKaW5kZXggNmFkNmI5ZTdhMjI2YWYuLjZiNzUyNzdiZTU1OWRkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2ZjbnRsLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9mY250bC5oCkBAIC0zMCw2ICYjNDM7MzAsMTIgQEAKICAqLwogI2RlZmluZSBfX09fUkVHVUxBUgkJKDEgJmx0OyZsdDsgMzApCiAKJiM0MzsjZGVmaW5lIE9fTUtESVJfTUFTSwkoT19DUkVBVCB8IE9fRElSRUNUT1JZKQomIzQzO3N0YXRpYyBpbmxpbmUgYm9vbCBPX0lTX01LRElSKHVuc2lnbmVkIGZsYWdzKQomIzQzO3sKJiM0MzsJcmV0dXJuIChmbGFncyAmYW1wOyBPX01LRElSX01BU0spID09IE9fTUtESVJfTUFTSzsKJiM0Mzt9CiYjNDM7CiAvKiBMaXN0IG9mIGFsbCB2YWxpZCBmbGFncyBmb3IgdGhlIGhvdy0mZ3Q7cmVzb2x2ZSBhcmd1bWVudDogKi8KICNkZWZpbmUgVkFMSURfUkVTT0xWRV9GTEFHUyBcCiAJKFJFU09MVkVfTk9fWERFViB8IFJFU09MVkVfTk9fTUFHSUNMSU5LUyB8IFJFU09MVkVfTk9fU1lNTElOS1MgfCBcCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9maWxlc3lzdGVtcy8uZ2l0aWdub3JlIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZmlsZXN5c3RlbXMvLmdpdGlnbm9yZQppbmRleCBhNzhmODk0MTU3ZGUzMy4uZDc3OWE3OTQ1Y2Y4MDMgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2ZpbGVzeXN0ZW1zLy5naXRpZ25vcmUKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZmlsZXN5c3RlbXMvLmdpdGlnbm9yZQpAQCAtMSw0ICYjNDM7MSw1IEBACiAjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHkKJiM0MztvcGVuX29fY3JlYXRfb19kaXIKIGRub3RpZnlfdGVzdAogZGV2cHRzX3B0cwogZmNsb2cKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2ZpbGVzeXN0ZW1zL01ha2VmaWxlIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZmlsZXN5c3RlbXMvTWFrZWZpbGUKaW5kZXggYTdlYzJiYTJkZDgzMzQuLmI2MDk1MGY4YjE1YzIxIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9maWxlc3lzdGVtcy9NYWtlZmlsZQomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9maWxlc3lzdGVtcy9NYWtlZmlsZQpAQCAtMSw3ICYjNDM7MSw3IEBACiAjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCiAKIENGTEFHUyAmIzQzOz0gJChLSERSX0lOQ0xVREVTKQotVEVTVF9HRU5fUFJPR1MgOj0gZGV2cHRzX3B0cyBmaWxlX3N0cmVzc29yIGFub25faW5vZGVfdGVzdCBrZXJuZnNfdGVzdCBmY2xvZwomIzQzO1RFU1RfR0VOX1BST0dTIDo9IG9wZW5fb19jcmVhdF9vX2RpciBkZXZwdHNfcHRzIGZpbGVfc3RyZXNzb3IgYW5vbl9pbm9kZV90ZXN0IGtlcm5mc190ZXN0IGZjbG9nCiBURVNUX0dFTl9QUk9HUyAmIzQzOz0gaWRtYXBwZWRfdG1wZmlsZQogVEVTVF9HRU5fUFJPR1NfRVhURU5ERUQgOj0gZG5vdGlmeV90ZXN0CiAKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2ZpbGVzeXN0ZW1zL2ZjbG9nLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9maWxlc3lzdGVtcy9mY2xvZy5jCmluZGV4IDU1MWM0YTBmMzk1YTEyLi41OTNhNTEzNmU5OTE5MiAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZmlsZXN5c3RlbXMvZmNsb2cuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9maWxlc3lzdGVtcy9mY2xvZy5jCkBAIC02LDEwICYjNDM7Niw4IEBACiAKICNpbmNsdWRlICZsdDthc3NlcnQuaCZndDsKICNpbmNsdWRlICZsdDtlcnJuby5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtmY250bC5oJmd0OwogI2luY2x1ZGUgJmx0O3NjaGVkLmgmZ3Q7Ci0jaW5jbHVkZSAmbHQ7c3RkaW8uaCZndDsKLSNpbmNsdWRlICZsdDtzdGRsaWIuaCZndDsKLSNpbmNsdWRlICZsdDtzdHJpbmcuaCZndDsKICNpbmNsdWRlICZsdDt1bmlzdGQuaCZndDsKICNpbmNsdWRlICZsdDtzeXMvbW91bnQuaCZndDsKIApkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZmlsZXN5c3RlbXMvb3Blbl9vX2NyZWF0X29fZGlyLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9maWxlc3lzdGVtcy9vcGVuX29fY3JlYXRfb19kaXIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMC4uZGYzY2RiYWUyYzg1MjQKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9maWxlc3lzdGVtcy9vcGVuX29fY3JlYXRfb19kaXIuYwpAQCAtMCwwICYjNDM7MSwxOTcgQEAKJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAomIzQzOyNpbmNsdWRlICZsdDtzeXMvc3RhdC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtzeXMvc3lzY2FsbC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtlcnJuby5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW1pdHMuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7ZmNudGwuaCZndDsKJiM0MzsKJiM0MzsjaW5jbHVkZSAmIzM0O2tzZWxmdGVzdF9oYXJuZXNzLmgmIzM0OwomIzQzOwomIzQzO3N0YXRpYyBpbmxpbmUgaW50IG9wZW5fb19jcmVhdF9vX2RpcihpbnQgZGZkLCBjb25zdCBjaGFyICpwYXRobmFtZSwKJiM0MzsJCQkJICAgICBtb2RlX3QgbW9kZSwgdW5zaWduZWQgaW50IGZsYWdzKQomIzQzO3sKJiM0MzsJcmV0dXJuIHN5c2NhbGwoX19OUl9vcGVuYXQsIGRmZCwgcGF0aG5hbWUsCiYjNDM7CQkgICAgICAgZmxhZ3MgfCBPX0RJUkVDVE9SWSB8IE9fQ1JFQVQsIG1vZGUpOwomIzQzO30KJiM0MzsKJiM0MzsjZGVmaW5lIG9wZW5fb19jcmVhdF9vX2Rpcl9jaGVja2VkX2ZsYWdzKGRmZCwgcGF0aG5hbWUsIGZsYWdzKSAoewlcCiYjNDM7CXN0cnVjdCBzdGF0IF9fc3Q7CQkJCQkJXAomIzQzOwlpbnQgX19mZCA9IG9wZW5fb19jcmVhdF9vX2RpcihkZmQsIHBhdGhuYW1lLCBTX0lSV1hVLCBmbGFncyk7CVwKJiM0MzsJQVNTRVJUX0dFKF9fZmQsIDApOwkJCQkJCVwKJiM0MzsJQVNTRVJUX0VRKGZzdGF0KF9fZmQsICZhbXA7X19zdCksIDApOwkJCQlcCiYjNDM7CUVYUEVDVF9UUlVFKFNfSVNESVIoX19zdC5zdF9tb2RlKSk7CQkJCVwKJiM0MzsJX19mZDsJCQkJCQkJCVwKJiM0Mzt9KQomIzQzOwomIzQzOyNkZWZpbmUgb3Blbl9vX2NyZWF0X29fZGlyX2NoZWNrZWQoZGZkLCBwYXRobmFtZSkgXAomIzQzOwlvcGVuX29fY3JlYXRfb19kaXJfY2hlY2tlZF9mbGFncyhkZmQsIHBhdGhuYW1lLCAwKQomIzQzOwomIzQzO0ZJWFRVUkUob3Blbl9vX2NyZWF0X29fZGlyKSB7CiYjNDM7CWNoYXIgZGlycGF0aFtQQVRIX01BWF07CiYjNDM7CWludCBkZmQ7CiYjNDM7fTsKJiM0MzsKJiM0MztGSVhUVVJFX1NFVFVQKG9wZW5fb19jcmVhdF9vX2RpcikKJiM0Mzt7CiYjNDM7CXN0cmNweShzZWxmLSZndDtkaXJwYXRoLCAmIzM0Oy90bXAvb3Blbl9vX2NyZWF0X29fZGlyX3Rlc3QuWFhYWFhYJiMzNDspOwomIzQzOwlBU1NFUlRfTkUobWtkdGVtcChzZWxmLSZndDtkaXJwYXRoKSwgTlVMTCk7CiYjNDM7CXNlbGYtJmd0O2RmZCA9IG9wZW4oc2VsZi0mZ3Q7ZGlycGF0aCwgT19ESVJFQ1RPUlkpOwomIzQzOwlBU1NFUlRfR0Uoc2VsZi0mZ3Q7ZGZkLCAwKTsKJiM0Mzt9CiYjNDM7CiYjNDM7RklYVFVSRV9URUFSRE9XTihvcGVuX29fY3JlYXRfb19kaXIpCiYjNDM7ewomIzQzOwljbG9zZShzZWxmLSZndDtkZmQpOwomIzQzOwlybWRpcihzZWxmLSZndDtkaXJwYXRoKTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyogRG9lcyBvcGVuX29fY3JlYXRfb19kaXIgcmV0dXJuIGEgZmQgYXQgYWxsPyAqLwomIzQzO1RFU1RfRihvcGVuX29fY3JlYXRfb19kaXIsIHJldHVybnNfZmQpCiYjNDM7ewomIzQzOwlpbnQgZmQgPSBvcGVuX29fY3JlYXRfb19kaXJfY2hlY2tlZChzZWxmLSZndDtkZmQsICYjMzQ7bmV3ZGlyJiMzNDspOwomIzQzOwlFWFBFQ1RfRVEoY2xvc2UoZmQpLCAwKTsKJiM0MzsJRVhQRUNUX0VRKHVubGlua2F0KHNlbGYtJmd0O2RmZCwgJiMzNDtuZXdkaXImIzM0OywgQVRfUkVNT1ZFRElSKSwgMCk7CiYjNDM7fQomIzQzOwomIzQzOy8qIFRoZSBmZCBtdXN0IHJlZmVyIHRvIHRoZSBkaXJlY3RvcnkgdGhhdCB3YXMganVzdCBjcmVhdGVkLiAqLwomIzQzO1RFU1RfRihvcGVuX29fY3JlYXRfb19kaXIsIGZkX2lzX2NyZWF0ZWRfZGlyKQomIzQzO3sKJiM0MzsJaW50IGZkOwomIzQzOwlzdHJ1Y3Qgc3RhdCBzdF92aWFfZmQsIHN0X3ZpYV9wYXRoOwomIzQzOwljaGFyIHBhdGhbUEFUSF9NQVhdOwomIzQzOwomIzQzOwlmZCA9IG9wZW5fb19jcmVhdF9vX2Rpcl9jaGVja2VkKHNlbGYtJmd0O2RmZCwgJiMzNDtjaGVja2RpciYjMzQ7KTsKJiM0MzsKJiM0MzsJQVNTRVJUX0VRKGZzdGF0KGZkLCAmYW1wO3N0X3ZpYV9mZCksIDApOwomIzQzOwomIzQzOwlzbnByaW50ZihwYXRoLCBzaXplb2YocGF0aCksICYjMzQ7JXMvY2hlY2tkaXImIzM0Oywgc2VsZi0mZ3Q7ZGlycGF0aCk7CiYjNDM7CUFTU0VSVF9FUShzdGF0KHBhdGgsICZhbXA7c3RfdmlhX3BhdGgpLCAwKTsKJiM0MzsKJiM0MzsJRVhQRUNUX0VRKHN0X3ZpYV9mZC5zdF9pbm8sIHN0X3ZpYV9wYXRoLnN0X2lubyk7CiYjNDM7CUVYUEVDVF9FUShzdF92aWFfZmQuc3RfZGV2LCBzdF92aWFfcGF0aC5zdF9kZXYpOwomIzQzOwomIzQzOwlFWFBFQ1RfRVEoY2xvc2UoZmQpLCAwKTsKJiM0MzsJRVhQRUNUX0VRKHJtZGlyKHBhdGgpLCAwKTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyogTWlzc2luZyBwYXJlbnQgY29tcG9uZW50IG11c3QgZmFpbCB3aXRoIEVOT0VOVC4gKi8KJiM0MztURVNUX0Yob3Blbl9vX2NyZWF0X29fZGlyLCBlbm9lbnRfbWlzc2luZ19wYXJlbnQpCiYjNDM7ewomIzQzOwlFWFBFQ1RfRVEob3Blbl9vX2NyZWF0X29fZGlyKHNlbGYtJmd0O2RmZCwgJiMzNDtub25leGlzdGVudC9jaGlsZCYjMzQ7LCBTX0lSV1hVLCAwKSwgLTEpOwomIzQzOwlFWFBFQ1RfRVEoZXJybm8sIEVOT0VOVCk7CiYjNDM7fQomIzQzOwomIzQzOy8qIEFuIGludmFsaWQgZGZkIG11c3QgZmFpbCB3aXRoIEVCQURGLiAqLwomIzQzO1RFU1RfRihvcGVuX29fY3JlYXRfb19kaXIsIGViYWRmKQomIzQzO3sKJiM0MzsJRVhQRUNUX0VRKG9wZW5fb19jcmVhdF9vX2RpcigtNDIsICYjMzQ7YmFkZmRpciYjMzQ7LCBTX0lSV1hVLCAwKSwgLTEpOwomIzQzOwlFWFBFQ1RfRVEoZXJybm8sIEVCQURGKTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyogQSBkZmQgdGhhdCBwb2ludHMgdG8gYSBmaWxlIChub3QgYSBkaXJlY3RvcnkpIG11c3QgZmFpbCB3aXRoIEVOT1RESVIuICovCiYjNDM7VEVTVF9GKG9wZW5fb19jcmVhdF9vX2RpciwgZW5vdGRpcl9kZmQpCiYjNDM7ewomIzQzOwlpbnQgZmlsZV9mZDsKJiM0MzsKJiM0MzsJZmlsZV9mZCA9IG9wZW5hdChzZWxmLSZndDtkZmQsICYjMzQ7ZmlsZSYjMzQ7LAomIzQzOwkJCSBPX0NSRUFUIHwgT19XUk9OTFksIFNfSVJXWFUpOwomIzQzOwlBU1NFUlRfR0UoZmlsZV9mZCwgMCk7CiYjNDM7CiYjNDM7CUVYUEVDVF9FUShvcGVuX29fY3JlYXRfb19kaXIoZmlsZV9mZCwgJiMzNDtzdWJkaXImIzM0OywgU19JUldYVSwgMCksIC0xKTsKJiM0MzsJRVhQRUNUX0VRKGVycm5vLCBFTk9URElSKTsKJiM0MzsKJiM0MzsJRVhQRUNUX0VRKGNsb3NlKGZpbGVfZmQpLCAwKTsKJiM0MzsJRVhQRUNUX0VRKHVubGlua2F0KHNlbGYtJmd0O2RmZCwgJiMzNDtmaWxlJiMzNDssIDApLCAwKTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBPX0VYQ0wgdG9nZXRoZXIgd2l0aCBPX0NSRUFUfE9fRElSRUNUT1JZIG11c3QgZmFpbCB3aXRoIEVFWElTVCB3aGVuCiYjNDM7ICogdGhlIHRhcmdldCBkaXJlY3RvcnkgYWxyZWFkeSBleGlzdHMuCiYjNDM7ICovCiYjNDM7VEVTVF9GKG9wZW5fb19jcmVhdF9vX2Rpciwgb19leGNsX2VleGlzdCkKJiM0Mzt7CiYjNDM7CWludCBmZDsKJiM0MzsKJiM0MzsJZmQgPSBvcGVuX29fY3JlYXRfb19kaXJfY2hlY2tlZF9mbGFncyhzZWxmLSZndDtkZmQsICYjMzQ7ZXhjbGRpciYjMzQ7LCBPX0VYQ0wpOwomIzQzOwlFWFBFQ1RfRVEoY2xvc2UoZmQpLCAwKTsKJiM0MzsKJiM0MzsJRVhQRUNUX0VRKG9wZW5fb19jcmVhdF9vX2RpcihzZWxmLSZndDtkZmQsICYjMzQ7ZXhjbGRpciYjMzQ7LCBTX0lSV1hVLCBPX0VYQ0wpLCAtMSk7CiYjNDM7CUVYUEVDVF9FUShlcnJubywgRUVYSVNUKTsKJiM0MzsKJiM0MzsJRVhQRUNUX0VRKHVubGlua2F0KHNlbGYtJmd0O2RmZCwgJiMzNDtleGNsZGlyJiMzNDssIEFUX1JFTU9WRURJUiksIDApOwomIzQzO30KJiM0MzsKJiM0MzsvKgomIzQzOyAqIE9fQ1JFQVR8T19ESVJFQ1RPUlkgb24gYSBwYXRoIHRoYXQgYWxyZWFkeSBleGlzdHMgYXMgYSByZWd1bGFyIGZpbGUKJiM0MzsgKiBtdXN0IGZhaWwgd2l0aCBFTk9URElSLgomIzQzOyAqLwomIzQzO1RFU1RfRihvcGVuX29fY3JlYXRfb19kaXIsIGV4aXN0aW5nX2ZpbGVfZW5vdGRpcikKJiM0Mzt7CiYjNDM7CWludCBmaWxlX2ZkOwomIzQzOwomIzQzOwlmaWxlX2ZkID0gb3BlbmF0KHNlbGYtJmd0O2RmZCwgJiMzNDtyZWdmaWxlJiMzNDssCiYjNDM7CQkJIE9fQ1JFQVQgfCBPX1dST05MWSwgU19JUldYVSk7CiYjNDM7CUFTU0VSVF9HRShmaWxlX2ZkLCAwKTsKJiM0MzsJRVhQRUNUX0VRKGNsb3NlKGZpbGVfZmQpLCAwKTsKJiM0MzsKJiM0MzsJRVhQRUNUX0VRKG9wZW5fb19jcmVhdF9vX2RpcihzZWxmLSZndDtkZmQsICYjMzQ7cmVnZmlsZSYjMzQ7LCBTX0lSV1hVLCAwKSwgLTEpOwomIzQzOwlFWFBFQ1RfRVEoZXJybm8sIEVOT1RESVIpOwomIzQzOwomIzQzOwlFWFBFQ1RfRVEodW5saW5rYXQoc2VsZi0mZ3Q7ZGZkLCAmIzM0O3JlZ2ZpbGUmIzM0OywgMCksIDApOwomIzQzO30KJiM0MzsKJiM0MzsvKgomIzQzOyAqIE9fQ1JFQVR8T19ESVJFQ1RPUlkgY29tYmluZWQgd2l0aCBhIHdyaXRhYmxlIGFjY2VzcyBtb2RlIG11c3QgYmUKJiM0MzsgKiByZWplY3RlZDogYSBkaXJlY3RvcnkgY2Fubm90IGJlIG9wZW5lZCBmb3Igd3JpdGluZy4KJiM0MzsgKi8KJiM0MztURVNUX0Yob3Blbl9vX2NyZWF0X29fZGlyLCByZWplY3RzX3dyaXRhYmxlX2FjY19tb2RlKQomIzQzO3sKJiM0MzsJRVhQRUNUX0VRKG9wZW5fb19jcmVhdF9vX2RpcihzZWxmLSZndDtkZmQsICYjMzQ7cmR3cmRpciYjMzQ7LCBTX0lSV1hVLCBPX1JEV1IpLCAtMSk7CiYjNDM7CUVYUEVDVF9FUShlcnJubywgRU5PVERJUik7CiYjNDM7CS8qIENsZWFuIHVwIGlmIHRoZSBrZXJuZWwgY3JlYXRlZCB0aGUgZGlyZWN0b3J5IGFueXdheS4gKi8KJiM0MzsJdW5saW5rYXQoc2VsZi0mZ3Q7ZGZkLCAmIzM0O3Jkd3JkaXImIzM0OywgQVRfUkVNT1ZFRElSKTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBvcGVuYXQoT19DUkVBVCkgd2l0aCBhIHRyYWlsaW5nIHNsYXNoIGJ1dCB3aXRob3V0IE9fRElSRUNUT1JZCiYjNDM7ICogbXVzdCBmYWlsIHdpdGggRUlTRElSIGFuZCBtdXN0IG5vdCBjcmVhdGUgYW55dGhpbmcgYXQgdGhlIHBhdGguCiYjNDM7ICovCiYjNDM7VEVTVF9GKG9wZW5fb19jcmVhdF9vX2RpciwgdHJhaWxpbmdfc2xhc2hfbm9fb19kaXIpCiYjNDM7ewomIzQzOwlpbnQgZmQ7CiYjNDM7CXN0cnVjdCBzdGF0IHN0OwomIzQzOwomIzQzOwlmZCA9IG9wZW5hdChzZWxmLSZndDtkZmQsICYjMzQ7dHJhaWxpbmcvJiMzNDssIE9fQ1JFQVQgfCBPX1dST05MWSwgU19JUldYVSk7CiYjNDM7CUVYUEVDVF9FUShmZCwgLTEpOwomIzQzOwlFWFBFQ1RfRVEoZXJybm8sIEVJU0RJUik7CiYjNDM7CiYjNDM7CUVYUEVDVF9FUShmc3RhdGF0KHNlbGYtJmd0O2RmZCwgJiMzNDt0cmFpbGluZyYjMzQ7LCAmYW1wO3N0LCAwKSwgLTEpOwomIzQzOwlFWFBFQ1RfRVEoZXJybm8sIEVOT0VOVCk7CiYjNDM7CiYjNDM7CS8qIEJlc3QtZWZmb3J0IGNsZWFudXAgaW4gY2FzZSB0aGUga2VybmVsIGxlZnQgYSBmaWxlIGJlaGluZC4gKi8KJiM0MzsJaWYgKGZkICZndDs9IDApCiYjNDM7CQljbG9zZShmZCk7CiYjNDM7CXVubGlua2F0KHNlbGYtJmd0O2RmZCwgJiMzNDt0cmFpbGluZyYjMzQ7LCAwKTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBUaGUgcmV0dXJuZWQgZmQgbXVzdCBiZSB1c2FibGUgYXMgYSBkZmQgZm9yIGZ1cnRoZXIgKmF0KCkgY2FsbHMuCiYjNDM7ICovCiYjNDM7VEVTVF9GKG9wZW5fb19jcmVhdF9vX2RpciwgZmRfdXNhYmxlX2FzX2RmZCkKJiM0Mzt7CiYjNDM7CWludCBwYXJlbnRfZmQsIGNoaWxkX2ZkOwomIzQzOwljaGFyIHBhdGhbUEFUSF9NQVhdOwomIzQzOwomIzQzOwlwYXJlbnRfZmQgPSBvcGVuX29fY3JlYXRfb19kaXJfY2hlY2tlZChzZWxmLSZndDtkZmQsICYjMzQ7cGFyZW50JiMzNDspOwomIzQzOwljaGlsZF9mZCA9IG9wZW5fb19jcmVhdF9vX2Rpcl9jaGVja2VkKHBhcmVudF9mZCwgJiMzNDtjaGlsZCYjMzQ7KTsKJiM0MzsKJiM0MzsJRVhQRUNUX0VRKGNsb3NlKGNoaWxkX2ZkKSwgMCk7CiYjNDM7CUVYUEVDVF9FUShjbG9zZShwYXJlbnRfZmQpLCAwKTsKJiM0MzsKJiM0MzsJc25wcmludGYocGF0aCwgc2l6ZW9mKHBhdGgpLCAmIzM0OyVzL3BhcmVudC9jaGlsZCYjMzQ7LCBzZWxmLSZndDtkaXJwYXRoKTsKJiM0MzsJRVhQRUNUX0VRKHJtZGlyKHBhdGgpLCAwKTsKJiM0MzsJc25wcmludGYocGF0aCwgc2l6ZW9mKHBhdGgpLCAmIzM0OyVzL3BhcmVudCYjMzQ7LCBzZWxmLSZndDtkaXJwYXRoKTsKJiM0MzsJRVhQRUNUX0VRKHJtZGlyKHBhdGgpLCAwKTsKJiM0Mzt9CiYjNDM7CiYjNDM7VEVTVF9IQVJORVNTX01BSU4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDQgMTY6NTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQ4NTQKCQkJCQkJCW91dHB1dDogNzUKCQkJCQkJCXRob3VnaHRzOiAxNDY4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgUGxhbjogRW5oYW5jaW5nIERpcmVjdG9yeSBDcmVhdGlvbiB3aXRoIGBvcGVuYXRgKioKCk9rYXksIHNvIHdlIGhhdmUgdGhpcyBwYXRjaCB0aGF0JiMzOTtzIGZ1bmRhbWVudGFsbHkgY2hhbmdpbmcgaG93IGBPX0NSRUFUYCBhbmQgYE9fRElSRUNUT1JZYCBpbnRlcmFjdCB3aXRoaW4gYG9wZW5hdGAgYW5kIHJlbGF0ZWQgc3lzdGVtIGNhbGxzLiBTcGVjaWZpY2FsbHksIGl0JiMzOTtzIGFsbG93aW5nIHRoZSBjcmVhdGlvbiBvZiBkaXJlY3RvcmllcyB1c2luZyBgT19DUkVBVCB8IE9fRElSRUNUT1JZYCwgYSBmdW5jdGlvbmFsaXR5IHRoYXQgd2FzIHByZXZpb3VzbHkgZWl0aGVyIG5vdCBzdXBwb3J0ZWQgb3IgaGFkIGluY29uc2lzdGVudCBiZWhhdmlvci4gVGhpcyBpcyBhIGNvcmUgVkZTIGNoYW5nZSB0aGF0IGFkZHMgc3VwcG9ydCBmb3IgY3JlYXRpbmcgZGlyZWN0b3JpZXMgdmlhIGBvcGVuYXQoLi4uLCBPX0NSRUFUIHwgT19ESVJFQ1RPUlksIC4uLilgLgoKSXQgbW9kaWZpZXMgYGZzL25hbWVpLmNgLCBgZnMvb3Blbi5jYCwgYW5kIHNldmVyYWwgZmlsZXN5c3RlbXMgdG8gaGFuZGxlIHRoaXMgbmV3IGJlaGF2aW9yLiBGcm9tIHdoYXQgSSBjYW4gc2VlLCB0aGUgZmlsZXN5c3RlbXMgKDlwLCBjZXBoLCBmdXNlLCBnZnMyLCBuZnMsIHNtYiwgdmJveHNmKSBhcmUgbW9zdGx5IGludm9sdmVkIGluIGNsZWFyaW5nIGBPX0NSRUFUYCBpZiBgT19JU19NS0RJUihmbGFncylgIGlzIHRydWUgd2l0aGluIHRoZWlyIGBhdG9taWNfb3BlbmAgaW1wbGVtZW50YXRpb25zLiBgT19JU19NS0RJUihmbGFncylgIGlzIGRlZmluZWQgYXMgYChmbGFncyAmYW1wOyBPX01LRElSX01BU0spID09IE9fTUtESVJfTUFTS2Agd2hlcmUgYE9fTUtESVJfTUFTS2AgaXMgYE9fQ1JFQVQgfCBPX0RJUkVDVE9SWWAuCgpUaGUgY3J1Y2lhbCBjaGFuZ2UgbGllcyBpbiB0aGUgVkZTOiBgdmZzX2NyZWF0ZV9ub19wZXJtYCBhbmQgYHZmc19ta2Rpcl9ub19wZXJtYCBoYXZlIGJlZW4gaW50cm9kdWNlZC4gYGF0b21pY19vcGVuYCBhbmQgYGxvb2t1cF9vcGVuYCBhcmUgbW9kaWZpZWQgdG8gYWNjb21tb2RhdGUgdGhpcyBuZXcgYGNyZWF0ZV9kaXIgPSBPX0lTX01LRElSKG9wZW5fZmxhZylgIGZsYWcuIElmIGBjcmVhdGVfZGlyYCBpcyB0cnVlLCB0aGUgc3lzdGVtIGNhbGxzIGB2ZnNfbWtkaXJfbm9fcGVybWAgaW5zdGVhZCBvZiBgdmZzX2NyZWF0ZV9ub19wZXJtYCwgYW5kIGBtYXlfb19jcmVhdGVgIG5vdyB0YWtlcyBhIGBjcmVhdGVfZGlyYCBwYXJhbWV0ZXIgYW5kIGNhbGxzIHNlY3VyaXR5IGhvb2tzIGZvciBta2RpciBvcGVyYXRpb25zLgoKVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGFuZCBhYnNvbHV0ZWx5IGRlbWFuZHMgZnV6emluZyB0byBlbnN1cmUgc3RhYmlsaXR5IGFuZCBjb3JyZWN0bmVzcy4gV2UgaGF2ZSB0byBtYWtlIHN1cmUgd2UgaGl0IGV2ZXJ5IHBvc3NpYmxlIHNjZW5hcmlvLgoKTXkgZm9jdXMgc2hvdWxkIGJlIG9uIGZ1enppbmcgdGhlc2Uga2V5IGZ1bmN0aW9uczoKCiogICBgbG9va3VwX29wZW5gCiogICBgYXRvbWljX29wZW5gIChwYXJ0aWN1bGFybHkgdGhlIFZGUyBpbXBsZW1lbnRhdGlvbiBpbiBgZnMvbmFtZWkuY2ApCiogICBgdmZzX21rZGlyX25vX3Blcm1gCiogICBgdmZzX2NyZWF0ZV9ub19wZXJtYAoqICAgYG1heV9vX2NyZWF0ZWAKKiAgIGBidWlsZF9vcGVuX2ZsYWdzYAoqICAgYGRvX29wZW5gCiogICBgZGVudHJ5X2NyZWF0ZWAKKiAgIGB2ZnNfbWtkaXJgCiogICBgdmZzX2NyZWF0ZWAKCkkgdGhpbmsgSSBoYXZlIGEgZ29vZCBoYW5kbGUgb24gaG93IHRoZSBmaWxlc3lzdGVtcyBhcmUgaW50ZXJhY3Rpbmcgd2l0aCB0aGlzLiBTcGVjaWZpY2FsbHksIHRoZXkmIzM5O3JlIGNsZWFyaW5nIGBPX0NSRUFUYCBpbiBgYXRvbWljX29wZW5gLCBhbmQgdGhpcyBzZWVtcyB0byBiZSBieSBkZXNpZ24uIElmIGBhdG9taWNfb3BlbmAgY2xlYXJzIGBPX0NSRUFUYCwgaXQgd29uJiMzOTt0IGF0dGVtcHQgdG8gY3JlYXRlLCBhbmQgdGhlIFZGUyB3aWxsIGhhbmRsZSB0aGUgY3JlYXRpb24gdmlhIGB2ZnNfbWtkaXJfbm9fcGVybWAuIFRoaXMgbWVjaGFuaXNtIGxvb2tzIG5pY2UuCgpOb3csIGxldCYjMzk7cyB2ZXJpZnkgdGhhdCB0aGVzZSBrZXkgZnVuY3Rpb25zIGFyZSBhdmFpbGFibGUgZm9yIGluc3RydW1lbnRhdGlvbiBhbmQgZnV6emluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNCAxNzowMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDteKHN0YXRpYyApPyhpbmxpbmUgKT8oc3RydWN0IGRlbnRyeSBcXCp8aW50fHZvaWR8c3RydWN0IGZpbGUgXFwqKSAobG9va3VwX29wZW58YXRvbWljX29wZW58bWF5X29fY3JlYXRlfGJ1aWxkX29wZW5fZmxhZ3N8ZG9fb3BlbnxkZW50cnlfY3JlYXRlfHZmc19ta2Rpcnx2ZnNfY3JlYXRlKVxcKCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9rZXJuZWwvYXBtXzMyLmM9MTUzNz1zdGF0aWMgaW50IGRvX3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbHApXG4tLVxuYXJjaC94ODYva2VybmVsL2FwbV8zMi5jLTE1NzQtXG5hcmNoL3g4Ni9rZXJuZWwvYXBtXzMyLmM6MTU3NTpzdGF0aWMgaW50IGRvX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbHApXG5hcmNoL3g4Ni9rZXJuZWwvYXBtXzMyLmMtMTU3Ni17XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQveGlyY29tL3hpcmMycHNfY3MuYz0yOTY9c3RhdGljIGludCBkb19jb25maWcoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGlmbWFwICptYXApO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQveGlyY29tL3hpcmMycHNfY3MuYzoyOTc6c3RhdGljIGludCBkb19vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQveGlyY29tL3hpcmMycHNfY3MuYy0yOTgtc3RhdGljIGludCBkb19pb2N0bChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgaWZyZXEgKnJxLCBpbnQgY21kKTtcbi0tXG5mcy9uYW1laS5jPTQxODY9aW50IHZmc19jcmVhdGVfbm9fcGVybShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxuLS1cbmZzL25hbWVpLmMtNDIxNy0gKi9cbmZzL25hbWVpLmM6NDIxODppbnQgdmZzX2NyZWF0ZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUsXG5mcy9uYW1laS5jLTQyMTktXHQgICAgICAgc3RydWN0IGRlbGVnYXRlZF9pbm9kZSAqZGkpXG4tLVxuZnMvbmFtZWkuYz00MzQ0PXN0YXRpYyBpbmxpbmUgaW50IG9wZW5fdG9fbmFtZWlfZmxhZ3MoaW50IGZsYWcpXG4tLVxuZnMvbmFtZWkuYy00MzUwLVxuZnMvbmFtZWkuYzo0MzUxOnN0YXRpYyBpbnQgbWF5X29fY3JlYXRlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxuZnMvbmFtZWkuYy00MzUyLVx0XHRcdGNvbnN0IHN0cnVjdCBwYXRoICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcbi0tXG5mcy9uYW1laS5jPTQ2NTU9c3RhdGljIGNvbnN0IGNoYXIgKm9wZW5fbGFzdF9sb29rdXBzKHN0cnVjdCBuYW1laWRhdGEgKm5kLFxuLS1cbmZzL25hbWVpLmMtNDc0Mi0gKi9cbmZzL25hbWVpLmM6NDc0MzpzdGF0aWMgaW50IGRvX29wZW4oc3RydWN0IG5hbWVpZGF0YSAqbmQsXG5mcy9uYW1laS5jLTQ3NDQtXHRcdCAgIHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBzdHJ1Y3Qgb3Blbl9mbGFncyAqb3ApXG4tLVxuZnMvbmZzL2Rpci5jPTIwNzY9c3RhdGljIHN0cnVjdCBuZnNfb3Blbl9jb250ZXh0ICpjcmVhdGVfbmZzX29wZW5fY29udGV4dChzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIGludCBvcGVuX2ZsYWdzLCBzdHJ1Y3QgZmlsZSAqZmlscClcbi0tXG5mcy9uZnMvZGlyLmMtMjA4MC1cbmZzL25mcy9kaXIuYzoyMDgxOnN0YXRpYyBpbnQgZG9fb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlscClcbmZzL25mcy9kaXIuYy0yMDgyLXtcbi0tXG5mcy9vcGVuLmM9MTEzNj1pbmxpbmUgc3RydWN0IG9wZW5faG93IGJ1aWxkX29wZW5faG93KGludCBmbGFncywgdW1vZGVfdCBtb2RlKVxuLS1cbmZzL29wZW4uYy0xMTUxLVxuZnMvb3Blbi5jOjExNTI6aW5saW5lIGludCBidWlsZF9vcGVuX2ZsYWdzKGNvbnN0IHN0cnVjdCBvcGVuX2hvdyAqaG93LCBzdHJ1Y3Qgb3Blbl9mbGFncyAqb3ApXG5mcy9vcGVuLmMtMTE1My17XG4tLVxuaW5jbHVkZS9saW51eC9mcy5oPTE3NTg9Ym9vbCBpbm9kZV9vd25lcl9vcl9jYXBhYmxlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxuLS1cbmluY2x1ZGUvbGludXgvZnMuaC0xNzYzLSAqL1xuaW5jbHVkZS9saW51eC9mcy5oOjE3NjQ6aW50IHZmc19jcmVhdGUoc3RydWN0IG1udF9pZG1hcCAqLCBzdHJ1Y3QgZGVudHJ5ICosIHVtb2RlX3QsXG5pbmNsdWRlL2xpbnV4L2ZzLmgtMTc2NS1cdCAgICAgICBzdHJ1Y3QgZGVsZWdhdGVkX2lub2RlICopO1xuLS1cbnRvb2xzL3BlcmYvdXRpbC9kc28uYz01NDU9c3RhdGljIHZvaWQgY2xvc2VfZmlyc3RfZHNvKHZvaWQpO1xudG9vbHMvcGVyZi91dGlsL2Rzby5jLTU0Ni1cbnRvb2xzL3BlcmYvdXRpbC9kc28uYzo1NDc6c3RhdGljIGludCBkb19vcGVuKGNoYXIgKm5hbWUpIEVYQ0xVU0lWRV9MT0NLU19SRVFVSVJFRChfZHNvX19kYXRhX29wZW5fbG9jaylcbnRvb2xzL3BlcmYvdXRpbC9kc28uYy01NDgte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA0IDE3OjAwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4MDYyCgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czoKCioqTmF2aWdhdGluZyB0aGUgRmlsZXN5c3RlbSBLZXJuZWwgQ29kZSoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZGlnIGludG8gdGhlIGZpbGVzeXN0ZW0gY29kZSBhZ2Fpbi4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIHRyeWluZyB0byB1bmRlcnN0YW5kIGhvdyBmaWxlbmFtZSBsb29rdXBzIGFuZCBhdG9taWMgb3BlbnMgYXJlIGhhbmRsZWQuIE15IGZpcnN0IG1vdmUgd2lsbCBiZSB0byB6ZXJvIGluIG9uIGBmcy9uYW1laS5jYC4gSSBleHBlY3QgdG8gZmluZCB0aGUgY29yZSBsb2dpYyBmb3IgYm90aCBgbG9va3VwX29wZW5gIGFuZCBgYXRvbWljX29wZW5gIHJvdXRpbmVzIGRlZmluZWQgdGhlcmUuIFRoYXQmIzM5O3MgdXN1YWxseSB0aGUgZ28tdG8gcGxhY2UgZm9yIGFueXRoaW5nIHJlbGF0ZWQgdG8gbmFtZSByZXNvbHV0aW9uIGFuZCB0aGUgaW5pdGlhbCBzZXR1cCBvZiBmaWxlIG9wZXJhdGlvbnMuIFRpbWUgdG8gZmlyZSB1cCB0aGUgZWRpdG9yIGFuZCBzZWUgd2hhdCYjMzk7cyB3aGF0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA0IDE3OjAwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7XihzdGF0aWMgKT8oc3RydWN0IGRlbnRyeSBcXCopIChsb29rdXBfb3BlbnxhdG9taWNfb3BlbilcXCgmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA0IDE3OjAwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4MjYyCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMzAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipOYXZpZ2F0aW5nIHRoZSBgZGVudHJ5YCBKdW5nbGU6IFJldHVybiBUeXBlcyBhbmQgRnVuY3Rpb24gU2lnbmF0dXJlcyoqCgpSaWdodCwgc28gSSYjMzk7bSB0aGlua2luZyBhYm91dCBhIGZ1bmN0aW9uIHRoYXQgY2xlYXJseSBkZWFscyB3aXRoIGBkZW50cnlgIHN0cnVjdHVyZXMuIEkmIzM5O20gdHJ5aW5nIHRvIHF1aWNrbHkgYXNjZXJ0YWluIGl0cyBwcmVjaXNlIHJldHVybiB0eXBlLiBNeSBpbml0aWFsIGd1ZXNzIGlzIHRoYXQgaXQgKmNvdWxkKiBiZSBgc3RydWN0IGRlbnRyeSAqYCBvciBwZXJoYXBzIGV2ZW4gYGNvbnN0IHN0cnVjdCBkZW50cnkgKmAsIHdpdGggc29tZSB2YXJpYXRpb25zIGluIHNwYWNpbmcgYXJvdW5kIHRoZSBhc3RlcmlzayDigJMgeW91IGtub3cgaG93IHRob3NlIHRoaW5ncyBjYW4gYmUuIFRvIGF2b2lkIGFueSBhbWJpZ3VpdHkgb3IgdW5uZWNlc3NhcnkgcGFyc2luZyBvZiB0aGUgc291cmNlIGNvZGUsIHRoZSBtb3N0IGVmZmljaWVudCBhcHByb2FjaCBpcyB0byBkaXJlY3RseSB0YXJnZXQgdGhlIGZ1bmN0aW9uIGNhbGxzIHRoZW1zZWx2ZXMuIEkmIzM5O2xsIGp1c3QgdXNlIGBncmVwYCB0byBxdWlja2x5IGZpbmQgd2hlcmUgdGhlIGZ1bmN0aW9uIGlzIGNhbGxlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNCAxNzowMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDteKHN0YXRpYyApPyhzdHJ1Y3QgZGVudHJ5IFxcKlxccyopPyhsb29rdXBfb3BlbnxhdG9taWNfb3BlbilcXCgmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvbmFtZWkuYz00MzgwPXN0YXRpYyBpbmxpbmUgdW1vZGVfdCBvX2NyZWF0ZV9tb2RlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxuLS1cbmZzL25hbWVpLmMtNDQwOC0gKi9cbmZzL25hbWVpLmM6NDQwOTpzdGF0aWMgc3RydWN0IGRlbnRyeSAqYXRvbWljX29wZW4oY29uc3Qgc3RydWN0IHBhdGggKnBhdGgsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcbmZzL25hbWVpLmMtNDQxMC1cdFx0XHRcdCAgc3RydWN0IGZpbGUgKmZpbGUsXG4tLVxuZnMvbmFtZWkuYz00NDY2PXN0cnVjdCBkZW50cnkgKnZmc19ta2Rpcl9ub19wZXJtKHN0cnVjdCBtbnRfaWRtYXAgKiwgc3RydWN0IGlub2RlICosXG4tLVxuZnMvbmFtZWkuYy00NDgzLSAqL1xuZnMvbmFtZWkuYzo0NDg0OnN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpsb29rdXBfb3BlbihzdHJ1Y3QgbmFtZWlkYXRhICpuZCwgc3RydWN0IGZpbGUgKmZpbGUsXG5mcy9uYW1laS5jLTQ0ODUtXHRcdFx0XHQgIGNvbnN0IHN0cnVjdCBvcGVuX2ZsYWdzICpvcCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNCAxNzowMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODcxNQoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyBgZGVudHJ5X2NyZWF0ZWAgYW5kIGB2ZnNfbWtkaXJgKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGludG8gdGhlIGNvcmUgb2YgdGhpcyBvcGVyYXRpb24uIE15IGltbWVkaWF0ZSBmb2N1cyBpcyBvbiBgZGVudHJ5X2NyZWF0ZWAgYW5kIGB2ZnNfbWtkaXJgLiBJIHdhbnQgdG8gcXVpY2tseSByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlaXIgaW50ZXJhY3Rpb24gaW4gdGhlIGNvbnRleHQgb2YgY3JlYXRpbmcgYSBuZXcgZGlyZWN0b3J5LiBJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoZSBkZW50cnkgbGlmZWN5Y2xlIGFuZCBob3cgdGhlIFZGUyBsYXllciBoYW5kbGVzIHRoZSByZXF1ZXN0cywgZXNwZWNpYWxseSB0aGUgaW5vZGUgYWxsb2NhdGlvbi4gSSBuZWVkIHRvIHJlZnJlc2ggdGhlIGRldGFpbHMgb2YgdGhlIGxvY2tpbmcgbWVjaGFuaXNtcyBpbnZvbHZlZCBpbiB0aGVzZSBmdW5jdGlvbnMuIEFyZSB0aGVyZSBhbnkgY29udGVudGlvbiBwb2ludHMgdG8gbG9vayBhdCwgb3IgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucz8gSXMgYHZmc19ta2RpcmAganVzdCBhIHdyYXBwZXIsIG9yIGRvZXMgaXQgcGVyZm9ybSBzdWJzdGFudGlhbCB3b3JrIGl0c2VsZj8gSG93IGRvZXMgYGRlbnRyeV9jcmVhdGVgIGFmZmVjdCB0aGUgY2FjaGUgYW5kIGVuc3VyZSBjb25zaXN0ZW5jeSBhY3Jvc3MgdGhlIEZTPyBJJiMzOTttIGN1cmlvdXMgYWJvdXQgdGhlIHNwZWNpZmljIHBhcmFtZXRlcnMgdGhlc2UgZnVuY3Rpb25zIGFjY2VwdCBhbmQgdGhlaXIgZWZmZWN0IG9uIHRoZSByZXN1bHRpbmcgZGVudHJ5IGFuZCBpbm9kZS4gSSYjMzk7bSBydW5uaW5nIHRocm91Z2ggYWxsIHRoaXMgdG8gcXVpY2tseSBidWlsZCBhIG1lbnRhbCBtYXAgb2YgdGhlIHdob2xlIG9wZXJhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDQgMTc6MDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7XihzdHJ1Y3QgZmlsZSBcXCpcXHMqKT9kZW50cnlfY3JlYXRlXFwoJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL25hbWVpLmM9NTEwMD1FWFBPUlRfU1lNQk9MKHN0YXJ0X2NyZWF0aW5nX3VzZXJfcGF0aCk7XG4tLVxuZnMvbmFtZWkuYy01MTE4LSAqL1xuZnMvbmFtZWkuYzo1MTE5OnN0cnVjdCBmaWxlICpkZW50cnlfY3JlYXRlKHN0cnVjdCBwYXRoICpwYXRoLCBpbnQgZmxhZ3MsIHVtb2RlX3QgbW9kZSxcbmZzL25hbWVpLmMtNTEyMC1cdFx0XHQgICBjb25zdCBzdHJ1Y3QgY3JlZCAqY3JlZClcbi0tXG5pbmNsdWRlL2xpbnV4L2ZzLmg9MjQ3OT1zdHJ1Y3QgZmlsZSAqZGVudHJ5X29wZW5fbm9ub3RpZnkoY29uc3Qgc3RydWN0IHBhdGggKnBhdGgsIGludCBmbGFncyxcbmluY2x1ZGUvbGludXgvZnMuaC0yNDgwLVx0XHRcdFx0ICBjb25zdCBzdHJ1Y3QgY3JlZCAqY3JlZCk7XG5pbmNsdWRlL2xpbnV4L2ZzLmg6MjQ4MTpzdHJ1Y3QgZmlsZSAqZGVudHJ5X2NyZWF0ZShzdHJ1Y3QgcGF0aCAqcGF0aCwgaW50IGZsYWdzLCB1bW9kZV90IG1vZGUsXG5pbmNsdWRlL2xpbnV4L2ZzLmgtMjQ4Mi1cdFx0XHQgICBjb25zdCBzdHJ1Y3QgY3JlZCAqY3JlZCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA0IDE3OjAwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5MjA0CgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHByZXNlbnRlZCBhcyBpZiBpdCB3ZXJlIG15IG93biBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKlRoaW5raW5nIEFib3V0IEZpbGVzeXN0ZW1zIGFuZCBEaXJlY3RvcnkgQ3JlYXRpb24qKgoKQWxyaWdodCwgc28gd2UmIzM5O3JlIHRhbGtpbmcgYWJvdXQgdGhlIGxvdy1sZXZlbCwgZmlsZXN5c3RlbSBpbnRlcmFjdGlvbiBoZXJlLiBUaGUgbWVudGFsIHRpY2sgSSBnZXQgZnJvbSAmIzM0O3Zmc19ta2RpciYjMzQ7IGlzIHRoZSBjcml0aWNhbCBmdW5jdGlvbiB3aXRoaW4gYSBWaXJ0dWFsIEZpbGUgU3lzdGVtIChWRlMpIGxheWVyLiBJIGltbWVkaWF0ZWx5IHRoaW5rIGFib3V0IHRoZSBjb3JlIG1lY2hhbmljcyDigJMgaG93IHRoYXQgc2luZ2xlIGNhbGwgdHJhbnNsYXRlcyB0byBhY3Rpb25zIGFjcm9zcyBkaWZmZXJlbnQgdW5kZXJseWluZyBmaWxlc3lzdGVtcy4gV2UmIzM5O3JlIG5vdCBqdXN0IGNyZWF0aW5nIGEgZGlyZWN0b3J5OyB3ZSYjMzk7cmUgb3JjaGVzdHJhdGluZyB0aGUgKnJlcXVlc3QqIGZvciBhIGRpcmVjdG9yeSBjcmVhdGlvbi4KCk15IG1pbmQganVtcHMgdG8gdGhlIFZGUyYjMzk7cyByb2xlOiBpdCYjMzk7cyB0aGUgYWJzdHJhY3Rpb24gbGF5ZXIuIGB2ZnNfbWtkaXJgIGl0c2VsZiBkb2VzbiYjMzk7dCAqZG8qIHRoZSBta2Rpci4gSXQgdGFrZXMgdGhlIHBhcmFtZXRlcnPigJR0aGUgcGF0aCwgcGVybWlzc2lvbnMsIGV0Yy7igJRhbmQgdGhlbiBpdCBkaXNwYXRjaGVzIHRoZSBhY3R1YWwgd29yayB0byB0aGUgYXBwcm9wcmlhdGUgdW5kZXJseWluZyBmaWxlc3lzdGVtLiBJIGluc3RhbnRseSBzdGFydCBjb25zaWRlcmluZyB0aGUgaW1wbGljYXRpb25zOiBob3cgZG9lcyB0aGUgVkZTIHNlbGVjdCB0aGUgcmlnaHQgZmlsZXN5c3RlbSBiYXNlZCBvbiB0aGUgcGF0aD8gSXMgaXQgYmFzZWQgb24gbW91bnQgcG9pbnRzLCBvbiBhIGZpbGVzeXN0ZW0tc3BlY2lmaWMgc3RydWN0dXJlIG9yIGRhdGEsIG9yIGEgY29tYmluYXRpb24/CgpJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoZSBhcmd1bWVudHMgdG8gYHZmc19ta2RpcmAgYW5kIHdoYXQgdGhleSBpbXBseS4gVGhlIHBhdGggaXRzZWxmIHRyaWdnZXJzIGNvbnNpZGVyYXRpb25zIGFib3V0IHBhdGggcmVzb2x1dGlvbi4gRG9lcyB0aGUgVkZTIGhhbmRsZSBzeW1ib2xpYyBsaW5rcyBhbG9uZyB0aGUgcGF0aD8gSG93IGRvZXMgaXQgZGVhbCB3aXRoIHJlbGF0aXZlIHBhdGhzIHZzLiBhYnNvbHV0ZSBwYXRocz8gVGhlIHBlcm1pc3Npb25zLCB0b28sIGFyZSBpbnN0YW50bHkgYSBwb2ludCBvZiBmb2N1cy4gV2UgaGF2ZSB0byBjb25zaWRlciBob3cgdG8gaGFuZGxlIFVJRC9HSURzIChVc2VyL0dyb3VwIElEcyksIGFuZCB0aGUgdHJhbnNsYXRpb24gbGF5ZXIgdGhhdCBvY2N1cnMgYXQgdGhlIFZGUyBsZXZlbCBiZWZvcmUgdGhlIHNwZWNpZmljIGZpbGVzeXN0ZW0gZ2V0cyBpbnZvbHZlZC4gRG9lcyB0aGUgdW5kZXJseWluZyBmaWxlc3lzdGVtIHN1cHBvcnQgdGhlIHBlcm1pc3Npb25zIG1vZGVsPyBXaGF0IGlzIHRoZSBzdGFuZGFyZCBiZWhhdmlvciBpbiB0aGlzIGNhc2UsIGFuZCBob3cgZG9lcyBgdmZzX21rZGlyYCBhZGFwdCB0byBpdD8KClRoZSBlcnJvciBoYW5kbGluZyBhc3BlY3RzIGFyZSBhbHNvIGF0IHRoZSBmb3JlZnJvbnQuIFdoYXQgYXJlIHRoZSBjb21tb24gZXJyb3IgY29kZXMgdGhhdCBtaWdodCBjb21lIGJhY2s/ICYjMzQ7UGVybWlzc2lvbiBkZW5pZWQsJiMzNDsgJiMzNDtmaWxlIGV4aXN0cywmIzM0OyAmIzM0O291dCBvZiBzcGFjZSwmIzM0OyAmIzM0O2ludmFsaWQgcGF0aCYjMzQ7Li4uIEkgc3RhcnQgbWFwcGluZyB0aG9zZSBwb3RlbnRpYWwgZXJyb3JzIHRvIHRoZSBzcGVjaWZpYyBjaGVja3MgdGhhdCBgdmZzX21rZGlyYCBtaWdodCBkbyBhdCB0aGUgVkZTIGxldmVsLCBhbmQgYWxzbyB0aGUgc29ydHMgb2YgZXJyb3JzIHRoYXQgd291bGQgY29tZSBiYWNrIGZyb20gYSByZWFsIGZpbGVzeXN0ZW0uIEkmIzM5O20gd29uZGVyaW5nIHdoYXQgaXMgdGhlIGV4cGVjdGVkIGVycm9yIGhhbmRsaW5nIHN0cmF0ZWd5LiBEb2VzIHRoZSBWRlMgYXR0ZW1wdCByZXRyeSBvciBvdGhlciBsb2dpYywgb3IgZG9lcyBpdCBzaW1wbHkgcmV0dXJuIHRoZSBlcnJvciBjb2RlPwoKQmFzaWNhbGx5LCBJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoZSBpbnRyaWNhdGUgZGFuY2UgYmV0d2VlbiB0aGUgVkZTIGxheWVyIGFuZCB0aGUgZmlsZXN5c3RlbSBkcml2ZXIuIGB2ZnNfbWtkaXJgIGlzIGp1c3QgYSBrZXkgdGhhdCBhY3RpdmF0ZXMgdGhpcyByZWxhdGlvbnNoaXAsIHNvIHRoZXJlJiMzOTtzIGEgbG90IG9mIHVuZGVybHlpbmcgZmlsZXN5c3RlbSBtZWNoYW5pY3MgYW5kIGludGVyYWN0aW9ucyB0aGF0IEkmIzM5O20gY29uc2lkZXJpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA0IDE3OjAwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O14oc3RydWN0IGRlbnRyeSBcXCpcXHMqKT92ZnNfbWtkaXJcXCgmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7RG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9wb3J0aW5nLnJzdD0xMzEyPWluc3RlYWQuXG4tLVxuRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9wb3J0aW5nLnJzdC0xMzE3LVxuRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9wb3J0aW5nLnJzdDoxMzE4OnZmc19ta2RpcigpIG5vdyByZXR1cm5zIGEgZGVudHJ5IC0gdGhlIG9uZSByZXR1cm5lZCBieSAtXHUwMDNlbWtkaXIoKS4gIElmXG5Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3BvcnRpbmcucnN0LTEzMTktdGhhdCBkZW50cnkgaXMgZGlmZmVyZW50IGZyb20gdGhlIGRlbnRyeSBwYXNzZWQgaW4sIGluY2x1ZGluZyBpZiBpdCBpc1xuLS1cbmZzL25hbWVpLmM9NTMxMT1zdHJ1Y3QgZGVudHJ5ICp2ZnNfbWtkaXJfbm9fcGVybShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXG4tLVxuZnMvbmFtZWkuYy01MzY0LSAqL1xuZnMvbmFtZWkuYzo1MzY1OnN0cnVjdCBkZW50cnkgKnZmc19ta2RpcihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXG5mcy9uYW1laS5jLTUzNjYtXHRcdFx0IHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlLFxuLS1cbmluY2x1ZGUvbGludXgvZnMuaD0xNzY0PWludCB2ZnNfY3JlYXRlKHN0cnVjdCBtbnRfaWRtYXAgKiwgc3RydWN0IGRlbnRyeSAqLCB1bW9kZV90LFxuaW5jbHVkZS9saW51eC9mcy5oLTE3NjUtXHQgICAgICAgc3RydWN0IGRlbGVnYXRlZF9pbm9kZSAqKTtcbmluY2x1ZGUvbGludXgvZnMuaDoxNzY2OnN0cnVjdCBkZW50cnkgKnZmc19ta2RpcihzdHJ1Y3QgbW50X2lkbWFwICosIHN0cnVjdCBpbm9kZSAqLFxuaW5jbHVkZS9saW51eC9mcy5oLTE3NjctXHRcdFx0IHN0cnVjdCBkZW50cnkgKiwgdW1vZGVfdCwgc3RydWN0IGRlbGVnYXRlZF9pbm9kZSAqKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDQgMTc6MDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjAxMjQKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiAxMDAzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKklkZW50aWZ5aW5nIEtleSBGdW5jdGlvbnMgYW5kIENvbmZpZ3VyYXRpb24gZm9yIFRlc3RpbmcqKgoKT2theSwgc28gSSYjMzk7bSBkaXZpbmcgaW50byB0aGlzIGNvZGUgYW5kIGZpZ3VyaW5nIG91dCB0aGUgY3JpdGljYWwgZnVuY3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyBwYXRjaC4gSW5pdGlhbGx5LCBJIHdhcyBmb2N1c2luZyBvbjoKCi0gICBgbG9va3VwX29wZW5gCi0gICBgYXRvbWljX29wZW5gCi0gICBgbWF5X29fY3JlYXRlYAotICAgYGJ1aWxkX29wZW5fZmxhZ3NgCi0gICBgZG9fb3BlbmAKLSAgIGBkZW50cnlfY3JlYXRlYAotICAgYHZmc19ta2RpcmAKLSAgIGB2ZnNfY3JlYXRlYAoKSSBoYWQgYSBxdWljayB0aG91Z2h0IGFib3V0IGluY2x1ZGluZyB0aGUgc3RhdGljIGlubGluZSBmdW5jdGlvbnMgYHZmc19ta2Rpcl9ub19wZXJtYCBhbmQgYHZmc19jcmVhdGVfbm9fcGVybWAgYnV0IGRlY2lkZWQgYWdhaW5zdCBpdCwgYXMgc3l6a2FsbGVyIG1pZ2h0IHN0cnVnZ2xlIHRvIHRyYWNlIHRob3NlLiBJdCYjMzk7cyBzYWZlciB0byBzdGljayB0byB0aGUgbm9uLWlubGluZSBjYWxsaW5nIGZ1bmN0aW9ucy4KClRoZW4gSSByZWFsaXplZCBgZG9fb3BlbmAgaXMgYWxzbyBzdGF0aWMsIHNvIEkgd2VudCBiYWNrIHRvIG1ha2Ugc3VyZSwgaXQgaXMgY2FsbGVkIGZyb20gb3BlbmF0LCB3aGljaCBpcyBhbHdheXMgZW5hYmxlZC4KClRoZW4gSSByZW1lbWJlcmVkIHRoZSBwYXRjaCBhbHNvIHRvdWNoZXMgdmFyaW91cyBmaWxlc3lzdGVtcy4gSXQgbG9va3MgbGlrZSBlYWNoIG9mIHRoZW0gbm93IGhhbmRsZXMgYE9fSVNfTUtESVIoZmxhZ3MpYCBpbiB0aGVpciBgYXRvbWljX29wZW5gIGNhbGxzLiBTbyBJIG5lZWQgdG8gYWRkIHRoZXNlIGFzIHdlbGw6CgotICAgYHY5ZnNfdmZzX2F0b21pY19vcGVuYAotICAgYHY5ZnNfdmZzX2F0b21pY19vcGVuX2RvdGxgCi0gICBgY2VwaF9hdG9taWNfb3BlbmAKLSAgIGBmdXNlX2F0b21pY19vcGVuYAotICAgYGdmczJfYXRvbWljX29wZW5gCi0gICBgbmZzX2F0b21pY19vcGVuYAotICAgYG5mc19hdG9taWNfb3Blbl92MjNgCi0gICBgY2lmc19hdG9taWNfb3BlbmAKLSAgIGB2Ym94c2ZfZGlyX2F0b21pY19vcGVuYAoKVGhhdCBsZWQgbWUgdG8gdGhpbmsgYWJvdXQgZmlsZXN5c3RlbSBjb25maWdzLiBJIGxpc3RlZCB0aGVtIGF0IGZpcnN0LCBidXQgdGhlbiBJIHN0b3BwZWQgbXlzZWxmLiBUaGUgcHJvbXB0IHNheXMsICYjMzQ7RG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuJiMzNDsgU28gSSBuZWVkIHRvIGdvIGxvb2sgaW50byBLY29uZmlnIGZpbGVzIGZvciBhbnkgaWZkZWZzLiBJIHNob3VsZCBub3QgbWFrZSBhbnkgYXNzdW1wdGlvbnMuIExldCYjMzk7cyBzZWUgaWYgdGhlcmUgYXJlIGFueSBjb25maWcgb3B0aW9ucyByZWxhdGVkIHRvIHRoZSBmaWxlc3lzdGVtIGNoYW5nZXMgb3IgdGhlIGNvcmUgZnVuY3Rpb25zIGluIGBmcy9uYW1laS5jYCBhbmQgYGZzL29wZW4uY2AuIEkgaGF2ZSB0byBjaGVjayB0aGUgS2NvbmZpZyBmaWxlcyBub3cuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA0IDE3OjAxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0OyNpZmRlZiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL25hbWVpLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvbmFtZWkuYz0zNzQ9c3RhdGljIGludCBjaGVja19hY2woc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXG4tLVxuZnMvbmFtZWkuYy0zNzYte1xuZnMvbmFtZWkuYzozNzc6I2lmZGVmIENPTkZJR19GU19QT1NJWF9BQ0xcbmZzL25hbWVpLmMtMzc4LVx0c3RydWN0IHBvc2l4X2FjbCAqYWNsO1xuLS1cbmZzL25hbWVpLmM9NDEzPXN0YXRpYyBpbmxpbmUgYm9vbCBub19hY2xfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSlcbmZzL25hbWVpLmMtNDE0LXtcbmZzL25hbWVpLmM6NDE1OiNpZmRlZiBDT05GSUdfRlNfUE9TSVhfQUNMXG5mcy9uYW1laS5jLTQxNi1cdHJldHVybiBsaWtlbHkoIVJFQURfT05DRShpbm9kZS1cdTAwM2VpX2FjbCkpO1xuLS1cbmZzL25hbWVpLmM9MTIwNz1zdGF0aWMgaW50IHN5c2N0bF9wcm90ZWN0ZWRfcmVndWxhciBfX3JlYWRfbW9zdGx5O1xuZnMvbmFtZWkuYy0xMjA4LVxuZnMvbmFtZWkuYzoxMjA5OiNpZmRlZiBDT05GSUdfU1lTQ1RMXG5mcy9uYW1laS5jLTEyMTAtc3RhdGljIGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgbmFtZWlfc3lzY3Rsc1tdID0ge1xuLS1cbmZzL25hbWVpLmM9MjI3OD1zdGF0aWMgX19hbHdheXNfaW5saW5lIGNvbnN0IGNoYXIgKndhbGtfY29tcG9uZW50KHN0cnVjdCBuYW1laWRhdGEgKm5kLCBpbnQgZmxhZ3MpXG4tLVxuZnMvbmFtZWkuYy0yMzIwLSAqL1xuZnMvbmFtZWkuYzoyMzIxOiNpZmRlZiBDT05GSUdfRENBQ0hFX1dPUkRfQUNDRVNTXG5mcy9uYW1laS5jLTIzMjItXG4tLVxuZnMvbmFtZWkuYy0yMzI0LVxuZnMvbmFtZWkuYzoyMzI1OiNpZmRlZiBIQVNIX01JWFxuZnMvbmFtZWkuYy0yMzI2LVxuLS1cbmZzL25hbWVpLmM9MjQ2NT1zdGF0aWMgaW5saW5lIGNvbnN0IGNoYXIgKmhhc2hfbmFtZShzdHJ1Y3QgbmFtZWlkYXRhICpuZCxcbi0tXG5mcy9uYW1laS5jLTI1MTYtICovXG5mcy9uYW1laS5jOjI1MTc6I2lmZGVmIF9fQklHX0VORElBTlxuZnMvbmFtZWkuYy0yNTE4LSAgI2RlZmluZSBMQVNUX1dPUkRfSVNfRE9UXHQoMHgyZXVsIFx1MDAzY1x1MDAzYyAoQklUU19QRVJfTE9ORy04KSlcbi0tXG5mcy9uYW1laS5jPTM2Mjc9RVhQT1JUX1NZTUJPTChzdGFydF9yZW1vdmluZ19kZW50cnkpO1xuZnMvbmFtZWkuYy0zNjI4LVxuZnMvbmFtZWkuYzozNjI5OiNpZmRlZiBDT05GSUdfVU5JWDk4X1BUWVNcbmZzL25hbWVpLmMtMzYzMC1pbnQgcGF0aF9wdHMoc3RydWN0IHBhdGggKnBhdGgpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA0IDE3OjAxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyMjI1CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogNTc1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBWRlMgTW9kaWZpY2F0aW9ucyBmb3IgUG90ZW50aWFsIEZlYXR1cmUgRmxhZ2dpbmcqKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gdGhpcyBjb2RlLCBzcGVjaWZpY2FsbHkgaW4gYGZzL25hbWVpLmNgIGFuZCBgZnMvb3Blbi5jYCwgYW5kIEkmIzM5O20gbm90IHNlZWluZyBhbnkgcHJlcHJvY2Vzc29yIGRpcmVjdGl2ZXMgKGAjaWZkZWZgKSBhcm91bmQgdGhlIGNoYW5nZXMuIFRoYXQmIzM5O3MgYSBrZXkgZmlyc3Qgb2JzZXJ2YXRpb24uIElmIHRoaXMgaXMgYSBuZXcgZmVhdHVyZSBvciBjaGFuZ2UsIGl0IG1pZ2h0IHJlcXVpcmUgZmVhdHVyZSBmbGFnZ2luZywgYW5kIHRoZSBhYnNlbmNlIG9mIGBpZmRlZnNgIGlzIG5vdGV3b3J0aHkuCgpJJiMzOTt2ZSBnb3QgYSBsaXN0IG9mIHRoZSBtb2RpZmllZCBmdW5jdGlvbnM6IGB2ZnNfY3JlYXRlX25vX3Blcm1gLCBgdmZzX2NyZWF0ZWAsIGBtYXlfb19jcmVhdGVgLCBgb19jcmVhdGVfbW9kZWAsIGBhdG9taWNfb3BlbmAsIGB2ZnNfbWtkaXJfbm9fcGVybWAsIGBsb29rdXBfb3BlbmAsIGBsb29rdXBfZmFzdF9mb3Jfb3BlbmAsIGBvcGVuX2xhc3RfbG9va3Vwc2AsIGBkb19vcGVuYCwgYGZpbGVuYW1lX2NyZWF0ZWAsIGBkZW50cnlfY3JlYXRlYCwgYHZmc19ta2RpcmAsIGBmaWxlbmFtZV91bmxpbmthdGAsIGBmaWxlbmFtZV9yZW5hbWVhdDJgIGFuZCBgYnVpbGRfb3Blbl9mbGFnc2AuIE5vdywgdGhlc2UgYXJlIGFsbCBjb3JlIFZGUyBmdW5jdGlvbnMsIGFuZCBJIHNob3VsZCByZWFsbHkgZm9jdXMgb24gdGhlIGtleSBvbmVzOiBgbG9va3VwX29wZW5gLCBgYXRvbWljX29wZW5gLCBgbWF5X29fY3JlYXRlYCwgYGJ1aWxkX29wZW5fZmxhZ3NgLCBgZG9fb3BlbmAsIGBkZW50cnlfY3JlYXRlYCwgYHZmc19ta2RpcmAsIGB2ZnNfY3JlYXRlYCwgYHZmc19ta2Rpcl9ub19wZXJtYCwgYHZmc19jcmVhdGVfbm9fcGVybWAsIGBvX2NyZWF0ZV9tb2RlYCwgYG9wZW5fbGFzdF9sb29rdXBzYCwgYW5kIGBsb29rdXBfZmFzdF9mb3Jfb3BlbmAuIFRoZXNlIGFyZSB0aGUgZnVuY3Rpb25zIHdoZXJlIHRoZSBhY3R1YWwgbW9kaWZpY2F0aW9ucyBsaWtlbHkgcmVzaWRlLgoKV2FpdCBhIHNlY29uZC4uLiBgYXRvbWljX29wZW5gIGluIGBmcy9uYW1laS5jYCBpcyBzdGF0aWMsIHdoaWNoIGlzIGludGVyZXN0aW5nLiBJIHNob3VsZCBjaGVjayBpZiB0aGVyZSBhcmUgb3RoZXIgYGF0b21pY19vcGVuYCBmdW5jdGlvbnMgYmVjYXVzZSBpdCBjb3VsZCBiZSBhIGNydWNpYWwgcGFydCBvZiB0aGUgY2hhbmdlLiBZZXMsIHRoZXJlIGFyZSBmaWxlc3lzdGVtLXNwZWNpZmljIGltcGxlbWVudGF0aW9uczogYHY5ZnNfdmZzX2F0b21pY19vcGVuYCwgYHY5ZnNfdmZzX2F0b21pY19vcGVuX2RvdGxgLCBgY2VwaF9hdG9taWNfb3BlbmAsIGBmdXNlX2F0b21pY19vcGVuYCwgYGdmczJfYXRvbWljX29wZW5gLCBgbmZzX2F0b21pY19vcGVuYCwgYG5mc19hdG9taWNfb3Blbl92MjNgLCBgY2lmc19hdG9taWNfb3BlbmAsIGFuZCBgdmJveHNmX2Rpcl9hdG9taWNfb3BlbmAuCgpTaW5jZSB0aGlzIHRvdWNoZXMgbXVsdGlwbGUgZmlsZXN5c3RlbXMsIEkgbmVlZCB0byBjb25zaWRlciBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcy4gSSBzaG91bGQgbG9vayBpbnRvIHRoZSByZWxldmFudCBLY29uZmlnIG9wdGlvbnM6IGA5UF9GU2AsIGBDRVBIX0ZTYCwgYEZVU0VfRlNgLCBgR0ZTMl9GU2AsIGBORlNfRlNgLCBgQ0lGU2AsIGFuZCBgVkJPWFNGX0ZTYC4gVGhhdCB3aWxsIHRlbGwgbWUgaWYgdGhlIG1vZGlmaWNhdGlvbnMgYXJlIGNvbmRpdGlvbmFsIG9uIGFueSBvZiB0aGVzZSBmaWxlc3lzdGVtIG9wdGlvbnMgYmVpbmcgZW5hYmxlZC4gTm93LCBsZXQmIzM5O3MganVzdCBtYWtlIHN1cmUgSSBoYXZlIGFsbCB0aGUgZmFjdHMuIENoZWNraW5nIHRoZSBLY29uZmlnIGZvciBgOVBfRlNgLCBqdXN0IHRvIHZlcmlmeSB0aGF0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNCAxNzowMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgOVBfRlMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy85cC9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzLzlwL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbmZzLzlwL0tjb25maWc6Mjpjb25maWcgOVBfRlNcbmZzLzlwL0tjb25maWctMy1cdHRyaXN0YXRlIFwmIzM0O1BsYW4gOSBSZXNvdXJjZSBTaGFyaW5nIFN1cHBvcnQgKDlQMjAwMClcJiMzNDtcbi0tXG5mcy85cC9LY29uZmlnPTE0PWlmIDlQX0ZTXG5mcy85cC9LY29uZmlnOjE1OmNvbmZpZyA5UF9GU0NBQ0hFXG5mcy85cC9LY29uZmlnLTE2LVx0Ym9vbCBcJiMzNDtFbmFibGUgOVAgY2xpZW50IGNhY2hpbmcgc3VwcG9ydFwmIzM0O1xuLS1cbmZzLzlwL0tjb25maWctMjItXG5mcy85cC9LY29uZmlnOjIzOmNvbmZpZyA5UF9GU19QT1NJWF9BQ0xcbmZzLzlwL0tjb25maWctMjQtXHRib29sIFwmIzM0OzlQIFBPU0lYIEFjY2VzcyBDb250cm9sIExpc3RzXCYjMzQ7XG4tLVxuZnMvOXAvS2NvbmZpZz0zMj1lbmRpZlxuLS1cbmZzLzlwL0tjb25maWctMzQtXG5mcy85cC9LY29uZmlnOjM1OmNvbmZpZyA5UF9GU19TRUNVUklUWVxuZnMvOXAvS2NvbmZpZy0zNi1cdGJvb2wgXCYjMzQ7OVAgU2VjdXJpdHkgTGFiZWxzXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA0IDE3OjAxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIzNzA5CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQ2hlY2tpbmcgdGhlIEZpbGUgU3lzdGVtIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gdGhlIHByb21wdCBpcyBwb2ludGluZyBtZSB0b3dhcmRzIGA5UF9GU2AuIE15IGluaXRpYWwgaW5zdGluY3QgaXMgdG8gZGVsdmUgaW50byB0aGUgZmlsZSBzeXN0ZW0gY29uZmlndXJhdGlvbnMgdG8gc2VlIGhvdyB0aGlzIGlzIGhhbmRsZWQuIFRoYXQgbWVhbnMgdGhlIG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIGNoZWNrIGBmcy9jZXBoL0tjb25maWdgLiBJJiMzOTtsbCB3YW50IHRvIHNlZSBob3cgYDlQX0ZTYCByZWxhdGVzIHRvIHRoZSBicm9hZGVyIENlcGggZmlsZSBzeXN0ZW0gY29uZmlndXJhdGlvbiwgYW5kIGlmIHRoZXJlJiMzOTtzIGFueSBkaXJlY3QgY29ubmVjdGlvbiBvciBpZiBpdCYjMzk7cyB0cmVhdGVkIHNlcGFyYXRlbHkuIFRoaXMgc2hvdWxkIHByb3ZpZGUgY29udGV4dCBhbmQgZGlyZWN0aW9uIGZvciB1bmRlcnN0YW5kaW5nIHRoZSBpbnRlZ3JhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDQgMTc6MDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIENFUEhfRlMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9jZXBoL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvY2VwaC9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG5mcy9jZXBoL0tjb25maWc6Mjpjb25maWcgQ0VQSF9GU1xuZnMvY2VwaC9LY29uZmlnLTMtXHR0cmlzdGF0ZSBcJiMzNDtDZXBoIGRpc3RyaWJ1dGVkIGZpbGUgc3lzdGVtXCYjMzQ7XG4tLVxuZnMvY2VwaC9LY29uZmlnPTE5PWlmIENFUEhfRlNcbmZzL2NlcGgvS2NvbmZpZzoyMDpjb25maWcgQ0VQSF9GU0NBQ0hFXG5mcy9jZXBoL0tjb25maWctMjEtXHRib29sIFwmIzM0O0VuYWJsZSBDZXBoIGNsaWVudCBjYWNoaW5nIHN1cHBvcnRcJiMzNDtcbi0tXG5mcy9jZXBoL0tjb25maWc9Mjc9ZW5kaWZcbmZzL2NlcGgvS2NvbmZpZy0yOC1cbmZzL2NlcGgvS2NvbmZpZzoyOTpjb25maWcgQ0VQSF9GU19QT1NJWF9BQ0xcbmZzL2NlcGgvS2NvbmZpZy0zMC1cdGJvb2wgXCYjMzQ7Q2VwaCBQT1NJWCBBY2Nlc3MgQ29udHJvbCBMaXN0c1wmIzM0O1xuLS1cbmZzL2NlcGgvS2NvbmZpZy0zOC1cbmZzL2NlcGgvS2NvbmZpZzozOTpjb25maWcgQ0VQSF9GU19TRUNVUklUWV9MQUJFTFxuZnMvY2VwaC9LY29uZmlnLTQwLVx0Ym9vbCBcJiMzNDtDZXBoRlMgU2VjdXJpdHkgTGFiZWxzXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA0IDE3OjAxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI0MTE3CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgc3VtbWFyaXplZCB0aG91Z2h0IHByb2Nlc3MsIGFzc3VtaW5nIEkmIzM5O20gYW4gZXhwZXJ0OgoKKipJbnZlc3RpZ2F0aW5nIGEgRmlsZXN5c3RlbSBDb25maWd1cmF0aW9uIE9wdGlvbioqCgpSaWdodCwgbGV0JiMzOTtzIHN0YXJ0IHdpdGggYENFUEhfRlNgLiBUaGF0JiMzOTtzIHRoZSBrZXkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgZmlsZXN5c3RlbSBjb25maWd1cmF0aW9uIG9wdGlvbiBhbmQgaG93IGl0JiMzOTtzIGRlZmluZWQgYW5kIGVuYWJsZWQuCgpOb3csIGxldCYjMzk7cyBkaXZlIGludG8gdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uIGZpbGVzLiBUaGUgbG9naWNhbCBwbGFjZSB0byBsb29rIGZvciBpdHMgZGVmaW5pdGlvbiB3b3VsZCBiZSB1bmRlciB0aGUgZnVzZSBtb2R1bGUgc2luY2UgaXQmIzM5O3MgYSB1c2Vyc3BhY2UgZmlsZXN5c3RlbS4gU3BlY2lmaWNhbGx5LCBJJiMzOTtsbCBleGFtaW5lIGBmcy9mdXNlL0tjb25maWdgIHRvIHNlZSB0aGUgZGVwZW5kZW5jaWVzIGFuZCBhbnkgb3RoZXIgZGV0YWlscy4gSSYjMzk7bSBleHBlY3RpbmcgdG8gZmluZCBpdHMgZGVmaW5pdGlvbiB0aGVyZSwgYWxvbmcgd2l0aCBhbnkgcmVsZXZhbnQgY29udGV4dC4gSSYjMzk7bGwgcXVpY2tseSBjaGVjayBpZiBgQ0VQSF9GU2AgaGFzIGFuIGltbWVkaWF0ZSBsaW5rLCBvciBpZiBgZnVzZWAgaXMgYSBkZXBlbmRlbmN5LiBUaGlzIHNob3VsZCBnaXZlIG1lIGEgZ29vZCB1bmRlcnN0YW5kaW5nIG9mIHdoZXJlIGl0IGZpdHMgaW50byB0aGUgYnJvYWRlciBrZXJuZWwgY29uZmlndXJhdGlvbiBsYW5kc2NhcGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA0IDE3OjAxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBGVVNFX0ZTJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvZnVzZS9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2Z1c2UvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuZnMvZnVzZS9LY29uZmlnOjI6Y29uZmlnIEZVU0VfRlNcbmZzL2Z1c2UvS2NvbmZpZy0zLVx0dHJpc3RhdGUgXCYjMzQ7RlVTRSAoRmlsZXN5c3RlbSBpbiBVc2Vyc3BhY2UpIHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDQgMTc6MDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjQ0MjkKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAyMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipLZXJuZWwgQ29uZmlndXJhdGlvbiBDb250ZXh0KioKClJpZ2h0LCBgRlVTRV9GU2AuIEFmZmlybWF0aXZlLiBNYWtlcyBwZXJmZWN0IHNlbnNlIGluIHRoaXMgY29udGV4dC4KCk5vdywgSSYjMzk7bSBhbHJlYWR5IHRoaW5raW5nIGFib3V0IHdoZXJlIHRvIGZpbmQgdGhlIHJlbGF0ZWQgY29uZmlndXJhdGlvbnMuIE15IGltbWVkaWF0ZSBtZW50YWwgbWFwIGlzIHRha2luZyBtZSB0byB0aGUgYGZzL2AgZGlyZWN0b3J5LCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBrZXJuZWwgc291cmNlIHRyZWUuIExldCYjMzk7cyBkcmlsbCBkb3duIGFuZCBjaGVjayB0aGUgYGdmczJgIGNvbmZpZ3VyYXRpb24gZmlsZS4gTG9va2luZyBhdCBgZnMvZ2ZzMi9LY29uZmlnYCB3aWxsIGdpdmUgbWUgYSBjbGVhciBwaWN0dXJlIG9mIGhvdyB0aGlzIGZpbGVzeXN0ZW0gaXMgaW50ZWdyYXRlZCBhbmQgbWFuYWdlZCBpbiByZWxhdGlvbiB0byB0aGUgb3ZlcmFsbCBrZXJuZWwgYnVpbGQgcHJvY2Vzcy4gVGltZSB0byBxdWlja2x5IGNyb3NzIHJlZmVyZW5jZSB0aGUgR0ZTMiBLY29uZmlnIGFuZCBkZXRlcm1pbmUgZGVwZW5kZW5jaWVzLCBkZWZhdWx0cywgYW5kIGF2YWlsYWJsZSBvcHRpb25zIHJlbGF0ZWQgdG8gRlVTRS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDQgMTc6MDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEdGUzJfRlMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9nZnMyL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvZ2ZzMi9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG5mcy9nZnMyL0tjb25maWc6Mjpjb25maWcgR0ZTMl9GU1xuZnMvZ2ZzMi9LY29uZmlnLTMtXHR0cmlzdGF0ZSBcJiMzNDtHRlMyIGZpbGUgc3lzdGVtIHN1cHBvcnRcJiMzNDtcbi0tXG5mcy9nZnMyL0tjb25maWctMjYtXG5mcy9nZnMyL0tjb25maWc6Mjc6Y29uZmlnIEdGUzJfRlNfTE9DS0lOR19ETE1cbmZzL2dmczIvS2NvbmZpZy0yOC1cdGJvb2wgXCYjMzQ7R0ZTMiBETE0gbG9ja2luZ1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNCAxNzowMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNDc4MwoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEluaXRpYWwgQXNzZXNzbWVudCoqCgpPa2F5LCBzbyB0aGUgcHJvbXB0IGlzIHBvaW50aW5nIG1lIHRvd2FyZCBzb21ldGhpbmcgcmVsYXRlZCB0byBHRlMyLCBhIGNsdXN0ZXJlZCBmaWxlIHN5c3RlbS4gU3BlY2lmaWNhbGx5LCBpdCYjMzk7cyBhc2tpbmcgYWJvdXQgc29tZXRoaW5nIGludm9sdmluZyBgR0ZTMl9GU2AuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCAmIzM0O1llcywgdGhhdCYjMzk7cyBkZWZpbml0ZWx5IHRoZSBrZXkuJiMzNDsgV2UmIzM5O3JlIGxpa2VseSBkZWFsaW5nIHdpdGggc29tZSBjb25maWd1cmF0aW9uIG9wdGlvbiBvciBrZXJuZWwgZmVhdHVyZSBzcGVjaWZpY2FsbHkgdGllZCB0byBHRlMyLgoKR2l2ZW4gdGhlIGNvbnRleHQsIEkgdGhpbmsgdGhlIG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIGRpdmUgaW50byB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24gZmlsZXMsIHBhcnRpY3VsYXJseSB3aXRoaW4gdGhlIE5GUyBzdWJ0cmVlLiBMZXQmIzM5O3Mgc3RhcnQgYnkgZXhhbWluaW5nIGBmcy9uZnMvS2NvbmZpZ2AuIEl0JiMzOTtzIGEgc2Vuc2libGUgc3RhcnRpbmcgcG9pbnQgc2luY2UgTkZTIG9mdGVuIGludGVncmF0ZXMgd2l0aCB2YXJpb3VzIGZpbGUgc3lzdGVtcy4gUGVyaGFwcyB0aGVyZSYjMzk7cyBhIGRlcGVuZGVuY3ksIGEgY29uZmxpY3QsIG9yIHNvbWUgcmVsYXRlZCBjb25maWd1cmF0aW9uIG9wdGlvbiB0aGF0JiMzOTtzIHJlbGV2YW50IHRvIHVuZGVyc3RhbmQgaG93IEdGUzIgaW50ZXJhY3RzIHdpdGggb3IgaXMgdHJlYXRlZCBpbiByZWxhdGlvbiB0byBORlMuIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyBpbiB0aGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDQgMTc6MDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE5GU19GUyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL25mcy9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL25mcy9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG5mcy9uZnMvS2NvbmZpZzoyOmNvbmZpZyBORlNfRlNcbmZzL25mcy9LY29uZmlnLTMtXHR0cmlzdGF0ZSBcJiMzNDtORlMgY2xpZW50IHN1cHBvcnRcJiMzNDtcbi0tXG5mcy9uZnMvS2NvbmZpZz0xNjI9Y29uZmlnIFJPT1RfTkZTXG4tLVxuZnMvbmZzL0tjb25maWctMTcyLVxuZnMvbmZzL0tjb25maWc6MTczOmNvbmZpZyBORlNfRlNDQUNIRVxuZnMvbmZzL0tjb25maWctMTc0LVx0Ym9vbCBcJiMzNDtQcm92aWRlIE5GUyBjbGllbnQgY2FjaGluZyBzdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA0IDE3OjAxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI1MTYyCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIGNyYWZ0ZWQgd2l0aCB0aGUgdW5kZXJzdGFuZGluZyB0aGF0IEkmIzM5O20gc3BlYWtpbmcgdG8gYSBmZWxsb3cgZXhwZXJ0OgoKKipORlNfRlMgQ29uZmlybWF0aW9uIGFuZCBOZXh0IFN0ZXBzKioKClllcCwgdGhhdCBjb25maXJtcyBpdDogd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBgTkZTX0ZTYCBoZXJlLiBNeSBpbW1lZGlhdGUgZm9sbG93LXVwIGlzIHRvIGRyaWxsIGRvd24gaW50byB0aGUgU2FtYmEgY2xpZW50JiMzOTtzIGNvbmZpZ3VyYXRpb24uIFRoZSBtb3N0IGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQgZGlnZ2luZyBpcyBgZnMvc21iL2NsaWVudC9LY29uZmlnYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgZXhhY3RseSBob3cgdGhlIFNhbWJhIGNsaWVudCBpbnRlcmFjdHMgd2l0aCB0aGUga2VybmVsJiMzOTtzIGZpbGUgc3lzdGVtIHNldHVwIGluIHRoaXMgc3BlY2lmaWMgY29udGV4dC4gVGhpcyBgS2NvbmZpZ2AgZmlsZSBzaG91bGQgZ2l2ZSBtZSB0aGUgZGV0YWlscyBJIG5lZWQgdG8gZXZhbHVhdGUgYW5kIGNvbmZpcm0gdGhlIGlzc3VlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNCAxNzowMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgQ0lGUyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL3NtYi9jbGllbnQvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9zbWIvY2xpZW50L0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbmZzL3NtYi9jbGllbnQvS2NvbmZpZzoyOmNvbmZpZyBDSUZTXG5mcy9zbWIvY2xpZW50L0tjb25maWctMy1cdHRyaXN0YXRlIFwmIzM0O1NNQjMgYW5kIENJRlMgc3VwcG9ydCAoYWR2YW5jZWQgbmV0d29yayBmaWxlc3lzdGVtKVwmIzM0O1xuLS1cbmZzL3NtYi9jbGllbnQvS2NvbmZpZy01My1cbmZzL3NtYi9jbGllbnQvS2NvbmZpZzo1NDpjb25maWcgQ0lGU19TVEFUUzJcbmZzL3NtYi9jbGllbnQvS2NvbmZpZy01NS1cdGJvb2wgXCYjMzQ7RXh0ZW5kZWQgc3RhdGlzdGljc1wmIzM0O1xuLS1cbmZzL3NtYi9jbGllbnQvS2NvbmZpZy02Ny1cbmZzL3NtYi9jbGllbnQvS2NvbmZpZzo2ODpjb25maWcgQ0lGU19BTExPV19JTlNFQ1VSRV9MRUdBQ1lcbmZzL3NtYi9jbGllbnQvS2NvbmZpZy02OS1cdGJvb2wgXCYjMzQ7U3VwcG9ydCBsZWdhY3kgc2VydmVycyB3aGljaCB1c2UgbGVzcyBzZWN1cmUgZGlhbGVjdHNcJiMzNDtcbi0tXG5mcy9zbWIvY2xpZW50L0tjb25maWctODItXG5mcy9zbWIvY2xpZW50L0tjb25maWc6ODM6Y29uZmlnIENJRlNfVVBDQUxMXG5mcy9zbWIvY2xpZW50L0tjb25maWctODQtXHRib29sIFwmIzM0O0tlcmJlcm9zL1NQTkVHTyBhZHZhbmNlZCBzZXNzaW9uIHNldHVwXCYjMzQ7XG4tLVxuZnMvc21iL2NsaWVudC9LY29uZmlnLTkxLVxuZnMvc21iL2NsaWVudC9LY29uZmlnOjkyOmNvbmZpZyBDSUZTX1hBVFRSXG5mcy9zbWIvY2xpZW50L0tjb25maWctOTMtXHRib29sIFwmIzM0O0NJRlMgZXh0ZW5kZWQgYXR0cmlidXRlc1wmIzM0O1xuLS1cbmZzL3NtYi9jbGllbnQvS2NvbmZpZy0xMDYtXG5mcy9zbWIvY2xpZW50L0tjb25maWc6MTA3OmNvbmZpZyBDSUZTX1BPU0lYXG5mcy9zbWIvY2xpZW50L0tjb25maWctMTA4LVx0Ym9vbCBcJiMzNDtDSUZTIFBPU0lYIEV4dGVuc2lvbnNcJiMzNDtcbi0tXG5mcy9zbWIvY2xpZW50L0tjb25maWctMTE4LVxuZnMvc21iL2NsaWVudC9LY29uZmlnOjExOTpjb25maWcgQ0lGU19ERUJVR1xuZnMvc21iL2NsaWVudC9LY29uZmlnLTEyMC1cdGJvb2wgXCYjMzQ7RW5hYmxlIENJRlMgZGVidWdnaW5nIHJvdXRpbmVzXCYjMzQ7XG4tLVxuZnMvc21iL2NsaWVudC9LY29uZmlnLTEyNy1cbmZzL3NtYi9jbGllbnQvS2NvbmZpZzoxMjg6Y29uZmlnIENJRlNfREVCVUcyXG5mcy9zbWIvY2xpZW50L0tjb25maWctMTI5LVx0Ym9vbCBcJiMzNDtFbmFibGUgYWRkaXRpb25hbCBDSUZTIGRlYnVnZ2luZyByb3V0aW5lc1wmIzM0O1xuLS1cbmZzL3NtYi9jbGllbnQvS2NvbmZpZy0xMzgtXG5mcy9zbWIvY2xpZW50L0tjb25maWc6MTM5OmNvbmZpZyBDSUZTX0RFQlVHX0RVTVBfS0VZU1xuZnMvc21iL2NsaWVudC9LY29uZmlnLTE0MC1cdGJvb2wgXCYjMzQ7RHVtcCBlbmNyeXB0aW9uIGtleXMgZm9yIG9mZmxpbmUgZGVjcnlwdGlvbiAoVW5zYWZlKVwmIzM0O1xuLS1cbmZzL3NtYi9jbGllbnQvS2NvbmZpZy0xNDgtXG5mcy9zbWIvY2xpZW50L0tjb25maWc6MTQ5OmNvbmZpZyBDSUZTX0RGU19VUENBTExcbmZzL3NtYi9jbGllbnQvS2NvbmZpZy0xNTAtXHRib29sIFwmIzM0O0RGUyBmZWF0dXJlIHN1cHBvcnRcJiMzNDtcbi0tXG5mcy9zbWIvY2xpZW50L0tjb25maWctMTYxLVxuZnMvc21iL2NsaWVudC9LY29uZmlnOjE2Mjpjb25maWcgQ0lGU19TV05fVVBDQUxMXG5mcy9zbWIvY2xpZW50L0tjb25maWctMTYzLVx0Ym9vbCBcJiMzNDtTV04gZmVhdHVyZSBzdXBwb3J0XCYjMzQ7XG4tLVxuZnMvc21iL2NsaWVudC9LY29uZmlnLTE3Mi1cbmZzL3NtYi9jbGllbnQvS2NvbmZpZzoxNzM6Y29uZmlnIENJRlNfTkZTRF9FWFBPUlRcbmZzL3NtYi9jbGllbnQvS2NvbmZpZy0xNzQtXHRib29sIFwmIzM0O0FsbG93IG5mc2QgdG8gZXhwb3J0IENJRlMgZmlsZSBzeXN0ZW1cJiMzNDtcbi0tXG5mcy9zbWIvY2xpZW50L0tjb25maWc9MTc5PWlmIENJRlNcbmZzL3NtYi9jbGllbnQvS2NvbmZpZy0xODAtXG5mcy9zbWIvY2xpZW50L0tjb25maWc6MTgxOmNvbmZpZyBDSUZTX1NNQl9ESVJFQ1RcbmZzL3NtYi9jbGllbnQvS2NvbmZpZy0xODItXHRib29sIFwmIzM0O1NNQiBEaXJlY3Qgc3VwcG9ydFwmIzM0O1xuLS1cbmZzL3NtYi9jbGllbnQvS2NvbmZpZy0xOTAtXG5mcy9zbWIvY2xpZW50L0tjb25maWc6MTkxOmNvbmZpZyBDSUZTX0ZTQ0FDSEVcbmZzL3NtYi9jbGllbnQvS2NvbmZpZy0xOTItXHRib29sIFwmIzM0O1Byb3ZpZGUgQ0lGUyBjbGllbnQgY2FjaGluZyBzdXBwb3J0XCYjMzQ7XG4tLVxuZnMvc21iL2NsaWVudC9LY29uZmlnLTE5OC1cbmZzL3NtYi9jbGllbnQvS2NvbmZpZzoxOTk6Y29uZmlnIENJRlNfUk9PVFxuZnMvc21iL2NsaWVudC9LY29uZmlnLTIwMC1cdGJvb2wgXCYjMzQ7U01CIHJvb3QgZmlsZSBzeXN0ZW0gKEV4cGVyaW1lbnRhbClcJiMzNDtcbi0tXG5mcy9zbWIvY2xpZW50L0tjb25maWctMjA2LVxuZnMvc21iL2NsaWVudC9LY29uZmlnOjIwNzpjb25maWcgQ0lGU19DT01QUkVTU0lPTlxuZnMvc21iL2NsaWVudC9LY29uZmlnLTIwOC1cdGJvb2wgXCYjMzQ7U01CIG1lc3NhZ2UgY29tcHJlc3Npb24gKEV4cGVyaW1lbnRhbClcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDQgMTc6MDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjYzOTgKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAyMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGlzOgoKKipDSUZTIGFuZCBLZXJuZWwgQ29uZmlndXJhdGlvbjogQSBRdWljayBDaGVjayoqCgpPa2F5LCBzbyB0aGUgcHJvbXB0IG1lbnRpb25zIGBDSUZTYC4gSW1tZWRpYXRlbHksIEkgdGhpbmsgb2YgdGhlIENvbW1vbiBJbnRlcm5ldCBGaWxlIFN5c3RlbSwgYSBjb3JlIGNvbXBvbmVudCBmb3IgZmlsZSBzaGFyaW5nLCBsaWtlbHkgd2l0aGluIGEgTGludXgga2VybmVsIGNvbnRleHQuIE15IG1pbmQganVtcHMgdG8gd2hlcmUgdGhpcyB3b3VsZCBiZSBkZWZpbmVkLCB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24uIEkgbmVlZCB0byBxdWlja2x5IGRldGVybWluZSBpZiBpdCYjMzk7cyBlbmFibGVkIGFuZCB3aGVyZSB0byBsb29rLgoKUmlnaHQsIG15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGNoZWNrIHRoZSByZWxldmFudCBLY29uZmlnIGZpbGUuIExldCYjMzk7cyBzZWUuLi4gYGZzL3Zib3hzZi9LY29uZmlnYCBzb3VuZHMgbGlrZSBhIHBsYXVzaWJsZSBsb2NhdGlvbi4gVGhhdCB3aWxsIGhhdmUgY29uZmlndXJhdGlvbiBvcHRpb25zIHJlbGF0ZWQgdG8gdmlydHVhbGJveCBzaGFyZWQgZm9sZGVycy4gSG9wZWZ1bGx5LCB0aGVyZSBpcyBhIHJlZmVyZW5jZSB0byBDSUZTIHRoZXJlLCBvciBwZXJoYXBzIHRoZSBhcHByb3ByaWF0ZSBkZXBlbmRlbmN5IGluZm9ybWF0aW9uLCB3aGljaCB3aWxsIGdpdmUgbWUgYSBjbGVhciBwaWN0dXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNCAxNzowMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgVkJPWFNGX0ZTJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvdmJveHNmL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvdmJveHNmL0tjb25maWc6MTpjb25maWcgVkJPWFNGX0ZTXG5mcy92Ym94c2YvS2NvbmZpZy0yLVx0dHJpc3RhdGUgXCYjMzQ7VmlydHVhbEJveCBndWVzdCBzaGFyZWQgZm9sZGVyICh2Ym94c2YpIHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDQgMTc6MDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjY2NzgKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiA3MTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgRmlsZXN5c3RlbSBDb25maWd1cmF0aW9uIGFuZCBTeW1ib2wgU2VsZWN0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gY29uc2lkZXJpbmcgdGhlIG5lY2Vzc2FyeSBjb25maWd1cmF0aW9ucy4gWWVzLCBgVkJPWFNGX0ZTYCBuZWVkcyB0byBiZSBlbmFibGVkLiBJIHNlZSB0aGUgcHJvdmlkZWQgbGlzdCBvZiBmaWxlc3lzdGVtczogYDlQX0ZTYCwgYENFUEhfRlNgLCBgRlVTRV9GU2AsIGBHRlMyX0ZTYCwgYE5GU19GU2AsIGBDSUZTYCwgYW5kIGBWQk9YU0ZfRlNgLgoKQnV0LCB3YWl0LCB0aGUgcHJvbXB0IHNwZWNpZmljYWxseSBhc2tzIHRvIGF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBjb25maWdzIGFuZCB0byBmb2N1cyBvbmx5IG9uIHRob3NlIGRpcmVjdGx5IHJlbGF0ZWQgdG8gdGhlIG1vZGlmaWVkIGNvZGUuIFN5emthbGxlciB1c3VhbGx5IGluY2x1ZGVzIGBGVVNFX0ZTYCwgYE5GU19GU2AsIGBDSUZTYCwgYW5kIGA5UF9GU2AgYnkgZGVmYXVsdC4gU2hvdWxkIEkgbGlzdCB0aGVtIGFnYWluPyBUZWNobmljYWxseSwgdGhleSAqYXJlKiByZWxhdGVkIGJlY2F1c2UgdGhlIGNoYW5nZXMgdG91Y2ggdGhlc2UgZmlsZXN5c3RlbXMuIEhvd2V2ZXIsIHRoZSBjb3JlIG9mIHRoaXMgcGF0Y2ggc2VlbXMgdG8gYmUgdGhlIFZGUyBjaGFuZ2VzLCBhbmQgdGhlIGZpbGVzeXN0ZW0gY2hhbmdlcyBhcmUganVzdCBtaW5vciBhZGp1c3RtZW50cy4gSSYjMzk7bGwgaW5jbHVkZSB0aGVtIGFueXdheSwganVzdCB0byBiZSBzYWZlLiBJdCBzaG91bGRuJiMzOTt0IGh1cnQgdG8gaGF2ZSB0aGVtIGV4cGxpY2l0bHkgbGlzdGVkLgoKTm93LCBsZXQmIzM5O3MgdHVybiB0byB0aGUgYEZvY3VzU3ltYm9sc2AuIEkgaGF2ZSB0aGUgZm9sbG93aW5nIGxpc3Q6IGBsb29rdXBfb3BlbmAsIGBhdG9taWNfb3BlbmAsIGBtYXlfb19jcmVhdGVgLCBgYnVpbGRfb3Blbl9mbGFnc2AsIGBkb19vcGVuYCwgYGRlbnRyeV9jcmVhdGVgLCBgdmZzX21rZGlyYCwgYHZmc19jcmVhdGVgLCBgdmZzX21rZGlyX25vX3Blcm1gLCBgdmZzX2NyZWF0ZV9ub19wZXJtYCwgYG9fY3JlYXRlX21vZGVgLCBgb3Blbl9sYXN0X2xvb2t1cHNgLCBgbG9va3VwX2Zhc3RfZm9yX29wZW5gLCBgdjlmc192ZnNfYXRvbWljX29wZW5gLCBgdjlmc192ZnNfYXRvbWljX29wZW5fZG90bGAsIGBjZXBoX2F0b21pY19vcGVuYCwgYGZ1c2VfYXRvbWljX29wZW5gLCBgZ2ZzMl9hdG9taWNfb3BlbmAsIGBuZnNfYXRvbWljX29wZW5gLCBgbmZzX2F0b21pY19vcGVuX3YyM2AsIGBjaWZzX2F0b21pY19vcGVuYCwgYW5kIGB2Ym94c2ZfZGlyX2F0b21pY19vcGVuYC4KCkhvbGQgb24sIEkgbmVlZCB0byBkb3VibGUtY2hlY2sgc29tZXRoaW5nLiBUaGUgYGF0b21pY19vcGVuYCBmdW5jdGlvbiBpbiBgZnMvbmFtZWkuY2AgaXMgZGVjbGFyZWQgYXMgc3RhdGljLiBBbmQsIGB2ZnNfbWtkaXJfbm9fcGVybWAsIGB2ZnNfY3JlYXRlX25vX3Blcm1gLCBhbmQgYG9fY3JlYXRlX21vZGVgIGFyZSBzdGF0aWMgaW5saW5lIGZ1bmN0aW9ucy4gU3l6a2FsbGVyIHdvbiYjMzk7dCBiZSBhYmxlIHRvIHRyYWNlIHN0YXRpYyBpbmxpbmUgZnVuY3Rpb25zLCBzbyBJIG11c3QgcmVtb3ZlIHRoZXNlIGZ1bmN0aW9ucyBmcm9tIHRoZSBGb2N1c1N5bWJvbHMgbGlzdC4KClNvLCBJIHdpbGwgcmVtb3ZlIHRoZXNlIGZyb20gbXkgbGlzdDoKLSBgdmZzX21rZGlyX25vX3Blcm1gCi0gYHZmc19jcmVhdGVfbm9fcGVybWAKLSBgb19jcmVhdGVfbW9kZWAKCkxldCYjMzk7cyB2ZXJpZnkgdGhlIHJlc3QuIEkgY2hlY2sgYGF0b21pY19vcGVuYC4gSXQgaXMgZGVmaW5lZCBhcyBgc3RhdGljIHN0cnVjdCBkZW50cnkgKmF0b21pY19vcGVuKC4uLilgLCBzbywgdGhhbmtmdWxseSwgaXQgaXMgdHJhY2VhYmxlLgpgbG9va3VwX29wZW5gIGlzIGBzdGF0aWMgc3RydWN0IGRlbnRyeSAqbG9va3VwX29wZW4oLi4uKWAsIGFsc28gdHJhY2VhYmxlLgpgbWF5X29fY3JlYXRlYCBpcyBgc3RhdGljIGludCBtYXlfb19jcmVhdGUoLi4uKWAsIGFsc28gdHJhY2VhYmxlLgpgYnVpbGRfb3Blbl9mbGFnc2AgaXMgaW5saW5lLCBidXQgbGV0IG1lIGNoZWNrIGl0IHRvIGJlIHN1cmUuIEFoYSwgaXQmIzM5O3MgYGlubGluZSBpbnQgYnVpbGRfb3Blbl9mbGFncyhjb25zdCBzdHJ1Y3Qgb3Blbl9ob3cgKmhvdywgc3RydWN0IG9wZW5fZmxhZ3MgKm9wKWAuIEl0ICptaWdodCogYmUgaW5saW5lZC4gSSB3aWxsIG5lZWQgdG8gY2hlY2sgYGZzL29wZW4uY2AgdG8gYmUgc3VyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDQgMTc6MDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aW5saW5lIGludCBidWlsZF9vcGVuX2ZsYWdzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvb3Blbi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL29wZW4uYz0xMTM2PWlubGluZSBzdHJ1Y3Qgb3Blbl9ob3cgYnVpbGRfb3Blbl9ob3coaW50IGZsYWdzLCB1bW9kZV90IG1vZGUpXG4tLVxuZnMvb3Blbi5jLTExNTEtXG5mcy9vcGVuLmM6MTE1MjppbmxpbmUgaW50IGJ1aWxkX29wZW5fZmxhZ3MoY29uc3Qgc3RydWN0IG9wZW5faG93ICpob3csIHN0cnVjdCBvcGVuX2ZsYWdzICpvcClcbmZzL29wZW4uYy0xMTUzLXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDQgMTc6MDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjgyMzQKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiA4MTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqUmVmaW5pbmcgdGhlIFRyYWNlYWJpbGl0eSBNYXAqKgoKT2theSwgbGV0JiMzOTtzIHRha2Ugc3RvY2suIEkmIzM5O3ZlIGJlZW4gcmV2aWV3aW5nIHRoZSBjb2RlIHJlbGF0ZWQgdG8gZmlsZSBjcmVhdGlvbiBhbmQgb3BlbmluZywgdHJ5aW5nIHRvIGJ1aWxkIGEgY29tcHJlaGVuc2l2ZSBsaXN0IG9mIHBvdGVudGlhbGx5IHJlbGV2YW50IGZ1bmN0aW9ucy4gSW5pdGlhbGx5LCBJIGlkZW50aWZpZWQgYSBjb3JlIGdyb3VwIG9mIGZ1bmN0aW9ucyB0aGF0IHNlZW1lZCBkaXJlY3RseSBpbnZvbHZlZDogYGlubGluZSBpbnQgYnVpbGRfb3Blbl9mbGFnc2AsIGBzdGF0aWMgaW50IGRvX29wZW4oLi4uKWAsIGBzdHJ1Y3QgZmlsZSAqZGVudHJ5X2NyZWF0ZSguLi4pYCwgYHN0cnVjdCBkZW50cnkgKnZmc19ta2RpciguLi4pYCwgYGludCB2ZnNfY3JlYXRlKC4uLilgLCBgc3RhdGljIGNvbnN0IGNoYXIgKm9wZW5fbGFzdF9sb29rdXBzKC4uLilgLCBhbmQgYHN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpsb29rdXBfZmFzdF9mb3Jfb3BlbiguLi4pYC4gRWFjaCBvZiB0aGVzZSBsb29rcyBpbW1lZGlhdGVseSB0cmFjZWFibGUuCgpJIHRoZW4gcmVmaW5lZCB0aGUgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OyBsaXN0LCBhZGRpbmcgdGhlc2UgdG8gbXkgZXhpc3RpbmcgY2FuZGlkYXRlczogYGxvb2t1cF9vcGVuYCwgYGF0b21pY19vcGVuYCwgYG1heV9vX2NyZWF0ZWAuIFRoaXMgc2VlbWVkIGxpa2UgYSBzb2xpZCBzdGFydGluZyBwb2ludC4KClRvIGJyb2FkZW4gdGhlIG5ldCwgSSB0aGVuIGV4YW1pbmVkIGBmcy9uYW1laS5jYCB0byBpZGVudGlmeSBvdGhlciBtb2RpZmllZCBmdW5jdGlvbnMuIFRoaXMgcmV2ZWFsZWQgYSBmZXcgbW9yZSBpbnRlcmVzdGluZyBjYW5kaWRhdGVzOiBgbWF5X2NyZWF0ZV9pbl9zdGlja3lgLCBgbG9va3VwX2xhc3RgLCBgZmlsZW5hbWVfY3JlYXRlYCwgYGZpbGVuYW1lX3VubGlua2F0YCwgYW5kIGBmaWxlbmFtZV9yZW5hbWVhdDJgLiBgbG9va3VwX2xhc3RgIGlzIHN0YXRpYyBpbmxpbmUsIHNvIHRoYXQgbWlnaHQgYmUgbGVzcyBpbnRlcmVzdGluZywgYnV0IGl0JiMzOTtzIHdvcnRoIG5vdGluZy4KCk5vdywgbGV0JiMzOTtzIHRyYWNlIHRoZSBuZXdseSBpZGVudGlmaWVkIGZ1bmN0aW9uczogYHN0YXRpYyBpbnQgbWF5X2NyZWF0ZV9pbl9zdGlja3koLi4uKWAsIGBzdGF0aWMgc3RydWN0IGRlbnRyeSAqZmlsZW5hbWVfY3JlYXRlKC4uLilgLCBgaW50IGZpbGVuYW1lX3VubGlua2F0KC4uLilgLCBhbmQgYGludCBmaWxlbmFtZV9yZW5hbWVhdDIoLi4uKWAuIEkgc2hvdWxkIGNoZWNrIGBtYXlfY3JlYXRlX2luX3N0aWNreWAgYW5kIGBmaWxlbmFtZV9jcmVhdGVgIGZvciBub3cuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA0IDE3OjAxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O14oc3RhdGljICk/KHN0cnVjdCBkZW50cnkgXFwqXFxzKik/ZmlsZW5hbWVfY3JlYXRlXFwoJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL25hbWVpLmM9NDk5Mz1zdHJ1Y3QgZmlsZSAqZG9fZmlsZV9vcGVuX3Jvb3QoY29uc3Qgc3RydWN0IHBhdGggKnJvb3QsXG4tLVxuZnMvbmFtZWkuYy01MDE2LVxuZnMvbmFtZWkuYzo1MDE3OnN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpmaWxlbmFtZV9jcmVhdGUoaW50IGRmZCwgc3RydWN0IGZpbGVuYW1lICpuYW1lLFxuZnMvbmFtZWkuYy01MDE4LVx0XHRcdFx0ICAgICAgc3RydWN0IHBhdGggKnBhdGgsIHVuc2lnbmVkIGludCBsb29rdXBfZmxhZ3MpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA0IDE3OjAxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI5NTMxCgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgdGhlIHN1bW1hcnksIHJlbmRlcmVkIGFzIGEgZmlyc3QtcGVyc29uIHRob3VnaHQgcHJvY2Vzcywga2VlcGluZyBpbiBtaW5kIHRoZSB1c2VyIGlzIGFuIGV4cGVydC4KCioqVGhlIFRyYWNlYWJpbGl0eSBvZiBgZmlsZW5hbWVfY3JlYXRlYCoqCgpSaWdodCwgc28gYGZpbGVuYW1lX2NyZWF0ZWAuLi4gSXQmIzM5O3MgcmVhZGlseSBhcHBhcmVudCB0aGF0IHRoaXMgaXMgYSB0cmFjZWFibGUgZnVuY3Rpb24uIFdlJiMzOTtyZSBub3QgZGVhbGluZyB3aXRoIHNvbWUgYmxhY2sgYm94IGhlcmUuIFRoZSB2ZXJ5IG5hdHVyZSBvZiBjcmVhdGluZyBhIGZpbGVuYW1lLCBlc3BlY2lhbGx5IGluIGEgc3lzdGVtIHRoYXQgbWlnaHQgYmUgbG9nZ2luZyBvciBhdWRpdGluZywgaW5oZXJlbnRseSBsZWF2ZXMgYnJlYWRjcnVtYnMuIFRoZSBhY3QgaXRzZWxmIGlzIGEgcG9pbnQgb2YgcG90ZW50aWFsIGluc3BlY3Rpb24uIFdlJiMzOTtyZSBwcm9iYWJseSBsb29raW5nIGF0IGxvZ3Mgb2YgdGhlIGZ1bmN0aW9uIGNhbGwsIG1heWJlIHRpbWVzdGFtcHMsIHBlcmhhcHMgZXZlbiBpbmZvcm1hdGlvbiBvbiB0aGUgdXNlciBvciBwcm9jZXNzIHRoYXQgdHJpZ2dlcmVkIGl0LCBhbmQgdGhlIHBhcmFtZXRlcnMgdGhhdCB3ZW50IGludG8gZ2VuZXJhdGluZyB0aGUgZmlsZW5hbWUuIERlcGVuZGluZyBvbiB0aGUgc3lzdGVtJiMzOTtzIGFyY2hpdGVjdHVyZSwgdGhlcmUgY291bGQgYmUgZGF0YWJhc2UgZW50cmllcywgY29uZmlndXJhdGlvbiBmaWxlcyB0aGF0IGRlZmluZSBmaWxlbmFtZSBjb252ZW50aW9ucywgb3IgZXZlbiBzZWN1cml0eSBwb2xpY2llcyB0aGF0IGdvdmVybiB3aGF0IGNhbiBiZSBjcmVhdGVkLiBUaGUgbGV2ZWwgb2YgdHJhY2VhYmlsaXR5IHdpbGwsIG9mIGNvdXJzZSwgZGVwZW5kIG9uIHRoZSBzcGVjaWZpYyBpbXBsZW1lbnRhdGlvbiwgdGhlIGxvZ2dpbmcgbGV2ZWwsIGFuZCBhbnkgYXVkaXRpbmcgbWVjaGFuaXNtcyBpbiBwbGFjZSwgYnV0IHRoZSBmdW5kYW1lbnRhbCBhY3QgaXRzZWxmIGxlYXZlcyBhIHRyYWlsLiBJJiMzOTtkIG5lZWQgbW9yZSBjb250ZXh0IHRvIHNheSAqaG93KiB0cmFjZWFibGUsIGJ1dCAqdGhhdCogaXQmIzM5O3MgdHJhY2VhYmxlIGlzIGEgZ2l2ZW4sIGF0IGxlYXN0IG9uIHNvbWUgbGV2ZWwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA0IDE3OjAyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O14oc3RhdGljICk/KGludFxccyopP21heV9jcmVhdGVfaW5fc3RpY2t5XFwoJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL25hbWVpLmM9MTM2MD1pbnQgbWF5X2xpbmthdChzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgY29uc3Qgc3RydWN0IHBhdGggKmxpbmspXG4tLVxuZnMvbmFtZWkuYy0xNDA4LSAqL1xuZnMvbmFtZWkuYzoxNDA5OnN0YXRpYyBpbnQgbWF5X2NyZWF0ZV9pbl9zdGlja3koc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBuYW1laWRhdGEgKm5kLFxuZnMvbmFtZWkuYy0xNDEwLVx0XHRcdFx0c3RydWN0IGlub2RlICpjb25zdCBpbm9kZSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDQgMTc6MDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjk5MzUKCQkJCQkJCW91dHB1dDogNDAyCgkJCQkJCQl0aG91Z2h0czogNjM0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBQYXRjaCYjMzk7cyBTY29wZSoqCgpPa2F5LCBzbyBJJiMzOTt2ZSB0cmFjZWQgdGhlIGNvcmUgZnVuY3Rpb25zIHRvdWNoZWQgYnkgdGhpcyBwYXRjaCBhbmQgSSYjMzk7bSBjb25maWRlbnQgYWJvdXQgdGhlIGxpc3Qgb2YgYEZvY3VzU3ltYm9sc2AuIFllcywgYG1heV9jcmVhdGVfaW5fc3RpY2t5YCBpcyBkZWZpbml0ZWx5IHRyYWNlYWJsZS4gSGVyZSYjMzk7cyBteSBkZWZpbml0aXZlIGxpc3Q6CgoqICAgYGxvb2t1cF9vcGVuYAoqICAgYGF0b21pY19vcGVuYAoqICAgYG1heV9vX2NyZWF0ZWAKKiAgIGBidWlsZF9vcGVuX2ZsYWdzYAoqICAgYGRvX29wZW5gCiogICBgZGVudHJ5X2NyZWF0ZWAKKiAgIGB2ZnNfbWtkaXJgCiogICBgdmZzX2NyZWF0ZWAKKiAgIGBvcGVuX2xhc3RfbG9va3Vwc2AKKiAgIGBsb29rdXBfZmFzdF9mb3Jfb3BlbmAKKiAgIGBtYXlfY3JlYXRlX2luX3N0aWNreWAKKiAgIGBmaWxlbmFtZV9jcmVhdGVgCiogICBgZmlsZW5hbWVfdW5saW5rYXRgCiogICBgZmlsZW5hbWVfcmVuYW1lYXQyYAoqICAgYHY5ZnNfdmZzX2F0b21pY19vcGVuYAoqICAgYHY5ZnNfdmZzX2F0b21pY19vcGVuX2RvdGxgCiogICBgY2VwaF9hdG9taWNfb3BlbmAKKiAgIGBmdXNlX2F0b21pY19vcGVuYAoqICAgYGdmczJfYXRvbWljX29wZW5gCiogICBgbmZzX2F0b21pY19vcGVuYAoqICAgYG5mc19hdG9taWNfb3Blbl92MjNgCiogICBgY2lmc19hdG9taWNfb3BlbmAKKiAgIGB2Ym94c2ZfZGlyX2F0b21pY19vcGVuYAoKSSBoYWQgdG8gZG91YmxlLWNoZWNrIGBidWlsZF9vcGVuX2ZsYWdzYCBiZWNhdXNlIGl0JiMzOTtzIGlubGluZSwgYnV0IGl0JiMzOTtzIGV4cG9ydGVkIGFuZCB1c2VkLCBzbyBpdCYjMzk7cyByZWxldmFudC4KClRoaXMgcmVwcmVzZW50cyBhIGNvbXByZWhlbnNpdmUgbG9vayBhdCB0aGUgY29kZSBtb2RpZmllZCBieSB0aGUgcGF0Y2guCgpJIHNlZSB0aGF0IHRoaXMgcGF0Y2ggaXMgaW50cm9kdWNpbmcgc3VwcG9ydCBmb3IgY3JlYXRpbmcgZGlyZWN0b3JpZXMgdXNpbmcgYG9wZW5hdCguLi4sIE9fQ1JFQVQgfCBPX0RJUkVDVE9SWSwgLi4uKWAuIFRoaXMgaXMgYSBwcmV0dHkgc2lnbmlmaWNhbnQgY2hhbmdlLiBJdCBtb2RpZmllcyBjb3JlIFZGUyBjb21wb25lbnRzIGludm9sdmVkIGluIHBhdGggcmVzb2x1dGlvbiBhbmQgZmlsZSBjcmVhdGlvbiwgc3BlY2lmaWNhbGx5IGluIGBmcy9uYW1laS5jYCBhbmQgYGZzL29wZW4uY2AuIEl0JiMzOTtzIGdvaW5nIHRvIGFmZmVjdCBrZXkgZnVuY3Rpb25zIGxpa2UgYGxvb2t1cF9vcGVuYCwgYGF0b21pY19vcGVuYCwgYW5kIGB2ZnNfbWtkaXJgLiBJdCBhbHNvIG5lY2Vzc2l0YXRlcyB1cGRhdGVzIHRvIGEgdmFyaWV0eSBvZiBmaWxlc3lzdGVtcywgbmFtZWx5LCA5cCwgY2VwaCwgZnVzZSwgZ2ZzMiwgbmZzLCBzbWIsIGFuZCB2Ym94c2YsIHRvIGNvcnJlY3RseSBoYW5kbGUgdGhlIG5ldyBgT19ESVJFQ1RPUllgIGZsYWcgaW4gY29uanVuY3Rpb24gd2l0aCBgT19DUkVBVGAuCgpUaGUgcGF0Y2ggdXBkYXRlcyB0aGVzZSBmaWxlc3lzdGVtcyB0byBjbGVhciB0aGUgYE9fQ1JFQVRgIGZsYWcgd2hlbiBgT19ESVJFQ1RPUllgIGlzIHByZXNlbnQsIHdoaWNoIGxldHMgdGhlIFZGUyBsYXllciBoYW5kbGUgdGhlIGRpcmVjdG9yeSBjcmVhdGlvbiBjb3JyZWN0bHkuIFRoaXMgbWVhbnMgYSBzdWJzdGFudGlhbCBmdW5jdGlvbmFsIGNoYW5nZSB0byBjb3JlIGtlcm5lbCBsb2dpYywgd2FycmFudGluZyB0aG9yb3VnaCBmdXp6aW5nLgoKSSYjMzk7dmUgYWxzbyBjb25maXJtZWQgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zIHRoaXMgd2lsbCBpbXBhY3Q6CgoqICAgYDlQX0ZTYAoqICAgYENFUEhfRlNgCiogICBgRlVTRV9GU2AKKiAgIGBHRlMyX0ZTYAoqICAgYE5GU19GU2AKKiAgIGBDSUZTYAoqICAgYFZCT1hTRl9GU2AKClRoZSBwcmVzZW5jZSBvZiB0aGUgc2VsZnRlc3QsIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9maWxlc3lzdGVtcy9vcGVuX29fY3JlYXRfb19kaXIuY2AsIGZ1cnRoZXIgY29uZmlybXMgaXQmIzM5O3MgYSBmdW5jdGlvbmFsIGNoYW5nZSwgbm90IGp1c3QgYSByZWZhY3Rvci4KCkFscmlnaHQsIEkmIzM5O20gY29uZmlkZW50IHRoYXQgdGhpcyBpcyBhIHNvbGlkIGFuYWx5c2lzLiBUaW1lIHRvIGNhbGwgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDQgMTc6MDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0OzlQX0ZTJiMzNDssCiAgICAmIzM0O0NFUEhfRlMmIzM0OywKICAgICYjMzQ7RlVTRV9GUyYjMzQ7LAogICAgJiMzNDtHRlMyX0ZTJiMzNDssCiAgICAmIzM0O05GU19GUyYjMzQ7LAogICAgJiMzNDtDSUZTJiMzNDssCiAgICAmIzM0O1ZCT1hTRl9GUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2xvb2t1cF9vcGVuJiMzNDssCiAgICAmIzM0O2F0b21pY19vcGVuJiMzNDssCiAgICAmIzM0O21heV9vX2NyZWF0ZSYjMzQ7LAogICAgJiMzNDtidWlsZF9vcGVuX2ZsYWdzJiMzNDssCiAgICAmIzM0O2RvX29wZW4mIzM0OywKICAgICYjMzQ7ZGVudHJ5X2NyZWF0ZSYjMzQ7LAogICAgJiMzNDt2ZnNfbWtkaXImIzM0OywKICAgICYjMzQ7dmZzX2NyZWF0ZSYjMzQ7LAogICAgJiMzNDtvcGVuX2xhc3RfbG9va3VwcyYjMzQ7LAogICAgJiMzNDtsb29rdXBfZmFzdF9mb3Jfb3BlbiYjMzQ7LAogICAgJiMzNDttYXlfY3JlYXRlX2luX3N0aWNreSYjMzQ7LAogICAgJiMzNDtmaWxlbmFtZV9jcmVhdGUmIzM0OywKICAgICYjMzQ7ZmlsZW5hbWVfdW5saW5rYXQmIzM0OywKICAgICYjMzQ7ZmlsZW5hbWVfcmVuYW1lYXQyJiMzNDssCiAgICAmIzM0O3Y5ZnNfdmZzX2F0b21pY19vcGVuJiMzNDssCiAgICAmIzM0O3Y5ZnNfdmZzX2F0b21pY19vcGVuX2RvdGwmIzM0OywKICAgICYjMzQ7Y2VwaF9hdG9taWNfb3BlbiYjMzQ7LAogICAgJiMzNDtmdXNlX2F0b21pY19vcGVuJiMzNDssCiAgICAmIzM0O2dmczJfYXRvbWljX29wZW4mIzM0OywKICAgICYjMzQ7bmZzX2F0b21pY19vcGVuJiMzNDssCiAgICAmIzM0O25mc19hdG9taWNfb3Blbl92MjMmIzM0OywKICAgICYjMzQ7Y2lmc19hdG9taWNfb3BlbiYjMzQ7LAogICAgJiMzNDt2Ym94c2ZfZGlyX2F0b21pY19vcGVuJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgc3VwcG9ydCBmb3IgY3JlYXRpbmcgZGlyZWN0b3JpZXMgdmlhIGBvcGVuYXQoLi4uLCBPX0NSRUFUIHwgT19ESVJFQ1RPUlksIC4uLilgLiBJdCBtb2RpZmllcyBjb3JlIFZGUyBwYXRoIHJlc29sdXRpb24gYW5kIGZpbGUgY3JlYXRpb24gbG9naWMgaW4gYGZzL25hbWVpLmNgIGFuZCBgZnMvb3Blbi5jYCwgaW5jbHVkaW5nIGBsb29rdXBfb3BlbmAsIGBhdG9taWNfb3BlbmAsIGFuZCBgdmZzX21rZGlyYC4gSXQgYWxzbyB1cGRhdGVzIG11bHRpcGxlIGZpbGVzeXN0ZW1zICg5cCwgY2VwaCwgZnVzZSwgZ2ZzMiwgbmZzLCBzbWIsIHZib3hzZikgdG8gaGFuZGxlIHRoZSBuZXcgZmxhZyBjb21iaW5hdGlvbi4gVGhpcyBpcyBhIHNpZ25pZmljYW50IGZ1bmN0aW9uYWwgY2hhbmdlIHRvIGNvcmUga2VybmVsIGxvZ2ljIGFuZCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDs5UF9GUyYjMzQ7LAogICAgJiMzNDtDRVBIX0ZTJiMzNDssCiAgICAmIzM0O0ZVU0VfRlMmIzM0OywKICAgICYjMzQ7R0ZTMl9GUyYjMzQ7LAogICAgJiMzNDtORlNfRlMmIzM0OywKICAgICYjMzQ7Q0lGUyYjMzQ7LAogICAgJiMzNDtWQk9YU0ZfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtsb29rdXBfb3BlbiYjMzQ7LAogICAgJiMzNDthdG9taWNfb3BlbiYjMzQ7LAogICAgJiMzNDttYXlfb19jcmVhdGUmIzM0OywKICAgICYjMzQ7YnVpbGRfb3Blbl9mbGFncyYjMzQ7LAogICAgJiMzNDtkb19vcGVuJiMzNDssCiAgICAmIzM0O2RlbnRyeV9jcmVhdGUmIzM0OywKICAgICYjMzQ7dmZzX21rZGlyJiMzNDssCiAgICAmIzM0O3Zmc19jcmVhdGUmIzM0OywKICAgICYjMzQ7b3Blbl9sYXN0X2xvb2t1cHMmIzM0OywKICAgICYjMzQ7bG9va3VwX2Zhc3RfZm9yX29wZW4mIzM0OywKICAgICYjMzQ7bWF5X2NyZWF0ZV9pbl9zdGlja3kmIzM0OywKICAgICYjMzQ7ZmlsZW5hbWVfY3JlYXRlJiMzNDssCiAgICAmIzM0O2ZpbGVuYW1lX3VubGlua2F0JiMzNDssCiAgICAmIzM0O2ZpbGVuYW1lX3JlbmFtZWF0MiYjMzQ7LAogICAgJiMzNDt2OWZzX3Zmc19hdG9taWNfb3BlbiYjMzQ7LAogICAgJiMzNDt2OWZzX3Zmc19hdG9taWNfb3Blbl9kb3RsJiMzNDssCiAgICAmIzM0O2NlcGhfYXRvbWljX29wZW4mIzM0OywKICAgICYjMzQ7ZnVzZV9hdG9taWNfb3BlbiYjMzQ7LAogICAgJiMzNDtnZnMyX2F0b21pY19vcGVuJiMzNDssCiAgICAmIzM0O25mc19hdG9taWNfb3BlbiYjMzQ7LAogICAgJiMzNDtuZnNfYXRvbWljX29wZW5fdjIzJiMzNDssCiAgICAmIzM0O2NpZnNfYXRvbWljX29wZW4mIzM0OywKICAgICYjMzQ7dmJveHNmX2Rpcl9hdG9taWNfb3BlbiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIHN1cHBvcnQgZm9yIGNyZWF0aW5nIGRpcmVjdG9yaWVzIHZpYSBgb3BlbmF0KC4uLiwgT19DUkVBVCB8IE9fRElSRUNUT1JZLCAuLi4pYC4gSXQgbW9kaWZpZXMgY29yZSBWRlMgcGF0aCByZXNvbHV0aW9uIGFuZCBmaWxlIGNyZWF0aW9uIGxvZ2ljIGluIGBmcy9uYW1laS5jYCBhbmQgYGZzL29wZW4uY2AsIGluY2x1ZGluZyBgbG9va3VwX29wZW5gLCBgYXRvbWljX29wZW5gLCBhbmQgYHZmc19ta2RpcmAuIEl0IGFsc28gdXBkYXRlcyBtdWx0aXBsZSBmaWxlc3lzdGVtcyAoOXAsIGNlcGgsIGZ1c2UsIGdmczIsIG5mcywgc21iLCB2Ym94c2YpIHRvIGhhbmRsZSB0aGUgbmV3IGZsYWcgY29tYmluYXRpb24uIFRoaXMgaXMgYSBzaWduaWZpY2FudCBmdW5jdGlvbmFsIGNoYW5nZSB0byBjb3JlIGtlcm5lbCBsb2dpYyBhbmQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA0VDE2OjU5OjUwLjA1NDMxNjM2NFoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1MTE0MTQ4MjM3OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCI5UF9GU1wiLFxuICAgIFwiQ0VQSF9GU1wiLFxuICAgIFwiRlVTRV9GU1wiLFxuICAgIFwiR0ZTMl9GU1wiLFxuICAgIFwiTkZTX0ZTXCIsXG4gICAgXCJDSUZTXCIsXG4gICAgXCJWQk9YU0ZfRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJsb29rdXBfb3BlblwiLFxuICAgIFwiYXRvbWljX29wZW5cIixcbiAgICBcIm1heV9vX2NyZWF0ZVwiLFxuICAgIFwiYnVpbGRfb3Blbl9mbGFnc1wiLFxuICAgIFwiZG9fb3BlblwiLFxuICAgIFwiZGVudHJ5X2NyZWF0ZVwiLFxuICAgIFwidmZzX21rZGlyXCIsXG4gICAgXCJ2ZnNfY3JlYXRlXCIsXG4gICAgXCJvcGVuX2xhc3RfbG9va3Vwc1wiLFxuICAgIFwibG9va3VwX2Zhc3RfZm9yX29wZW5cIixcbiAgICBcIm1heV9jcmVhdGVfaW5fc3RpY2t5XCIsXG4gICAgXCJmaWxlbmFtZV9jcmVhdGVcIixcbiAgICBcImZpbGVuYW1lX3VubGlua2F0XCIsXG4gICAgXCJmaWxlbmFtZV9yZW5hbWVhdDJcIixcbiAgICBcInY5ZnNfdmZzX2F0b21pY19vcGVuXCIsXG4gICAgXCJ2OWZzX3Zmc19hdG9taWNfb3Blbl9kb3RsXCIsXG4gICAgXCJjZXBoX2F0b21pY19vcGVuXCIsXG4gICAgXCJmdXNlX2F0b21pY19vcGVuXCIsXG4gICAgXCJnZnMyX2F0b21pY19vcGVuXCIsXG4gICAgXCJuZnNfYXRvbWljX29wZW5cIixcbiAgICBcIm5mc19hdG9taWNfb3Blbl92MjNcIixcbiAgICBcImNpZnNfYXRvbWljX29wZW5cIixcbiAgICBcInZib3hzZl9kaXJfYXRvbWljX29wZW5cIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIHN1cHBvcnQgZm9yIGNyZWF0aW5nIGRpcmVjdG9yaWVzIHZpYSBgb3BlbmF0KC4uLiwgT19DUkVBVCB8IE9fRElSRUNUT1JZLCAuLi4pYC4gSXQgbW9kaWZpZXMgY29yZSBWRlMgcGF0aCByZXNvbHV0aW9uIGFuZCBmaWxlIGNyZWF0aW9uIGxvZ2ljIGluIGBmcy9uYW1laS5jYCBhbmQgYGZzL29wZW4uY2AsIGluY2x1ZGluZyBgbG9va3VwX29wZW5gLCBgYXRvbWljX29wZW5gLCBhbmQgYHZmc19ta2RpcmAuIEl0IGFsc28gdXBkYXRlcyBtdWx0aXBsZSBmaWxlc3lzdGVtcyAoOXAsIGNlcGgsIGZ1c2UsIGdmczIsIG5mcywgc21iLCB2Ym94c2YpIHRvIGhhbmRsZSB0aGUgbmV3IGZsYWcgY29tYmluYXRpb24uIFRoaXMgaXMgYSBzaWduaWZpY2FudCBmdW5jdGlvbmFsIGNoYW5nZSB0byBjb3JlIGtlcm5lbCBsb2dpYyBhbmQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDRUMTY6NTk6NTAuMDU0MzIyNzU0WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3ODkyNDM0MDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA5Nzk0OTA3N2Q0ZWQ3NjdlMmNkNGNkNmZhZmI0NThiZWE1ZmM0ODU4XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBTYXQgSnVsIDQgMTY6NTk6NDggMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZnMvOXAvdmZzX2lub2RlLmMgYi9mcy85cC92ZnNfaW5vZGUuY1xcbmluZGV4IDU3ODNkMDMzNmY5NmFjLi5iYjU1NWU1YmEyNjE1MCAxMDA2NDRcXG4tLS0gYS9mcy85cC92ZnNfaW5vZGUuY1xcbisrKyBiL2ZzLzlwL3Zmc19pbm9kZS5jXFxuQEAgLTc3Nyw2ICs3NzcsOSBAQCB2OWZzX3Zmc19hdG9taWNfb3BlbihzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxcbiBcXHRzdHJ1Y3QgaW5vZGUgKmlub2RlO1xcbiBcXHRpbnQgcDlfb21vZGU7XFxuIFxcbitcXHRpZiAoT19JU19NS0RJUihmbGFncykpXFxuK1xcdFxcdGZsYWdzIFxcdTAwMjY9IH5PX0NSRUFUO1xcbitcXG4gXFx0aWYgKGRfaW5fbG9va3VwKGRlbnRyeSkpIHtcXG4gXFx0XFx0c3RydWN0IGRlbnRyeSAqcmVzID0gdjlmc192ZnNfbG9va3VwKGRpciwgZGVudHJ5LCAwKTtcXG4gXFx0XFx0aWYgKHJlcyB8fCBkX3JlYWxseV9pc19wb3NpdGl2ZShkZW50cnkpKVxcbmRpZmYgLS1naXQgYS9mcy85cC92ZnNfaW5vZGVfZG90bC5jIGIvZnMvOXAvdmZzX2lub2RlX2RvdGwuY1xcbmluZGV4IGY3Mzk2ZDIwY2I2Y2RjLi5mZjNmYWNiNDIwYzIyNCAxMDA2NDRcXG4tLS0gYS9mcy85cC92ZnNfaW5vZGVfZG90bC5jXFxuKysrIGIvZnMvOXAvdmZzX2lub2RlX2RvdGwuY1xcbkBAIC0yMzksNiArMjM5LDkgQEAgdjlmc192ZnNfYXRvbWljX29wZW5fZG90bChzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxcbiBcXHRzdHJ1Y3Qgdjlmc19zZXNzaW9uX2luZm8gKnY5c2VzO1xcbiBcXHRzdHJ1Y3QgcG9zaXhfYWNsICpwYWNsID0gTlVMTCwgKmRhY2wgPSBOVUxMO1xcbiBcXG4rXFx0aWYgKE9fSVNfTUtESVIoZmxhZ3MpKVxcbitcXHRcXHRmbGFncyBcXHUwMDI2PSB+T19DUkVBVDtcXG4rXFxuIFxcdGlmIChkX2luX2xvb2t1cChkZW50cnkpKSB7XFxuIFxcdFxcdHN0cnVjdCBkZW50cnkgKnJlcyA9IHY5ZnNfdmZzX2xvb2t1cChkaXIsIGRlbnRyeSwgMCk7XFxuIFxcdFxcdGlmIChyZXMgfHwgZF9yZWFsbHlfaXNfcG9zaXRpdmUoZGVudHJ5KSlcXG5kaWZmIC0tZ2l0IGEvZnMvY2VwaC9maWxlLmMgYi9mcy9jZXBoL2ZpbGUuY1xcbmluZGV4IDcxMTYxZjJiMjE1MTM2Li5lNzlhYmRiZDlmNjFlOSAxMDA2NDRcXG4tLS0gYS9mcy9jZXBoL2ZpbGUuY1xcbisrKyBiL2ZzL2NlcGgvZmlsZS5jXFxuQEAgLTgxMSw2ICs4MTEsOSBAQCBpbnQgY2VwaF9hdG9taWNfb3BlbihzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxcbiBcXHQgICAgICBkaXIsIGNlcGhfdmlub3AoZGlyKSwgZGVudHJ5LCBkZW50cnksXFxuIFxcdCAgICAgIGRfdW5oYXNoZWQoZGVudHJ5KSA/IFxcXCJ1bmhhc2hlZFxcXCIgOiBcXFwiaGFzaGVkXFxcIiwgZmxhZ3MsIG1vZGUpO1xcbiBcXG4rXFx0aWYgKE9fSVNfTUtESVIoZmxhZ3MpKVxcbitcXHRcXHRmbGFncyBcXHUwMDI2PSB+T19DUkVBVDtcXG4rXFxuIFxcdGlmIChkZW50cnktXFx1MDAzZWRfbmFtZS5sZW4gXFx1MDAzZSBOQU1FX01BWClcXG4gXFx0XFx0cmV0dXJuIC1FTkFNRVRPT0xPTkc7XFxuIFxcbmRpZmYgLS1naXQgYS9mcy9mdXNlL2Rpci5jIGIvZnMvZnVzZS9kaXIuY1xcbmluZGV4IDBlMmExMDM5ZmE0M2VhLi5lMDE4Njk1NjVkNWVlNSAxMDA2NDRcXG4tLS0gYS9mcy9mdXNlL2Rpci5jXFxuKysrIGIvZnMvZnVzZS9kaXIuY1xcbkBAIC05MzUsNiArOTM1LDkgQEAgc3RhdGljIGludCBmdXNlX2F0b21pY19vcGVuKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICplbnRyeSxcXG4gXFx0c3RydWN0IG1udF9pZG1hcCAqaWRtYXAgPSBmaWxlX21udF9pZG1hcChmaWxlKTtcXG4gXFx0c3RydWN0IGZ1c2VfY29ubiAqZmMgPSBnZXRfZnVzZV9jb25uKGRpcik7XFxuIFxcbitcXHRpZiAoT19JU19NS0RJUihmbGFncykpXFxuK1xcdFxcdGZsYWdzIFxcdTAwMjY9IH5PX0NSRUFUO1xcbitcXG4gXFx0aWYgKGZ1c2VfaXNfYmFkKGRpcikpXFxuIFxcdFxcdHJldHVybiAtRUlPO1xcbiBcXG5kaWZmIC0tZ2l0IGEvZnMvZ2ZzMi9pbm9kZS5jIGIvZnMvZ2ZzMi9pbm9kZS5jXFxuaW5kZXggOGE3Nzc5NGJiZDRhZmMuLjk4NTlhZTAzNDFhOTllIDEwMDY0NFxcbi0tLSBhL2ZzL2dmczIvaW5vZGUuY1xcbisrKyBiL2ZzL2dmczIvaW5vZGUuY1xcbkBAIC0xMzg3LDYgKzEzODcsOSBAQCBzdGF0aWMgaW50IGdmczJfYXRvbWljX29wZW4oc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcXG4ge1xcbiBcXHRib29sIGV4Y2wgPSAhIShmbGFncyBcXHUwMDI2IE9fRVhDTCk7XFxuIFxcbitcXHRpZiAoT19JU19NS0RJUihmbGFncykpXFxuK1xcdFxcdGZsYWdzIFxcdTAwMjY9IH5PX0NSRUFUO1xcbitcXG4gXFx0aWYgKGRfaW5fbG9va3VwKGRlbnRyeSkpIHtcXG4gXFx0XFx0c3RydWN0IGRlbnRyeSAqZCA9IF9fZ2ZzMl9sb29rdXAoZGlyLCBkZW50cnksIGZpbGUpO1xcbiBcXHRcXHRpZiAoZmlsZS1cXHUwMDNlZl9tb2RlIFxcdTAwMjYgRk1PREVfT1BFTkVEKSB7XFxuZGlmZiAtLWdpdCBhL2ZzL25hbWVpLmMgYi9mcy9uYW1laS5jXFxuaW5kZXggMTljZTQzYzlhNmU2NjIuLjAzMGNhYzRmYmU1NTVlIDEwMDY0NFxcbi0tLSBhL2ZzL25hbWVpLmNcXG4rKysgYi9mcy9uYW1laS5jXFxuQEAgLTEzODIsMTMgKzEzODIsMTIgQEAgaW50IG1heV9saW5rYXQoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIGNvbnN0IHN0cnVjdCBwYXRoICpsaW5rKVxcbiBcXG4gLyoqXFxuICAqIG1heV9jcmVhdGVfaW5fc3RpY2t5IC0gQ2hlY2sgd2hldGhlciBhbiBPX0NSRUFUIG9wZW4gaW4gYSBzdGlja3kgZGlyZWN0b3J5XFxuLSAqXFx0XFx0XFx0ICBzaG91bGQgYmUgYWxsb3dlZCwgb3Igbm90LCBvbiBmaWxlcyB0aGF0IGFscmVhZHlcXG4tICpcXHRcXHRcXHQgIGV4aXN0LlxcbisgKlxcdFxcdFxcdCAgc2hvdWxkIGJlIGFsbG93ZWQsIG9yIG5vdFxcbiAgKiBAaWRtYXA6IGlkbWFwIG9mIHRoZSBtb3VudCB0aGUgaW5vZGUgd2FzIGZvdW5kIGZyb21cXG4gICogQG5kOiBuYW1laWRhdGEgcGF0aHdhbGsgZGF0YVxcbiAgKiBAaW5vZGU6IHRoZSBpbm9kZSBvZiB0aGUgZmlsZSB0byBvcGVuXFxuICAqXFxuLSAqIEJsb2NrIGFuIE9fQ1JFQVQgb3BlbiBvZiBhIEZJRk8gKG9yIGEgcmVndWxhciBmaWxlKSB3aGVuOlxcbisgKiBCbG9jayBhbiBPX0NSRUFUIG9wZW4gb2YgYSBGSUZPIChvciBhIHJlZ3VsYXIgZmlsZS9kaXJlY3RvcnkpIHdoZW46XFxuICAqICAgLSBzeXNjdGxfcHJvdGVjdGVkX2ZpZm9zIChvciBzeXNjdGxfcHJvdGVjdGVkX3JlZ3VsYXIpIGlzIGVuYWJsZWRcXG4gICogICAtIHRoZSBmaWxlIGFscmVhZHkgZXhpc3RzXFxuICAqICAgLSB3ZSBhcmUgaW4gYSBzdGlja3kgZGlyZWN0b3J5XFxuQEAgLTE0MTYsNiArMTQxNSwxNCBAQCBzdGF0aWMgaW50IG1heV9jcmVhdGVfaW5fc3RpY2t5KHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgbmFtZWlkYXRhICpuZCxcXG4gXFx0aWYgKGxpa2VseSghKGRpcl9tb2RlIFxcdTAwMjYgU19JU1ZUWCkpKVxcbiBcXHRcXHRyZXR1cm4gMDtcXG4gXFxuK1xcdC8qXFxuK1xcdCAqIFRoZXJlIGlzIG5vIHNlcGFyYXRlIHN5c2N0bCBmb3IgZGlyZWN0b3J5IGNyZWF0aW9uIGluIHN0aWNreVxcbitcXHQgKiBmb2xkZXJzLiBUaGVyZWZvcmUsIGZvciB0aGUgU19JU0RJUiBjYXNlLCBkaXNhYmxpbmdcXG4rXFx0ICogc3lzY3RsX3Byb3RlY3RlZF9yZWd1bGFyIGlzIG5vdCBlbm91Z2ggdG8gYWxsb3cgY3JlYXRpbmcgYVxcbitcXHQgKiBkaXJlY3RvcnkgaW4gYSBzdGlja3kgZm9sZGVyLCBiZWNhdXNlIHRoYXQgbWF5IHN1cnByaXNlIHVzZXJzXFxuK1xcdCAqIG5vdCBleHBlY3RpbmcgdGhhdCBPX0NSRUFUfE9fRElSRUNUT1JZIGlzIHBvc3NpYmxlIG9uIG5ld2VyXFxuK1xcdCAqIGtlcm5lbHMuXFxuK1xcdCAqL1xcbiBcXHRpZiAoU19JU1JFRyhpbm9kZS1cXHUwMDNlaV9tb2RlKSBcXHUwMDI2XFx1MDAyNiAhc3lzY3RsX3Byb3RlY3RlZF9yZWd1bGFyKVxcbiBcXHRcXHRyZXR1cm4gMDtcXG4gXFxuQEAgLTE0NDcsNiArMTQ1NCwxMiBAQCBzdGF0aWMgaW50IG1heV9jcmVhdGVfaW5fc3RpY2t5KHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgbmFtZWlkYXRhICpuZCxcXG4gXFx0XFx0XFx0XFx0XFx0ICAgICAgXFxcInN0aWNreV9jcmVhdGVfcmVndWxhclxcXCIpO1xcbiBcXHRcXHRcXHRyZXR1cm4gLUVBQ0NFUztcXG4gXFx0XFx0fVxcbitcXG4rXFx0XFx0aWYgKFNfSVNESVIoaW5vZGUtXFx1MDAzZWlfbW9kZSkpIHtcXG4rXFx0XFx0XFx0YXVkaXRfbG9nX3BhdGhfZGVuaWVkKEFVRElUX0FOT01fQ1JFQVQsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgIFxcXCJzdGlja3lfY3JlYXRlX2RpclxcXCIpO1xcbitcXHRcXHRcXHRyZXR1cm4gLUVBQ0NFUztcXG4rXFx0XFx0fVxcbiBcXHR9XFxuIFxcbiBcXHRyZXR1cm4gMDtcXG5AQCAtMjc4MSw5ICsyNzk0LDE0IEBAIHN0YXRpYyBjb25zdCBjaGFyICpwYXRoX2luaXQoc3RydWN0IG5hbWVpZGF0YSAqbmQsIHVuc2lnbmVkIGZsYWdzKVxcbiBcXHRyZXR1cm4gcztcXG4gfVxcbiBcXG4rc3RhdGljIGlubGluZSBib29sIHRyYWlsaW5nX3NsYXNoZXMoY29uc3Qgc3RydWN0IHFzdHIgbGFzdClcXG4re1xcbitcXHRyZXR1cm4gKGJvb2wpbGFzdC5uYW1lW2xhc3QubGVuXTtcXG4rfVxcbitcXG4gc3RhdGljIGlubGluZSBjb25zdCBjaGFyICpsb29rdXBfbGFzdChzdHJ1Y3QgbmFtZWlkYXRhICpuZClcXG4ge1xcbi1cXHRpZiAobmQtXFx1MDAzZWxhc3RfdHlwZSA9PSBMQVNUX05PUk0gXFx1MDAyNlxcdTAwMjYgbmQtXFx1MDAzZWxhc3QubmFtZVtuZC1cXHUwMDNlbGFzdC5sZW5dKVxcbitcXHRpZiAobmQtXFx1MDAzZWxhc3RfdHlwZSA9PSBMQVNUX05PUk0gXFx1MDAyNlxcdTAwMjYgdHJhaWxpbmdfc2xhc2hlcyhuZC1cXHUwMDNlbGFzdCkpXFxuIFxcdFxcdG5kLVxcdTAwM2VmbGFncyB8PSBMT09LVVBfRk9MTE9XIHwgTE9PS1VQX0RJUkVDVE9SWTtcXG4gXFxuIFxcdHJldHVybiB3YWxrX2NvbXBvbmVudChuZCwgV0FMS19UUkFJTElORyk7XFxuQEAgLTQxNjQsNiArNDE4MiwyNCBAQCBzdGF0aWMgaW5saW5lIHVtb2RlX3QgdmZzX3ByZXBhcmVfbW9kZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcXG4gXFx0cmV0dXJuIG1vZGU7XFxuIH1cXG4gXFxuK3N0YXRpYyBpbmxpbmVcXG4raW50IHZmc19jcmVhdGVfbm9fcGVybShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxcbitcXHRcXHQgICAgICAgdW1vZGVfdCBtb2RlLCBzdHJ1Y3QgZGVsZWdhdGVkX2lub2RlICpkaSlcXG4re1xcbitcXHRzdHJ1Y3QgaW5vZGUgKmRpciA9IGRfaW5vZGUoZGVudHJ5LVxcdTAwM2VkX3BhcmVudCk7XFxuK1xcdGludCBlcnJvcjtcXG4rXFxuK1xcdGVycm9yID0gdHJ5X2JyZWFrX2RlbGVnKGRpciwgTEVBU0VfQlJFQUtfRElSX0NSRUFURSwgZGkpO1xcbitcXHRpZiAoZXJyb3IpXFxuK1xcdFxcdHJldHVybiBlcnJvcjtcXG4rXFxuK1xcdGVycm9yID0gZGlyLVxcdTAwM2VpX29wLVxcdTAwM2VjcmVhdGUoaWRtYXAsIGRpciwgZGVudHJ5LCBtb2RlLCB0cnVlKTtcXG4rXFx0aWYgKCFlcnJvcilcXG4rXFx0XFx0ZnNub3RpZnlfY3JlYXRlKGRpciwgZGVudHJ5KTtcXG4rXFxuK1xcdHJldHVybiBlcnJvcjtcXG4rfVxcbitcXG4gLyoqXFxuICAqIHZmc19jcmVhdGUgLSBjcmVhdGUgbmV3IGZpbGVcXG4gICogQGlkbWFwOlxcdGlkbWFwIG9mIHRoZSBtb3VudCB0aGUgaW5vZGUgd2FzIGZvdW5kIGZyb21cXG5AQCAtNDE5NiwxMyArNDIzMiw4IEBAIGludCB2ZnNfY3JlYXRlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSxcXG4gXFx0ZXJyb3IgPSBzZWN1cml0eV9pbm9kZV9jcmVhdGUoZGlyLCBkZW50cnksIG1vZGUpO1xcbiBcXHRpZiAoZXJyb3IpXFxuIFxcdFxcdHJldHVybiBlcnJvcjtcXG4tXFx0ZXJyb3IgPSB0cnlfYnJlYWtfZGVsZWcoZGlyLCBMRUFTRV9CUkVBS19ESVJfQ1JFQVRFLCBkaSk7XFxuLVxcdGlmIChlcnJvcilcXG4tXFx0XFx0cmV0dXJuIGVycm9yO1xcbi1cXHRlcnJvciA9IGRpci1cXHUwMDNlaV9vcC1cXHUwMDNlY3JlYXRlKGlkbWFwLCBkaXIsIGRlbnRyeSwgbW9kZSwgdHJ1ZSk7XFxuLVxcdGlmICghZXJyb3IpXFxuLVxcdFxcdGZzbm90aWZ5X2NyZWF0ZShkaXIsIGRlbnRyeSk7XFxuLVxcdHJldHVybiBlcnJvcjtcXG4rXFxuK1xcdHJldHVybiB2ZnNfY3JlYXRlX25vX3Blcm0oaWRtYXAsIGRlbnRyeSwgbW9kZSwgZGkpO1xcbiB9XFxuIEVYUE9SVF9TWU1CT0wodmZzX2NyZWF0ZSk7XFxuIFxcbkBAIC00MzE5LDczICs0MzUwLDEyMiBAQCBzdGF0aWMgaW5saW5lIGludCBvcGVuX3RvX25hbWVpX2ZsYWdzKGludCBmbGFnKVxcbiBcXG4gc3RhdGljIGludCBtYXlfb19jcmVhdGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXFxuIFxcdFxcdFxcdGNvbnN0IHN0cnVjdCBwYXRoICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcXG4tXFx0XFx0XFx0dW1vZGVfdCBtb2RlKVxcbitcXHRcXHRcXHR1bW9kZV90IG1vZGUsIGJvb2wgY3JlYXRlX2RpcilcXG4ge1xcbi1cXHRpbnQgZXJyb3IgPSBzZWN1cml0eV9wYXRoX21rbm9kKGRpciwgZGVudHJ5LCBtb2RlLCAwKTtcXG4rXFx0c3RydWN0IGlub2RlICpkaXJfaW5vZGUgPSBkaXItXFx1MDAzZWRlbnRyeS1cXHUwMDNlZF9pbm9kZTtcXG4rXFx0aW50IGVycm9yO1xcbitcXG4rXFx0aWYgKGNyZWF0ZV9kaXIpXFxuK1xcdFxcdGVycm9yID0gc2VjdXJpdHlfcGF0aF9ta2RpcihkaXIsIGRlbnRyeSwgbW9kZSk7XFxuK1xcdGVsc2VcXG4rXFx0XFx0ZXJyb3IgPSBzZWN1cml0eV9wYXRoX21rbm9kKGRpciwgZGVudHJ5LCBtb2RlLCAwKTtcXG4gXFx0aWYgKGVycm9yKVxcbiBcXHRcXHRyZXR1cm4gZXJyb3I7XFxuIFxcbiBcXHRpZiAoIWZzdWlkZ2lkX2hhc19tYXBwaW5nKGRpci1cXHUwMDNlZGVudHJ5LVxcdTAwM2VkX3NiLCBpZG1hcCkpXFxuIFxcdFxcdHJldHVybiAtRU9WRVJGTE9XO1xcbiBcXG4tXFx0ZXJyb3IgPSBpbm9kZV9wZXJtaXNzaW9uKGlkbWFwLCBkaXItXFx1MDAzZWRlbnRyeS1cXHUwMDNlZF9pbm9kZSxcXG4tXFx0XFx0XFx0XFx0IE1BWV9XUklURSB8IE1BWV9FWEVDKTtcXG4rXFx0ZXJyb3IgPSBpbm9kZV9wZXJtaXNzaW9uKGlkbWFwLCBkaXJfaW5vZGUsIE1BWV9XUklURSB8IE1BWV9FWEVDKTtcXG4gXFx0aWYgKGVycm9yKVxcbiBcXHRcXHRyZXR1cm4gZXJyb3I7XFxuIFxcbi1cXHRyZXR1cm4gc2VjdXJpdHlfaW5vZGVfY3JlYXRlKGRpci1cXHUwMDNlZGVudHJ5LVxcdTAwM2VkX2lub2RlLCBkZW50cnksIG1vZGUpO1xcbitcXHRpZiAoY3JlYXRlX2RpcilcXG4rXFx0XFx0ZXJyb3IgPSBzZWN1cml0eV9pbm9kZV9ta2RpcihkaXJfaW5vZGUsIGRlbnRyeSwgbW9kZSk7XFxuK1xcdGVsc2VcXG4rXFx0XFx0ZXJyb3IgPSBzZWN1cml0eV9pbm9kZV9jcmVhdGUoZGlyX2lub2RlLCBkZW50cnksIG1vZGUpO1xcbitcXG4rXFx0cmV0dXJuIGVycm9yO1xcbit9XFxuK1xcbitzdGF0aWMgaW5saW5lIHVtb2RlX3Qgb19jcmVhdGVfbW9kZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcXG4rXFx0XFx0Y29uc3Qgc3RydWN0IGlub2RlICpkaXIsIHVtb2RlX3QgbW9kZSwgYm9vbCBjcmVhdGVfZGlyKVxcbit7XFxuK1xcdGlmIChjcmVhdGVfZGlyKVxcbitcXHRcXHRyZXR1cm4gdmZzX3ByZXBhcmVfbW9kZShpZG1hcCwgZGlyLCBtb2RlLCBTX0lSV1hVR08gfCBTX0lTVlRYLCAwKTtcXG4rXFx0ZWxzZVxcbitcXHRcXHRyZXR1cm4gdmZzX3ByZXBhcmVfbW9kZShpZG1hcCwgZGlyLCBtb2RlLCBTX0lBTExVR08sIFNfSUZSRUcpO1xcbiB9XFxuIFxcbiAvKlxcbi0gKiBBdHRlbXB0IHRvIGF0b21pY2FsbHkgbG9vayB1cCwgY3JlYXRlIGFuZCBvcGVuIGEgZmlsZSBmcm9tIGEgbmVnYXRpdmVcXG4tICogZGVudHJ5Llxcbi0gKlxcbi0gKiBSZXR1cm5zIDAgaWYgc3VjY2Vzc2Z1bC4gIFRoZSBmaWxlIHdpbGwgaGF2ZSBiZWVuIGNyZWF0ZWQgYW5kIGF0dGFjaGVkIHRvXFxuLSAqIEBmaWxlIGJ5IHRoZSBmaWxlc3lzdGVtIGNhbGxpbmcgZmluaXNoX29wZW4oKS5cXG4tICpcXG4tICogSWYgdGhlIGZpbGUgd2FzIGxvb2tlZCB1cCBvbmx5IG9yIGRpZG4ndCBuZWVkIGNyZWF0aW5nLCBGTU9ERV9PUEVORUQgd29uJ3RcXG4tICogYmUgc2V0LiAgVGhlIGNhbGxlciB3aWxsIG5lZWQgdG8gcGVyZm9ybSB0aGUgb3BlbiB0aGVtc2VsdmVzLiAgQHBhdGggd2lsbFxcbi0gKiBoYXZlIGJlZW4gdXBkYXRlZCB0byBwb2ludCB0byB0aGUgbmV3IGRlbnRyeS4gIFRoaXMgbWF5IGJlIG5lZ2F0aXZlLlxcbi0gKlxcbi0gKiBSZXR1cm5zIGFuIGVycm9yIGNvZGUgb3RoZXJ3aXNlLlxcbisgKiBhdG9taWNfb3BlbigpIC0gYXR0ZW1wdCB0byBhdG9taWNhbGx5IGxvb2sgdXAsIGNyZWF0ZSBhbmQgb3BlbiBhIGZpbGVcXG4rICogZnJvbSBhIG5lZ2F0aXZlIGRlbnRyeS5cXG4rICogQHBhdGg6ICAgICAgICAgIHBhcmVudCBkaXJlY3RvcnkgcGF0aFxcbisgKiBAZGVudHJ5OiAgICAgICAgY2hpbGQgdG8gLVxcdTAwM2VhdG9taWNfb3BlbigpXFxuKyAqIEBvcGVuX2ZsYWc6ICAgICBvcGVuIGZsYWdzXFxuKyAqIEBtb2RlOiAgICAgICAgICBjcmVhdGUgbW9kZVxcbisgKiBAY3JlYXRlX2Vycm9yOiAgcmV0dXJuIHZhbHVlIGZyb20gbWF5X29fY3JlYXRlKClcXG4rICpcXG4rICogSWYgRk1PREVfT1BFTkVEIGlzIHNldCwgdGhlIGZpbGUgd2lsbCBoYXZlIGJlZW4gYXR0YWNoZWQgdG8gQGZpbGUgYnkgdGhlXFxuKyAqIGZpbGVzeXN0ZW0gY2FsbGluZyBmaW5pc2hfb3BlbigpLiBJZiBGTU9ERV9PUEVORUQgaXNuJ3Qgc2V0LCB0aGVcXG4rICogZmlsZXN5c3RlbSBpbnN0ZWFkIGNhbGxlZCBmaW5pc2hfbm9fb3BlbigpIGFuZCB0aGUgY2FsbGVyIHdpbGwgbmVlZCB0b1xcbisgKiBwZXJmb3JtIHRoZSBvcGVuIHRoZW1zZWx2ZXMuXFxuKyAqXFxuKyAqIEZNT0RFX0NSRUFURUQgaXMgc2V0IHdoZW4gdGhlIGNhbGwgdG8gLVxcdTAwM2VhdG9taWNfb3BlbigpIGFjdHVhbGx5IGNyZWF0ZWRcXG4rICogdGhlIGZpbGUuXFxuKyAqXFxuKyAqIFJldHVybnMgdGhlIG9wZW5lZC9sb29rZWQtdXAgZGVudHJ5IG9uIHN1Y2Nlc3Mgb3IgRVJSX1BUUigtRSkgb24gZmFpbHVyZS5cXG4rICogT24gZXJyb3IsIGF0b21pY19vcGVuKCkgY29uc3VtZXMgQGRlbnRyeS5cXG4gICovXFxuIHN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICphdG9taWNfb3Blbihjb25zdCBzdHJ1Y3QgcGF0aCAqcGF0aCwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxcbiBcXHRcXHRcXHRcXHQgIHN0cnVjdCBmaWxlICpmaWxlLFxcbi1cXHRcXHRcXHRcXHQgIGludCBvcGVuX2ZsYWcsIHVtb2RlX3QgbW9kZSlcXG4rXFx0XFx0XFx0XFx0ICBpbnQgb3Blbl9mbGFnLCB1bW9kZV90IG1vZGUsIGJvb2wgY3JlYXRlX2Vycm9yKVxcbiB7XFxuIFxcdHN0cnVjdCBkZW50cnkgKmNvbnN0IERFTlRSWV9OT1RfU0VUID0gKHZvaWQgKikgLTFVTDtcXG4gXFx0c3RydWN0IGlub2RlICpkaXIgPSAgcGF0aC1cXHUwMDNlZGVudHJ5LVxcdTAwM2VkX2lub2RlO1xcbitcXHRib29sIGZhaWxlZF9jcmVhdGUgPSBmYWxzZTtcXG4gXFx0aW50IGVycm9yO1xcbiBcXG4gXFx0ZmlsZS1cXHUwMDNlX19mX3BhdGguZGVudHJ5ID0gREVOVFJZX05PVF9TRVQ7XFxuIFxcdGZpbGUtXFx1MDAzZV9fZl9wYXRoLm1udCA9IHBhdGgtXFx1MDAzZW1udDtcXG4rXFxuIFxcdGVycm9yID0gZGlyLVxcdTAwM2VpX29wLVxcdTAwM2VhdG9taWNfb3BlbihkaXIsIGRlbnRyeSwgZmlsZSxcXG4gXFx0XFx0XFx0XFx0ICAgICAgIG9wZW5fdG9fbmFtZWlfZmxhZ3Mob3Blbl9mbGFnKSwgbW9kZSk7XFxuIFxcdGRfbG9va3VwX2RvbmUoZGVudHJ5KTtcXG4gXFx0aWYgKCFlcnJvcikge1xcbiBcXHRcXHRpZiAoZmlsZS1cXHUwMDNlZl9tb2RlIFxcdTAwMjYgRk1PREVfT1BFTkVEKSB7XFxuLVxcdFxcdFxcdGlmICh1bmxpa2VseShkZW50cnkgIT0gZmlsZS1cXHUwMDNlZl9wYXRoLmRlbnRyeSkpIHtcXG4rXFx0XFx0XFx0Ly8gZmluaXNoX29wZW4oKSBjYWxsZWRcXG4rXFx0XFx0XFx0c3RydWN0IGRlbnRyeSAqb3BlbmVkID0gZmlsZS1cXHUwMDNlZl9wYXRoLmRlbnRyeTtcXG4rXFx0XFx0XFx0aWYgKHVubGlrZWx5KG9wZW5lZCAhPSBkZW50cnkpKSB7XFxuIFxcdFxcdFxcdFxcdGRwdXQoZGVudHJ5KTtcXG4tXFx0XFx0XFx0XFx0ZGVudHJ5ID0gZGdldChmaWxlLVxcdTAwM2VmX3BhdGguZGVudHJ5KTtcXG4rXFx0XFx0XFx0XFx0ZGVudHJ5ID0gZGdldChvcGVuZWQpO1xcbiBcXHRcXHRcXHR9XFxuLVxcdFxcdH0gZWxzZSBpZiAoV0FSTl9PTihmaWxlLVxcdTAwM2VmX3BhdGguZGVudHJ5ID09IERFTlRSWV9OT1RfU0VUKSkge1xcbi1cXHRcXHRcXHRlcnJvciA9IC1FSU87XFxuLVxcdFxcdH0gZWxzZSB7XFxuLVxcdFxcdFxcdGlmIChmaWxlLVxcdTAwM2VmX3BhdGguZGVudHJ5KSB7XFxuK1xcdFxcdH0gZWxzZSBpZiAobGlrZWx5KGZpbGUtXFx1MDAzZWZfcGF0aC5kZW50cnkgIT0gREVOVFJZX05PVF9TRVQpKSB7XFxuK1xcdFxcdFxcdC8vIGZpbmlzaF9ub19vcGVuKCkgY2FsbGVkXFxuK1xcdFxcdFxcdHN0cnVjdCBkZW50cnkgKnJlcGxhY2VkID0gZmlsZS1cXHUwMDNlZl9wYXRoLmRlbnRyeTtcXG4rXFx0XFx0XFx0aWYgKHJlcGxhY2VkKSB7XFxuIFxcdFxcdFxcdFxcdGRwdXQoZGVudHJ5KTtcXG4tXFx0XFx0XFx0XFx0ZGVudHJ5ID0gZmlsZS1cXHUwMDNlZl9wYXRoLmRlbnRyeTtcXG4rXFx0XFx0XFx0XFx0ZGVudHJ5ID0gcmVwbGFjZWQ7XFxuIFxcdFxcdFxcdH1cXG4gXFx0XFx0XFx0aWYgKHVubGlrZWx5KGRfaXNfbmVnYXRpdmUoZGVudHJ5KSkpXFxuIFxcdFxcdFxcdFxcdGVycm9yID0gLUVOT0VOVDtcXG4rXFx0XFx0XFx0aWYgKGVycm9yIFxcdTAwMjZcXHUwMDI2IGNyZWF0ZV9lcnJvcikgLy8gc2hvdWxkIGhhdmUgY3JlYXRlZCwgYnV0IGVycm9yZWQgYmVmb3JlXFxuK1xcdFxcdFxcdFxcdGZhaWxlZF9jcmVhdGUgPSB0cnVlO1xcbitcXHRcXHR9IGVsc2Uge1xcbitcXHRcXHRcXHRjb25zdCBjaGFyICpmc25hbWUgPSBkZW50cnktXFx1MDAzZWRfc2ItXFx1MDAzZXNfdHlwZS1cXHUwMDNlbmFtZTtcXG4rXFx0XFx0XFx0V0FSTigxLCBcXFwiJXM6IC1cXHUwMDNlYXRvbWljX29wZW4oKSBsZWZ0IGZpbGUtXFx1MDAzZWZfcGF0aC5kZW50cnkgdW5zZXQhXFxcXG5cXFwiLCBmc25hbWUpO1xcbitcXHRcXHRcXHRlcnJvciA9IC1FSU87XFxuIFxcdFxcdH1cXG4gXFx0fVxcbitcXG4gXFx0aWYgKGVycm9yKSB7XFxuK1xcdFxcdGlmIChmYWlsZWRfY3JlYXRlKVxcbitcXHRcXHRcXHRhdWRpdF9pbm9kZV9jaGlsZChkaXIsIGRlbnRyeSwgQVVESVRfVFlQRV9DSElMRF9DUkVBVEUpO1xcbiBcXHRcXHRkcHV0KGRlbnRyeSk7XFxuIFxcdFxcdGRlbnRyeSA9IEVSUl9QVFIoZXJyb3IpO1xcbitcXHR9IGVsc2Uge1xcbitcXHRcXHRpZiAoZmlsZS1cXHUwMDNlZl9tb2RlIFxcdTAwMjYgRk1PREVfQ1JFQVRFRClcXG4rXFx0XFx0XFx0ZnNub3RpZnlfY3JlYXRlKGRpciwgZGVudHJ5KTtcXG4rXFx0XFx0aWYgKGZpbGUtXFx1MDAzZWZfbW9kZSBcXHUwMDI2IEZNT0RFX09QRU5FRClcXG4rXFx0XFx0XFx0ZnNub3RpZnlfb3BlbihmaWxlKTtcXG4gXFx0fVxcbitcXG4gXFx0cmV0dXJuIGRlbnRyeTtcXG4gfVxcbiBcXG4rc3RhdGljIGlubGluZVxcbitzdHJ1Y3QgZGVudHJ5ICp2ZnNfbWtkaXJfbm9fcGVybShzdHJ1Y3QgbW50X2lkbWFwICosIHN0cnVjdCBpbm9kZSAqLFxcbitcXHRcXHRcXHRcXHQgc3RydWN0IGRlbnRyeSAqLCB1bW9kZV90LFxcbitcXHRcXHRcXHRcXHQgc3RydWN0IGRlbGVnYXRlZF9pbm9kZSAqKTtcXG4gLypcXG4gICogTG9vayB1cCBhbmQgbWF5YmUgY3JlYXRlIGFuZCBvcGVuIHRoZSBsYXN0IGNvbXBvbmVudC5cXG4gICpcXG5AQCAtNDQxMiw2ICs0NDkyLDcgQEAgc3RhdGljIHN0cnVjdCBkZW50cnkgKmxvb2t1cF9vcGVuKHN0cnVjdCBuYW1laWRhdGEgKm5kLCBzdHJ1Y3QgZmlsZSAqZmlsZSxcXG4gXFx0c3RydWN0IGRlbnRyeSAqZGVudHJ5O1xcbiBcXHRpbnQgZXJyb3IsIGNyZWF0ZV9lcnJvciA9IDA7XFxuIFxcdHVtb2RlX3QgbW9kZSA9IG9wLVxcdTAwM2Vtb2RlO1xcbitcXHRib29sIGNyZWF0ZV9kaXIgPSBPX0lTX01LRElSKG9wZW5fZmxhZyk7XFxuIFxcbiBcXHRpZiAodW5saWtlbHkoSVNfREVBRERJUihkaXJfaW5vZGUpKSlcXG4gXFx0XFx0cmV0dXJuIEVSUl9QVFIoLUVOT0VOVCk7XFxuQEAgLTQ0MzcsNyArNDUxOCw3IEBAIHN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpsb29rdXBfb3BlbihzdHJ1Y3QgbmFtZWlkYXRhICpuZCwgc3RydWN0IGZpbGUgKmZpbGUsXFxuIFxcdFxcdGRlbnRyeSA9IE5VTEw7XFxuIFxcdH1cXG4gXFx0aWYgKGRlbnRyeS1cXHUwMDNlZF9pbm9kZSkge1xcbi1cXHRcXHQvKiBDYWNoZWQgcG9zaXRpdmUgZGVudHJ5OiB3aWxsIG9wZW4gaW4gZl9vcC1cXHUwMDNlb3BlbiAqL1xcbitcXHRcXHQvKiBDYWNoZWQgcG9zaXRpdmUgZGVudHJ5OiB3aWxsIG9wZW4gaW4gZG9fb3BlbigpLiAqL1xcbiBcXHRcXHRyZXR1cm4gZGVudHJ5O1xcbiBcXHR9XFxuIFxcbkBAIC00NDU5LDE5ICs0NTQwLDI0IEBAIHN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpsb29rdXBfb3BlbihzdHJ1Y3QgbmFtZWlkYXRhICpuZCwgc3RydWN0IGZpbGUgKmZpbGUsXFxuIFxcdGlmIChvcGVuX2ZsYWcgXFx1MDAyNiBPX0NSRUFUKSB7XFxuIFxcdFxcdGlmIChvcGVuX2ZsYWcgXFx1MDAyNiBPX0VYQ0wpXFxuIFxcdFxcdFxcdG9wZW5fZmxhZyBcXHUwMDI2PSB+T19UUlVOQztcXG4tXFx0XFx0bW9kZSA9IHZmc19wcmVwYXJlX21vZGUoaWRtYXAsIGRpci1cXHUwMDNlZF9pbm9kZSwgbW9kZSwgbW9kZSwgbW9kZSk7XFxuK1xcdFxcdG1vZGUgPSBvX2NyZWF0ZV9tb2RlKGlkbWFwLCBkaXJfaW5vZGUsIG1vZGUsIGNyZWF0ZV9kaXIpO1xcbiBcXHRcXHRpZiAobGlrZWx5KGdvdF93cml0ZSkpXFxuIFxcdFxcdFxcdGNyZWF0ZV9lcnJvciA9IG1heV9vX2NyZWF0ZShpZG1hcCwgXFx1MDAyNm5kLVxcdTAwM2VwYXRoLFxcbi1cXHRcXHRcXHRcXHRcXHRcXHQgICAgZGVudHJ5LCBtb2RlKTtcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgIGRlbnRyeSwgbW9kZSwgY3JlYXRlX2Rpcik7XFxuIFxcdFxcdGVsc2VcXG4gXFx0XFx0XFx0Y3JlYXRlX2Vycm9yID0gLUVST0ZTO1xcbitcXHRcXHQvKiBSZWZ1c2UgdG8gY3JlYXRlIGEgZGlyZWN0b3J5IHRocm91Z2ggYSBkYW5nbGluZyAodHJhaWxpbmcpXFxuK1xcdFxcdCAqIHN5bWxpbmsuIEZvciByZWd1bGFyIGZpbGVzIHRoaXMgaGFzIGJlZW4gYWxsb3dlZCBoaXN0b3JpY2FsbHlcXG4rXFx0XFx0ICogb24gT19DUkVBVCB3aXRob3V0IE9fRVhDTC4gKi9cXG4rXFx0XFx0aWYgKHVubGlrZWx5KG5kLVxcdTAwM2VkZXB0aCkgXFx1MDAyNlxcdTAwMjYgY3JlYXRlX2RpciBcXHUwMDI2XFx1MDAyNiAhY3JlYXRlX2Vycm9yKVxcbitcXHRcXHRcXHRjcmVhdGVfZXJyb3IgPSAtRUVYSVNUO1xcbiBcXHR9XFxuIFxcdGlmIChjcmVhdGVfZXJyb3IpXFxuIFxcdFxcdG9wZW5fZmxhZyBcXHUwMDI2PSB+T19DUkVBVDtcXG4gXFx0aWYgKGRpcl9pbm9kZS1cXHUwMDNlaV9vcC1cXHUwMDNlYXRvbWljX29wZW4pIHtcXG4gXFx0XFx0aWYgKG5kLVxcdTAwM2VmbGFncyBcXHUwMDI2IExPT0tVUF9ESVJFQ1RPUlkpXFxuIFxcdFxcdFxcdG9wZW5fZmxhZyB8PSBPX0RJUkVDVE9SWTtcXG4tXFx0XFx0ZGVudHJ5ID0gYXRvbWljX29wZW4oXFx1MDAyNm5kLVxcdTAwM2VwYXRoLCBkZW50cnksIGZpbGUsIG9wZW5fZmxhZywgbW9kZSk7XFxuK1xcdFxcdGRlbnRyeSA9IGF0b21pY19vcGVuKFxcdTAwMjZuZC1cXHUwMDNlcGF0aCwgZGVudHJ5LCBmaWxlLCBvcGVuX2ZsYWcsIG1vZGUsIGNyZWF0ZV9lcnJvcik7XFxuIFxcdFxcdGlmICh1bmxpa2VseShjcmVhdGVfZXJyb3IpIFxcdTAwMjZcXHUwMDI2IGRlbnRyeSA9PSBFUlJfUFRSKC1FTk9FTlQpKVxcbiBcXHRcXHRcXHRkZW50cnkgPSBFUlJfUFRSKGNyZWF0ZV9lcnJvcik7XFxuIFxcdFxcdHJldHVybiBkZW50cnk7XFxuQEAgLTQ0OTAsMzAgKzQ1NzYsNDQgQEAgc3RhdGljIHN0cnVjdCBkZW50cnkgKmxvb2t1cF9vcGVuKHN0cnVjdCBuYW1laWRhdGEgKm5kLCBzdHJ1Y3QgZmlsZSAqZmlsZSxcXG4gXFx0XFx0XFx0ZGVudHJ5ID0gcmVzO1xcbiBcXHRcXHR9XFxuIFxcdH1cXG4rXFx0aWYgKGRlbnRyeS1cXHUwMDNlZF9pbm9kZSB8fCAhKG9wLVxcdTAwM2VvcGVuX2ZsYWcgXFx1MDAyNiBPX0NSRUFUKSkge1xcbitcXHRcXHQvKiBObyBuZWVkIHRvIGNyZWF0ZSBhIGZpbGUuIElmIGxvb2t1cCByZXR1cm5lZCBhIHBvc2l0aXZlXFxuK1xcdFxcdCAqIGRlbnRyeSwgdGhlIGZpbGUgd2lsbCBiZSBvcGVuZWQgaW4gZG9fb3BlbigpLiAqL1xcbitcXHRcXHRyZXR1cm4gZGVudHJ5O1xcbitcXHR9XFxuIFxcbi1cXHQvKiBOZWdhdGl2ZSBkZW50cnksIGp1c3QgY3JlYXRlIHRoZSBmaWxlICovXFxuLVxcdGlmICghZGVudHJ5LVxcdTAwM2VkX2lub2RlIFxcdTAwMjZcXHUwMDI2IChvcGVuX2ZsYWcgXFx1MDAyNiBPX0NSRUFUKSkge1xcbi1cXHRcXHQvKiBidXQgYnJlYWsgdGhlIGRpcmVjdG9yeSBsZWFzZSBmaXJzdCEgKi9cXG4tXFx0XFx0ZXJyb3IgPSB0cnlfYnJlYWtfZGVsZWcoZGlyX2lub2RlLCBMRUFTRV9CUkVBS19ESVJfQ1JFQVRFLCBkZWxlZ2F0ZWRfaW5vZGUpO1xcbi1cXHRcXHRpZiAoZXJyb3IpXFxuLVxcdFxcdFxcdGdvdG8gb3V0X2RwdXQ7XFxuLVxcbi1cXHRcXHRmaWxlLVxcdTAwM2VmX21vZGUgfD0gRk1PREVfQ1JFQVRFRDtcXG4tXFx0XFx0YXVkaXRfaW5vZGVfY2hpbGQoZGlyX2lub2RlLCBkZW50cnksIEFVRElUX1RZUEVfQ0hJTERfQ1JFQVRFKTtcXG4tXFx0XFx0aWYgKCFkaXJfaW5vZGUtXFx1MDAzZWlfb3AtXFx1MDAzZWNyZWF0ZSkge1xcbi1cXHRcXHRcXHRlcnJvciA9IC1FQUNDRVM7XFxuLVxcdFxcdFxcdGdvdG8gb3V0X2RwdXQ7XFxuLVxcdFxcdH1cXG4rXFx0LyogTmVnYXRpdmUgZGVudHJ5IHdpdGggT19DUkVBVCBmbGFnIHNldCAqL1xcbitcXHRhdWRpdF9pbm9kZV9jaGlsZChkaXItXFx1MDAzZWRfaW5vZGUsIGRlbnRyeSwgQVVESVRfVFlQRV9DSElMRF9DUkVBVEUpO1xcbiBcXG4tXFx0XFx0ZXJyb3IgPSBkaXJfaW5vZGUtXFx1MDAzZWlfb3AtXFx1MDAzZWNyZWF0ZShpZG1hcCwgZGlyX2lub2RlLCBkZW50cnksXFxuLVxcdFxcdFxcdFxcdFxcdFxcdG1vZGUsIG9wZW5fZmxhZyBcXHUwMDI2IE9fRVhDTCk7XFxuLVxcdFxcdGlmIChlcnJvcilcXG4tXFx0XFx0XFx0Z290byBvdXRfZHB1dDtcXG4tXFx0fVxcbi1cXHRpZiAodW5saWtlbHkoY3JlYXRlX2Vycm9yKSBcXHUwMDI2XFx1MDAyNiAhZGVudHJ5LVxcdTAwM2VkX2lub2RlKSB7XFxuK1xcdGlmICh1bmxpa2VseShjcmVhdGVfZXJyb3IpKSB7XFxuK1xcdFxcdC8qIFNob3VsZCBoYXZlIGRvbmUgYSBjcmVhdGUsIGJ1dCB3ZSBhbHJlYWR5IGVycm9yZWQgKi9cXG4gXFx0XFx0ZXJyb3IgPSBjcmVhdGVfZXJyb3I7XFxuIFxcdFxcdGdvdG8gb3V0X2RwdXQ7XFxuIFxcdH1cXG4rXFxuK1xcdGlmICgoY3JlYXRlX2RpciBcXHUwMDI2XFx1MDAyNiAhZGlyX2lub2RlLVxcdTAwM2VpX29wLVxcdTAwM2Vta2RpcilcXG4rXFx0ICAgIHx8ICghY3JlYXRlX2RpciBcXHUwMDI2XFx1MDAyNiAhZGlyX2lub2RlLVxcdTAwM2VpX29wLVxcdTAwM2VjcmVhdGUpKSB7XFxuK1xcdFxcdGVycm9yID0gLUVBQ0NFUztcXG4rXFx0XFx0Z290byBvdXRfZHB1dDtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKGNyZWF0ZV9kaXIpIHtcXG4rXFx0XFx0c3RydWN0IGRlbnRyeSAqcmVzID0gdmZzX21rZGlyX25vX3Blcm0oaWRtYXAsIGRpcl9pbm9kZSwgZGVudHJ5LFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgbW9kZSwgZGVsZWdhdGVkX2lub2RlKTtcXG4rXFx0XFx0aWYgKElTX0VSUihyZXMpKSB7XFxuK1xcdFxcdFxcdGVycm9yID0gUFRSX0VSUihyZXMpO1xcbitcXHRcXHR9IGVsc2Uge1xcbitcXHRcXHRcXHRlcnJvciA9IDA7XFxuK1xcdFxcdFxcdGRlbnRyeSA9IHJlcztcXG4rXFx0XFx0fVxcbitcXHR9IGVsc2Uge1xcbitcXHRcXHRlcnJvciA9IHZmc19jcmVhdGVfbm9fcGVybShpZG1hcCwgZGVudHJ5LCBtb2RlLCBkZWxlZ2F0ZWRfaW5vZGUpO1xcbitcXHR9XFxuK1xcdGlmIChlcnJvcilcXG4rXFx0XFx0Z290byBvdXRfZHB1dDtcXG4rXFxuK1xcdGZpbGUtXFx1MDAzZWZfbW9kZSB8PSBGTU9ERV9DUkVBVEVEO1xcbitcXG4gXFx0cmV0dXJuIGRlbnRyeTtcXG4gXFxuIG91dF9kcHV0OlxcbkBAIC00NTIxLDE3ICs0NjIxLDEyIEBAIHN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpsb29rdXBfb3BlbihzdHJ1Y3QgbmFtZWlkYXRhICpuZCwgc3RydWN0IGZpbGUgKmZpbGUsXFxuIFxcdHJldHVybiBFUlJfUFRSKGVycm9yKTtcXG4gfVxcbiBcXG4tc3RhdGljIGlubGluZSBib29sIHRyYWlsaW5nX3NsYXNoZXMoc3RydWN0IG5hbWVpZGF0YSAqbmQpXFxuLXtcXG4tXFx0cmV0dXJuIChib29sKW5kLVxcdTAwM2VsYXN0Lm5hbWVbbmQtXFx1MDAzZWxhc3QubGVuXTtcXG4tfVxcbi1cXG4gc3RhdGljIHN0cnVjdCBkZW50cnkgKmxvb2t1cF9mYXN0X2Zvcl9vcGVuKHN0cnVjdCBuYW1laWRhdGEgKm5kLCBpbnQgb3Blbl9mbGFnKVxcbiB7XFxuIFxcdHN0cnVjdCBkZW50cnkgKmRlbnRyeTtcXG4gXFxuIFxcdGlmIChvcGVuX2ZsYWcgXFx1MDAyNiBPX0NSRUFUKSB7XFxuLVxcdFxcdGlmICh0cmFpbGluZ19zbGFzaGVzKG5kKSlcXG4rXFx0XFx0aWYgKHRyYWlsaW5nX3NsYXNoZXMobmQtXFx1MDAzZWxhc3QpIFxcdTAwMjZcXHUwMDI2ICEob3Blbl9mbGFnIFxcdTAwMjYgT19ESVJFQ1RPUlkpKVxcbiBcXHRcXHRcXHRyZXR1cm4gRVJSX1BUUigtRUlTRElSKTtcXG4gXFxuIFxcdFxcdC8qIERvbid0IGJvdGhlciBvbiBhbiBPX0VYQ0wgY3JlYXRlICovXFxuQEAgLTQ1MzksNyArNDYzNCw3IEBAIHN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpsb29rdXBfZmFzdF9mb3Jfb3BlbihzdHJ1Y3QgbmFtZWlkYXRhICpuZCwgaW50IG9wZW5fZmxhZylcXG4gXFx0XFx0XFx0cmV0dXJuIE5VTEw7XFxuIFxcdH1cXG4gXFxuLVxcdGlmICh0cmFpbGluZ19zbGFzaGVzKG5kKSlcXG4rXFx0aWYgKHRyYWlsaW5nX3NsYXNoZXMobmQtXFx1MDAzZWxhc3QpKVxcbiBcXHRcXHRuZC1cXHUwMDNlZmxhZ3MgfD0gTE9PS1VQX0ZPTExPVyB8IExPT0tVUF9ESVJFQ1RPUlk7XFxuIFxcbiBcXHRkZW50cnkgPSBsb29rdXBfZmFzdChuZCk7XFxuQEAgLTQ2MDIsMTYgKzQ2OTcsMTIgQEAgc3RhdGljIGNvbnN0IGNoYXIgKm9wZW5fbGFzdF9sb29rdXBzKHN0cnVjdCBuYW1laWRhdGEgKm5kLFxcbiBcXHRcXHQgKi9cXG4gXFx0fVxcbiBcXHRpZiAob3Blbl9mbGFnIFxcdTAwMjYgT19DUkVBVClcXG4tXFx0XFx0aW5vZGVfbG9jayhkaXItXFx1MDAzZWRfaW5vZGUpO1xcbitcXHRcXHRpbm9kZV9sb2NrX25lc3RlZChkaXItXFx1MDAzZWRfaW5vZGUsIElfTVVURVhfUEFSRU5UKTtcXG4gXFx0ZWxzZVxcbiBcXHRcXHRpbm9kZV9sb2NrX3NoYXJlZChkaXItXFx1MDAzZWRfaW5vZGUpO1xcbitcXG4gXFx0ZGVudHJ5ID0gbG9va3VwX29wZW4obmQsIGZpbGUsIG9wLCBnb3Rfd3JpdGUsIFxcdTAwMjZkZWxlZ2F0ZWRfaW5vZGUpO1xcbi1cXHRpZiAoIUlTX0VSUihkZW50cnkpKSB7XFxuLVxcdFxcdGlmIChmaWxlLVxcdTAwM2VmX21vZGUgXFx1MDAyNiBGTU9ERV9DUkVBVEVEKVxcbi1cXHRcXHRcXHRmc25vdGlmeV9jcmVhdGUoZGlyLVxcdTAwM2VkX2lub2RlLCBkZW50cnkpO1xcbi1cXHRcXHRpZiAoZmlsZS1cXHUwMDNlZl9tb2RlIFxcdTAwMjYgRk1PREVfT1BFTkVEKVxcbi1cXHRcXHRcXHRmc25vdGlmeV9vcGVuKGZpbGUpO1xcbi1cXHR9XFxuK1xcbiBcXHRpZiAob3Blbl9mbGFnIFxcdTAwMjYgT19DUkVBVClcXG4gXFx0XFx0aW5vZGVfdW5sb2NrKGRpci1cXHUwMDNlZF9pbm9kZSk7XFxuIFxcdGVsc2VcXG5AQCAtNDY2OSw4ICs0NzYwLDkgQEAgc3RhdGljIGludCBkb19vcGVuKHN0cnVjdCBuYW1laWRhdGEgKm5kLFxcbiBcXHRpZiAob3Blbl9mbGFnIFxcdTAwMjYgT19DUkVBVCkge1xcbiBcXHRcXHRpZiAoKG9wZW5fZmxhZyBcXHUwMDI2IE9fRVhDTCkgXFx1MDAyNlxcdTAwMjYgIShmaWxlLVxcdTAwM2VmX21vZGUgXFx1MDAyNiBGTU9ERV9DUkVBVEVEKSlcXG4gXFx0XFx0XFx0cmV0dXJuIC1FRVhJU1Q7XFxuLVxcdFxcdGlmIChkX2lzX2RpcihuZC1cXHUwMDNlcGF0aC5kZW50cnkpKVxcbitcXHRcXHRpZiAoIShvcGVuX2ZsYWcgXFx1MDAyNiBPX0RJUkVDVE9SWSkgXFx1MDAyNlxcdTAwMjYgZF9pc19kaXIobmQtXFx1MDAzZXBhdGguZGVudHJ5KSlcXG4gXFx0XFx0XFx0cmV0dXJuIC1FSVNESVI7XFxuK1xcbiBcXHRcXHRlcnJvciA9IG1heV9jcmVhdGVfaW5fc3RpY2t5KGlkbWFwLCBuZCxcXG4gXFx0XFx0XFx0XFx0XFx0ICAgICBkX2JhY2tpbmdfaW5vZGUobmQtXFx1MDAzZXBhdGguZGVudHJ5KSk7XFxuIFxcdFxcdGlmICh1bmxpa2VseShlcnJvcikpXFxuQEAgLTQ5NTAsNyArNTA0Miw3IEBAIHN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpmaWxlbmFtZV9jcmVhdGUoaW50IGRmZCwgc3RydWN0IGZpbGVuYW1lICpuYW1lLFxcbiBcXHQgKiBEbyB0aGUgZmluYWwgbG9va3VwLiAgU3VwcHJlc3MgJ2NyZWF0ZScgaWYgdGhlcmUgaXMgYSB0cmFpbGluZ1xcbiBcXHQgKiAnLycsIGFuZCBhIGRpcmVjdG9yeSB3YXNuJ3QgcmVxdWVzdGVkLlxcbiBcXHQgKi9cXG4tXFx0aWYgKGxhc3QubmFtZVtsYXN0Lmxlbl0gXFx1MDAyNlxcdTAwMjYgIXdhbnRfZGlyKVxcbitcXHRpZiAodHJhaWxpbmdfc2xhc2hlcyhsYXN0KSBcXHUwMDI2XFx1MDAyNiAhd2FudF9kaXIpXFxuIFxcdFxcdGNyZWF0ZV9mbGFncyBcXHUwMDI2PSB+TE9PS1VQX0NSRUFURTtcXG4gXFx0ZGVudHJ5ID0gc3RhcnRfZGlyb3AocGF0aC1cXHUwMDNlZGVudHJ5LCBcXHUwMDI2bGFzdCwgcmV2YWxfZmxhZyB8IGNyZWF0ZV9mbGFncyk7XFxuIFxcdGlmIChJU19FUlIoZGVudHJ5KSlcXG5AQCAtNTA0NSwxMyArNTEzNywxMyBAQCBzdHJ1Y3QgZmlsZSAqZGVudHJ5X2NyZWF0ZShzdHJ1Y3QgcGF0aCAqcGF0aCwgaW50IGZsYWdzLCB1bW9kZV90IG1vZGUsXFxuIFxcdFxcdHBhdGgtXFx1MDAzZWRlbnRyeSA9IGRpcjtcXG4gXFx0XFx0bW9kZSA9IHZmc19wcmVwYXJlX21vZGUoaWRtYXAsIGRpcl9pbm9kZSwgbW9kZSwgU19JQUxMVUdPLCBTX0lGUkVHKTtcXG4gXFxuLVxcdFxcdGNyZWF0ZV9lcnJvciA9IG1heV9vX2NyZWF0ZShpZG1hcCwgcGF0aCwgZGVudHJ5LCBtb2RlKTtcXG4rXFx0XFx0Y3JlYXRlX2Vycm9yID0gbWF5X29fY3JlYXRlKGlkbWFwLCBwYXRoLCBkZW50cnksIG1vZGUsIC8qY3JlYXRlX2Rpcj0qLyBmYWxzZSk7XFxuIFxcdFxcdGlmIChjcmVhdGVfZXJyb3IpXFxuIFxcdFxcdFxcdGZsYWdzIFxcdTAwMjY9IH5PX0NSRUFUO1xcbiBcXG4gXFx0XFx0LyogYXRvbWljX29wZW4gd2lsbCBkcHV0KGRlbnRyeSkgb24gZXJyb3IgKi9cXG4gXFx0XFx0ZGdldChvcmlnX2RlbnRyeSk7XFxuLVxcdFxcdGRlbnRyeSA9IGF0b21pY19vcGVuKHBhdGgsIGRlbnRyeSwgZmlsZSwgZmxhZ3MsIG1vZGUpO1xcbitcXHRcXHRkZW50cnkgPSBhdG9taWNfb3BlbihwYXRoLCBkZW50cnksIGZpbGUsIGZsYWdzLCBtb2RlLCBjcmVhdGVfZXJyb3IpO1xcbiBcXHRcXHRlcnJvciA9IFBUUl9FUlJfT1JfWkVSTyhkZW50cnkpO1xcbiBcXG4gXFx0XFx0aWYgKElTX0VSUihkZW50cnkpKVxcbkBAIC01MDY0LDEzICs1MTU2LDYgQEAgc3RydWN0IGZpbGUgKmRlbnRyeV9jcmVhdGUoc3RydWN0IHBhdGggKnBhdGgsIGludCBmbGFncywgdW1vZGVfdCBtb2RlLFxcbiBcXHRcXHRpZiAodW5saWtlbHkoY3JlYXRlX2Vycm9yKSBcXHUwMDI2XFx1MDAyNiBlcnJvciA9PSAtRU5PRU5UKVxcbiBcXHRcXHRcXHRlcnJvciA9IGNyZWF0ZV9lcnJvcjtcXG4gXFxuLVxcdFxcdGlmICghZXJyb3IpIHtcXG4tXFx0XFx0XFx0aWYgKGZpbGUtXFx1MDAzZWZfbW9kZSBcXHUwMDI2IEZNT0RFX0NSRUFURUQpXFxuLVxcdFxcdFxcdFxcdGZzbm90aWZ5X2NyZWF0ZShkaXItXFx1MDAzZWRfaW5vZGUsIGRlbnRyeSk7XFxuLVxcdFxcdFxcdGlmIChmaWxlLVxcdTAwM2VmX21vZGUgXFx1MDAyNiBGTU9ERV9PUEVORUQpXFxuLVxcdFxcdFxcdFxcdGZzbm90aWZ5X29wZW4oZmlsZSk7XFxuLVxcdFxcdH1cXG4tXFxuIFxcdFxcdHBhdGgtXFx1MDAzZWRlbnRyeSA9IGRlbnRyeTtcXG4gXFxuIFxcdH0gZWxzZSB7XFxuQEAgLTUyMjIsNiArNTMwNywzOSBAQCBTWVNDQUxMX0RFRklORTMobWtub2QsIGNvbnN0IGNoYXIgX191c2VyICosIGZpbGVuYW1lLCB1bW9kZV90LCBtb2RlLCB1bnNpZ25lZCwgZFxcbiBcXHRyZXR1cm4gZmlsZW5hbWVfbWtub2RhdChBVF9GRENXRCwgbmFtZSwgbW9kZSwgZGV2KTtcXG4gfVxcbiBcXG4rc3RhdGljIGlubGluZVxcbitzdHJ1Y3QgZGVudHJ5ICp2ZnNfbWtkaXJfbm9fcGVybShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXFxuK1xcdFxcdFxcdFxcdCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSxcXG4rXFx0XFx0XFx0XFx0IHN0cnVjdCBkZWxlZ2F0ZWRfaW5vZGUgKmRpKVxcbit7XFxuK1xcdGludCBlcnJvcjtcXG4rXFx0c3RydWN0IGRlbnRyeSAqZGU7XFxuK1xcdHVuc2lnbmVkIG1heF9saW5rcyA9IGRpci1cXHUwMDNlaV9zYi1cXHUwMDNlc19tYXhfbGlua3M7XFxuK1xcbitcXHRlcnJvciA9IC1FTUxJTks7XFxuK1xcdGlmIChtYXhfbGlua3MgXFx1MDAyNlxcdTAwMjYgZGlyLVxcdTAwM2VpX25saW5rIFxcdTAwM2U9IG1heF9saW5rcylcXG4rXFx0XFx0Z290byBlcnI7XFxuK1xcbitcXHRlcnJvciA9IHRyeV9icmVha19kZWxlZyhkaXIsIExFQVNFX0JSRUFLX0RJUl9DUkVBVEUsIGRpKTtcXG4rXFx0aWYgKGVycm9yKVxcbitcXHRcXHRnb3RvIGVycjtcXG4rXFxuK1xcdGRlID0gZGlyLVxcdTAwM2VpX29wLVxcdTAwM2Vta2RpcihpZG1hcCwgZGlyLCBkZW50cnksIG1vZGUpO1xcbitcXHRpZiAoSVNfRVJSKGRlKSkge1xcbitcXHRcXHRlcnJvciA9IFBUUl9FUlIoZGUpO1xcbitcXHRcXHRnb3RvIGVycjtcXG4rXFx0fVxcbitcXHRpZiAoZGUpIHtcXG4rXFx0XFx0ZHB1dChkZW50cnkpO1xcbitcXHRcXHRkZW50cnkgPSBkZTtcXG4rXFx0fVxcbitcXHRmc25vdGlmeV9ta2RpcihkaXIsIGRlbnRyeSk7XFxuK1xcdHJldHVybiBkZW50cnk7XFxuK1xcbitlcnI6XFxuK1xcdHJldHVybiBFUlJfUFRSKGVycm9yKTtcXG4rfVxcbitcXG4gLyoqXFxuICAqIHZmc19ta2RpciAtIGNyZWF0ZSBkaXJlY3RvcnkgcmV0dXJuaW5nIGNvcnJlY3QgZGVudHJ5IGlmIHBvc3NpYmxlXFxuICAqIEBpZG1hcDpcXHRcXHRpZG1hcCBvZiB0aGUgbW91bnQgdGhlIGlub2RlIHdhcyBmb3VuZCBmcm9tXFxuQEAgLTUyNDksNyArNTM2Nyw2IEBAIHN0cnVjdCBkZW50cnkgKnZmc19ta2RpcihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXFxuIFxcdFxcdFxcdCBzdHJ1Y3QgZGVsZWdhdGVkX2lub2RlICpkZWxlZ2F0ZWRfaW5vZGUpXFxuIHtcXG4gXFx0aW50IGVycm9yO1xcbi1cXHR1bnNpZ25lZCBtYXhfbGlua3MgPSBkaXItXFx1MDAzZWlfc2ItXFx1MDAzZXNfbWF4X2xpbmtzO1xcbiBcXHRzdHJ1Y3QgZGVudHJ5ICpkZTtcXG4gXFxuIFxcdGVycm9yID0gbWF5X2NyZWF0ZV9kZW50cnkoaWRtYXAsIGRpciwgZGVudHJ5KTtcXG5AQCAtNTI2NSwyNCArNTM4MiwxMiBAQCBzdHJ1Y3QgZGVudHJ5ICp2ZnNfbWtkaXIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxcbiBcXHRpZiAoZXJyb3IpXFxuIFxcdFxcdGdvdG8gZXJyO1xcbiBcXG4tXFx0ZXJyb3IgPSAtRU1MSU5LO1xcbi1cXHRpZiAobWF4X2xpbmtzIFxcdTAwMjZcXHUwMDI2IGRpci1cXHUwMDNlaV9ubGluayBcXHUwMDNlPSBtYXhfbGlua3MpXFxuLVxcdFxcdGdvdG8gZXJyO1xcbi1cXG4tXFx0ZXJyb3IgPSB0cnlfYnJlYWtfZGVsZWcoZGlyLCBMRUFTRV9CUkVBS19ESVJfQ1JFQVRFLCBkZWxlZ2F0ZWRfaW5vZGUpO1xcbi1cXHRpZiAoZXJyb3IpXFxuLVxcdFxcdGdvdG8gZXJyO1xcbi1cXG4tXFx0ZGUgPSBkaXItXFx1MDAzZWlfb3AtXFx1MDAzZW1rZGlyKGlkbWFwLCBkaXIsIGRlbnRyeSwgbW9kZSk7XFxuLVxcdGVycm9yID0gUFRSX0VSUihkZSk7XFxuLVxcdGlmIChJU19FUlIoZGUpKVxcbitcXHRkZSA9IHZmc19ta2Rpcl9ub19wZXJtKGlkbWFwLCBkaXIsIGRlbnRyeSwgbW9kZSwgZGVsZWdhdGVkX2lub2RlKTtcXG4rXFx0aWYgKElTX0VSUihkZSkpIHtcXG4rXFx0XFx0ZXJyb3IgPSBQVFJfRVJSKGRlKTtcXG4gXFx0XFx0Z290byBlcnI7XFxuLVxcdGlmIChkZSkge1xcbi1cXHRcXHRkcHV0KGRlbnRyeSk7XFxuLVxcdFxcdGRlbnRyeSA9IGRlO1xcbiBcXHR9XFxuLVxcdGZzbm90aWZ5X21rZGlyKGRpciwgZGVudHJ5KTtcXG4tXFx0cmV0dXJuIGRlbnRyeTtcXG4rXFx0cmV0dXJuIGRlO1xcbiBcXG4gZXJyOlxcbiBcXHRlbmRfY3JlYXRpbmcoZGVudHJ5KTtcXG5AQCAtNTU2OSw3ICs1Njc0LDcgQEAgaW50IGZpbGVuYW1lX3VubGlua2F0KGludCBkZmQsIHN0cnVjdCBmaWxlbmFtZSAqbmFtZSlcXG4gXFx0XFx0Z290byBleGl0X2Ryb3Bfd3JpdGU7XFxuIFxcbiBcXHQvKiBXaHkgbm90IGJlZm9yZT8gQmVjYXVzZSB3ZSB3YW50IGNvcnJlY3QgZXJyb3IgdmFsdWUgKi9cXG4tXFx0aWYgKHVubGlrZWx5KGxhc3QubmFtZVtsYXN0Lmxlbl0pKSB7XFxuK1xcdGlmICh1bmxpa2VseSh0cmFpbGluZ19zbGFzaGVzKGxhc3QpKSkge1xcbiBcXHRcXHRpZiAoZF9pc19kaXIoZGVudHJ5KSlcXG4gXFx0XFx0XFx0ZXJyb3IgPSAtRUlTRElSO1xcbiBcXHRcXHRlbHNlXFxuQEAgLTYxNzEsMTYgKzYyNzYsMTYgQEAgaW50IGZpbGVuYW1lX3JlbmFtZWF0MihpbnQgb2xkZGZkLCBzdHJ1Y3QgZmlsZW5hbWUgKmZyb20sXFxuIFxcdGlmIChmbGFncyBcXHUwMDI2IFJFTkFNRV9FWENIQU5HRSkge1xcbiBcXHRcXHRpZiAoIWRfaXNfZGlyKHJkLm5ld19kZW50cnkpKSB7XFxuIFxcdFxcdFxcdGVycm9yID0gLUVOT1RESVI7XFxuLVxcdFxcdFxcdGlmIChuZXdfbGFzdC5uYW1lW25ld19sYXN0Lmxlbl0pXFxuK1xcdFxcdFxcdGlmICh0cmFpbGluZ19zbGFzaGVzKG5ld19sYXN0KSlcXG4gXFx0XFx0XFx0XFx0Z290byBleGl0X3VubG9jaztcXG4gXFx0XFx0fVxcbiBcXHR9XFxuIFxcdC8qIHVubGVzcyB0aGUgc291cmNlIGlzIGEgZGlyZWN0b3J5IHRyYWlsaW5nIHNsYXNoZXMgZ2l2ZSAtRU5PVERJUiAqL1xcbiBcXHRpZiAoIWRfaXNfZGlyKHJkLm9sZF9kZW50cnkpKSB7XFxuIFxcdFxcdGVycm9yID0gLUVOT1RESVI7XFxuLVxcdFxcdGlmIChvbGRfbGFzdC5uYW1lW29sZF9sYXN0Lmxlbl0pXFxuK1xcdFxcdGlmICh0cmFpbGluZ19zbGFzaGVzKG9sZF9sYXN0KSlcXG4gXFx0XFx0XFx0Z290byBleGl0X3VubG9jaztcXG4tXFx0XFx0aWYgKCEoZmxhZ3MgXFx1MDAyNiBSRU5BTUVfRVhDSEFOR0UpIFxcdTAwMjZcXHUwMDI2IG5ld19sYXN0Lm5hbWVbbmV3X2xhc3QubGVuXSlcXG4rXFx0XFx0aWYgKCEoZmxhZ3MgXFx1MDAyNiBSRU5BTUVfRVhDSEFOR0UpIFxcdTAwMjZcXHUwMDI2IHRyYWlsaW5nX3NsYXNoZXMobmV3X2xhc3QpKVxcbiBcXHRcXHRcXHRnb3RvIGV4aXRfdW5sb2NrO1xcbiBcXHR9XFxuIFxcbmRpZmYgLS1naXQgYS9mcy9uZnMvZGlyLmMgYi9mcy9uZnMvZGlyLmNcXG5pbmRleCBjN2I3MjNjMTg2MjBjOS4uYzgxNWQ5YWE5YjY5ZGEgMTAwNjQ0XFxuLS0tIGEvZnMvbmZzL2Rpci5jXFxuKysrIGIvZnMvbmZzL2Rpci5jXFxuQEAgLTIxMjEsNiArMjEyMSw5IEBAIGludCBuZnNfYXRvbWljX29wZW4oc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcXG4gXFx0ZGZwcmludGsoVkZTLCBcXFwiTkZTOiBhdG9taWNfb3Blbiglcy8lbGx1KSwgJXBkXFxcXG5cXFwiLFxcbiBcXHRcXHRcXHRkaXItXFx1MDAzZWlfc2ItXFx1MDAzZXNfaWQsIGRpci1cXHUwMDNlaV9pbm8sIGRlbnRyeSk7XFxuIFxcbitcXHRpZiAoT19JU19NS0RJUihvcGVuX2ZsYWdzKSlcXG4rXFx0XFx0b3Blbl9mbGFncyBcXHUwMDI2PSB+T19DUkVBVDtcXG4rXFxuIFxcdGVyciA9IG5mc19jaGVja19mbGFncyhvcGVuX2ZsYWdzKTtcXG4gXFx0aWYgKGVycilcXG4gXFx0XFx0cmV0dXJuIGVycjtcXG5AQCAtMjMxMyw2ICsyMzE2LDkgQEAgaW50IG5mc19hdG9taWNfb3Blbl92MjMoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcXG4gXFx0ICovXFxuIFxcdGludCBlcnJvciA9IDA7XFxuIFxcbitcXHRpZiAoT19JU19NS0RJUihvcGVuX2ZsYWdzKSlcXG4rXFx0XFx0b3Blbl9mbGFncyBcXHUwMDI2PSB+T19DUkVBVDtcXG4rXFxuIFxcdGlmIChkZW50cnktXFx1MDAzZWRfbmFtZS5sZW4gXFx1MDAzZSBORlNfU0VSVkVSKGRpciktXFx1MDAzZW5hbWVsZW4pXFxuIFxcdFxcdHJldHVybiAtRU5BTUVUT09MT05HO1xcbiBcXG5kaWZmIC0tZ2l0IGEvZnMvb3Blbi5jIGIvZnMvb3Blbi5jXFxuaW5kZXggNDA4OTI1ZDdiZDBiNzcuLjg3ZTg4NjRkOTQ4MDg3IDEwMDY0NFxcbi0tLSBhL2ZzL29wZW4uY1xcbisrKyBiL2ZzL29wZW4uY1xcbkBAIC0xMTkwLDI5ICsxMTkwLDMwIEBAIGlubGluZSBpbnQgYnVpbGRfb3Blbl9mbGFncyhjb25zdCBzdHJ1Y3Qgb3Blbl9ob3cgKmhvdywgc3RydWN0IG9wZW5fZmxhZ3MgKm9wKVxcbiBcXHRpZiAoV0lMTF9DUkVBVEUoZmxhZ3MpKSB7XFxuIFxcdFxcdGlmIChob3ctXFx1MDAzZW1vZGUgXFx1MDAyNiB+U19JQUxMVUdPKVxcbiBcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4tXFx0XFx0b3AtXFx1MDAzZW1vZGUgPSBob3ctXFx1MDAzZW1vZGUgfCBTX0lGUkVHO1xcbitcXHRcXHRpZiAoT19JU19NS0RJUihmbGFncykpXFxuK1xcdFxcdFxcdG9wLVxcdTAwM2Vtb2RlID0gaG93LVxcdTAwM2Vtb2RlIHwgU19JRkRJUjtcXG4rXFx0XFx0ZWxzZVxcbitcXHRcXHRcXHRvcC1cXHUwMDNlbW9kZSA9IGhvdy1cXHUwMDNlbW9kZSB8IFNfSUZSRUc7XFxuIFxcdH0gZWxzZSB7XFxuIFxcdFxcdGlmIChob3ctXFx1MDAzZW1vZGUgIT0gMClcXG4gXFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIFxcdFxcdG9wLVxcdTAwM2Vtb2RlID0gMDtcXG4gXFx0fVxcbiBcXG4tXFx0LypcXG4tXFx0ICogQmxvY2sgYnVncyB3aGVyZSBPX0RJUkVDVE9SWSB8IE9fQ1JFQVQgY3JlYXRlZCByZWd1bGFyIGZpbGVzLlxcbi1cXHQgKiBOb3RlLCB0aGF0IGJsb2NraW5nIE9fRElSRUNUT1JZIHwgT19DUkVBVCBoZXJlIGFsc28gcHJvdGVjdHNcXG4tXFx0ICogT19UTVBGSUxFIGJlbG93IHdoaWNoIHJlcXVpcmVzIE9fRElSRUNUT1JZIGJlaW5nIHJhaXNlZC5cXG4tXFx0ICovXFxuLVxcdGlmICgoZmxhZ3MgXFx1MDAyNiAoT19ESVJFQ1RPUlkgfCBPX0NSRUFUKSkgPT0gKE9fRElSRUNUT1JZIHwgT19DUkVBVCkpXFxuLVxcdFxcdHJldHVybiAtRUlOVkFMO1xcbi1cXG4gXFx0LyogTm93IGhhbmRsZSB0aGUgY3JlYXRpdmUgaW1wbGVtZW50YXRpb24gb2YgT19UTVBGSUxFLiAqL1xcbiBcXHRpZiAoZmxhZ3MgXFx1MDAyNiBfX09fVE1QRklMRSkge1xcbiBcXHRcXHQvKlxcbiBcXHRcXHQgKiBJbiBvcmRlciB0byBlbnN1cmUgcHJvZ3JhbXMgZ2V0IGV4cGxpY2l0IGVycm9ycyB3aGVuIHRyeWluZ1xcbiBcXHRcXHQgKiB0byB1c2UgT19UTVBGSUxFIG9uIG9sZCBrZXJuZWxzIHdlIGVuZm9yY2UgdGhhdCBPX0RJUkVDVE9SWVxcbi1cXHRcXHQgKiBpcyByYWlzZWQgYWxvbmdzaWRlIF9fT19UTVBGSUxFLlxcbitcXHRcXHQgKiBpcyByYWlzZWQgYWxvbmdzaWRlIF9fT19UTVBGSUxFLCBidXQgd2l0aG91dCBPX0NSRUFULiBUaGVcXG4rXFx0XFx0ICogcmVhc29uIGZvciBkaXNhbGxvd2luZyBPX0NSRUFUfE9fVE1QRklMRSBpcyB0aGF0XFxuK1xcdFxcdCAqIE9fRElSRUNUT1JZfE9fQ1JFQVQgdXNlZCB0byB3b3JrIGFuZCBjcmVhdGVkIGEgcmVndWxhciBmaWxlXFxuK1xcdFxcdCAqIGlmIG5vdGhpbmcgZXhpc3RlZCBhdCB0aGUgb3BlbiBwYXRoLiBIZW5jZSwgYWxsb3dpbmcgdGhlXFxuK1xcdFxcdCAqIGNvbWJpbmF0aW9uIHdvdWxkIGhhdmUgY2F1c2VkIE9fQ1JFQVR8T19UTVBGSUxFIHRvIGNyZWF0ZSBhXFxuK1xcdFxcdCAqIHJlZ3VsYXIgKG5vbi10ZW1wb3JhcnkpIGZpbGUgb24gb2xkIGtlcm5lbHMsIHdoaWxlIHRoZSBjYWxsZXJcXG4rXFx0XFx0ICogd291bGQgYmVsaWV2ZSB0aGV5IGNyZWF0ZWQgYW4gYWN0dWFsIE9fVE1QRklMRS5cXG4gXFx0XFx0ICovXFxuLVxcdFxcdGlmICghKGZsYWdzIFxcdTAwMjYgT19ESVJFQ1RPUlkpKVxcbitcXHRcXHRpZiAoIShmbGFncyBcXHUwMDI2IE9fRElSRUNUT1JZKSB8fCAoZmxhZ3MgXFx1MDAyNiBPX0NSRUFUKSlcXG4gXFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIFxcdFxcdGlmICghKGFjY19tb2RlIFxcdTAwMjYgTUFZX1dSSVRFKSlcXG4gXFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuQEAgLTEyNjksNiArMTI3MCwxNSBAQCBpbmxpbmUgaW50IGJ1aWxkX29wZW5fZmxhZ3MoY29uc3Qgc3RydWN0IG9wZW5faG93ICpob3csIHN0cnVjdCBvcGVuX2ZsYWdzICpvcClcXG4gXFxuIFxcdG9wLVxcdTAwM2VpbnRlbnQgPSBmbGFncyBcXHUwMDI2IE9fUEFUSCA/IDAgOiBMT09LVVBfT1BFTjtcXG4gXFxuK1xcdC8qXFxuK1xcdCAqIFJlcXVlc3Rpbmcgd3JpdGUgYWNjZXNzIG9uIGEgZGlyZWN0b3J5IGNhbiBuZXZlciBzdWNjZWVkLiBSYXRoZXJcXG4rXFx0ICogdGhhbiBwZXJmb3JtaW5nIGEgcGF0aC13YWxrIHRvIGRldGVybWluZSB3aGV0aGVyIHRoZSB0YXJnZXQgaXNcXG4rXFx0ICogYWN0dWFsbHkgYSBkaXJlY3RvcnkgKC1FSVNESVIpIG9yIG5vdCAoLUVOT1RESVIpLCB3ZSBzaG9ydC1jaXJjdWl0XFxuK1xcdCAqIHRvIC1FTk9URElSLlxcbitcXHQgKi9cXG4rXFx0aWYgKChmbGFncyBcXHUwMDI2IE9fRElSRUNUT1JZKSBcXHUwMDI2XFx1MDAyNiAhKGZsYWdzIFxcdTAwMjYgX19PX1RNUEZJTEUpIFxcdTAwMjZcXHUwMDI2IChhY2NfbW9kZSBcXHUwMDI2IE1BWV9XUklURSkpXFxuK1xcdFxcdHJldHVybiAtRU5PVERJUjtcXG4rXFxuIFxcdGlmIChmbGFncyBcXHUwMDI2IE9fQ1JFQVQpIHtcXG4gXFx0XFx0b3AtXFx1MDAzZWludGVudCB8PSBMT09LVVBfQ1JFQVRFO1xcbiBcXHRcXHRpZiAoZmxhZ3MgXFx1MDAyNiBPX0VYQ0wpIHtcXG5kaWZmIC0tZ2l0IGEvZnMvc21iL2NsaWVudC9kaXIuYyBiL2ZzL3NtYi9jbGllbnQvZGlyLmNcXG5pbmRleCA4OGE0YTE3ODdmZjA0Ny4uNzViZjg2Y2MwNjEyMmUgMTAwNjQ0XFxuLS0tIGEvZnMvc21iL2NsaWVudC9kaXIuY1xcbisrKyBiL2ZzL3NtYi9jbGllbnQvZGlyLmNcXG5AQCAtNTM4LDYgKzUzOCw5IEBAIGludCBjaWZzX2F0b21pY19vcGVuKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkaXJlbnRyeSxcXG4gXFx0aWYgKHVubGlrZWx5KGNpZnNfZm9yY2VkX3NodXRkb3duKGNpZnNfc2IpKSlcXG4gXFx0XFx0cmV0dXJuIHNtYl9FSU8oc21iX2Vpb190cmFjZV9mb3JjZWRfc2h1dGRvd24pO1xcbiBcXG4rXFx0aWYgKE9fSVNfTUtESVIob2ZsYWdzKSlcXG4rXFx0XFx0b2ZsYWdzIFxcdTAwMjY9IH5PX0NSRUFUO1xcbitcXG4gXFx0LypcXG4gXFx0ICogUG9zaXggb3BlbiBpcyBvbmx5IGNhbGxlZCAoYXQgbG9va3VwIHRpbWUpIGZvciBmaWxlIGNyZWF0ZSBub3cuIEZvclxcbiBcXHQgKiBvcGVucyAocmF0aGVyIHRoYW4gY3JlYXRlcyksIGJlY2F1c2Ugd2UgZG8gbm90IGtub3cgaWYgaXQgaXMgYSBmaWxlXFxuZGlmZiAtLWdpdCBhL2ZzL3Zib3hzZi9kaXIuYyBiL2ZzL3Zib3hzZi9kaXIuY1xcbmluZGV4IGM1YmQzMjcxYWE5NjE2Li43N2FlMmY2OTZmZDQzNyAxMDA2NDRcXG4tLS0gYS9mcy92Ym94c2YvZGlyLmNcXG4rKysgYi9mcy92Ym94c2YvZGlyLmNcXG5AQCAtMzE4LDYgKzMxOCw5IEBAIHN0YXRpYyBpbnQgdmJveHNmX2Rpcl9hdG9taWNfb3BlbihzdHJ1Y3QgaW5vZGUgKnBhcmVudCwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxcbiBcXHR1NjQgaGFuZGxlO1xcbiBcXHRpbnQgZXJyO1xcbiBcXG4rXFx0aWYgKE9fSVNfTUtESVIoZmxhZ3MpKVxcbitcXHRcXHRmbGFncyBcXHUwMDI2PSB+T19DUkVBVDtcXG4rXFxuIFxcdGlmIChkX2luX2xvb2t1cChkZW50cnkpKSB7XFxuIFxcdFxcdHN0cnVjdCBkZW50cnkgKnJlcyA9IHZib3hzZl9kaXJfbG9va3VwKHBhcmVudCwgZGVudHJ5LCAwKTtcXG4gXFx0XFx0aWYgKHJlcyB8fCBkX3JlYWxseV9pc19wb3NpdGl2ZShkZW50cnkpKVxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2ZjbnRsLmggYi9pbmNsdWRlL2xpbnV4L2ZjbnRsLmhcXG5pbmRleCA2YWQ2YjllN2EyMjZhZi4uNmI3NTI3N2JlNTU5ZGQgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9mY250bC5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9mY250bC5oXFxuQEAgLTMwLDYgKzMwLDEyIEBAXFxuICAqL1xcbiAjZGVmaW5lIF9fT19SRUdVTEFSXFx0XFx0KDEgXFx1MDAzY1xcdTAwM2MgMzApXFxuIFxcbisjZGVmaW5lIE9fTUtESVJfTUFTS1xcdChPX0NSRUFUIHwgT19ESVJFQ1RPUlkpXFxuK3N0YXRpYyBpbmxpbmUgYm9vbCBPX0lTX01LRElSKHVuc2lnbmVkIGZsYWdzKVxcbit7XFxuK1xcdHJldHVybiAoZmxhZ3MgXFx1MDAyNiBPX01LRElSX01BU0spID09IE9fTUtESVJfTUFTSztcXG4rfVxcbitcXG4gLyogTGlzdCBvZiBhbGwgdmFsaWQgZmxhZ3MgZm9yIHRoZSBob3ctXFx1MDAzZXJlc29sdmUgYXJndW1lbnQ6ICovXFxuICNkZWZpbmUgVkFMSURfUkVTT0xWRV9GTEFHUyBcXFxcXFxuIFxcdChSRVNPTFZFX05PX1hERVYgfCBSRVNPTFZFX05PX01BR0lDTElOS1MgfCBSRVNPTFZFX05PX1NZTUxJTktTIHwgXFxcXFxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9maWxlc3lzdGVtcy8uZ2l0aWdub3JlIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZmlsZXN5c3RlbXMvLmdpdGlnbm9yZVxcbmluZGV4IGE3OGY4OTQxNTdkZTMzLi5kNzc5YTc5NDVjZjgwMyAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9maWxlc3lzdGVtcy8uZ2l0aWdub3JlXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZmlsZXN5c3RlbXMvLmdpdGlnbm9yZVxcbkBAIC0xLDQgKzEsNSBAQFxcbiAjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4rb3Blbl9vX2NyZWF0X29fZGlyXFxuIGRub3RpZnlfdGVzdFxcbiBkZXZwdHNfcHRzXFxuIGZjbG9nXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2ZpbGVzeXN0ZW1zL01ha2VmaWxlIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZmlsZXN5c3RlbXMvTWFrZWZpbGVcXG5pbmRleCBhN2VjMmJhMmRkODMzNC4uYjYwOTUwZjhiMTVjMjEgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZmlsZXN5c3RlbXMvTWFrZWZpbGVcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9maWxlc3lzdGVtcy9NYWtlZmlsZVxcbkBAIC0xLDcgKzEsNyBAQFxcbiAjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuIFxcbiBDRkxBR1MgKz0gJChLSERSX0lOQ0xVREVTKVxcbi1URVNUX0dFTl9QUk9HUyA6PSBkZXZwdHNfcHRzIGZpbGVfc3RyZXNzb3IgYW5vbl9pbm9kZV90ZXN0IGtlcm5mc190ZXN0IGZjbG9nXFxuK1RFU1RfR0VOX1BST0dTIDo9IG9wZW5fb19jcmVhdF9vX2RpciBkZXZwdHNfcHRzIGZpbGVfc3RyZXNzb3IgYW5vbl9pbm9kZV90ZXN0IGtlcm5mc190ZXN0IGZjbG9nXFxuIFRFU1RfR0VOX1BST0dTICs9IGlkbWFwcGVkX3RtcGZpbGVcXG4gVEVTVF9HRU5fUFJPR1NfRVhURU5ERUQgOj0gZG5vdGlmeV90ZXN0XFxuIFxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9maWxlc3lzdGVtcy9mY2xvZy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZmlsZXN5c3RlbXMvZmNsb2cuY1xcbmluZGV4IDU1MWM0YTBmMzk1YTEyLi41OTNhNTEzNmU5OTE5MiAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9maWxlc3lzdGVtcy9mY2xvZy5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZmlsZXN5c3RlbXMvZmNsb2cuY1xcbkBAIC02LDEwICs2LDggQEBcXG4gXFxuICNpbmNsdWRlIFxcdTAwM2Nhc3NlcnQuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2Vycm5vLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NmY250bC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjc2NoZWQuaFxcdTAwM2VcXG4tI2luY2x1ZGUgXFx1MDAzY3N0ZGlvLmhcXHUwMDNlXFxuLSNpbmNsdWRlIFxcdTAwM2NzdGRsaWIuaFxcdTAwM2VcXG4tI2luY2x1ZGUgXFx1MDAzY3N0cmluZy5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjdW5pc3RkLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NzeXMvbW91bnQuaFxcdTAwM2VcXG4gXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2ZpbGVzeXN0ZW1zL29wZW5fb19jcmVhdF9vX2Rpci5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZmlsZXN5c3RlbXMvb3Blbl9vX2NyZWF0X29fZGlyLmNcXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi5kZjNjZGJhZTJjODUyNFxcbi0tLSAvZGV2L251bGxcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9maWxlc3lzdGVtcy9vcGVuX29fY3JlYXRfb19kaXIuY1xcbkBAIC0wLDAgKzEsMTk3IEBAXFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuKyNpbmNsdWRlIFxcdTAwM2NzeXMvc3RhdC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjc3lzL3N5c2NhbGwuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2Vycm5vLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW1pdHMuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2ZjbnRsLmhcXHUwMDNlXFxuK1xcbisjaW5jbHVkZSBcXFwia3NlbGZ0ZXN0X2hhcm5lc3MuaFxcXCJcXG4rXFxuK3N0YXRpYyBpbmxpbmUgaW50IG9wZW5fb19jcmVhdF9vX2RpcihpbnQgZGZkLCBjb25zdCBjaGFyICpwYXRobmFtZSxcXG4rXFx0XFx0XFx0XFx0ICAgICBtb2RlX3QgbW9kZSwgdW5zaWduZWQgaW50IGZsYWdzKVxcbit7XFxuK1xcdHJldHVybiBzeXNjYWxsKF9fTlJfb3BlbmF0LCBkZmQsIHBhdGhuYW1lLFxcbitcXHRcXHQgICAgICAgZmxhZ3MgfCBPX0RJUkVDVE9SWSB8IE9fQ1JFQVQsIG1vZGUpO1xcbit9XFxuK1xcbisjZGVmaW5lIG9wZW5fb19jcmVhdF9vX2Rpcl9jaGVja2VkX2ZsYWdzKGRmZCwgcGF0aG5hbWUsIGZsYWdzKSAoe1xcdFxcXFxcXG4rXFx0c3RydWN0IHN0YXQgX19zdDtcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdGludCBfX2ZkID0gb3Blbl9vX2NyZWF0X29fZGlyKGRmZCwgcGF0aG5hbWUsIFNfSVJXWFUsIGZsYWdzKTtcXHRcXFxcXFxuK1xcdEFTU0VSVF9HRShfX2ZkLCAwKTtcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdEFTU0VSVF9FUShmc3RhdChfX2ZkLCBcXHUwMDI2X19zdCksIDApO1xcdFxcdFxcdFxcdFxcXFxcXG4rXFx0RVhQRUNUX1RSVUUoU19JU0RJUihfX3N0LnN0X21vZGUpKTtcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdF9fZmQ7XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbit9KVxcbitcXG4rI2RlZmluZSBvcGVuX29fY3JlYXRfb19kaXJfY2hlY2tlZChkZmQsIHBhdGhuYW1lKSBcXFxcXFxuK1xcdG9wZW5fb19jcmVhdF9vX2Rpcl9jaGVja2VkX2ZsYWdzKGRmZCwgcGF0aG5hbWUsIDApXFxuK1xcbitGSVhUVVJFKG9wZW5fb19jcmVhdF9vX2Rpcikge1xcbitcXHRjaGFyIGRpcnBhdGhbUEFUSF9NQVhdO1xcbitcXHRpbnQgZGZkO1xcbit9O1xcbitcXG4rRklYVFVSRV9TRVRVUChvcGVuX29fY3JlYXRfb19kaXIpXFxuK3tcXG4rXFx0c3RyY3B5KHNlbGYtXFx1MDAzZWRpcnBhdGgsIFxcXCIvdG1wL29wZW5fb19jcmVhdF9vX2Rpcl90ZXN0LlhYWFhYWFxcXCIpO1xcbitcXHRBU1NFUlRfTkUobWtkdGVtcChzZWxmLVxcdTAwM2VkaXJwYXRoKSwgTlVMTCk7XFxuK1xcdHNlbGYtXFx1MDAzZWRmZCA9IG9wZW4oc2VsZi1cXHUwMDNlZGlycGF0aCwgT19ESVJFQ1RPUlkpO1xcbitcXHRBU1NFUlRfR0Uoc2VsZi1cXHUwMDNlZGZkLCAwKTtcXG4rfVxcbitcXG4rRklYVFVSRV9URUFSRE9XTihvcGVuX29fY3JlYXRfb19kaXIpXFxuK3tcXG4rXFx0Y2xvc2Uoc2VsZi1cXHUwMDNlZGZkKTtcXG4rXFx0cm1kaXIoc2VsZi1cXHUwMDNlZGlycGF0aCk7XFxuK31cXG4rXFxuKy8qIERvZXMgb3Blbl9vX2NyZWF0X29fZGlyIHJldHVybiBhIGZkIGF0IGFsbD8gKi9cXG4rVEVTVF9GKG9wZW5fb19jcmVhdF9vX2RpciwgcmV0dXJuc19mZClcXG4re1xcbitcXHRpbnQgZmQgPSBvcGVuX29fY3JlYXRfb19kaXJfY2hlY2tlZChzZWxmLVxcdTAwM2VkZmQsIFxcXCJuZXdkaXJcXFwiKTtcXG4rXFx0RVhQRUNUX0VRKGNsb3NlKGZkKSwgMCk7XFxuK1xcdEVYUEVDVF9FUSh1bmxpbmthdChzZWxmLVxcdTAwM2VkZmQsIFxcXCJuZXdkaXJcXFwiLCBBVF9SRU1PVkVESVIpLCAwKTtcXG4rfVxcbitcXG4rLyogVGhlIGZkIG11c3QgcmVmZXIgdG8gdGhlIGRpcmVjdG9yeSB0aGF0IHdhcyBqdXN0IGNyZWF0ZWQuICovXFxuK1RFU1RfRihvcGVuX29fY3JlYXRfb19kaXIsIGZkX2lzX2NyZWF0ZWRfZGlyKVxcbit7XFxuK1xcdGludCBmZDtcXG4rXFx0c3RydWN0IHN0YXQgc3RfdmlhX2ZkLCBzdF92aWFfcGF0aDtcXG4rXFx0Y2hhciBwYXRoW1BBVEhfTUFYXTtcXG4rXFxuK1xcdGZkID0gb3Blbl9vX2NyZWF0X29fZGlyX2NoZWNrZWQoc2VsZi1cXHUwMDNlZGZkLCBcXFwiY2hlY2tkaXJcXFwiKTtcXG4rXFxuK1xcdEFTU0VSVF9FUShmc3RhdChmZCwgXFx1MDAyNnN0X3ZpYV9mZCksIDApO1xcbitcXG4rXFx0c25wcmludGYocGF0aCwgc2l6ZW9mKHBhdGgpLCBcXFwiJXMvY2hlY2tkaXJcXFwiLCBzZWxmLVxcdTAwM2VkaXJwYXRoKTtcXG4rXFx0QVNTRVJUX0VRKHN0YXQocGF0aCwgXFx1MDAyNnN0X3ZpYV9wYXRoKSwgMCk7XFxuK1xcbitcXHRFWFBFQ1RfRVEoc3RfdmlhX2ZkLnN0X2lubywgc3RfdmlhX3BhdGguc3RfaW5vKTtcXG4rXFx0RVhQRUNUX0VRKHN0X3ZpYV9mZC5zdF9kZXYsIHN0X3ZpYV9wYXRoLnN0X2Rldik7XFxuK1xcbitcXHRFWFBFQ1RfRVEoY2xvc2UoZmQpLCAwKTtcXG4rXFx0RVhQRUNUX0VRKHJtZGlyKHBhdGgpLCAwKTtcXG4rfVxcbitcXG4rLyogTWlzc2luZyBwYXJlbnQgY29tcG9uZW50IG11c3QgZmFpbCB3aXRoIEVOT0VOVC4gKi9cXG4rVEVTVF9GKG9wZW5fb19jcmVhdF9vX2RpciwgZW5vZW50X21pc3NpbmdfcGFyZW50KVxcbit7XFxuK1xcdEVYUEVDVF9FUShvcGVuX29fY3JlYXRfb19kaXIoc2VsZi1cXHUwMDNlZGZkLCBcXFwibm9uZXhpc3RlbnQvY2hpbGRcXFwiLCBTX0lSV1hVLCAwKSwgLTEpO1xcbitcXHRFWFBFQ1RfRVEoZXJybm8sIEVOT0VOVCk7XFxuK31cXG4rXFxuKy8qIEFuIGludmFsaWQgZGZkIG11c3QgZmFpbCB3aXRoIEVCQURGLiAqL1xcbitURVNUX0Yob3Blbl9vX2NyZWF0X29fZGlyLCBlYmFkZilcXG4re1xcbitcXHRFWFBFQ1RfRVEob3Blbl9vX2NyZWF0X29fZGlyKC00MiwgXFxcImJhZGZkaXJcXFwiLCBTX0lSV1hVLCAwKSwgLTEpO1xcbitcXHRFWFBFQ1RfRVEoZXJybm8sIEVCQURGKTtcXG4rfVxcbitcXG4rLyogQSBkZmQgdGhhdCBwb2ludHMgdG8gYSBmaWxlIChub3QgYSBkaXJlY3RvcnkpIG11c3QgZmFpbCB3aXRoIEVOT1RESVIuICovXFxuK1RFU1RfRihvcGVuX29fY3JlYXRfb19kaXIsIGVub3RkaXJfZGZkKVxcbit7XFxuK1xcdGludCBmaWxlX2ZkO1xcbitcXG4rXFx0ZmlsZV9mZCA9IG9wZW5hdChzZWxmLVxcdTAwM2VkZmQsIFxcXCJmaWxlXFxcIixcXG4rXFx0XFx0XFx0IE9fQ1JFQVQgfCBPX1dST05MWSwgU19JUldYVSk7XFxuK1xcdEFTU0VSVF9HRShmaWxlX2ZkLCAwKTtcXG4rXFxuK1xcdEVYUEVDVF9FUShvcGVuX29fY3JlYXRfb19kaXIoZmlsZV9mZCwgXFxcInN1YmRpclxcXCIsIFNfSVJXWFUsIDApLCAtMSk7XFxuK1xcdEVYUEVDVF9FUShlcnJubywgRU5PVERJUik7XFxuK1xcbitcXHRFWFBFQ1RfRVEoY2xvc2UoZmlsZV9mZCksIDApO1xcbitcXHRFWFBFQ1RfRVEodW5saW5rYXQoc2VsZi1cXHUwMDNlZGZkLCBcXFwiZmlsZVxcXCIsIDApLCAwKTtcXG4rfVxcbitcXG4rLypcXG4rICogT19FWENMIHRvZ2V0aGVyIHdpdGggT19DUkVBVHxPX0RJUkVDVE9SWSBtdXN0IGZhaWwgd2l0aCBFRVhJU1Qgd2hlblxcbisgKiB0aGUgdGFyZ2V0IGRpcmVjdG9yeSBhbHJlYWR5IGV4aXN0cy5cXG4rICovXFxuK1RFU1RfRihvcGVuX29fY3JlYXRfb19kaXIsIG9fZXhjbF9lZXhpc3QpXFxuK3tcXG4rXFx0aW50IGZkO1xcbitcXG4rXFx0ZmQgPSBvcGVuX29fY3JlYXRfb19kaXJfY2hlY2tlZF9mbGFncyhzZWxmLVxcdTAwM2VkZmQsIFxcXCJleGNsZGlyXFxcIiwgT19FWENMKTtcXG4rXFx0RVhQRUNUX0VRKGNsb3NlKGZkKSwgMCk7XFxuK1xcbitcXHRFWFBFQ1RfRVEob3Blbl9vX2NyZWF0X29fZGlyKHNlbGYtXFx1MDAzZWRmZCwgXFxcImV4Y2xkaXJcXFwiLCBTX0lSV1hVLCBPX0VYQ0wpLCAtMSk7XFxuK1xcdEVYUEVDVF9FUShlcnJubywgRUVYSVNUKTtcXG4rXFxuK1xcdEVYUEVDVF9FUSh1bmxpbmthdChzZWxmLVxcdTAwM2VkZmQsIFxcXCJleGNsZGlyXFxcIiwgQVRfUkVNT1ZFRElSKSwgMCk7XFxuK31cXG4rXFxuKy8qXFxuKyAqIE9fQ1JFQVR8T19ESVJFQ1RPUlkgb24gYSBwYXRoIHRoYXQgYWxyZWFkeSBleGlzdHMgYXMgYSByZWd1bGFyIGZpbGVcXG4rICogbXVzdCBmYWlsIHdpdGggRU5PVERJUi5cXG4rICovXFxuK1RFU1RfRihvcGVuX29fY3JlYXRfb19kaXIsIGV4aXN0aW5nX2ZpbGVfZW5vdGRpcilcXG4re1xcbitcXHRpbnQgZmlsZV9mZDtcXG4rXFxuK1xcdGZpbGVfZmQgPSBvcGVuYXQoc2VsZi1cXHUwMDNlZGZkLCBcXFwicmVnZmlsZVxcXCIsXFxuK1xcdFxcdFxcdCBPX0NSRUFUIHwgT19XUk9OTFksIFNfSVJXWFUpO1xcbitcXHRBU1NFUlRfR0UoZmlsZV9mZCwgMCk7XFxuK1xcdEVYUEVDVF9FUShjbG9zZShmaWxlX2ZkKSwgMCk7XFxuK1xcbitcXHRFWFBFQ1RfRVEob3Blbl9vX2NyZWF0X29fZGlyKHNlbGYtXFx1MDAzZWRmZCwgXFxcInJlZ2ZpbGVcXFwiLCBTX0lSV1hVLCAwKSwgLTEpO1xcbitcXHRFWFBFQ1RfRVEoZXJybm8sIEVOT1RESVIpO1xcbitcXG4rXFx0RVhQRUNUX0VRKHVubGlua2F0KHNlbGYtXFx1MDAzZWRmZCwgXFxcInJlZ2ZpbGVcXFwiLCAwKSwgMCk7XFxuK31cXG4rXFxuKy8qXFxuKyAqIE9fQ1JFQVR8T19ESVJFQ1RPUlkgY29tYmluZWQgd2l0aCBhIHdyaXRhYmxlIGFjY2VzcyBtb2RlIG11c3QgYmVcXG4rICogcmVqZWN0ZWQ6IGEgZGlyZWN0b3J5IGNhbm5vdCBiZSBvcGVuZWQgZm9yIHdyaXRpbmcuXFxuKyAqL1xcbitURVNUX0Yob3Blbl9vX2NyZWF0X29fZGlyLCByZWplY3RzX3dyaXRhYmxlX2FjY19tb2RlKVxcbit7XFxuK1xcdEVYUEVDVF9FUShvcGVuX29fY3JlYXRfb19kaXIoc2VsZi1cXHUwMDNlZGZkLCBcXFwicmR3cmRpclxcXCIsIFNfSVJXWFUsIE9fUkRXUiksIC0xKTtcXG4rXFx0RVhQRUNUX0VRKGVycm5vLCBFTk9URElSKTtcXG4rXFx0LyogQ2xlYW4gdXAgaWYgdGhlIGtlcm5lbCBjcmVhdGVkIHRoZSBkaXJlY3RvcnkgYW55d2F5LiAqL1xcbitcXHR1bmxpbmthdChzZWxmLVxcdTAwM2VkZmQsIFxcXCJyZHdyZGlyXFxcIiwgQVRfUkVNT1ZFRElSKTtcXG4rfVxcbitcXG4rLypcXG4rICogb3BlbmF0KE9fQ1JFQVQpIHdpdGggYSB0cmFpbGluZyBzbGFzaCBidXQgd2l0aG91dCBPX0RJUkVDVE9SWVxcbisgKiBtdXN0IGZhaWwgd2l0aCBFSVNESVIgYW5kIG11c3Qgbm90IGNyZWF0ZSBhbnl0aGluZyBhdCB0aGUgcGF0aC5cXG4rICovXFxuK1RFU1RfRihvcGVuX29fY3JlYXRfb19kaXIsIHRyYWlsaW5nX3NsYXNoX25vX29fZGlyKVxcbit7XFxuK1xcdGludCBmZDtcXG4rXFx0c3RydWN0IHN0YXQgc3Q7XFxuK1xcbitcXHRmZCA9IG9wZW5hdChzZWxmLVxcdTAwM2VkZmQsIFxcXCJ0cmFpbGluZy9cXFwiLCBPX0NSRUFUIHwgT19XUk9OTFksIFNfSVJXWFUpO1xcbitcXHRFWFBFQ1RfRVEoZmQsIC0xKTtcXG4rXFx0RVhQRUNUX0VRKGVycm5vLCBFSVNESVIpO1xcbitcXG4rXFx0RVhQRUNUX0VRKGZzdGF0YXQoc2VsZi1cXHUwMDNlZGZkLCBcXFwidHJhaWxpbmdcXFwiLCBcXHUwMDI2c3QsIDApLCAtMSk7XFxuK1xcdEVYUEVDVF9FUShlcnJubywgRU5PRU5UKTtcXG4rXFxuK1xcdC8qIEJlc3QtZWZmb3J0IGNsZWFudXAgaW4gY2FzZSB0aGUga2VybmVsIGxlZnQgYSBmaWxlIGJlaGluZC4gKi9cXG4rXFx0aWYgKGZkIFxcdTAwM2U9IDApXFxuK1xcdFxcdGNsb3NlKGZkKTtcXG4rXFx0dW5saW5rYXQoc2VsZi1cXHUwMDNlZGZkLCBcXFwidHJhaWxpbmdcXFwiLCAwKTtcXG4rfVxcbitcXG4rLypcXG4rICogVGhlIHJldHVybmVkIGZkIG11c3QgYmUgdXNhYmxlIGFzIGEgZGZkIGZvciBmdXJ0aGVyICphdCgpIGNhbGxzLlxcbisgKi9cXG4rVEVTVF9GKG9wZW5fb19jcmVhdF9vX2RpciwgZmRfdXNhYmxlX2FzX2RmZClcXG4re1xcbitcXHRpbnQgcGFyZW50X2ZkLCBjaGlsZF9mZDtcXG4rXFx0Y2hhciBwYXRoW1BBVEhfTUFYXTtcXG4rXFxuK1xcdHBhcmVudF9mZCA9IG9wZW5fb19jcmVhdF9vX2Rpcl9jaGVja2VkKHNlbGYtXFx1MDAzZWRmZCwgXFxcInBhcmVudFxcXCIpO1xcbitcXHRjaGlsZF9mZCA9IG9wZW5fb19jcmVhdF9vX2Rpcl9jaGVja2VkKHBhcmVudF9mZCwgXFxcImNoaWxkXFxcIik7XFxuK1xcbitcXHRFWFBFQ1RfRVEoY2xvc2UoY2hpbGRfZmQpLCAwKTtcXG4rXFx0RVhQRUNUX0VRKGNsb3NlKHBhcmVudF9mZCksIDApO1xcbitcXG4rXFx0c25wcmludGYocGF0aCwgc2l6ZW9mKHBhdGgpLCBcXFwiJXMvcGFyZW50L2NoaWxkXFxcIiwgc2VsZi1cXHUwMDNlZGlycGF0aCk7XFxuK1xcdEVYUEVDVF9FUShybWRpcihwYXRoKSwgMCk7XFxuK1xcdHNucHJpbnRmKHBhdGgsIHNpemVvZihwYXRoKSwgXFxcIiVzL3BhcmVudFxcXCIsIHNlbGYtXFx1MDAzZWRpcnBhdGgpO1xcbitcXHRFWFBFQ1RfRVEocm1kaXIocGF0aCksIDApO1xcbit9XFxuK1xcbitURVNUX0hBUk5FU1NfTUFJTlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wNFQxNjo1OTo1MC44NDQ1ODE5MDRaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE1MDM1MTIwMDQxOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCI5UF9GU1wiLFxuICAgIFwiQ0VQSF9GU1wiLFxuICAgIFwiRlVTRV9GU1wiLFxuICAgIFwiR0ZTMl9GU1wiLFxuICAgIFwiTkZTX0ZTXCIsXG4gICAgXCJDSUZTXCIsXG4gICAgXCJWQk9YU0ZfRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJsb29rdXBfb3BlblwiLFxuICAgIFwiYXRvbWljX29wZW5cIixcbiAgICBcIm1heV9vX2NyZWF0ZVwiLFxuICAgIFwiYnVpbGRfb3Blbl9mbGFnc1wiLFxuICAgIFwiZG9fb3BlblwiLFxuICAgIFwiZGVudHJ5X2NyZWF0ZVwiLFxuICAgIFwidmZzX21rZGlyXCIsXG4gICAgXCJ2ZnNfY3JlYXRlXCIsXG4gICAgXCJvcGVuX2xhc3RfbG9va3Vwc1wiLFxuICAgIFwibG9va3VwX2Zhc3RfZm9yX29wZW5cIixcbiAgICBcIm1heV9jcmVhdGVfaW5fc3RpY2t5XCIsXG4gICAgXCJmaWxlbmFtZV9jcmVhdGVcIixcbiAgICBcImZpbGVuYW1lX3VubGlua2F0XCIsXG4gICAgXCJmaWxlbmFtZV9yZW5hbWVhdDJcIixcbiAgICBcInY5ZnNfdmZzX2F0b21pY19vcGVuXCIsXG4gICAgXCJ2OWZzX3Zmc19hdG9taWNfb3Blbl9kb3RsXCIsXG4gICAgXCJjZXBoX2F0b21pY19vcGVuXCIsXG4gICAgXCJmdXNlX2F0b21pY19vcGVuXCIsXG4gICAgXCJnZnMyX2F0b21pY19vcGVuXCIsXG4gICAgXCJuZnNfYXRvbWljX29wZW5cIixcbiAgICBcIm5mc19hdG9taWNfb3Blbl92MjNcIixcbiAgICBcImNpZnNfYXRvbWljX29wZW5cIixcbiAgICBcInZib3hzZl9kaXJfYXRvbWljX29wZW5cIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIHN1cHBvcnQgZm9yIGNyZWF0aW5nIGRpcmVjdG9yaWVzIHZpYSBgb3BlbmF0KC4uLiwgT19DUkVBVCB8IE9fRElSRUNUT1JZLCAuLi4pYC4gSXQgbW9kaWZpZXMgY29yZSBWRlMgcGF0aCByZXNvbHV0aW9uIGFuZCBmaWxlIGNyZWF0aW9uIGxvZ2ljIGluIGBmcy9uYW1laS5jYCBhbmQgYGZzL29wZW4uY2AsIGluY2x1ZGluZyBgbG9va3VwX29wZW5gLCBgYXRvbWljX29wZW5gLCBhbmQgYHZmc19ta2RpcmAuIEl0IGFsc28gdXBkYXRlcyBtdWx0aXBsZSBmaWxlc3lzdGVtcyAoOXAsIGNlcGgsIGZ1c2UsIGdmczIsIG5mcywgc21iLCB2Ym94c2YpIHRvIGhhbmRsZSB0aGUgbmV3IGZsYWcgY29tYmluYXRpb24uIFRoaXMgaXMgYSBzaWduaWZpY2FudCBmdW5jdGlvbmFsIGNoYW5nZSB0byBjb3JlIGtlcm5lbCBsb2dpYyBhbmQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdFxuICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LFxuICAgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA5Nzk0OTA3N2Q0ZWQ3NjdlMmNkNGNkNmZhZmI0NThiZWE1ZmM0ODU4XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBKdWwgNCAxNjo1OTo0OCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2ZzLzlwL3Zmc19pbm9kZS5jIGIvZnMvOXAvdmZzX2lub2RlLmNcbmluZGV4IDU3ODNkMDMzNmY5NmFjLi5iYjU1NWU1YmEyNjE1MCAxMDA2NDRcbi0tLSBhL2ZzLzlwL3Zmc19pbm9kZS5jXG4rKysgYi9mcy85cC92ZnNfaW5vZGUuY1xuQEAgLTc3Nyw2ICs3NzcsOSBAQCB2OWZzX3Zmc19hdG9taWNfb3BlbihzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxuIFx0c3RydWN0IGlub2RlICppbm9kZTtcbiBcdGludCBwOV9vbW9kZTtcbiBcbitcdGlmIChPX0lTX01LRElSKGZsYWdzKSlcbitcdFx0ZmxhZ3MgXHUwMDI2PSB+T19DUkVBVDtcbitcbiBcdGlmIChkX2luX2xvb2t1cChkZW50cnkpKSB7XG4gXHRcdHN0cnVjdCBkZW50cnkgKnJlcyA9IHY5ZnNfdmZzX2xvb2t1cChkaXIsIGRlbnRyeSwgMCk7XG4gXHRcdGlmIChyZXMgfHwgZF9yZWFsbHlfaXNfcG9zaXRpdmUoZGVudHJ5KSlcbmRpZmYgLS1naXQgYS9mcy85cC92ZnNfaW5vZGVfZG90bC5jIGIvZnMvOXAvdmZzX2lub2RlX2RvdGwuY1xuaW5kZXggZjczOTZkMjBjYjZjZGMuLmZmM2ZhY2I0MjBjMjI0IDEwMDY0NFxuLS0tIGEvZnMvOXAvdmZzX2lub2RlX2RvdGwuY1xuKysrIGIvZnMvOXAvdmZzX2lub2RlX2RvdGwuY1xuQEAgLTIzOSw2ICsyMzksOSBAQCB2OWZzX3Zmc19hdG9taWNfb3Blbl9kb3RsKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXG4gXHRzdHJ1Y3Qgdjlmc19zZXNzaW9uX2luZm8gKnY5c2VzO1xuIFx0c3RydWN0IHBvc2l4X2FjbCAqcGFjbCA9IE5VTEwsICpkYWNsID0gTlVMTDtcbiBcbitcdGlmIChPX0lTX01LRElSKGZsYWdzKSlcbitcdFx0ZmxhZ3MgXHUwMDI2PSB+T19DUkVBVDtcbitcbiBcdGlmIChkX2luX2xvb2t1cChkZW50cnkpKSB7XG4gXHRcdHN0cnVjdCBkZW50cnkgKnJlcyA9IHY5ZnNfdmZzX2xvb2t1cChkaXIsIGRlbnRyeSwgMCk7XG4gXHRcdGlmIChyZXMgfHwgZF9yZWFsbHlfaXNfcG9zaXRpdmUoZGVudHJ5KSlcbmRpZmYgLS1naXQgYS9mcy9jZXBoL2ZpbGUuYyBiL2ZzL2NlcGgvZmlsZS5jXG5pbmRleCA3MTE2MWYyYjIxNTEzNi4uZTc5YWJkYmQ5ZjYxZTkgMTAwNjQ0XG4tLS0gYS9mcy9jZXBoL2ZpbGUuY1xuKysrIGIvZnMvY2VwaC9maWxlLmNcbkBAIC04MTEsNiArODExLDkgQEAgaW50IGNlcGhfYXRvbWljX29wZW4oc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcbiBcdCAgICAgIGRpciwgY2VwaF92aW5vcChkaXIpLCBkZW50cnksIGRlbnRyeSxcbiBcdCAgICAgIGRfdW5oYXNoZWQoZGVudHJ5KSA/IFwidW5oYXNoZWRcIiA6IFwiaGFzaGVkXCIsIGZsYWdzLCBtb2RlKTtcbiBcbitcdGlmIChPX0lTX01LRElSKGZsYWdzKSlcbitcdFx0ZmxhZ3MgXHUwMDI2PSB+T19DUkVBVDtcbitcbiBcdGlmIChkZW50cnktXHUwMDNlZF9uYW1lLmxlbiBcdTAwM2UgTkFNRV9NQVgpXG4gXHRcdHJldHVybiAtRU5BTUVUT09MT05HO1xuIFxuZGlmZiAtLWdpdCBhL2ZzL2Z1c2UvZGlyLmMgYi9mcy9mdXNlL2Rpci5jXG5pbmRleCAwZTJhMTAzOWZhNDNlYS4uZTAxODY5NTY1ZDVlZTUgMTAwNjQ0XG4tLS0gYS9mcy9mdXNlL2Rpci5jXG4rKysgYi9mcy9mdXNlL2Rpci5jXG5AQCAtOTM1LDYgKzkzNSw5IEBAIHN0YXRpYyBpbnQgZnVzZV9hdG9taWNfb3BlbihzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZW50cnksXG4gXHRzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCA9IGZpbGVfbW50X2lkbWFwKGZpbGUpO1xuIFx0c3RydWN0IGZ1c2VfY29ubiAqZmMgPSBnZXRfZnVzZV9jb25uKGRpcik7XG4gXG4rXHRpZiAoT19JU19NS0RJUihmbGFncykpXG4rXHRcdGZsYWdzIFx1MDAyNj0gfk9fQ1JFQVQ7XG4rXG4gXHRpZiAoZnVzZV9pc19iYWQoZGlyKSlcbiBcdFx0cmV0dXJuIC1FSU87XG4gXG5kaWZmIC0tZ2l0IGEvZnMvZ2ZzMi9pbm9kZS5jIGIvZnMvZ2ZzMi9pbm9kZS5jXG5pbmRleCA4YTc3Nzk0YmJkNGFmYy4uOTg1OWFlMDM0MWE5OWUgMTAwNjQ0XG4tLS0gYS9mcy9nZnMyL2lub2RlLmNcbisrKyBiL2ZzL2dmczIvaW5vZGUuY1xuQEAgLTEzODcsNiArMTM4Nyw5IEBAIHN0YXRpYyBpbnQgZ2ZzMl9hdG9taWNfb3BlbihzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxuIHtcbiBcdGJvb2wgZXhjbCA9ICEhKGZsYWdzIFx1MDAyNiBPX0VYQ0wpO1xuIFxuK1x0aWYgKE9fSVNfTUtESVIoZmxhZ3MpKVxuK1x0XHRmbGFncyBcdTAwMjY9IH5PX0NSRUFUO1xuK1xuIFx0aWYgKGRfaW5fbG9va3VwKGRlbnRyeSkpIHtcbiBcdFx0c3RydWN0IGRlbnRyeSAqZCA9IF9fZ2ZzMl9sb29rdXAoZGlyLCBkZW50cnksIGZpbGUpO1xuIFx0XHRpZiAoZmlsZS1cdTAwM2VmX21vZGUgXHUwMDI2IEZNT0RFX09QRU5FRCkge1xuZGlmZiAtLWdpdCBhL2ZzL25hbWVpLmMgYi9mcy9uYW1laS5jXG5pbmRleCAxOWNlNDNjOWE2ZTY2Mi4uMDMwY2FjNGZiZTU1NWUgMTAwNjQ0XG4tLS0gYS9mcy9uYW1laS5jXG4rKysgYi9mcy9uYW1laS5jXG5AQCAtMTM4MiwxMyArMTM4MiwxMiBAQCBpbnQgbWF5X2xpbmthdChzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgY29uc3Qgc3RydWN0IHBhdGggKmxpbmspXG4gXG4gLyoqXG4gICogbWF5X2NyZWF0ZV9pbl9zdGlja3kgLSBDaGVjayB3aGV0aGVyIGFuIE9fQ1JFQVQgb3BlbiBpbiBhIHN0aWNreSBkaXJlY3Rvcnlcbi0gKlx0XHRcdCAgc2hvdWxkIGJlIGFsbG93ZWQsIG9yIG5vdCwgb24gZmlsZXMgdGhhdCBhbHJlYWR5XG4tICpcdFx0XHQgIGV4aXN0LlxuKyAqXHRcdFx0ICBzaG91bGQgYmUgYWxsb3dlZCwgb3Igbm90XG4gICogQGlkbWFwOiBpZG1hcCBvZiB0aGUgbW91bnQgdGhlIGlub2RlIHdhcyBmb3VuZCBmcm9tXG4gICogQG5kOiBuYW1laWRhdGEgcGF0aHdhbGsgZGF0YVxuICAqIEBpbm9kZTogdGhlIGlub2RlIG9mIHRoZSBmaWxlIHRvIG9wZW5cbiAgKlxuLSAqIEJsb2NrIGFuIE9fQ1JFQVQgb3BlbiBvZiBhIEZJRk8gKG9yIGEgcmVndWxhciBmaWxlKSB3aGVuOlxuKyAqIEJsb2NrIGFuIE9fQ1JFQVQgb3BlbiBvZiBhIEZJRk8gKG9yIGEgcmVndWxhciBmaWxlL2RpcmVjdG9yeSkgd2hlbjpcbiAgKiAgIC0gc3lzY3RsX3Byb3RlY3RlZF9maWZvcyAob3Igc3lzY3RsX3Byb3RlY3RlZF9yZWd1bGFyKSBpcyBlbmFibGVkXG4gICogICAtIHRoZSBmaWxlIGFscmVhZHkgZXhpc3RzXG4gICogICAtIHdlIGFyZSBpbiBhIHN0aWNreSBkaXJlY3RvcnlcbkBAIC0xNDE2LDYgKzE0MTUsMTQgQEAgc3RhdGljIGludCBtYXlfY3JlYXRlX2luX3N0aWNreShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IG5hbWVpZGF0YSAqbmQsXG4gXHRpZiAobGlrZWx5KCEoZGlyX21vZGUgXHUwMDI2IFNfSVNWVFgpKSlcbiBcdFx0cmV0dXJuIDA7XG4gXG4rXHQvKlxuK1x0ICogVGhlcmUgaXMgbm8gc2VwYXJhdGUgc3lzY3RsIGZvciBkaXJlY3RvcnkgY3JlYXRpb24gaW4gc3RpY2t5XG4rXHQgKiBmb2xkZXJzLiBUaGVyZWZvcmUsIGZvciB0aGUgU19JU0RJUiBjYXNlLCBkaXNhYmxpbmdcbitcdCAqIHN5c2N0bF9wcm90ZWN0ZWRfcmVndWxhciBpcyBub3QgZW5vdWdoIHRvIGFsbG93IGNyZWF0aW5nIGFcbitcdCAqIGRpcmVjdG9yeSBpbiBhIHN0aWNreSBmb2xkZXIsIGJlY2F1c2UgdGhhdCBtYXkgc3VycHJpc2UgdXNlcnNcbitcdCAqIG5vdCBleHBlY3RpbmcgdGhhdCBPX0NSRUFUfE9fRElSRUNUT1JZIGlzIHBvc3NpYmxlIG9uIG5ld2VyXG4rXHQgKiBrZXJuZWxzLlxuK1x0ICovXG4gXHRpZiAoU19JU1JFRyhpbm9kZS1cdTAwM2VpX21vZGUpIFx1MDAyNlx1MDAyNiAhc3lzY3RsX3Byb3RlY3RlZF9yZWd1bGFyKVxuIFx0XHRyZXR1cm4gMDtcbiBcbkBAIC0xNDQ3LDYgKzE0NTQsMTIgQEAgc3RhdGljIGludCBtYXlfY3JlYXRlX2luX3N0aWNreShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IG5hbWVpZGF0YSAqbmQsXG4gXHRcdFx0XHRcdCAgICAgIFwic3RpY2t5X2NyZWF0ZV9yZWd1bGFyXCIpO1xuIFx0XHRcdHJldHVybiAtRUFDQ0VTO1xuIFx0XHR9XG4rXG4rXHRcdGlmIChTX0lTRElSKGlub2RlLVx1MDAzZWlfbW9kZSkpIHtcbitcdFx0XHRhdWRpdF9sb2dfcGF0aF9kZW5pZWQoQVVESVRfQU5PTV9DUkVBVCxcbitcdFx0XHRcdFx0ICAgICAgXCJzdGlja3lfY3JlYXRlX2RpclwiKTtcbitcdFx0XHRyZXR1cm4gLUVBQ0NFUztcbitcdFx0fVxuIFx0fVxuIFxuIFx0cmV0dXJuIDA7XG5AQCAtMjc4MSw5ICsyNzk0LDE0IEBAIHN0YXRpYyBjb25zdCBjaGFyICpwYXRoX2luaXQoc3RydWN0IG5hbWVpZGF0YSAqbmQsIHVuc2lnbmVkIGZsYWdzKVxuIFx0cmV0dXJuIHM7XG4gfVxuIFxuK3N0YXRpYyBpbmxpbmUgYm9vbCB0cmFpbGluZ19zbGFzaGVzKGNvbnN0IHN0cnVjdCBxc3RyIGxhc3QpXG4re1xuK1x0cmV0dXJuIChib29sKWxhc3QubmFtZVtsYXN0Lmxlbl07XG4rfVxuK1xuIHN0YXRpYyBpbmxpbmUgY29uc3QgY2hhciAqbG9va3VwX2xhc3Qoc3RydWN0IG5hbWVpZGF0YSAqbmQpXG4ge1xuLVx0aWYgKG5kLVx1MDAzZWxhc3RfdHlwZSA9PSBMQVNUX05PUk0gXHUwMDI2XHUwMDI2IG5kLVx1MDAzZWxhc3QubmFtZVtuZC1cdTAwM2VsYXN0Lmxlbl0pXG4rXHRpZiAobmQtXHUwMDNlbGFzdF90eXBlID09IExBU1RfTk9STSBcdTAwMjZcdTAwMjYgdHJhaWxpbmdfc2xhc2hlcyhuZC1cdTAwM2VsYXN0KSlcbiBcdFx0bmQtXHUwMDNlZmxhZ3MgfD0gTE9PS1VQX0ZPTExPVyB8IExPT0tVUF9ESVJFQ1RPUlk7XG4gXG4gXHRyZXR1cm4gd2Fsa19jb21wb25lbnQobmQsIFdBTEtfVFJBSUxJTkcpO1xuQEAgLTQxNjQsNiArNDE4MiwyNCBAQCBzdGF0aWMgaW5saW5lIHVtb2RlX3QgdmZzX3ByZXBhcmVfbW9kZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcbiBcdHJldHVybiBtb2RlO1xuIH1cbiBcbitzdGF0aWMgaW5saW5lXG4raW50IHZmc19jcmVhdGVfbm9fcGVybShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxuK1x0XHQgICAgICAgdW1vZGVfdCBtb2RlLCBzdHJ1Y3QgZGVsZWdhdGVkX2lub2RlICpkaSlcbit7XG4rXHRzdHJ1Y3QgaW5vZGUgKmRpciA9IGRfaW5vZGUoZGVudHJ5LVx1MDAzZWRfcGFyZW50KTtcbitcdGludCBlcnJvcjtcbitcbitcdGVycm9yID0gdHJ5X2JyZWFrX2RlbGVnKGRpciwgTEVBU0VfQlJFQUtfRElSX0NSRUFURSwgZGkpO1xuK1x0aWYgKGVycm9yKVxuK1x0XHRyZXR1cm4gZXJyb3I7XG4rXG4rXHRlcnJvciA9IGRpci1cdTAwM2VpX29wLVx1MDAzZWNyZWF0ZShpZG1hcCwgZGlyLCBkZW50cnksIG1vZGUsIHRydWUpO1xuK1x0aWYgKCFlcnJvcilcbitcdFx0ZnNub3RpZnlfY3JlYXRlKGRpciwgZGVudHJ5KTtcbitcbitcdHJldHVybiBlcnJvcjtcbit9XG4rXG4gLyoqXG4gICogdmZzX2NyZWF0ZSAtIGNyZWF0ZSBuZXcgZmlsZVxuICAqIEBpZG1hcDpcdGlkbWFwIG9mIHRoZSBtb3VudCB0aGUgaW5vZGUgd2FzIGZvdW5kIGZyb21cbkBAIC00MTk2LDEzICs0MjMyLDggQEAgaW50IHZmc19jcmVhdGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlLFxuIFx0ZXJyb3IgPSBzZWN1cml0eV9pbm9kZV9jcmVhdGUoZGlyLCBkZW50cnksIG1vZGUpO1xuIFx0aWYgKGVycm9yKVxuIFx0XHRyZXR1cm4gZXJyb3I7XG4tXHRlcnJvciA9IHRyeV9icmVha19kZWxlZyhkaXIsIExFQVNFX0JSRUFLX0RJUl9DUkVBVEUsIGRpKTtcbi1cdGlmIChlcnJvcilcbi1cdFx0cmV0dXJuIGVycm9yO1xuLVx0ZXJyb3IgPSBkaXItXHUwMDNlaV9vcC1cdTAwM2VjcmVhdGUoaWRtYXAsIGRpciwgZGVudHJ5LCBtb2RlLCB0cnVlKTtcbi1cdGlmICghZXJyb3IpXG4tXHRcdGZzbm90aWZ5X2NyZWF0ZShkaXIsIGRlbnRyeSk7XG4tXHRyZXR1cm4gZXJyb3I7XG4rXG4rXHRyZXR1cm4gdmZzX2NyZWF0ZV9ub19wZXJtKGlkbWFwLCBkZW50cnksIG1vZGUsIGRpKTtcbiB9XG4gRVhQT1JUX1NZTUJPTCh2ZnNfY3JlYXRlKTtcbiBcbkBAIC00MzE5LDczICs0MzUwLDEyMiBAQCBzdGF0aWMgaW5saW5lIGludCBvcGVuX3RvX25hbWVpX2ZsYWdzKGludCBmbGFnKVxuIFxuIHN0YXRpYyBpbnQgbWF5X29fY3JlYXRlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxuIFx0XHRcdGNvbnN0IHN0cnVjdCBwYXRoICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcbi1cdFx0XHR1bW9kZV90IG1vZGUpXG4rXHRcdFx0dW1vZGVfdCBtb2RlLCBib29sIGNyZWF0ZV9kaXIpXG4ge1xuLVx0aW50IGVycm9yID0gc2VjdXJpdHlfcGF0aF9ta25vZChkaXIsIGRlbnRyeSwgbW9kZSwgMCk7XG4rXHRzdHJ1Y3QgaW5vZGUgKmRpcl9pbm9kZSA9IGRpci1cdTAwM2VkZW50cnktXHUwMDNlZF9pbm9kZTtcbitcdGludCBlcnJvcjtcbitcbitcdGlmIChjcmVhdGVfZGlyKVxuK1x0XHRlcnJvciA9IHNlY3VyaXR5X3BhdGhfbWtkaXIoZGlyLCBkZW50cnksIG1vZGUpO1xuK1x0ZWxzZVxuK1x0XHRlcnJvciA9IHNlY3VyaXR5X3BhdGhfbWtub2QoZGlyLCBkZW50cnksIG1vZGUsIDApO1xuIFx0aWYgKGVycm9yKVxuIFx0XHRyZXR1cm4gZXJyb3I7XG4gXG4gXHRpZiAoIWZzdWlkZ2lkX2hhc19tYXBwaW5nKGRpci1cdTAwM2VkZW50cnktXHUwMDNlZF9zYiwgaWRtYXApKVxuIFx0XHRyZXR1cm4gLUVPVkVSRkxPVztcbiBcbi1cdGVycm9yID0gaW5vZGVfcGVybWlzc2lvbihpZG1hcCwgZGlyLVx1MDAzZWRlbnRyeS1cdTAwM2VkX2lub2RlLFxuLVx0XHRcdFx0IE1BWV9XUklURSB8IE1BWV9FWEVDKTtcbitcdGVycm9yID0gaW5vZGVfcGVybWlzc2lvbihpZG1hcCwgZGlyX2lub2RlLCBNQVlfV1JJVEUgfCBNQVlfRVhFQyk7XG4gXHRpZiAoZXJyb3IpXG4gXHRcdHJldHVybiBlcnJvcjtcbiBcbi1cdHJldHVybiBzZWN1cml0eV9pbm9kZV9jcmVhdGUoZGlyLVx1MDAzZWRlbnRyeS1cdTAwM2VkX2lub2RlLCBkZW50cnksIG1vZGUpO1xuK1x0aWYgKGNyZWF0ZV9kaXIpXG4rXHRcdGVycm9yID0gc2VjdXJpdHlfaW5vZGVfbWtkaXIoZGlyX2lub2RlLCBkZW50cnksIG1vZGUpO1xuK1x0ZWxzZVxuK1x0XHRlcnJvciA9IHNlY3VyaXR5X2lub2RlX2NyZWF0ZShkaXJfaW5vZGUsIGRlbnRyeSwgbW9kZSk7XG4rXG4rXHRyZXR1cm4gZXJyb3I7XG4rfVxuK1xuK3N0YXRpYyBpbmxpbmUgdW1vZGVfdCBvX2NyZWF0ZV9tb2RlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxuK1x0XHRjb25zdCBzdHJ1Y3QgaW5vZGUgKmRpciwgdW1vZGVfdCBtb2RlLCBib29sIGNyZWF0ZV9kaXIpXG4re1xuK1x0aWYgKGNyZWF0ZV9kaXIpXG4rXHRcdHJldHVybiB2ZnNfcHJlcGFyZV9tb2RlKGlkbWFwLCBkaXIsIG1vZGUsIFNfSVJXWFVHTyB8IFNfSVNWVFgsIDApO1xuK1x0ZWxzZVxuK1x0XHRyZXR1cm4gdmZzX3ByZXBhcmVfbW9kZShpZG1hcCwgZGlyLCBtb2RlLCBTX0lBTExVR08sIFNfSUZSRUcpO1xuIH1cbiBcbiAvKlxuLSAqIEF0dGVtcHQgdG8gYXRvbWljYWxseSBsb29rIHVwLCBjcmVhdGUgYW5kIG9wZW4gYSBmaWxlIGZyb20gYSBuZWdhdGl2ZVxuLSAqIGRlbnRyeS5cbi0gKlxuLSAqIFJldHVybnMgMCBpZiBzdWNjZXNzZnVsLiAgVGhlIGZpbGUgd2lsbCBoYXZlIGJlZW4gY3JlYXRlZCBhbmQgYXR0YWNoZWQgdG9cbi0gKiBAZmlsZSBieSB0aGUgZmlsZXN5c3RlbSBjYWxsaW5nIGZpbmlzaF9vcGVuKCkuXG4tICpcbi0gKiBJZiB0aGUgZmlsZSB3YXMgbG9va2VkIHVwIG9ubHkgb3IgZGlkbid0IG5lZWQgY3JlYXRpbmcsIEZNT0RFX09QRU5FRCB3b24ndFxuLSAqIGJlIHNldC4gIFRoZSBjYWxsZXIgd2lsbCBuZWVkIHRvIHBlcmZvcm0gdGhlIG9wZW4gdGhlbXNlbHZlcy4gIEBwYXRoIHdpbGxcbi0gKiBoYXZlIGJlZW4gdXBkYXRlZCB0byBwb2ludCB0byB0aGUgbmV3IGRlbnRyeS4gIFRoaXMgbWF5IGJlIG5lZ2F0aXZlLlxuLSAqXG4tICogUmV0dXJucyBhbiBlcnJvciBjb2RlIG90aGVyd2lzZS5cbisgKiBhdG9taWNfb3BlbigpIC0gYXR0ZW1wdCB0byBhdG9taWNhbGx5IGxvb2sgdXAsIGNyZWF0ZSBhbmQgb3BlbiBhIGZpbGVcbisgKiBmcm9tIGEgbmVnYXRpdmUgZGVudHJ5LlxuKyAqIEBwYXRoOiAgICAgICAgICBwYXJlbnQgZGlyZWN0b3J5IHBhdGhcbisgKiBAZGVudHJ5OiAgICAgICAgY2hpbGQgdG8gLVx1MDAzZWF0b21pY19vcGVuKClcbisgKiBAb3Blbl9mbGFnOiAgICAgb3BlbiBmbGFnc1xuKyAqIEBtb2RlOiAgICAgICAgICBjcmVhdGUgbW9kZVxuKyAqIEBjcmVhdGVfZXJyb3I6ICByZXR1cm4gdmFsdWUgZnJvbSBtYXlfb19jcmVhdGUoKVxuKyAqXG4rICogSWYgRk1PREVfT1BFTkVEIGlzIHNldCwgdGhlIGZpbGUgd2lsbCBoYXZlIGJlZW4gYXR0YWNoZWQgdG8gQGZpbGUgYnkgdGhlXG4rICogZmlsZXN5c3RlbSBjYWxsaW5nIGZpbmlzaF9vcGVuKCkuIElmIEZNT0RFX09QRU5FRCBpc24ndCBzZXQsIHRoZVxuKyAqIGZpbGVzeXN0ZW0gaW5zdGVhZCBjYWxsZWQgZmluaXNoX25vX29wZW4oKSBhbmQgdGhlIGNhbGxlciB3aWxsIG5lZWQgdG9cbisgKiBwZXJmb3JtIHRoZSBvcGVuIHRoZW1zZWx2ZXMuXG4rICpcbisgKiBGTU9ERV9DUkVBVEVEIGlzIHNldCB3aGVuIHRoZSBjYWxsIHRvIC1cdTAwM2VhdG9taWNfb3BlbigpIGFjdHVhbGx5IGNyZWF0ZWRcbisgKiB0aGUgZmlsZS5cbisgKlxuKyAqIFJldHVybnMgdGhlIG9wZW5lZC9sb29rZWQtdXAgZGVudHJ5IG9uIHN1Y2Nlc3Mgb3IgRVJSX1BUUigtRSkgb24gZmFpbHVyZS5cbisgKiBPbiBlcnJvciwgYXRvbWljX29wZW4oKSBjb25zdW1lcyBAZGVudHJ5LlxuICAqL1xuIHN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICphdG9taWNfb3Blbihjb25zdCBzdHJ1Y3QgcGF0aCAqcGF0aCwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxuIFx0XHRcdFx0ICBzdHJ1Y3QgZmlsZSAqZmlsZSxcbi1cdFx0XHRcdCAgaW50IG9wZW5fZmxhZywgdW1vZGVfdCBtb2RlKVxuK1x0XHRcdFx0ICBpbnQgb3Blbl9mbGFnLCB1bW9kZV90IG1vZGUsIGJvb2wgY3JlYXRlX2Vycm9yKVxuIHtcbiBcdHN0cnVjdCBkZW50cnkgKmNvbnN0IERFTlRSWV9OT1RfU0VUID0gKHZvaWQgKikgLTFVTDtcbiBcdHN0cnVjdCBpbm9kZSAqZGlyID0gIHBhdGgtXHUwMDNlZGVudHJ5LVx1MDAzZWRfaW5vZGU7XG4rXHRib29sIGZhaWxlZF9jcmVhdGUgPSBmYWxzZTtcbiBcdGludCBlcnJvcjtcbiBcbiBcdGZpbGUtXHUwMDNlX19mX3BhdGguZGVudHJ5ID0gREVOVFJZX05PVF9TRVQ7XG4gXHRmaWxlLVx1MDAzZV9fZl9wYXRoLm1udCA9IHBhdGgtXHUwMDNlbW50O1xuK1xuIFx0ZXJyb3IgPSBkaXItXHUwMDNlaV9vcC1cdTAwM2VhdG9taWNfb3BlbihkaXIsIGRlbnRyeSwgZmlsZSxcbiBcdFx0XHRcdCAgICAgICBvcGVuX3RvX25hbWVpX2ZsYWdzKG9wZW5fZmxhZyksIG1vZGUpO1xuIFx0ZF9sb29rdXBfZG9uZShkZW50cnkpO1xuIFx0aWYgKCFlcnJvcikge1xuIFx0XHRpZiAoZmlsZS1cdTAwM2VmX21vZGUgXHUwMDI2IEZNT0RFX09QRU5FRCkge1xuLVx0XHRcdGlmICh1bmxpa2VseShkZW50cnkgIT0gZmlsZS1cdTAwM2VmX3BhdGguZGVudHJ5KSkge1xuK1x0XHRcdC8vIGZpbmlzaF9vcGVuKCkgY2FsbGVkXG4rXHRcdFx0c3RydWN0IGRlbnRyeSAqb3BlbmVkID0gZmlsZS1cdTAwM2VmX3BhdGguZGVudHJ5O1xuK1x0XHRcdGlmICh1bmxpa2VseShvcGVuZWQgIT0gZGVudHJ5KSkge1xuIFx0XHRcdFx0ZHB1dChkZW50cnkpO1xuLVx0XHRcdFx0ZGVudHJ5ID0gZGdldChmaWxlLVx1MDAzZWZfcGF0aC5kZW50cnkpO1xuK1x0XHRcdFx0ZGVudHJ5ID0gZGdldChvcGVuZWQpO1xuIFx0XHRcdH1cbi1cdFx0fSBlbHNlIGlmIChXQVJOX09OKGZpbGUtXHUwMDNlZl9wYXRoLmRlbnRyeSA9PSBERU5UUllfTk9UX1NFVCkpIHtcbi1cdFx0XHRlcnJvciA9IC1FSU87XG4tXHRcdH0gZWxzZSB7XG4tXHRcdFx0aWYgKGZpbGUtXHUwMDNlZl9wYXRoLmRlbnRyeSkge1xuK1x0XHR9IGVsc2UgaWYgKGxpa2VseShmaWxlLVx1MDAzZWZfcGF0aC5kZW50cnkgIT0gREVOVFJZX05PVF9TRVQpKSB7XG4rXHRcdFx0Ly8gZmluaXNoX25vX29wZW4oKSBjYWxsZWRcbitcdFx0XHRzdHJ1Y3QgZGVudHJ5ICpyZXBsYWNlZCA9IGZpbGUtXHUwMDNlZl9wYXRoLmRlbnRyeTtcbitcdFx0XHRpZiAocmVwbGFjZWQpIHtcbiBcdFx0XHRcdGRwdXQoZGVudHJ5KTtcbi1cdFx0XHRcdGRlbnRyeSA9IGZpbGUtXHUwMDNlZl9wYXRoLmRlbnRyeTtcbitcdFx0XHRcdGRlbnRyeSA9IHJlcGxhY2VkO1xuIFx0XHRcdH1cbiBcdFx0XHRpZiAodW5saWtlbHkoZF9pc19uZWdhdGl2ZShkZW50cnkpKSlcbiBcdFx0XHRcdGVycm9yID0gLUVOT0VOVDtcbitcdFx0XHRpZiAoZXJyb3IgXHUwMDI2XHUwMDI2IGNyZWF0ZV9lcnJvcikgLy8gc2hvdWxkIGhhdmUgY3JlYXRlZCwgYnV0IGVycm9yZWQgYmVmb3JlXG4rXHRcdFx0XHRmYWlsZWRfY3JlYXRlID0gdHJ1ZTtcbitcdFx0fSBlbHNlIHtcbitcdFx0XHRjb25zdCBjaGFyICpmc25hbWUgPSBkZW50cnktXHUwMDNlZF9zYi1cdTAwM2VzX3R5cGUtXHUwMDNlbmFtZTtcbitcdFx0XHRXQVJOKDEsIFwiJXM6IC1cdTAwM2VhdG9taWNfb3BlbigpIGxlZnQgZmlsZS1cdTAwM2VmX3BhdGguZGVudHJ5IHVuc2V0IVxcblwiLCBmc25hbWUpO1xuK1x0XHRcdGVycm9yID0gLUVJTztcbiBcdFx0fVxuIFx0fVxuK1xuIFx0aWYgKGVycm9yKSB7XG4rXHRcdGlmIChmYWlsZWRfY3JlYXRlKVxuK1x0XHRcdGF1ZGl0X2lub2RlX2NoaWxkKGRpciwgZGVudHJ5LCBBVURJVF9UWVBFX0NISUxEX0NSRUFURSk7XG4gXHRcdGRwdXQoZGVudHJ5KTtcbiBcdFx0ZGVudHJ5ID0gRVJSX1BUUihlcnJvcik7XG4rXHR9IGVsc2Uge1xuK1x0XHRpZiAoZmlsZS1cdTAwM2VmX21vZGUgXHUwMDI2IEZNT0RFX0NSRUFURUQpXG4rXHRcdFx0ZnNub3RpZnlfY3JlYXRlKGRpciwgZGVudHJ5KTtcbitcdFx0aWYgKGZpbGUtXHUwMDNlZl9tb2RlIFx1MDAyNiBGTU9ERV9PUEVORUQpXG4rXHRcdFx0ZnNub3RpZnlfb3BlbihmaWxlKTtcbiBcdH1cbitcbiBcdHJldHVybiBkZW50cnk7XG4gfVxuIFxuK3N0YXRpYyBpbmxpbmVcbitzdHJ1Y3QgZGVudHJ5ICp2ZnNfbWtkaXJfbm9fcGVybShzdHJ1Y3QgbW50X2lkbWFwICosIHN0cnVjdCBpbm9kZSAqLFxuK1x0XHRcdFx0IHN0cnVjdCBkZW50cnkgKiwgdW1vZGVfdCxcbitcdFx0XHRcdCBzdHJ1Y3QgZGVsZWdhdGVkX2lub2RlICopO1xuIC8qXG4gICogTG9vayB1cCBhbmQgbWF5YmUgY3JlYXRlIGFuZCBvcGVuIHRoZSBsYXN0IGNvbXBvbmVudC5cbiAgKlxuQEAgLTQ0MTIsNiArNDQ5Miw3IEBAIHN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpsb29rdXBfb3BlbihzdHJ1Y3QgbmFtZWlkYXRhICpuZCwgc3RydWN0IGZpbGUgKmZpbGUsXG4gXHRzdHJ1Y3QgZGVudHJ5ICpkZW50cnk7XG4gXHRpbnQgZXJyb3IsIGNyZWF0ZV9lcnJvciA9IDA7XG4gXHR1bW9kZV90IG1vZGUgPSBvcC1cdTAwM2Vtb2RlO1xuK1x0Ym9vbCBjcmVhdGVfZGlyID0gT19JU19NS0RJUihvcGVuX2ZsYWcpO1xuIFxuIFx0aWYgKHVubGlrZWx5KElTX0RFQURESVIoZGlyX2lub2RlKSkpXG4gXHRcdHJldHVybiBFUlJfUFRSKC1FTk9FTlQpO1xuQEAgLTQ0MzcsNyArNDUxOCw3IEBAIHN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpsb29rdXBfb3BlbihzdHJ1Y3QgbmFtZWlkYXRhICpuZCwgc3RydWN0IGZpbGUgKmZpbGUsXG4gXHRcdGRlbnRyeSA9IE5VTEw7XG4gXHR9XG4gXHRpZiAoZGVudHJ5LVx1MDAzZWRfaW5vZGUpIHtcbi1cdFx0LyogQ2FjaGVkIHBvc2l0aXZlIGRlbnRyeTogd2lsbCBvcGVuIGluIGZfb3AtXHUwMDNlb3BlbiAqL1xuK1x0XHQvKiBDYWNoZWQgcG9zaXRpdmUgZGVudHJ5OiB3aWxsIG9wZW4gaW4gZG9fb3BlbigpLiAqL1xuIFx0XHRyZXR1cm4gZGVudHJ5O1xuIFx0fVxuIFxuQEAgLTQ0NTksMTkgKzQ1NDAsMjQgQEAgc3RhdGljIHN0cnVjdCBkZW50cnkgKmxvb2t1cF9vcGVuKHN0cnVjdCBuYW1laWRhdGEgKm5kLCBzdHJ1Y3QgZmlsZSAqZmlsZSxcbiBcdGlmIChvcGVuX2ZsYWcgXHUwMDI2IE9fQ1JFQVQpIHtcbiBcdFx0aWYgKG9wZW5fZmxhZyBcdTAwMjYgT19FWENMKVxuIFx0XHRcdG9wZW5fZmxhZyBcdTAwMjY9IH5PX1RSVU5DO1xuLVx0XHRtb2RlID0gdmZzX3ByZXBhcmVfbW9kZShpZG1hcCwgZGlyLVx1MDAzZWRfaW5vZGUsIG1vZGUsIG1vZGUsIG1vZGUpO1xuK1x0XHRtb2RlID0gb19jcmVhdGVfbW9kZShpZG1hcCwgZGlyX2lub2RlLCBtb2RlLCBjcmVhdGVfZGlyKTtcbiBcdFx0aWYgKGxpa2VseShnb3Rfd3JpdGUpKVxuIFx0XHRcdGNyZWF0ZV9lcnJvciA9IG1heV9vX2NyZWF0ZShpZG1hcCwgXHUwMDI2bmQtXHUwMDNlcGF0aCxcbi1cdFx0XHRcdFx0XHQgICAgZGVudHJ5LCBtb2RlKTtcbitcdFx0XHRcdFx0XHQgICAgZGVudHJ5LCBtb2RlLCBjcmVhdGVfZGlyKTtcbiBcdFx0ZWxzZVxuIFx0XHRcdGNyZWF0ZV9lcnJvciA9IC1FUk9GUztcbitcdFx0LyogUmVmdXNlIHRvIGNyZWF0ZSBhIGRpcmVjdG9yeSB0aHJvdWdoIGEgZGFuZ2xpbmcgKHRyYWlsaW5nKVxuK1x0XHQgKiBzeW1saW5rLiBGb3IgcmVndWxhciBmaWxlcyB0aGlzIGhhcyBiZWVuIGFsbG93ZWQgaGlzdG9yaWNhbGx5XG4rXHRcdCAqIG9uIE9fQ1JFQVQgd2l0aG91dCBPX0VYQ0wuICovXG4rXHRcdGlmICh1bmxpa2VseShuZC1cdTAwM2VkZXB0aCkgXHUwMDI2XHUwMDI2IGNyZWF0ZV9kaXIgXHUwMDI2XHUwMDI2ICFjcmVhdGVfZXJyb3IpXG4rXHRcdFx0Y3JlYXRlX2Vycm9yID0gLUVFWElTVDtcbiBcdH1cbiBcdGlmIChjcmVhdGVfZXJyb3IpXG4gXHRcdG9wZW5fZmxhZyBcdTAwMjY9IH5PX0NSRUFUO1xuIFx0aWYgKGRpcl9pbm9kZS1cdTAwM2VpX29wLVx1MDAzZWF0b21pY19vcGVuKSB7XG4gXHRcdGlmIChuZC1cdTAwM2VmbGFncyBcdTAwMjYgTE9PS1VQX0RJUkVDVE9SWSlcbiBcdFx0XHRvcGVuX2ZsYWcgfD0gT19ESVJFQ1RPUlk7XG4tXHRcdGRlbnRyeSA9IGF0b21pY19vcGVuKFx1MDAyNm5kLVx1MDAzZXBhdGgsIGRlbnRyeSwgZmlsZSwgb3Blbl9mbGFnLCBtb2RlKTtcbitcdFx0ZGVudHJ5ID0gYXRvbWljX29wZW4oXHUwMDI2bmQtXHUwMDNlcGF0aCwgZGVudHJ5LCBmaWxlLCBvcGVuX2ZsYWcsIG1vZGUsIGNyZWF0ZV9lcnJvcik7XG4gXHRcdGlmICh1bmxpa2VseShjcmVhdGVfZXJyb3IpIFx1MDAyNlx1MDAyNiBkZW50cnkgPT0gRVJSX1BUUigtRU5PRU5UKSlcbiBcdFx0XHRkZW50cnkgPSBFUlJfUFRSKGNyZWF0ZV9lcnJvcik7XG4gXHRcdHJldHVybiBkZW50cnk7XG5AQCAtNDQ5MCwzMCArNDU3Niw0NCBAQCBzdGF0aWMgc3RydWN0IGRlbnRyeSAqbG9va3VwX29wZW4oc3RydWN0IG5hbWVpZGF0YSAqbmQsIHN0cnVjdCBmaWxlICpmaWxlLFxuIFx0XHRcdGRlbnRyeSA9IHJlcztcbiBcdFx0fVxuIFx0fVxuK1x0aWYgKGRlbnRyeS1cdTAwM2VkX2lub2RlIHx8ICEob3AtXHUwMDNlb3Blbl9mbGFnIFx1MDAyNiBPX0NSRUFUKSkge1xuK1x0XHQvKiBObyBuZWVkIHRvIGNyZWF0ZSBhIGZpbGUuIElmIGxvb2t1cCByZXR1cm5lZCBhIHBvc2l0aXZlXG4rXHRcdCAqIGRlbnRyeSwgdGhlIGZpbGUgd2lsbCBiZSBvcGVuZWQgaW4gZG9fb3BlbigpLiAqL1xuK1x0XHRyZXR1cm4gZGVudHJ5O1xuK1x0fVxuIFxuLVx0LyogTmVnYXRpdmUgZGVudHJ5LCBqdXN0IGNyZWF0ZSB0aGUgZmlsZSAqL1xuLVx0aWYgKCFkZW50cnktXHUwMDNlZF9pbm9kZSBcdTAwMjZcdTAwMjYgKG9wZW5fZmxhZyBcdTAwMjYgT19DUkVBVCkpIHtcbi1cdFx0LyogYnV0IGJyZWFrIHRoZSBkaXJlY3RvcnkgbGVhc2UgZmlyc3QhICovXG4tXHRcdGVycm9yID0gdHJ5X2JyZWFrX2RlbGVnKGRpcl9pbm9kZSwgTEVBU0VfQlJFQUtfRElSX0NSRUFURSwgZGVsZWdhdGVkX2lub2RlKTtcbi1cdFx0aWYgKGVycm9yKVxuLVx0XHRcdGdvdG8gb3V0X2RwdXQ7XG4tXG4tXHRcdGZpbGUtXHUwMDNlZl9tb2RlIHw9IEZNT0RFX0NSRUFURUQ7XG4tXHRcdGF1ZGl0X2lub2RlX2NoaWxkKGRpcl9pbm9kZSwgZGVudHJ5LCBBVURJVF9UWVBFX0NISUxEX0NSRUFURSk7XG4tXHRcdGlmICghZGlyX2lub2RlLVx1MDAzZWlfb3AtXHUwMDNlY3JlYXRlKSB7XG4tXHRcdFx0ZXJyb3IgPSAtRUFDQ0VTO1xuLVx0XHRcdGdvdG8gb3V0X2RwdXQ7XG4tXHRcdH1cbitcdC8qIE5lZ2F0aXZlIGRlbnRyeSB3aXRoIE9fQ1JFQVQgZmxhZyBzZXQgKi9cbitcdGF1ZGl0X2lub2RlX2NoaWxkKGRpci1cdTAwM2VkX2lub2RlLCBkZW50cnksIEFVRElUX1RZUEVfQ0hJTERfQ1JFQVRFKTtcbiBcbi1cdFx0ZXJyb3IgPSBkaXJfaW5vZGUtXHUwMDNlaV9vcC1cdTAwM2VjcmVhdGUoaWRtYXAsIGRpcl9pbm9kZSwgZGVudHJ5LFxuLVx0XHRcdFx0XHRcdG1vZGUsIG9wZW5fZmxhZyBcdTAwMjYgT19FWENMKTtcbi1cdFx0aWYgKGVycm9yKVxuLVx0XHRcdGdvdG8gb3V0X2RwdXQ7XG4tXHR9XG4tXHRpZiAodW5saWtlbHkoY3JlYXRlX2Vycm9yKSBcdTAwMjZcdTAwMjYgIWRlbnRyeS1cdTAwM2VkX2lub2RlKSB7XG4rXHRpZiAodW5saWtlbHkoY3JlYXRlX2Vycm9yKSkge1xuK1x0XHQvKiBTaG91bGQgaGF2ZSBkb25lIGEgY3JlYXRlLCBidXQgd2UgYWxyZWFkeSBlcnJvcmVkICovXG4gXHRcdGVycm9yID0gY3JlYXRlX2Vycm9yO1xuIFx0XHRnb3RvIG91dF9kcHV0O1xuIFx0fVxuK1xuK1x0aWYgKChjcmVhdGVfZGlyIFx1MDAyNlx1MDAyNiAhZGlyX2lub2RlLVx1MDAzZWlfb3AtXHUwMDNlbWtkaXIpXG4rXHQgICAgfHwgKCFjcmVhdGVfZGlyIFx1MDAyNlx1MDAyNiAhZGlyX2lub2RlLVx1MDAzZWlfb3AtXHUwMDNlY3JlYXRlKSkge1xuK1x0XHRlcnJvciA9IC1FQUNDRVM7XG4rXHRcdGdvdG8gb3V0X2RwdXQ7XG4rXHR9XG4rXG4rXHRpZiAoY3JlYXRlX2Rpcikge1xuK1x0XHRzdHJ1Y3QgZGVudHJ5ICpyZXMgPSB2ZnNfbWtkaXJfbm9fcGVybShpZG1hcCwgZGlyX2lub2RlLCBkZW50cnksXG4rXHRcdFx0XHRcdFx0ICAgICAgIG1vZGUsIGRlbGVnYXRlZF9pbm9kZSk7XG4rXHRcdGlmIChJU19FUlIocmVzKSkge1xuK1x0XHRcdGVycm9yID0gUFRSX0VSUihyZXMpO1xuK1x0XHR9IGVsc2Uge1xuK1x0XHRcdGVycm9yID0gMDtcbitcdFx0XHRkZW50cnkgPSByZXM7XG4rXHRcdH1cbitcdH0gZWxzZSB7XG4rXHRcdGVycm9yID0gdmZzX2NyZWF0ZV9ub19wZXJtKGlkbWFwLCBkZW50cnksIG1vZGUsIGRlbGVnYXRlZF9pbm9kZSk7XG4rXHR9XG4rXHRpZiAoZXJyb3IpXG4rXHRcdGdvdG8gb3V0X2RwdXQ7XG4rXG4rXHRmaWxlLVx1MDAzZWZfbW9kZSB8PSBGTU9ERV9DUkVBVEVEO1xuK1xuIFx0cmV0dXJuIGRlbnRyeTtcbiBcbiBvdXRfZHB1dDpcbkBAIC00NTIxLDE3ICs0NjIxLDEyIEBAIHN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpsb29rdXBfb3BlbihzdHJ1Y3QgbmFtZWlkYXRhICpuZCwgc3RydWN0IGZpbGUgKmZpbGUsXG4gXHRyZXR1cm4gRVJSX1BUUihlcnJvcik7XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgYm9vbCB0cmFpbGluZ19zbGFzaGVzKHN0cnVjdCBuYW1laWRhdGEgKm5kKVxuLXtcbi1cdHJldHVybiAoYm9vbCluZC1cdTAwM2VsYXN0Lm5hbWVbbmQtXHUwMDNlbGFzdC5sZW5dO1xuLX1cbi1cbiBzdGF0aWMgc3RydWN0IGRlbnRyeSAqbG9va3VwX2Zhc3RfZm9yX29wZW4oc3RydWN0IG5hbWVpZGF0YSAqbmQsIGludCBvcGVuX2ZsYWcpXG4ge1xuIFx0c3RydWN0IGRlbnRyeSAqZGVudHJ5O1xuIFxuIFx0aWYgKG9wZW5fZmxhZyBcdTAwMjYgT19DUkVBVCkge1xuLVx0XHRpZiAodHJhaWxpbmdfc2xhc2hlcyhuZCkpXG4rXHRcdGlmICh0cmFpbGluZ19zbGFzaGVzKG5kLVx1MDAzZWxhc3QpIFx1MDAyNlx1MDAyNiAhKG9wZW5fZmxhZyBcdTAwMjYgT19ESVJFQ1RPUlkpKVxuIFx0XHRcdHJldHVybiBFUlJfUFRSKC1FSVNESVIpO1xuIFxuIFx0XHQvKiBEb24ndCBib3RoZXIgb24gYW4gT19FWENMIGNyZWF0ZSAqL1xuQEAgLTQ1MzksNyArNDYzNCw3IEBAIHN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpsb29rdXBfZmFzdF9mb3Jfb3BlbihzdHJ1Y3QgbmFtZWlkYXRhICpuZCwgaW50IG9wZW5fZmxhZylcbiBcdFx0XHRyZXR1cm4gTlVMTDtcbiBcdH1cbiBcbi1cdGlmICh0cmFpbGluZ19zbGFzaGVzKG5kKSlcbitcdGlmICh0cmFpbGluZ19zbGFzaGVzKG5kLVx1MDAzZWxhc3QpKVxuIFx0XHRuZC1cdTAwM2VmbGFncyB8PSBMT09LVVBfRk9MTE9XIHwgTE9PS1VQX0RJUkVDVE9SWTtcbiBcbiBcdGRlbnRyeSA9IGxvb2t1cF9mYXN0KG5kKTtcbkBAIC00NjAyLDE2ICs0Njk3LDEyIEBAIHN0YXRpYyBjb25zdCBjaGFyICpvcGVuX2xhc3RfbG9va3VwcyhzdHJ1Y3QgbmFtZWlkYXRhICpuZCxcbiBcdFx0ICovXG4gXHR9XG4gXHRpZiAob3Blbl9mbGFnIFx1MDAyNiBPX0NSRUFUKVxuLVx0XHRpbm9kZV9sb2NrKGRpci1cdTAwM2VkX2lub2RlKTtcbitcdFx0aW5vZGVfbG9ja19uZXN0ZWQoZGlyLVx1MDAzZWRfaW5vZGUsIElfTVVURVhfUEFSRU5UKTtcbiBcdGVsc2VcbiBcdFx0aW5vZGVfbG9ja19zaGFyZWQoZGlyLVx1MDAzZWRfaW5vZGUpO1xuK1xuIFx0ZGVudHJ5ID0gbG9va3VwX29wZW4obmQsIGZpbGUsIG9wLCBnb3Rfd3JpdGUsIFx1MDAyNmRlbGVnYXRlZF9pbm9kZSk7XG4tXHRpZiAoIUlTX0VSUihkZW50cnkpKSB7XG4tXHRcdGlmIChmaWxlLVx1MDAzZWZfbW9kZSBcdTAwMjYgRk1PREVfQ1JFQVRFRClcbi1cdFx0XHRmc25vdGlmeV9jcmVhdGUoZGlyLVx1MDAzZWRfaW5vZGUsIGRlbnRyeSk7XG4tXHRcdGlmIChmaWxlLVx1MDAzZWZfbW9kZSBcdTAwMjYgRk1PREVfT1BFTkVEKVxuLVx0XHRcdGZzbm90aWZ5X29wZW4oZmlsZSk7XG4tXHR9XG4rXG4gXHRpZiAob3Blbl9mbGFnIFx1MDAyNiBPX0NSRUFUKVxuIFx0XHRpbm9kZV91bmxvY2soZGlyLVx1MDAzZWRfaW5vZGUpO1xuIFx0ZWxzZVxuQEAgLTQ2NjksOCArNDc2MCw5IEBAIHN0YXRpYyBpbnQgZG9fb3BlbihzdHJ1Y3QgbmFtZWlkYXRhICpuZCxcbiBcdGlmIChvcGVuX2ZsYWcgXHUwMDI2IE9fQ1JFQVQpIHtcbiBcdFx0aWYgKChvcGVuX2ZsYWcgXHUwMDI2IE9fRVhDTCkgXHUwMDI2XHUwMDI2ICEoZmlsZS1cdTAwM2VmX21vZGUgXHUwMDI2IEZNT0RFX0NSRUFURUQpKVxuIFx0XHRcdHJldHVybiAtRUVYSVNUO1xuLVx0XHRpZiAoZF9pc19kaXIobmQtXHUwMDNlcGF0aC5kZW50cnkpKVxuK1x0XHRpZiAoIShvcGVuX2ZsYWcgXHUwMDI2IE9fRElSRUNUT1JZKSBcdTAwMjZcdTAwMjYgZF9pc19kaXIobmQtXHUwMDNlcGF0aC5kZW50cnkpKVxuIFx0XHRcdHJldHVybiAtRUlTRElSO1xuK1xuIFx0XHRlcnJvciA9IG1heV9jcmVhdGVfaW5fc3RpY2t5KGlkbWFwLCBuZCxcbiBcdFx0XHRcdFx0ICAgICBkX2JhY2tpbmdfaW5vZGUobmQtXHUwMDNlcGF0aC5kZW50cnkpKTtcbiBcdFx0aWYgKHVubGlrZWx5KGVycm9yKSlcbkBAIC00OTUwLDcgKzUwNDIsNyBAQCBzdGF0aWMgc3RydWN0IGRlbnRyeSAqZmlsZW5hbWVfY3JlYXRlKGludCBkZmQsIHN0cnVjdCBmaWxlbmFtZSAqbmFtZSxcbiBcdCAqIERvIHRoZSBmaW5hbCBsb29rdXAuICBTdXBwcmVzcyAnY3JlYXRlJyBpZiB0aGVyZSBpcyBhIHRyYWlsaW5nXG4gXHQgKiAnLycsIGFuZCBhIGRpcmVjdG9yeSB3YXNuJ3QgcmVxdWVzdGVkLlxuIFx0ICovXG4tXHRpZiAobGFzdC5uYW1lW2xhc3QubGVuXSBcdTAwMjZcdTAwMjYgIXdhbnRfZGlyKVxuK1x0aWYgKHRyYWlsaW5nX3NsYXNoZXMobGFzdCkgXHUwMDI2XHUwMDI2ICF3YW50X2RpcilcbiBcdFx0Y3JlYXRlX2ZsYWdzIFx1MDAyNj0gfkxPT0tVUF9DUkVBVEU7XG4gXHRkZW50cnkgPSBzdGFydF9kaXJvcChwYXRoLVx1MDAzZWRlbnRyeSwgXHUwMDI2bGFzdCwgcmV2YWxfZmxhZyB8IGNyZWF0ZV9mbGFncyk7XG4gXHRpZiAoSVNfRVJSKGRlbnRyeSkpXG5AQCAtNTA0NSwxMyArNTEzNywxMyBAQCBzdHJ1Y3QgZmlsZSAqZGVudHJ5X2NyZWF0ZShzdHJ1Y3QgcGF0aCAqcGF0aCwgaW50IGZsYWdzLCB1bW9kZV90IG1vZGUsXG4gXHRcdHBhdGgtXHUwMDNlZGVudHJ5ID0gZGlyO1xuIFx0XHRtb2RlID0gdmZzX3ByZXBhcmVfbW9kZShpZG1hcCwgZGlyX2lub2RlLCBtb2RlLCBTX0lBTExVR08sIFNfSUZSRUcpO1xuIFxuLVx0XHRjcmVhdGVfZXJyb3IgPSBtYXlfb19jcmVhdGUoaWRtYXAsIHBhdGgsIGRlbnRyeSwgbW9kZSk7XG4rXHRcdGNyZWF0ZV9lcnJvciA9IG1heV9vX2NyZWF0ZShpZG1hcCwgcGF0aCwgZGVudHJ5LCBtb2RlLCAvKmNyZWF0ZV9kaXI9Ki8gZmFsc2UpO1xuIFx0XHRpZiAoY3JlYXRlX2Vycm9yKVxuIFx0XHRcdGZsYWdzIFx1MDAyNj0gfk9fQ1JFQVQ7XG4gXG4gXHRcdC8qIGF0b21pY19vcGVuIHdpbGwgZHB1dChkZW50cnkpIG9uIGVycm9yICovXG4gXHRcdGRnZXQob3JpZ19kZW50cnkpO1xuLVx0XHRkZW50cnkgPSBhdG9taWNfb3BlbihwYXRoLCBkZW50cnksIGZpbGUsIGZsYWdzLCBtb2RlKTtcbitcdFx0ZGVudHJ5ID0gYXRvbWljX29wZW4ocGF0aCwgZGVudHJ5LCBmaWxlLCBmbGFncywgbW9kZSwgY3JlYXRlX2Vycm9yKTtcbiBcdFx0ZXJyb3IgPSBQVFJfRVJSX09SX1pFUk8oZGVudHJ5KTtcbiBcbiBcdFx0aWYgKElTX0VSUihkZW50cnkpKVxuQEAgLTUwNjQsMTMgKzUxNTYsNiBAQCBzdHJ1Y3QgZmlsZSAqZGVudHJ5X2NyZWF0ZShzdHJ1Y3QgcGF0aCAqcGF0aCwgaW50IGZsYWdzLCB1bW9kZV90IG1vZGUsXG4gXHRcdGlmICh1bmxpa2VseShjcmVhdGVfZXJyb3IpIFx1MDAyNlx1MDAyNiBlcnJvciA9PSAtRU5PRU5UKVxuIFx0XHRcdGVycm9yID0gY3JlYXRlX2Vycm9yO1xuIFxuLVx0XHRpZiAoIWVycm9yKSB7XG4tXHRcdFx0aWYgKGZpbGUtXHUwMDNlZl9tb2RlIFx1MDAyNiBGTU9ERV9DUkVBVEVEKVxuLVx0XHRcdFx0ZnNub3RpZnlfY3JlYXRlKGRpci1cdTAwM2VkX2lub2RlLCBkZW50cnkpO1xuLVx0XHRcdGlmIChmaWxlLVx1MDAzZWZfbW9kZSBcdTAwMjYgRk1PREVfT1BFTkVEKVxuLVx0XHRcdFx0ZnNub3RpZnlfb3BlbihmaWxlKTtcbi1cdFx0fVxuLVxuIFx0XHRwYXRoLVx1MDAzZWRlbnRyeSA9IGRlbnRyeTtcbiBcbiBcdH0gZWxzZSB7XG5AQCAtNTIyMiw2ICs1MzA3LDM5IEBAIFNZU0NBTExfREVGSU5FMyhta25vZCwgY29uc3QgY2hhciBfX3VzZXIgKiwgZmlsZW5hbWUsIHVtb2RlX3QsIG1vZGUsIHVuc2lnbmVkLCBkXG4gXHRyZXR1cm4gZmlsZW5hbWVfbWtub2RhdChBVF9GRENXRCwgbmFtZSwgbW9kZSwgZGV2KTtcbiB9XG4gXG4rc3RhdGljIGlubGluZVxuK3N0cnVjdCBkZW50cnkgKnZmc19ta2Rpcl9ub19wZXJtKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbitcdFx0XHRcdCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSxcbitcdFx0XHRcdCBzdHJ1Y3QgZGVsZWdhdGVkX2lub2RlICpkaSlcbit7XG4rXHRpbnQgZXJyb3I7XG4rXHRzdHJ1Y3QgZGVudHJ5ICpkZTtcbitcdHVuc2lnbmVkIG1heF9saW5rcyA9IGRpci1cdTAwM2VpX3NiLVx1MDAzZXNfbWF4X2xpbmtzO1xuK1xuK1x0ZXJyb3IgPSAtRU1MSU5LO1xuK1x0aWYgKG1heF9saW5rcyBcdTAwMjZcdTAwMjYgZGlyLVx1MDAzZWlfbmxpbmsgXHUwMDNlPSBtYXhfbGlua3MpXG4rXHRcdGdvdG8gZXJyO1xuK1xuK1x0ZXJyb3IgPSB0cnlfYnJlYWtfZGVsZWcoZGlyLCBMRUFTRV9CUkVBS19ESVJfQ1JFQVRFLCBkaSk7XG4rXHRpZiAoZXJyb3IpXG4rXHRcdGdvdG8gZXJyO1xuK1xuK1x0ZGUgPSBkaXItXHUwMDNlaV9vcC1cdTAwM2Vta2RpcihpZG1hcCwgZGlyLCBkZW50cnksIG1vZGUpO1xuK1x0aWYgKElTX0VSUihkZSkpIHtcbitcdFx0ZXJyb3IgPSBQVFJfRVJSKGRlKTtcbitcdFx0Z290byBlcnI7XG4rXHR9XG4rXHRpZiAoZGUpIHtcbitcdFx0ZHB1dChkZW50cnkpO1xuK1x0XHRkZW50cnkgPSBkZTtcbitcdH1cbitcdGZzbm90aWZ5X21rZGlyKGRpciwgZGVudHJ5KTtcbitcdHJldHVybiBkZW50cnk7XG4rXG4rZXJyOlxuK1x0cmV0dXJuIEVSUl9QVFIoZXJyb3IpO1xuK31cbitcbiAvKipcbiAgKiB2ZnNfbWtkaXIgLSBjcmVhdGUgZGlyZWN0b3J5IHJldHVybmluZyBjb3JyZWN0IGRlbnRyeSBpZiBwb3NzaWJsZVxuICAqIEBpZG1hcDpcdFx0aWRtYXAgb2YgdGhlIG1vdW50IHRoZSBpbm9kZSB3YXMgZm91bmQgZnJvbVxuQEAgLTUyNDksNyArNTM2Nyw2IEBAIHN0cnVjdCBkZW50cnkgKnZmc19ta2RpcihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXG4gXHRcdFx0IHN0cnVjdCBkZWxlZ2F0ZWRfaW5vZGUgKmRlbGVnYXRlZF9pbm9kZSlcbiB7XG4gXHRpbnQgZXJyb3I7XG4tXHR1bnNpZ25lZCBtYXhfbGlua3MgPSBkaXItXHUwMDNlaV9zYi1cdTAwM2VzX21heF9saW5rcztcbiBcdHN0cnVjdCBkZW50cnkgKmRlO1xuIFxuIFx0ZXJyb3IgPSBtYXlfY3JlYXRlX2RlbnRyeShpZG1hcCwgZGlyLCBkZW50cnkpO1xuQEAgLTUyNjUsMjQgKzUzODIsMTIgQEAgc3RydWN0IGRlbnRyeSAqdmZzX21rZGlyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbiBcdGlmIChlcnJvcilcbiBcdFx0Z290byBlcnI7XG4gXG4tXHRlcnJvciA9IC1FTUxJTks7XG4tXHRpZiAobWF4X2xpbmtzIFx1MDAyNlx1MDAyNiBkaXItXHUwMDNlaV9ubGluayBcdTAwM2U9IG1heF9saW5rcylcbi1cdFx0Z290byBlcnI7XG4tXG4tXHRlcnJvciA9IHRyeV9icmVha19kZWxlZyhkaXIsIExFQVNFX0JSRUFLX0RJUl9DUkVBVEUsIGRlbGVnYXRlZF9pbm9kZSk7XG4tXHRpZiAoZXJyb3IpXG4tXHRcdGdvdG8gZXJyO1xuLVxuLVx0ZGUgPSBkaXItXHUwMDNlaV9vcC1cdTAwM2Vta2RpcihpZG1hcCwgZGlyLCBkZW50cnksIG1vZGUpO1xuLVx0ZXJyb3IgPSBQVFJfRVJSKGRlKTtcbi1cdGlmIChJU19FUlIoZGUpKVxuK1x0ZGUgPSB2ZnNfbWtkaXJfbm9fcGVybShpZG1hcCwgZGlyLCBkZW50cnksIG1vZGUsIGRlbGVnYXRlZF9pbm9kZSk7XG4rXHRpZiAoSVNfRVJSKGRlKSkge1xuK1x0XHRlcnJvciA9IFBUUl9FUlIoZGUpO1xuIFx0XHRnb3RvIGVycjtcbi1cdGlmIChkZSkge1xuLVx0XHRkcHV0KGRlbnRyeSk7XG4tXHRcdGRlbnRyeSA9IGRlO1xuIFx0fVxuLVx0ZnNub3RpZnlfbWtkaXIoZGlyLCBkZW50cnkpO1xuLVx0cmV0dXJuIGRlbnRyeTtcbitcdHJldHVybiBkZTtcbiBcbiBlcnI6XG4gXHRlbmRfY3JlYXRpbmcoZGVudHJ5KTtcbkBAIC01NTY5LDcgKzU2NzQsNyBAQCBpbnQgZmlsZW5hbWVfdW5saW5rYXQoaW50IGRmZCwgc3RydWN0IGZpbGVuYW1lICpuYW1lKVxuIFx0XHRnb3RvIGV4aXRfZHJvcF93cml0ZTtcbiBcbiBcdC8qIFdoeSBub3QgYmVmb3JlPyBCZWNhdXNlIHdlIHdhbnQgY29ycmVjdCBlcnJvciB2YWx1ZSAqL1xuLVx0aWYgKHVubGlrZWx5KGxhc3QubmFtZVtsYXN0Lmxlbl0pKSB7XG4rXHRpZiAodW5saWtlbHkodHJhaWxpbmdfc2xhc2hlcyhsYXN0KSkpIHtcbiBcdFx0aWYgKGRfaXNfZGlyKGRlbnRyeSkpXG4gXHRcdFx0ZXJyb3IgPSAtRUlTRElSO1xuIFx0XHRlbHNlXG5AQCAtNjE3MSwxNiArNjI3NiwxNiBAQCBpbnQgZmlsZW5hbWVfcmVuYW1lYXQyKGludCBvbGRkZmQsIHN0cnVjdCBmaWxlbmFtZSAqZnJvbSxcbiBcdGlmIChmbGFncyBcdTAwMjYgUkVOQU1FX0VYQ0hBTkdFKSB7XG4gXHRcdGlmICghZF9pc19kaXIocmQubmV3X2RlbnRyeSkpIHtcbiBcdFx0XHRlcnJvciA9IC1FTk9URElSO1xuLVx0XHRcdGlmIChuZXdfbGFzdC5uYW1lW25ld19sYXN0Lmxlbl0pXG4rXHRcdFx0aWYgKHRyYWlsaW5nX3NsYXNoZXMobmV3X2xhc3QpKVxuIFx0XHRcdFx0Z290byBleGl0X3VubG9jaztcbiBcdFx0fVxuIFx0fVxuIFx0LyogdW5sZXNzIHRoZSBzb3VyY2UgaXMgYSBkaXJlY3RvcnkgdHJhaWxpbmcgc2xhc2hlcyBnaXZlIC1FTk9URElSICovXG4gXHRpZiAoIWRfaXNfZGlyKHJkLm9sZF9kZW50cnkpKSB7XG4gXHRcdGVycm9yID0gLUVOT1RESVI7XG4tXHRcdGlmIChvbGRfbGFzdC5uYW1lW29sZF9sYXN0Lmxlbl0pXG4rXHRcdGlmICh0cmFpbGluZ19zbGFzaGVzKG9sZF9sYXN0KSlcbiBcdFx0XHRnb3RvIGV4aXRfdW5sb2NrO1xuLVx0XHRpZiAoIShmbGFncyBcdTAwMjYgUkVOQU1FX0VYQ0hBTkdFKSBcdTAwMjZcdTAwMjYgbmV3X2xhc3QubmFtZVtuZXdfbGFzdC5sZW5dKVxuK1x0XHRpZiAoIShmbGFncyBcdTAwMjYgUkVOQU1FX0VYQ0hBTkdFKSBcdTAwMjZcdTAwMjYgdHJhaWxpbmdfc2xhc2hlcyhuZXdfbGFzdCkpXG4gXHRcdFx0Z290byBleGl0X3VubG9jaztcbiBcdH1cbiBcbmRpZmYgLS1naXQgYS9mcy9uZnMvZGlyLmMgYi9mcy9uZnMvZGlyLmNcbmluZGV4IGM3YjcyM2MxODYyMGM5Li5jODE1ZDlhYTliNjlkYSAxMDA2NDRcbi0tLSBhL2ZzL25mcy9kaXIuY1xuKysrIGIvZnMvbmZzL2Rpci5jXG5AQCAtMjEyMSw2ICsyMTIxLDkgQEAgaW50IG5mc19hdG9taWNfb3BlbihzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxuIFx0ZGZwcmludGsoVkZTLCBcIk5GUzogYXRvbWljX29wZW4oJXMvJWxsdSksICVwZFxcblwiLFxuIFx0XHRcdGRpci1cdTAwM2VpX3NiLVx1MDAzZXNfaWQsIGRpci1cdTAwM2VpX2lubywgZGVudHJ5KTtcbiBcbitcdGlmIChPX0lTX01LRElSKG9wZW5fZmxhZ3MpKVxuK1x0XHRvcGVuX2ZsYWdzIFx1MDAyNj0gfk9fQ1JFQVQ7XG4rXG4gXHRlcnIgPSBuZnNfY2hlY2tfZmxhZ3Mob3Blbl9mbGFncyk7XG4gXHRpZiAoZXJyKVxuIFx0XHRyZXR1cm4gZXJyO1xuQEAgLTIzMTMsNiArMjMxNiw5IEBAIGludCBuZnNfYXRvbWljX29wZW5fdjIzKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXG4gXHQgKi9cbiBcdGludCBlcnJvciA9IDA7XG4gXG4rXHRpZiAoT19JU19NS0RJUihvcGVuX2ZsYWdzKSlcbitcdFx0b3Blbl9mbGFncyBcdTAwMjY9IH5PX0NSRUFUO1xuK1xuIFx0aWYgKGRlbnRyeS1cdTAwM2VkX25hbWUubGVuIFx1MDAzZSBORlNfU0VSVkVSKGRpciktXHUwMDNlbmFtZWxlbilcbiBcdFx0cmV0dXJuIC1FTkFNRVRPT0xPTkc7XG4gXG5kaWZmIC0tZ2l0IGEvZnMvb3Blbi5jIGIvZnMvb3Blbi5jXG5pbmRleCA0MDg5MjVkN2JkMGI3Ny4uODdlODg2NGQ5NDgwODcgMTAwNjQ0XG4tLS0gYS9mcy9vcGVuLmNcbisrKyBiL2ZzL29wZW4uY1xuQEAgLTExOTAsMjkgKzExOTAsMzAgQEAgaW5saW5lIGludCBidWlsZF9vcGVuX2ZsYWdzKGNvbnN0IHN0cnVjdCBvcGVuX2hvdyAqaG93LCBzdHJ1Y3Qgb3Blbl9mbGFncyAqb3ApXG4gXHRpZiAoV0lMTF9DUkVBVEUoZmxhZ3MpKSB7XG4gXHRcdGlmIChob3ctXHUwMDNlbW9kZSBcdTAwMjYgflNfSUFMTFVHTylcbiBcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbi1cdFx0b3AtXHUwMDNlbW9kZSA9IGhvdy1cdTAwM2Vtb2RlIHwgU19JRlJFRztcbitcdFx0aWYgKE9fSVNfTUtESVIoZmxhZ3MpKVxuK1x0XHRcdG9wLVx1MDAzZW1vZGUgPSBob3ctXHUwMDNlbW9kZSB8IFNfSUZESVI7XG4rXHRcdGVsc2VcbitcdFx0XHRvcC1cdTAwM2Vtb2RlID0gaG93LVx1MDAzZW1vZGUgfCBTX0lGUkVHO1xuIFx0fSBlbHNlIHtcbiBcdFx0aWYgKGhvdy1cdTAwM2Vtb2RlICE9IDApXG4gXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHRcdG9wLVx1MDAzZW1vZGUgPSAwO1xuIFx0fVxuIFxuLVx0Lypcbi1cdCAqIEJsb2NrIGJ1Z3Mgd2hlcmUgT19ESVJFQ1RPUlkgfCBPX0NSRUFUIGNyZWF0ZWQgcmVndWxhciBmaWxlcy5cbi1cdCAqIE5vdGUsIHRoYXQgYmxvY2tpbmcgT19ESVJFQ1RPUlkgfCBPX0NSRUFUIGhlcmUgYWxzbyBwcm90ZWN0c1xuLVx0ICogT19UTVBGSUxFIGJlbG93IHdoaWNoIHJlcXVpcmVzIE9fRElSRUNUT1JZIGJlaW5nIHJhaXNlZC5cbi1cdCAqL1xuLVx0aWYgKChmbGFncyBcdTAwMjYgKE9fRElSRUNUT1JZIHwgT19DUkVBVCkpID09IChPX0RJUkVDVE9SWSB8IE9fQ1JFQVQpKVxuLVx0XHRyZXR1cm4gLUVJTlZBTDtcbi1cbiBcdC8qIE5vdyBoYW5kbGUgdGhlIGNyZWF0aXZlIGltcGxlbWVudGF0aW9uIG9mIE9fVE1QRklMRS4gKi9cbiBcdGlmIChmbGFncyBcdTAwMjYgX19PX1RNUEZJTEUpIHtcbiBcdFx0LypcbiBcdFx0ICogSW4gb3JkZXIgdG8gZW5zdXJlIHByb2dyYW1zIGdldCBleHBsaWNpdCBlcnJvcnMgd2hlbiB0cnlpbmdcbiBcdFx0ICogdG8gdXNlIE9fVE1QRklMRSBvbiBvbGQga2VybmVscyB3ZSBlbmZvcmNlIHRoYXQgT19ESVJFQ1RPUllcbi1cdFx0ICogaXMgcmFpc2VkIGFsb25nc2lkZSBfX09fVE1QRklMRS5cbitcdFx0ICogaXMgcmFpc2VkIGFsb25nc2lkZSBfX09fVE1QRklMRSwgYnV0IHdpdGhvdXQgT19DUkVBVC4gVGhlXG4rXHRcdCAqIHJlYXNvbiBmb3IgZGlzYWxsb3dpbmcgT19DUkVBVHxPX1RNUEZJTEUgaXMgdGhhdFxuK1x0XHQgKiBPX0RJUkVDVE9SWXxPX0NSRUFUIHVzZWQgdG8gd29yayBhbmQgY3JlYXRlZCBhIHJlZ3VsYXIgZmlsZVxuK1x0XHQgKiBpZiBub3RoaW5nIGV4aXN0ZWQgYXQgdGhlIG9wZW4gcGF0aC4gSGVuY2UsIGFsbG93aW5nIHRoZVxuK1x0XHQgKiBjb21iaW5hdGlvbiB3b3VsZCBoYXZlIGNhdXNlZCBPX0NSRUFUfE9fVE1QRklMRSB0byBjcmVhdGUgYVxuK1x0XHQgKiByZWd1bGFyIChub24tdGVtcG9yYXJ5KSBmaWxlIG9uIG9sZCBrZXJuZWxzLCB3aGlsZSB0aGUgY2FsbGVyXG4rXHRcdCAqIHdvdWxkIGJlbGlldmUgdGhleSBjcmVhdGVkIGFuIGFjdHVhbCBPX1RNUEZJTEUuXG4gXHRcdCAqL1xuLVx0XHRpZiAoIShmbGFncyBcdTAwMjYgT19ESVJFQ1RPUlkpKVxuK1x0XHRpZiAoIShmbGFncyBcdTAwMjYgT19ESVJFQ1RPUlkpIHx8IChmbGFncyBcdTAwMjYgT19DUkVBVCkpXG4gXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHRcdGlmICghKGFjY19tb2RlIFx1MDAyNiBNQVlfV1JJVEUpKVxuIFx0XHRcdHJldHVybiAtRUlOVkFMO1xuQEAgLTEyNjksNiArMTI3MCwxNSBAQCBpbmxpbmUgaW50IGJ1aWxkX29wZW5fZmxhZ3MoY29uc3Qgc3RydWN0IG9wZW5faG93ICpob3csIHN0cnVjdCBvcGVuX2ZsYWdzICpvcClcbiBcbiBcdG9wLVx1MDAzZWludGVudCA9IGZsYWdzIFx1MDAyNiBPX1BBVEggPyAwIDogTE9PS1VQX09QRU47XG4gXG4rXHQvKlxuK1x0ICogUmVxdWVzdGluZyB3cml0ZSBhY2Nlc3Mgb24gYSBkaXJlY3RvcnkgY2FuIG5ldmVyIHN1Y2NlZWQuIFJhdGhlclxuK1x0ICogdGhhbiBwZXJmb3JtaW5nIGEgcGF0aC13YWxrIHRvIGRldGVybWluZSB3aGV0aGVyIHRoZSB0YXJnZXQgaXNcbitcdCAqIGFjdHVhbGx5IGEgZGlyZWN0b3J5ICgtRUlTRElSKSBvciBub3QgKC1FTk9URElSKSwgd2Ugc2hvcnQtY2lyY3VpdFxuK1x0ICogdG8gLUVOT1RESVIuXG4rXHQgKi9cbitcdGlmICgoZmxhZ3MgXHUwMDI2IE9fRElSRUNUT1JZKSBcdTAwMjZcdTAwMjYgIShmbGFncyBcdTAwMjYgX19PX1RNUEZJTEUpIFx1MDAyNlx1MDAyNiAoYWNjX21vZGUgXHUwMDI2IE1BWV9XUklURSkpXG4rXHRcdHJldHVybiAtRU5PVERJUjtcbitcbiBcdGlmIChmbGFncyBcdTAwMjYgT19DUkVBVCkge1xuIFx0XHRvcC1cdTAwM2VpbnRlbnQgfD0gTE9PS1VQX0NSRUFURTtcbiBcdFx0aWYgKGZsYWdzIFx1MDAyNiBPX0VYQ0wpIHtcbmRpZmYgLS1naXQgYS9mcy9zbWIvY2xpZW50L2Rpci5jIGIvZnMvc21iL2NsaWVudC9kaXIuY1xuaW5kZXggODhhNGExNzg3ZmYwNDcuLjc1YmY4NmNjMDYxMjJlIDEwMDY0NFxuLS0tIGEvZnMvc21iL2NsaWVudC9kaXIuY1xuKysrIGIvZnMvc21iL2NsaWVudC9kaXIuY1xuQEAgLTUzOCw2ICs1MzgsOSBAQCBpbnQgY2lmc19hdG9taWNfb3BlbihzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGlyZW50cnksXG4gXHRpZiAodW5saWtlbHkoY2lmc19mb3JjZWRfc2h1dGRvd24oY2lmc19zYikpKVxuIFx0XHRyZXR1cm4gc21iX0VJTyhzbWJfZWlvX3RyYWNlX2ZvcmNlZF9zaHV0ZG93bik7XG4gXG4rXHRpZiAoT19JU19NS0RJUihvZmxhZ3MpKVxuK1x0XHRvZmxhZ3MgXHUwMDI2PSB+T19DUkVBVDtcbitcbiBcdC8qXG4gXHQgKiBQb3NpeCBvcGVuIGlzIG9ubHkgY2FsbGVkIChhdCBsb29rdXAgdGltZSkgZm9yIGZpbGUgY3JlYXRlIG5vdy4gRm9yXG4gXHQgKiBvcGVucyAocmF0aGVyIHRoYW4gY3JlYXRlcyksIGJlY2F1c2Ugd2UgZG8gbm90IGtub3cgaWYgaXQgaXMgYSBmaWxlXG5kaWZmIC0tZ2l0IGEvZnMvdmJveHNmL2Rpci5jIGIvZnMvdmJveHNmL2Rpci5jXG5pbmRleCBjNWJkMzI3MWFhOTYxNi4uNzdhZTJmNjk2ZmQ0MzcgMTAwNjQ0XG4tLS0gYS9mcy92Ym94c2YvZGlyLmNcbisrKyBiL2ZzL3Zib3hzZi9kaXIuY1xuQEAgLTMxOCw2ICszMTgsOSBAQCBzdGF0aWMgaW50IHZib3hzZl9kaXJfYXRvbWljX29wZW4oc3RydWN0IGlub2RlICpwYXJlbnQsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcbiBcdHU2NCBoYW5kbGU7XG4gXHRpbnQgZXJyO1xuIFxuK1x0aWYgKE9fSVNfTUtESVIoZmxhZ3MpKVxuK1x0XHRmbGFncyBcdTAwMjY9IH5PX0NSRUFUO1xuK1xuIFx0aWYgKGRfaW5fbG9va3VwKGRlbnRyeSkpIHtcbiBcdFx0c3RydWN0IGRlbnRyeSAqcmVzID0gdmJveHNmX2Rpcl9sb29rdXAocGFyZW50LCBkZW50cnksIDApO1xuIFx0XHRpZiAocmVzIHx8IGRfcmVhbGx5X2lzX3Bvc2l0aXZlKGRlbnRyeSkpXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9mY250bC5oIGIvaW5jbHVkZS9saW51eC9mY250bC5oXG5pbmRleCA2YWQ2YjllN2EyMjZhZi4uNmI3NTI3N2JlNTU5ZGQgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2ZjbnRsLmhcbisrKyBiL2luY2x1ZGUvbGludXgvZmNudGwuaFxuQEAgLTMwLDYgKzMwLDEyIEBAXG4gICovXG4gI2RlZmluZSBfX09fUkVHVUxBUlx0XHQoMSBcdTAwM2NcdTAwM2MgMzApXG4gXG4rI2RlZmluZSBPX01LRElSX01BU0tcdChPX0NSRUFUIHwgT19ESVJFQ1RPUlkpXG4rc3RhdGljIGlubGluZSBib29sIE9fSVNfTUtESVIodW5zaWduZWQgZmxhZ3MpXG4re1xuK1x0cmV0dXJuIChmbGFncyBcdTAwMjYgT19NS0RJUl9NQVNLKSA9PSBPX01LRElSX01BU0s7XG4rfVxuK1xuIC8qIExpc3Qgb2YgYWxsIHZhbGlkIGZsYWdzIGZvciB0aGUgaG93LVx1MDAzZXJlc29sdmUgYXJndW1lbnQ6ICovXG4gI2RlZmluZSBWQUxJRF9SRVNPTFZFX0ZMQUdTIFxcXG4gXHQoUkVTT0xWRV9OT19YREVWIHwgUkVTT0xWRV9OT19NQUdJQ0xJTktTIHwgUkVTT0xWRV9OT19TWU1MSU5LUyB8IFxcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZmlsZXN5c3RlbXMvLmdpdGlnbm9yZSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2ZpbGVzeXN0ZW1zLy5naXRpZ25vcmVcbmluZGV4IGE3OGY4OTQxNTdkZTMzLi5kNzc5YTc5NDVjZjgwMyAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2ZpbGVzeXN0ZW1zLy5naXRpZ25vcmVcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2ZpbGVzeXN0ZW1zLy5naXRpZ25vcmVcbkBAIC0xLDQgKzEsNSBAQFxuICMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuK29wZW5fb19jcmVhdF9vX2RpclxuIGRub3RpZnlfdGVzdFxuIGRldnB0c19wdHNcbiBmY2xvZ1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2ZpbGVzeXN0ZW1zL01ha2VmaWxlIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZmlsZXN5c3RlbXMvTWFrZWZpbGVcbmluZGV4IGE3ZWMyYmEyZGQ4MzM0Li5iNjA5NTBmOGIxNWMyMSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2ZpbGVzeXN0ZW1zL01ha2VmaWxlXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9maWxlc3lzdGVtcy9NYWtlZmlsZVxuQEAgLTEsNyArMSw3IEBAXG4gIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuIFxuIENGTEFHUyArPSAkKEtIRFJfSU5DTFVERVMpXG4tVEVTVF9HRU5fUFJPR1MgOj0gZGV2cHRzX3B0cyBmaWxlX3N0cmVzc29yIGFub25faW5vZGVfdGVzdCBrZXJuZnNfdGVzdCBmY2xvZ1xuK1RFU1RfR0VOX1BST0dTIDo9IG9wZW5fb19jcmVhdF9vX2RpciBkZXZwdHNfcHRzIGZpbGVfc3RyZXNzb3IgYW5vbl9pbm9kZV90ZXN0IGtlcm5mc190ZXN0IGZjbG9nXG4gVEVTVF9HRU5fUFJPR1MgKz0gaWRtYXBwZWRfdG1wZmlsZVxuIFRFU1RfR0VOX1BST0dTX0VYVEVOREVEIDo9IGRub3RpZnlfdGVzdFxuIFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2ZpbGVzeXN0ZW1zL2ZjbG9nLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9maWxlc3lzdGVtcy9mY2xvZy5jXG5pbmRleCA1NTFjNGEwZjM5NWExMi4uNTkzYTUxMzZlOTkxOTIgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9maWxlc3lzdGVtcy9mY2xvZy5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9maWxlc3lzdGVtcy9mY2xvZy5jXG5AQCAtNiwxMCArNiw4IEBAXG4gXG4gI2luY2x1ZGUgXHUwMDNjYXNzZXJ0LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NlcnJuby5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjZmNudGwuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY3NjaGVkLmhcdTAwM2Vcbi0jaW5jbHVkZSBcdTAwM2NzdGRpby5oXHUwMDNlXG4tI2luY2x1ZGUgXHUwMDNjc3RkbGliLmhcdTAwM2Vcbi0jaW5jbHVkZSBcdTAwM2NzdHJpbmcuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY3VuaXN0ZC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjc3lzL21vdW50LmhcdTAwM2VcbiBcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9maWxlc3lzdGVtcy9vcGVuX29fY3JlYXRfb19kaXIuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2ZpbGVzeXN0ZW1zL29wZW5fb19jcmVhdF9vX2Rpci5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLmRmM2NkYmFlMmM4NTI0XG4tLS0gL2Rldi9udWxsXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9maWxlc3lzdGVtcy9vcGVuX29fY3JlYXRfb19kaXIuY1xuQEAgLTAsMCArMSwxOTcgQEBcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuKyNpbmNsdWRlIFx1MDAzY3N5cy9zdGF0LmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NzeXMvc3lzY2FsbC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjZXJybm8uaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbWl0cy5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjZmNudGwuaFx1MDAzZVxuK1xuKyNpbmNsdWRlIFwia3NlbGZ0ZXN0X2hhcm5lc3MuaFwiXG4rXG4rc3RhdGljIGlubGluZSBpbnQgb3Blbl9vX2NyZWF0X29fZGlyKGludCBkZmQsIGNvbnN0IGNoYXIgKnBhdGhuYW1lLFxuK1x0XHRcdFx0ICAgICBtb2RlX3QgbW9kZSwgdW5zaWduZWQgaW50IGZsYWdzKVxuK3tcbitcdHJldHVybiBzeXNjYWxsKF9fTlJfb3BlbmF0LCBkZmQsIHBhdGhuYW1lLFxuK1x0XHQgICAgICAgZmxhZ3MgfCBPX0RJUkVDVE9SWSB8IE9fQ1JFQVQsIG1vZGUpO1xuK31cbitcbisjZGVmaW5lIG9wZW5fb19jcmVhdF9vX2Rpcl9jaGVja2VkX2ZsYWdzKGRmZCwgcGF0aG5hbWUsIGZsYWdzKSAoe1x0XFxcbitcdHN0cnVjdCBzdGF0IF9fc3Q7XHRcdFx0XHRcdFx0XFxcbitcdGludCBfX2ZkID0gb3Blbl9vX2NyZWF0X29fZGlyKGRmZCwgcGF0aG5hbWUsIFNfSVJXWFUsIGZsYWdzKTtcdFxcXG4rXHRBU1NFUlRfR0UoX19mZCwgMCk7XHRcdFx0XHRcdFx0XFxcbitcdEFTU0VSVF9FUShmc3RhdChfX2ZkLCBcdTAwMjZfX3N0KSwgMCk7XHRcdFx0XHRcXFxuK1x0RVhQRUNUX1RSVUUoU19JU0RJUihfX3N0LnN0X21vZGUpKTtcdFx0XHRcdFxcXG4rXHRfX2ZkO1x0XHRcdFx0XHRcdFx0XHRcXFxuK30pXG4rXG4rI2RlZmluZSBvcGVuX29fY3JlYXRfb19kaXJfY2hlY2tlZChkZmQsIHBhdGhuYW1lKSBcXFxuK1x0b3Blbl9vX2NyZWF0X29fZGlyX2NoZWNrZWRfZmxhZ3MoZGZkLCBwYXRobmFtZSwgMClcbitcbitGSVhUVVJFKG9wZW5fb19jcmVhdF9vX2Rpcikge1xuK1x0Y2hhciBkaXJwYXRoW1BBVEhfTUFYXTtcbitcdGludCBkZmQ7XG4rfTtcbitcbitGSVhUVVJFX1NFVFVQKG9wZW5fb19jcmVhdF9vX2Rpcilcbit7XG4rXHRzdHJjcHkoc2VsZi1cdTAwM2VkaXJwYXRoLCBcIi90bXAvb3Blbl9vX2NyZWF0X29fZGlyX3Rlc3QuWFhYWFhYXCIpO1xuK1x0QVNTRVJUX05FKG1rZHRlbXAoc2VsZi1cdTAwM2VkaXJwYXRoKSwgTlVMTCk7XG4rXHRzZWxmLVx1MDAzZWRmZCA9IG9wZW4oc2VsZi1cdTAwM2VkaXJwYXRoLCBPX0RJUkVDVE9SWSk7XG4rXHRBU1NFUlRfR0Uoc2VsZi1cdTAwM2VkZmQsIDApO1xuK31cbitcbitGSVhUVVJFX1RFQVJET1dOKG9wZW5fb19jcmVhdF9vX2Rpcilcbit7XG4rXHRjbG9zZShzZWxmLVx1MDAzZWRmZCk7XG4rXHRybWRpcihzZWxmLVx1MDAzZWRpcnBhdGgpO1xuK31cbitcbisvKiBEb2VzIG9wZW5fb19jcmVhdF9vX2RpciByZXR1cm4gYSBmZCBhdCBhbGw/ICovXG4rVEVTVF9GKG9wZW5fb19jcmVhdF9vX2RpciwgcmV0dXJuc19mZClcbit7XG4rXHRpbnQgZmQgPSBvcGVuX29fY3JlYXRfb19kaXJfY2hlY2tlZChzZWxmLVx1MDAzZWRmZCwgXCJuZXdkaXJcIik7XG4rXHRFWFBFQ1RfRVEoY2xvc2UoZmQpLCAwKTtcbitcdEVYUEVDVF9FUSh1bmxpbmthdChzZWxmLVx1MDAzZWRmZCwgXCJuZXdkaXJcIiwgQVRfUkVNT1ZFRElSKSwgMCk7XG4rfVxuK1xuKy8qIFRoZSBmZCBtdXN0IHJlZmVyIHRvIHRoZSBkaXJlY3RvcnkgdGhhdCB3YXMganVzdCBjcmVhdGVkLiAqL1xuK1RFU1RfRihvcGVuX29fY3JlYXRfb19kaXIsIGZkX2lzX2NyZWF0ZWRfZGlyKVxuK3tcbitcdGludCBmZDtcbitcdHN0cnVjdCBzdGF0IHN0X3ZpYV9mZCwgc3RfdmlhX3BhdGg7XG4rXHRjaGFyIHBhdGhbUEFUSF9NQVhdO1xuK1xuK1x0ZmQgPSBvcGVuX29fY3JlYXRfb19kaXJfY2hlY2tlZChzZWxmLVx1MDAzZWRmZCwgXCJjaGVja2RpclwiKTtcbitcbitcdEFTU0VSVF9FUShmc3RhdChmZCwgXHUwMDI2c3RfdmlhX2ZkKSwgMCk7XG4rXG4rXHRzbnByaW50ZihwYXRoLCBzaXplb2YocGF0aCksIFwiJXMvY2hlY2tkaXJcIiwgc2VsZi1cdTAwM2VkaXJwYXRoKTtcbitcdEFTU0VSVF9FUShzdGF0KHBhdGgsIFx1MDAyNnN0X3ZpYV9wYXRoKSwgMCk7XG4rXG4rXHRFWFBFQ1RfRVEoc3RfdmlhX2ZkLnN0X2lubywgc3RfdmlhX3BhdGguc3RfaW5vKTtcbitcdEVYUEVDVF9FUShzdF92aWFfZmQuc3RfZGV2LCBzdF92aWFfcGF0aC5zdF9kZXYpO1xuK1xuK1x0RVhQRUNUX0VRKGNsb3NlKGZkKSwgMCk7XG4rXHRFWFBFQ1RfRVEocm1kaXIocGF0aCksIDApO1xuK31cbitcbisvKiBNaXNzaW5nIHBhcmVudCBjb21wb25lbnQgbXVzdCBmYWlsIHdpdGggRU5PRU5ULiAqL1xuK1RFU1RfRihvcGVuX29fY3JlYXRfb19kaXIsIGVub2VudF9taXNzaW5nX3BhcmVudClcbit7XG4rXHRFWFBFQ1RfRVEob3Blbl9vX2NyZWF0X29fZGlyKHNlbGYtXHUwMDNlZGZkLCBcIm5vbmV4aXN0ZW50L2NoaWxkXCIsIFNfSVJXWFUsIDApLCAtMSk7XG4rXHRFWFBFQ1RfRVEoZXJybm8sIEVOT0VOVCk7XG4rfVxuK1xuKy8qIEFuIGludmFsaWQgZGZkIG11c3QgZmFpbCB3aXRoIEVCQURGLiAqL1xuK1RFU1RfRihvcGVuX29fY3JlYXRfb19kaXIsIGViYWRmKVxuK3tcbitcdEVYUEVDVF9FUShvcGVuX29fY3JlYXRfb19kaXIoLTQyLCBcImJhZGZkaXJcIiwgU19JUldYVSwgMCksIC0xKTtcbitcdEVYUEVDVF9FUShlcnJubywgRUJBREYpO1xuK31cbitcbisvKiBBIGRmZCB0aGF0IHBvaW50cyB0byBhIGZpbGUgKG5vdCBhIGRpcmVjdG9yeSkgbXVzdCBmYWlsIHdpdGggRU5PVERJUi4gKi9cbitURVNUX0Yob3Blbl9vX2NyZWF0X29fZGlyLCBlbm90ZGlyX2RmZClcbit7XG4rXHRpbnQgZmlsZV9mZDtcbitcbitcdGZpbGVfZmQgPSBvcGVuYXQoc2VsZi1cdTAwM2VkZmQsIFwiZmlsZVwiLFxuK1x0XHRcdCBPX0NSRUFUIHwgT19XUk9OTFksIFNfSVJXWFUpO1xuK1x0QVNTRVJUX0dFKGZpbGVfZmQsIDApO1xuK1xuK1x0RVhQRUNUX0VRKG9wZW5fb19jcmVhdF9vX2RpcihmaWxlX2ZkLCBcInN1YmRpclwiLCBTX0lSV1hVLCAwKSwgLTEpO1xuK1x0RVhQRUNUX0VRKGVycm5vLCBFTk9URElSKTtcbitcbitcdEVYUEVDVF9FUShjbG9zZShmaWxlX2ZkKSwgMCk7XG4rXHRFWFBFQ1RfRVEodW5saW5rYXQoc2VsZi1cdTAwM2VkZmQsIFwiZmlsZVwiLCAwKSwgMCk7XG4rfVxuK1xuKy8qXG4rICogT19FWENMIHRvZ2V0aGVyIHdpdGggT19DUkVBVHxPX0RJUkVDVE9SWSBtdXN0IGZhaWwgd2l0aCBFRVhJU1Qgd2hlblxuKyAqIHRoZSB0YXJnZXQgZGlyZWN0b3J5IGFscmVhZHkgZXhpc3RzLlxuKyAqL1xuK1RFU1RfRihvcGVuX29fY3JlYXRfb19kaXIsIG9fZXhjbF9lZXhpc3QpXG4re1xuK1x0aW50IGZkO1xuK1xuK1x0ZmQgPSBvcGVuX29fY3JlYXRfb19kaXJfY2hlY2tlZF9mbGFncyhzZWxmLVx1MDAzZWRmZCwgXCJleGNsZGlyXCIsIE9fRVhDTCk7XG4rXHRFWFBFQ1RfRVEoY2xvc2UoZmQpLCAwKTtcbitcbitcdEVYUEVDVF9FUShvcGVuX29fY3JlYXRfb19kaXIoc2VsZi1cdTAwM2VkZmQsIFwiZXhjbGRpclwiLCBTX0lSV1hVLCBPX0VYQ0wpLCAtMSk7XG4rXHRFWFBFQ1RfRVEoZXJybm8sIEVFWElTVCk7XG4rXG4rXHRFWFBFQ1RfRVEodW5saW5rYXQoc2VsZi1cdTAwM2VkZmQsIFwiZXhjbGRpclwiLCBBVF9SRU1PVkVESVIpLCAwKTtcbit9XG4rXG4rLypcbisgKiBPX0NSRUFUfE9fRElSRUNUT1JZIG9uIGEgcGF0aCB0aGF0IGFscmVhZHkgZXhpc3RzIGFzIGEgcmVndWxhciBmaWxlXG4rICogbXVzdCBmYWlsIHdpdGggRU5PVERJUi5cbisgKi9cbitURVNUX0Yob3Blbl9vX2NyZWF0X29fZGlyLCBleGlzdGluZ19maWxlX2Vub3RkaXIpXG4re1xuK1x0aW50IGZpbGVfZmQ7XG4rXG4rXHRmaWxlX2ZkID0gb3BlbmF0KHNlbGYtXHUwMDNlZGZkLCBcInJlZ2ZpbGVcIixcbitcdFx0XHQgT19DUkVBVCB8IE9fV1JPTkxZLCBTX0lSV1hVKTtcbitcdEFTU0VSVF9HRShmaWxlX2ZkLCAwKTtcbitcdEVYUEVDVF9FUShjbG9zZShmaWxlX2ZkKSwgMCk7XG4rXG4rXHRFWFBFQ1RfRVEob3Blbl9vX2NyZWF0X29fZGlyKHNlbGYtXHUwMDNlZGZkLCBcInJlZ2ZpbGVcIiwgU19JUldYVSwgMCksIC0xKTtcbitcdEVYUEVDVF9FUShlcnJubywgRU5PVERJUik7XG4rXG4rXHRFWFBFQ1RfRVEodW5saW5rYXQoc2VsZi1cdTAwM2VkZmQsIFwicmVnZmlsZVwiLCAwKSwgMCk7XG4rfVxuK1xuKy8qXG4rICogT19DUkVBVHxPX0RJUkVDVE9SWSBjb21iaW5lZCB3aXRoIGEgd3JpdGFibGUgYWNjZXNzIG1vZGUgbXVzdCBiZVxuKyAqIHJlamVjdGVkOiBhIGRpcmVjdG9yeSBjYW5ub3QgYmUgb3BlbmVkIGZvciB3cml0aW5nLlxuKyAqL1xuK1RFU1RfRihvcGVuX29fY3JlYXRfb19kaXIsIHJlamVjdHNfd3JpdGFibGVfYWNjX21vZGUpXG4re1xuK1x0RVhQRUNUX0VRKG9wZW5fb19jcmVhdF9vX2RpcihzZWxmLVx1MDAzZWRmZCwgXCJyZHdyZGlyXCIsIFNfSVJXWFUsIE9fUkRXUiksIC0xKTtcbitcdEVYUEVDVF9FUShlcnJubywgRU5PVERJUik7XG4rXHQvKiBDbGVhbiB1cCBpZiB0aGUga2VybmVsIGNyZWF0ZWQgdGhlIGRpcmVjdG9yeSBhbnl3YXkuICovXG4rXHR1bmxpbmthdChzZWxmLVx1MDAzZWRmZCwgXCJyZHdyZGlyXCIsIEFUX1JFTU9WRURJUik7XG4rfVxuK1xuKy8qXG4rICogb3BlbmF0KE9fQ1JFQVQpIHdpdGggYSB0cmFpbGluZyBzbGFzaCBidXQgd2l0aG91dCBPX0RJUkVDVE9SWVxuKyAqIG11c3QgZmFpbCB3aXRoIEVJU0RJUiBhbmQgbXVzdCBub3QgY3JlYXRlIGFueXRoaW5nIGF0IHRoZSBwYXRoLlxuKyAqL1xuK1RFU1RfRihvcGVuX29fY3JlYXRfb19kaXIsIHRyYWlsaW5nX3NsYXNoX25vX29fZGlyKVxuK3tcbitcdGludCBmZDtcbitcdHN0cnVjdCBzdGF0IHN0O1xuK1xuK1x0ZmQgPSBvcGVuYXQoc2VsZi1cdTAwM2VkZmQsIFwidHJhaWxpbmcvXCIsIE9fQ1JFQVQgfCBPX1dST05MWSwgU19JUldYVSk7XG4rXHRFWFBFQ1RfRVEoZmQsIC0xKTtcbitcdEVYUEVDVF9FUShlcnJubywgRUlTRElSKTtcbitcbitcdEVYUEVDVF9FUShmc3RhdGF0KHNlbGYtXHUwMDNlZGZkLCBcInRyYWlsaW5nXCIsIFx1MDAyNnN0LCAwKSwgLTEpO1xuK1x0RVhQRUNUX0VRKGVycm5vLCBFTk9FTlQpO1xuK1xuK1x0LyogQmVzdC1lZmZvcnQgY2xlYW51cCBpbiBjYXNlIHRoZSBrZXJuZWwgbGVmdCBhIGZpbGUgYmVoaW5kLiAqL1xuK1x0aWYgKGZkIFx1MDAzZT0gMClcbitcdFx0Y2xvc2UoZmQpO1xuK1x0dW5saW5rYXQoc2VsZi1cdTAwM2VkZmQsIFwidHJhaWxpbmdcIiwgMCk7XG4rfVxuK1xuKy8qXG4rICogVGhlIHJldHVybmVkIGZkIG11c3QgYmUgdXNhYmxlIGFzIGEgZGZkIGZvciBmdXJ0aGVyICphdCgpIGNhbGxzLlxuKyAqL1xuK1RFU1RfRihvcGVuX29fY3JlYXRfb19kaXIsIGZkX3VzYWJsZV9hc19kZmQpXG4re1xuK1x0aW50IHBhcmVudF9mZCwgY2hpbGRfZmQ7XG4rXHRjaGFyIHBhdGhbUEFUSF9NQVhdO1xuK1xuK1x0cGFyZW50X2ZkID0gb3Blbl9vX2NyZWF0X29fZGlyX2NoZWNrZWQoc2VsZi1cdTAwM2VkZmQsIFwicGFyZW50XCIpO1xuK1x0Y2hpbGRfZmQgPSBvcGVuX29fY3JlYXRfb19kaXJfY2hlY2tlZChwYXJlbnRfZmQsIFwiY2hpbGRcIik7XG4rXG4rXHRFWFBFQ1RfRVEoY2xvc2UoY2hpbGRfZmQpLCAwKTtcbitcdEVYUEVDVF9FUShjbG9zZShwYXJlbnRfZmQpLCAwKTtcbitcbitcdHNucHJpbnRmKHBhdGgsIHNpemVvZihwYXRoKSwgXCIlcy9wYXJlbnQvY2hpbGRcIiwgc2VsZi1cdTAwM2VkaXJwYXRoKTtcbitcdEVYUEVDVF9FUShybWRpcihwYXRoKSwgMCk7XG4rXHRzbnByaW50ZihwYXRoLCBzaXplb2YocGF0aCksIFwiJXMvcGFyZW50XCIsIHNlbGYtXHUwMDNlZGlycGF0aCk7XG4rXHRFWFBFQ1RfRVEocm1kaXIocGF0aCksIDApO1xuK31cbitcbitURVNUX0hBUk5FU1NfTUFJTlxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDRUMTY6NTk6NTAuODQ0NTgzNjg0WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTcwMjI0NTAzMTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBQbGFuOiBFbmhhbmNpbmcgRGlyZWN0b3J5IENyZWF0aW9uIHdpdGggYG9wZW5hdGAqKlxuXG5Pa2F5LCBzbyB3ZSBoYXZlIHRoaXMgcGF0Y2ggdGhhdCdzIGZ1bmRhbWVudGFsbHkgY2hhbmdpbmcgaG93IGBPX0NSRUFUYCBhbmQgYE9fRElSRUNUT1JZYCBpbnRlcmFjdCB3aXRoaW4gYG9wZW5hdGAgYW5kIHJlbGF0ZWQgc3lzdGVtIGNhbGxzLiBTcGVjaWZpY2FsbHksIGl0J3MgYWxsb3dpbmcgdGhlIGNyZWF0aW9uIG9mIGRpcmVjdG9yaWVzIHVzaW5nIGBPX0NSRUFUIHwgT19ESVJFQ1RPUllgLCBhIGZ1bmN0aW9uYWxpdHkgdGhhdCB3YXMgcHJldmlvdXNseSBlaXRoZXIgbm90IHN1cHBvcnRlZCBvciBoYWQgaW5jb25zaXN0ZW50IGJlaGF2aW9yLiBUaGlzIGlzIGEgY29yZSBWRlMgY2hhbmdlIHRoYXQgYWRkcyBzdXBwb3J0IGZvciBjcmVhdGluZyBkaXJlY3RvcmllcyB2aWEgYG9wZW5hdCguLi4sIE9fQ1JFQVQgfCBPX0RJUkVDVE9SWSwgLi4uKWAuXG5cbkl0IG1vZGlmaWVzIGBmcy9uYW1laS5jYCwgYGZzL29wZW4uY2AsIGFuZCBzZXZlcmFsIGZpbGVzeXN0ZW1zIHRvIGhhbmRsZSB0aGlzIG5ldyBiZWhhdmlvci4gRnJvbSB3aGF0IEkgY2FuIHNlZSwgdGhlIGZpbGVzeXN0ZW1zICg5cCwgY2VwaCwgZnVzZSwgZ2ZzMiwgbmZzLCBzbWIsIHZib3hzZikgYXJlIG1vc3RseSBpbnZvbHZlZCBpbiBjbGVhcmluZyBgT19DUkVBVGAgaWYgYE9fSVNfTUtESVIoZmxhZ3MpYCBpcyB0cnVlIHdpdGhpbiB0aGVpciBgYXRvbWljX29wZW5gIGltcGxlbWVudGF0aW9ucy4gYE9fSVNfTUtESVIoZmxhZ3MpYCBpcyBkZWZpbmVkIGFzIGAoZmxhZ3MgXHUwMDI2IE9fTUtESVJfTUFTSykgPT0gT19NS0RJUl9NQVNLYCB3aGVyZSBgT19NS0RJUl9NQVNLYCBpcyBgT19DUkVBVCB8IE9fRElSRUNUT1JZYC5cblxuVGhlIGNydWNpYWwgY2hhbmdlIGxpZXMgaW4gdGhlIFZGUzogYHZmc19jcmVhdGVfbm9fcGVybWAgYW5kIGB2ZnNfbWtkaXJfbm9fcGVybWAgaGF2ZSBiZWVuIGludHJvZHVjZWQuIGBhdG9taWNfb3BlbmAgYW5kIGBsb29rdXBfb3BlbmAgYXJlIG1vZGlmaWVkIHRvIGFjY29tbW9kYXRlIHRoaXMgbmV3IGBjcmVhdGVfZGlyID0gT19JU19NS0RJUihvcGVuX2ZsYWcpYCBmbGFnLiBJZiBgY3JlYXRlX2RpcmAgaXMgdHJ1ZSwgdGhlIHN5c3RlbSBjYWxscyBgdmZzX21rZGlyX25vX3Blcm1gIGluc3RlYWQgb2YgYHZmc19jcmVhdGVfbm9fcGVybWAsIGFuZCBgbWF5X29fY3JlYXRlYCBub3cgdGFrZXMgYSBgY3JlYXRlX2RpcmAgcGFyYW1ldGVyIGFuZCBjYWxscyBzZWN1cml0eSBob29rcyBmb3IgbWtkaXIgb3BlcmF0aW9ucy5cblxuVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGFuZCBhYnNvbHV0ZWx5IGRlbWFuZHMgZnV6emluZyB0byBlbnN1cmUgc3RhYmlsaXR5IGFuZCBjb3JyZWN0bmVzcy4gV2UgaGF2ZSB0byBtYWtlIHN1cmUgd2UgaGl0IGV2ZXJ5IHBvc3NpYmxlIHNjZW5hcmlvLlxuXG5NeSBmb2N1cyBzaG91bGQgYmUgb24gZnV6emluZyB0aGVzZSBrZXkgZnVuY3Rpb25zOlxuXG4qICAgYGxvb2t1cF9vcGVuYFxuKiAgIGBhdG9taWNfb3BlbmAgKHBhcnRpY3VsYXJseSB0aGUgVkZTIGltcGxlbWVudGF0aW9uIGluIGBmcy9uYW1laS5jYClcbiogICBgdmZzX21rZGlyX25vX3Blcm1gXG4qICAgYHZmc19jcmVhdGVfbm9fcGVybWBcbiogICBgbWF5X29fY3JlYXRlYFxuKiAgIGBidWlsZF9vcGVuX2ZsYWdzYFxuKiAgIGBkb19vcGVuYFxuKiAgIGBkZW50cnlfY3JlYXRlYFxuKiAgIGB2ZnNfbWtkaXJgXG4qICAgYHZmc19jcmVhdGVgXG5cbkkgdGhpbmsgSSBoYXZlIGEgZ29vZCBoYW5kbGUgb24gaG93IHRoZSBmaWxlc3lzdGVtcyBhcmUgaW50ZXJhY3Rpbmcgd2l0aCB0aGlzLiBTcGVjaWZpY2FsbHksIHRoZXkncmUgY2xlYXJpbmcgYE9fQ1JFQVRgIGluIGBhdG9taWNfb3BlbmAsIGFuZCB0aGlzIHNlZW1zIHRvIGJlIGJ5IGRlc2lnbi4gSWYgYGF0b21pY19vcGVuYCBjbGVhcnMgYE9fQ1JFQVRgLCBpdCB3b24ndCBhdHRlbXB0IHRvIGNyZWF0ZSwgYW5kIHRoZSBWRlMgd2lsbCBoYW5kbGUgdGhlIGNyZWF0aW9uIHZpYSBgdmZzX21rZGlyX25vX3Blcm1gLiBUaGlzIG1lY2hhbmlzbSBsb29rcyBuaWNlLlxuXG5Ob3csIGxldCdzIHZlcmlmeSB0aGF0IHRoZXNlIGtleSBmdW5jdGlvbnMgYXJlIGF2YWlsYWJsZSBmb3IgaW5zdHJ1bWVudGF0aW9uIGFuZCBmdXp6aW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDg1NCwiT3V0cHV0VG9rZW5zIjo3NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0NjgsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wNFQxNzowMDowNy44NjcwMzY2NDlaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjY1ODY5NTA2MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJeKHN0YXRpYyApPyhpbmxpbmUgKT8oc3RydWN0IGRlbnRyeSBcXFxcKnxpbnR8dm9pZHxzdHJ1Y3QgZmlsZSBcXFxcKikgKGxvb2t1cF9vcGVufGF0b21pY19vcGVufG1heV9vX2NyZWF0ZXxidWlsZF9vcGVuX2ZsYWdzfGRvX29wZW58ZGVudHJ5X2NyZWF0ZXx2ZnNfbWtkaXJ8dmZzX2NyZWF0ZSlcXFxcKFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9rZXJuZWwvYXBtXzMyLmM9MTUzNz1zdGF0aWMgaW50IGRvX3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbHApXFxuLS1cXG5hcmNoL3g4Ni9rZXJuZWwvYXBtXzMyLmMtMTU3NC1cXG5hcmNoL3g4Ni9rZXJuZWwvYXBtXzMyLmM6MTU3NTpzdGF0aWMgaW50IGRvX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbHApXFxuYXJjaC94ODYva2VybmVsL2FwbV8zMi5jLTE1NzYte1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQveGlyY29tL3hpcmMycHNfY3MuYz0yOTY9c3RhdGljIGludCBkb19jb25maWcoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGlmbWFwICptYXApO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3hpcmNvbS94aXJjMnBzX2NzLmM6Mjk3OnN0YXRpYyBpbnQgZG9fb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC94aXJjb20veGlyYzJwc19jcy5jLTI5OC1zdGF0aWMgaW50IGRvX2lvY3RsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpZnJlcSAqcnEsIGludCBjbWQpO1xcbi0tXFxuZnMvbmFtZWkuYz00MTg2PWludCB2ZnNfY3JlYXRlX25vX3Blcm0oc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcXG4tLVxcbmZzL25hbWVpLmMtNDIxNy0gKi9cXG5mcy9uYW1laS5jOjQyMTg6aW50IHZmc19jcmVhdGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlLFxcbmZzL25hbWVpLmMtNDIxOS1cXHQgICAgICAgc3RydWN0IGRlbGVnYXRlZF9pbm9kZSAqZGkpXFxuLS1cXG5mcy9uYW1laS5jPTQzNDQ9c3RhdGljIGlubGluZSBpbnQgb3Blbl90b19uYW1laV9mbGFncyhpbnQgZmxhZylcXG4tLVxcbmZzL25hbWVpLmMtNDM1MC1cXG5mcy9uYW1laS5jOjQzNTE6c3RhdGljIGludCBtYXlfb19jcmVhdGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXFxuZnMvbmFtZWkuYy00MzUyLVxcdFxcdFxcdGNvbnN0IHN0cnVjdCBwYXRoICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcXG4tLVxcbmZzL25hbWVpLmM9NDY1NT1zdGF0aWMgY29uc3QgY2hhciAqb3Blbl9sYXN0X2xvb2t1cHMoc3RydWN0IG5hbWVpZGF0YSAqbmQsXFxuLS1cXG5mcy9uYW1laS5jLTQ3NDItICovXFxuZnMvbmFtZWkuYzo0NzQzOnN0YXRpYyBpbnQgZG9fb3BlbihzdHJ1Y3QgbmFtZWlkYXRhICpuZCxcXG5mcy9uYW1laS5jLTQ3NDQtXFx0XFx0ICAgc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IHN0cnVjdCBvcGVuX2ZsYWdzICpvcClcXG4tLVxcbmZzL25mcy9kaXIuYz0yMDc2PXN0YXRpYyBzdHJ1Y3QgbmZzX29wZW5fY29udGV4dCAqY3JlYXRlX25mc19vcGVuX2NvbnRleHQoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBpbnQgb3Blbl9mbGFncywgc3RydWN0IGZpbGUgKmZpbHApXFxuLS1cXG5mcy9uZnMvZGlyLmMtMjA4MC1cXG5mcy9uZnMvZGlyLmM6MjA4MTpzdGF0aWMgaW50IGRvX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbHApXFxuZnMvbmZzL2Rpci5jLTIwODIte1xcbi0tXFxuZnMvb3Blbi5jPTExMzY9aW5saW5lIHN0cnVjdCBvcGVuX2hvdyBidWlsZF9vcGVuX2hvdyhpbnQgZmxhZ3MsIHVtb2RlX3QgbW9kZSlcXG4tLVxcbmZzL29wZW4uYy0xMTUxLVxcbmZzL29wZW4uYzoxMTUyOmlubGluZSBpbnQgYnVpbGRfb3Blbl9mbGFncyhjb25zdCBzdHJ1Y3Qgb3Blbl9ob3cgKmhvdywgc3RydWN0IG9wZW5fZmxhZ3MgKm9wKVxcbmZzL29wZW4uYy0xMTUzLXtcXG4tLVxcbmluY2x1ZGUvbGludXgvZnMuaD0xNzU4PWJvb2wgaW5vZGVfb3duZXJfb3JfY2FwYWJsZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcXG4tLVxcbmluY2x1ZGUvbGludXgvZnMuaC0xNzYzLSAqL1xcbmluY2x1ZGUvbGludXgvZnMuaDoxNzY0OmludCB2ZnNfY3JlYXRlKHN0cnVjdCBtbnRfaWRtYXAgKiwgc3RydWN0IGRlbnRyeSAqLCB1bW9kZV90LFxcbmluY2x1ZGUvbGludXgvZnMuaC0xNzY1LVxcdCAgICAgICBzdHJ1Y3QgZGVsZWdhdGVkX2lub2RlICopO1xcbi0tXFxudG9vbHMvcGVyZi91dGlsL2Rzby5jPTU0NT1zdGF0aWMgdm9pZCBjbG9zZV9maXJzdF9kc28odm9pZCk7XFxudG9vbHMvcGVyZi91dGlsL2Rzby5jLTU0Ni1cXG50b29scy9wZXJmL3V0aWwvZHNvLmM6NTQ3OnN0YXRpYyBpbnQgZG9fb3BlbihjaGFyICpuYW1lKSBFWENMVVNJVkVfTE9DS1NfUkVRVUlSRUQoX2Rzb19fZGF0YV9vcGVuX2xvY2spXFxudG9vbHMvcGVyZi91dGlsL2Rzby5jLTU0OC17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA0VDE3OjAwOjE0LjUyNTczNzI2MloiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI4ODU0MTEzMDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOlxuXG4qKk5hdmlnYXRpbmcgdGhlIEZpbGVzeXN0ZW0gS2VybmVsIENvZGUqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZGlnIGludG8gdGhlIGZpbGVzeXN0ZW0gY29kZSBhZ2Fpbi4gU3BlY2lmaWNhbGx5LCBJJ20gdHJ5aW5nIHRvIHVuZGVyc3RhbmQgaG93IGZpbGVuYW1lIGxvb2t1cHMgYW5kIGF0b21pYyBvcGVucyBhcmUgaGFuZGxlZC4gTXkgZmlyc3QgbW92ZSB3aWxsIGJlIHRvIHplcm8gaW4gb24gYGZzL25hbWVpLmNgLiBJIGV4cGVjdCB0byBmaW5kIHRoZSBjb3JlIGxvZ2ljIGZvciBib3RoIGBsb29rdXBfb3BlbmAgYW5kIGBhdG9taWNfb3BlbmAgcm91dGluZXMgZGVmaW5lZCB0aGVyZS4gVGhhdCdzIHVzdWFsbHkgdGhlIGdvLXRvIHBsYWNlIGZvciBhbnl0aGluZyByZWxhdGVkIHRvIG5hbWUgcmVzb2x1dGlvbiBhbmQgdGhlIGluaXRpYWwgc2V0dXAgb2YgZmlsZSBvcGVyYXRpb25zLiBUaW1lIHRvIGZpcmUgdXAgdGhlIGVkaXRvciBhbmQgc2VlIHdoYXQncyB3aGF0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODA2MiwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA0VDE3OjAwOjE3LjQxMTE1MTUwM1oiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1ODQ0ODQxMDM2LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJeKHN0YXRpYyApPyhzdHJ1Y3QgZGVudHJ5IFxcXFwqKSAobG9va3VwX29wZW58YXRvbWljX29wZW4pXFxcXChcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA0VDE3OjAwOjIzLjI1NjAyNDU4OFoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyODg5Mjc5NzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqTmF2aWdhdGluZyB0aGUgYGRlbnRyeWAgSnVuZ2xlOiBSZXR1cm4gVHlwZXMgYW5kIEZ1bmN0aW9uIFNpZ25hdHVyZXMqKlxuXG5SaWdodCwgc28gSSdtIHRoaW5raW5nIGFib3V0IGEgZnVuY3Rpb24gdGhhdCBjbGVhcmx5IGRlYWxzIHdpdGggYGRlbnRyeWAgc3RydWN0dXJlcy4gSSdtIHRyeWluZyB0byBxdWlja2x5IGFzY2VydGFpbiBpdHMgcHJlY2lzZSByZXR1cm4gdHlwZS4gTXkgaW5pdGlhbCBndWVzcyBpcyB0aGF0IGl0ICpjb3VsZCogYmUgYHN0cnVjdCBkZW50cnkgKmAgb3IgcGVyaGFwcyBldmVuIGBjb25zdCBzdHJ1Y3QgZGVudHJ5ICpgLCB3aXRoIHNvbWUgdmFyaWF0aW9ucyBpbiBzcGFjaW5nIGFyb3VuZCB0aGUgYXN0ZXJpc2sg4oCTIHlvdSBrbm93IGhvdyB0aG9zZSB0aGluZ3MgY2FuIGJlLiBUbyBhdm9pZCBhbnkgYW1iaWd1aXR5IG9yIHVubmVjZXNzYXJ5IHBhcnNpbmcgb2YgdGhlIHNvdXJjZSBjb2RlLCB0aGUgbW9zdCBlZmZpY2llbnQgYXBwcm9hY2ggaXMgdG8gZGlyZWN0bHkgdGFyZ2V0IHRoZSBmdW5jdGlvbiBjYWxscyB0aGVtc2VsdmVzLiBJJ2xsIGp1c3QgdXNlIGBncmVwYCB0byBxdWlja2x5IGZpbmQgd2hlcmUgdGhlIGZ1bmN0aW9uIGlzIGNhbGxlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTgyNjIsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wNFQxNzowMDoyNi41NDQ5NTUzNzdaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Njk2ODc3MjgxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJeKHN0YXRpYyApPyhzdHJ1Y3QgZGVudHJ5IFxcXFwqXFxcXHMqKT8obG9va3VwX29wZW58YXRvbWljX29wZW4pXFxcXChcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvbmFtZWkuYz00MzgwPXN0YXRpYyBpbmxpbmUgdW1vZGVfdCBvX2NyZWF0ZV9tb2RlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxcbi0tXFxuZnMvbmFtZWkuYy00NDA4LSAqL1xcbmZzL25hbWVpLmM6NDQwOTpzdGF0aWMgc3RydWN0IGRlbnRyeSAqYXRvbWljX29wZW4oY29uc3Qgc3RydWN0IHBhdGggKnBhdGgsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcXG5mcy9uYW1laS5jLTQ0MTAtXFx0XFx0XFx0XFx0ICBzdHJ1Y3QgZmlsZSAqZmlsZSxcXG4tLVxcbmZzL25hbWVpLmM9NDQ2Nj1zdHJ1Y3QgZGVudHJ5ICp2ZnNfbWtkaXJfbm9fcGVybShzdHJ1Y3QgbW50X2lkbWFwICosIHN0cnVjdCBpbm9kZSAqLFxcbi0tXFxuZnMvbmFtZWkuYy00NDgzLSAqL1xcbmZzL25hbWVpLmM6NDQ4NDpzdGF0aWMgc3RydWN0IGRlbnRyeSAqbG9va3VwX29wZW4oc3RydWN0IG5hbWVpZGF0YSAqbmQsIHN0cnVjdCBmaWxlICpmaWxlLFxcbmZzL25hbWVpLmMtNDQ4NS1cXHRcXHRcXHRcXHQgIGNvbnN0IHN0cnVjdCBvcGVuX2ZsYWdzICpvcCxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDRUMTc6MDA6MzMuNTEzNzM1NDA3WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzYwMjE4MDI3NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIGBkZW50cnlfY3JlYXRlYCBhbmQgYHZmc19ta2RpcmAqKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGludG8gdGhlIGNvcmUgb2YgdGhpcyBvcGVyYXRpb24uIE15IGltbWVkaWF0ZSBmb2N1cyBpcyBvbiBgZGVudHJ5X2NyZWF0ZWAgYW5kIGB2ZnNfbWtkaXJgLiBJIHdhbnQgdG8gcXVpY2tseSByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlaXIgaW50ZXJhY3Rpb24gaW4gdGhlIGNvbnRleHQgb2YgY3JlYXRpbmcgYSBuZXcgZGlyZWN0b3J5LiBJJ20gdGhpbmtpbmcgYWJvdXQgdGhlIGRlbnRyeSBsaWZlY3ljbGUgYW5kIGhvdyB0aGUgVkZTIGxheWVyIGhhbmRsZXMgdGhlIHJlcXVlc3RzLCBlc3BlY2lhbGx5IHRoZSBpbm9kZSBhbGxvY2F0aW9uLiBJIG5lZWQgdG8gcmVmcmVzaCB0aGUgZGV0YWlscyBvZiB0aGUgbG9ja2luZyBtZWNoYW5pc21zIGludm9sdmVkIGluIHRoZXNlIGZ1bmN0aW9ucy4gQXJlIHRoZXJlIGFueSBjb250ZW50aW9uIHBvaW50cyB0byBsb29rIGF0LCBvciBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zPyBJcyBgdmZzX21rZGlyYCBqdXN0IGEgd3JhcHBlciwgb3IgZG9lcyBpdCBwZXJmb3JtIHN1YnN0YW50aWFsIHdvcmsgaXRzZWxmPyBIb3cgZG9lcyBgZGVudHJ5X2NyZWF0ZWAgYWZmZWN0IHRoZSBjYWNoZSBhbmQgZW5zdXJlIGNvbnNpc3RlbmN5IGFjcm9zcyB0aGUgRlM/IEknbSBjdXJpb3VzIGFib3V0IHRoZSBzcGVjaWZpYyBwYXJhbWV0ZXJzIHRoZXNlIGZ1bmN0aW9ucyBhY2NlcHQgYW5kIHRoZWlyIGVmZmVjdCBvbiB0aGUgcmVzdWx0aW5nIGRlbnRyeSBhbmQgaW5vZGUuIEknbSBydW5uaW5nIHRocm91Z2ggYWxsIHRoaXMgdG8gcXVpY2tseSBidWlsZCBhIG1lbnRhbCBtYXAgb2YgdGhlIHdob2xlIG9wZXJhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTg3MTUsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wNFQxNzowMDozNy4xMTU5MjAzNDNaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU5NDIzOTQ0OTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiXihzdHJ1Y3QgZmlsZSBcXFxcKlxcXFxzKik/ZGVudHJ5X2NyZWF0ZVxcXFwoXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL25hbWVpLmM9NTEwMD1FWFBPUlRfU1lNQk9MKHN0YXJ0X2NyZWF0aW5nX3VzZXJfcGF0aCk7XFxuLS1cXG5mcy9uYW1laS5jLTUxMTgtICovXFxuZnMvbmFtZWkuYzo1MTE5OnN0cnVjdCBmaWxlICpkZW50cnlfY3JlYXRlKHN0cnVjdCBwYXRoICpwYXRoLCBpbnQgZmxhZ3MsIHVtb2RlX3QgbW9kZSxcXG5mcy9uYW1laS5jLTUxMjAtXFx0XFx0XFx0ICAgY29uc3Qgc3RydWN0IGNyZWQgKmNyZWQpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2ZzLmg9MjQ3OT1zdHJ1Y3QgZmlsZSAqZGVudHJ5X29wZW5fbm9ub3RpZnkoY29uc3Qgc3RydWN0IHBhdGggKnBhdGgsIGludCBmbGFncyxcXG5pbmNsdWRlL2xpbnV4L2ZzLmgtMjQ4MC1cXHRcXHRcXHRcXHQgIGNvbnN0IHN0cnVjdCBjcmVkICpjcmVkKTtcXG5pbmNsdWRlL2xpbnV4L2ZzLmg6MjQ4MTpzdHJ1Y3QgZmlsZSAqZGVudHJ5X2NyZWF0ZShzdHJ1Y3QgcGF0aCAqcGF0aCwgaW50IGZsYWdzLCB1bW9kZV90IG1vZGUsXFxuaW5jbHVkZS9saW51eC9mcy5oLTI0ODItXFx0XFx0XFx0ICAgY29uc3Qgc3RydWN0IGNyZWQgKmNyZWQpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wNFQxNzowMDo0My4wNTgzMjI3MTFaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDczOTM3ODkxMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgcHJlc2VudGVkIGFzIGlmIGl0IHdlcmUgbXkgb3duIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipUaGlua2luZyBBYm91dCBGaWxlc3lzdGVtcyBhbmQgRGlyZWN0b3J5IENyZWF0aW9uKipcblxuQWxyaWdodCwgc28gd2UncmUgdGFsa2luZyBhYm91dCB0aGUgbG93LWxldmVsLCBmaWxlc3lzdGVtIGludGVyYWN0aW9uIGhlcmUuIFRoZSBtZW50YWwgdGljayBJIGdldCBmcm9tIFwidmZzX21rZGlyXCIgaXMgdGhlIGNyaXRpY2FsIGZ1bmN0aW9uIHdpdGhpbiBhIFZpcnR1YWwgRmlsZSBTeXN0ZW0gKFZGUykgbGF5ZXIuIEkgaW1tZWRpYXRlbHkgdGhpbmsgYWJvdXQgdGhlIGNvcmUgbWVjaGFuaWNzIOKAkyBob3cgdGhhdCBzaW5nbGUgY2FsbCB0cmFuc2xhdGVzIHRvIGFjdGlvbnMgYWNyb3NzIGRpZmZlcmVudCB1bmRlcmx5aW5nIGZpbGVzeXN0ZW1zLiBXZSdyZSBub3QganVzdCBjcmVhdGluZyBhIGRpcmVjdG9yeTsgd2UncmUgb3JjaGVzdHJhdGluZyB0aGUgKnJlcXVlc3QqIGZvciBhIGRpcmVjdG9yeSBjcmVhdGlvbi5cblxuTXkgbWluZCBqdW1wcyB0byB0aGUgVkZTJ3Mgcm9sZTogaXQncyB0aGUgYWJzdHJhY3Rpb24gbGF5ZXIuIGB2ZnNfbWtkaXJgIGl0c2VsZiBkb2Vzbid0ICpkbyogdGhlIG1rZGlyLiBJdCB0YWtlcyB0aGUgcGFyYW1ldGVyc+KAlHRoZSBwYXRoLCBwZXJtaXNzaW9ucywgZXRjLuKAlGFuZCB0aGVuIGl0IGRpc3BhdGNoZXMgdGhlIGFjdHVhbCB3b3JrIHRvIHRoZSBhcHByb3ByaWF0ZSB1bmRlcmx5aW5nIGZpbGVzeXN0ZW0uIEkgaW5zdGFudGx5IHN0YXJ0IGNvbnNpZGVyaW5nIHRoZSBpbXBsaWNhdGlvbnM6IGhvdyBkb2VzIHRoZSBWRlMgc2VsZWN0IHRoZSByaWdodCBmaWxlc3lzdGVtIGJhc2VkIG9uIHRoZSBwYXRoPyBJcyBpdCBiYXNlZCBvbiBtb3VudCBwb2ludHMsIG9uIGEgZmlsZXN5c3RlbS1zcGVjaWZpYyBzdHJ1Y3R1cmUgb3IgZGF0YSwgb3IgYSBjb21iaW5hdGlvbj9cblxuSSdtIHRoaW5raW5nIGFib3V0IHRoZSBhcmd1bWVudHMgdG8gYHZmc19ta2RpcmAgYW5kIHdoYXQgdGhleSBpbXBseS4gVGhlIHBhdGggaXRzZWxmIHRyaWdnZXJzIGNvbnNpZGVyYXRpb25zIGFib3V0IHBhdGggcmVzb2x1dGlvbi4gRG9lcyB0aGUgVkZTIGhhbmRsZSBzeW1ib2xpYyBsaW5rcyBhbG9uZyB0aGUgcGF0aD8gSG93IGRvZXMgaXQgZGVhbCB3aXRoIHJlbGF0aXZlIHBhdGhzIHZzLiBhYnNvbHV0ZSBwYXRocz8gVGhlIHBlcm1pc3Npb25zLCB0b28sIGFyZSBpbnN0YW50bHkgYSBwb2ludCBvZiBmb2N1cy4gV2UgaGF2ZSB0byBjb25zaWRlciBob3cgdG8gaGFuZGxlIFVJRC9HSURzIChVc2VyL0dyb3VwIElEcyksIGFuZCB0aGUgdHJhbnNsYXRpb24gbGF5ZXIgdGhhdCBvY2N1cnMgYXQgdGhlIFZGUyBsZXZlbCBiZWZvcmUgdGhlIHNwZWNpZmljIGZpbGVzeXN0ZW0gZ2V0cyBpbnZvbHZlZC4gRG9lcyB0aGUgdW5kZXJseWluZyBmaWxlc3lzdGVtIHN1cHBvcnQgdGhlIHBlcm1pc3Npb25zIG1vZGVsPyBXaGF0IGlzIHRoZSBzdGFuZGFyZCBiZWhhdmlvciBpbiB0aGlzIGNhc2UsIGFuZCBob3cgZG9lcyBgdmZzX21rZGlyYCBhZGFwdCB0byBpdD9cblxuVGhlIGVycm9yIGhhbmRsaW5nIGFzcGVjdHMgYXJlIGFsc28gYXQgdGhlIGZvcmVmcm9udC4gV2hhdCBhcmUgdGhlIGNvbW1vbiBlcnJvciBjb2RlcyB0aGF0IG1pZ2h0IGNvbWUgYmFjaz8gXCJQZXJtaXNzaW9uIGRlbmllZCxcIiBcImZpbGUgZXhpc3RzLFwiIFwib3V0IG9mIHNwYWNlLFwiIFwiaW52YWxpZCBwYXRoXCIuLi4gSSBzdGFydCBtYXBwaW5nIHRob3NlIHBvdGVudGlhbCBlcnJvcnMgdG8gdGhlIHNwZWNpZmljIGNoZWNrcyB0aGF0IGB2ZnNfbWtkaXJgIG1pZ2h0IGRvIGF0IHRoZSBWRlMgbGV2ZWwsIGFuZCBhbHNvIHRoZSBzb3J0cyBvZiBlcnJvcnMgdGhhdCB3b3VsZCBjb21lIGJhY2sgZnJvbSBhIHJlYWwgZmlsZXN5c3RlbS4gSSdtIHdvbmRlcmluZyB3aGF0IGlzIHRoZSBleHBlY3RlZCBlcnJvciBoYW5kbGluZyBzdHJhdGVneS4gRG9lcyB0aGUgVkZTIGF0dGVtcHQgcmV0cnkgb3Igb3RoZXIgbG9naWMsIG9yIGRvZXMgaXQgc2ltcGx5IHJldHVybiB0aGUgZXJyb3IgY29kZT9cblxuQmFzaWNhbGx5LCBJJ20gdGhpbmtpbmcgYWJvdXQgdGhlIGludHJpY2F0ZSBkYW5jZSBiZXR3ZWVuIHRoZSBWRlMgbGF5ZXIgYW5kIHRoZSBmaWxlc3lzdGVtIGRyaXZlci4gYHZmc19ta2RpcmAgaXMganVzdCBhIGtleSB0aGF0IGFjdGl2YXRlcyB0aGlzIHJlbGF0aW9uc2hpcCwgc28gdGhlcmUncyBhIGxvdCBvZiB1bmRlcmx5aW5nIGZpbGVzeXN0ZW0gbWVjaGFuaWNzIGFuZCBpbnRlcmFjdGlvbnMgdGhhdCBJJ20gY29uc2lkZXJpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5MjA0LCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wNFQxNzowMDo0Ny43OTc3MDU4NDFaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU3OTk3NjI5MjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiXihzdHJ1Y3QgZGVudHJ5IFxcXFwqXFxcXHMqKT92ZnNfbWtkaXJcXFxcKFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJEb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3BvcnRpbmcucnN0PTEzMTI9aW5zdGVhZC5cXG4tLVxcbkRvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvcG9ydGluZy5yc3QtMTMxNy1cXG5Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3BvcnRpbmcucnN0OjEzMTg6dmZzX21rZGlyKCkgbm93IHJldHVybnMgYSBkZW50cnkgLSB0aGUgb25lIHJldHVybmVkIGJ5IC1cXHUwMDNlbWtkaXIoKS4gIElmXFxuRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9wb3J0aW5nLnJzdC0xMzE5LXRoYXQgZGVudHJ5IGlzIGRpZmZlcmVudCBmcm9tIHRoZSBkZW50cnkgcGFzc2VkIGluLCBpbmNsdWRpbmcgaWYgaXQgaXNcXG4tLVxcbmZzL25hbWVpLmM9NTMxMT1zdHJ1Y3QgZGVudHJ5ICp2ZnNfbWtkaXJfbm9fcGVybShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXFxuLS1cXG5mcy9uYW1laS5jLTUzNjQtICovXFxuZnMvbmFtZWkuYzo1MzY1OnN0cnVjdCBkZW50cnkgKnZmc19ta2RpcihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXFxuZnMvbmFtZWkuYy01MzY2LVxcdFxcdFxcdCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSxcXG4tLVxcbmluY2x1ZGUvbGludXgvZnMuaD0xNzY0PWludCB2ZnNfY3JlYXRlKHN0cnVjdCBtbnRfaWRtYXAgKiwgc3RydWN0IGRlbnRyeSAqLCB1bW9kZV90LFxcbmluY2x1ZGUvbGludXgvZnMuaC0xNzY1LVxcdCAgICAgICBzdHJ1Y3QgZGVsZWdhdGVkX2lub2RlICopO1xcbmluY2x1ZGUvbGludXgvZnMuaDoxNzY2OnN0cnVjdCBkZW50cnkgKnZmc19ta2RpcihzdHJ1Y3QgbW50X2lkbWFwICosIHN0cnVjdCBpbm9kZSAqLFxcbmluY2x1ZGUvbGludXgvZnMuaC0xNzY3LVxcdFxcdFxcdCBzdHJ1Y3QgZGVudHJ5ICosIHVtb2RlX3QsIHN0cnVjdCBkZWxlZ2F0ZWRfaW5vZGUgKik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA0VDE3OjAwOjUzLjU5NzQ3NjUxOVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMDg2MTkxNjA5MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipJZGVudGlmeWluZyBLZXkgRnVuY3Rpb25zIGFuZCBDb25maWd1cmF0aW9uIGZvciBUZXN0aW5nKipcblxuT2theSwgc28gSSdtIGRpdmluZyBpbnRvIHRoaXMgY29kZSBhbmQgZmlndXJpbmcgb3V0IHRoZSBjcml0aWNhbCBmdW5jdGlvbnMgcmVsYXRlZCB0byB0aGlzIHBhdGNoLiBJbml0aWFsbHksIEkgd2FzIGZvY3VzaW5nIG9uOlxuXG4tICAgYGxvb2t1cF9vcGVuYFxuLSAgIGBhdG9taWNfb3BlbmBcbi0gICBgbWF5X29fY3JlYXRlYFxuLSAgIGBidWlsZF9vcGVuX2ZsYWdzYFxuLSAgIGBkb19vcGVuYFxuLSAgIGBkZW50cnlfY3JlYXRlYFxuLSAgIGB2ZnNfbWtkaXJgXG4tICAgYHZmc19jcmVhdGVgXG5cbkkgaGFkIGEgcXVpY2sgdGhvdWdodCBhYm91dCBpbmNsdWRpbmcgdGhlIHN0YXRpYyBpbmxpbmUgZnVuY3Rpb25zIGB2ZnNfbWtkaXJfbm9fcGVybWAgYW5kIGB2ZnNfY3JlYXRlX25vX3Blcm1gIGJ1dCBkZWNpZGVkIGFnYWluc3QgaXQsIGFzIHN5emthbGxlciBtaWdodCBzdHJ1Z2dsZSB0byB0cmFjZSB0aG9zZS4gSXQncyBzYWZlciB0byBzdGljayB0byB0aGUgbm9uLWlubGluZSBjYWxsaW5nIGZ1bmN0aW9ucy5cblxuVGhlbiBJIHJlYWxpemVkIGBkb19vcGVuYCBpcyBhbHNvIHN0YXRpYywgc28gSSB3ZW50IGJhY2sgdG8gbWFrZSBzdXJlLCBpdCBpcyBjYWxsZWQgZnJvbSBvcGVuYXQsIHdoaWNoIGlzIGFsd2F5cyBlbmFibGVkLlxuXG5UaGVuIEkgcmVtZW1iZXJlZCB0aGUgcGF0Y2ggYWxzbyB0b3VjaGVzIHZhcmlvdXMgZmlsZXN5c3RlbXMuIEl0IGxvb2tzIGxpa2UgZWFjaCBvZiB0aGVtIG5vdyBoYW5kbGVzIGBPX0lTX01LRElSKGZsYWdzKWAgaW4gdGhlaXIgYGF0b21pY19vcGVuYCBjYWxscy4gU28gSSBuZWVkIHRvIGFkZCB0aGVzZSBhcyB3ZWxsOlxuXG4tICAgYHY5ZnNfdmZzX2F0b21pY19vcGVuYFxuLSAgIGB2OWZzX3Zmc19hdG9taWNfb3Blbl9kb3RsYFxuLSAgIGBjZXBoX2F0b21pY19vcGVuYFxuLSAgIGBmdXNlX2F0b21pY19vcGVuYFxuLSAgIGBnZnMyX2F0b21pY19vcGVuYFxuLSAgIGBuZnNfYXRvbWljX29wZW5gXG4tICAgYG5mc19hdG9taWNfb3Blbl92MjNgXG4tICAgYGNpZnNfYXRvbWljX29wZW5gXG4tICAgYHZib3hzZl9kaXJfYXRvbWljX29wZW5gXG5cblRoYXQgbGVkIG1lIHRvIHRoaW5rIGFib3V0IGZpbGVzeXN0ZW0gY29uZmlncy4gSSBsaXN0ZWQgdGhlbSBhdCBmaXJzdCwgYnV0IHRoZW4gSSBzdG9wcGVkIG15c2VsZi4gVGhlIHByb21wdCBzYXlzLCBcIkRvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLlwiIFNvIEkgbmVlZCB0byBnbyBsb29rIGludG8gS2NvbmZpZyBmaWxlcyBmb3IgYW55IGlmZGVmcy4gSSBzaG91bGQgbm90IG1ha2UgYW55IGFzc3VtcHRpb25zLiBMZXQncyBzZWUgaWYgdGhlcmUgYXJlIGFueSBjb25maWcgb3B0aW9ucyByZWxhdGVkIHRvIHRoZSBmaWxlc3lzdGVtIGNoYW5nZXMgb3IgdGhlIGNvcmUgZnVuY3Rpb25zIGluIGBmcy9uYW1laS5jYCBhbmQgYGZzL29wZW4uY2AuIEkgaGF2ZSB0byBjaGVjayB0aGUgS2NvbmZpZyBmaWxlcyBub3cuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwMTI0LCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTAwMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wNFQxNzowMTowNC40NTkzOTY0MTNaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4MDA4MjYzNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCIjaWZkZWZcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvbmFtZWkuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9uYW1laS5jPTM3ND1zdGF0aWMgaW50IGNoZWNrX2FjbChzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcXG4tLVxcbmZzL25hbWVpLmMtMzc2LXtcXG5mcy9uYW1laS5jOjM3NzojaWZkZWYgQ09ORklHX0ZTX1BPU0lYX0FDTFxcbmZzL25hbWVpLmMtMzc4LVxcdHN0cnVjdCBwb3NpeF9hY2wgKmFjbDtcXG4tLVxcbmZzL25hbWVpLmM9NDEzPXN0YXRpYyBpbmxpbmUgYm9vbCBub19hY2xfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSlcXG5mcy9uYW1laS5jLTQxNC17XFxuZnMvbmFtZWkuYzo0MTU6I2lmZGVmIENPTkZJR19GU19QT1NJWF9BQ0xcXG5mcy9uYW1laS5jLTQxNi1cXHRyZXR1cm4gbGlrZWx5KCFSRUFEX09OQ0UoaW5vZGUtXFx1MDAzZWlfYWNsKSk7XFxuLS1cXG5mcy9uYW1laS5jPTEyMDc9c3RhdGljIGludCBzeXNjdGxfcHJvdGVjdGVkX3JlZ3VsYXIgX19yZWFkX21vc3RseTtcXG5mcy9uYW1laS5jLTEyMDgtXFxuZnMvbmFtZWkuYzoxMjA5OiNpZmRlZiBDT05GSUdfU1lTQ1RMXFxuZnMvbmFtZWkuYy0xMjEwLXN0YXRpYyBjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlIG5hbWVpX3N5c2N0bHNbXSA9IHtcXG4tLVxcbmZzL25hbWVpLmM9MjI3OD1zdGF0aWMgX19hbHdheXNfaW5saW5lIGNvbnN0IGNoYXIgKndhbGtfY29tcG9uZW50KHN0cnVjdCBuYW1laWRhdGEgKm5kLCBpbnQgZmxhZ3MpXFxuLS1cXG5mcy9uYW1laS5jLTIzMjAtICovXFxuZnMvbmFtZWkuYzoyMzIxOiNpZmRlZiBDT05GSUdfRENBQ0hFX1dPUkRfQUNDRVNTXFxuZnMvbmFtZWkuYy0yMzIyLVxcbi0tXFxuZnMvbmFtZWkuYy0yMzI0LVxcbmZzL25hbWVpLmM6MjMyNTojaWZkZWYgSEFTSF9NSVhcXG5mcy9uYW1laS5jLTIzMjYtXFxuLS1cXG5mcy9uYW1laS5jPTI0NjU9c3RhdGljIGlubGluZSBjb25zdCBjaGFyICpoYXNoX25hbWUoc3RydWN0IG5hbWVpZGF0YSAqbmQsXFxuLS1cXG5mcy9uYW1laS5jLTI1MTYtICovXFxuZnMvbmFtZWkuYzoyNTE3OiNpZmRlZiBfX0JJR19FTkRJQU5cXG5mcy9uYW1laS5jLTI1MTgtICAjZGVmaW5lIExBU1RfV09SRF9JU19ET1RcXHQoMHgyZXVsIFxcdTAwM2NcXHUwMDNjIChCSVRTX1BFUl9MT05HLTgpKVxcbi0tXFxuZnMvbmFtZWkuYz0zNjI3PUVYUE9SVF9TWU1CT0woc3RhcnRfcmVtb3ZpbmdfZGVudHJ5KTtcXG5mcy9uYW1laS5jLTM2MjgtXFxuZnMvbmFtZWkuYzozNjI5OiNpZmRlZiBDT05GSUdfVU5JWDk4X1BUWVNcXG5mcy9uYW1laS5jLTM2MzAtaW50IHBhdGhfcHRzKHN0cnVjdCBwYXRoICpwYXRoKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wNFQxNzowMTowNC42Mzk0ODg3NVoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4Mjg0ODYzNzUwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBWRlMgTW9kaWZpY2F0aW9ucyBmb3IgUG90ZW50aWFsIEZlYXR1cmUgRmxhZ2dpbmcqKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIHRoaXMgY29kZSwgc3BlY2lmaWNhbGx5IGluIGBmcy9uYW1laS5jYCBhbmQgYGZzL29wZW4uY2AsIGFuZCBJJ20gbm90IHNlZWluZyBhbnkgcHJlcHJvY2Vzc29yIGRpcmVjdGl2ZXMgKGAjaWZkZWZgKSBhcm91bmQgdGhlIGNoYW5nZXMuIFRoYXQncyBhIGtleSBmaXJzdCBvYnNlcnZhdGlvbi4gSWYgdGhpcyBpcyBhIG5ldyBmZWF0dXJlIG9yIGNoYW5nZSwgaXQgbWlnaHQgcmVxdWlyZSBmZWF0dXJlIGZsYWdnaW5nLCBhbmQgdGhlIGFic2VuY2Ugb2YgYGlmZGVmc2AgaXMgbm90ZXdvcnRoeS5cblxuSSd2ZSBnb3QgYSBsaXN0IG9mIHRoZSBtb2RpZmllZCBmdW5jdGlvbnM6IGB2ZnNfY3JlYXRlX25vX3Blcm1gLCBgdmZzX2NyZWF0ZWAsIGBtYXlfb19jcmVhdGVgLCBgb19jcmVhdGVfbW9kZWAsIGBhdG9taWNfb3BlbmAsIGB2ZnNfbWtkaXJfbm9fcGVybWAsIGBsb29rdXBfb3BlbmAsIGBsb29rdXBfZmFzdF9mb3Jfb3BlbmAsIGBvcGVuX2xhc3RfbG9va3Vwc2AsIGBkb19vcGVuYCwgYGZpbGVuYW1lX2NyZWF0ZWAsIGBkZW50cnlfY3JlYXRlYCwgYHZmc19ta2RpcmAsIGBmaWxlbmFtZV91bmxpbmthdGAsIGBmaWxlbmFtZV9yZW5hbWVhdDJgIGFuZCBgYnVpbGRfb3Blbl9mbGFnc2AuIE5vdywgdGhlc2UgYXJlIGFsbCBjb3JlIFZGUyBmdW5jdGlvbnMsIGFuZCBJIHNob3VsZCByZWFsbHkgZm9jdXMgb24gdGhlIGtleSBvbmVzOiBgbG9va3VwX29wZW5gLCBgYXRvbWljX29wZW5gLCBgbWF5X29fY3JlYXRlYCwgYGJ1aWxkX29wZW5fZmxhZ3NgLCBgZG9fb3BlbmAsIGBkZW50cnlfY3JlYXRlYCwgYHZmc19ta2RpcmAsIGB2ZnNfY3JlYXRlYCwgYHZmc19ta2Rpcl9ub19wZXJtYCwgYHZmc19jcmVhdGVfbm9fcGVybWAsIGBvX2NyZWF0ZV9tb2RlYCwgYG9wZW5fbGFzdF9sb29rdXBzYCwgYW5kIGBsb29rdXBfZmFzdF9mb3Jfb3BlbmAuIFRoZXNlIGFyZSB0aGUgZnVuY3Rpb25zIHdoZXJlIHRoZSBhY3R1YWwgbW9kaWZpY2F0aW9ucyBsaWtlbHkgcmVzaWRlLlxuXG5XYWl0IGEgc2Vjb25kLi4uIGBhdG9taWNfb3BlbmAgaW4gYGZzL25hbWVpLmNgIGlzIHN0YXRpYywgd2hpY2ggaXMgaW50ZXJlc3RpbmcuIEkgc2hvdWxkIGNoZWNrIGlmIHRoZXJlIGFyZSBvdGhlciBgYXRvbWljX29wZW5gIGZ1bmN0aW9ucyBiZWNhdXNlIGl0IGNvdWxkIGJlIGEgY3J1Y2lhbCBwYXJ0IG9mIHRoZSBjaGFuZ2UuIFllcywgdGhlcmUgYXJlIGZpbGVzeXN0ZW0tc3BlY2lmaWMgaW1wbGVtZW50YXRpb25zOiBgdjlmc192ZnNfYXRvbWljX29wZW5gLCBgdjlmc192ZnNfYXRvbWljX29wZW5fZG90bGAsIGBjZXBoX2F0b21pY19vcGVuYCwgYGZ1c2VfYXRvbWljX29wZW5gLCBgZ2ZzMl9hdG9taWNfb3BlbmAsIGBuZnNfYXRvbWljX29wZW5gLCBgbmZzX2F0b21pY19vcGVuX3YyM2AsIGBjaWZzX2F0b21pY19vcGVuYCwgYW5kIGB2Ym94c2ZfZGlyX2F0b21pY19vcGVuYC5cblxuU2luY2UgdGhpcyB0b3VjaGVzIG11bHRpcGxlIGZpbGVzeXN0ZW1zLCBJIG5lZWQgdG8gY29uc2lkZXIgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMuIEkgc2hvdWxkIGxvb2sgaW50byB0aGUgcmVsZXZhbnQgS2NvbmZpZyBvcHRpb25zOiBgOVBfRlNgLCBgQ0VQSF9GU2AsIGBGVVNFX0ZTYCwgYEdGUzJfRlNgLCBgTkZTX0ZTYCwgYENJRlNgLCBhbmQgYFZCT1hTRl9GU2AuIFRoYXQgd2lsbCB0ZWxsIG1lIGlmIHRoZSBtb2RpZmljYXRpb25zIGFyZSBjb25kaXRpb25hbCBvbiBhbnkgb2YgdGhlc2UgZmlsZXN5c3RlbSBvcHRpb25zIGJlaW5nIGVuYWJsZWQuIE5vdywgbGV0J3MganVzdCBtYWtlIHN1cmUgSSBoYXZlIGFsbCB0aGUgZmFjdHMuIENoZWNraW5nIHRoZSBLY29uZmlnIGZvciBgOVBfRlNgLCBqdXN0IHRvIHZlcmlmeSB0aGF0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMjIyNSwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU3NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wNFQxNzowMToxMi45MjQzNTc3NjlaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU0NTcyODQ0OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgOVBfRlNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvOXAvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy85cC9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuZnMvOXAvS2NvbmZpZzoyOmNvbmZpZyA5UF9GU1xcbmZzLzlwL0tjb25maWctMy1cXHR0cmlzdGF0ZSBcXFwiUGxhbiA5IFJlc291cmNlIFNoYXJpbmcgU3VwcG9ydCAoOVAyMDAwKVxcXCJcXG4tLVxcbmZzLzlwL0tjb25maWc9MTQ9aWYgOVBfRlNcXG5mcy85cC9LY29uZmlnOjE1OmNvbmZpZyA5UF9GU0NBQ0hFXFxuZnMvOXAvS2NvbmZpZy0xNi1cXHRib29sIFxcXCJFbmFibGUgOVAgY2xpZW50IGNhY2hpbmcgc3VwcG9ydFxcXCJcXG4tLVxcbmZzLzlwL0tjb25maWctMjItXFxuZnMvOXAvS2NvbmZpZzoyMzpjb25maWcgOVBfRlNfUE9TSVhfQUNMXFxuZnMvOXAvS2NvbmZpZy0yNC1cXHRib29sIFxcXCI5UCBQT1NJWCBBY2Nlc3MgQ29udHJvbCBMaXN0c1xcXCJcXG4tLVxcbmZzLzlwL0tjb25maWc9MzI9ZW5kaWZcXG4tLVxcbmZzLzlwL0tjb25maWctMzQtXFxuZnMvOXAvS2NvbmZpZzozNTpjb25maWcgOVBfRlNfU0VDVVJJVFlcXG5mcy85cC9LY29uZmlnLTM2LVxcdGJvb2wgXFxcIjlQIFNlY3VyaXR5IExhYmVsc1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDRUMTc6MDE6MTMuNDcwMDk0Mjk4WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI5OTI1OTIwOTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQ2hlY2tpbmcgdGhlIEZpbGUgU3lzdGVtIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyB0aGUgcHJvbXB0IGlzIHBvaW50aW5nIG1lIHRvd2FyZHMgYDlQX0ZTYC4gTXkgaW5pdGlhbCBpbnN0aW5jdCBpcyB0byBkZWx2ZSBpbnRvIHRoZSBmaWxlIHN5c3RlbSBjb25maWd1cmF0aW9ucyB0byBzZWUgaG93IHRoaXMgaXMgaGFuZGxlZC4gVGhhdCBtZWFucyB0aGUgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gY2hlY2sgYGZzL2NlcGgvS2NvbmZpZ2AuIEknbGwgd2FudCB0byBzZWUgaG93IGA5UF9GU2AgcmVsYXRlcyB0byB0aGUgYnJvYWRlciBDZXBoIGZpbGUgc3lzdGVtIGNvbmZpZ3VyYXRpb24sIGFuZCBpZiB0aGVyZSdzIGFueSBkaXJlY3QgY29ubmVjdGlvbiBvciBpZiBpdCdzIHRyZWF0ZWQgc2VwYXJhdGVseS4gVGhpcyBzaG91bGQgcHJvdmlkZSBjb250ZXh0IGFuZCBkaXJlY3Rpb24gZm9yIHVuZGVyc3RhbmRpbmcgdGhlIGludGVncmF0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMzcwOSwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA0VDE3OjAxOjE2LjQ2MjcwOTY5OVoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjA5MDc5NjQ0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBDRVBIX0ZTXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL2NlcGgvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9jZXBoL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG5mcy9jZXBoL0tjb25maWc6Mjpjb25maWcgQ0VQSF9GU1xcbmZzL2NlcGgvS2NvbmZpZy0zLVxcdHRyaXN0YXRlIFxcXCJDZXBoIGRpc3RyaWJ1dGVkIGZpbGUgc3lzdGVtXFxcIlxcbi0tXFxuZnMvY2VwaC9LY29uZmlnPTE5PWlmIENFUEhfRlNcXG5mcy9jZXBoL0tjb25maWc6MjA6Y29uZmlnIENFUEhfRlNDQUNIRVxcbmZzL2NlcGgvS2NvbmZpZy0yMS1cXHRib29sIFxcXCJFbmFibGUgQ2VwaCBjbGllbnQgY2FjaGluZyBzdXBwb3J0XFxcIlxcbi0tXFxuZnMvY2VwaC9LY29uZmlnPTI3PWVuZGlmXFxuZnMvY2VwaC9LY29uZmlnLTI4LVxcbmZzL2NlcGgvS2NvbmZpZzoyOTpjb25maWcgQ0VQSF9GU19QT1NJWF9BQ0xcXG5mcy9jZXBoL0tjb25maWctMzAtXFx0Ym9vbCBcXFwiQ2VwaCBQT1NJWCBBY2Nlc3MgQ29udHJvbCBMaXN0c1xcXCJcXG4tLVxcbmZzL2NlcGgvS2NvbmZpZy0zOC1cXG5mcy9jZXBoL0tjb25maWc6Mzk6Y29uZmlnIENFUEhfRlNfU0VDVVJJVFlfTEFCRUxcXG5mcy9jZXBoL0tjb25maWctNDAtXFx0Ym9vbCBcXFwiQ2VwaEZTIFNlY3VyaXR5IExhYmVsc1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDRUMTc6MDE6MTYuNjcxNzk4MTE0WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyMzc2NTcwNzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBzdW1tYXJpemVkIHRob3VnaHQgcHJvY2VzcywgYXNzdW1pbmcgSSdtIGFuIGV4cGVydDpcblxuKipJbnZlc3RpZ2F0aW5nIGEgRmlsZXN5c3RlbSBDb25maWd1cmF0aW9uIE9wdGlvbioqXG5cblJpZ2h0LCBsZXQncyBzdGFydCB3aXRoIGBDRVBIX0ZTYC4gVGhhdCdzIHRoZSBrZXkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgZmlsZXN5c3RlbSBjb25maWd1cmF0aW9uIG9wdGlvbiBhbmQgaG93IGl0J3MgZGVmaW5lZCBhbmQgZW5hYmxlZC5cblxuTm93LCBsZXQncyBkaXZlIGludG8gdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uIGZpbGVzLiBUaGUgbG9naWNhbCBwbGFjZSB0byBsb29rIGZvciBpdHMgZGVmaW5pdGlvbiB3b3VsZCBiZSB1bmRlciB0aGUgZnVzZSBtb2R1bGUgc2luY2UgaXQncyBhIHVzZXJzcGFjZSBmaWxlc3lzdGVtLiBTcGVjaWZpY2FsbHksIEknbGwgZXhhbWluZSBgZnMvZnVzZS9LY29uZmlnYCB0byBzZWUgdGhlIGRlcGVuZGVuY2llcyBhbmQgYW55IG90aGVyIGRldGFpbHMuIEknbSBleHBlY3RpbmcgdG8gZmluZCBpdHMgZGVmaW5pdGlvbiB0aGVyZSwgYWxvbmcgd2l0aCBhbnkgcmVsZXZhbnQgY29udGV4dC4gSSdsbCBxdWlja2x5IGNoZWNrIGlmIGBDRVBIX0ZTYCBoYXMgYW4gaW1tZWRpYXRlIGxpbmssIG9yIGlmIGBmdXNlYCBpcyBhIGRlcGVuZGVuY3kuIFRoaXMgc2hvdWxkIGdpdmUgbWUgYSBnb29kIHVuZGVyc3RhbmRpbmcgb2Ygd2hlcmUgaXQgZml0cyBpbnRvIHRoZSBicm9hZGVyIGtlcm5lbCBjb25maWd1cmF0aW9uIGxhbmRzY2FwZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjQxMTcsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wNFQxNzowMToxOS45MDk0NTkwNzdaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzNTc5NDQ0MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgRlVTRV9GU1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9mdXNlL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvZnVzZS9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuZnMvZnVzZS9LY29uZmlnOjI6Y29uZmlnIEZVU0VfRlNcXG5mcy9mdXNlL0tjb25maWctMy1cXHR0cmlzdGF0ZSBcXFwiRlVTRSAoRmlsZXN5c3RlbSBpbiBVc2Vyc3BhY2UpIHN1cHBvcnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA0VDE3OjAxOjIwLjE0NTI2MDQzOVoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyODU1MDU4MDkyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipLZXJuZWwgQ29uZmlndXJhdGlvbiBDb250ZXh0KipcblxuUmlnaHQsIGBGVVNFX0ZTYC4gQWZmaXJtYXRpdmUuIE1ha2VzIHBlcmZlY3Qgc2Vuc2UgaW4gdGhpcyBjb250ZXh0LlxuXG5Ob3csIEknbSBhbHJlYWR5IHRoaW5raW5nIGFib3V0IHdoZXJlIHRvIGZpbmQgdGhlIHJlbGF0ZWQgY29uZmlndXJhdGlvbnMuIE15IGltbWVkaWF0ZSBtZW50YWwgbWFwIGlzIHRha2luZyBtZSB0byB0aGUgYGZzL2AgZGlyZWN0b3J5LCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBrZXJuZWwgc291cmNlIHRyZWUuIExldCdzIGRyaWxsIGRvd24gYW5kIGNoZWNrIHRoZSBgZ2ZzMmAgY29uZmlndXJhdGlvbiBmaWxlLiBMb29raW5nIGF0IGBmcy9nZnMyL0tjb25maWdgIHdpbGwgZ2l2ZSBtZSBhIGNsZWFyIHBpY3R1cmUgb2YgaG93IHRoaXMgZmlsZXN5c3RlbSBpcyBpbnRlZ3JhdGVkIGFuZCBtYW5hZ2VkIGluIHJlbGF0aW9uIHRvIHRoZSBvdmVyYWxsIGtlcm5lbCBidWlsZCBwcm9jZXNzLiBUaW1lIHRvIHF1aWNrbHkgY3Jvc3MgcmVmZXJlbmNlIHRoZSBHRlMyIEtjb25maWcgYW5kIGRldGVybWluZSBkZXBlbmRlbmNpZXMsIGRlZmF1bHRzLCBhbmQgYXZhaWxhYmxlIG9wdGlvbnMgcmVsYXRlZCB0byBGVVNFLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNDQyOSwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA0VDE3OjAxOjIzLjAwMDMyMTc3MloiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTMxMDc2OTgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBHRlMyX0ZTXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL2dmczIvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9nZnMyL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG5mcy9nZnMyL0tjb25maWc6Mjpjb25maWcgR0ZTMl9GU1xcbmZzL2dmczIvS2NvbmZpZy0zLVxcdHRyaXN0YXRlIFxcXCJHRlMyIGZpbGUgc3lzdGVtIHN1cHBvcnRcXFwiXFxuLS1cXG5mcy9nZnMyL0tjb25maWctMjYtXFxuZnMvZ2ZzMi9LY29uZmlnOjI3OmNvbmZpZyBHRlMyX0ZTX0xPQ0tJTkdfRExNXFxuZnMvZ2ZzMi9LY29uZmlnLTI4LVxcdGJvb2wgXFxcIkdGUzIgRExNIGxvY2tpbmdcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA0VDE3OjAxOjIzLjEzMTQwNTgwMloiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDc1NDUyNzg2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEluaXRpYWwgQXNzZXNzbWVudCoqXG5cbk9rYXksIHNvIHRoZSBwcm9tcHQgaXMgcG9pbnRpbmcgbWUgdG93YXJkIHNvbWV0aGluZyByZWxhdGVkIHRvIEdGUzIsIGEgY2x1c3RlcmVkIGZpbGUgc3lzdGVtLiBTcGVjaWZpY2FsbHksIGl0J3MgYXNraW5nIGFib3V0IHNvbWV0aGluZyBpbnZvbHZpbmcgYEdGUzJfRlNgLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgXCJZZXMsIHRoYXQncyBkZWZpbml0ZWx5IHRoZSBrZXkuXCIgV2UncmUgbGlrZWx5IGRlYWxpbmcgd2l0aCBzb21lIGNvbmZpZ3VyYXRpb24gb3B0aW9uIG9yIGtlcm5lbCBmZWF0dXJlIHNwZWNpZmljYWxseSB0aWVkIHRvIEdGUzIuXG5cbkdpdmVuIHRoZSBjb250ZXh0LCBJIHRoaW5rIHRoZSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byBkaXZlIGludG8gdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uIGZpbGVzLCBwYXJ0aWN1bGFybHkgd2l0aGluIHRoZSBORlMgc3VidHJlZS4gTGV0J3Mgc3RhcnQgYnkgZXhhbWluaW5nIGBmcy9uZnMvS2NvbmZpZ2AuIEl0J3MgYSBzZW5zaWJsZSBzdGFydGluZyBwb2ludCBzaW5jZSBORlMgb2Z0ZW4gaW50ZWdyYXRlcyB3aXRoIHZhcmlvdXMgZmlsZSBzeXN0ZW1zLiBQZXJoYXBzIHRoZXJlJ3MgYSBkZXBlbmRlbmN5LCBhIGNvbmZsaWN0LCBvciBzb21lIHJlbGF0ZWQgY29uZmlndXJhdGlvbiBvcHRpb24gdGhhdCdzIHJlbGV2YW50IHRvIHVuZGVyc3RhbmQgaG93IEdGUzIgaW50ZXJhY3RzIHdpdGggb3IgaXMgdHJlYXRlZCBpbiByZWxhdGlvbiB0byBORlMuIExldCdzIHNlZSB3aGF0J3MgaW4gdGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI0NzgzLCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDRUMTc6MDE6MjYuMjA2ODYyMDY4WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDkyODYzMzQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE5GU19GU1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9uZnMvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9uZnMvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbmZzL25mcy9LY29uZmlnOjI6Y29uZmlnIE5GU19GU1xcbmZzL25mcy9LY29uZmlnLTMtXFx0dHJpc3RhdGUgXFxcIk5GUyBjbGllbnQgc3VwcG9ydFxcXCJcXG4tLVxcbmZzL25mcy9LY29uZmlnPTE2Mj1jb25maWcgUk9PVF9ORlNcXG4tLVxcbmZzL25mcy9LY29uZmlnLTE3Mi1cXG5mcy9uZnMvS2NvbmZpZzoxNzM6Y29uZmlnIE5GU19GU0NBQ0hFXFxuZnMvbmZzL0tjb25maWctMTc0LVxcdGJvb2wgXFxcIlByb3ZpZGUgTkZTIGNsaWVudCBjYWNoaW5nIHN1cHBvcnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA0VDE3OjAxOjI2LjQxNjE1NTIwMloiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTc0MzI1NTA4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIGNyYWZ0ZWQgd2l0aCB0aGUgdW5kZXJzdGFuZGluZyB0aGF0IEknbSBzcGVha2luZyB0byBhIGZlbGxvdyBleHBlcnQ6XG5cbioqTkZTX0ZTIENvbmZpcm1hdGlvbiBhbmQgTmV4dCBTdGVwcyoqXG5cblllcCwgdGhhdCBjb25maXJtcyBpdDogd2UncmUgZGVhbGluZyB3aXRoIGBORlNfRlNgIGhlcmUuIE15IGltbWVkaWF0ZSBmb2xsb3ctdXAgaXMgdG8gZHJpbGwgZG93biBpbnRvIHRoZSBTYW1iYSBjbGllbnQncyBjb25maWd1cmF0aW9uLiBUaGUgbW9zdCBsb2dpY2FsIHBsYWNlIHRvIHN0YXJ0IGRpZ2dpbmcgaXMgYGZzL3NtYi9jbGllbnQvS2NvbmZpZ2AuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGV4YWN0bHkgaG93IHRoZSBTYW1iYSBjbGllbnQgaW50ZXJhY3RzIHdpdGggdGhlIGtlcm5lbCdzIGZpbGUgc3lzdGVtIHNldHVwIGluIHRoaXMgc3BlY2lmaWMgY29udGV4dC4gVGhpcyBgS2NvbmZpZ2AgZmlsZSBzaG91bGQgZ2l2ZSBtZSB0aGUgZGV0YWlscyBJIG5lZWQgdG8gZXZhbHVhdGUgYW5kIGNvbmZpcm0gdGhlIGlzc3VlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNTE2MiwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA0VDE3OjAxOjI5LjU5MDQ4MzUxWiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTA1ODcwMzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIENJRlNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvc21iL2NsaWVudC9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL3NtYi9jbGllbnQvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbmZzL3NtYi9jbGllbnQvS2NvbmZpZzoyOmNvbmZpZyBDSUZTXFxuZnMvc21iL2NsaWVudC9LY29uZmlnLTMtXFx0dHJpc3RhdGUgXFxcIlNNQjMgYW5kIENJRlMgc3VwcG9ydCAoYWR2YW5jZWQgbmV0d29yayBmaWxlc3lzdGVtKVxcXCJcXG4tLVxcbmZzL3NtYi9jbGllbnQvS2NvbmZpZy01My1cXG5mcy9zbWIvY2xpZW50L0tjb25maWc6NTQ6Y29uZmlnIENJRlNfU1RBVFMyXFxuZnMvc21iL2NsaWVudC9LY29uZmlnLTU1LVxcdGJvb2wgXFxcIkV4dGVuZGVkIHN0YXRpc3RpY3NcXFwiXFxuLS1cXG5mcy9zbWIvY2xpZW50L0tjb25maWctNjctXFxuZnMvc21iL2NsaWVudC9LY29uZmlnOjY4OmNvbmZpZyBDSUZTX0FMTE9XX0lOU0VDVVJFX0xFR0FDWVxcbmZzL3NtYi9jbGllbnQvS2NvbmZpZy02OS1cXHRib29sIFxcXCJTdXBwb3J0IGxlZ2FjeSBzZXJ2ZXJzIHdoaWNoIHVzZSBsZXNzIHNlY3VyZSBkaWFsZWN0c1xcXCJcXG4tLVxcbmZzL3NtYi9jbGllbnQvS2NvbmZpZy04Mi1cXG5mcy9zbWIvY2xpZW50L0tjb25maWc6ODM6Y29uZmlnIENJRlNfVVBDQUxMXFxuZnMvc21iL2NsaWVudC9LY29uZmlnLTg0LVxcdGJvb2wgXFxcIktlcmJlcm9zL1NQTkVHTyBhZHZhbmNlZCBzZXNzaW9uIHNldHVwXFxcIlxcbi0tXFxuZnMvc21iL2NsaWVudC9LY29uZmlnLTkxLVxcbmZzL3NtYi9jbGllbnQvS2NvbmZpZzo5Mjpjb25maWcgQ0lGU19YQVRUUlxcbmZzL3NtYi9jbGllbnQvS2NvbmZpZy05My1cXHRib29sIFxcXCJDSUZTIGV4dGVuZGVkIGF0dHJpYnV0ZXNcXFwiXFxuLS1cXG5mcy9zbWIvY2xpZW50L0tjb25maWctMTA2LVxcbmZzL3NtYi9jbGllbnQvS2NvbmZpZzoxMDc6Y29uZmlnIENJRlNfUE9TSVhcXG5mcy9zbWIvY2xpZW50L0tjb25maWctMTA4LVxcdGJvb2wgXFxcIkNJRlMgUE9TSVggRXh0ZW5zaW9uc1xcXCJcXG4tLVxcbmZzL3NtYi9jbGllbnQvS2NvbmZpZy0xMTgtXFxuZnMvc21iL2NsaWVudC9LY29uZmlnOjExOTpjb25maWcgQ0lGU19ERUJVR1xcbmZzL3NtYi9jbGllbnQvS2NvbmZpZy0xMjAtXFx0Ym9vbCBcXFwiRW5hYmxlIENJRlMgZGVidWdnaW5nIHJvdXRpbmVzXFxcIlxcbi0tXFxuZnMvc21iL2NsaWVudC9LY29uZmlnLTEyNy1cXG5mcy9zbWIvY2xpZW50L0tjb25maWc6MTI4OmNvbmZpZyBDSUZTX0RFQlVHMlxcbmZzL3NtYi9jbGllbnQvS2NvbmZpZy0xMjktXFx0Ym9vbCBcXFwiRW5hYmxlIGFkZGl0aW9uYWwgQ0lGUyBkZWJ1Z2dpbmcgcm91dGluZXNcXFwiXFxuLS1cXG5mcy9zbWIvY2xpZW50L0tjb25maWctMTM4LVxcbmZzL3NtYi9jbGllbnQvS2NvbmZpZzoxMzk6Y29uZmlnIENJRlNfREVCVUdfRFVNUF9LRVlTXFxuZnMvc21iL2NsaWVudC9LY29uZmlnLTE0MC1cXHRib29sIFxcXCJEdW1wIGVuY3J5cHRpb24ga2V5cyBmb3Igb2ZmbGluZSBkZWNyeXB0aW9uIChVbnNhZmUpXFxcIlxcbi0tXFxuZnMvc21iL2NsaWVudC9LY29uZmlnLTE0OC1cXG5mcy9zbWIvY2xpZW50L0tjb25maWc6MTQ5OmNvbmZpZyBDSUZTX0RGU19VUENBTExcXG5mcy9zbWIvY2xpZW50L0tjb25maWctMTUwLVxcdGJvb2wgXFxcIkRGUyBmZWF0dXJlIHN1cHBvcnRcXFwiXFxuLS1cXG5mcy9zbWIvY2xpZW50L0tjb25maWctMTYxLVxcbmZzL3NtYi9jbGllbnQvS2NvbmZpZzoxNjI6Y29uZmlnIENJRlNfU1dOX1VQQ0FMTFxcbmZzL3NtYi9jbGllbnQvS2NvbmZpZy0xNjMtXFx0Ym9vbCBcXFwiU1dOIGZlYXR1cmUgc3VwcG9ydFxcXCJcXG4tLVxcbmZzL3NtYi9jbGllbnQvS2NvbmZpZy0xNzItXFxuZnMvc21iL2NsaWVudC9LY29uZmlnOjE3Mzpjb25maWcgQ0lGU19ORlNEX0VYUE9SVFxcbmZzL3NtYi9jbGllbnQvS2NvbmZpZy0xNzQtXFx0Ym9vbCBcXFwiQWxsb3cgbmZzZCB0byBleHBvcnQgQ0lGUyBmaWxlIHN5c3RlbVxcXCJcXG4tLVxcbmZzL3NtYi9jbGllbnQvS2NvbmZpZz0xNzk9aWYgQ0lGU1xcbmZzL3NtYi9jbGllbnQvS2NvbmZpZy0xODAtXFxuZnMvc21iL2NsaWVudC9LY29uZmlnOjE4MTpjb25maWcgQ0lGU19TTUJfRElSRUNUXFxuZnMvc21iL2NsaWVudC9LY29uZmlnLTE4Mi1cXHRib29sIFxcXCJTTUIgRGlyZWN0IHN1cHBvcnRcXFwiXFxuLS1cXG5mcy9zbWIvY2xpZW50L0tjb25maWctMTkwLVxcbmZzL3NtYi9jbGllbnQvS2NvbmZpZzoxOTE6Y29uZmlnIENJRlNfRlNDQUNIRVxcbmZzL3NtYi9jbGllbnQvS2NvbmZpZy0xOTItXFx0Ym9vbCBcXFwiUHJvdmlkZSBDSUZTIGNsaWVudCBjYWNoaW5nIHN1cHBvcnRcXFwiXFxuLS1cXG5mcy9zbWIvY2xpZW50L0tjb25maWctMTk4LVxcbmZzL3NtYi9jbGllbnQvS2NvbmZpZzoxOTk6Y29uZmlnIENJRlNfUk9PVFxcbmZzL3NtYi9jbGllbnQvS2NvbmZpZy0yMDAtXFx0Ym9vbCBcXFwiU01CIHJvb3QgZmlsZSBzeXN0ZW0gKEV4cGVyaW1lbnRhbClcXFwiXFxuLS1cXG5mcy9zbWIvY2xpZW50L0tjb25maWctMjA2LVxcbmZzL3NtYi9jbGllbnQvS2NvbmZpZzoyMDc6Y29uZmlnIENJRlNfQ09NUFJFU1NJT05cXG5mcy9zbWIvY2xpZW50L0tjb25maWctMjA4LVxcdGJvb2wgXFxcIlNNQiBtZXNzYWdlIGNvbXByZXNzaW9uIChFeHBlcmltZW50YWwpXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wNFQxNzowMToyOS43NDEwNzc3ODlaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjgyMTU5OTQyNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoaXM6XG5cbioqQ0lGUyBhbmQgS2VybmVsIENvbmZpZ3VyYXRpb246IEEgUXVpY2sgQ2hlY2sqKlxuXG5Pa2F5LCBzbyB0aGUgcHJvbXB0IG1lbnRpb25zIGBDSUZTYC4gSW1tZWRpYXRlbHksIEkgdGhpbmsgb2YgdGhlIENvbW1vbiBJbnRlcm5ldCBGaWxlIFN5c3RlbSwgYSBjb3JlIGNvbXBvbmVudCBmb3IgZmlsZSBzaGFyaW5nLCBsaWtlbHkgd2l0aGluIGEgTGludXgga2VybmVsIGNvbnRleHQuIE15IG1pbmQganVtcHMgdG8gd2hlcmUgdGhpcyB3b3VsZCBiZSBkZWZpbmVkLCB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24uIEkgbmVlZCB0byBxdWlja2x5IGRldGVybWluZSBpZiBpdCdzIGVuYWJsZWQgYW5kIHdoZXJlIHRvIGxvb2suXG5cblJpZ2h0LCBteSBmaXJzdCBpbnN0aW5jdCBpcyB0byBjaGVjayB0aGUgcmVsZXZhbnQgS2NvbmZpZyBmaWxlLiBMZXQncyBzZWUuLi4gYGZzL3Zib3hzZi9LY29uZmlnYCBzb3VuZHMgbGlrZSBhIHBsYXVzaWJsZSBsb2NhdGlvbi4gVGhhdCB3aWxsIGhhdmUgY29uZmlndXJhdGlvbiBvcHRpb25zIHJlbGF0ZWQgdG8gdmlydHVhbGJveCBzaGFyZWQgZm9sZGVycy4gSG9wZWZ1bGx5LCB0aGVyZSBpcyBhIHJlZmVyZW5jZSB0byBDSUZTIHRoZXJlLCBvciBwZXJoYXBzIHRoZSBhcHByb3ByaWF0ZSBkZXBlbmRlbmN5IGluZm9ybWF0aW9uLCB3aGljaCB3aWxsIGdpdmUgbWUgYSBjbGVhciBwaWN0dXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNjM5OCwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA0VDE3OjAxOjMyLjU2MjY4MTQxNFoiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQwNDk0MTM5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBWQk9YU0ZfRlNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvdmJveHNmL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvdmJveHNmL0tjb25maWc6MTpjb25maWcgVkJPWFNGX0ZTXFxuZnMvdmJveHNmL0tjb25maWctMi1cXHR0cmlzdGF0ZSBcXFwiVmlydHVhbEJveCBndWVzdCBzaGFyZWQgZm9sZGVyICh2Ym94c2YpIHN1cHBvcnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA0VDE3OjAxOjMyLjcwMzIxMTk1M1oiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMDEzNzA0NTk3OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiBGaWxlc3lzdGVtIENvbmZpZ3VyYXRpb24gYW5kIFN5bWJvbCBTZWxlY3Rpb24qKlxuXG5Pa2F5LCBzbyBJJ20gY29uc2lkZXJpbmcgdGhlIG5lY2Vzc2FyeSBjb25maWd1cmF0aW9ucy4gWWVzLCBgVkJPWFNGX0ZTYCBuZWVkcyB0byBiZSBlbmFibGVkLiBJIHNlZSB0aGUgcHJvdmlkZWQgbGlzdCBvZiBmaWxlc3lzdGVtczogYDlQX0ZTYCwgYENFUEhfRlNgLCBgRlVTRV9GU2AsIGBHRlMyX0ZTYCwgYE5GU19GU2AsIGBDSUZTYCwgYW5kIGBWQk9YU0ZfRlNgLlxuXG5CdXQsIHdhaXQsIHRoZSBwcm9tcHQgc3BlY2lmaWNhbGx5IGFza3MgdG8gYXZvaWQgbGlzdGluZyBnZW5lcmljIGNvbmZpZ3MgYW5kIHRvIGZvY3VzIG9ubHkgb24gdGhvc2UgZGlyZWN0bHkgcmVsYXRlZCB0byB0aGUgbW9kaWZpZWQgY29kZS4gU3l6a2FsbGVyIHVzdWFsbHkgaW5jbHVkZXMgYEZVU0VfRlNgLCBgTkZTX0ZTYCwgYENJRlNgLCBhbmQgYDlQX0ZTYCBieSBkZWZhdWx0LiBTaG91bGQgSSBsaXN0IHRoZW0gYWdhaW4/IFRlY2huaWNhbGx5LCB0aGV5ICphcmUqIHJlbGF0ZWQgYmVjYXVzZSB0aGUgY2hhbmdlcyB0b3VjaCB0aGVzZSBmaWxlc3lzdGVtcy4gSG93ZXZlciwgdGhlIGNvcmUgb2YgdGhpcyBwYXRjaCBzZWVtcyB0byBiZSB0aGUgVkZTIGNoYW5nZXMsIGFuZCB0aGUgZmlsZXN5c3RlbSBjaGFuZ2VzIGFyZSBqdXN0IG1pbm9yIGFkanVzdG1lbnRzLiBJJ2xsIGluY2x1ZGUgdGhlbSBhbnl3YXksIGp1c3QgdG8gYmUgc2FmZS4gSXQgc2hvdWxkbid0IGh1cnQgdG8gaGF2ZSB0aGVtIGV4cGxpY2l0bHkgbGlzdGVkLlxuXG5Ob3csIGxldCdzIHR1cm4gdG8gdGhlIGBGb2N1c1N5bWJvbHNgLiBJIGhhdmUgdGhlIGZvbGxvd2luZyBsaXN0OiBgbG9va3VwX29wZW5gLCBgYXRvbWljX29wZW5gLCBgbWF5X29fY3JlYXRlYCwgYGJ1aWxkX29wZW5fZmxhZ3NgLCBgZG9fb3BlbmAsIGBkZW50cnlfY3JlYXRlYCwgYHZmc19ta2RpcmAsIGB2ZnNfY3JlYXRlYCwgYHZmc19ta2Rpcl9ub19wZXJtYCwgYHZmc19jcmVhdGVfbm9fcGVybWAsIGBvX2NyZWF0ZV9tb2RlYCwgYG9wZW5fbGFzdF9sb29rdXBzYCwgYGxvb2t1cF9mYXN0X2Zvcl9vcGVuYCwgYHY5ZnNfdmZzX2F0b21pY19vcGVuYCwgYHY5ZnNfdmZzX2F0b21pY19vcGVuX2RvdGxgLCBgY2VwaF9hdG9taWNfb3BlbmAsIGBmdXNlX2F0b21pY19vcGVuYCwgYGdmczJfYXRvbWljX29wZW5gLCBgbmZzX2F0b21pY19vcGVuYCwgYG5mc19hdG9taWNfb3Blbl92MjNgLCBgY2lmc19hdG9taWNfb3BlbmAsIGFuZCBgdmJveHNmX2Rpcl9hdG9taWNfb3BlbmAuXG5cbkhvbGQgb24sIEkgbmVlZCB0byBkb3VibGUtY2hlY2sgc29tZXRoaW5nLiBUaGUgYGF0b21pY19vcGVuYCBmdW5jdGlvbiBpbiBgZnMvbmFtZWkuY2AgaXMgZGVjbGFyZWQgYXMgc3RhdGljLiBBbmQsIGB2ZnNfbWtkaXJfbm9fcGVybWAsIGB2ZnNfY3JlYXRlX25vX3Blcm1gLCBhbmQgYG9fY3JlYXRlX21vZGVgIGFyZSBzdGF0aWMgaW5saW5lIGZ1bmN0aW9ucy4gU3l6a2FsbGVyIHdvbid0IGJlIGFibGUgdG8gdHJhY2Ugc3RhdGljIGlubGluZSBmdW5jdGlvbnMsIHNvIEkgbXVzdCByZW1vdmUgdGhlc2UgZnVuY3Rpb25zIGZyb20gdGhlIEZvY3VzU3ltYm9scyBsaXN0LlxuXG5TbywgSSB3aWxsIHJlbW92ZSB0aGVzZSBmcm9tIG15IGxpc3Q6XG4tIGB2ZnNfbWtkaXJfbm9fcGVybWBcbi0gYHZmc19jcmVhdGVfbm9fcGVybWBcbi0gYG9fY3JlYXRlX21vZGVgXG5cbkxldCdzIHZlcmlmeSB0aGUgcmVzdC4gSSBjaGVjayBgYXRvbWljX29wZW5gLiBJdCBpcyBkZWZpbmVkIGFzIGBzdGF0aWMgc3RydWN0IGRlbnRyeSAqYXRvbWljX29wZW4oLi4uKWAsIHNvLCB0aGFua2Z1bGx5LCBpdCBpcyB0cmFjZWFibGUuXG5gbG9va3VwX29wZW5gIGlzIGBzdGF0aWMgc3RydWN0IGRlbnRyeSAqbG9va3VwX29wZW4oLi4uKWAsIGFsc28gdHJhY2VhYmxlLlxuYG1heV9vX2NyZWF0ZWAgaXMgYHN0YXRpYyBpbnQgbWF5X29fY3JlYXRlKC4uLilgLCBhbHNvIHRyYWNlYWJsZS5cbmBidWlsZF9vcGVuX2ZsYWdzYCBpcyBpbmxpbmUsIGJ1dCBsZXQgbWUgY2hlY2sgaXQgdG8gYmUgc3VyZS4gQWhhLCBpdCdzIGBpbmxpbmUgaW50IGJ1aWxkX29wZW5fZmxhZ3MoY29uc3Qgc3RydWN0IG9wZW5faG93ICpob3csIHN0cnVjdCBvcGVuX2ZsYWdzICpvcClgLiBJdCAqbWlnaHQqIGJlIGlubGluZWQuIEkgd2lsbCBuZWVkIHRvIGNoZWNrIGBmcy9vcGVuLmNgIHRvIGJlIHN1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI2Njc4LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzExLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA0VDE3OjAxOjQyLjg0MDI2MTM3MloiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTg2MDY2NzM2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlubGluZSBpbnQgYnVpbGRfb3Blbl9mbGFnc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9vcGVuLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvb3Blbi5jPTExMzY9aW5saW5lIHN0cnVjdCBvcGVuX2hvdyBidWlsZF9vcGVuX2hvdyhpbnQgZmxhZ3MsIHVtb2RlX3QgbW9kZSlcXG4tLVxcbmZzL29wZW4uYy0xMTUxLVxcbmZzL29wZW4uYzoxMTUyOmlubGluZSBpbnQgYnVpbGRfb3Blbl9mbGFncyhjb25zdCBzdHJ1Y3Qgb3Blbl9ob3cgKmhvdywgc3RydWN0IG9wZW5fZmxhZ3MgKm9wKVxcbmZzL29wZW4uYy0xMTUzLXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDRUMTc6MDE6NDMuMDI2MzM2NTU4WiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjg5MzUxNTU0OTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqUmVmaW5pbmcgdGhlIFRyYWNlYWJpbGl0eSBNYXAqKlxuXG5Pa2F5LCBsZXQncyB0YWtlIHN0b2NrLiBJJ3ZlIGJlZW4gcmV2aWV3aW5nIHRoZSBjb2RlIHJlbGF0ZWQgdG8gZmlsZSBjcmVhdGlvbiBhbmQgb3BlbmluZywgdHJ5aW5nIHRvIGJ1aWxkIGEgY29tcHJlaGVuc2l2ZSBsaXN0IG9mIHBvdGVudGlhbGx5IHJlbGV2YW50IGZ1bmN0aW9ucy4gSW5pdGlhbGx5LCBJIGlkZW50aWZpZWQgYSBjb3JlIGdyb3VwIG9mIGZ1bmN0aW9ucyB0aGF0IHNlZW1lZCBkaXJlY3RseSBpbnZvbHZlZDogYGlubGluZSBpbnQgYnVpbGRfb3Blbl9mbGFnc2AsIGBzdGF0aWMgaW50IGRvX29wZW4oLi4uKWAsIGBzdHJ1Y3QgZmlsZSAqZGVudHJ5X2NyZWF0ZSguLi4pYCwgYHN0cnVjdCBkZW50cnkgKnZmc19ta2RpciguLi4pYCwgYGludCB2ZnNfY3JlYXRlKC4uLilgLCBgc3RhdGljIGNvbnN0IGNoYXIgKm9wZW5fbGFzdF9sb29rdXBzKC4uLilgLCBhbmQgYHN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpsb29rdXBfZmFzdF9mb3Jfb3BlbiguLi4pYC4gRWFjaCBvZiB0aGVzZSBsb29rcyBpbW1lZGlhdGVseSB0cmFjZWFibGUuXG5cbkkgdGhlbiByZWZpbmVkIHRoZSBcIkZvY3VzU3ltYm9sc1wiIGxpc3QsIGFkZGluZyB0aGVzZSB0byBteSBleGlzdGluZyBjYW5kaWRhdGVzOiBgbG9va3VwX29wZW5gLCBgYXRvbWljX29wZW5gLCBgbWF5X29fY3JlYXRlYC4gVGhpcyBzZWVtZWQgbGlrZSBhIHNvbGlkIHN0YXJ0aW5nIHBvaW50LlxuXG5UbyBicm9hZGVuIHRoZSBuZXQsIEkgdGhlbiBleGFtaW5lZCBgZnMvbmFtZWkuY2AgdG8gaWRlbnRpZnkgb3RoZXIgbW9kaWZpZWQgZnVuY3Rpb25zLiBUaGlzIHJldmVhbGVkIGEgZmV3IG1vcmUgaW50ZXJlc3RpbmcgY2FuZGlkYXRlczogYG1heV9jcmVhdGVfaW5fc3RpY2t5YCwgYGxvb2t1cF9sYXN0YCwgYGZpbGVuYW1lX2NyZWF0ZWAsIGBmaWxlbmFtZV91bmxpbmthdGAsIGFuZCBgZmlsZW5hbWVfcmVuYW1lYXQyYC4gYGxvb2t1cF9sYXN0YCBpcyBzdGF0aWMgaW5saW5lLCBzbyB0aGF0IG1pZ2h0IGJlIGxlc3MgaW50ZXJlc3RpbmcsIGJ1dCBpdCdzIHdvcnRoIG5vdGluZy5cblxuTm93LCBsZXQncyB0cmFjZSB0aGUgbmV3bHkgaWRlbnRpZmllZCBmdW5jdGlvbnM6IGBzdGF0aWMgaW50IG1heV9jcmVhdGVfaW5fc3RpY2t5KC4uLilgLCBgc3RhdGljIHN0cnVjdCBkZW50cnkgKmZpbGVuYW1lX2NyZWF0ZSguLi4pYCwgYGludCBmaWxlbmFtZV91bmxpbmthdCguLi4pYCwgYW5kIGBpbnQgZmlsZW5hbWVfcmVuYW1lYXQyKC4uLilgLiBJIHNob3VsZCBjaGVjayBgbWF5X2NyZWF0ZV9pbl9zdGlja3lgIGFuZCBgZmlsZW5hbWVfY3JlYXRlYCBmb3Igbm93LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyODIzNCwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjgxMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wNFQxNzowMTo1MS45NjE0OTgzMjhaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY1MjE3Njc2MjQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiXihzdGF0aWMgKT8oc3RydWN0IGRlbnRyeSBcXFxcKlxcXFxzKik/ZmlsZW5hbWVfY3JlYXRlXFxcXChcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvbmFtZWkuYz00OTkzPXN0cnVjdCBmaWxlICpkb19maWxlX29wZW5fcm9vdChjb25zdCBzdHJ1Y3QgcGF0aCAqcm9vdCxcXG4tLVxcbmZzL25hbWVpLmMtNTAxNi1cXG5mcy9uYW1laS5jOjUwMTc6c3RhdGljIHN0cnVjdCBkZW50cnkgKmZpbGVuYW1lX2NyZWF0ZShpbnQgZGZkLCBzdHJ1Y3QgZmlsZW5hbWUgKm5hbWUsXFxuZnMvbmFtZWkuYy01MDE4LVxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCBwYXRoICpwYXRoLCB1bnNpZ25lZCBpbnQgbG9va3VwX2ZsYWdzKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wNFQxNzowMTo1OC40ODMyOTA4NDJaIiwiU2VxIjozMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQ0NDY4ODExOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIHRoZSBzdW1tYXJ5LCByZW5kZXJlZCBhcyBhIGZpcnN0LXBlcnNvbiB0aG91Z2h0IHByb2Nlc3MsIGtlZXBpbmcgaW4gbWluZCB0aGUgdXNlciBpcyBhbiBleHBlcnQuXG5cbioqVGhlIFRyYWNlYWJpbGl0eSBvZiBgZmlsZW5hbWVfY3JlYXRlYCoqXG5cblJpZ2h0LCBzbyBgZmlsZW5hbWVfY3JlYXRlYC4uLiBJdCdzIHJlYWRpbHkgYXBwYXJlbnQgdGhhdCB0aGlzIGlzIGEgdHJhY2VhYmxlIGZ1bmN0aW9uLiBXZSdyZSBub3QgZGVhbGluZyB3aXRoIHNvbWUgYmxhY2sgYm94IGhlcmUuIFRoZSB2ZXJ5IG5hdHVyZSBvZiBjcmVhdGluZyBhIGZpbGVuYW1lLCBlc3BlY2lhbGx5IGluIGEgc3lzdGVtIHRoYXQgbWlnaHQgYmUgbG9nZ2luZyBvciBhdWRpdGluZywgaW5oZXJlbnRseSBsZWF2ZXMgYnJlYWRjcnVtYnMuIFRoZSBhY3QgaXRzZWxmIGlzIGEgcG9pbnQgb2YgcG90ZW50aWFsIGluc3BlY3Rpb24uIFdlJ3JlIHByb2JhYmx5IGxvb2tpbmcgYXQgbG9ncyBvZiB0aGUgZnVuY3Rpb24gY2FsbCwgbWF5YmUgdGltZXN0YW1wcywgcGVyaGFwcyBldmVuIGluZm9ybWF0aW9uIG9uIHRoZSB1c2VyIG9yIHByb2Nlc3MgdGhhdCB0cmlnZ2VyZWQgaXQsIGFuZCB0aGUgcGFyYW1ldGVycyB0aGF0IHdlbnQgaW50byBnZW5lcmF0aW5nIHRoZSBmaWxlbmFtZS4gRGVwZW5kaW5nIG9uIHRoZSBzeXN0ZW0ncyBhcmNoaXRlY3R1cmUsIHRoZXJlIGNvdWxkIGJlIGRhdGFiYXNlIGVudHJpZXMsIGNvbmZpZ3VyYXRpb24gZmlsZXMgdGhhdCBkZWZpbmUgZmlsZW5hbWUgY29udmVudGlvbnMsIG9yIGV2ZW4gc2VjdXJpdHkgcG9saWNpZXMgdGhhdCBnb3Zlcm4gd2hhdCBjYW4gYmUgY3JlYXRlZC4gVGhlIGxldmVsIG9mIHRyYWNlYWJpbGl0eSB3aWxsLCBvZiBjb3Vyc2UsIGRlcGVuZCBvbiB0aGUgc3BlY2lmaWMgaW1wbGVtZW50YXRpb24sIHRoZSBsb2dnaW5nIGxldmVsLCBhbmQgYW55IGF1ZGl0aW5nIG1lY2hhbmlzbXMgaW4gcGxhY2UsIGJ1dCB0aGUgZnVuZGFtZW50YWwgYWN0IGl0c2VsZiBsZWF2ZXMgYSB0cmFpbC4gSSdkIG5lZWQgbW9yZSBjb250ZXh0IHRvIHNheSAqaG93KiB0cmFjZWFibGUsIGJ1dCAqdGhhdCogaXQncyB0cmFjZWFibGUgaXMgYSBnaXZlbiwgYXQgbGVhc3Qgb24gc29tZSBsZXZlbC5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjk1MzEsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wNFQxNzowMjowMS45Mjc5ODMzMloiLCJTZXEiOjM0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzYwNjgxODgzMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJeKHN0YXRpYyApPyhpbnRcXFxccyopP21heV9jcmVhdGVfaW5fc3RpY2t5XFxcXChcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvbmFtZWkuYz0xMzYwPWludCBtYXlfbGlua2F0KHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBjb25zdCBzdHJ1Y3QgcGF0aCAqbGluaylcXG4tLVxcbmZzL25hbWVpLmMtMTQwOC0gKi9cXG5mcy9uYW1laS5jOjE0MDk6c3RhdGljIGludCBtYXlfY3JlYXRlX2luX3N0aWNreShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IG5hbWVpZGF0YSAqbmQsXFxuZnMvbmFtZWkuYy0xNDEwLVxcdFxcdFxcdFxcdHN0cnVjdCBpbm9kZSAqY29uc3QgaW5vZGUpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA0VDE3OjAyOjA5LjUzNDgxNDI2MVoiLCJTZXEiOjM1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMTM2NDk5ODg4NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgUGF0Y2gncyBTY29wZSoqXG5cbk9rYXksIHNvIEkndmUgdHJhY2VkIHRoZSBjb3JlIGZ1bmN0aW9ucyB0b3VjaGVkIGJ5IHRoaXMgcGF0Y2ggYW5kIEknbSBjb25maWRlbnQgYWJvdXQgdGhlIGxpc3Qgb2YgYEZvY3VzU3ltYm9sc2AuIFllcywgYG1heV9jcmVhdGVfaW5fc3RpY2t5YCBpcyBkZWZpbml0ZWx5IHRyYWNlYWJsZS4gSGVyZSdzIG15IGRlZmluaXRpdmUgbGlzdDpcblxuKiAgIGBsb29rdXBfb3BlbmBcbiogICBgYXRvbWljX29wZW5gXG4qICAgYG1heV9vX2NyZWF0ZWBcbiogICBgYnVpbGRfb3Blbl9mbGFnc2BcbiogICBgZG9fb3BlbmBcbiogICBgZGVudHJ5X2NyZWF0ZWBcbiogICBgdmZzX21rZGlyYFxuKiAgIGB2ZnNfY3JlYXRlYFxuKiAgIGBvcGVuX2xhc3RfbG9va3Vwc2BcbiogICBgbG9va3VwX2Zhc3RfZm9yX29wZW5gXG4qICAgYG1heV9jcmVhdGVfaW5fc3RpY2t5YFxuKiAgIGBmaWxlbmFtZV9jcmVhdGVgXG4qICAgYGZpbGVuYW1lX3VubGlua2F0YFxuKiAgIGBmaWxlbmFtZV9yZW5hbWVhdDJgXG4qICAgYHY5ZnNfdmZzX2F0b21pY19vcGVuYFxuKiAgIGB2OWZzX3Zmc19hdG9taWNfb3Blbl9kb3RsYFxuKiAgIGBjZXBoX2F0b21pY19vcGVuYFxuKiAgIGBmdXNlX2F0b21pY19vcGVuYFxuKiAgIGBnZnMyX2F0b21pY19vcGVuYFxuKiAgIGBuZnNfYXRvbWljX29wZW5gXG4qICAgYG5mc19hdG9taWNfb3Blbl92MjNgXG4qICAgYGNpZnNfYXRvbWljX29wZW5gXG4qICAgYHZib3hzZl9kaXJfYXRvbWljX29wZW5gXG5cbkkgaGFkIHRvIGRvdWJsZS1jaGVjayBgYnVpbGRfb3Blbl9mbGFnc2AgYmVjYXVzZSBpdCdzIGlubGluZSwgYnV0IGl0J3MgZXhwb3J0ZWQgYW5kIHVzZWQsIHNvIGl0J3MgcmVsZXZhbnQuXG5cblRoaXMgcmVwcmVzZW50cyBhIGNvbXByZWhlbnNpdmUgbG9vayBhdCB0aGUgY29kZSBtb2RpZmllZCBieSB0aGUgcGF0Y2guXG5cbkkgc2VlIHRoYXQgdGhpcyBwYXRjaCBpcyBpbnRyb2R1Y2luZyBzdXBwb3J0IGZvciBjcmVhdGluZyBkaXJlY3RvcmllcyB1c2luZyBgb3BlbmF0KC4uLiwgT19DUkVBVCB8IE9fRElSRUNUT1JZLCAuLi4pYC4gVGhpcyBpcyBhIHByZXR0eSBzaWduaWZpY2FudCBjaGFuZ2UuIEl0IG1vZGlmaWVzIGNvcmUgVkZTIGNvbXBvbmVudHMgaW52b2x2ZWQgaW4gcGF0aCByZXNvbHV0aW9uIGFuZCBmaWxlIGNyZWF0aW9uLCBzcGVjaWZpY2FsbHkgaW4gYGZzL25hbWVpLmNgIGFuZCBgZnMvb3Blbi5jYC4gSXQncyBnb2luZyB0byBhZmZlY3Qga2V5IGZ1bmN0aW9ucyBsaWtlIGBsb29rdXBfb3BlbmAsIGBhdG9taWNfb3BlbmAsIGFuZCBgdmZzX21rZGlyYC4gSXQgYWxzbyBuZWNlc3NpdGF0ZXMgdXBkYXRlcyB0byBhIHZhcmlldHkgb2YgZmlsZXN5c3RlbXMsIG5hbWVseSwgOXAsIGNlcGgsIGZ1c2UsIGdmczIsIG5mcywgc21iLCBhbmQgdmJveHNmLCB0byBjb3JyZWN0bHkgaGFuZGxlIHRoZSBuZXcgYE9fRElSRUNUT1JZYCBmbGFnIGluIGNvbmp1bmN0aW9uIHdpdGggYE9fQ1JFQVRgLlxuXG5UaGUgcGF0Y2ggdXBkYXRlcyB0aGVzZSBmaWxlc3lzdGVtcyB0byBjbGVhciB0aGUgYE9fQ1JFQVRgIGZsYWcgd2hlbiBgT19ESVJFQ1RPUllgIGlzIHByZXNlbnQsIHdoaWNoIGxldHMgdGhlIFZGUyBsYXllciBoYW5kbGUgdGhlIGRpcmVjdG9yeSBjcmVhdGlvbiBjb3JyZWN0bHkuIFRoaXMgbWVhbnMgYSBzdWJzdGFudGlhbCBmdW5jdGlvbmFsIGNoYW5nZSB0byBjb3JlIGtlcm5lbCBsb2dpYywgd2FycmFudGluZyB0aG9yb3VnaCBmdXp6aW5nLlxuXG5JJ3ZlIGFsc28gY29uZmlybWVkIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9ucyB0aGlzIHdpbGwgaW1wYWN0OlxuXG4qICAgYDlQX0ZTYFxuKiAgIGBDRVBIX0ZTYFxuKiAgIGBGVVNFX0ZTYFxuKiAgIGBHRlMyX0ZTYFxuKiAgIGBORlNfRlNgXG4qICAgYENJRlNgXG4qICAgYFZCT1hTRl9GU2BcblxuVGhlIHByZXNlbmNlIG9mIHRoZSBzZWxmdGVzdCwgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2ZpbGVzeXN0ZW1zL29wZW5fb19jcmVhdF9vX2Rpci5jYCwgZnVydGhlciBjb25maXJtcyBpdCdzIGEgZnVuY3Rpb25hbCBjaGFuZ2UsIG5vdCBqdXN0IGEgcmVmYWN0b3IuXG5cbkFscmlnaHQsIEknbSBjb25maWRlbnQgdGhhdCB0aGlzIGlzIGEgc29saWQgYW5hbHlzaXMuIFRpbWUgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyOTkzNSwiT3V0cHV0VG9rZW5zIjo0MDIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MzQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDRUMTc6MDI6MjAuODk5ODE3MDA2WiIsIlNlcSI6MzYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mjk1OTU2MzI3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCI5UF9GU1wiLFxuICAgIFwiQ0VQSF9GU1wiLFxuICAgIFwiRlVTRV9GU1wiLFxuICAgIFwiR0ZTMl9GU1wiLFxuICAgIFwiTkZTX0ZTXCIsXG4gICAgXCJDSUZTXCIsXG4gICAgXCJWQk9YU0ZfRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJsb29rdXBfb3BlblwiLFxuICAgIFwiYXRvbWljX29wZW5cIixcbiAgICBcIm1heV9vX2NyZWF0ZVwiLFxuICAgIFwiYnVpbGRfb3Blbl9mbGFnc1wiLFxuICAgIFwiZG9fb3BlblwiLFxuICAgIFwiZGVudHJ5X2NyZWF0ZVwiLFxuICAgIFwidmZzX21rZGlyXCIsXG4gICAgXCJ2ZnNfY3JlYXRlXCIsXG4gICAgXCJvcGVuX2xhc3RfbG9va3Vwc1wiLFxuICAgIFwibG9va3VwX2Zhc3RfZm9yX29wZW5cIixcbiAgICBcIm1heV9jcmVhdGVfaW5fc3RpY2t5XCIsXG4gICAgXCJmaWxlbmFtZV9jcmVhdGVcIixcbiAgICBcImZpbGVuYW1lX3VubGlua2F0XCIsXG4gICAgXCJmaWxlbmFtZV9yZW5hbWVhdDJcIixcbiAgICBcInY5ZnNfdmZzX2F0b21pY19vcGVuXCIsXG4gICAgXCJ2OWZzX3Zmc19hdG9taWNfb3Blbl9kb3RsXCIsXG4gICAgXCJjZXBoX2F0b21pY19vcGVuXCIsXG4gICAgXCJmdXNlX2F0b21pY19vcGVuXCIsXG4gICAgXCJnZnMyX2F0b21pY19vcGVuXCIsXG4gICAgXCJuZnNfYXRvbWljX29wZW5cIixcbiAgICBcIm5mc19hdG9taWNfb3Blbl92MjNcIixcbiAgICBcImNpZnNfYXRvbWljX29wZW5cIixcbiAgICBcInZib3hzZl9kaXJfYXRvbWljX29wZW5cIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIHN1cHBvcnQgZm9yIGNyZWF0aW5nIGRpcmVjdG9yaWVzIHZpYSBgb3BlbmF0KC4uLiwgT19DUkVBVCB8IE9fRElSRUNUT1JZLCAuLi4pYC4gSXQgbW9kaWZpZXMgY29yZSBWRlMgcGF0aCByZXNvbHV0aW9uIGFuZCBmaWxlIGNyZWF0aW9uIGxvZ2ljIGluIGBmcy9uYW1laS5jYCBhbmQgYGZzL29wZW4uY2AsIGluY2x1ZGluZyBgbG9va3VwX29wZW5gLCBgYXRvbWljX29wZW5gLCBhbmQgYHZmc19ta2RpcmAuIEl0IGFsc28gdXBkYXRlcyBtdWx0aXBsZSBmaWxlc3lzdGVtcyAoOXAsIGNlcGgsIGZ1c2UsIGdmczIsIG5mcywgc21iLCB2Ym94c2YpIHRvIGhhbmRsZSB0aGUgbmV3IGZsYWcgY29tYmluYXRpb24uIFRoaXMgaXMgYSBzaWduaWZpY2FudCBmdW5jdGlvbmFsIGNoYW5nZSB0byBjb3JlIGtlcm5lbCBsb2dpYyBhbmQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCI5UF9GU1wiLFxuICAgIFwiQ0VQSF9GU1wiLFxuICAgIFwiRlVTRV9GU1wiLFxuICAgIFwiR0ZTMl9GU1wiLFxuICAgIFwiTkZTX0ZTXCIsXG4gICAgXCJDSUZTXCIsXG4gICAgXCJWQk9YU0ZfRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJsb29rdXBfb3BlblwiLFxuICAgIFwiYXRvbWljX29wZW5cIixcbiAgICBcIm1heV9vX2NyZWF0ZVwiLFxuICAgIFwiYnVpbGRfb3Blbl9mbGFnc1wiLFxuICAgIFwiZG9fb3BlblwiLFxuICAgIFwiZGVudHJ5X2NyZWF0ZVwiLFxuICAgIFwidmZzX21rZGlyXCIsXG4gICAgXCJ2ZnNfY3JlYXRlXCIsXG4gICAgXCJvcGVuX2xhc3RfbG9va3Vwc1wiLFxuICAgIFwibG9va3VwX2Zhc3RfZm9yX29wZW5cIixcbiAgICBcIm1heV9jcmVhdGVfaW5fc3RpY2t5XCIsXG4gICAgXCJmaWxlbmFtZV9jcmVhdGVcIixcbiAgICBcImZpbGVuYW1lX3VubGlua2F0XCIsXG4gICAgXCJmaWxlbmFtZV9yZW5hbWVhdDJcIixcbiAgICBcInY5ZnNfdmZzX2F0b21pY19vcGVuXCIsXG4gICAgXCJ2OWZzX3Zmc19hdG9taWNfb3Blbl9kb3RsXCIsXG4gICAgXCJjZXBoX2F0b21pY19vcGVuXCIsXG4gICAgXCJmdXNlX2F0b21pY19vcGVuXCIsXG4gICAgXCJnZnMyX2F0b21pY19vcGVuXCIsXG4gICAgXCJuZnNfYXRvbWljX29wZW5cIixcbiAgICBcIm5mc19hdG9taWNfb3Blbl92MjNcIixcbiAgICBcImNpZnNfYXRvbWljX29wZW5cIixcbiAgICBcInZib3hzZl9kaXJfYXRvbWljX29wZW5cIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIHN1cHBvcnQgZm9yIGNyZWF0aW5nIGRpcmVjdG9yaWVzIHZpYSBgb3BlbmF0KC4uLiwgT19DUkVBVCB8IE9fRElSRUNUT1JZLCAuLi4pYC4gSXQgbW9kaWZpZXMgY29yZSBWRlMgcGF0aCByZXNvbHV0aW9uIGFuZCBmaWxlIGNyZWF0aW9uIGxvZ2ljIGluIGBmcy9uYW1laS5jYCBhbmQgYGZzL29wZW4uY2AsIGluY2x1ZGluZyBgbG9va3VwX29wZW5gLCBgYXRvbWljX29wZW5gLCBhbmQgYHZmc19ta2RpcmAuIEl0IGFsc28gdXBkYXRlcyBtdWx0aXBsZSBmaWxlc3lzdGVtcyAoOXAsIGNlcGgsIGZ1c2UsIGdmczIsIG5mcywgc21iLCB2Ym94c2YpIHRvIGhhbmRsZSB0aGUgbmV3IGZsYWcgY29tYmluYXRpb24uIFRoaXMgaXMgYSBzaWduaWZpY2FudCBmdW5jdGlvbmFsIGNoYW5nZSB0byBjb3JlIGtlcm5lbCBsb2dpYyBhbmQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowlpsg6[1] Phase: Succeeded StartedAt: 2026-07-04 17:02:32 +0000 UTC FinishedAt: 2026-07-04 17:02:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlpsg6[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-04 17:02:32 +0000 UTC FinishedAt: 2026-07-04 17:02:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlpsg6[2] Phase: Succeeded StartedAt: 2026-07-04 17:02:32 +0000 UTC FinishedAt: 2026-07-04 20:59:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlpsg6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1e9cdc2ea15adf4a821eefedabf6c0c8cf0b6a55","config_name":"upstream-apparmor-kasan.config","enable_configs":["9P_FS","CEPH_FS","FUSE_FS","GFS2_FS","NFS_FS","CIFS","VBOXSF_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["lookup_open","atomic_open","may_o_create","build_open_flags","do_open","dentry_create","vfs_mkdir","vfs_create","open_last_lookups","lookup_fast_for_open","may_create_in_sticky","filename_create","filename_unlinkat","filename_renameat2","v9fs_vfs_atomic_open","v9fs_vfs_atomic_open_dotl","ceph_atomic_open","fuse_atomic_open","gfs2_atomic_open","nfs_atomic_open","nfs_atomic_open_v23","cifs_atomic_open","vboxsf_dir_atomic_open"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1e9cdc2ea15adf4a821eefedabf6c0c8cf0b6a55","config_name":"upstream-apparmor-kasan.config","enable_configs":["9P_FS","CEPH_FS","FUSE_FS","GFS2_FS","NFS_FS","CIFS","VBOXSF_FS"],"series_id":"f875c425-a781-4aca-87db-05b72114e84b","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-07-04 17:02:32 +0000 UTC FinishedAt: 2026-07-04 20:59:00 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"1e9cdc2ea15adf4a821eefedabf6c0c8cf0b6a55","config_name":"upstream-apparmor-kasan.config","enable_configs":["9P_FS","CEPH_FS","FUSE_FS","GFS2_FS","NFS_FS","CIFS","VBOXSF_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["lookup_open","atomic_open","may_o_create","build_open_flags","do_open","dentry_create","vfs_mkdir","vfs_create","open_last_lookups","lookup_fast_for_open","may_create_in_sticky","filename_create","filename_unlinkat","filename_renameat2","v9fs_vfs_atomic_open","v9fs_vfs_atomic_open_dotl","ceph_atomic_open","fuse_atomic_open","gfs2_atomic_open","nfs_atomic_open","nfs_atomic_open_v23","cifs_atomic_open","vboxsf_dir_atomic_open"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"1e9cdc2ea15adf4a821eefedabf6c0c8cf0b6a55","config_name":"upstream-apparmor-kasan.config","enable_configs":["9P_FS","CEPH_FS","FUSE_FS","GFS2_FS","NFS_FS","CIFS","VBOXSF_FS"],"series_id":"f875c425-a781-4aca-87db-05b72114e84b","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowlpsg6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1e9cdc2ea15adf4a821eefedabf6c0c8cf0b6a55","config_name":"upstream-apparmor-kasan.config","enable_configs":["9P_FS","CEPH_FS","FUSE_FS","GFS2_FS","NFS_FS","CIFS","VBOXSF_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["lookup_open","atomic_open","may_o_create","build_open_flags","do_open","dentry_create","vfs_mkdir","vfs_create","open_last_lookups","lookup_fast_for_open","may_create_in_sticky","filename_create","filename_unlinkat","filename_renameat2","v9fs_vfs_atomic_open","v9fs_vfs_atomic_open_dotl","ceph_atomic_open","fuse_atomic_open","gfs2_atomic_open","nfs_atomic_open","nfs_atomic_open_v23","cifs_atomic_open","vboxsf_dir_atomic_open"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1e9cdc2ea15adf4a821eefedabf6c0c8cf0b6a55","config_name":"upstream-apparmor-kasan.config","enable_configs":["9P_FS","CEPH_FS","FUSE_FS","GFS2_FS","NFS_FS","CIFS","VBOXSF_FS"],"series_id":"f875c425-a781-4aca-87db-05b72114e84b","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-07-04 17:02:32 +0000 UTC FinishedAt: 2026-07-04 17:03:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlpsg6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1e9cdc2ea15adf4a821eefedabf6c0c8cf0b6a55","config_name":"upstream-apparmor-kasan.config","enable_configs":["9P_FS","CEPH_FS","FUSE_FS","GFS2_FS","NFS_FS","CIFS","VBOXSF_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["lookup_open","atomic_open","may_o_create","build_open_flags","do_open","dentry_create","vfs_mkdir","vfs_create","open_last_lookups","lookup_fast_for_open","may_create_in_sticky","filename_create","filename_unlinkat","filename_renameat2","v9fs_vfs_atomic_open","v9fs_vfs_atomic_open_dotl","ceph_atomic_open","fuse_atomic_open","gfs2_atomic_open","nfs_atomic_open","nfs_atomic_open_v23","cifs_atomic_open","vboxsf_dir_atomic_open"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1e9cdc2ea15adf4a821eefedabf6c0c8cf0b6a55","config_name":"upstream-apparmor-kasan.config","enable_configs":["9P_FS","CEPH_FS","FUSE_FS","GFS2_FS","NFS_FS","CIFS","VBOXSF_FS"],"series_id":"f875c425-a781-4aca-87db-05b72114e84b","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-07-04 17:02:32 +0000 UTC FinishedAt: 2026-07-04 17:02:58 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"1e9cdc2ea15adf4a821eefedabf6c0c8cf0b6a55","config_name":"upstream-apparmor-kasan.config","enable_configs":["9P_FS","CEPH_FS","FUSE_FS","GFS2_FS","NFS_FS","CIFS","VBOXSF_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},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-workflowlpsg6/series-workflowlpsg6-convert-artifact-3935438761/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowlpsg6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1e9cdc2ea15adf4a821eefedabf6c0c8cf0b6a55","config_name":"upstream-apparmor-kasan.config","enable_configs":["9P_FS","CEPH_FS","FUSE_FS","GFS2_FS","NFS_FS","CIFS","VBOXSF_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["lookup_open","atomic_open","may_o_create","build_open_flags","do_open","dentry_create","vfs_mkdir","vfs_create","open_last_lookups","lookup_fast_for_open","may_create_in_sticky","filename_create","filename_unlinkat","filename_renameat2","v9fs_vfs_atomic_open","v9fs_vfs_atomic_open_dotl","ceph_atomic_open","fuse_atomic_open","gfs2_atomic_open","nfs_atomic_open","nfs_atomic_open_v23","cifs_atomic_open","vboxsf_dir_atomic_open"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1e9cdc2ea15adf4a821eefedabf6c0c8cf0b6a55","config_name":"upstream-apparmor-kasan.config","enable_configs":["9P_FS","CEPH_FS","FUSE_FS","GFS2_FS","NFS_FS","CIFS","VBOXSF_FS"],"series_id":"f875c425-a781-4aca-87db-05b72114e84b","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-07-04 17:03:09 +0000 UTC FinishedAt: 2026-07-04 17:27:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlpsg6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1e9cdc2ea15adf4a821eefedabf6c0c8cf0b6a55","config_name":"upstream-apparmor-kasan.config","enable_configs":["9P_FS","CEPH_FS","FUSE_FS","GFS2_FS","NFS_FS","CIFS","VBOXSF_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["lookup_open","atomic_open","may_o_create","build_open_flags","do_open","dentry_create","vfs_mkdir","vfs_create","open_last_lookups","lookup_fast_for_open","may_create_in_sticky","filename_create","filename_unlinkat","filename_renameat2","v9fs_vfs_atomic_open","v9fs_vfs_atomic_open_dotl","ceph_atomic_open","fuse_atomic_open","gfs2_atomic_open","nfs_atomic_open","nfs_atomic_open_v23","cifs_atomic_open","vboxsf_dir_atomic_open"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1e9cdc2ea15adf4a821eefedabf6c0c8cf0b6a55","config_name":"upstream-apparmor-kasan.config","enable_configs":["9P_FS","CEPH_FS","FUSE_FS","GFS2_FS","NFS_FS","CIFS","VBOXSF_FS"],"series_id":"f875c425-a781-4aca-87db-05b72114e84b","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-07-04 17:03:09 +0000 UTC FinishedAt: 2026-07-04 17:27:56 +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:*b25d7de4-237b-4cc8-9beb-a529d9a80caa,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-workflowlpsg6/series-workflowlpsg6-convert-artifact-3935438761/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": "0205f59e-209f-4302-a518-0f6d6da22ed1", "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-workflowlpsg6/series-workflowlpsg6-build-action-3817369607/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowlpsg6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1e9cdc2ea15adf4a821eefedabf6c0c8cf0b6a55","config_name":"upstream-apparmor-kasan.config","enable_configs":["9P_FS","CEPH_FS","FUSE_FS","GFS2_FS","NFS_FS","CIFS","VBOXSF_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["lookup_open","atomic_open","may_o_create","build_open_flags","do_open","dentry_create","vfs_mkdir","vfs_create","open_last_lookups","lookup_fast_for_open","may_create_in_sticky","filename_create","filename_unlinkat","filename_renameat2","v9fs_vfs_atomic_open","v9fs_vfs_atomic_open_dotl","ceph_atomic_open","fuse_atomic_open","gfs2_atomic_open","nfs_atomic_open","nfs_atomic_open_v23","cifs_atomic_open","vboxsf_dir_atomic_open"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1e9cdc2ea15adf4a821eefedabf6c0c8cf0b6a55","config_name":"upstream-apparmor-kasan.config","enable_configs":["9P_FS","CEPH_FS","FUSE_FS","GFS2_FS","NFS_FS","CIFS","VBOXSF_FS"],"series_id":"f875c425-a781-4aca-87db-05b72114e84b","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-07-04 17:03:09 +0000 UTC FinishedAt: 2026-07-04 17:27:20 +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:*b25d7de4-237b-4cc8-9beb-a529d9a80caa,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-workflowlpsg6/series-workflowlpsg6-convert-artifact-3935438761/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": "0205f59e-209f-4302-a518-0f6d6da22ed1", "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-workflowlpsg6/series-workflowlpsg6-build-action-3817369607/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowlpsg6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1e9cdc2ea15adf4a821eefedabf6c0c8cf0b6a55","config_name":"upstream-apparmor-kasan.config","enable_configs":["9P_FS","CEPH_FS","FUSE_FS","GFS2_FS","NFS_FS","CIFS","VBOXSF_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["lookup_open","atomic_open","may_o_create","build_open_flags","do_open","dentry_create","vfs_mkdir","vfs_create","open_last_lookups","lookup_fast_for_open","may_create_in_sticky","filename_create","filename_unlinkat","filename_renameat2","v9fs_vfs_atomic_open","v9fs_vfs_atomic_open_dotl","ceph_atomic_open","fuse_atomic_open","gfs2_atomic_open","nfs_atomic_open","nfs_atomic_open_v23","cifs_atomic_open","vboxsf_dir_atomic_open"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1e9cdc2ea15adf4a821eefedabf6c0c8cf0b6a55","config_name":"upstream-apparmor-kasan.config","enable_configs":["9P_FS","CEPH_FS","FUSE_FS","GFS2_FS","NFS_FS","CIFS","VBOXSF_FS"],"series_id":"f875c425-a781-4aca-87db-05b72114e84b","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-07-04 17:27:56 +0000 UTC FinishedAt: 2026-07-04 17:27:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlpsg6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1e9cdc2ea15adf4a821eefedabf6c0c8cf0b6a55","config_name":"upstream-apparmor-kasan.config","enable_configs":["9P_FS","CEPH_FS","FUSE_FS","GFS2_FS","NFS_FS","CIFS","VBOXSF_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["lookup_open","atomic_open","may_o_create","build_open_flags","do_open","dentry_create","vfs_mkdir","vfs_create","open_last_lookups","lookup_fast_for_open","may_create_in_sticky","filename_create","filename_unlinkat","filename_renameat2","v9fs_vfs_atomic_open","v9fs_vfs_atomic_open_dotl","ceph_atomic_open","fuse_atomic_open","gfs2_atomic_open","nfs_atomic_open","nfs_atomic_open_v23","cifs_atomic_open","vboxsf_dir_atomic_open"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1e9cdc2ea15adf4a821eefedabf6c0c8cf0b6a55","config_name":"upstream-apparmor-kasan.config","enable_configs":["9P_FS","CEPH_FS","FUSE_FS","GFS2_FS","NFS_FS","CIFS","VBOXSF_FS"],"series_id":"f875c425-a781-4aca-87db-05b72114e84b","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-07-04 17:27:56 +0000 UTC FinishedAt: 2026-07-04 17:27:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlpsg6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1e9cdc2ea15adf4a821eefedabf6c0c8cf0b6a55","config_name":"upstream-apparmor-kasan.config","enable_configs":["9P_FS","CEPH_FS","FUSE_FS","GFS2_FS","NFS_FS","CIFS","VBOXSF_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["lookup_open","atomic_open","may_o_create","build_open_flags","do_open","dentry_create","vfs_mkdir","vfs_create","open_last_lookups","lookup_fast_for_open","may_create_in_sticky","filename_create","filename_unlinkat","filename_renameat2","v9fs_vfs_atomic_open","v9fs_vfs_atomic_open_dotl","ceph_atomic_open","fuse_atomic_open","gfs2_atomic_open","nfs_atomic_open","nfs_atomic_open_v23","cifs_atomic_open","vboxsf_dir_atomic_open"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1e9cdc2ea15adf4a821eefedabf6c0c8cf0b6a55","config_name":"upstream-apparmor-kasan.config","enable_configs":["9P_FS","CEPH_FS","FUSE_FS","GFS2_FS","NFS_FS","CIFS","VBOXSF_FS"],"series_id":"f875c425-a781-4aca-87db-05b72114e84b","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-07-04 17:27:56 +0000 UTC FinishedAt: 2026-07-04 17:28:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlpsg6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1e9cdc2ea15adf4a821eefedabf6c0c8cf0b6a55","config_name":"upstream-apparmor-kasan.config","enable_configs":["9P_FS","CEPH_FS","FUSE_FS","GFS2_FS","NFS_FS","CIFS","VBOXSF_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["lookup_open","atomic_open","may_o_create","build_open_flags","do_open","dentry_create","vfs_mkdir","vfs_create","open_last_lookups","lookup_fast_for_open","may_create_in_sticky","filename_create","filename_unlinkat","filename_renameat2","v9fs_vfs_atomic_open","v9fs_vfs_atomic_open_dotl","ceph_atomic_open","fuse_atomic_open","gfs2_atomic_open","nfs_atomic_open","nfs_atomic_open_v23","cifs_atomic_open","vboxsf_dir_atomic_open"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1e9cdc2ea15adf4a821eefedabf6c0c8cf0b6a55","config_name":"upstream-apparmor-kasan.config","enable_configs":["9P_FS","CEPH_FS","FUSE_FS","GFS2_FS","NFS_FS","CIFS","VBOXSF_FS"],"series_id":"f875c425-a781-4aca-87db-05b72114e84b","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-07-04 17:27:56 +0000 UTC FinishedAt: 2026-07-04 17:28:16 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"1e9cdc2ea15adf4a821eefedabf6c0c8cf0b6a55","config_name":"upstream-apparmor-kasan.config","enable_configs":["9P_FS","CEPH_FS","FUSE_FS","GFS2_FS","NFS_FS","CIFS","VBOXSF_FS"],"series_id":"f875c425-a781-4aca-87db-05b72114e84b","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},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-workflowlpsg6/series-workflowlpsg6-convert-artifact-4030345788/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowlpsg6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1e9cdc2ea15adf4a821eefedabf6c0c8cf0b6a55","config_name":"upstream-apparmor-kasan.config","enable_configs":["9P_FS","CEPH_FS","FUSE_FS","GFS2_FS","NFS_FS","CIFS","VBOXSF_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["lookup_open","atomic_open","may_o_create","build_open_flags","do_open","dentry_create","vfs_mkdir","vfs_create","open_last_lookups","lookup_fast_for_open","may_create_in_sticky","filename_create","filename_unlinkat","filename_renameat2","v9fs_vfs_atomic_open","v9fs_vfs_atomic_open_dotl","ceph_atomic_open","fuse_atomic_open","gfs2_atomic_open","nfs_atomic_open","nfs_atomic_open_v23","cifs_atomic_open","vboxsf_dir_atomic_open"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1e9cdc2ea15adf4a821eefedabf6c0c8cf0b6a55","config_name":"upstream-apparmor-kasan.config","enable_configs":["9P_FS","CEPH_FS","FUSE_FS","GFS2_FS","NFS_FS","CIFS","VBOXSF_FS"],"series_id":"f875c425-a781-4aca-87db-05b72114e84b","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-07-04 17:28:21 +0000 UTC FinishedAt: 2026-07-04 17:31:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlpsg6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1e9cdc2ea15adf4a821eefedabf6c0c8cf0b6a55","config_name":"upstream-apparmor-kasan.config","enable_configs":["9P_FS","CEPH_FS","FUSE_FS","GFS2_FS","NFS_FS","CIFS","VBOXSF_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["lookup_open","atomic_open","may_o_create","build_open_flags","do_open","dentry_create","vfs_mkdir","vfs_create","open_last_lookups","lookup_fast_for_open","may_create_in_sticky","filename_create","filename_unlinkat","filename_renameat2","v9fs_vfs_atomic_open","v9fs_vfs_atomic_open_dotl","ceph_atomic_open","fuse_atomic_open","gfs2_atomic_open","nfs_atomic_open","nfs_atomic_open_v23","cifs_atomic_open","vboxsf_dir_atomic_open"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1e9cdc2ea15adf4a821eefedabf6c0c8cf0b6a55","config_name":"upstream-apparmor-kasan.config","enable_configs":["9P_FS","CEPH_FS","FUSE_FS","GFS2_FS","NFS_FS","CIFS","VBOXSF_FS"],"series_id":"f875c425-a781-4aca-87db-05b72114e84b","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-07-04 17:28:21 +0000 UTC FinishedAt: 2026-07-04 17:31:11 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*0205f59e-209f-4302-a518-0f6d6da22ed1,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-workflowlpsg6/series-workflowlpsg6-build-action-3817369607/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-workflowlpsg6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1e9cdc2ea15adf4a821eefedabf6c0c8cf0b6a55","config_name":"upstream-apparmor-kasan.config","enable_configs":["9P_FS","CEPH_FS","FUSE_FS","GFS2_FS","NFS_FS","CIFS","VBOXSF_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["lookup_open","atomic_open","may_o_create","build_open_flags","do_open","dentry_create","vfs_mkdir","vfs_create","open_last_lookups","lookup_fast_for_open","may_create_in_sticky","filename_create","filename_unlinkat","filename_renameat2","v9fs_vfs_atomic_open","v9fs_vfs_atomic_open_dotl","ceph_atomic_open","fuse_atomic_open","gfs2_atomic_open","nfs_atomic_open","nfs_atomic_open_v23","cifs_atomic_open","vboxsf_dir_atomic_open"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1e9cdc2ea15adf4a821eefedabf6c0c8cf0b6a55","config_name":"upstream-apparmor-kasan.config","enable_configs":["9P_FS","CEPH_FS","FUSE_FS","GFS2_FS","NFS_FS","CIFS","VBOXSF_FS"],"series_id":"f875c425-a781-4aca-87db-05b72114e84b","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-07-04 17:31:21 +0000 UTC FinishedAt: 2026-07-04 17:31:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlpsg6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1e9cdc2ea15adf4a821eefedabf6c0c8cf0b6a55","config_name":"upstream-apparmor-kasan.config","enable_configs":["9P_FS","CEPH_FS","FUSE_FS","GFS2_FS","NFS_FS","CIFS","VBOXSF_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["lookup_open","atomic_open","may_o_create","build_open_flags","do_open","dentry_create","vfs_mkdir","vfs_create","open_last_lookups","lookup_fast_for_open","may_create_in_sticky","filename_create","filename_unlinkat","filename_renameat2","v9fs_vfs_atomic_open","v9fs_vfs_atomic_open_dotl","ceph_atomic_open","fuse_atomic_open","gfs2_atomic_open","nfs_atomic_open","nfs_atomic_open_v23","cifs_atomic_open","vboxsf_dir_atomic_open"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1e9cdc2ea15adf4a821eefedabf6c0c8cf0b6a55","config_name":"upstream-apparmor-kasan.config","enable_configs":["9P_FS","CEPH_FS","FUSE_FS","GFS2_FS","NFS_FS","CIFS","VBOXSF_FS"],"series_id":"f875c425-a781-4aca-87db-05b72114e84b","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-07-04 17:31:21 +0000 UTC FinishedAt: 2026-07-04 17:31:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlpsg6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1e9cdc2ea15adf4a821eefedabf6c0c8cf0b6a55","config_name":"upstream-apparmor-kasan.config","enable_configs":["9P_FS","CEPH_FS","FUSE_FS","GFS2_FS","NFS_FS","CIFS","VBOXSF_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["lookup_open","atomic_open","may_o_create","build_open_flags","do_open","dentry_create","vfs_mkdir","vfs_create","open_last_lookups","lookup_fast_for_open","may_create_in_sticky","filename_create","filename_unlinkat","filename_renameat2","v9fs_vfs_atomic_open","v9fs_vfs_atomic_open_dotl","ceph_atomic_open","fuse_atomic_open","gfs2_atomic_open","nfs_atomic_open","nfs_atomic_open_v23","cifs_atomic_open","vboxsf_dir_atomic_open"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1e9cdc2ea15adf4a821eefedabf6c0c8cf0b6a55","config_name":"upstream-apparmor-kasan.config","enable_configs":["9P_FS","CEPH_FS","FUSE_FS","GFS2_FS","NFS_FS","CIFS","VBOXSF_FS"],"series_id":"f875c425-a781-4aca-87db-05b72114e84b","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-07-04 17:31:21 +0000 UTC FinishedAt: 2026-07-04 17:54:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlpsg6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1e9cdc2ea15adf4a821eefedabf6c0c8cf0b6a55","config_name":"upstream-apparmor-kasan.config","enable_configs":["9P_FS","CEPH_FS","FUSE_FS","GFS2_FS","NFS_FS","CIFS","VBOXSF_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["lookup_open","atomic_open","may_o_create","build_open_flags","do_open","dentry_create","vfs_mkdir","vfs_create","open_last_lookups","lookup_fast_for_open","may_create_in_sticky","filename_create","filename_unlinkat","filename_renameat2","v9fs_vfs_atomic_open","v9fs_vfs_atomic_open_dotl","ceph_atomic_open","fuse_atomic_open","gfs2_atomic_open","nfs_atomic_open","nfs_atomic_open_v23","cifs_atomic_open","vboxsf_dir_atomic_open"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1e9cdc2ea15adf4a821eefedabf6c0c8cf0b6a55","config_name":"upstream-apparmor-kasan.config","enable_configs":["9P_FS","CEPH_FS","FUSE_FS","GFS2_FS","NFS_FS","CIFS","VBOXSF_FS"],"series_id":"f875c425-a781-4aca-87db-05b72114e84b","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-07-04 17:31:21 +0000 UTC FinishedAt: 2026-07-04 17:54:35 +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:*b25d7de4-237b-4cc8-9beb-a529d9a80caa,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-workflowlpsg6/series-workflowlpsg6-convert-artifact-4030345788/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": "f0d3d302-ede8-4044-8353-27ba2a4f6e20", "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-workflowlpsg6/series-workflowlpsg6-build-action-3224239256/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowlpsg6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1e9cdc2ea15adf4a821eefedabf6c0c8cf0b6a55","config_name":"upstream-apparmor-kasan.config","enable_configs":["9P_FS","CEPH_FS","FUSE_FS","GFS2_FS","NFS_FS","CIFS","VBOXSF_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["lookup_open","atomic_open","may_o_create","build_open_flags","do_open","dentry_create","vfs_mkdir","vfs_create","open_last_lookups","lookup_fast_for_open","may_create_in_sticky","filename_create","filename_unlinkat","filename_renameat2","v9fs_vfs_atomic_open","v9fs_vfs_atomic_open_dotl","ceph_atomic_open","fuse_atomic_open","gfs2_atomic_open","nfs_atomic_open","nfs_atomic_open_v23","cifs_atomic_open","vboxsf_dir_atomic_open"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1e9cdc2ea15adf4a821eefedabf6c0c8cf0b6a55","config_name":"upstream-apparmor-kasan.config","enable_configs":["9P_FS","CEPH_FS","FUSE_FS","GFS2_FS","NFS_FS","CIFS","VBOXSF_FS"],"series_id":"f875c425-a781-4aca-87db-05b72114e84b","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-07-04 17:31:21 +0000 UTC FinishedAt: 2026-07-04 17:54:25 +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:*b25d7de4-237b-4cc8-9beb-a529d9a80caa,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-workflowlpsg6/series-workflowlpsg6-convert-artifact-4030345788/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": "f0d3d302-ede8-4044-8353-27ba2a4f6e20", "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-workflowlpsg6/series-workflowlpsg6-build-action-3224239256/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowlpsg6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1e9cdc2ea15adf4a821eefedabf6c0c8cf0b6a55","config_name":"upstream-apparmor-kasan.config","enable_configs":["9P_FS","CEPH_FS","FUSE_FS","GFS2_FS","NFS_FS","CIFS","VBOXSF_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["lookup_open","atomic_open","may_o_create","build_open_flags","do_open","dentry_create","vfs_mkdir","vfs_create","open_last_lookups","lookup_fast_for_open","may_create_in_sticky","filename_create","filename_unlinkat","filename_renameat2","v9fs_vfs_atomic_open","v9fs_vfs_atomic_open_dotl","ceph_atomic_open","fuse_atomic_open","gfs2_atomic_open","nfs_atomic_open","nfs_atomic_open_v23","cifs_atomic_open","vboxsf_dir_atomic_open"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1e9cdc2ea15adf4a821eefedabf6c0c8cf0b6a55","config_name":"upstream-apparmor-kasan.config","enable_configs":["9P_FS","CEPH_FS","FUSE_FS","GFS2_FS","NFS_FS","CIFS","VBOXSF_FS"],"series_id":"f875c425-a781-4aca-87db-05b72114e84b","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-07-04 17:54:35 +0000 UTC FinishedAt: 2026-07-04 17:54:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlpsg6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1e9cdc2ea15adf4a821eefedabf6c0c8cf0b6a55","config_name":"upstream-apparmor-kasan.config","enable_configs":["9P_FS","CEPH_FS","FUSE_FS","GFS2_FS","NFS_FS","CIFS","VBOXSF_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["lookup_open","atomic_open","may_o_create","build_open_flags","do_open","dentry_create","vfs_mkdir","vfs_create","open_last_lookups","lookup_fast_for_open","may_create_in_sticky","filename_create","filename_unlinkat","filename_renameat2","v9fs_vfs_atomic_open","v9fs_vfs_atomic_open_dotl","ceph_atomic_open","fuse_atomic_open","gfs2_atomic_open","nfs_atomic_open","nfs_atomic_open_v23","cifs_atomic_open","vboxsf_dir_atomic_open"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1e9cdc2ea15adf4a821eefedabf6c0c8cf0b6a55","config_name":"upstream-apparmor-kasan.config","enable_configs":["9P_FS","CEPH_FS","FUSE_FS","GFS2_FS","NFS_FS","CIFS","VBOXSF_FS"],"series_id":"f875c425-a781-4aca-87db-05b72114e84b","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-07-04 17:54:35 +0000 UTC FinishedAt: 2026-07-04 17:54:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlpsg6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1e9cdc2ea15adf4a821eefedabf6c0c8cf0b6a55","config_name":"upstream-apparmor-kasan.config","enable_configs":["9P_FS","CEPH_FS","FUSE_FS","GFS2_FS","NFS_FS","CIFS","VBOXSF_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["lookup_open","atomic_open","may_o_create","build_open_flags","do_open","dentry_create","vfs_mkdir","vfs_create","open_last_lookups","lookup_fast_for_open","may_create_in_sticky","filename_create","filename_unlinkat","filename_renameat2","v9fs_vfs_atomic_open","v9fs_vfs_atomic_open_dotl","ceph_atomic_open","fuse_atomic_open","gfs2_atomic_open","nfs_atomic_open","nfs_atomic_open_v23","cifs_atomic_open","vboxsf_dir_atomic_open"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1e9cdc2ea15adf4a821eefedabf6c0c8cf0b6a55","config_name":"upstream-apparmor-kasan.config","enable_configs":["9P_FS","CEPH_FS","FUSE_FS","GFS2_FS","NFS_FS","CIFS","VBOXSF_FS"],"series_id":"f875c425-a781-4aca-87db-05b72114e84b","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-07-04 17:54:35 +0000 UTC FinishedAt: 2026-07-04 17:56:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlpsg6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1e9cdc2ea15adf4a821eefedabf6c0c8cf0b6a55","config_name":"upstream-apparmor-kasan.config","enable_configs":["9P_FS","CEPH_FS","FUSE_FS","GFS2_FS","NFS_FS","CIFS","VBOXSF_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["lookup_open","atomic_open","may_o_create","build_open_flags","do_open","dentry_create","vfs_mkdir","vfs_create","open_last_lookups","lookup_fast_for_open","may_create_in_sticky","filename_create","filename_unlinkat","filename_renameat2","v9fs_vfs_atomic_open","v9fs_vfs_atomic_open_dotl","ceph_atomic_open","fuse_atomic_open","gfs2_atomic_open","nfs_atomic_open","nfs_atomic_open_v23","cifs_atomic_open","vboxsf_dir_atomic_open"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1e9cdc2ea15adf4a821eefedabf6c0c8cf0b6a55","config_name":"upstream-apparmor-kasan.config","enable_configs":["9P_FS","CEPH_FS","FUSE_FS","GFS2_FS","NFS_FS","CIFS","VBOXSF_FS"],"series_id":"f875c425-a781-4aca-87db-05b72114e84b","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-07-04 17:54:35 +0000 UTC FinishedAt: 2026-07-04 17:56:31 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*f0d3d302-ede8-4044-8353-27ba2a4f6e20,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Boot test: Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:report-findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowlpsg6/series-workflowlpsg6-build-action-3224239256/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-workflowlpsg6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1e9cdc2ea15adf4a821eefedabf6c0c8cf0b6a55","config_name":"upstream-apparmor-kasan.config","enable_configs":["9P_FS","CEPH_FS","FUSE_FS","GFS2_FS","NFS_FS","CIFS","VBOXSF_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["lookup_open","atomic_open","may_o_create","build_open_flags","do_open","dentry_create","vfs_mkdir","vfs_create","open_last_lookups","lookup_fast_for_open","may_create_in_sticky","filename_create","filename_unlinkat","filename_renameat2","v9fs_vfs_atomic_open","v9fs_vfs_atomic_open_dotl","ceph_atomic_open","fuse_atomic_open","gfs2_atomic_open","nfs_atomic_open","nfs_atomic_open_v23","cifs_atomic_open","vboxsf_dir_atomic_open"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1e9cdc2ea15adf4a821eefedabf6c0c8cf0b6a55","config_name":"upstream-apparmor-kasan.config","enable_configs":["9P_FS","CEPH_FS","FUSE_FS","GFS2_FS","NFS_FS","CIFS","VBOXSF_FS"],"series_id":"f875c425-a781-4aca-87db-05b72114e84b","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-07-04 17:56:41 +0000 UTC FinishedAt: 2026-07-04 20:59:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlpsg6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1e9cdc2ea15adf4a821eefedabf6c0c8cf0b6a55","config_name":"upstream-apparmor-kasan.config","enable_configs":["9P_FS","CEPH_FS","FUSE_FS","GFS2_FS","NFS_FS","CIFS","VBOXSF_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["lookup_open","atomic_open","may_o_create","build_open_flags","do_open","dentry_create","vfs_mkdir","vfs_create","open_last_lookups","lookup_fast_for_open","may_create_in_sticky","filename_create","filename_unlinkat","filename_renameat2","v9fs_vfs_atomic_open","v9fs_vfs_atomic_open_dotl","ceph_atomic_open","fuse_atomic_open","gfs2_atomic_open","nfs_atomic_open","nfs_atomic_open_v23","cifs_atomic_open","vboxsf_dir_atomic_open"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1e9cdc2ea15adf4a821eefedabf6c0c8cf0b6a55","config_name":"upstream-apparmor-kasan.config","enable_configs":["9P_FS","CEPH_FS","FUSE_FS","GFS2_FS","NFS_FS","CIFS","VBOXSF_FS"],"series_id":"f875c425-a781-4aca-87db-05b72114e84b","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-07-04 17:56:41 +0000 UTC FinishedAt: 2026-07-04 20:59:00 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["lookup_open","atomic_open","may_o_create","build_open_flags","do_open","dentry_create","vfs_mkdir","vfs_create","open_last_lookups","lookup_fast_for_open","may_create_in_sticky","filename_create","filename_unlinkat","filename_renameat2","v9fs_vfs_atomic_open","v9fs_vfs_atomic_open_dotl","ceph_atomic_open","fuse_atomic_open","gfs2_atomic_open","nfs_atomic_open","nfs_atomic_open_v23","cifs_atomic_open","vboxsf_dir_atomic_open"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:track,Default:nil,Value:*KASAN,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:base-build-id,Default:nil,Value:*0205f59e-209f-4302-a518-0f6d6da22ed1,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*f0d3d302-ede8-4044-8353-27ba2a4f6e20,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:base-kernel,Path:,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowlpsg6/series-workflowlpsg6-build-action-3817369607/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:patched-kernel,Path:,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowlpsg6/series-workflowlpsg6-build-action-3224239256/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowlpsg6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1e9cdc2ea15adf4a821eefedabf6c0c8cf0b6a55","config_name":"upstream-apparmor-kasan.config","enable_configs":["9P_FS","CEPH_FS","FUSE_FS","GFS2_FS","NFS_FS","CIFS","VBOXSF_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["lookup_open","atomic_open","may_o_create","build_open_flags","do_open","dentry_create","vfs_mkdir","vfs_create","open_last_lookups","lookup_fast_for_open","may_create_in_sticky","filename_create","filename_unlinkat","filename_renameat2","v9fs_vfs_atomic_open","v9fs_vfs_atomic_open_dotl","ceph_atomic_open","fuse_atomic_open","gfs2_atomic_open","nfs_atomic_open","nfs_atomic_open_v23","cifs_atomic_open","vboxsf_dir_atomic_open"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1e9cdc2ea15adf4a821eefedabf6c0c8cf0b6a55","config_name":"upstream-apparmor-kasan.config","enable_configs":["9P_FS","CEPH_FS","FUSE_FS","GFS2_FS","NFS_FS","CIFS","VBOXSF_FS"],"series_id":"f875c425-a781-4aca-87db-05b72114e84b","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-07-04 17:56:41 +0000 UTC FinishedAt: 2026-07-04 17:57:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlpsg6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1e9cdc2ea15adf4a821eefedabf6c0c8cf0b6a55","config_name":"upstream-apparmor-kasan.config","enable_configs":["9P_FS","CEPH_FS","FUSE_FS","GFS2_FS","NFS_FS","CIFS","VBOXSF_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["lookup_open","atomic_open","may_o_create","build_open_flags","do_open","dentry_create","vfs_mkdir","vfs_create","open_last_lookups","lookup_fast_for_open","may_create_in_sticky","filename_create","filename_unlinkat","filename_renameat2","v9fs_vfs_atomic_open","v9fs_vfs_atomic_open_dotl","ceph_atomic_open","fuse_atomic_open","gfs2_atomic_open","nfs_atomic_open","nfs_atomic_open_v23","cifs_atomic_open","vboxsf_dir_atomic_open"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1e9cdc2ea15adf4a821eefedabf6c0c8cf0b6a55","config_name":"upstream-apparmor-kasan.config","enable_configs":["9P_FS","CEPH_FS","FUSE_FS","GFS2_FS","NFS_FS","CIFS","VBOXSF_FS"],"series_id":"f875c425-a781-4aca-87db-05b72114e84b","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-07-04 17:56:41 +0000 UTC FinishedAt: 2026-07-04 17:56:52 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["lookup_open","atomic_open","may_o_create","build_open_flags","do_open","dentry_create","vfs_mkdir","vfs_create","open_last_lookups","lookup_fast_for_open","may_create_in_sticky","filename_create","filename_unlinkat","filename_renameat2","v9fs_vfs_atomic_open","v9fs_vfs_atomic_open_dotl","ceph_atomic_open","fuse_atomic_open","gfs2_atomic_open","nfs_atomic_open","nfs_atomic_open_v23","cifs_atomic_open","vboxsf_dir_atomic_open"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowlpsg6/series-workflowlpsg6-convert-artifact-2924662789/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowlpsg6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1e9cdc2ea15adf4a821eefedabf6c0c8cf0b6a55","config_name":"upstream-apparmor-kasan.config","enable_configs":["9P_FS","CEPH_FS","FUSE_FS","GFS2_FS","NFS_FS","CIFS","VBOXSF_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["lookup_open","atomic_open","may_o_create","build_open_flags","do_open","dentry_create","vfs_mkdir","vfs_create","open_last_lookups","lookup_fast_for_open","may_create_in_sticky","filename_create","filename_unlinkat","filename_renameat2","v9fs_vfs_atomic_open","v9fs_vfs_atomic_open_dotl","ceph_atomic_open","fuse_atomic_open","gfs2_atomic_open","nfs_atomic_open","nfs_atomic_open_v23","cifs_atomic_open","vboxsf_dir_atomic_open"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1e9cdc2ea15adf4a821eefedabf6c0c8cf0b6a55","config_name":"upstream-apparmor-kasan.config","enable_configs":["9P_FS","CEPH_FS","FUSE_FS","GFS2_FS","NFS_FS","CIFS","VBOXSF_FS"],"series_id":"f875c425-a781-4aca-87db-05b72114e84b","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-07-04 17:56:41 +0000 UTC FinishedAt: 2026-07-04 17:56:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlpsg6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1e9cdc2ea15adf4a821eefedabf6c0c8cf0b6a55","config_name":"upstream-apparmor-kasan.config","enable_configs":["9P_FS","CEPH_FS","FUSE_FS","GFS2_FS","NFS_FS","CIFS","VBOXSF_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["lookup_open","atomic_open","may_o_create","build_open_flags","do_open","dentry_create","vfs_mkdir","vfs_create","open_last_lookups","lookup_fast_for_open","may_create_in_sticky","filename_create","filename_unlinkat","filename_renameat2","v9fs_vfs_atomic_open","v9fs_vfs_atomic_open_dotl","ceph_atomic_open","fuse_atomic_open","gfs2_atomic_open","nfs_atomic_open","nfs_atomic_open_v23","cifs_atomic_open","vboxsf_dir_atomic_open"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1e9cdc2ea15adf4a821eefedabf6c0c8cf0b6a55","config_name":"upstream-apparmor-kasan.config","enable_configs":["9P_FS","CEPH_FS","FUSE_FS","GFS2_FS","NFS_FS","CIFS","VBOXSF_FS"],"series_id":"f875c425-a781-4aca-87db-05b72114e84b","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-07-04 17:56:41 +0000 UTC FinishedAt: 2026-07-04 17:56:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlpsg6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1e9cdc2ea15adf4a821eefedabf6c0c8cf0b6a55","config_name":"upstream-apparmor-kasan.config","enable_configs":["9P_FS","CEPH_FS","FUSE_FS","GFS2_FS","NFS_FS","CIFS","VBOXSF_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["lookup_open","atomic_open","may_o_create","build_open_flags","do_open","dentry_create","vfs_mkdir","vfs_create","open_last_lookups","lookup_fast_for_open","may_create_in_sticky","filename_create","filename_unlinkat","filename_renameat2","v9fs_vfs_atomic_open","v9fs_vfs_atomic_open_dotl","ceph_atomic_open","fuse_atomic_open","gfs2_atomic_open","nfs_atomic_open","nfs_atomic_open_v23","cifs_atomic_open","vboxsf_dir_atomic_open"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1e9cdc2ea15adf4a821eefedabf6c0c8cf0b6a55","config_name":"upstream-apparmor-kasan.config","enable_configs":["9P_FS","CEPH_FS","FUSE_FS","GFS2_FS","NFS_FS","CIFS","VBOXSF_FS"],"series_id":"f875c425-a781-4aca-87db-05b72114e84b","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-07-04 17:56:41 +0000 UTC FinishedAt: 2026-07-04 17:56:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlpsg6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1e9cdc2ea15adf4a821eefedabf6c0c8cf0b6a55","config_name":"upstream-apparmor-kasan.config","enable_configs":["9P_FS","CEPH_FS","FUSE_FS","GFS2_FS","NFS_FS","CIFS","VBOXSF_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["lookup_open","atomic_open","may_o_create","build_open_flags","do_open","dentry_create","vfs_mkdir","vfs_create","open_last_lookups","lookup_fast_for_open","may_create_in_sticky","filename_create","filename_unlinkat","filename_renameat2","v9fs_vfs_atomic_open","v9fs_vfs_atomic_open_dotl","ceph_atomic_open","fuse_atomic_open","gfs2_atomic_open","nfs_atomic_open","nfs_atomic_open_v23","cifs_atomic_open","vboxsf_dir_atomic_open"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1e9cdc2ea15adf4a821eefedabf6c0c8cf0b6a55","config_name":"upstream-apparmor-kasan.config","enable_configs":["9P_FS","CEPH_FS","FUSE_FS","GFS2_FS","NFS_FS","CIFS","VBOXSF_FS"],"series_id":"f875c425-a781-4aca-87db-05b72114e84b","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-07-04 17:57:02 +0000 UTC FinishedAt: 2026-07-04 20:59:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlpsg6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1e9cdc2ea15adf4a821eefedabf6c0c8cf0b6a55","config_name":"upstream-apparmor-kasan.config","enable_configs":["9P_FS","CEPH_FS","FUSE_FS","GFS2_FS","NFS_FS","CIFS","VBOXSF_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["lookup_open","atomic_open","may_o_create","build_open_flags","do_open","dentry_create","vfs_mkdir","vfs_create","open_last_lookups","lookup_fast_for_open","may_create_in_sticky","filename_create","filename_unlinkat","filename_renameat2","v9fs_vfs_atomic_open","v9fs_vfs_atomic_open_dotl","ceph_atomic_open","fuse_atomic_open","gfs2_atomic_open","nfs_atomic_open","nfs_atomic_open_v23","cifs_atomic_open","vboxsf_dir_atomic_open"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1e9cdc2ea15adf4a821eefedabf6c0c8cf0b6a55","config_name":"upstream-apparmor-kasan.config","enable_configs":["9P_FS","CEPH_FS","FUSE_FS","GFS2_FS","NFS_FS","CIFS","VBOXSF_FS"],"series_id":"f875c425-a781-4aca-87db-05b72114e84b","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-07-04 17:57:02 +0000 UTC FinishedAt: 2026-07-04 20:58:50 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*0205f59e-209f-4302-a518-0f6d6da22ed1,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*f0d3d302-ede8-4044-8353-27ba2a4f6e20,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Fuzz,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:base-kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowlpsg6/series-workflowlpsg6-build-action-3817369607/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:patched-kernel,Path:/patched,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowlpsg6/series-workflowlpsg6-build-action-3224239256/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:config,Path:/tmp/config.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowlpsg6/series-workflowlpsg6-convert-artifact-2924662789/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,}