Name: series-workfloww8sjz Phase: Running StartedAt: 2026-06-22 09:15:01 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workfloww8sjz[0] Phase: Running StartedAt: 2026-06-22 09:15:01 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workfloww8sjz[0].run-triage Phase: Running StartedAt: 2026-06-22 09:15:01 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workfloww8sjz[0].run-triage(0) Phase: Running StartedAt: 2026-06-22 09:15:01 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +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": "ef0c9f75a19532d7675384708fc8621e10850104", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "AFS_FS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "ef0c9f75a19532d7675384708fc8621e10850104", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "AFS_FS" ], "series_id": "871ac844-34bd-4130-9673-71d7910decb9" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "afs_break_callbacks", "afs_lookup_cell", "afs_readdir", "afs_lookup", "afs_d_revalidate", "afs_dynroot_readdir", "afs_put_operation", "afs_iget", "afs_extract_vlserver_list", "afs_create_volume" ], "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+CgkJCTx0ZD4yMDI2LzA2LzIyIDA5OjI3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+OG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0FGU19GUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2Fmc19icmVha19jYWxsYmFja3MmIzM0OywKICAgICYjMzQ7YWZzX2xvb2t1cF9jZWxsJiMzNDssCiAgICAmIzM0O2Fmc19yZWFkZGlyJiMzNDssCiAgICAmIzM0O2Fmc19sb29rdXAmIzM0OywKICAgICYjMzQ7YWZzX2RfcmV2YWxpZGF0ZSYjMzQ7LAogICAgJiMzNDthZnNfZHlucm9vdF9yZWFkZGlyJiMzNDssCiAgICAmIzM0O2Fmc19wdXRfb3BlcmF0aW9uJiMzNDssCiAgICAmIzM0O2Fmc19pZ2V0JiMzNDssCiAgICAmIzM0O2Fmc19leHRyYWN0X3Zsc2VydmVyX2xpc3QmIzM0OywKICAgICYjMzQ7YWZzX2NyZWF0ZV92b2x1bWUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBBRlMgZmlsZXN5c3RlbSwgbW9kaWZ5aW5nIGNlbGwgYWxsb2NhdGlvbi9kZXN0cnVjdGlvbiwgY2FsbGJhY2sgaGFuZGxpbmcsIGRpcmVjdG9yeSBpdGVyYXRpb24gYW5kIGxvb2t1cCwgZHluYW1pYyByb290IHJlYWRpbmcsIG9wZXJhdGlvbiBtYW5hZ2VtZW50LCBpbm9kZSBpbml0aWFsaXphdGlvbi9ldmljdGlvbiwgVkwgc2VydmVyIGxpc3QgZXh0cmFjdGlvbiwgYW5kIHZvbHVtZSBpbnNlcnRpb24uIFRoZXNlIGFyZSByZWFjaGFibGUgY29yZSBBRlMgbG9naWMgcGF0aHMgdGhhdCBjYW4gYmUgZnV6emVkIHZpYSBmaWxlc3lzdGVtIG9wZXJhdGlvbnMgYW5kIG5ldHdvcmsgaW50ZXJhY3Rpb25zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIyIDA5OjI3PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgZTIyNzI2ODk0ZTYwYzdhOTg0OWRlOWVlMmU4ZTRiZTBhNmNhNDAxOFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gSnVuIDIyIDA5OjI3OjA4IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2ZzL2Fmcy9jYWxsYmFjay5jIGIvZnMvYWZzL2NhbGxiYWNrLmNcbmluZGV4IDg5NGQyYmFkNmI2Y2VjLi42MTM1NDAwM2MwMDZjZiAxMDA2NDRcbi0tLSBhL2ZzL2Fmcy9jYWxsYmFjay5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9hZnMvY2FsbGJhY2suY1xuQEAgLTExMywxNiAmIzQzOzExMywxMiBAQCBzdGF0aWMgc3RydWN0IGFmc192b2x1bWUgKmFmc19sb29rdXBfdm9sdW1lX3JjdShzdHJ1Y3QgYWZzX2NlbGwgKmNlbGwsXG4ge1xuIFx0c3RydWN0IGFmc192b2x1bWUgKnZvbHVtZSA9IE5VTEw7XG4gXHRzdHJ1Y3QgcmJfbm9kZSAqcDtcbi1cdGludCBzZXEgPSAxO1xuIFxuLVx0Zm9yICg7Oykge1xuJiM0MztcdHNjb3BlZF9zZXFsb2NrX3JlYWQoXHUwMDI2Y2VsbC1cdTAwM2V2b2x1bWVfbG9jaywgc3NfbG9jaykge1xuIFx0XHQvKiBVbmZvcnR1bmF0ZWx5LCByYnRyZWUgd2Fsa2luZyBkb2VzbiYjMzk7dCBnaXZlIHJlbGlhYmxlIHJlc3VsdHNcbiBcdFx0ICogdW5kZXIganVzdCB0aGUgUkNVIHJlYWQgbG9jaywgc28gd2UgaGF2ZSB0byBjaGVjayBmb3JcbiBcdFx0ICogY2hhbmdlcy5cbiBcdFx0ICovXG4tXHRcdHNlcSYjNDM7JiM0Mzs7IC8qIDIgb24gdGhlIDFzdC9sb2NrbGVzcyBwYXRoLCBvdGhlcndpc2Ugb2RkICovXG4tXHRcdHJlYWRfc2VxYmVnaW5fb3JfbG9jayhcdTAwMjZjZWxsLVx1MDAzZXZvbHVtZV9sb2NrLCBcdTAwMjZzZXEpO1xuLVxuIFx0XHRwID0gcmN1X2RlcmVmZXJlbmNlX3JhdyhjZWxsLVx1MDAzZXZvbHVtZXMucmJfbm9kZSk7XG4gXHRcdHdoaWxlIChwKSB7XG4gXHRcdFx0dm9sdW1lID0gcmJfZW50cnkocCwgc3RydWN0IGFmc192b2x1bWUsIGNlbGxfbm9kZSk7XG5AQCAtMTM4LDEyICYjNDM7MTM0LDkgQEAgc3RhdGljIHN0cnVjdCBhZnNfdm9sdW1lICphZnNfbG9va3VwX3ZvbHVtZV9yY3Uoc3RydWN0IGFmc19jZWxsICpjZWxsLFxuIFxuIFx0XHRpZiAodm9sdW1lIFx1MDAyNlx1MDAyNiBhZnNfdHJ5X2dldF92b2x1bWUodm9sdW1lLCBhZnNfdm9sdW1lX3RyYWNlX2dldF9jYWxsYmFjaykpXG4gXHRcdFx0YnJlYWs7XG4tXHRcdGlmICghbmVlZF9zZXFyZXRyeShcdTAwMjZjZWxsLVx1MDAzZXZvbHVtZV9sb2NrLCBzZXEpKVxuLVx0XHRcdGJyZWFrO1xuLVx0XHRzZXEgfD0gMTsgLyogV2FudCBhIGxvY2sgbmV4dCB0aW1lICovXG4mIzQzO1x0XHR2b2x1bWUgPSBOVUxMO1xuIFx0fVxuIFxuLVx0ZG9uZV9zZXFyZXRyeShcdTAwMjZjZWxsLVx1MDAzZXZvbHVtZV9sb2NrLCBzZXEpO1xuIFx0cmV0dXJuIHZvbHVtZTtcbiB9XG4gXG5AQCAtMjIxLDcgJiM0MzsyMTQsMTEgQEAgc3RhdGljIHZvaWQgYWZzX2JyZWFrX3NvbWVfY2FsbGJhY2tzKHN0cnVjdCBhZnNfc2VydmVyICpzZXJ2ZXIsXG4gXG4gXHRyY3VfcmVhZF9sb2NrKCk7XG4gXHR2b2x1bWUgPSBhZnNfbG9va3VwX3ZvbHVtZV9yY3Uoc2VydmVyLVx1MDAzZWNlbGwsIHZpZCk7XG4tXHRpZiAoY2JiLVx1MDAzZWZpZC52bm9kZSA9PSAwIFx1MDAyNlx1MDAyNiBjYmItXHUwMDNlZmlkLnVuaXF1ZSA9PSAwKSB7XG4mIzQzO1x0aWYgKCF2b2x1bWUpIHtcbiYjNDM7XHRcdC8qIElnbm9yZSBicmVha3Mgb24gdW5rbm93biB2b2x1bWVzLiAqL1xuJiM0MztcdFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4mIzQzO1x0XHQqX2NvdW50ID0gMDtcbiYjNDM7XHR9IGVsc2UgaWYgKGNiYi1cdTAwM2VmaWQudm5vZGUgPT0gMCBcdTAwMjZcdTAwMjYgY2JiLVx1MDAzZWZpZC51bmlxdWUgPT0gMCkge1xuIFx0XHRhZnNfYnJlYWtfdm9sdW1lX2NhbGxiYWNrKHNlcnZlciwgdm9sdW1lKTtcbiBcdFx0Kl9jb3VudCAtPSAxO1xuIFx0XHRpZiAoKl9jb3VudClcbmRpZmYgLS1naXQgYS9mcy9hZnMvY2VsbC5jIGIvZnMvYWZzL2NlbGwuY1xuaW5kZXggOTczODY4NGRiZGQyNjguLjQ3YTI2NDU3NjhkNzllIDEwMDY0NFxuLS0tIGEvZnMvYWZzL2NlbGwuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvYWZzL2NlbGwuY1xuQEAgLTIwNiwxMSAmIzQzOzIwNiw2IEBAIHN0YXRpYyBzdHJ1Y3QgYWZzX2NlbGwgKmFmc19hbGxvY19jZWxsKHN0cnVjdCBhZnNfbmV0ICpuZXQsXG4gXHRjZWxsLVx1MDAzZWRuc19zdGF0dXMgPSB2bGxpc3QtXHUwMDNlc3RhdHVzO1xuIFx0c21wX3N0b3JlX3JlbGVhc2UoXHUwMDI2Y2VsbC1cdTAwM2VkbnNfbG9va3VwX2NvdW50LCAxKTsgLyogdnMgc291cmNlL3N0YXR1cyAqL1xuIFx0YXRvbWljX2luYyhcdTAwMjZuZXQtXHUwMDNlY2VsbHNfb3V0c3RhbmRpbmcpO1xuLVx0cmV0ID0gaWRyX2FsbG9jX2N5Y2xpYyhcdTAwMjZuZXQtXHUwMDNlY2VsbHNfZHluX2lubywgY2VsbCxcbi1cdFx0XHQgICAgICAgMiwgSU5UX01BWCAvIDIsIEdGUF9LRVJORUwpO1xuLVx0aWYgKHJldCBcdTAwM2MgMClcbi1cdFx0Z290byBlcnJvcjtcbi1cdGNlbGwtXHUwMDNlZHlucm9vdF9pbm8gPSByZXQ7XG4gXHRjZWxsLVx1MDAzZWRlYnVnX2lkID0gYXRvbWljX2luY19yZXR1cm4oXHUwMDI2Y2VsbF9kZWJ1Z19pZCk7XG4gXG4gXHR0cmFjZV9hZnNfY2VsbChjZWxsLVx1MDAzZWRlYnVnX2lkLCAxLCAwLCBhZnNfY2VsbF90cmFjZV9hbGxvYyk7XG5AQCAtMzA0LDYgJiM0MzsyOTksMTMgQEAgc3RydWN0IGFmc19jZWxsICphZnNfbG9va3VwX2NlbGwoc3RydWN0IGFmc19uZXQgKm5ldCxcbiBcdFx0XHRnb3RvIGNlbGxfYWxyZWFkeV9leGlzdHM7XG4gXHR9XG4gXG4mIzQzO1x0cmV0ID0gaWRyX2FsbG9jX2N5Y2xpYyhcdTAwMjZuZXQtXHUwMDNlY2VsbHNfZHluX2lubywgY2FuZGlkYXRlLFxuJiM0MztcdFx0XHQgICAgICAgMiwgSU5UX01BWCAvIDIsIEdGUF9LRVJORUwpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGNhbnRfYWxsb2NfaW5vO1xuJiM0MztcdGNhbmRpZGF0ZS1cdTAwM2VkeW5yb290X2lubyA9IHJldDtcbiYjNDM7XHRzZXRfYml0KEFGU19DRUxMX0ZMX0hBVkVfSU5PLCBcdTAwMjZjYW5kaWRhdGUtXHUwMDNlZmxhZ3MpO1xuJiM0MztcbiBcdGNlbGwgPSBjYW5kaWRhdGU7XG4gXHRjYW5kaWRhdGUgPSBOVUxMO1xuIFx0YWZzX3VzZV9jZWxsKGNlbGwsIHRyYWNlKTtcbkBAIC0zNzgsNiAmIzQzOzM4MCwxMSBAQCBzdHJ1Y3QgYWZzX2NlbGwgKmFmc19sb29rdXBfY2VsbChzdHJ1Y3QgYWZzX25ldCAqbmV0LFxuIFx0X2xlYXZlKFwmIzM0OyA9ICVwIFtjZWxsXVwmIzM0OywgY2VsbCk7XG4gXHRyZXR1cm4gY2VsbDtcbiBcbiYjNDM7Y2FudF9hbGxvY19pbm86XG4mIzQzO1x0dXBfd3JpdGUoXHUwMDI2bmV0LVx1MDAzZWNlbGxzX2xvY2spO1xuJiM0MztcdGFmc19wdXRfY2VsbChjYW5kaWRhdGUsIGFmc19jZWxsX3RyYWNlX3B1dF9jYW5kaWRhdGUpO1xuJiM0MztcdGdvdG8gZXJyb3Jfbm9wdXQ7XG4mIzQzO1xuIGNlbGxfYWxyZWFkeV9leGlzdHM6XG4gXHRfZGVidWcoXCYjMzQ7Y2VsbCBleGlzdHNcJiMzNDspO1xuIFx0Y2VsbCA9IGN1cnNvcjtcbkBAIC01NDcsNiAmIzQzOzU1NCw4IEBAIHN0YXRpYyBpbnQgYWZzX3VwZGF0ZV9jZWxsKHN0cnVjdCBhZnNfY2VsbCAqY2VsbClcbiBcdFx0cmN1X2Fzc2lnbl9wb2ludGVyKGNlbGwtXHUwMDNldmxfc2VydmVycywgdmxsaXN0KTtcbiBcdFx0Y2VsbC1cdTAwM2VkbnNfc291cmNlID0gdmxsaXN0LVx1MDAzZXNvdXJjZTtcbiBcdFx0b2xkID0gcDtcbiYjNDM7XHR9IGVsc2Uge1xuJiM0MztcdFx0b2xkID0gdmxsaXN0O1xuIFx0fVxuIFx0d3JpdGVfdW5sb2NrKFx1MDAyNmNlbGwtXHUwMDNldmxfc2VydmVyc19sb2NrKTtcbiBcdGFmc19wdXRfdmxzZXJ2ZXJsaXN0KGNlbGwtXHUwMDNlbmV0LCBvbGQpO1xuQEAgLTU3Nyw3ICYjNDM7NTg2LDYgQEAgc3RhdGljIHZvaWQgYWZzX2NlbGxfZGVzdHJveShzdHJ1Y3QgcmN1X2hlYWQgKnJjdSlcbiBcdGFmc19wdXRfdmxzZXJ2ZXJsaXN0KG5ldCwgcmN1X2FjY2Vzc19wb2ludGVyKGNlbGwtXHUwMDNldmxfc2VydmVycykpO1xuIFx0YWZzX3VudXNlX2NlbGwoY2VsbC1cdTAwM2VhbGlhc19vZiwgYWZzX2NlbGxfdHJhY2VfdW51c2VfYWxpYXMpO1xuIFx0a2V5X3B1dChjZWxsLVx1MDAzZWFub255bW91c19rZXkpO1xuLVx0aWRyX3JlbW92ZShcdTAwMjZuZXQtXHUwMDNlY2VsbHNfZHluX2lubywgY2VsbC1cdTAwM2VkeW5yb290X2lubyk7XG4gXHRrZnJlZShjZWxsLVx1MDAzZW5hbWUgLSAxKTtcbiBcdGtmcmVlKGNlbGwpO1xuIFxuQEAgLTU5Miw2ICYjNDM7NjAwLDEzIEBAIHN0YXRpYyB2b2lkIGFmc19kZXN0cm95X2NlbGxfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4gXHRhZnNfc2VlX2NlbGwoY2VsbCwgYWZzX2NlbGxfdHJhY2VfZGVzdHJveSk7XG4gXHR0aW1lcl9kZWxldGVfc3luYyhcdTAwMjZjZWxsLVx1MDAzZW1hbmFnZW1lbnRfdGltZXIpO1xuIFx0Y2FuY2VsX3dvcmtfc3luYyhcdTAwMjZjZWxsLVx1MDAzZW1hbmFnZXIpO1xuJiM0MztcbiYjNDM7XHRpZiAodGVzdF9iaXQoQUZTX0NFTExfRkxfSEFWRV9JTk8sIFx1MDAyNmNlbGwtXHUwMDNlZmxhZ3MpKSB7XG4mIzQzO1x0XHRkb3duX3dyaXRlKFx1MDAyNmNlbGwtXHUwMDNlbmV0LVx1MDAzZWNlbGxzX2xvY2spO1xuJiM0MztcdFx0aWRyX3JlbW92ZShcdTAwMjZjZWxsLVx1MDAzZW5ldC1cdTAwM2VjZWxsc19keW5faW5vLCBjZWxsLVx1MDAzZWR5bnJvb3RfaW5vKTtcbiYjNDM7XHRcdHVwX3dyaXRlKFx1MDAyNmNlbGwtXHUwMDNlbmV0LVx1MDAzZWNlbGxzX2xvY2spO1xuJiM0MztcdH1cbiYjNDM7XG4gXHRjYWxsX3JjdShcdTAwMjZjZWxsLVx1MDAzZXJjdSwgYWZzX2NlbGxfZGVzdHJveSk7XG4gfVxuIFxuZGlmZiAtLWdpdCBhL2ZzL2Fmcy9jbXNlcnZpY2UuYyBiL2ZzL2Fmcy9jbXNlcnZpY2UuY1xuaW5kZXggNTU0MGFlMWNhZDU5OWEuLmRiMzk0ZjEwMWZjNjZhIDEwMDY0NFxuLS0tIGEvZnMvYWZzL2Ntc2VydmljZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9hZnMvY21zZXJ2aWNlLmNcbkBAIC0zMzQsNyAmIzQzOzMzNCw2IEBAIHN0YXRpYyBpbnQgYWZzX2RlbGl2ZXJfY2JfaW5pdF9jYWxsX2JhY2tfc3RhdGUzKHN0cnVjdCBhZnNfY2FsbCAqY2FsbClcbiBcdFx0cmV0ID0gYWZzX2V4dHJhY3RfZGF0YShjYWxsLCBmYWxzZSk7XG4gXHRcdHN3aXRjaCAocmV0KSB7XG4gXHRcdGNhc2UgMDpcdFx0YnJlYWs7XG4tXHRcdGNhc2UgLUVBR0FJTjpcdHJldHVybiAwO1xuIFx0XHRkZWZhdWx0Olx0cmV0dXJuIHJldDtcbiBcdFx0fVxuIFxuQEAgLTM2NCw2ICYjNDM7MzYzLDExIEBAIHN0YXRpYyBpbnQgYWZzX2RlbGl2ZXJfY2JfaW5pdF9jYWxsX2JhY2tfc3RhdGUzKHN0cnVjdCBhZnNfY2FsbCAqY2FsbClcbiBcdGlmICghYWZzX2NoZWNrX2NhbGxfc3RhdGUoY2FsbCwgQUZTX0NBTExfU1ZfUkVQTFlJTkcpKVxuIFx0XHRyZXR1cm4gYWZzX2lvX2Vycm9yKGNhbGwsIGFmc19pb19lcnJvcl9jbV9yZXBseSk7XG4gXG4mIzQzO1x0aWYgKCFjYWxsLVx1MDAzZXNlcnZlcikge1xuJiM0MztcdFx0dHJhY2VfYWZzX2NtX25vX3NlcnZlcl91KGNhbGwsIGNhbGwtXHUwMDNlcmVxdWVzdCk7XG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XHR9XG4mIzQzO1xuIFx0aWYgKG1lbWNtcChjYWxsLVx1MDAzZXJlcXVlc3QsIFx1MDAyNmNhbGwtXHUwMDNlc2VydmVyLVx1MDAzZV91dWlkLCBzaXplb2YoY2FsbC1cdTAwM2VzZXJ2ZXItXHUwMDNlX3V1aWQpKSAhPSAwKSB7XG4gXHRcdHByX25vdGljZShcJiMzNDtDYWxsYmFjayBVVUlEIGRvZXMgbm90IG1hdGNoIGZpbGVzZXJ2ZXIgVVVJRFxcblwmIzM0Oyk7XG4gXHRcdHRyYWNlX2Fmc19jbV9ub19zZXJ2ZXJfdShjYWxsLCBjYWxsLVx1MDAzZXJlcXVlc3QpO1xuQEAgLTQ1MSw3ICYjNDM7NDU1LDYgQEAgc3RhdGljIGludCBhZnNfZGVsaXZlcl9jYl9wcm9iZV91dWlkKHN0cnVjdCBhZnNfY2FsbCAqY2FsbClcbiBcdFx0cmV0ID0gYWZzX2V4dHJhY3RfZGF0YShjYWxsLCBmYWxzZSk7XG4gXHRcdHN3aXRjaCAocmV0KSB7XG4gXHRcdGNhc2UgMDpcdFx0YnJlYWs7XG4tXHRcdGNhc2UgLUVBR0FJTjpcdHJldHVybiAwO1xuIFx0XHRkZWZhdWx0Olx0cmV0dXJuIHJldDtcbiBcdFx0fVxuIFxuZGlmZiAtLWdpdCBhL2ZzL2Fmcy9kaXIuYyBiL2ZzL2Fmcy9kaXIuY1xuaW5kZXggNDk4Yjk5Y2NkZjBlMjcuLjZkZjU2ZmU5MTYzZmQ3IDEwMDY0NFxuLS0tIGEvZnMvYWZzL2Rpci5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9hZnMvZGlyLmNcbkBAIC0yOCw5ICYjNDM7MjgsMTEgQEAgc3RhdGljIGludCBhZnNfZF9yZXZhbGlkYXRlKHN0cnVjdCBpbm9kZSAqZGlyLCBjb25zdCBzdHJ1Y3QgcXN0ciAqbmFtZSxcbiBzdGF0aWMgaW50IGFmc19kX2RlbGV0ZShjb25zdCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpO1xuIHN0YXRpYyB2b2lkIGFmc19kX2lwdXQoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgaW5vZGUgKmlub2RlKTtcbiBzdGF0aWMgYm9vbCBhZnNfbG9va3VwX29uZV9maWxsZGlyKHN0cnVjdCBkaXJfY29udGV4dCAqY3R4LCBjb25zdCBjaGFyICpuYW1lLCBpbnQgbmxlbixcbi1cdFx0XHRcdCAgbG9mZl90IGZwb3MsIHU2NCBpbm8sIHVuc2lnbmVkIGR0eXBlKTtcbiYjNDM7XHRcdFx0XHQgICB1NjQgaW5vLCB1MzIgdW5pcXVpZmllcik7XG4mIzQzOyNkZWZpbmUgQUZTX0xPT0tVUF9PTkUgKChmaWxsZGlyX3QpMHgxMjNVTClcbiBzdGF0aWMgYm9vbCBhZnNfbG9va3VwX2ZpbGxkaXIoc3RydWN0IGRpcl9jb250ZXh0ICpjdHgsIGNvbnN0IGNoYXIgKm5hbWUsIGludCBubGVuLFxuLVx0XHRcdCAgICAgIGxvZmZfdCBmcG9zLCB1NjQgaW5vLCB1bnNpZ25lZCBkdHlwZSk7XG4mIzQzO1x0XHRcdCAgICAgICB1NjQgaW5vLCB1MzIgdW5pcXVpZmllcik7XG4mIzQzOyNkZWZpbmUgQUZTX0xPT0tVUCAoKGZpbGxkaXJfdCkweDEzN1VMKVxuIHN0YXRpYyBpbnQgYWZzX2NyZWF0ZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXG4gXHRcdCAgICAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlLCBib29sIGV4Y2wpO1xuIHN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICphZnNfbWtkaXIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuQEAgLTQyMSwxMSAmIzQzOzQyMywxOCBAQCBzdGF0aWMgaW50IGFmc19kaXJfaXRlcmF0ZV9ibG9jayhzdHJ1Y3QgYWZzX3Zub2RlICpkdm5vZGUsXG4gXHRcdH1cbiBcbiBcdFx0LyogZm91bmQgdGhlIG5leHQgZW50cnkgKi9cbi1cdFx0aWYgKCFkaXJfZW1pdChjdHgsIGRpcmUtXHUwMDNldS5uYW1lLCBubGVuLFxuLVx0XHRcdCAgICAgIG50b2hsKGRpcmUtXHUwMDNldS52bm9kZSksXG4tXHRcdFx0ICAgICAgKGN0eC1cdTAwM2VhY3RvciA9PSBhZnNfbG9va3VwX2ZpbGxkaXIgfHxcbi1cdFx0XHQgICAgICAgY3R4LVx1MDAzZWFjdG9yID09IGFmc19sb29rdXBfb25lX2ZpbGxkaXIpP1xuLVx0XHRcdCAgICAgIG50b2hsKGRpcmUtXHUwMDNldS51bmlxdWUpIDogRFRfVU5LTk9XTikpIHtcbiYjNDM7XHRcdGlmIChjdHgtXHUwMDNlYWN0b3IgPT0gQUZTX0xPT0tVUCkge1xuJiM0MztcdFx0XHRpZiAoIWFmc19sb29rdXBfZmlsbGRpcihjdHgsIGRpcmUtXHUwMDNldS5uYW1lLCBubGVuLFxuJiM0MztcdFx0XHRcdFx0XHRudG9obChkaXJlLVx1MDAzZXUudm5vZGUpLFxuJiM0MztcdFx0XHRcdFx0XHRudG9obChkaXJlLVx1MDAzZXUudW5pcXVlKSkpXG4mIzQzO1x0XHRcdFx0cmV0dXJuIDA7XG4mIzQzO1x0XHR9IGVsc2UgaWYgKGN0eC1cdTAwM2VhY3RvciA9PSBBRlNfTE9PS1VQX09ORSkge1xuJiM0MztcdFx0XHRpZiAoIWFmc19sb29rdXBfb25lX2ZpbGxkaXIoY3R4LCBkaXJlLVx1MDAzZXUubmFtZSwgbmxlbixcbiYjNDM7XHRcdFx0XHRcdFx0ICAgIG50b2hsKGRpcmUtXHUwMDNldS52bm9kZSksXG4mIzQzO1x0XHRcdFx0XHRcdCAgICBudG9obChkaXJlLVx1MDAzZXUudW5pcXVlKSkpXG4mIzQzO1x0XHRcdFx0cmV0dXJuIDA7XG4mIzQzO1x0XHR9IGVsc2UgaWYgKCFkaXJfZW1pdChjdHgsIGRpcmUtXHUwMDNldS5uYW1lLCBubGVuLFxuJiM0MztcdFx0XHRcdCAgICAgbnRvaGwoZGlyZS1cdTAwM2V1LnZub2RlKSwgRFRfVU5LTk9XTikpIHtcbiBcdFx0XHRfbGVhdmUoXCYjMzQ7ID0gMCBbZnVsbF1cJiMzNDspO1xuIFx0XHRcdHJldHVybiAwO1xuIFx0XHR9XG5AQCAtNTQ1LDYgJiM0Mzs1NTQsNyBAQCBzdGF0aWMgaW50IGFmc19yZWFkZGlyKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgZGlyX2NvbnRleHQgKmN0eClcbiB7XG4gXHRhZnNfZGF0YXZlcnNpb25fdCBkaXJfdmVyc2lvbjtcbiBcbiYjNDM7XHRjdHgtXHUwMDNlZHRfZmxhZ3NfbWFzayA9IFVJTlRfTUFYO1xuIFx0cmV0dXJuIGFmc19kaXJfaXRlcmF0ZShmaWxlX2lub2RlKGZpbGUpLCBjdHgsIGZpbGUsIFx1MDAyNmRpcl92ZXJzaW9uKTtcbiB9XG4gXG5AQCAtNTU0LDE0ICYjNDM7NTY0LDE0IEBAIHN0YXRpYyBpbnQgYWZzX3JlYWRkaXIoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBkaXJfY29udGV4dCAqY3R4KVxuICAqICAgdW5pcXVpZmllciB0aHJvdWdoIGR0eXBlXG4gICovXG4gc3RhdGljIGJvb2wgYWZzX2xvb2t1cF9vbmVfZmlsbGRpcihzdHJ1Y3QgZGlyX2NvbnRleHQgKmN0eCwgY29uc3QgY2hhciAqbmFtZSxcbi1cdFx0XHRcdCAgaW50IG5sZW4sIGxvZmZfdCBmcG9zLCB1NjQgaW5vLCB1bnNpZ25lZCBkdHlwZSlcbiYjNDM7XHRcdFx0XHQgIGludCBubGVuLCB1NjQgaW5vLCB1MzIgdW5pcXVpZmllcilcbiB7XG4gXHRzdHJ1Y3QgYWZzX2xvb2t1cF9vbmVfY29va2llICpjb29raWUgPVxuIFx0XHRjb250YWluZXJfb2YoY3R4LCBzdHJ1Y3QgYWZzX2xvb2t1cF9vbmVfY29va2llLCBjdHgpO1xuIFxuIFx0X2VudGVyKFwmIzM0O3slcywldX0sJXMsJXUsLCVsbHUsJXVcJiMzNDssXG4gXHQgICAgICAgY29va2llLVx1MDAzZW5hbWUubmFtZSwgY29va2llLVx1MDAzZW5hbWUubGVuLCBuYW1lLCBubGVuLFxuLVx0ICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpIGlubywgZHR5cGUpO1xuJiM0MztcdCAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKSBpbm8sIHVuaXF1aWZpZXIpO1xuIFxuIFx0LyogaW5zYW5pdHkgY2hlY2tzIGZpcnN0ICovXG4gXHRCVUlMRF9CVUdfT04oc2l6ZW9mKHVuaW9uIGFmc194ZHJfZGlyX2Jsb2NrKSAhPSAyMDQ4KTtcbkBAIC01NzQsNyAmIzQzOzU4NCw3IEBAIHN0YXRpYyBib29sIGFmc19sb29rdXBfb25lX2ZpbGxkaXIoc3RydWN0IGRpcl9jb250ZXh0ICpjdHgsIGNvbnN0IGNoYXIgKm5hbWUsXG4gXHR9XG4gXG4gXHRjb29raWUtXHUwMDNlZmlkLnZub2RlID0gaW5vO1xuLVx0Y29va2llLVx1MDAzZWZpZC51bmlxdWUgPSBkdHlwZTtcbiYjNDM7XHRjb29raWUtXHUwMDNlZmlkLnVuaXF1ZSA9IHVuaXF1aWZpZXI7XG4gXHRjb29raWUtXHUwMDNlZm91bmQgPSAxO1xuIFxuIFx0X2xlYXZlKFwmIzM0OyA9IGZhbHNlIFtmb3VuZF1cJiMzNDspO1xuQEAgLTU5MSw3ICYjNDM7NjAxLDcgQEAgc3RhdGljIGludCBhZnNfZG9fbG9va3VwX29uZShzdHJ1Y3QgaW5vZGUgKmRpciwgY29uc3Qgc3RydWN0IHFzdHIgKm5hbWUsXG4ge1xuIFx0c3RydWN0IGFmc19zdXBlcl9pbmZvICphcyA9IGRpci1cdTAwM2VpX3NiLVx1MDAzZXNfZnNfaW5mbztcbiBcdHN0cnVjdCBhZnNfbG9va3VwX29uZV9jb29raWUgY29va2llID0ge1xuLVx0XHQuY3R4LmFjdG9yID0gYWZzX2xvb2t1cF9vbmVfZmlsbGRpcixcbiYjNDM7XHRcdC5jdHguYWN0b3IgPSBBRlNfTE9PS1VQX09ORSxcbiBcdFx0Lm5hbWUgPSAqbmFtZSxcbiBcdFx0LmZpZC52aWQgPSBhcy1cdTAwM2V2b2x1bWUtXHUwMDNldmlkXG4gXHR9O1xuQEAgLTYyMiwxNCAmIzQzOzYzMiwxNCBAQCBzdGF0aWMgaW50IGFmc19kb19sb29rdXBfb25lKHN0cnVjdCBpbm9kZSAqZGlyLCBjb25zdCBzdHJ1Y3QgcXN0ciAqbmFtZSxcbiAgKiAgIHVuaXF1aWZpZXIgdGhyb3VnaCBkdHlwZVxuICAqL1xuIHN0YXRpYyBib29sIGFmc19sb29rdXBfZmlsbGRpcihzdHJ1Y3QgZGlyX2NvbnRleHQgKmN0eCwgY29uc3QgY2hhciAqbmFtZSxcbi1cdFx0XHQgICAgICBpbnQgbmxlbiwgbG9mZl90IGZwb3MsIHU2NCBpbm8sIHVuc2lnbmVkIGR0eXBlKVxuJiM0MztcdFx0XHQgICAgICBpbnQgbmxlbiwgdTY0IGlubywgdTMyIHVuaXF1aWZpZXIpXG4ge1xuIFx0c3RydWN0IGFmc19sb29rdXBfY29va2llICpjb29raWUgPVxuIFx0XHRjb250YWluZXJfb2YoY3R4LCBzdHJ1Y3QgYWZzX2xvb2t1cF9jb29raWUsIGN0eCk7XG4gXG4gXHRfZW50ZXIoXCYjMzQ7eyVzLCV1fSwlcywldSwsJWxsdSwldVwmIzM0OyxcbiBcdCAgICAgICBjb29raWUtXHUwMDNlbmFtZS5uYW1lLCBjb29raWUtXHUwMDNlbmFtZS5sZW4sIG5hbWUsIG5sZW4sXG4tXHQgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZykgaW5vLCBkdHlwZSk7XG4mIzQzO1x0ICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpIGlubywgdW5pcXVpZmllcik7XG4gXG4gXHQvKiBpbnNhbml0eSBjaGVja3MgZmlyc3QgKi9cbiBcdEJVSUxEX0JVR19PTihzaXplb2YodW5pb24gYWZzX3hkcl9kaXJfYmxvY2spICE9IDIwNDgpO1xuQEAgLTYzNyw3ICYjNDM7NjQ3LDcgQEAgc3RhdGljIGJvb2wgYWZzX2xvb2t1cF9maWxsZGlyKHN0cnVjdCBkaXJfY29udGV4dCAqY3R4LCBjb25zdCBjaGFyICpuYW1lLFxuIFxuIFx0aWYgKGNvb2tpZS1cdTAwM2Vucl9maWRzIFx1MDAzYyA1MCkge1xuIFx0XHRjb29raWUtXHUwMDNlZmlkc1tjb29raWUtXHUwMDNlbnJfZmlkc10udm5vZGVcdD0gaW5vO1xuLVx0XHRjb29raWUtXHUwMDNlZmlkc1tjb29raWUtXHUwMDNlbnJfZmlkc10udW5pcXVlXHQ9IGR0eXBlO1xuJiM0MztcdFx0Y29va2llLVx1MDAzZWZpZHNbY29va2llLVx1MDAzZW5yX2ZpZHNdLnVuaXF1ZVx0PSB1bmlxdWlmaWVyO1xuIFx0XHRjb29raWUtXHUwMDNlbnJfZmlkcyYjNDM7JiM0Mzs7XG4gXHR9XG4gXG5AQCAtNzc4LDcgJiM0Mzs3ODgsNyBAQCBzdGF0aWMgc3RydWN0IGlub2RlICphZnNfZG9fbG9va3VwKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpXG4gXG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBBUlJBWV9TSVpFKGNvb2tpZS1cdTAwM2VmaWRzKTsgaSYjNDM7JiM0MzspXG4gXHRcdGNvb2tpZS1cdTAwM2VmaWRzW2ldLnZpZCA9IGR2bm9kZS1cdTAwM2VmaWQudmlkO1xuLVx0Y29va2llLVx1MDAzZWN0eC5hY3RvciA9IGFmc19sb29rdXBfZmlsbGRpcjtcbiYjNDM7XHRjb29raWUtXHUwMDNlY3R4LmFjdG9yID0gQUZTX0xPT0tVUDtcbiBcdGNvb2tpZS1cdTAwM2VuYW1lID0gZGVudHJ5LVx1MDAzZWRfbmFtZTtcbiBcdGNvb2tpZS1cdTAwM2Vucl9maWRzID0gMjsgLyogc2xvdCAxIGlzIHNhdmVkIGZvciB0aGUgZmlkIHdlIGFjdHVhbGx5IHdhbnRcbiBcdFx0XHQgICAgICAqIGFuZCBzbG90IDAgZm9yIHRoZSBkaXJlY3RvcnkgKi9cbmRpZmYgLS1naXQgYS9mcy9hZnMvZHlucm9vdC5jIGIvZnMvYWZzL2R5bnJvb3QuY1xuaW5kZXggMWQ1ZTMzYmM3NTAyMjQuLjZlM2M4YzY5MWJhOTdmIDEwMDY0NFxuLS0tIGEvZnMvYWZzL2R5bnJvb3QuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvYWZzL2R5bnJvb3QuY1xuQEAgLTI3OCw3ICYjNDM7Mjc4LDcgQEAgc3RhdGljIHN0cnVjdCBkZW50cnkgKmFmc19sb29rdXBfYXRjZWxsKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnlcbiB9XG4gXG4gLypcbi0gKiBUcmFuc2NyaWJlIHRoZSBjZWxsIGRhdGFiYXNlIGludG8gcmVhZGRpciBjb250ZW50IHVuZGVyIHRoZSBSQ1UgcmVhZCBsb2NrLlxuJiM0MzsgKiBUcmFuc2NyaWJlIHRoZSBjZWxsIGRhdGFiYXNlIGludG8gcmVhZGRpciBjb250ZW50IHVuZGVyIG5ldC1cdTAwM2VjZWxsc19sb2NrLlxuICAqIEVhY2ggY2VsbCBwcm9kdWNlcyB0d28gZW50cmllcywgb25lIHByZWZpeGVkIHdpdGggYSBkb3QgYW5kIG9uZSBub3QuXG4gICovXG4gc3RhdGljIGludCBhZnNfZHlucm9vdF9yZWFkZGlyX2NlbGxzKHN0cnVjdCBhZnNfbmV0ICpuZXQsIHN0cnVjdCBkaXJfY29udGV4dCAqY3R4KVxuZGlmZiAtLWdpdCBhL2ZzL2Fmcy9mc19vcGVyYXRpb24uYyBiL2ZzL2Fmcy9mc19vcGVyYXRpb24uY1xuaW5kZXggYzBkYmJjNmQzNzE2ZTAuLjIwODAxYjI5NTIxZDFlIDEwMDY0NFxuLS0tIGEvZnMvYWZzL2ZzX29wZXJhdGlvbi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9hZnMvZnNfb3BlcmF0aW9uLmNcbkBAIC0zNDgsNyAmIzQzOzM0OCw3IEBAIGludCBhZnNfcHV0X29wZXJhdGlvbihzdHJ1Y3QgYWZzX29wZXJhdGlvbiAqb3ApXG4gXHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG9wLVx1MDAzZW5yX2ZpbGVzIC0gMjsgaSYjNDM7JiM0MzspXG4gXHRcdFx0aWYgKG9wLVx1MDAzZW1vcmVfZmlsZXNbaV0ucHV0X3Zub2RlKVxuIFx0XHRcdFx0aXB1dChcdTAwMjZvcC1cdTAwM2Vtb3JlX2ZpbGVzW2ldLnZub2RlLVx1MDAzZW5ldGZzLmlub2RlKTtcbi1cdFx0a2ZyZWUob3AtXHUwMDNlbW9yZV9maWxlcyk7XG4mIzQzO1x0XHRrdmZyZWUob3AtXHUwMDNlbW9yZV9maWxlcyk7XG4gXHR9XG4gXG4gXHRpZiAob3AtXHUwMDNlZXN0YXRlKSB7XG5kaWZmIC0tZ2l0IGEvZnMvYWZzL2lub2RlLmMgYi9mcy9hZnMvaW5vZGUuY1xuaW5kZXggM2Y0ODQ1ODY5NGJhYTUuLjE0ZjM5YTliZWE2Y2ZlIDEwMDY0NFxuLS0tIGEvZnMvYWZzL2lub2RlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2Fmcy9pbm9kZS5jXG5AQCAtNTIsOSAmIzQzOzUyLDkgQEAgc3RhdGljIG5vaW5saW5lIHZvaWQgZHVtcF92bm9kZShzdHJ1Y3QgYWZzX3Zub2RlICp2bm9kZSwgc3RydWN0IGFmc192bm9kZSAqcGFyZW5cbiAvKlxuICAqIFNldCBwYXJhbWV0ZXJzIGZvciB0aGUgbmV0ZnMgbGlicmFyeVxuICAqL1xuLXN0YXRpYyB2b2lkIGFmc19zZXRfbmV0ZnNfY29udGV4dChzdHJ1Y3QgYWZzX3Zub2RlICp2bm9kZSlcbiYjNDM7c3RhdGljIHZvaWQgYWZzX3NldF9uZXRmc19jb250ZXh0KHN0cnVjdCBhZnNfdm5vZGUgKnZub2RlLCBib29sIGlzX2ZpbGUpXG4ge1xuLVx0bmV0ZnNfaW5vZGVfaW5pdChcdTAwMjZ2bm9kZS1cdTAwM2VuZXRmcywgXHUwMDI2YWZzX3JlcV9vcHMsIHRydWUpO1xuJiM0MztcdG5ldGZzX2lub2RlX2luaXQoXHUwMDI2dm5vZGUtXHUwMDNlbmV0ZnMsIFx1MDAyNmFmc19yZXFfb3BzLCBpc19maWxlKTtcbiB9XG4gXG4gLypcbkBAIC05Myw2ICYjNDM7OTMsMTAgQEAgc3RhdGljIGludCBhZnNfaW5vZGVfaW5pdF9mcm9tX3N0YXR1cyhzdHJ1Y3QgYWZzX29wZXJhdGlvbiAqb3AsXG4gXHRpbm9kZS1cdTAwM2VpX2dpZCA9IG1ha2Vfa2dpZChcdTAwMjZpbml0X3VzZXJfbnMsIHN0YXR1cy1cdTAwM2Vncm91cCk7XG4gXHRzZXRfbmxpbmsoXHUwMDI2dm5vZGUtXHUwMDNlbmV0ZnMuaW5vZGUsIHN0YXR1cy1cdTAwM2VubGluayk7XG4gXG4mIzQzO1x0aV9zaXplX3dyaXRlKGlub2RlLCBzdGF0dXMtXHUwMDNlc2l6ZSk7XG4mIzQzO1x0aW5vZGVfc2V0X2J5dGVzKGlub2RlLCBzdGF0dXMtXHUwMDNlc2l6ZSk7XG4mIzQzO1x0YWZzX3NldF9uZXRmc19jb250ZXh0KHZub2RlLCBzdGF0dXMtXHUwMDNldHlwZSA9PSBBRlNfRlRZUEVfRklMRSk7XG4mIzQzO1xuIFx0c3dpdGNoIChzdGF0dXMtXHUwMDNldHlwZSkge1xuIFx0Y2FzZSBBRlNfRlRZUEVfRklMRTpcbiBcdFx0aW5vZGUtXHUwMDNlaV9tb2RlXHQ9IFNfSUZSRUcgfCAoc3RhdHVzLVx1MDAzZW1vZGUgXHUwMDI2IFNfSUFMTFVHTyk7XG5AQCAtMTI2LDcgJiM0MzsxMzAsNiBAQCBzdGF0aWMgaW50IGFmc19pbm9kZV9pbml0X2Zyb21fc3RhdHVzKHN0cnVjdCBhZnNfb3BlcmF0aW9uICpvcCxcbiBcdFx0fVxuIFx0XHRpbm9kZS1cdTAwM2VpX21hcHBpbmctXHUwMDNlYV9vcHNcdD0gXHUwMDI2YWZzX3N5bWxpbmtfYW9wcztcbiBcdFx0aW5vZGVfbm9oaWdobWVtKGlub2RlKTtcbi1cdFx0bWFwcGluZ19zZXRfcmVsZWFzZV9hbHdheXMoaW5vZGUtXHUwMDNlaV9tYXBwaW5nKTtcbiBcdFx0YnJlYWs7XG4gXHRkZWZhdWx0OlxuIFx0XHRkdW1wX3Zub2RlKHZub2RlLCBvcC1cdTAwM2VmaWxlWzBdLnZub2RlICE9IHZub2RlID8gb3AtXHUwMDNlZmlsZVswXS52bm9kZSA6IE5VTEwpO1xuQEAgLTEzNCwxMCAmIzQzOzEzNyw2IEBAIHN0YXRpYyBpbnQgYWZzX2lub2RlX2luaXRfZnJvbV9zdGF0dXMoc3RydWN0IGFmc19vcGVyYXRpb24gKm9wLFxuIFx0XHRyZXR1cm4gYWZzX3Byb3RvY29sX2Vycm9yKE5VTEwsIGFmc19lcHJvdG9fZmlsZV90eXBlKTtcbiBcdH1cbiBcbi1cdGlfc2l6ZV93cml0ZShpbm9kZSwgc3RhdHVzLVx1MDAzZXNpemUpO1xuLVx0aW5vZGVfc2V0X2J5dGVzKGlub2RlLCBzdGF0dXMtXHUwMDNlc2l6ZSk7XG4tXHRhZnNfc2V0X25ldGZzX2NvbnRleHQodm5vZGUpO1xuLVxuIFx0dm5vZGUtXHUwMDNlaW52YWxpZF9iZWZvcmVcdD0gc3RhdHVzLVx1MDAzZWRhdGFfdmVyc2lvbjtcbiBcdHRyYWNlX2Fmc19zZXRfZHYodm5vZGUsIHN0YXR1cy1cdTAwM2VkYXRhX3ZlcnNpb24pO1xuIFx0aW5vZGVfc2V0X2l2ZXJzaW9uX3JhdyhcdTAwMjZ2bm9kZS1cdTAwM2VuZXRmcy5pbm9kZSwgc3RhdHVzLVx1MDAzZWRhdGFfdmVyc2lvbik7XG5AQCAtNTY2LDcgJiM0Mzs1NjUsNiBAQCBzdHJ1Y3QgaW5vZGUgKmFmc19yb290X2lnZXQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IGtleSAqa2V5KVxuIFxuIFx0dm5vZGUgPSBBRlNfRlNfSShpbm9kZSk7XG4gXHR2bm9kZS1cdTAwM2VjYl92X2NoZWNrID0gYXRvbWljX3JlYWQoXHUwMDI2YXMtXHUwMDNldm9sdW1lLVx1MDAzZWNiX3ZfYnJlYWspO1xuLVx0YWZzX3NldF9uZXRmc19jb250ZXh0KHZub2RlKTtcbiBcbiBcdG9wID0gYWZzX2FsbG9jX29wZXJhdGlvbihrZXksIGFzLVx1MDAzZXZvbHVtZSk7XG4gXHRpZiAoSVNfRVJSKG9wKSkge1xuQEAgLTY4Miw2ICYjNDM7NjgwLDcgQEAgdm9pZCBhZnNfZXZpY3RfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSlcbiBcdFx0aW5vZGUtXHUwMDNlaV9tYXBwaW5nLVx1MDAzZWFfb3BzLVx1MDAzZXdyaXRlcGFnZXMoaW5vZGUtXHUwMDNlaV9tYXBwaW5nLCBcdTAwMjZ3YmMpO1xuIFx0fVxuIFxuJiM0MztcdGZsdXNoX2RlbGF5ZWRfd29yayhcdTAwMjZ2bm9kZS1cdTAwM2Vsb2NrX3dvcmspO1xuIFx0bmV0ZnNfd2FpdF9mb3Jfb3V0c3RhbmRpbmdfaW8oaW5vZGUpO1xuIFx0dHJ1bmNhdGVfaW5vZGVfcGFnZXNfZmluYWwoXHUwMDI2aW5vZGUtXHUwMDNlaV9kYXRhKTtcbiBcdG5ldGZzX2ZyZWVfZm9saW9xX2J1ZmZlcih2bm9kZS1cdTAwM2VkaXJlY3RvcnkpO1xuZGlmZiAtLWdpdCBhL2ZzL2Fmcy9pbnRlcm5hbC5oIGIvZnMvYWZzL2ludGVybmFsLmhcbmluZGV4IDBiNzJhODU2NjI5OTkyLi42MDFmMDFlNWMxNWZjYyAxMDA2NDRcbi0tLSBhL2ZzL2Fmcy9pbnRlcm5hbC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9hZnMvaW50ZXJuYWwuaFxuQEAgLTM4OCw2ICYjNDM7Mzg4LDcgQEAgc3RydWN0IGFmc19jZWxsIHtcbiAjZGVmaW5lIEFGU19DRUxMX0ZMX05PX0dDXHQwXHRcdC8qIFRoZSBjZWxsIHdhcyBhZGRlZCBtYW51YWxseSwgZG9uJiMzOTt0IGF1dG8tZ2MgKi9cbiAjZGVmaW5lIEFGU19DRUxMX0ZMX0RPX0xPT0tVUFx0MVx0XHQvKiBETlMgbG9va3VwIHJlcXVlc3RlZCAqL1xuICNkZWZpbmUgQUZTX0NFTExfRkxfQ0hFQ0tfQUxJQVNcdDJcdFx0LyogTmVlZCB0byBjaGVjayBmb3IgYWxpYXNlcyAqL1xuJiM0MzsjZGVmaW5lIEFGU19DRUxMX0ZMX0hBVkVfSU5PXHQzXHRcdC8qIEhhdmUgZHlucm9vdF9pbm8gKi9cbiBcdGVudW0gYWZzX2NlbGxfc3RhdGVcdHN0YXRlO1xuIFx0c2hvcnRcdFx0XHRlcnJvcjtcbiBcdGVudW0gZG5zX3JlY29yZF9zb3VyY2VcdGRuc19zb3VyY2U6ODtcdC8qIExhdGVzdCBzb3VyY2Ugb2YgZGF0YSBmcm9tIGxvb2t1cCAqL1xuQEAgLTc1MCw4ICYjNDM7NzUxLDYgQEAgc3RhdGljIGlubGluZSB2b2lkIGFmc192bm9kZV9zZXRfY2FjaGUoc3RydWN0IGFmc192bm9kZSAqdm5vZGUsXG4ge1xuICNpZmRlZiBDT05GSUdfQUZTX0ZTQ0FDSEVcbiBcdHZub2RlLVx1MDAzZW5ldGZzLmNhY2hlID0gY29va2llO1xuLVx0aWYgKGNvb2tpZSlcbi1cdFx0bWFwcGluZ19zZXRfcmVsZWFzZV9hbHdheXModm5vZGUtXHUwMDNlbmV0ZnMuaW5vZGUuaV9tYXBwaW5nKTtcbiAjZW5kaWZcbiB9XG4gXG5kaWZmIC0tZ2l0IGEvZnMvYWZzL3N1cGVyLmMgYi9mcy9hZnMvc3VwZXIuY1xuaW5kZXggOTQyZjNlOTgwMGQ3ZGMuLjgyYmI3MTM4MjVhMGQ1IDEwMDY0NFxuLS0tIGEvZnMvYWZzL3N1cGVyLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2Fmcy9zdXBlci5jXG5AQCAtNTg3LDcgJiM0Mzs1ODcsOCBAQCBzdGF0aWMgaW50IGFmc19nZXRfdHJlZShzdHJ1Y3QgZnNfY29udGV4dCAqZmMpXG4gXHR9XG4gXG4gXHRmYy1cdTAwM2Vyb290ID0gZGdldChzYi1cdTAwM2VzX3Jvb3QpO1xuLVx0dHJhY2VfYWZzX2dldF90cmVlKGFzLVx1MDAzZWNlbGwsIGFzLVx1MDAzZXZvbHVtZSk7XG4mIzQzO1x0aWYgKCFjdHgtXHUwMDNlZHluX3Jvb3QpXG4mIzQzO1x0XHR0cmFjZV9hZnNfZ2V0X3RyZWUoYXMtXHUwMDNlY2VsbCwgYXMtXHUwMDNldm9sdW1lKTtcbiBcdF9sZWF2ZShcJiMzNDsgPSAwIFslcF1cJiMzNDssIHNiKTtcbiBcdHJldHVybiAwO1xuIFxuQEAgLTY1OSw3ICYjNDM7NjYwLDYgQEAgc3RhdGljIHZvaWQgYWZzX2lfaW5pdF9vbmNlKHZvaWQgKl92bm9kZSlcbiBcdElOSVRfTElTVF9IRUFEKFx1MDAyNnZub2RlLVx1MDAzZXdiX2tleXMpO1xuIFx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2dm5vZGUtXHUwMDNlcGVuZGluZ19sb2Nrcyk7XG4gXHRJTklUX0xJU1RfSEVBRChcdTAwMjZ2bm9kZS1cdTAwM2VncmFudGVkX2xvY2tzKTtcbi1cdElOSVRfREVMQVlFRF9XT1JLKFx1MDAyNnZub2RlLVx1MDAzZWxvY2tfd29yaywgYWZzX2xvY2tfd29yayk7XG4gXHRJTklUX0xJU1RfSEVBRChcdTAwMjZ2bm9kZS1cdTAwM2VjYl9tbWFwX2xpbmspO1xuIFx0c2VxbG9ja19pbml0KFx1MDAyNnZub2RlLVx1MDAzZWNiX2xvY2spO1xuIH1cbkBAIC02OTMsNiAmIzQzOzY5Myw3IEBAIHN0YXRpYyBzdHJ1Y3QgaW5vZGUgKmFmc19hbGxvY19pbm9kZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxuIFxuIFx0aW5pdF9yd3NlbShcdTAwMjZ2bm9kZS1cdTAwM2VybWRpcl9sb2NrKTtcbiBcdElOSVRfV09SSyhcdTAwMjZ2bm9kZS1cdTAwM2VjYl93b3JrLCBhZnNfaW52YWxpZGF0ZV9tbWFwX3dvcmspO1xuJiM0MztcdElOSVRfREVMQVlFRF9XT1JLKFx1MDAyNnZub2RlLVx1MDAzZWxvY2tfd29yaywgYWZzX2xvY2tfd29yayk7XG4gXG4gXHRfbGVhdmUoXCYjMzQ7ID0gJXBcJiMzNDssIFx1MDAyNnZub2RlLVx1MDAzZW5ldGZzLmlub2RlKTtcbiBcdHJldHVybiBcdTAwMjZ2bm9kZS1cdTAwM2VuZXRmcy5pbm9kZTtcbmRpZmYgLS1naXQgYS9mcy9hZnMvdmxfbGlzdC5jIGIvZnMvYWZzL3ZsX2xpc3QuY1xuaW5kZXggM2U0OTY2OTE1ZWE0Y2MuLmMxZGFjNWRiZWQwZGQwIDEwMDY0NFxuLS0tIGEvZnMvYWZzL3ZsX2xpc3QuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvYWZzL3ZsX2xpc3QuY1xuQEAgLTkyLDcgJiM0Mzs5Miw3IEBAIHN0YXRpYyBzdHJ1Y3QgYWZzX2FkZHJfbGlzdCAqYWZzX2V4dHJhY3RfdmxfYWRkcnMoc3RydWN0IGFmc19uZXQgKm5ldCxcbiB7XG4gXHRzdHJ1Y3QgYWZzX2FkZHJfbGlzdCAqYWxpc3Q7XG4gXHRjb25zdCB1OCAqYiA9ICpfYjtcbi1cdGludCByZXQgPSAtRUlOVkFMO1xuJiM0MztcdGludCByZXQ7XG4gXG4gXHRhbGlzdCA9IGFmc19hbGxvY19hZGRybGlzdChucl9hZGRycyk7XG4gXHRpZiAoIWFsaXN0KVxuQEAgLTExMCw2ICYjNDM7MTEwLDcgQEAgc3RhdGljIHN0cnVjdCBhZnNfYWRkcl9saXN0ICphZnNfZXh0cmFjdF92bF9hZGRycyhzdHJ1Y3QgYWZzX25ldCAqbmV0LFxuIFx0XHRjYXNlIEROU19BRERSRVNTX0lTX0lQVjQ6XG4gXHRcdFx0aWYgKGVuZCAtIGIgXHUwMDNjIDQpIHtcbiBcdFx0XHRcdF9sZWF2ZShcJiMzNDsgPSAtRUlOVkFMIFtzaG9ydCBpbmV0XVwmIzM0Oyk7XG4mIzQzO1x0XHRcdFx0cmV0ID0gLUVJTlZBTDtcbiBcdFx0XHRcdGdvdG8gZXJyb3I7XG4gXHRcdFx0fVxuIFx0XHRcdG1lbWNweSh4LCBiLCA0KTtcbkBAIC0xMjIsNiAmIzQzOzEyMyw3IEBAIHN0YXRpYyBzdHJ1Y3QgYWZzX2FkZHJfbGlzdCAqYWZzX2V4dHJhY3RfdmxfYWRkcnMoc3RydWN0IGFmc19uZXQgKm5ldCxcbiBcdFx0Y2FzZSBETlNfQUREUkVTU19JU19JUFY2OlxuIFx0XHRcdGlmIChlbmQgLSBiIFx1MDAzYyAxNikge1xuIFx0XHRcdFx0X2xlYXZlKFwmIzM0OyA9IC1FSU5WQUwgW3Nob3J0IGluZXQ2XVwmIzM0Oyk7XG4mIzQzO1x0XHRcdFx0cmV0ID0gLUVJTlZBTDtcbiBcdFx0XHRcdGdvdG8gZXJyb3I7XG4gXHRcdFx0fVxuIFx0XHRcdG1lbWNweSh4LCBiLCAxNik7XG5AQCAtMTk4LDYgJiM0MzsyMDAsOCBAQCBzdHJ1Y3QgYWZzX3Zsc2VydmVyX2xpc3QgKmFmc19leHRyYWN0X3Zsc2VydmVyX2xpc3Qoc3RydWN0IGFmc19jZWxsICpjZWxsLFxuIFxuIFx0YiAmIzQzOz0gc2l6ZW9mKCpoZHIpO1xuIFx0d2hpbGUgKGVuZCAtIGIgXHUwMDNlPSBzaXplb2YoYnMpKSB7XG4mIzQzO1x0XHRpbnQgbmxlbjtcbiYjNDM7XG4gXHRcdGJzLm5hbWVfbGVuXHQ9IGFmc19leHRyYWN0X2xlMTYoXHUwMDI2Yik7XG4gXHRcdGJzLnByaW9yaXR5XHQ9IGFmc19leHRyYWN0X2xlMTYoXHUwMDI2Yik7XG4gXHRcdGJzLndlaWdodFx0PSBhZnNfZXh0cmFjdF9sZTE2KFx1MDAyNmIpO1xuQEAgLTIwNywxMCAmIzQzOzIxMSwxMiBAQCBzdHJ1Y3QgYWZzX3Zsc2VydmVyX2xpc3QgKmFmc19leHRyYWN0X3Zsc2VydmVyX2xpc3Qoc3RydWN0IGFmc19jZWxsICpjZWxsLFxuIFx0XHRicy5wcm90b2NvbFx0PSAqYiYjNDM7JiM0Mzs7XG4gXHRcdGJzLm5yX2FkZHJzXHQ9ICpiJiM0MzsmIzQzOztcbiBcbiYjNDM7XHRcdG5sZW4gPSBtaW4zKGJzLm5hbWVfbGVuLCBlbmQgLSBiLCAyNTUpO1xuJiM0MztcbiBcdFx0X2RlYnVnKFwmIzM0O2V4dHJhY3QgJXUgJXUgJXUgJXUgJXUgJXUgJSouKnNcJiMzNDssXG4gXHRcdCAgICAgICBicy5uYW1lX2xlbiwgYnMucHJpb3JpdHksIGJzLndlaWdodCxcbiBcdFx0ICAgICAgIGJzLnBvcnQsIGJzLnByb3RvY29sLCBicy5ucl9hZGRycyxcbi1cdFx0ICAgICAgIGJzLm5hbWVfbGVuLCBicy5uYW1lX2xlbiwgYik7XG4mIzQzO1x0XHQgICAgICAgYnMubmFtZV9sZW4sIG5sZW4sIGIpO1xuIFxuIFx0XHRpZiAoZW5kIC0gYiBcdTAwM2MgYnMubmFtZV9sZW4pXG4gXHRcdFx0YnJlYWs7XG5AQCAtMjg3LDggJiM0MzsyOTMsMjAgQEAgc3RydWN0IGFmc192bHNlcnZlcl9saXN0ICphZnNfZXh0cmFjdF92bHNlcnZlcl9saXN0KHN0cnVjdCBhZnNfY2VsbCAqY2VsbCxcbiBcdFx0XHRhZnNfcHV0X2FkZHJsaXN0KG9sZCwgYWZzX2FsaXN0X3RyYWNlX3B1dF92bHNlcnZlcl9vbGQpO1xuIFx0XHR9XG4gXG4mIzQzO1x0XHQvKiBDaGVjayBmb3IgZHVwbGljYXRlcyBpbiB0aGUgc2VydmVyIGxpc3QgKi9cbiYjNDM7XHRcdGZvciAoaiA9IDA7IGogXHUwMDNjIHZsbGlzdC1cdTAwM2Vucl9zZXJ2ZXJzOyBqJiM0MzsmIzQzOykge1xuJiM0MztcdFx0XHRzdHJ1Y3QgYWZzX3Zsc2VydmVyICpzID0gdmxsaXN0LVx1MDAzZXNlcnZlcnNbal0uc2VydmVyO1xuIFxuLVx0XHQvKiBUT0RPOiBNaWdodCB3YW50IHRvIGNoZWNrIGZvciBkdXBsaWNhdGVzICovXG4mIzQzO1x0XHRcdGlmIChzLVx1MDAzZW5hbWVfbGVuID09IHNlcnZlci1cdTAwM2VuYW1lX2xlbiBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdFx0ICAgIHMtXHUwMDNlcG9ydCA9PSBzZXJ2ZXItXHUwMDNlcG9ydCBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdFx0ICAgIHN0cm5jYXNlY21wKHMtXHUwMDNlbmFtZSwgc2VydmVyLVx1MDAzZW5hbWUsIHNlcnZlci1cdTAwM2VuYW1lX2xlbikgPT0gMCkge1xuJiM0MztcdFx0XHRcdGFmc19wdXRfdmxzZXJ2ZXIoY2VsbC1cdTAwM2VuZXQsIHNlcnZlcik7XG4mIzQzO1x0XHRcdFx0c2VydmVyID0gTlVMTDtcbiYjNDM7XHRcdFx0XHRicmVhaztcbiYjNDM7XHRcdFx0fVxuJiM0MztcdFx0fVxuJiM0MztcdFx0aWYgKCFzZXJ2ZXIpXG4mIzQzO1x0XHRcdGNvbnRpbnVlO1xuIFxuIFx0XHQvKiBJbnNlcnRpb24tc29ydCBieSBwcmlvcml0eSBhbmQgd2VpZ2h0ICovXG4gXHRcdGZvciAoaiA9IDA7IGogXHUwMDNjIHZsbGlzdC1cdTAwM2Vucl9zZXJ2ZXJzOyBqJiM0MzsmIzQzOykge1xuZGlmZiAtLWdpdCBhL2ZzL2Fmcy92b2x1bWUuYyBiL2ZzL2Fmcy92b2x1bWUuY1xuaW5kZXggOWFlNWM4YWQyZTA0YjQuLjRmNzlkMjVlYzM3ZjRiIDEwMDY0NFxuLS0tIGEvZnMvYWZzL3ZvbHVtZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9hZnMvdm9sdW1lLmNcbkBAIC00MCw3ICYjNDM7NDAsNyBAQCBzdGF0aWMgc3RydWN0IGFmc192b2x1bWUgKmFmc19pbnNlcnRfdm9sdW1lX2ludG9fY2VsbChzdHJ1Y3QgYWZzX2NlbGwgKmNlbGwsXG4gXHRcdFx0XHRnb3RvIGZvdW5kO1xuIFx0XHRcdH1cbiBcbi1cdFx0XHRzZXRfYml0KEFGU19WT0xVTUVfUk1fVFJFRSwgXHUwMDI2dm9sdW1lLVx1MDAzZWZsYWdzKTtcbiYjNDM7XHRcdFx0c2V0X2JpdChBRlNfVk9MVU1FX1JNX1RSRUUsIFx1MDAyNnAtXHUwMDNlZmxhZ3MpO1xuIFx0XHRcdHJiX3JlcGxhY2Vfbm9kZV9yY3UoXHUwMDI2cC1cdTAwM2VjZWxsX25vZGUsIFx1MDAyNnZvbHVtZS1cdTAwM2VjZWxsX25vZGUsIFx1MDAyNmNlbGwtXHUwMDNldm9sdW1lcyk7XG4gXHRcdH1cbiBcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMiAwOToyNzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT44bTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtBRlNfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDthZnNfYnJlYWtfY2FsbGJhY2tzJiMzNDssCiAgICAmIzM0O2Fmc19sb29rdXBfY2VsbCYjMzQ7LAogICAgJiMzNDthZnNfcmVhZGRpciYjMzQ7LAogICAgJiMzNDthZnNfbG9va3VwJiMzNDssCiAgICAmIzM0O2Fmc19kX3JldmFsaWRhdGUmIzM0OywKICAgICYjMzQ7YWZzX2R5bnJvb3RfcmVhZGRpciYjMzQ7LAogICAgJiMzNDthZnNfcHV0X29wZXJhdGlvbiYjMzQ7LAogICAgJiMzNDthZnNfaWdldCYjMzQ7LAogICAgJiMzNDthZnNfZXh0cmFjdF92bHNlcnZlcl9saXN0JiMzNDssCiAgICAmIzM0O2Fmc19jcmVhdGVfdm9sdW1lJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUgQUZTIGZpbGVzeXN0ZW0sIG1vZGlmeWluZyBjZWxsIGFsbG9jYXRpb24vZGVzdHJ1Y3Rpb24sIGNhbGxiYWNrIGhhbmRsaW5nLCBkaXJlY3RvcnkgaXRlcmF0aW9uIGFuZCBsb29rdXAsIGR5bmFtaWMgcm9vdCByZWFkaW5nLCBvcGVyYXRpb24gbWFuYWdlbWVudCwgaW5vZGUgaW5pdGlhbGl6YXRpb24vZXZpY3Rpb24sIFZMIHNlcnZlciBsaXN0IGV4dHJhY3Rpb24sIGFuZCB2b2x1bWUgaW5zZXJ0aW9uLiBUaGVzZSBhcmUgcmVhY2hhYmxlIGNvcmUgQUZTIGxvZ2ljIHBhdGhzIHRoYXQgY2FuIGJlIGZ1enplZCB2aWEgZmlsZXN5c3RlbSBvcGVyYXRpb25zIGFuZCBuZXR3b3JrIGludGVyYWN0aW9ucy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLApldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXQKICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LAogICBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZTIyNzI2ODk0ZTYwYzdhOTg0OWRlOWVlMmU4ZTRiZTBhNmNhNDAxOApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBNb24gSnVuIDIyIDA5OjI3OjA4IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZnMvYWZzL2NhbGxiYWNrLmMgYi9mcy9hZnMvY2FsbGJhY2suYwppbmRleCA4OTRkMmJhZDZiNmNlYy4uNjEzNTQwMDNjMDA2Y2YgMTAwNjQ0Ci0tLSBhL2ZzL2Fmcy9jYWxsYmFjay5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2Fmcy9jYWxsYmFjay5jCkBAIC0xMTMsMTYgJiM0MzsxMTMsMTIgQEAgc3RhdGljIHN0cnVjdCBhZnNfdm9sdW1lICphZnNfbG9va3VwX3ZvbHVtZV9yY3Uoc3RydWN0IGFmc19jZWxsICpjZWxsLAogewogCXN0cnVjdCBhZnNfdm9sdW1lICp2b2x1bWUgPSBOVUxMOwogCXN0cnVjdCByYl9ub2RlICpwOwotCWludCBzZXEgPSAxOwogCi0JZm9yICg7OykgewomIzQzOwlzY29wZWRfc2VxbG9ja19yZWFkKCZhbXA7Y2VsbC0mZ3Q7dm9sdW1lX2xvY2ssIHNzX2xvY2spIHsKIAkJLyogVW5mb3J0dW5hdGVseSwgcmJ0cmVlIHdhbGtpbmcgZG9lc24mIzM5O3QgZ2l2ZSByZWxpYWJsZSByZXN1bHRzCiAJCSAqIHVuZGVyIGp1c3QgdGhlIFJDVSByZWFkIGxvY2ssIHNvIHdlIGhhdmUgdG8gY2hlY2sgZm9yCiAJCSAqIGNoYW5nZXMuCiAJCSAqLwotCQlzZXEmIzQzOyYjNDM7OyAvKiAyIG9uIHRoZSAxc3QvbG9ja2xlc3MgcGF0aCwgb3RoZXJ3aXNlIG9kZCAqLwotCQlyZWFkX3NlcWJlZ2luX29yX2xvY2soJmFtcDtjZWxsLSZndDt2b2x1bWVfbG9jaywgJmFtcDtzZXEpOwotCiAJCXAgPSByY3VfZGVyZWZlcmVuY2VfcmF3KGNlbGwtJmd0O3ZvbHVtZXMucmJfbm9kZSk7CiAJCXdoaWxlIChwKSB7CiAJCQl2b2x1bWUgPSByYl9lbnRyeShwLCBzdHJ1Y3QgYWZzX3ZvbHVtZSwgY2VsbF9ub2RlKTsKQEAgLTEzOCwxMiAmIzQzOzEzNCw5IEBAIHN0YXRpYyBzdHJ1Y3QgYWZzX3ZvbHVtZSAqYWZzX2xvb2t1cF92b2x1bWVfcmN1KHN0cnVjdCBhZnNfY2VsbCAqY2VsbCwKIAogCQlpZiAodm9sdW1lICZhbXA7JmFtcDsgYWZzX3RyeV9nZXRfdm9sdW1lKHZvbHVtZSwgYWZzX3ZvbHVtZV90cmFjZV9nZXRfY2FsbGJhY2spKQogCQkJYnJlYWs7Ci0JCWlmICghbmVlZF9zZXFyZXRyeSgmYW1wO2NlbGwtJmd0O3ZvbHVtZV9sb2NrLCBzZXEpKQotCQkJYnJlYWs7Ci0JCXNlcSB8PSAxOyAvKiBXYW50IGEgbG9jayBuZXh0IHRpbWUgKi8KJiM0MzsJCXZvbHVtZSA9IE5VTEw7CiAJfQogCi0JZG9uZV9zZXFyZXRyeSgmYW1wO2NlbGwtJmd0O3ZvbHVtZV9sb2NrLCBzZXEpOwogCXJldHVybiB2b2x1bWU7CiB9CiAKQEAgLTIyMSw3ICYjNDM7MjE0LDExIEBAIHN0YXRpYyB2b2lkIGFmc19icmVha19zb21lX2NhbGxiYWNrcyhzdHJ1Y3QgYWZzX3NlcnZlciAqc2VydmVyLAogCiAJcmN1X3JlYWRfbG9jaygpOwogCXZvbHVtZSA9IGFmc19sb29rdXBfdm9sdW1lX3JjdShzZXJ2ZXItJmd0O2NlbGwsIHZpZCk7Ci0JaWYgKGNiYi0mZ3Q7ZmlkLnZub2RlID09IDAgJmFtcDsmYW1wOyBjYmItJmd0O2ZpZC51bmlxdWUgPT0gMCkgewomIzQzOwlpZiAoIXZvbHVtZSkgewomIzQzOwkJLyogSWdub3JlIGJyZWFrcyBvbiB1bmtub3duIHZvbHVtZXMuICovCiYjNDM7CQlyY3VfcmVhZF91bmxvY2soKTsKJiM0MzsJCSpfY291bnQgPSAwOwomIzQzOwl9IGVsc2UgaWYgKGNiYi0mZ3Q7ZmlkLnZub2RlID09IDAgJmFtcDsmYW1wOyBjYmItJmd0O2ZpZC51bmlxdWUgPT0gMCkgewogCQlhZnNfYnJlYWtfdm9sdW1lX2NhbGxiYWNrKHNlcnZlciwgdm9sdW1lKTsKIAkJKl9jb3VudCAtPSAxOwogCQlpZiAoKl9jb3VudCkKZGlmZiAtLWdpdCBhL2ZzL2Fmcy9jZWxsLmMgYi9mcy9hZnMvY2VsbC5jCmluZGV4IDk3Mzg2ODRkYmRkMjY4Li40N2EyNjQ1NzY4ZDc5ZSAxMDA2NDQKLS0tIGEvZnMvYWZzL2NlbGwuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9hZnMvY2VsbC5jCkBAIC0yMDYsMTEgJiM0MzsyMDYsNiBAQCBzdGF0aWMgc3RydWN0IGFmc19jZWxsICphZnNfYWxsb2NfY2VsbChzdHJ1Y3QgYWZzX25ldCAqbmV0LAogCWNlbGwtJmd0O2Ruc19zdGF0dXMgPSB2bGxpc3QtJmd0O3N0YXR1czsKIAlzbXBfc3RvcmVfcmVsZWFzZSgmYW1wO2NlbGwtJmd0O2Ruc19sb29rdXBfY291bnQsIDEpOyAvKiB2cyBzb3VyY2Uvc3RhdHVzICovCiAJYXRvbWljX2luYygmYW1wO25ldC0mZ3Q7Y2VsbHNfb3V0c3RhbmRpbmcpOwotCXJldCA9IGlkcl9hbGxvY19jeWNsaWMoJmFtcDtuZXQtJmd0O2NlbGxzX2R5bl9pbm8sIGNlbGwsCi0JCQkgICAgICAgMiwgSU5UX01BWCAvIDIsIEdGUF9LRVJORUwpOwotCWlmIChyZXQgJmx0OyAwKQotCQlnb3RvIGVycm9yOwotCWNlbGwtJmd0O2R5bnJvb3RfaW5vID0gcmV0OwogCWNlbGwtJmd0O2RlYnVnX2lkID0gYXRvbWljX2luY19yZXR1cm4oJmFtcDtjZWxsX2RlYnVnX2lkKTsKIAogCXRyYWNlX2Fmc19jZWxsKGNlbGwtJmd0O2RlYnVnX2lkLCAxLCAwLCBhZnNfY2VsbF90cmFjZV9hbGxvYyk7CkBAIC0zMDQsNiAmIzQzOzI5OSwxMyBAQCBzdHJ1Y3QgYWZzX2NlbGwgKmFmc19sb29rdXBfY2VsbChzdHJ1Y3QgYWZzX25ldCAqbmV0LAogCQkJZ290byBjZWxsX2FscmVhZHlfZXhpc3RzOwogCX0KIAomIzQzOwlyZXQgPSBpZHJfYWxsb2NfY3ljbGljKCZhbXA7bmV0LSZndDtjZWxsc19keW5faW5vLCBjYW5kaWRhdGUsCiYjNDM7CQkJICAgICAgIDIsIElOVF9NQVggLyAyLCBHRlBfS0VSTkVMKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGNhbnRfYWxsb2NfaW5vOwomIzQzOwljYW5kaWRhdGUtJmd0O2R5bnJvb3RfaW5vID0gcmV0OwomIzQzOwlzZXRfYml0KEFGU19DRUxMX0ZMX0hBVkVfSU5PLCAmYW1wO2NhbmRpZGF0ZS0mZ3Q7ZmxhZ3MpOwomIzQzOwogCWNlbGwgPSBjYW5kaWRhdGU7CiAJY2FuZGlkYXRlID0gTlVMTDsKIAlhZnNfdXNlX2NlbGwoY2VsbCwgdHJhY2UpOwpAQCAtMzc4LDYgJiM0MzszODAsMTEgQEAgc3RydWN0IGFmc19jZWxsICphZnNfbG9va3VwX2NlbGwoc3RydWN0IGFmc19uZXQgKm5ldCwKIAlfbGVhdmUoJiMzNDsgPSAlcCBbY2VsbF0mIzM0OywgY2VsbCk7CiAJcmV0dXJuIGNlbGw7CiAKJiM0MztjYW50X2FsbG9jX2lubzoKJiM0MzsJdXBfd3JpdGUoJmFtcDtuZXQtJmd0O2NlbGxzX2xvY2spOwomIzQzOwlhZnNfcHV0X2NlbGwoY2FuZGlkYXRlLCBhZnNfY2VsbF90cmFjZV9wdXRfY2FuZGlkYXRlKTsKJiM0MzsJZ290byBlcnJvcl9ub3B1dDsKJiM0MzsKIGNlbGxfYWxyZWFkeV9leGlzdHM6CiAJX2RlYnVnKCYjMzQ7Y2VsbCBleGlzdHMmIzM0Oyk7CiAJY2VsbCA9IGN1cnNvcjsKQEAgLTU0Nyw2ICYjNDM7NTU0LDggQEAgc3RhdGljIGludCBhZnNfdXBkYXRlX2NlbGwoc3RydWN0IGFmc19jZWxsICpjZWxsKQogCQlyY3VfYXNzaWduX3BvaW50ZXIoY2VsbC0mZ3Q7dmxfc2VydmVycywgdmxsaXN0KTsKIAkJY2VsbC0mZ3Q7ZG5zX3NvdXJjZSA9IHZsbGlzdC0mZ3Q7c291cmNlOwogCQlvbGQgPSBwOwomIzQzOwl9IGVsc2UgewomIzQzOwkJb2xkID0gdmxsaXN0OwogCX0KIAl3cml0ZV91bmxvY2soJmFtcDtjZWxsLSZndDt2bF9zZXJ2ZXJzX2xvY2spOwogCWFmc19wdXRfdmxzZXJ2ZXJsaXN0KGNlbGwtJmd0O25ldCwgb2xkKTsKQEAgLTU3Nyw3ICYjNDM7NTg2LDYgQEAgc3RhdGljIHZvaWQgYWZzX2NlbGxfZGVzdHJveShzdHJ1Y3QgcmN1X2hlYWQgKnJjdSkKIAlhZnNfcHV0X3Zsc2VydmVybGlzdChuZXQsIHJjdV9hY2Nlc3NfcG9pbnRlcihjZWxsLSZndDt2bF9zZXJ2ZXJzKSk7CiAJYWZzX3VudXNlX2NlbGwoY2VsbC0mZ3Q7YWxpYXNfb2YsIGFmc19jZWxsX3RyYWNlX3VudXNlX2FsaWFzKTsKIAlrZXlfcHV0KGNlbGwtJmd0O2Fub255bW91c19rZXkpOwotCWlkcl9yZW1vdmUoJmFtcDtuZXQtJmd0O2NlbGxzX2R5bl9pbm8sIGNlbGwtJmd0O2R5bnJvb3RfaW5vKTsKIAlrZnJlZShjZWxsLSZndDtuYW1lIC0gMSk7CiAJa2ZyZWUoY2VsbCk7CiAKQEAgLTU5Miw2ICYjNDM7NjAwLDEzIEBAIHN0YXRpYyB2b2lkIGFmc19kZXN0cm95X2NlbGxfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiAJYWZzX3NlZV9jZWxsKGNlbGwsIGFmc19jZWxsX3RyYWNlX2Rlc3Ryb3kpOwogCXRpbWVyX2RlbGV0ZV9zeW5jKCZhbXA7Y2VsbC0mZ3Q7bWFuYWdlbWVudF90aW1lcik7CiAJY2FuY2VsX3dvcmtfc3luYygmYW1wO2NlbGwtJmd0O21hbmFnZXIpOwomIzQzOwomIzQzOwlpZiAodGVzdF9iaXQoQUZTX0NFTExfRkxfSEFWRV9JTk8sICZhbXA7Y2VsbC0mZ3Q7ZmxhZ3MpKSB7CiYjNDM7CQlkb3duX3dyaXRlKCZhbXA7Y2VsbC0mZ3Q7bmV0LSZndDtjZWxsc19sb2NrKTsKJiM0MzsJCWlkcl9yZW1vdmUoJmFtcDtjZWxsLSZndDtuZXQtJmd0O2NlbGxzX2R5bl9pbm8sIGNlbGwtJmd0O2R5bnJvb3RfaW5vKTsKJiM0MzsJCXVwX3dyaXRlKCZhbXA7Y2VsbC0mZ3Q7bmV0LSZndDtjZWxsc19sb2NrKTsKJiM0MzsJfQomIzQzOwogCWNhbGxfcmN1KCZhbXA7Y2VsbC0mZ3Q7cmN1LCBhZnNfY2VsbF9kZXN0cm95KTsKIH0KIApkaWZmIC0tZ2l0IGEvZnMvYWZzL2Ntc2VydmljZS5jIGIvZnMvYWZzL2Ntc2VydmljZS5jCmluZGV4IDU1NDBhZTFjYWQ1OTlhLi5kYjM5NGYxMDFmYzY2YSAxMDA2NDQKLS0tIGEvZnMvYWZzL2Ntc2VydmljZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2Fmcy9jbXNlcnZpY2UuYwpAQCAtMzM0LDcgJiM0MzszMzQsNiBAQCBzdGF0aWMgaW50IGFmc19kZWxpdmVyX2NiX2luaXRfY2FsbF9iYWNrX3N0YXRlMyhzdHJ1Y3QgYWZzX2NhbGwgKmNhbGwpCiAJCXJldCA9IGFmc19leHRyYWN0X2RhdGEoY2FsbCwgZmFsc2UpOwogCQlzd2l0Y2ggKHJldCkgewogCQljYXNlIDA6CQlicmVhazsKLQkJY2FzZSAtRUFHQUlOOglyZXR1cm4gMDsKIAkJZGVmYXVsdDoJcmV0dXJuIHJldDsKIAkJfQogCkBAIC0zNjQsNiAmIzQzOzM2MywxMSBAQCBzdGF0aWMgaW50IGFmc19kZWxpdmVyX2NiX2luaXRfY2FsbF9iYWNrX3N0YXRlMyhzdHJ1Y3QgYWZzX2NhbGwgKmNhbGwpCiAJaWYgKCFhZnNfY2hlY2tfY2FsbF9zdGF0ZShjYWxsLCBBRlNfQ0FMTF9TVl9SRVBMWUlORykpCiAJCXJldHVybiBhZnNfaW9fZXJyb3IoY2FsbCwgYWZzX2lvX2Vycm9yX2NtX3JlcGx5KTsKIAomIzQzOwlpZiAoIWNhbGwtJmd0O3NlcnZlcikgewomIzQzOwkJdHJhY2VfYWZzX2NtX25vX3NlcnZlcl91KGNhbGwsIGNhbGwtJmd0O3JlcXVlc3QpOwomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CX0KJiM0MzsKIAlpZiAobWVtY21wKGNhbGwtJmd0O3JlcXVlc3QsICZhbXA7Y2FsbC0mZ3Q7c2VydmVyLSZndDtfdXVpZCwgc2l6ZW9mKGNhbGwtJmd0O3NlcnZlci0mZ3Q7X3V1aWQpKSAhPSAwKSB7CiAJCXByX25vdGljZSgmIzM0O0NhbGxiYWNrIFVVSUQgZG9lcyBub3QgbWF0Y2ggZmlsZXNlcnZlciBVVUlEXG4mIzM0Oyk7CiAJCXRyYWNlX2Fmc19jbV9ub19zZXJ2ZXJfdShjYWxsLCBjYWxsLSZndDtyZXF1ZXN0KTsKQEAgLTQ1MSw3ICYjNDM7NDU1LDYgQEAgc3RhdGljIGludCBhZnNfZGVsaXZlcl9jYl9wcm9iZV91dWlkKHN0cnVjdCBhZnNfY2FsbCAqY2FsbCkKIAkJcmV0ID0gYWZzX2V4dHJhY3RfZGF0YShjYWxsLCBmYWxzZSk7CiAJCXN3aXRjaCAocmV0KSB7CiAJCWNhc2UgMDoJCWJyZWFrOwotCQljYXNlIC1FQUdBSU46CXJldHVybiAwOwogCQlkZWZhdWx0OglyZXR1cm4gcmV0OwogCQl9CiAKZGlmZiAtLWdpdCBhL2ZzL2Fmcy9kaXIuYyBiL2ZzL2Fmcy9kaXIuYwppbmRleCA0OThiOTljY2RmMGUyNy4uNmRmNTZmZTkxNjNmZDcgMTAwNjQ0Ci0tLSBhL2ZzL2Fmcy9kaXIuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9hZnMvZGlyLmMKQEAgLTI4LDkgJiM0MzsyOCwxMSBAQCBzdGF0aWMgaW50IGFmc19kX3JldmFsaWRhdGUoc3RydWN0IGlub2RlICpkaXIsIGNvbnN0IHN0cnVjdCBxc3RyICpuYW1lLAogc3RhdGljIGludCBhZnNfZF9kZWxldGUoY29uc3Qgc3RydWN0IGRlbnRyeSAqZGVudHJ5KTsKIHN0YXRpYyB2b2lkIGFmc19kX2lwdXQoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgaW5vZGUgKmlub2RlKTsKIHN0YXRpYyBib29sIGFmc19sb29rdXBfb25lX2ZpbGxkaXIoc3RydWN0IGRpcl9jb250ZXh0ICpjdHgsIGNvbnN0IGNoYXIgKm5hbWUsIGludCBubGVuLAotCQkJCSAgbG9mZl90IGZwb3MsIHU2NCBpbm8sIHVuc2lnbmVkIGR0eXBlKTsKJiM0MzsJCQkJICAgdTY0IGlubywgdTMyIHVuaXF1aWZpZXIpOwomIzQzOyNkZWZpbmUgQUZTX0xPT0tVUF9PTkUgKChmaWxsZGlyX3QpMHgxMjNVTCkKIHN0YXRpYyBib29sIGFmc19sb29rdXBfZmlsbGRpcihzdHJ1Y3QgZGlyX2NvbnRleHQgKmN0eCwgY29uc3QgY2hhciAqbmFtZSwgaW50IG5sZW4sCi0JCQkgICAgICBsb2ZmX3QgZnBvcywgdTY0IGlubywgdW5zaWduZWQgZHR5cGUpOwomIzQzOwkJCSAgICAgICB1NjQgaW5vLCB1MzIgdW5pcXVpZmllcik7CiYjNDM7I2RlZmluZSBBRlNfTE9PS1VQICgoZmlsbGRpcl90KTB4MTM3VUwpCiBzdGF0aWMgaW50IGFmc19jcmVhdGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLAogCQkgICAgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSwgYm9vbCBleGNsKTsKIHN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICphZnNfbWtkaXIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLApAQCAtNDIxLDExICYjNDM7NDIzLDE4IEBAIHN0YXRpYyBpbnQgYWZzX2Rpcl9pdGVyYXRlX2Jsb2NrKHN0cnVjdCBhZnNfdm5vZGUgKmR2bm9kZSwKIAkJfQogCiAJCS8qIGZvdW5kIHRoZSBuZXh0IGVudHJ5ICovCi0JCWlmICghZGlyX2VtaXQoY3R4LCBkaXJlLSZndDt1Lm5hbWUsIG5sZW4sCi0JCQkgICAgICBudG9obChkaXJlLSZndDt1LnZub2RlKSwKLQkJCSAgICAgIChjdHgtJmd0O2FjdG9yID09IGFmc19sb29rdXBfZmlsbGRpciB8fAotCQkJICAgICAgIGN0eC0mZ3Q7YWN0b3IgPT0gYWZzX2xvb2t1cF9vbmVfZmlsbGRpcik/Ci0JCQkgICAgICBudG9obChkaXJlLSZndDt1LnVuaXF1ZSkgOiBEVF9VTktOT1dOKSkgewomIzQzOwkJaWYgKGN0eC0mZ3Q7YWN0b3IgPT0gQUZTX0xPT0tVUCkgewomIzQzOwkJCWlmICghYWZzX2xvb2t1cF9maWxsZGlyKGN0eCwgZGlyZS0mZ3Q7dS5uYW1lLCBubGVuLAomIzQzOwkJCQkJCW50b2hsKGRpcmUtJmd0O3Uudm5vZGUpLAomIzQzOwkJCQkJCW50b2hsKGRpcmUtJmd0O3UudW5pcXVlKSkpCiYjNDM7CQkJCXJldHVybiAwOwomIzQzOwkJfSBlbHNlIGlmIChjdHgtJmd0O2FjdG9yID09IEFGU19MT09LVVBfT05FKSB7CiYjNDM7CQkJaWYgKCFhZnNfbG9va3VwX29uZV9maWxsZGlyKGN0eCwgZGlyZS0mZ3Q7dS5uYW1lLCBubGVuLAomIzQzOwkJCQkJCSAgICBudG9obChkaXJlLSZndDt1LnZub2RlKSwKJiM0MzsJCQkJCQkgICAgbnRvaGwoZGlyZS0mZ3Q7dS51bmlxdWUpKSkKJiM0MzsJCQkJcmV0dXJuIDA7CiYjNDM7CQl9IGVsc2UgaWYgKCFkaXJfZW1pdChjdHgsIGRpcmUtJmd0O3UubmFtZSwgbmxlbiwKJiM0MzsJCQkJICAgICBudG9obChkaXJlLSZndDt1LnZub2RlKSwgRFRfVU5LTk9XTikpIHsKIAkJCV9sZWF2ZSgmIzM0OyA9IDAgW2Z1bGxdJiMzNDspOwogCQkJcmV0dXJuIDA7CiAJCX0KQEAgLTU0NSw2ICYjNDM7NTU0LDcgQEAgc3RhdGljIGludCBhZnNfcmVhZGRpcihzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IGRpcl9jb250ZXh0ICpjdHgpCiB7CiAJYWZzX2RhdGF2ZXJzaW9uX3QgZGlyX3ZlcnNpb247CiAKJiM0MzsJY3R4LSZndDtkdF9mbGFnc19tYXNrID0gVUlOVF9NQVg7CiAJcmV0dXJuIGFmc19kaXJfaXRlcmF0ZShmaWxlX2lub2RlKGZpbGUpLCBjdHgsIGZpbGUsICZhbXA7ZGlyX3ZlcnNpb24pOwogfQogCkBAIC01NTQsMTQgJiM0Mzs1NjQsMTQgQEAgc3RhdGljIGludCBhZnNfcmVhZGRpcihzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IGRpcl9jb250ZXh0ICpjdHgpCiAgKiAgIHVuaXF1aWZpZXIgdGhyb3VnaCBkdHlwZQogICovCiBzdGF0aWMgYm9vbCBhZnNfbG9va3VwX29uZV9maWxsZGlyKHN0cnVjdCBkaXJfY29udGV4dCAqY3R4LCBjb25zdCBjaGFyICpuYW1lLAotCQkJCSAgaW50IG5sZW4sIGxvZmZfdCBmcG9zLCB1NjQgaW5vLCB1bnNpZ25lZCBkdHlwZSkKJiM0MzsJCQkJICBpbnQgbmxlbiwgdTY0IGlubywgdTMyIHVuaXF1aWZpZXIpCiB7CiAJc3RydWN0IGFmc19sb29rdXBfb25lX2Nvb2tpZSAqY29va2llID0KIAkJY29udGFpbmVyX29mKGN0eCwgc3RydWN0IGFmc19sb29rdXBfb25lX2Nvb2tpZSwgY3R4KTsKIAogCV9lbnRlcigmIzM0O3slcywldX0sJXMsJXUsLCVsbHUsJXUmIzM0OywKIAkgICAgICAgY29va2llLSZndDtuYW1lLm5hbWUsIGNvb2tpZS0mZ3Q7bmFtZS5sZW4sIG5hbWUsIG5sZW4sCi0JICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpIGlubywgZHR5cGUpOwomIzQzOwkgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZykgaW5vLCB1bmlxdWlmaWVyKTsKIAogCS8qIGluc2FuaXR5IGNoZWNrcyBmaXJzdCAqLwogCUJVSUxEX0JVR19PTihzaXplb2YodW5pb24gYWZzX3hkcl9kaXJfYmxvY2spICE9IDIwNDgpOwpAQCAtNTc0LDcgJiM0Mzs1ODQsNyBAQCBzdGF0aWMgYm9vbCBhZnNfbG9va3VwX29uZV9maWxsZGlyKHN0cnVjdCBkaXJfY29udGV4dCAqY3R4LCBjb25zdCBjaGFyICpuYW1lLAogCX0KIAogCWNvb2tpZS0mZ3Q7ZmlkLnZub2RlID0gaW5vOwotCWNvb2tpZS0mZ3Q7ZmlkLnVuaXF1ZSA9IGR0eXBlOwomIzQzOwljb29raWUtJmd0O2ZpZC51bmlxdWUgPSB1bmlxdWlmaWVyOwogCWNvb2tpZS0mZ3Q7Zm91bmQgPSAxOwogCiAJX2xlYXZlKCYjMzQ7ID0gZmFsc2UgW2ZvdW5kXSYjMzQ7KTsKQEAgLTU5MSw3ICYjNDM7NjAxLDcgQEAgc3RhdGljIGludCBhZnNfZG9fbG9va3VwX29uZShzdHJ1Y3QgaW5vZGUgKmRpciwgY29uc3Qgc3RydWN0IHFzdHIgKm5hbWUsCiB7CiAJc3RydWN0IGFmc19zdXBlcl9pbmZvICphcyA9IGRpci0mZ3Q7aV9zYi0mZ3Q7c19mc19pbmZvOwogCXN0cnVjdCBhZnNfbG9va3VwX29uZV9jb29raWUgY29va2llID0gewotCQkuY3R4LmFjdG9yID0gYWZzX2xvb2t1cF9vbmVfZmlsbGRpciwKJiM0MzsJCS5jdHguYWN0b3IgPSBBRlNfTE9PS1VQX09ORSwKIAkJLm5hbWUgPSAqbmFtZSwKIAkJLmZpZC52aWQgPSBhcy0mZ3Q7dm9sdW1lLSZndDt2aWQKIAl9OwpAQCAtNjIyLDE0ICYjNDM7NjMyLDE0IEBAIHN0YXRpYyBpbnQgYWZzX2RvX2xvb2t1cF9vbmUoc3RydWN0IGlub2RlICpkaXIsIGNvbnN0IHN0cnVjdCBxc3RyICpuYW1lLAogICogICB1bmlxdWlmaWVyIHRocm91Z2ggZHR5cGUKICAqLwogc3RhdGljIGJvb2wgYWZzX2xvb2t1cF9maWxsZGlyKHN0cnVjdCBkaXJfY29udGV4dCAqY3R4LCBjb25zdCBjaGFyICpuYW1lLAotCQkJICAgICAgaW50IG5sZW4sIGxvZmZfdCBmcG9zLCB1NjQgaW5vLCB1bnNpZ25lZCBkdHlwZSkKJiM0MzsJCQkgICAgICBpbnQgbmxlbiwgdTY0IGlubywgdTMyIHVuaXF1aWZpZXIpCiB7CiAJc3RydWN0IGFmc19sb29rdXBfY29va2llICpjb29raWUgPQogCQljb250YWluZXJfb2YoY3R4LCBzdHJ1Y3QgYWZzX2xvb2t1cF9jb29raWUsIGN0eCk7CiAKIAlfZW50ZXIoJiMzNDt7JXMsJXV9LCVzLCV1LCwlbGx1LCV1JiMzNDssCiAJICAgICAgIGNvb2tpZS0mZ3Q7bmFtZS5uYW1lLCBjb29raWUtJmd0O25hbWUubGVuLCBuYW1lLCBubGVuLAotCSAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKSBpbm8sIGR0eXBlKTsKJiM0MzsJICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpIGlubywgdW5pcXVpZmllcik7CiAKIAkvKiBpbnNhbml0eSBjaGVja3MgZmlyc3QgKi8KIAlCVUlMRF9CVUdfT04oc2l6ZW9mKHVuaW9uIGFmc194ZHJfZGlyX2Jsb2NrKSAhPSAyMDQ4KTsKQEAgLTYzNyw3ICYjNDM7NjQ3LDcgQEAgc3RhdGljIGJvb2wgYWZzX2xvb2t1cF9maWxsZGlyKHN0cnVjdCBkaXJfY29udGV4dCAqY3R4LCBjb25zdCBjaGFyICpuYW1lLAogCiAJaWYgKGNvb2tpZS0mZ3Q7bnJfZmlkcyAmbHQ7IDUwKSB7CiAJCWNvb2tpZS0mZ3Q7Zmlkc1tjb29raWUtJmd0O25yX2ZpZHNdLnZub2RlCT0gaW5vOwotCQljb29raWUtJmd0O2ZpZHNbY29va2llLSZndDtucl9maWRzXS51bmlxdWUJPSBkdHlwZTsKJiM0MzsJCWNvb2tpZS0mZ3Q7Zmlkc1tjb29raWUtJmd0O25yX2ZpZHNdLnVuaXF1ZQk9IHVuaXF1aWZpZXI7CiAJCWNvb2tpZS0mZ3Q7bnJfZmlkcyYjNDM7JiM0Mzs7CiAJfQogCkBAIC03NzgsNyAmIzQzOzc4OCw3IEBAIHN0YXRpYyBzdHJ1Y3QgaW5vZGUgKmFmc19kb19sb29rdXAoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSkKIAogCWZvciAoaSA9IDA7IGkgJmx0OyBBUlJBWV9TSVpFKGNvb2tpZS0mZ3Q7Zmlkcyk7IGkmIzQzOyYjNDM7KQogCQljb29raWUtJmd0O2ZpZHNbaV0udmlkID0gZHZub2RlLSZndDtmaWQudmlkOwotCWNvb2tpZS0mZ3Q7Y3R4LmFjdG9yID0gYWZzX2xvb2t1cF9maWxsZGlyOwomIzQzOwljb29raWUtJmd0O2N0eC5hY3RvciA9IEFGU19MT09LVVA7CiAJY29va2llLSZndDtuYW1lID0gZGVudHJ5LSZndDtkX25hbWU7CiAJY29va2llLSZndDtucl9maWRzID0gMjsgLyogc2xvdCAxIGlzIHNhdmVkIGZvciB0aGUgZmlkIHdlIGFjdHVhbGx5IHdhbnQKIAkJCSAgICAgICogYW5kIHNsb3QgMCBmb3IgdGhlIGRpcmVjdG9yeSAqLwpkaWZmIC0tZ2l0IGEvZnMvYWZzL2R5bnJvb3QuYyBiL2ZzL2Fmcy9keW5yb290LmMKaW5kZXggMWQ1ZTMzYmM3NTAyMjQuLjZlM2M4YzY5MWJhOTdmIDEwMDY0NAotLS0gYS9mcy9hZnMvZHlucm9vdC5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2Fmcy9keW5yb290LmMKQEAgLTI3OCw3ICYjNDM7Mjc4LDcgQEAgc3RhdGljIHN0cnVjdCBkZW50cnkgKmFmc19sb29rdXBfYXRjZWxsKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkKIH0KIAogLyoKLSAqIFRyYW5zY3JpYmUgdGhlIGNlbGwgZGF0YWJhc2UgaW50byByZWFkZGlyIGNvbnRlbnQgdW5kZXIgdGhlIFJDVSByZWFkIGxvY2suCiYjNDM7ICogVHJhbnNjcmliZSB0aGUgY2VsbCBkYXRhYmFzZSBpbnRvIHJlYWRkaXIgY29udGVudCB1bmRlciBuZXQtJmd0O2NlbGxzX2xvY2suCiAgKiBFYWNoIGNlbGwgcHJvZHVjZXMgdHdvIGVudHJpZXMsIG9uZSBwcmVmaXhlZCB3aXRoIGEgZG90IGFuZCBvbmUgbm90LgogICovCiBzdGF0aWMgaW50IGFmc19keW5yb290X3JlYWRkaXJfY2VsbHMoc3RydWN0IGFmc19uZXQgKm5ldCwgc3RydWN0IGRpcl9jb250ZXh0ICpjdHgpCmRpZmYgLS1naXQgYS9mcy9hZnMvZnNfb3BlcmF0aW9uLmMgYi9mcy9hZnMvZnNfb3BlcmF0aW9uLmMKaW5kZXggYzBkYmJjNmQzNzE2ZTAuLjIwODAxYjI5NTIxZDFlIDEwMDY0NAotLS0gYS9mcy9hZnMvZnNfb3BlcmF0aW9uLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvYWZzL2ZzX29wZXJhdGlvbi5jCkBAIC0zNDgsNyAmIzQzOzM0OCw3IEBAIGludCBhZnNfcHV0X29wZXJhdGlvbihzdHJ1Y3QgYWZzX29wZXJhdGlvbiAqb3ApCiAJCWZvciAoaSA9IDA7IGkgJmx0OyBvcC0mZ3Q7bnJfZmlsZXMgLSAyOyBpJiM0MzsmIzQzOykKIAkJCWlmIChvcC0mZ3Q7bW9yZV9maWxlc1tpXS5wdXRfdm5vZGUpCiAJCQkJaXB1dCgmYW1wO29wLSZndDttb3JlX2ZpbGVzW2ldLnZub2RlLSZndDtuZXRmcy5pbm9kZSk7Ci0JCWtmcmVlKG9wLSZndDttb3JlX2ZpbGVzKTsKJiM0MzsJCWt2ZnJlZShvcC0mZ3Q7bW9yZV9maWxlcyk7CiAJfQogCiAJaWYgKG9wLSZndDtlc3RhdGUpIHsKZGlmZiAtLWdpdCBhL2ZzL2Fmcy9pbm9kZS5jIGIvZnMvYWZzL2lub2RlLmMKaW5kZXggM2Y0ODQ1ODY5NGJhYTUuLjE0ZjM5YTliZWE2Y2ZlIDEwMDY0NAotLS0gYS9mcy9hZnMvaW5vZGUuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9hZnMvaW5vZGUuYwpAQCAtNTIsOSAmIzQzOzUyLDkgQEAgc3RhdGljIG5vaW5saW5lIHZvaWQgZHVtcF92bm9kZShzdHJ1Y3QgYWZzX3Zub2RlICp2bm9kZSwgc3RydWN0IGFmc192bm9kZSAqcGFyZW4KIC8qCiAgKiBTZXQgcGFyYW1ldGVycyBmb3IgdGhlIG5ldGZzIGxpYnJhcnkKICAqLwotc3RhdGljIHZvaWQgYWZzX3NldF9uZXRmc19jb250ZXh0KHN0cnVjdCBhZnNfdm5vZGUgKnZub2RlKQomIzQzO3N0YXRpYyB2b2lkIGFmc19zZXRfbmV0ZnNfY29udGV4dChzdHJ1Y3QgYWZzX3Zub2RlICp2bm9kZSwgYm9vbCBpc19maWxlKQogewotCW5ldGZzX2lub2RlX2luaXQoJmFtcDt2bm9kZS0mZ3Q7bmV0ZnMsICZhbXA7YWZzX3JlcV9vcHMsIHRydWUpOwomIzQzOwluZXRmc19pbm9kZV9pbml0KCZhbXA7dm5vZGUtJmd0O25ldGZzLCAmYW1wO2Fmc19yZXFfb3BzLCBpc19maWxlKTsKIH0KIAogLyoKQEAgLTkzLDYgJiM0Mzs5MywxMCBAQCBzdGF0aWMgaW50IGFmc19pbm9kZV9pbml0X2Zyb21fc3RhdHVzKHN0cnVjdCBhZnNfb3BlcmF0aW9uICpvcCwKIAlpbm9kZS0mZ3Q7aV9naWQgPSBtYWtlX2tnaWQoJmFtcDtpbml0X3VzZXJfbnMsIHN0YXR1cy0mZ3Q7Z3JvdXApOwogCXNldF9ubGluaygmYW1wO3Zub2RlLSZndDtuZXRmcy5pbm9kZSwgc3RhdHVzLSZndDtubGluayk7CiAKJiM0MzsJaV9zaXplX3dyaXRlKGlub2RlLCBzdGF0dXMtJmd0O3NpemUpOwomIzQzOwlpbm9kZV9zZXRfYnl0ZXMoaW5vZGUsIHN0YXR1cy0mZ3Q7c2l6ZSk7CiYjNDM7CWFmc19zZXRfbmV0ZnNfY29udGV4dCh2bm9kZSwgc3RhdHVzLSZndDt0eXBlID09IEFGU19GVFlQRV9GSUxFKTsKJiM0MzsKIAlzd2l0Y2ggKHN0YXR1cy0mZ3Q7dHlwZSkgewogCWNhc2UgQUZTX0ZUWVBFX0ZJTEU6CiAJCWlub2RlLSZndDtpX21vZGUJPSBTX0lGUkVHIHwgKHN0YXR1cy0mZ3Q7bW9kZSAmYW1wOyBTX0lBTExVR08pOwpAQCAtMTI2LDcgJiM0MzsxMzAsNiBAQCBzdGF0aWMgaW50IGFmc19pbm9kZV9pbml0X2Zyb21fc3RhdHVzKHN0cnVjdCBhZnNfb3BlcmF0aW9uICpvcCwKIAkJfQogCQlpbm9kZS0mZ3Q7aV9tYXBwaW5nLSZndDthX29wcwk9ICZhbXA7YWZzX3N5bWxpbmtfYW9wczsKIAkJaW5vZGVfbm9oaWdobWVtKGlub2RlKTsKLQkJbWFwcGluZ19zZXRfcmVsZWFzZV9hbHdheXMoaW5vZGUtJmd0O2lfbWFwcGluZyk7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCWR1bXBfdm5vZGUodm5vZGUsIG9wLSZndDtmaWxlWzBdLnZub2RlICE9IHZub2RlID8gb3AtJmd0O2ZpbGVbMF0udm5vZGUgOiBOVUxMKTsKQEAgLTEzNCwxMCAmIzQzOzEzNyw2IEBAIHN0YXRpYyBpbnQgYWZzX2lub2RlX2luaXRfZnJvbV9zdGF0dXMoc3RydWN0IGFmc19vcGVyYXRpb24gKm9wLAogCQlyZXR1cm4gYWZzX3Byb3RvY29sX2Vycm9yKE5VTEwsIGFmc19lcHJvdG9fZmlsZV90eXBlKTsKIAl9CiAKLQlpX3NpemVfd3JpdGUoaW5vZGUsIHN0YXR1cy0mZ3Q7c2l6ZSk7Ci0JaW5vZGVfc2V0X2J5dGVzKGlub2RlLCBzdGF0dXMtJmd0O3NpemUpOwotCWFmc19zZXRfbmV0ZnNfY29udGV4dCh2bm9kZSk7Ci0KIAl2bm9kZS0mZ3Q7aW52YWxpZF9iZWZvcmUJPSBzdGF0dXMtJmd0O2RhdGFfdmVyc2lvbjsKIAl0cmFjZV9hZnNfc2V0X2R2KHZub2RlLCBzdGF0dXMtJmd0O2RhdGFfdmVyc2lvbik7CiAJaW5vZGVfc2V0X2l2ZXJzaW9uX3JhdygmYW1wO3Zub2RlLSZndDtuZXRmcy5pbm9kZSwgc3RhdHVzLSZndDtkYXRhX3ZlcnNpb24pOwpAQCAtNTY2LDcgJiM0Mzs1NjUsNiBAQCBzdHJ1Y3QgaW5vZGUgKmFmc19yb290X2lnZXQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IGtleSAqa2V5KQogCiAJdm5vZGUgPSBBRlNfRlNfSShpbm9kZSk7CiAJdm5vZGUtJmd0O2NiX3ZfY2hlY2sgPSBhdG9taWNfcmVhZCgmYW1wO2FzLSZndDt2b2x1bWUtJmd0O2NiX3ZfYnJlYWspOwotCWFmc19zZXRfbmV0ZnNfY29udGV4dCh2bm9kZSk7CiAKIAlvcCA9IGFmc19hbGxvY19vcGVyYXRpb24oa2V5LCBhcy0mZ3Q7dm9sdW1lKTsKIAlpZiAoSVNfRVJSKG9wKSkgewpAQCAtNjgyLDYgJiM0Mzs2ODAsNyBAQCB2b2lkIGFmc19ldmljdF9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKQogCQlpbm9kZS0mZ3Q7aV9tYXBwaW5nLSZndDthX29wcy0mZ3Q7d3JpdGVwYWdlcyhpbm9kZS0mZ3Q7aV9tYXBwaW5nLCAmYW1wO3diYyk7CiAJfQogCiYjNDM7CWZsdXNoX2RlbGF5ZWRfd29yaygmYW1wO3Zub2RlLSZndDtsb2NrX3dvcmspOwogCW5ldGZzX3dhaXRfZm9yX291dHN0YW5kaW5nX2lvKGlub2RlKTsKIAl0cnVuY2F0ZV9pbm9kZV9wYWdlc19maW5hbCgmYW1wO2lub2RlLSZndDtpX2RhdGEpOwogCW5ldGZzX2ZyZWVfZm9saW9xX2J1ZmZlcih2bm9kZS0mZ3Q7ZGlyZWN0b3J5KTsKZGlmZiAtLWdpdCBhL2ZzL2Fmcy9pbnRlcm5hbC5oIGIvZnMvYWZzL2ludGVybmFsLmgKaW5kZXggMGI3MmE4NTY2Mjk5OTIuLjYwMWYwMWU1YzE1ZmNjIDEwMDY0NAotLS0gYS9mcy9hZnMvaW50ZXJuYWwuaAomIzQzOyYjNDM7JiM0MzsgYi9mcy9hZnMvaW50ZXJuYWwuaApAQCAtMzg4LDYgJiM0MzszODgsNyBAQCBzdHJ1Y3QgYWZzX2NlbGwgewogI2RlZmluZSBBRlNfQ0VMTF9GTF9OT19HQwkwCQkvKiBUaGUgY2VsbCB3YXMgYWRkZWQgbWFudWFsbHksIGRvbiYjMzk7dCBhdXRvLWdjICovCiAjZGVmaW5lIEFGU19DRUxMX0ZMX0RPX0xPT0tVUAkxCQkvKiBETlMgbG9va3VwIHJlcXVlc3RlZCAqLwogI2RlZmluZSBBRlNfQ0VMTF9GTF9DSEVDS19BTElBUwkyCQkvKiBOZWVkIHRvIGNoZWNrIGZvciBhbGlhc2VzICovCiYjNDM7I2RlZmluZSBBRlNfQ0VMTF9GTF9IQVZFX0lOTwkzCQkvKiBIYXZlIGR5bnJvb3RfaW5vICovCiAJZW51bSBhZnNfY2VsbF9zdGF0ZQlzdGF0ZTsKIAlzaG9ydAkJCWVycm9yOwogCWVudW0gZG5zX3JlY29yZF9zb3VyY2UJZG5zX3NvdXJjZTo4OwkvKiBMYXRlc3Qgc291cmNlIG9mIGRhdGEgZnJvbSBsb29rdXAgKi8KQEAgLTc1MCw4ICYjNDM7NzUxLDYgQEAgc3RhdGljIGlubGluZSB2b2lkIGFmc192bm9kZV9zZXRfY2FjaGUoc3RydWN0IGFmc192bm9kZSAqdm5vZGUsCiB7CiAjaWZkZWYgQ09ORklHX0FGU19GU0NBQ0hFCiAJdm5vZGUtJmd0O25ldGZzLmNhY2hlID0gY29va2llOwotCWlmIChjb29raWUpCi0JCW1hcHBpbmdfc2V0X3JlbGVhc2VfYWx3YXlzKHZub2RlLSZndDtuZXRmcy5pbm9kZS5pX21hcHBpbmcpOwogI2VuZGlmCiB9CiAKZGlmZiAtLWdpdCBhL2ZzL2Fmcy9zdXBlci5jIGIvZnMvYWZzL3N1cGVyLmMKaW5kZXggOTQyZjNlOTgwMGQ3ZGMuLjgyYmI3MTM4MjVhMGQ1IDEwMDY0NAotLS0gYS9mcy9hZnMvc3VwZXIuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9hZnMvc3VwZXIuYwpAQCAtNTg3LDcgJiM0Mzs1ODcsOCBAQCBzdGF0aWMgaW50IGFmc19nZXRfdHJlZShzdHJ1Y3QgZnNfY29udGV4dCAqZmMpCiAJfQogCiAJZmMtJmd0O3Jvb3QgPSBkZ2V0KHNiLSZndDtzX3Jvb3QpOwotCXRyYWNlX2Fmc19nZXRfdHJlZShhcy0mZ3Q7Y2VsbCwgYXMtJmd0O3ZvbHVtZSk7CiYjNDM7CWlmICghY3R4LSZndDtkeW5fcm9vdCkKJiM0MzsJCXRyYWNlX2Fmc19nZXRfdHJlZShhcy0mZ3Q7Y2VsbCwgYXMtJmd0O3ZvbHVtZSk7CiAJX2xlYXZlKCYjMzQ7ID0gMCBbJXBdJiMzNDssIHNiKTsKIAlyZXR1cm4gMDsKIApAQCAtNjU5LDcgJiM0Mzs2NjAsNiBAQCBzdGF0aWMgdm9pZCBhZnNfaV9pbml0X29uY2Uodm9pZCAqX3Zub2RlKQogCUlOSVRfTElTVF9IRUFEKCZhbXA7dm5vZGUtJmd0O3diX2tleXMpOwogCUlOSVRfTElTVF9IRUFEKCZhbXA7dm5vZGUtJmd0O3BlbmRpbmdfbG9ja3MpOwogCUlOSVRfTElTVF9IRUFEKCZhbXA7dm5vZGUtJmd0O2dyYW50ZWRfbG9ja3MpOwotCUlOSVRfREVMQVlFRF9XT1JLKCZhbXA7dm5vZGUtJmd0O2xvY2tfd29yaywgYWZzX2xvY2tfd29yayk7CiAJSU5JVF9MSVNUX0hFQUQoJmFtcDt2bm9kZS0mZ3Q7Y2JfbW1hcF9saW5rKTsKIAlzZXFsb2NrX2luaXQoJmFtcDt2bm9kZS0mZ3Q7Y2JfbG9jayk7CiB9CkBAIC02OTMsNiAmIzQzOzY5Myw3IEBAIHN0YXRpYyBzdHJ1Y3QgaW5vZGUgKmFmc19hbGxvY19pbm9kZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKQogCiAJaW5pdF9yd3NlbSgmYW1wO3Zub2RlLSZndDtybWRpcl9sb2NrKTsKIAlJTklUX1dPUksoJmFtcDt2bm9kZS0mZ3Q7Y2Jfd29yaywgYWZzX2ludmFsaWRhdGVfbW1hcF93b3JrKTsKJiM0MzsJSU5JVF9ERUxBWUVEX1dPUksoJmFtcDt2bm9kZS0mZ3Q7bG9ja193b3JrLCBhZnNfbG9ja193b3JrKTsKIAogCV9sZWF2ZSgmIzM0OyA9ICVwJiMzNDssICZhbXA7dm5vZGUtJmd0O25ldGZzLmlub2RlKTsKIAlyZXR1cm4gJmFtcDt2bm9kZS0mZ3Q7bmV0ZnMuaW5vZGU7CmRpZmYgLS1naXQgYS9mcy9hZnMvdmxfbGlzdC5jIGIvZnMvYWZzL3ZsX2xpc3QuYwppbmRleCAzZTQ5NjY5MTVlYTRjYy4uYzFkYWM1ZGJlZDBkZDAgMTAwNjQ0Ci0tLSBhL2ZzL2Fmcy92bF9saXN0LmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvYWZzL3ZsX2xpc3QuYwpAQCAtOTIsNyAmIzQzOzkyLDcgQEAgc3RhdGljIHN0cnVjdCBhZnNfYWRkcl9saXN0ICphZnNfZXh0cmFjdF92bF9hZGRycyhzdHJ1Y3QgYWZzX25ldCAqbmV0LAogewogCXN0cnVjdCBhZnNfYWRkcl9saXN0ICphbGlzdDsKIAljb25zdCB1OCAqYiA9ICpfYjsKLQlpbnQgcmV0ID0gLUVJTlZBTDsKJiM0MzsJaW50IHJldDsKIAogCWFsaXN0ID0gYWZzX2FsbG9jX2FkZHJsaXN0KG5yX2FkZHJzKTsKIAlpZiAoIWFsaXN0KQpAQCAtMTEwLDYgJiM0MzsxMTAsNyBAQCBzdGF0aWMgc3RydWN0IGFmc19hZGRyX2xpc3QgKmFmc19leHRyYWN0X3ZsX2FkZHJzKHN0cnVjdCBhZnNfbmV0ICpuZXQsCiAJCWNhc2UgRE5TX0FERFJFU1NfSVNfSVBWNDoKIAkJCWlmIChlbmQgLSBiICZsdDsgNCkgewogCQkJCV9sZWF2ZSgmIzM0OyA9IC1FSU5WQUwgW3Nob3J0IGluZXRdJiMzNDspOwomIzQzOwkJCQlyZXQgPSAtRUlOVkFMOwogCQkJCWdvdG8gZXJyb3I7CiAJCQl9CiAJCQltZW1jcHkoeCwgYiwgNCk7CkBAIC0xMjIsNiAmIzQzOzEyMyw3IEBAIHN0YXRpYyBzdHJ1Y3QgYWZzX2FkZHJfbGlzdCAqYWZzX2V4dHJhY3RfdmxfYWRkcnMoc3RydWN0IGFmc19uZXQgKm5ldCwKIAkJY2FzZSBETlNfQUREUkVTU19JU19JUFY2OgogCQkJaWYgKGVuZCAtIGIgJmx0OyAxNikgewogCQkJCV9sZWF2ZSgmIzM0OyA9IC1FSU5WQUwgW3Nob3J0IGluZXQ2XSYjMzQ7KTsKJiM0MzsJCQkJcmV0ID0gLUVJTlZBTDsKIAkJCQlnb3RvIGVycm9yOwogCQkJfQogCQkJbWVtY3B5KHgsIGIsIDE2KTsKQEAgLTE5OCw2ICYjNDM7MjAwLDggQEAgc3RydWN0IGFmc192bHNlcnZlcl9saXN0ICphZnNfZXh0cmFjdF92bHNlcnZlcl9saXN0KHN0cnVjdCBhZnNfY2VsbCAqY2VsbCwKIAogCWIgJiM0Mzs9IHNpemVvZigqaGRyKTsKIAl3aGlsZSAoZW5kIC0gYiAmZ3Q7PSBzaXplb2YoYnMpKSB7CiYjNDM7CQlpbnQgbmxlbjsKJiM0MzsKIAkJYnMubmFtZV9sZW4JPSBhZnNfZXh0cmFjdF9sZTE2KCZhbXA7Yik7CiAJCWJzLnByaW9yaXR5CT0gYWZzX2V4dHJhY3RfbGUxNigmYW1wO2IpOwogCQlicy53ZWlnaHQJPSBhZnNfZXh0cmFjdF9sZTE2KCZhbXA7Yik7CkBAIC0yMDcsMTAgJiM0MzsyMTEsMTIgQEAgc3RydWN0IGFmc192bHNlcnZlcl9saXN0ICphZnNfZXh0cmFjdF92bHNlcnZlcl9saXN0KHN0cnVjdCBhZnNfY2VsbCAqY2VsbCwKIAkJYnMucHJvdG9jb2wJPSAqYiYjNDM7JiM0Mzs7CiAJCWJzLm5yX2FkZHJzCT0gKmImIzQzOyYjNDM7OwogCiYjNDM7CQlubGVuID0gbWluMyhicy5uYW1lX2xlbiwgZW5kIC0gYiwgMjU1KTsKJiM0MzsKIAkJX2RlYnVnKCYjMzQ7ZXh0cmFjdCAldSAldSAldSAldSAldSAldSAlKi4qcyYjMzQ7LAogCQkgICAgICAgYnMubmFtZV9sZW4sIGJzLnByaW9yaXR5LCBicy53ZWlnaHQsCiAJCSAgICAgICBicy5wb3J0LCBicy5wcm90b2NvbCwgYnMubnJfYWRkcnMsCi0JCSAgICAgICBicy5uYW1lX2xlbiwgYnMubmFtZV9sZW4sIGIpOwomIzQzOwkJICAgICAgIGJzLm5hbWVfbGVuLCBubGVuLCBiKTsKIAogCQlpZiAoZW5kIC0gYiAmbHQ7IGJzLm5hbWVfbGVuKQogCQkJYnJlYWs7CkBAIC0yODcsOCAmIzQzOzI5MywyMCBAQCBzdHJ1Y3QgYWZzX3Zsc2VydmVyX2xpc3QgKmFmc19leHRyYWN0X3Zsc2VydmVyX2xpc3Qoc3RydWN0IGFmc19jZWxsICpjZWxsLAogCQkJYWZzX3B1dF9hZGRybGlzdChvbGQsIGFmc19hbGlzdF90cmFjZV9wdXRfdmxzZXJ2ZXJfb2xkKTsKIAkJfQogCiYjNDM7CQkvKiBDaGVjayBmb3IgZHVwbGljYXRlcyBpbiB0aGUgc2VydmVyIGxpc3QgKi8KJiM0MzsJCWZvciAoaiA9IDA7IGogJmx0OyB2bGxpc3QtJmd0O25yX3NlcnZlcnM7IGomIzQzOyYjNDM7KSB7CiYjNDM7CQkJc3RydWN0IGFmc192bHNlcnZlciAqcyA9IHZsbGlzdC0mZ3Q7c2VydmVyc1tqXS5zZXJ2ZXI7CiAKLQkJLyogVE9ETzogTWlnaHQgd2FudCB0byBjaGVjayBmb3IgZHVwbGljYXRlcyAqLwomIzQzOwkJCWlmIChzLSZndDtuYW1lX2xlbiA9PSBzZXJ2ZXItJmd0O25hbWVfbGVuICZhbXA7JmFtcDsKJiM0MzsJCQkgICAgcy0mZ3Q7cG9ydCA9PSBzZXJ2ZXItJmd0O3BvcnQgJmFtcDsmYW1wOwomIzQzOwkJCSAgICBzdHJuY2FzZWNtcChzLSZndDtuYW1lLCBzZXJ2ZXItJmd0O25hbWUsIHNlcnZlci0mZ3Q7bmFtZV9sZW4pID09IDApIHsKJiM0MzsJCQkJYWZzX3B1dF92bHNlcnZlcihjZWxsLSZndDtuZXQsIHNlcnZlcik7CiYjNDM7CQkJCXNlcnZlciA9IE5VTEw7CiYjNDM7CQkJCWJyZWFrOwomIzQzOwkJCX0KJiM0MzsJCX0KJiM0MzsJCWlmICghc2VydmVyKQomIzQzOwkJCWNvbnRpbnVlOwogCiAJCS8qIEluc2VydGlvbi1zb3J0IGJ5IHByaW9yaXR5IGFuZCB3ZWlnaHQgKi8KIAkJZm9yIChqID0gMDsgaiAmbHQ7IHZsbGlzdC0mZ3Q7bnJfc2VydmVyczsgaiYjNDM7JiM0MzspIHsKZGlmZiAtLWdpdCBhL2ZzL2Fmcy92b2x1bWUuYyBiL2ZzL2Fmcy92b2x1bWUuYwppbmRleCA5YWU1YzhhZDJlMDRiNC4uNGY3OWQyNWVjMzdmNGIgMTAwNjQ0Ci0tLSBhL2ZzL2Fmcy92b2x1bWUuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9hZnMvdm9sdW1lLmMKQEAgLTQwLDcgJiM0Mzs0MCw3IEBAIHN0YXRpYyBzdHJ1Y3QgYWZzX3ZvbHVtZSAqYWZzX2luc2VydF92b2x1bWVfaW50b19jZWxsKHN0cnVjdCBhZnNfY2VsbCAqY2VsbCwKIAkJCQlnb3RvIGZvdW5kOwogCQkJfQogCi0JCQlzZXRfYml0KEFGU19WT0xVTUVfUk1fVFJFRSwgJmFtcDt2b2x1bWUtJmd0O2ZsYWdzKTsKJiM0MzsJCQlzZXRfYml0KEFGU19WT0xVTUVfUk1fVFJFRSwgJmFtcDtwLSZndDtmbGFncyk7CiAJCQlyYl9yZXBsYWNlX25vZGVfcmN1KCZhbXA7cC0mZ3Q7Y2VsbF9ub2RlLCAmYW1wO3ZvbHVtZS0mZ3Q7Y2VsbF9ub2RlLCAmYW1wO2NlbGwtJmd0O3ZvbHVtZXMpOwogCQl9CiAJfQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMiAwOToyNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5Mjg2CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMTM1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFGUyBQYXRjaCBWZXJpZmljYXRpb24qKgoKT2theSwgc28gSSYjMzk7dmUgZ290IGEgcGF0Y2ggaGVyZSB0aGF0JiMzOTtzIGhpdHRpbmcgdGhlIGBmcy9hZnMvYCBkaXJlY3RvcnkuIFRoYXQmIzM5O3MgaW1tZWRpYXRlbHkgaW50ZXJlc3Rpbmc7IHRoaXMgbWVhbnMgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIEFGUyBmaWxlc3lzdGVtIGltcGxlbWVudGF0aW9uLCBubyBxdWVzdGlvbiBhYm91dCBpdC4gTG9va2luZyBhdCB0aGUgYWZmZWN0ZWQgZmlsZXMg4oCTIGBjYWxsYmFjay5jYCwgYGNlbGwuY2AsIGBjbXNlcnZpY2UuY2AsIGBkaXIuY2AsIGBkeW5yb290LmNgLCBgZnNfb3BlcmF0aW9uLmNgLCBgaW5vZGUuY2AsIGBpbnRlcm5hbC5oYCwgYHN1cGVyLmNgLCBgdmxfbGlzdC5jYCwgYW5kIGB2b2x1bWUuY2Ag4oCTIGl0JiMzOTtzIGEgcHJldHR5IGJyb2FkIHN3ZWVwLCB0b3VjaGluZyBhIGdvb2QgY2h1bmsgb2YgY29yZSBBRlMgZnVuY3Rpb25hbGl0eS4KCkZpcnN0IHRoaW5ncyBmaXJzdCwgSSBuZWVkIHRvIGNvbmZpcm0gdGhhdCBBRlMgaXMgZXZlbiByZWFjaGFibGUgaW4gdGhlIGJ1aWxkIGVudmlyb25tZW50LiBJJiMzOTttIGdvaW5nIHRvIGhhdmUgdG8gZGV0ZXJtaW5lIGlmIGBDT05GSUdfQUZTX0ZTYCBpcyBzZXQsIGFuZCBpZiBzbywgaG93LiBJJiMzOTtsbCBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aGF0IHRoaXMgaXMgY29ycmVjdC4gVGhlbiwgSSBzaG91bGQgcHJvYmFibHkgdGFrZSBhIGxvb2sgYXQgYGZzL2Fmcy9LY29uZmlnYCB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSBvdGhlciByZWxhdGVkIGNvbmZpZ3VyYXRpb25zIHRoYXQgaGF2ZSBiZWVuIHRvdWNoZWQgYnkgdGhpcyBwYXRjaCwgYW55IGRlcGVuZGVuY2llcyBvciBuZXcgZmVhdHVyZXMgdGhhdCBuZWVkIHRvIGJlIGNvbnNpZGVyZWQuIE5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBmdWxsIGNvbmZpZ3VyYXRpb24gaW1wbGljYXRpb25zIGJlZm9yZSBkaXZpbmcgZGVlcGVyIGludG8gdGhlIGNvZGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjIgMDk6Mjc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEFGU18mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9hZnMvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9hZnMvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuZnMvYWZzL0tjb25maWc6Mjpjb25maWcgQUZTX0ZTXG5mcy9hZnMvS2NvbmZpZy0zLVx0dHJpc3RhdGUgXCYjMzQ7QW5kcmV3IEZpbGUgU3lzdGVtIHN1cHBvcnQgKEFGUylcJiMzNDtcbi0tXG5mcy9hZnMvS2NvbmZpZy0xNi1cbmZzL2Fmcy9LY29uZmlnOjE3OmNvbmZpZyBBRlNfREVCVUdcbmZzL2Fmcy9LY29uZmlnLTE4LVx0Ym9vbCBcJiMzNDtBRlMgZHluYW1pYyBkZWJ1Z2dpbmdcJiMzNDtcbi0tXG5mcy9hZnMvS2NvbmZpZy0yNi1cbmZzL2Fmcy9LY29uZmlnOjI3OmNvbmZpZyBBRlNfRlNDQUNIRVxuZnMvYWZzL0tjb25maWctMjgtXHRib29sIFwmIzM0O1Byb3ZpZGUgQUZTIGNsaWVudCBjYWNoaW5nIHN1cHBvcnRcJiMzNDtcbi0tXG5mcy9hZnMvS2NvbmZpZy0zMy1cbmZzL2Fmcy9LY29uZmlnOjM0OmNvbmZpZyBBRlNfREVCVUdfQ1VSU09SXG5mcy9hZnMvS2NvbmZpZy0zNS1cdGJvb2wgXCYjMzQ7QUZTIHNlcnZlciBjdXJzb3IgZGVidWdnaW5nXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjIgMDk6Mjc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTkzNQoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDI5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246CgoqKkFuYWx5emluZyBBRlMgRmlsZSBTeXN0ZW0gQ29uZmlndXJhdGlvbioqCgpBbHJpZ2h0LCB0aGUgY29uZmlndXJhdGlvbiBpbiBxdWVzdGlvbiBoZXJlIHNlZW1zIHRvIGJlIGBBRlNfRlNgLiBMZXQmIzM5O3MgZGlnIGludG8gdGhhdCBhbmQgc2VlIHdoYXQgdGhhdCBhY3R1YWxseSBtZWFucyB3aXRoaW4gdGhlIGZpbGUgc3lzdGVtIGNvZGUuIEkmIzM5O2xsIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IGZ1bmN0aW9uYWxpdHkgaXMgYmVpbmcgZW5hYmxlZCBvciBhbHRlcmVkLiBNeSBpbml0aWFsIGluc3RpbmN0IGlzIHRvIGdvIHN0cmFpZ2h0IHRvIGBmcy9hZnMvZGlyLmNgLiBUaGF0JiMzOTtzIHdoZXJlIEkmIzM5O2QgZXhwZWN0IHRvIGZpbmQgdGhlIGNvcmUgZGlyZWN0b3J5IG9wZXJhdGlvbnMg4oCTIHRoZSByb3V0aW5lcyBtb3N0IGxpa2VseSB0byBiZSBpbXBhY3RlZCBvciBtb2RpZmllZCBieSBhIGNvbmZpZ3VyYXRpb24gc2V0dGluZy4gSSBuZWVkIHRvIGNyb3NzLXJlZmVyZW5jZSB0aGF0IGZpbGUgd2l0aCB0aGUgZGVmaW5lcyBmb3IgYEFGU19GU2AgdG8gdW5kZXJzdGFuZCB0aGUgZGlmZmVyZW5jZXMgaW4gaW1wbGVtZW50YXRpb24gb3IgdG8gY2hlY2sgd2hhdCYjMzk7cyBlbmFibGVkLiBJJiMzOTtsbCBmb2N1cyBvbiB0aGUgZnVuY3Rpb25zIHdpdGhpbiBgZGlyLmNgIHRvIHNlZSB3aGljaCBvbmVzIGFyZSBjb25kaXRpb25hbGx5IGNvbXBpbGVkIG9yIGhhdmUgZGlmZmVyZW50IGJlaGF2aW9yIGJhc2VkIG9uIHRoZSBgQUZTX0ZTYCBkZWZpbmUuIFRoaXMgc2hvdWxkIHNoZWQgbGlnaHQgb24gdGhlIHNwZWNpZmljIGFkanVzdG1lbnRzIG1hZGUgZm9yIHRoaXMgQUZTIGNvbmZpZ3VyYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjIgMDk6Mjc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YWZzX2Rpcl9pdGVyYXRlX2Jsb2NrJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvYWZzL2Rpci5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2Fmcy9kaXIuYz0zMDA9c3NpemVfdCBhZnNfcmVhZF9kaXIoc3RydWN0IGFmc192bm9kZSAqZHZub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSlcbi0tXG5mcy9hZnMvZGlyLmMtMzU2LSAqL1xuZnMvYWZzL2Rpci5jOjM1NzpzdGF0aWMgaW50IGFmc19kaXJfaXRlcmF0ZV9ibG9jayhzdHJ1Y3QgYWZzX3Zub2RlICpkdm5vZGUsXG5mcy9hZnMvZGlyLmMtMzU4LVx0XHRcdFx0IHN0cnVjdCBkaXJfY29udGV4dCAqY3R4LFxuLS1cbmZzL2Fmcy9kaXIuYz00NTc9c3RhdGljIHNpemVfdCBhZnNfZGlyX2l0ZXJhdGVfc3RlcCh2b2lkICppdGVyX2Jhc2UsIHNpemVfdCBwcm9ncmVzcywgc2l6ZV90IGxlbixcbi0tXG5mcy9hZnMvZGlyLmMtNDcyLVx0ZG8ge1xuZnMvYWZzL2Rpci5jOjQ3MzpcdFx0cmV0ID0gYWZzX2Rpcl9pdGVyYXRlX2Jsb2NrKGR2bm9kZSwgY3R4LVx1MDAzZWRpcl9jdHgsIGl0ZXJfYmFzZSk7XG5mcy9hZnMvZGlyLmMtNDc0LVx0XHRpZiAocmV0ICE9IDEpXG4tLVxuZnMvYWZzL2Rpci5jPTU1Mz1zdGF0aWMgaW50IGFmc19yZWFkZGlyKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgZGlyX2NvbnRleHQgKmN0eClcbi0tXG5mcy9hZnMvZGlyLmMtNTYyLSAqIFNlYXJjaCB0aGUgZGlyZWN0b3J5IGZvciBhIHNpbmdsZSBuYW1lXG5mcy9hZnMvZGlyLmM6NTYzOiAqIC0gaWYgYWZzX2Rpcl9pdGVyYXRlX2Jsb2NrKCkgc3BvdHMgdGhpcyBmdW5jdGlvbiwgaXQmIzM5O2xsIHBhc3MgdGhlIEZJRFxuZnMvYWZzL2Rpci5jLTU2NC0gKiAgIHVuaXF1aWZpZXIgdGhyb3VnaCBkdHlwZVxuLS1cbmZzL2Fmcy9kaXIuYz01OTg9c3RhdGljIGludCBhZnNfZG9fbG9va3VwX29uZShzdHJ1Y3QgaW5vZGUgKmRpciwgY29uc3Qgc3RydWN0IHFzdHIgKm5hbWUsXG4tLVxuZnMvYWZzL2Rpci5jLTYzMC0gKiBzZWFyY2ggdGhlIGRpcmVjdG9yeSBmb3IgYSBuYW1lXG5mcy9hZnMvZGlyLmM6NjMxOiAqIC0gaWYgYWZzX2Rpcl9pdGVyYXRlX2Jsb2NrKCkgc3BvdHMgdGhpcyBmdW5jdGlvbiwgaXQmIzM5O2xsIHBhc3MgdGhlIEZJRFxuZnMvYWZzL2Rpci5jLTYzMi0gKiAgIHVuaXF1aWZpZXIgdGhyb3VnaCBkdHlwZVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIyIDA5OjI3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwNjY5CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogNjM4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBBRlMgQ29kZSBmb3IgUG90ZW50aWFsIEZ1enppbmcgVGFyZ2V0cyoqCgpPa2F5LCBsZXQmIzM5O3MgdGFrZSBhIGxvb2sgYXQgdGhpcyBsaXN0IG9mIG1vZGlmaWVkIGZ1bmN0aW9ucyBpbiB0aGUgQUZTIGNvZGUuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBpZGVudGlmeSBwb3RlbnRpYWwgYXJlYXMgZm9yIGZ1enppbmcgYW5kIHZ1bG5lcmFiaWxpdHkgcmVzZWFyY2guIEFGUyBpcyBhIG5ldHdvcmsgZmlsZXN5c3RlbSwgd2hpY2ggaW1tZWRpYXRlbHkgc3VnZ2VzdHMgaXQgY2FuIGJlIHByb2JlZCBhbmQgdGVzdGVkIHdpdGggdG9vbHMgbGlrZSBzeXprYWxsZXIuCgpJJiMzOTt2ZSBtYWRlIGEgcXVpY2sgc2NhbiBvZiB0aGUgZnVuY3Rpb25zIHRoYXQgd2VyZSBtb2RpZmllZC4gRnJvbSB0aGF0LCBJJiMzOTt2ZSBzZWxlY3RlZCBhIHNldCBvZiBmb2N1cyBzeW1ib2xzIHRoYXQgc2VlbSBpbnRlcmVzdGluZyBmcm9tIGEgZnV6emluZyBwZXJzcGVjdGl2ZTogYGFmc19kaXJfaXRlcmF0ZV9ibG9ja2AsIGBhZnNfbG9va3VwX29uZV9maWxsZGlyYCwgYGFmc19sb29rdXBfZmlsbGRpcmAsIGBhZnNfZXh0cmFjdF92bF9hZGRyc2AsIGBhZnNfZXh0cmFjdF92bHNlcnZlcl9saXN0YCwgYGFmc19kZWxpdmVyX2NiX2luaXRfY2FsbF9iYWNrX3N0YXRlM2AsIGBhZnNfZGVsaXZlcl9jYl9wcm9iZV91dWlkYCwgYGFmc19pbm9kZV9pbml0X2Zyb21fc3RhdHVzYCwgYW5kIGBhZnNfbG9va3VwX2NlbGxgLgoKTm93LCBkaWdnaW5nIGEgYml0IGRlZXBlciwgSSBuZWVkIHRvIGNoZWNrIHRoZSBzY29wZSBvZiB0aGVzZSBmdW5jdGlvbnMgdG8gdW5kZXJzdGFuZCBob3cgdGhleSYjMzk7cmUgdXNlZC4gSSBub3RpY2VkIHRoYXQgYGFmc19sb29rdXBfb25lX2ZpbGxkaXJgLCBgYWZzX2xvb2t1cF9maWxsZGlyYCwgYW5kIGBhZnNfZGlyX2l0ZXJhdGVfYmxvY2tgIGFyZSBzdGF0aWMgZnVuY3Rpb25zLCB3aGljaCB1c3VhbGx5IGluZGljYXRlcyB0aGV5IGFyZSBjYWxsYmFja3MsIHVzZWQgbG9jYWxseSBhbmQgcG90ZW50aWFsbHkgaGFuZGxpbmcgZGF0YSBtYW5pcHVsYXRpb24uIGBhZnNfZXh0cmFjdF92bHNlcnZlcl9saXN0YCBhbmQgYGFmc19sb29rdXBfY2VsbGAgc2VlbSB0byBiZSBnbG9iYWwsIGltcGx5aW5nIHRoZXkmIzM5O3JlIHBhcnQgb2YgdGhlIGNvcmUgZnVuY3Rpb25hbGl0eSwgdGhlIGZvcm1lciByZXNwb25zaWJsZSBmb3IgVkwgc2VydmVyIG1hbmFnZW1lbnQuICBgYWZzX2V4dHJhY3RfdmxfYWRkcnNgIGFuZCBgYWZzX2lub2RlX2luaXRfZnJvbV9zdGF0dXNgIGFyZSBzdGF0aWMsIGFsc28gbGlrZWx5IGNhbGxlZCB3aXRoaW4gdGhlIGZpbGVzeXN0ZW0mIzM5O3MgaW50ZXJuYWwgbG9naWMuCgpUaGUgbmV4dCBzdGVwIGlzIHRvIGV4YW1pbmUgaG93IHRoZXNlIGZ1bmN0aW9ucyBhcmUgcmVhY2hlZCB3aXRoaW4gdGhlIEFGUyBjb2RlYmFzZS4gU2luY2UgdGhpcyBpcyBhIGZpbGVzeXN0ZW0sIHRoZSBpbnRlcmZhY2UgdG8gdGhlIGZpbGUgc3lzdGVtIHdvdWxkIGJlIHRoZSBwcmltZSB0YXJnZXRzLiBJIG5lZWQgdG8gZGV0ZXJtaW5lIGhvdyB0aGVzZSBmdW5jdGlvbnMgYXJlIHJlYWNoYWJsZSB0aHJvdWdoIHRoZSBzeXN0ZW0gY2FsbHMgdGhhdCBzeXprYWxsZXIgd291bGQgZXhwb3NlIHRvIHRoZSBmdXp6ZXIuIEFGUyBpcyBhIG5ldHdvcmsgZmlsZXN5c3RlbSwgc28gaXQmIzM5O3MgYSBnb29kIGNhbmRpZGF0ZSBmb3IgZnV6emluZy4KCk15IGltbWVkaWF0ZSBuZXh0IHN0ZXBzIGFyZSB0byB2ZXJpZnkgdGhlIHJvbGVzIG9mIGBhZnNfZXh0cmFjdF92bF9hZGRyc2AgYW5kIGBhZnNfZXh0cmFjdF92bHNlcnZlcl9saXN0YCBpbiBtb3JlIGRldGFpbC4gVGhlc2UgdHdvIGZ1bmN0aW9uIG5hbWVzIHNlZW0gdG8gYmUgaW52b2x2ZWQgd2l0aCB0aGUgYWRkcmVzcyBhbmQgc2VydmVyIGxpc3RzLCBib3RoIG9mIHdoaWNoIGFyZSBjZW50cmFsIHRvIG5ldHdvcmstZmlsZXN5c3RlbSBmdW5jdGlvbi4gSSBhbHNvIG5lZWQgdG8gdmVyaWZ5IHRoZSByZWFjaGFiaWxpdHkgb2YgdGhlIG90aGVyIGZvY3VzIHN5bWJvbHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjIgMDk6Mjc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YWZzX2V4dHJhY3RfdmxfYWRkcnMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9hZnMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2Fmcy92bF9saXN0LmM9Nzc9c3RhdGljIHUxNiBhZnNfZXh0cmFjdF9sZTE2KGNvbnN0IHU4ICoqX2IpXG4tLVxuZnMvYWZzL3ZsX2xpc3QuYy04OC0gKi9cbmZzL2Fmcy92bF9saXN0LmM6ODk6c3RhdGljIHN0cnVjdCBhZnNfYWRkcl9saXN0ICphZnNfZXh0cmFjdF92bF9hZGRycyhzdHJ1Y3QgYWZzX25ldCAqbmV0LFxuZnMvYWZzL3ZsX2xpc3QuYy05MC1cdFx0XHRcdFx0XHQgIGNvbnN0IHU4ICoqX2IsIGNvbnN0IHU4ICplbmQsXG4tLVxuZnMvYWZzL3ZsX2xpc3QuYz0xNjA9c3RydWN0IGFmc192bHNlcnZlcl9saXN0ICphZnNfZXh0cmFjdF92bHNlcnZlcl9saXN0KHN0cnVjdCBhZnNfY2VsbCAqY2VsbCxcbi0tXG5mcy9hZnMvdmxfbGlzdC5jLTI2My1cdFx0ICovXG5mcy9hZnMvdmxfbGlzdC5jOjI2NDpcdFx0YWRkcnMgPSBhZnNfZXh0cmFjdF92bF9hZGRycyhjZWxsLVx1MDAzZW5ldCwgXHUwMDI2YiwgZW5kLCBicy5ucl9hZGRycywgYnMucG9ydCk7XG5mcy9hZnMvdmxfbGlzdC5jLTI2NS1cdFx0aWYgKElTX0VSUihhZGRycykpIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMiAwOToyNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjExNwoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipWZXJpZnlpbmcgYGFmc19kZWxpdmVyX2NiX2luaXRfY2FsbF9iYWNrX3N0YXRlM2AqKgoKQWxyaWdodCwgbGV0JiMzOTtzIHplcm8gaW4gb24gdGhpcyBgYWZzX2RlbGl2ZXJfY2JfaW5pdF9jYWxsX2JhY2tfc3RhdGUzYC4gU2VlbXMgbGlrZSB3ZSYjMzk7cmUgZGl2aW5nIGludG8gdGhlIGNhbGxiYWNrIGluaXRpYWxpemF0aW9uIHN0YXRlIGZvciB0aGUgYGFmc19kZWxpdmVyYCBjb21wb25lbnQuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGNvbmZpcm0gaXRzIHB1cnBvc2Ugd2l0aGluIHRoZSBvdmVyYWxsIGBhZnNgIGFyY2hpdGVjdHVyZS4gSXMgdGhpcyB0aGUgdGhpcmQgc3RhdGUgaW4gYSBkZWZpbmVkIHNlcXVlbmNlPyBJcyBpdCBoYW5kbGluZyB0aGUgc3RhdGUgdHJhbnNpdGlvbiBvciB0aGUgc3RhdGUgaW5pdGlhdGlvbiwgYW5kIGhvdz8gSSBuZWVkIHRvIHF1aWNrbHkgcmVjYWxsIHRoZSB0eXBpY2FsIGNhbGwgZmxvdyBpbiB0aGlzIGFyZWE7IGlzIGBhZnNfZGVsaXZlcmAgdGhlIHNvdXJjZSBvZiB0aGUgbWVzc2FnZSBvciB0aGUgY29uc3VtZXI/IFdoYXQgaXMgaXQgcmVzcG9uc2libGUgZm9yIGRlbGl2ZXJpbmc/CgpMZXQgbWUgcmV2aWV3IHRoZSBjb250ZXh0IGFyb3VuZCB0aGlzIGZ1bmN0aW9uIGluIHJlbGF0aW9uIHRvIG90aGVyIGBhZnNfZGVsaXZlcl9jYl9gIGZ1bmN0aW9ucy4gV2hhdCBhcmUgdGhlIGRlcGVuZGVuY2llcz8gQXJlIHdlIGxvb2tpbmcgYXQgYSBzdGF0ZSBtYWNoaW5lLCBhIHNpbXBsZSBjb25kaXRpb25hbCwgb3Igc29tZXRoaW5nIG1vcmUgY29tcGxleD8gSSBuZWVkIHRvIHRoaW5rIGFib3V0IHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMuIFdoYXQgaGFwcGVucyBpZiBtdWx0aXBsZSB0aHJlYWRzIGF0dGVtcHQgdG8gaW5pdGlhbGl6ZSB0aGlzIGNhbGxiYWNrIHN0YXRlIGNvbmN1cnJlbnRseT8gV2hhdCBhcmUgdGhlIGltcGxpY2F0aW9ucyBpZiBhIG1lc3NhZ2UgYXJyaXZlcyBiZWZvcmUgaW5pdGlhbGl6YXRpb24gaXMgY29tcGxldGU/IFRoaXMgaW5pdGlhbGl6YXRpb24gbmVlZHMgdG8gYmUgdGhyZWFkIHNhZmUgdG8gYXZvaWQgY29ycnVwdGlvbiBpc3N1ZXMuCgpNeSBpbW1lZGlhdGUgZm9jdXMgaXMgb24gZW5zdXJpbmcgdGhlIGNvcnJlY3QgZnVuY3Rpb24gaXMgY2FsbGVkLCB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGFyZSBwcm9wZXJseSBpbml0aWFsaXplZCwgYW5kIGFueSBuZWNlc3NhcnkgbG9ja3MgYXJlIGFjcXVpcmVkIGFuZCByZWxlYXNlZCBhcHByb3ByaWF0ZWx5LiBBbnkgbWVtb3J5IGFsbG9jYXRpb24gaW52b2x2ZWQ/IEkgbmVlZCB0byBjb25maXJtIHByb3BlciBlcnJvciBoYW5kbGluZyDigJMgd2hhdCBhcmUgdGhlIGZhaWx1cmUgbW9kZXMgYW5kIGhvdyBhcmUgdGhleSBoYW5kbGVkPyBEZWJ1Z2dpbmcgdGhpcyBraW5kIG9mIHRoaW5nIGNhbiBiZSB0ZWRpb3VzLCBzbyBJIHdhbnQgdG8gY29uc2lkZXIgYW55IHBvdGVudGlhbCBjb3JuZXIgY2FzZXMgdXBmcm9udC4gTGV0JiMzOTtzIHNlZSBpZiB0aGVyZSBhcmUgYW55IGV4aXN0aW5nIHVuaXQgdGVzdHMgZm9yIHRoaXMgYXJlYSBvciBzb21ldGhpbmcgSSBjYW4gYWRhcHQuIFRpbWUgdG8gc3RhcnQgZGlnZ2luZyEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjIgMDk6Mjc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YWZzX2RlbGl2ZXJfY2JfaW5pdF9jYWxsX2JhY2tfc3RhdGUzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvYWZzLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9hZnMvY21zZXJ2aWNlLmM9MTk9c3RhdGljIGludCBhZnNfZGVsaXZlcl9jYl9pbml0X2NhbGxfYmFja19zdGF0ZShzdHJ1Y3QgYWZzX2NhbGwgKik7XG5mcy9hZnMvY21zZXJ2aWNlLmM6MjA6c3RhdGljIGludCBhZnNfZGVsaXZlcl9jYl9pbml0X2NhbGxfYmFja19zdGF0ZTMoc3RydWN0IGFmc19jYWxsICopO1xuZnMvYWZzL2Ntc2VydmljZS5jLTIxLXN0YXRpYyBpbnQgYWZzX2RlbGl2ZXJfY2JfcHJvYmUoc3RydWN0IGFmc19jYWxsICopO1xuLS1cbmZzL2Fmcy9jbXNlcnZpY2UuYz01Nz1zdGF0aWMgY29uc3Qgc3RydWN0IGFmc19jYWxsX3R5cGUgYWZzX1NSWENCSW5pdENhbGxCYWNrU3RhdGUzID0ge1xuZnMvYWZzL2Ntc2VydmljZS5jLTU4LVx0Lm5hbWVcdFx0PSBcJiMzNDtDQi5Jbml0Q2FsbEJhY2tTdGF0ZTNcJiMzNDssXG5mcy9hZnMvY21zZXJ2aWNlLmM6NTk6XHQuZGVsaXZlclx0PSBhZnNfZGVsaXZlcl9jYl9pbml0X2NhbGxfYmFja19zdGF0ZTMsXG5mcy9hZnMvY21zZXJ2aWNlLmMtNjAtXHQuZGVzdHJ1Y3Rvclx0PSBhZnNfY21fZGVzdHJ1Y3Rvcixcbi0tXG5mcy9hZnMvY21zZXJ2aWNlLmM9MzAzPXN0YXRpYyBpbnQgYWZzX2RlbGl2ZXJfY2JfaW5pdF9jYWxsX2JhY2tfc3RhdGUoc3RydWN0IGFmc19jYWxsICpjYWxsKVxuLS1cbmZzL2Fmcy9jbXNlcnZpY2UuYy0zMTMtICovXG5mcy9hZnMvY21zZXJ2aWNlLmM6MzE0OnN0YXRpYyBpbnQgYWZzX2RlbGl2ZXJfY2JfaW5pdF9jYWxsX2JhY2tfc3RhdGUzKHN0cnVjdCBhZnNfY2FsbCAqY2FsbClcbmZzL2Fmcy9jbXNlcnZpY2UuYy0zMTUte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMiAwOToyNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjg4MAoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipWZXJpZnlpbmcgYGFmc19kZWxpdmVyX2NiX3Byb2JlX3V1aWRgKioKCkFscmlnaHQsIGxldCYjMzk7cyB6ZXJvIGluIG9uIGBhZnNfZGVsaXZlcl9jYl9wcm9iZV91dWlkYC4gU291bmRzIGxpa2Ugd2UmIzM5O3JlIGRpdmluZyBpbnRvIHRoZSBjYWxsYmFjayBtZWNoYW5pc20gZm9yIGFuIEFGUyBkZWxpdmVyIG9wZXJhdGlvbiwgYW5kIHNwZWNpZmljYWxseSwgd2UmIzM5O3JlIHByb2JpbmcgZm9yIGEgVVVJRCDigJMgYSB1bml2ZXJzYWxseSB1bmlxdWUgaWRlbnRpZmllci4gVGhlIGZhY3QgdGhhdCB3ZSYjMzk7cmUgcHJvYmluZyBzdWdnZXN0cyB0aGlzIFVVSUQgaXMgY3JpdGljYWwgdG8gdGhlIHN1Y2Nlc3NmdWwgY29tcGxldGlvbiBvciB0cmFja2luZyBvZiBhIGNhbGxiYWNrIG9wZXJhdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgKndoeSogdGhpcyBzcGVjaWZpYyBmdW5jdGlvbiBuZWVkcyB2ZXJpZmljYXRpb24uCgpNeSBtaW5kIGltbWVkaWF0ZWx5IHN0YXJ0cyB0aWNraW5nIHRocm91Z2ggcG90ZW50aWFsIHJlYXNvbnMuIElzIHRoZXJlIGEgcmFjZSBjb25kaXRpb24/IEFyZSB3ZSBzZWVpbmcgaW5jb25zaXN0ZW50IFVVSURzIGFjcm9zcyBkaWZmZXJlbnQgc3lzdGVtcyBvciBwcm9jZXNzZXM/IElzIHRoaXMgcHJvYmUgcGFydCBvZiBhIGxhcmdlciBkZWJ1Z2dpbmcgb3IgdHJhY2luZyBmcmFtZXdvcmsgd2l0aGluIEFGUz8gSXMgYGFmc19kZWxpdmVyX2NiX3Byb2JlX3V1aWRgIHNvbWVob3cgYmVpbmcgY2FsbGVkIGluIGEgd2F5IGl0IHNob3VsZG4mIzM5O3Q/IFBlcmhhcHMgdGhlcmUmIzM5O3MgYSBzZWN1cml0eSB2dWxuZXJhYmlsaXR5IHRpZWQgdG8gaW1wcm9wZXIgVVVJRCBoYW5kbGluZyBkdXJpbmcgY2FsbGJhY2tzLCBhIHBvdGVudGlhbCB2ZWN0b3IgZm9yIGNvbXByb21pc2UuCgpJJiMzOTtkIHdhbnQgdG8gY2hlY2sgc2V2ZXJhbCB0aGluZ3MgcmlnaHQgYXdheS4gSSYjMzk7ZCBuZWVkIHRvIHRyYWNlIHRoZSBjYWxsIHBhdGhzIHRvIGBhZnNfZGVsaXZlcl9jYl9wcm9iZV91dWlkYCB0byBzZWUgaG93IGl0JiMzOTtzIGJlaW5nIGludm9rZWQuIEFyZSB3ZSBoYW5kbGluZyBtdWx0aXBsZSByZXF1ZXN0cyBpbiBwYXJhbGxlbD8gSXMgdGhlcmUgYW55IHNoYXJlZCBzdGF0ZSB0aGF0IGNvdWxkIGJlIGNvcnJ1cHRlZD8gQSBxdWljayBjb2RlIHJldmlldyBvZiB0aGlzIGZ1bmN0aW9uIGFuZCBhbnkgcmVsYXRlZCBzdHJ1Y3R1cmVzIHdpbGwgYmUga2V5LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZGF0YSBmbG93LCB0aGUgZXhwZWN0ZWQgdmFsdWVzLCBhbmQgd2hhdCBjb25zdGl0dXRlcyBhICYjMzQ7dmFsaWQmIzM0OyBVVUlEIGluIHRoaXMgY29udGV4dC4KCkJhc2VkIG9uIHRoZSBzdXJyb3VuZGluZyBjb2RlLCBjb250ZXh0LCBhbmQgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcywgdGhpcyBwcm9iZSBpcyBsaWtlbHkgYmVpbmcgaW1wbGVtZW50ZWQgdG8gYWRkcmVzcyBhIHNwZWNpZmljIGlzc3VlLCBvciB0byB2ZXJpZnkgcHJvcGVyIG9wZXJhdGlvbi4gTGV0JiMzOTtzIGRpZyBpbiwgYW5kIHNlZSB3aGF0IHRoZSBjb2RlIHJldmVhbHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIyIDA5OjI3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2Fmc19kZWxpdmVyX2NiX3Byb2JlX3V1aWQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9hZnMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2Fmcy9jbXNlcnZpY2UuYz0yMj1zdGF0aWMgaW50IGFmc19kZWxpdmVyX2NiX2NhbGxiYWNrKHN0cnVjdCBhZnNfY2FsbCAqKTtcbmZzL2Fmcy9jbXNlcnZpY2UuYzoyMzpzdGF0aWMgaW50IGFmc19kZWxpdmVyX2NiX3Byb2JlX3V1aWQoc3RydWN0IGFmc19jYWxsICopO1xuZnMvYWZzL2Ntc2VydmljZS5jLTI0LXN0YXRpYyBpbnQgYWZzX2RlbGl2ZXJfY2JfdGVsbF9tZV9hYm91dF95b3Vyc2VsZihzdHJ1Y3QgYWZzX2NhbGwgKik7XG4tLVxuZnMvYWZzL2Ntc2VydmljZS5jPTc3PXN0YXRpYyBjb25zdCBzdHJ1Y3QgYWZzX2NhbGxfdHlwZSBhZnNfU1JYQ0JQcm9iZVV1aWQgPSB7XG5mcy9hZnMvY21zZXJ2aWNlLmMtNzgtXHQubmFtZVx0XHQ9IFwmIzM0O0NCLlByb2JlVXVpZFwmIzM0OyxcbmZzL2Fmcy9jbXNlcnZpY2UuYzo3OTpcdC5kZWxpdmVyXHQ9IGFmc19kZWxpdmVyX2NiX3Byb2JlX3V1aWQsXG5mcy9hZnMvY21zZXJ2aWNlLmMtODAtXHQuZGVzdHJ1Y3Rvclx0PSBhZnNfY21fZGVzdHJ1Y3Rvcixcbi0tXG5mcy9hZnMvY21zZXJ2aWNlLmM9NDE2PXN0YXRpYyB2b2lkIFNSWEFGU0NCX1Byb2JlVXVpZChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4tLVxuZnMvYWZzL2Ntc2VydmljZS5jLTQzNC0gKi9cbmZzL2Fmcy9jbXNlcnZpY2UuYzo0MzU6c3RhdGljIGludCBhZnNfZGVsaXZlcl9jYl9wcm9iZV91dWlkKHN0cnVjdCBhZnNfY2FsbCAqY2FsbClcbmZzL2Fmcy9jbXNlcnZpY2UuYy00MzYte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMiAwOToyNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzYwOAoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqVmVyaWZ5aW5nIGBhZnNfaW5vZGVfaW5pdF9mcm9tX3N0YXR1c2AqKgoKT2theSwgdGltZSB0byBkaXZlIGludG8gYGFmc19pbm9kZV9pbml0X2Zyb21fc3RhdHVzYC4gSSBuZWVkIHRvIGVuc3VyZSB0aGlzIGZ1bmN0aW9uIGlzIGJlaGF2aW5nIGFzIGV4cGVjdGVkLCBwYXJ0aWN1bGFybHkgaW4gZWRnZSBjYXNlcyBhbmQgdW5kZXIgc3RyZXNzLiBMZXQmIzM5O3Mgc2VlLi4uIHdoYXQgYXJlIHRoZSBjcml0aWNhbCBpbnZhcmlhbnRzIGl0IG5lZWRzIHRvIG1haW50YWluPyBJdCYjMzk7cyByZXNwb25zaWJsZSBmb3IgaW5pdGlhbGl6aW5nIGFuIGBpbm9kZWAgc3RydWN0dXJlIGJhc2VkIG9uIHNvbWUgZXh0ZXJuYWwgc3RhdHVzIGluZm9ybWF0aW9uLCBsaWtlbHkgZmV0Y2hlZCBmcm9tIHRoZSBBRlMgc2VydmVyLCByaWdodD8gU28sIEkgbmVlZCB0byBsb29rIGZvciBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzIGluIHRoZSB3YXkgdGhlIHN0YXR1cyBkYXRhIGlzIG1hcHBlZCB0byB0aGUgaW50ZXJuYWwgaW5vZGUgZmllbGRzLiBBcmUgdGhlcmUgYW55IHVuY2hlY2tlZCBhc3N1bXB0aW9ucyBhYm91dCBkYXRhIHNpemVzIG9yIGZvcm1hdHM/IEFyZSB3ZSBoYW5kbGluZyBlcnJvcnMgZnJvbSB0aGUgc3RhdHVzIHNvdXJjZSBncmFjZWZ1bGx5PyBJJiMzOTttIHRoaW5raW5nIGFib3V0IHBvdGVudGlhbCBpbnRlZ2VyIG92ZXJmbG93cywgYnVmZmVyIG92ZXJmbG93cyBpZiB0aGUgc3RhdHVzIGRhdGEgaXMgbWFsZm9ybWVkLCBhbmQgcmFjZSBjb25kaXRpb25zIGlmIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGNvbmN1cnJlbnRseS4gSSYjMzk7bGwgbmVlZCB0byB0cmFjZSB0aGUgZGF0YSBmbG93IGZyb20gdGhlIHBvaW50IHdoZXJlIHRoZSBzdGF0dXMgaXMgcmVjZWl2ZWQsIHRocm91Z2ggdGhpcyBmdW5jdGlvbiwgYW5kIHRoZW4gZG93bnN0cmVhbSB0byBhbnkgY29uc3VtZXIgb2YgdGhlIGlub2RlIGRhdGEuIEkmIzM5O2xsIGFsc28gYmUgbG9va2luZyBhdCB0aGUgZXJyb3IgaGFuZGxpbmcgYW5kIG1ha2luZyBzdXJlIGFueSBmYWlsdXJlcyBhcmUgcmVwb3J0ZWQgYXBwcm9wcmlhdGVseSwgcG9zc2libHkgbG9nZ2luZyBlcnJvcnMgb3IgcmV0dXJuaW5nIGZhaWx1cmUgY29kZXMuIEVzc2VudGlhbGx5LCBJJiMzOTttIHRoaW5raW5nLCB0aGlzIG5lZWRzIHRvIGJlIGEgcm9idXN0LCBmYXVsdC10b2xlcmFudCBmdW5jdGlvbiB0aGF0IGNhbiBoYW5kbGUgYSB2YXJpZXR5IG9mIHBvdGVudGlhbGx5IGhvc3RpbGUgaW5wdXRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMiAwOToyNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDthZnNfaW5vZGVfaW5pdF9mcm9tX3N0YXR1cyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL2Fmcy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvYWZzL2lub2RlLmM9NTU9c3RhdGljIHZvaWQgYWZzX3NldF9uZXRmc19jb250ZXh0KHN0cnVjdCBhZnNfdm5vZGUgKnZub2RlLCBib29sIGlzX2ZpbGUpXG4tLVxuZnMvYWZzL2lub2RlLmMtNjItICovXG5mcy9hZnMvaW5vZGUuYzo2MzpzdGF0aWMgaW50IGFmc19pbm9kZV9pbml0X2Zyb21fc3RhdHVzKHN0cnVjdCBhZnNfb3BlcmF0aW9uICpvcCxcbmZzL2Fmcy9pbm9kZS5jLTY0LVx0XHRcdFx0ICAgICAgc3RydWN0IGFmc192bm9kZV9wYXJhbSAqdnAsXG4tLVxuZnMvYWZzL2lub2RlLmM9MzQ2PXN0YXRpYyB2b2lkIGFmc19mZXRjaF9zdGF0dXNfc3VjY2VzcyhzdHJ1Y3QgYWZzX29wZXJhdGlvbiAqb3ApXG4tLVxuZnMvYWZzL2lub2RlLmMtMzUyLVx0aWYgKGlub2RlX3N0YXRlX3JlYWRfb25jZShcdTAwMjZ2bm9kZS1cdTAwM2VuZXRmcy5pbm9kZSkgXHUwMDI2IElfTkVXKSB7XG5mcy9hZnMvaW5vZGUuYzozNTM6XHRcdHJldCA9IGFmc19pbm9kZV9pbml0X2Zyb21fc3RhdHVzKG9wLCB2cCwgdm5vZGUpO1xuZnMvYWZzL2lub2RlLmMtMzU0LVx0XHRhZnNfb3Bfc2V0X2Vycm9yKG9wLCByZXQpO1xuLS1cbmZzL2Fmcy9pbm9kZS5jPTQ4Mj1zdHJ1Y3QgaW5vZGUgKmFmc19pZ2V0KHN0cnVjdCBhZnNfb3BlcmF0aW9uICpvcCwgc3RydWN0IGFmc192bm9kZV9wYXJhbSAqdnApXG4tLVxuZnMvYWZzL2lub2RlLmMtNTA4LVxuZnMvYWZzL2lub2RlLmM6NTA5Olx0cmV0ID0gYWZzX2lub2RlX2luaXRfZnJvbV9zdGF0dXMob3AsIHZwLCB2bm9kZSk7XG5mcy9hZnMvaW5vZGUuYy01MTAtXHRpZiAocmV0IFx1MDAzYyAwKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMiAwOToyNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDI5NgoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDExCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHN1bW1hcml6YXRpb24sIGFzc3VtaW5nIEkmIzM5O20gYW4gZXhwZXJ0IGFuZCB0aGlzIGlzIGEgZGVlcCBkaXZlOgoKKipWZXJpZnlpbmcgYGFmc19sb29rdXBfY2VsbGAgLSBBIERlZXAgRGl2ZSoqCgpBbHJpZ2h0LCB0aW1lIHRvIGRpZyBpbnRvIGBhZnNfbG9va3VwX2NlbGxgLiBMZXQmIzM5O3MgY29uZmlybSBldmVyeXRoaW5nJiMzOTtzIHdvcmtpbmcgYXMgZXhwZWN0ZWQuIFRoZXJlIGFyZSBzZXZlcmFsIGZhY2V0cyB0byBpdHMgZnVuY3Rpb25hbGl0eSBJIG5lZWQgdG8gc2NydXRpbml6ZS4gV2hhdCBhcmUgdGhlIGtleSBhc3N1bXB0aW9ucyB0aGlzIGZ1bmN0aW9uIG1ha2VzPyBIb3cgZG9lcyBpdCBoYW5kbGUgcG90ZW50aWFsIGVycm9ycywgYW5kIHdoYXQgYXJlIHRoZSBjb3JuZXIgY2FzZXMgSSBuZWVkIHRvIHRlc3QgdGhvcm91Z2hseT8gSXMgdGhlIGNvZGUgY2xlYW4gYW5kIGVhc2lseSB1bmRlcnN0YW5kYWJsZT8gVGhhdCYjMzk7cyBhbHdheXMgYSBjcml0aWNhbCBmYWN0b3IuIE5vdywgbGV0JiMzOTtzIHN0ZXAgdGhyb3VnaCBpdCBsb2dpY2FsbHksIGxpbmUgYnkgbGluZSwgdG8gY2hlY2sgZm9yIGFueSBvYnZpb3VzIHZ1bG5lcmFiaWxpdGllcyBvciBvcHBvcnR1bml0aWVzIGZvciBvcHRpbWl6YXRpb24uIEkgd2FudCB0byBzZWUgaG93IHJvYnVzdCB0aGlzIGNvZGUgdHJ1bHkgaXMuIFdoYXQmIzM5O3MgdGhlIGltcGFjdCBvbiBwZXJmb3JtYW5jZT8gQ2FuIHRoaXMgcG90ZW50aWFsbHkgYmVjb21lIGEgYm90dGxlbmVjayB1bmRlciBoZWF2eSBsb2FkPyBMZXQmIzM5O3MgZm9ybXVsYXRlIGEgY2hlY2tsaXN0IG9mIHRlc3RzLCBpbmNsdWRpbmcgYm90aCBwb3NpdGl2ZSBhbmQgbmVnYXRpdmUgc2NlbmFyaW9zLCBhbmQgbWFrZSBzdXJlIHRvIHZhbGlkYXRlIHRoZSBleHBlY3RlZCBvdXRwdXRzLiBJIG5lZWQgdG8gYmUgY2VydGFpbiB0aGF0IHRoZSBsb2dpYywgZXJyb3IgaGFuZGxpbmcsIGFuZCBwZXJmb3JtYW5jZSBhcmUgYWxsIHVwIHRvIHBhci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjIgMDk6Mjc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YWZzX2xvb2t1cF9jZWxsJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvYWZzLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9hZnMvY2VsbC5jPTEwOD1zdGF0aWMgc3RydWN0IGFmc19jZWxsICphZnNfYWxsb2NfY2VsbChzdHJ1Y3QgYWZzX25ldCAqbmV0LFxuLS1cbmZzL2Fmcy9jZWxsLmMtMjI3LS8qXG5mcy9hZnMvY2VsbC5jOjIyODogKiBhZnNfbG9va3VwX2NlbGwgLSBMb29rIHVwIG9yIGNyZWF0ZSBhIGNlbGwgcmVjb3JkLlxuZnMvYWZzL2NlbGwuYy0yMjktICogQG5ldDpcdFRoZSBuZXR3b3JrIG5hbWVzcGFjZVxuLS1cbmZzL2Fmcy9jZWxsLmMtMjQwLSAqL1xuZnMvYWZzL2NlbGwuYzoyNDE6c3RydWN0IGFmc19jZWxsICphZnNfbG9va3VwX2NlbGwoc3RydWN0IGFmc19uZXQgKm5ldCxcbmZzL2Fmcy9jZWxsLmMtMjQyLVx0XHRcdFx0IGNvbnN0IGNoYXIgKm5hbWUsIHVuc2lnbmVkIGludCBuYW1lc3osXG5mcy9hZnMvY2VsbC5jLTI0My1cdFx0XHRcdCBjb25zdCBjaGFyICp2bGxpc3QsXG5mcy9hZnMvY2VsbC5jOjI0NDpcdFx0XHRcdCBlbnVtIGFmc19sb29rdXBfY2VsbF9mb3IgcmVhc29uLFxuZnMvYWZzL2NlbGwuYy0yNDUtXHRcdFx0XHQgZW51bSBhZnNfY2VsbF90cmFjZSB0cmFjZSlcbi0tXG5mcy9hZnMvY2VsbC5jPTQxNT1pbnQgYWZzX2NlbGxfaW5pdChzdHJ1Y3QgYWZzX25ldCAqbmV0LCBjb25zdCBjaGFyICpyb290Y2VsbClcbi0tXG5mcy9hZnMvY2VsbC5jLTQ0OS1cdC8qIGFsbG9jYXRlIGEgY2VsbCByZWNvcmQgZm9yIHRoZSByb290L3dvcmtzdGF0aW9uIGNlbGwgKi9cbmZzL2Fmcy9jZWxsLmM6NDUwOlx0bmV3X3Jvb3QgPSBhZnNfbG9va3VwX2NlbGwobmV0LCByb290Y2VsbCwgbGVuLCB2bGxpc3QsXG5mcy9hZnMvY2VsbC5jLTQ1MS1cdFx0XHRcdCAgIEFGU19MT09LVVBfQ0VMTF9ST09UQ0VMTCxcbi0tXG5mcy9hZnMvZHlucm9vdC5jPTkzPXN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICphZnNfZHlucm9vdF9sb29rdXBfY2VsbChzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxuLS1cbmZzL2Fmcy9keW5yb290LmMtMTEwLVxuZnMvYWZzL2R5bnJvb3QuYzoxMTE6XHRjZWxsID0gYWZzX2xvb2t1cF9jZWxsKG5ldCwgbmFtZSwgbGVuLCBOVUxMLFxuZnMvYWZzL2R5bnJvb3QuYy0xMTItXHRcdFx0ICAgICAgIEFGU19MT09LVVBfQ0VMTF9EWU5ST09ULFxuLS1cbmZzL2Fmcy9pbnRlcm5hbC5oPTEwNjA9ZXh0ZXJuIHN0cnVjdCBhZnNfY2VsbCAqYWZzX2ZpbmRfY2VsbChzdHJ1Y3QgYWZzX25ldCAqLCBjb25zdCBjaGFyICosIHVuc2lnbmVkLFxuZnMvYWZzL2ludGVybmFsLmgtMTA2MS1cdFx0XHRcdCAgICAgIGVudW0gYWZzX2NlbGxfdHJhY2UpO1xuZnMvYWZzL2ludGVybmFsLmg6MTA2MjplbnVtIGFmc19sb29rdXBfY2VsbF9mb3Ige1xuZnMvYWZzL2ludGVybmFsLmgtMTA2My1cdEFGU19MT09LVVBfQ0VMTF9EWU5ST09ULFxuLS1cbmZzL2Fmcy9pbnRlcm5hbC5oLTEwNjktfTtcbmZzL2Fmcy9pbnRlcm5hbC5oOjEwNzA6c3RydWN0IGFmc19jZWxsICphZnNfbG9va3VwX2NlbGwoc3RydWN0IGFmc19uZXQgKm5ldCxcbmZzL2Fmcy9pbnRlcm5hbC5oLTEwNzEtXHRcdFx0XHQgY29uc3QgY2hhciAqbmFtZSwgdW5zaWduZWQgaW50IG5hbWVzeixcbmZzL2Fmcy9pbnRlcm5hbC5oLTEwNzItXHRcdFx0XHQgY29uc3QgY2hhciAqdmxsaXN0LFxuZnMvYWZzL2ludGVybmFsLmg6MTA3MzpcdFx0XHRcdCBlbnVtIGFmc19sb29rdXBfY2VsbF9mb3IgcmVhc29uLFxuZnMvYWZzL2ludGVybmFsLmgtMTA3NC1cdFx0XHRcdCBlbnVtIGFmc19jZWxsX3RyYWNlIHRyYWNlKTtcbi0tXG5mcy9hZnMvbW50cHQuYz03MT1zdGF0aWMgaW50IGFmc19tbnRwdF9zZXRfcGFyYW1zKHN0cnVjdCBmc19jb250ZXh0ICpmYywgc3RydWN0IGRlbnRyeSAqbW50cHQpXG4tLVxuZnMvYWZzL21udHB0LmMtMTA5LVxuZnMvYWZzL21udHB0LmM6MTEwOlx0XHRjZWxsID0gYWZzX2xvb2t1cF9jZWxsKGN0eC1cdTAwM2VuZXQsIHAsIHNpemUsIE5VTEwsXG5mcy9hZnMvbW50cHQuYy0xMTEtXHRcdFx0XHQgICAgICAgQUZTX0xPT0tVUF9DRUxMX01PVU5UUE9JTlQsXG4tLVxuZnMvYWZzL3Byb2MuYz04OD1zdGF0aWMgaW50IGFmc19wcm9jX2NlbGxzX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyICpidWYsIHNpemVfdCBzaXplKVxuLS1cbmZzL2Fmcy9wcm9jLmMtMTI0LVxuZnMvYWZzL3Byb2MuYzoxMjU6XHRcdGNlbGwgPSBhZnNfbG9va3VwX2NlbGwobmV0LCBuYW1lLCBzdHJsZW4obmFtZSksIGFyZ3MsXG5mcy9hZnMvcHJvYy5jLTEyNi1cdFx0XHRcdCAgICAgICBBRlNfTE9PS1VQX0NFTExfUFJFTE9BRCxcbi0tXG5mcy9hZnMvc3VwZXIuYz0yMjM9c3RhdGljIGludCBhZnNfcGFyc2Vfc291cmNlKHN0cnVjdCBmc19jb250ZXh0ICpmYywgc3RydWN0IGZzX3BhcmFtZXRlciAqcGFyYW0pXG4tLVxuZnMvYWZzL3N1cGVyLmMtMjkxLVx0aWYgKGNlbGxuYW1lKSB7XG5mcy9hZnMvc3VwZXIuYzoyOTI6XHRcdGNlbGwgPSBhZnNfbG9va3VwX2NlbGwoY3R4LVx1MDAzZW5ldCwgY2VsbG5hbWUsIGNlbGxuYW1lc3osXG5mcy9hZnMvc3VwZXIuYy0yOTMtXHRcdFx0XHQgICAgICAgTlVMTCwgQUZTX0xPT0tVUF9DRUxMX0RJUkVDVF9NT1VOVCxcbi0tXG5mcy9hZnMvdmxfYWxpYXMuYz0yNTM9c3RhdGljIGludCB5ZnNfY2hlY2tfY2Fub25pY2FsX2NlbGxfbmFtZShzdHJ1Y3QgYWZzX2NlbGwgKmNlbGwsIHN0cnVjdCBrZXkgKmtleSlcbi0tXG5mcy9hZnMvdmxfYWxpYXMuYy0yNzEtXHRlbHNlXG5mcy9hZnMvdmxfYWxpYXMuYzoyNzI6XHRcdG1hc3RlciA9IGFmc19sb29rdXBfY2VsbChjZWxsLVx1MDAzZW5ldCwgY2VsbF9uYW1lLCBuYW1lX2xlbiwgTlVMTCxcbmZzL2Fmcy92bF9hbGlhcy5jLTI3My1cdFx0XHRcdFx0IEFGU19MT09LVVBfQ0VMTF9BTElBU19DSEVDSyxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjIgMDk6Mjc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTU3OTgKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAyNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBhbmFseXppbmcgdGhpcyBjb2RlOgoKKipSZWFjaGluZyBLZXkgQ29kZSBTZWN0aW9ucyoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBlc3RhYmxpc2hlZCB0aGF0IGBhZnNfbG9va3VwX2NlbGxgIGlzIGRlZmluaXRlbHkgcmVhY2hhYmxlLiBUaGF0JiMzOTtzIGEgZ29vZCBzdGFydGluZyBwb2ludC4gTm93LCB0byB1bmRlcnN0YW5kIHRoZSBkYXRhIGZsb3cgYW5kIGhvdyB0aGlzIHdob2xlIHRoaW5nIGhhbmdzIHRvZ2V0aGVyLCBteSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byBsb29rIGF0IGBhZnNfZGlyX2l0ZXJhdGVfYmxvY2tgLiBJIG5lZWQgdG8gc2VlIGhvdyB0aGF0IGZ1bmN0aW9uIGludGVyYWN0cyB3aXRoIGBhZnNfbG9va3VwX2NlbGxgLCB3aGF0IGRhdGEgaXMgcGFzc2VkLCBhbmQgaWYgdGhlcmUgYXJlIGFueSBvYnZpb3VzIHZ1bG5lcmFiaWxpdGllcyBvciBwZXJmb3JtYW5jZSBib3R0bGVuZWNrcyB0aGVyZS4gVGhpcyBpdGVyYXRpb24gaXMgb2Z0ZW4gYSBjcml0aWNhbCBwYXRoLCBzbyBJIG5lZWQgdG8gdGhvcm91Z2hseSB1bmRlcnN0YW5kIGl0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMiAwOToyNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDthZnNfZGlyX2l0ZXJhdGVfYmxvY2smIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9hZnMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2Fmcy9kaXIuYz0zMDA9c3NpemVfdCBhZnNfcmVhZF9kaXIoc3RydWN0IGFmc192bm9kZSAqZHZub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSlcbi0tXG5mcy9hZnMvZGlyLmMtMzU2LSAqL1xuZnMvYWZzL2Rpci5jOjM1NzpzdGF0aWMgaW50IGFmc19kaXJfaXRlcmF0ZV9ibG9jayhzdHJ1Y3QgYWZzX3Zub2RlICpkdm5vZGUsXG5mcy9hZnMvZGlyLmMtMzU4LVx0XHRcdFx0IHN0cnVjdCBkaXJfY29udGV4dCAqY3R4LFxuLS1cbmZzL2Fmcy9kaXIuYz00NTc9c3RhdGljIHNpemVfdCBhZnNfZGlyX2l0ZXJhdGVfc3RlcCh2b2lkICppdGVyX2Jhc2UsIHNpemVfdCBwcm9ncmVzcywgc2l6ZV90IGxlbixcbi0tXG5mcy9hZnMvZGlyLmMtNDcyLVx0ZG8ge1xuZnMvYWZzL2Rpci5jOjQ3MzpcdFx0cmV0ID0gYWZzX2Rpcl9pdGVyYXRlX2Jsb2NrKGR2bm9kZSwgY3R4LVx1MDAzZWRpcl9jdHgsIGl0ZXJfYmFzZSk7XG5mcy9hZnMvZGlyLmMtNDc0LVx0XHRpZiAocmV0ICE9IDEpXG4tLVxuZnMvYWZzL2Rpci5jPTU1Mz1zdGF0aWMgaW50IGFmc19yZWFkZGlyKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgZGlyX2NvbnRleHQgKmN0eClcbi0tXG5mcy9hZnMvZGlyLmMtNTYyLSAqIFNlYXJjaCB0aGUgZGlyZWN0b3J5IGZvciBhIHNpbmdsZSBuYW1lXG5mcy9hZnMvZGlyLmM6NTYzOiAqIC0gaWYgYWZzX2Rpcl9pdGVyYXRlX2Jsb2NrKCkgc3BvdHMgdGhpcyBmdW5jdGlvbiwgaXQmIzM5O2xsIHBhc3MgdGhlIEZJRFxuZnMvYWZzL2Rpci5jLTU2NC0gKiAgIHVuaXF1aWZpZXIgdGhyb3VnaCBkdHlwZVxuLS1cbmZzL2Fmcy9kaXIuYz01OTg9c3RhdGljIGludCBhZnNfZG9fbG9va3VwX29uZShzdHJ1Y3QgaW5vZGUgKmRpciwgY29uc3Qgc3RydWN0IHFzdHIgKm5hbWUsXG4tLVxuZnMvYWZzL2Rpci5jLTYzMC0gKiBzZWFyY2ggdGhlIGRpcmVjdG9yeSBmb3IgYSBuYW1lXG5mcy9hZnMvZGlyLmM6NjMxOiAqIC0gaWYgYWZzX2Rpcl9pdGVyYXRlX2Jsb2NrKCkgc3BvdHMgdGhpcyBmdW5jdGlvbiwgaXQmIzM5O2xsIHBhc3MgdGhlIEZJRFxuZnMvYWZzL2Rpci5jLTYzMi0gKiAgIHVuaXF1aWZpZXIgdGhyb3VnaCBkdHlwZVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMiAwOToyNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjQ1OAoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDUwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzLCBnaXZlbiBteSBleHBlcnRpc2U6CgoqKkV4YW1pbmluZyB0aGUgQUZTIERpcmVjdG9yeSBJdGVyYXRpb24gUGF0aCoqCgpBbHJpZ2h0LCBzbyBJJiMzOTttIHRoaW5raW5nIGFib3V0IGBhZnNfZGlyX2l0ZXJhdGVfYmxvY2tgLiBJdCYjMzk7cyBhIGNvcmUgZnVuY3Rpb24gaW4gQUZTLCBhbmQgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGNhbGwgcGF0aHMgdG8gcmVhbGx5IGdyYXNwIGl0cyBiZWhhdmlvci4gQmFzZWQgb24gdGhlIGNvbm5lY3Rpb25zIEkga25vdywgbXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gdHJhY2UgaXRzIHVzYWdlLiBJIGtub3cgaXQmIzM5O3MgcmVhY2hhYmxlIHRocm91Z2ggYGFmc19yZWFkZGlyYC4gVGhhdCBtYWtlcyBzZW5zZTsgcmVhZGluZyBhIGRpcmVjdG9yeSBpcyB0aGUgdHlwaWNhbCB1c2UgY2FzZS4gVGhlbiwgSSByZW1lbWJlciBgYWZzX2RvX2xvb2t1cF9vbmVgIGFuZCBgYWZzX2RvX2xvb2t1cGAuIFRob3NlIGFyZSBjcnVjaWFsIGZvciBuYW1lIHJlc29sdXRpb24gd2l0aGluIHRoZSBmaWxlc3lzdGVtLiBUaGlzIGxpa2VseSBtZWFucyBgYWZzX2Rpcl9pdGVyYXRlX2Jsb2NrYCBpcyBpbnZvbHZlZCBpbiBmdWxmaWxsaW5nIGxvb2t1cCByZXF1ZXN0cyBhcyB3ZWxsLCBwZXJoYXBzIHdoZW4gc2VhcmNoaW5nIHdpdGhpbiBhIGRpcmVjdG9yeSB0byBmaW5kIGEgc3BlY2lmaWMgZW50cnkuCgpNeSBuZXh0IHN0ZXAgaXMgdG8gZHJpbGwgZG93biBmdXJ0aGVyLiBHaXZlbiB0aGUgZGlyZWN0b3J5IG9wZXJhdGlvbnMgYXJlIHNvIGtleSBoZXJlLCBsZXQmIzM5O3MgdGFrZSBhIGNsb3NlciBsb29rIGF0IGBhZnNfbG9va3VwX29uZV9maWxsZGlyYC4gSXQmIzM5O3MgaGlnaGx5IGxpa2VseSB0aGlzIGlzIHRoZSBmdW5jdGlvbiB0aGF0IGFjdHVhbGx5ICpmaWxscyogdGhlIGRpcmVjdG9yeSBlbnRyaWVzIGR1cmluZyBsb29rdXBzLCBhbmQgbGlrZWx5IGludGVyYWN0cyB3aXRoIGBhZnNfZGlyX2l0ZXJhdGVfYmxvY2tgLiBJIGV4cGVjdCB0aGF0IHRoaXMgZnVuY3Rpb24gaXMgd2hlcmUgdGhlIEFGUy1zcGVjaWZpYyBkaXJlY3RvcnkgaW5mb3JtYXRpb24gaXMgZW5jb2RlZC4gVW5kZXJzdGFuZGluZyBob3cgdGhvc2UgdHdvIGZ1bmN0aW9ucyBpbnRlcmFjdCB3aWxsIGdpdmUgbWUgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiBob3cgdGhlIGludGVybmFsIEFGUyBkaXJlY3Rvcnkgc3RydWN0dXJlIGlzIGJlaW5nIGNyZWF0ZWQgYW5kIHRyYXZlcnNlZC4gSSBuZWVkIHRvIHNlZSBob3cgdGhlIGRpcmVjdG9yeSBlbnRyaWVzIGFyZSBiZWluZyBidWlsdCwgcGFydGljdWxhcmx5IHdpdGggaG93IHRoZSBibG9jayBpbmZvcm1hdGlvbiBpcyBiZWluZyBwYXNzZWQuIFRoaXMgd2lsbCBiZSB0aGUgbmV4dCBwbGFjZSB0byBpbnZlc3RpZ2F0ZSBpbiBkZXB0aC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjIgMDk6Mjc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YWZzX2xvb2t1cF9vbmVfZmlsbGRpciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL2Fmcy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvYWZzL2Rpci5jPTI5PXN0YXRpYyB2b2lkIGFmc19kX2lwdXQoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgaW5vZGUgKmlub2RlKTtcbmZzL2Fmcy9kaXIuYzozMDpzdGF0aWMgYm9vbCBhZnNfbG9va3VwX29uZV9maWxsZGlyKHN0cnVjdCBkaXJfY29udGV4dCAqY3R4LCBjb25zdCBjaGFyICpuYW1lLCBpbnQgbmxlbixcbmZzL2Fmcy9kaXIuYy0zMS1cdFx0XHRcdCAgIHU2NCBpbm8sIHUzMiB1bmlxdWlmaWVyKTtcbi0tXG5mcy9hZnMvZGlyLmM9MzU3PXN0YXRpYyBpbnQgYWZzX2Rpcl9pdGVyYXRlX2Jsb2NrKHN0cnVjdCBhZnNfdm5vZGUgKmR2bm9kZSxcbi0tXG5mcy9hZnMvZGlyLmMtNDMxLVx0XHR9IGVsc2UgaWYgKGN0eC1cdTAwM2VhY3RvciA9PSBBRlNfTE9PS1VQX09ORSkge1xuZnMvYWZzL2Rpci5jOjQzMjpcdFx0XHRpZiAoIWFmc19sb29rdXBfb25lX2ZpbGxkaXIoY3R4LCBkaXJlLVx1MDAzZXUubmFtZSwgbmxlbixcbmZzL2Fmcy9kaXIuYy00MzMtXHRcdFx0XHRcdFx0ICAgIG50b2hsKGRpcmUtXHUwMDNldS52bm9kZSksXG4tLVxuZnMvYWZzL2Rpci5jPTU1Mz1zdGF0aWMgaW50IGFmc19yZWFkZGlyKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgZGlyX2NvbnRleHQgKmN0eClcbi0tXG5mcy9hZnMvZGlyLmMtNTY1LSAqL1xuZnMvYWZzL2Rpci5jOjU2NjpzdGF0aWMgYm9vbCBhZnNfbG9va3VwX29uZV9maWxsZGlyKHN0cnVjdCBkaXJfY29udGV4dCAqY3R4LCBjb25zdCBjaGFyICpuYW1lLFxuZnMvYWZzL2Rpci5jLTU2Ny1cdFx0XHRcdCAgaW50IG5sZW4sIHU2NCBpbm8sIHUzMiB1bmlxdWlmaWVyKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMiAwOToyNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzIyNwoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDI2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOgoKKipOYXZpZ2F0aW5nIHRoZSBBRlMgRmlsZXN5c3RlbSBJbXBsZW1lbnRhdGlvbioqCgpPa2F5LCBzbyBgYWZzX2xvb2t1cF9vbmVfZmlsbGRpcmAgaXMgZGVmaW5pdGVseSByZWFjaGFibGUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyByb2xlIHdpdGhpbiB0aGUgQUZTIGZpbGVzeXN0ZW0mIzM5O3MgbG9va3VwIG1lY2hhbmlzbS4gR2l2ZW4gdGhhdCwgdGhlIG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIGV4YW1pbmUgYGFmc19sb29rdXBfZmlsbGRpcmAuIEl0JiMzOTtzIGxpa2VseSB0aGF0IGBhZnNfbG9va3VwX2ZpbGxkaXJgIGlzIHdoZXJlIHRoZSBjb3JlIGxvZ2ljIG9mIGZpbGxpbmcgdGhlIGRpcmVjdG9yeSBlbnRyaWVzIHdpbGwgcmVzaWRlLCBhbmQgd2hlcmUgYGFmc19sb29rdXBfb25lX2ZpbGxkaXJgIGlzIGNhbGxlZCBmcm9tLiBJIG5lZWQgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiBob3cgZGlyZWN0b3J5IGVudHJpZXMgYXJlIGdlbmVyYXRlZCB3aXRoaW4gdGhpcyBmdW5jdGlvbi4gSSYjMzk7bGwgZm9jdXMgb24gaG93IHRoZSBkaXJlY3Rvcnkgc3RydWN0dXJlIGlzIHRyYXZlcnNlZCBhbmQgcG9wdWxhdGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMiAwOToyODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDthZnNfbG9va3VwX2ZpbGxkaXImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9hZnMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2Fmcy9kaXIuYz0zMD1zdGF0aWMgYm9vbCBhZnNfbG9va3VwX29uZV9maWxsZGlyKHN0cnVjdCBkaXJfY29udGV4dCAqY3R4LCBjb25zdCBjaGFyICpuYW1lLCBpbnQgbmxlbixcbi0tXG5mcy9hZnMvZGlyLmMtMzItI2RlZmluZSBBRlNfTE9PS1VQX09ORSAoKGZpbGxkaXJfdCkweDEyM1VMKVxuZnMvYWZzL2Rpci5jOjMzOnN0YXRpYyBib29sIGFmc19sb29rdXBfZmlsbGRpcihzdHJ1Y3QgZGlyX2NvbnRleHQgKmN0eCwgY29uc3QgY2hhciAqbmFtZSwgaW50IG5sZW4sXG5mcy9hZnMvZGlyLmMtMzQtXHRcdFx0ICAgICAgIHU2NCBpbm8sIHUzMiB1bmlxdWlmaWVyKTtcbi0tXG5mcy9hZnMvZGlyLmM9MzU3PXN0YXRpYyBpbnQgYWZzX2Rpcl9pdGVyYXRlX2Jsb2NrKHN0cnVjdCBhZnNfdm5vZGUgKmR2bm9kZSxcbi0tXG5mcy9hZnMvZGlyLmMtNDI2LVx0XHRpZiAoY3R4LVx1MDAzZWFjdG9yID09IEFGU19MT09LVVApIHtcbmZzL2Fmcy9kaXIuYzo0Mjc6XHRcdFx0aWYgKCFhZnNfbG9va3VwX2ZpbGxkaXIoY3R4LCBkaXJlLVx1MDAzZXUubmFtZSwgbmxlbixcbmZzL2Fmcy9kaXIuYy00MjgtXHRcdFx0XHRcdFx0bnRvaGwoZGlyZS1cdTAwM2V1LnZub2RlKSxcbi0tXG5mcy9hZnMvZGlyLmM9NTk4PXN0YXRpYyBpbnQgYWZzX2RvX2xvb2t1cF9vbmUoc3RydWN0IGlub2RlICpkaXIsIGNvbnN0IHN0cnVjdCBxc3RyICpuYW1lLFxuLS1cbmZzL2Fmcy9kaXIuYy02MzMtICovXG5mcy9hZnMvZGlyLmM6NjM0OnN0YXRpYyBib29sIGFmc19sb29rdXBfZmlsbGRpcihzdHJ1Y3QgZGlyX2NvbnRleHQgKmN0eCwgY29uc3QgY2hhciAqbmFtZSxcbmZzL2Fmcy9kaXIuYy02MzUtXHRcdFx0ICAgICAgaW50IG5sZW4sIHU2NCBpbm8sIHUzMiB1bmlxdWlmaWVyKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMiAwOToyODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzgyMgoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDMyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGFuYWx5c2lzIG9mIHRoZSBwcm92aWRlZCBpbmZvcm1hdGlvbiwgYXMgaWYgdGhlc2UgYXJlIG15IGltbWVkaWF0ZSB0aG91Z2h0czoKCioqTmF2aWdhdGluZyB0aGUgQUZTIENvZGViYXNlKioKCk9rYXksIHNvIGBhZnNfbG9va3VwX2ZpbGxkaXJgIGlzIGRlZmluaXRlbHkgcmVhY2hhYmxlLiBUaGF0JiMzOTtzIGEga2V5IGZ1bmN0aW9uLCBtZWFuaW5nIGl0JiMzOTtzIGludm9sdmVkIGluIGRpcmVjdG9yeSBsb29rdXBzIHdpdGhpbiB0aGUgQUZTIGZpbGVzeXN0ZW0uIE5vdywgbGV0JiMzOTtzIHNlZSB3aGVyZSB0aGF0IHRha2VzIHVzLiBUaGUgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gZXhhbWluZSBgYWZzX2RlbGl2ZXJfY2JfaW5pdF9jYWxsX2JhY2tfc3RhdGUzYC4gSSYjMzk7bSBndWVzc2luZyB0aGlzIGZ1bmN0aW9uIGlzIHJlbGF0ZWQgdG8gZGVsaXZlcmluZyBjYWxsLWJhY2tzLCBsaWtlbHkgd2l0aGluIHRoZSBjb250ZXh0IG9mIGEgc3BlY2lmaWMgc3RhdGUsIHBvc3NpYmx5IHJlbGF0ZWQgdG8gdmVyc2lvbiAzIG9mIHRoZSBjYWxsYmFjayBwcm90b2NvbCwgZ2l2ZW4gdGhlIG5hbWUuIFVuZGVyc3RhbmRpbmcgaG93IGNhbGxiYWNrcyBhcmUgaGFuZGxlZCBpcyBjcnVjaWFsIGZvciB1bmRlcnN0YW5kaW5nIEFGUyYjMzk7cyBkaXN0cmlidXRlZCBuYXR1cmUgYW5kIGVuc3VyaW5nIGRhdGEgY29uc2lzdGVuY3kuIFRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBjb2RlIGFuZCBzZWUgd2hhdCBgYWZzX2RlbGl2ZXJfY2JfaW5pdF9jYWxsX2JhY2tfc3RhdGUzYCBpcyBkb2luZywgYW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgYnJvYWRlciBkaXJlY3RvcnkgbG9va3VwIHByb2Nlc3MuIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIGhvdyB0aGUgY2FsbGJhY2sgc3RhdGVzIGFyZSBpbml0aWF0ZWQgYW5kIG1hbmFnZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIyIDA5OjI4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2Fmc19kZWxpdmVyX2NiX2luaXRfY2FsbF9iYWNrX3N0YXRlMyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL2Fmcy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvYWZzL2Ntc2VydmljZS5jPTE5PXN0YXRpYyBpbnQgYWZzX2RlbGl2ZXJfY2JfaW5pdF9jYWxsX2JhY2tfc3RhdGUoc3RydWN0IGFmc19jYWxsICopO1xuZnMvYWZzL2Ntc2VydmljZS5jOjIwOnN0YXRpYyBpbnQgYWZzX2RlbGl2ZXJfY2JfaW5pdF9jYWxsX2JhY2tfc3RhdGUzKHN0cnVjdCBhZnNfY2FsbCAqKTtcbmZzL2Fmcy9jbXNlcnZpY2UuYy0yMS1zdGF0aWMgaW50IGFmc19kZWxpdmVyX2NiX3Byb2JlKHN0cnVjdCBhZnNfY2FsbCAqKTtcbi0tXG5mcy9hZnMvY21zZXJ2aWNlLmM9NTc9c3RhdGljIGNvbnN0IHN0cnVjdCBhZnNfY2FsbF90eXBlIGFmc19TUlhDQkluaXRDYWxsQmFja1N0YXRlMyA9IHtcbmZzL2Fmcy9jbXNlcnZpY2UuYy01OC1cdC5uYW1lXHRcdD0gXCYjMzQ7Q0IuSW5pdENhbGxCYWNrU3RhdGUzXCYjMzQ7LFxuZnMvYWZzL2Ntc2VydmljZS5jOjU5Olx0LmRlbGl2ZXJcdD0gYWZzX2RlbGl2ZXJfY2JfaW5pdF9jYWxsX2JhY2tfc3RhdGUzLFxuZnMvYWZzL2Ntc2VydmljZS5jLTYwLVx0LmRlc3RydWN0b3JcdD0gYWZzX2NtX2Rlc3RydWN0b3IsXG4tLVxuZnMvYWZzL2Ntc2VydmljZS5jPTMwMz1zdGF0aWMgaW50IGFmc19kZWxpdmVyX2NiX2luaXRfY2FsbF9iYWNrX3N0YXRlKHN0cnVjdCBhZnNfY2FsbCAqY2FsbClcbi0tXG5mcy9hZnMvY21zZXJ2aWNlLmMtMzEzLSAqL1xuZnMvYWZzL2Ntc2VydmljZS5jOjMxNDpzdGF0aWMgaW50IGFmc19kZWxpdmVyX2NiX2luaXRfY2FsbF9iYWNrX3N0YXRlMyhzdHJ1Y3QgYWZzX2NhbGwgKmNhbGwpXG5mcy9hZnMvY21zZXJ2aWNlLmMtMzE1LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjIgMDk6Mjg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTg0NTUKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAzOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgaW1tZWRpYXRlIHRob3VnaHQgcHJvY2VzcywgZm9jdXNpbmcgb24gdGhlIGNvbnRleHQgb2YgcnhycGM6CgoqKkFuYWx5emluZyBhbiBSWFJQQyBDYWxsYmFjayoqCgpPa2F5LCBJJiMzOTttIGxvb2tpbmcgYXQgYGFmc19kZWxpdmVyX2NiX2luaXRfY2FsbF9iYWNrX3N0YXRlM2AuIFRoZSBuYW1lIHN0cm9uZ2x5IHN1Z2dlc3RzIHRoaXMgaXMgYSBjYWxsYmFjayBmdW5jdGlvbiByZWxhdGVkIHRvIHJ4cnBjLCB3aGljaCBpcyB0aGUgYXNzdW1wdGlvbiBJJiMzOTttIG9wZXJhdGluZyB1bmRlci4gR2l2ZW4gdGhhdCwgbGV0JiMzOTtzIGltbWVkaWF0ZWx5IHZlcmlmeSB0aGF0IGFzc3VtcHRpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBzcGVjaWZpYyBmdW5jdGlvbi4gQSBxdWljayBpbnZlc3RpZ2F0aW9uIG9mIGBhZnNfZGVsaXZlcl9jYl9wcm9iZV91dWlkYCBmZWVscyBsaWtlIGEgbG9naWNhbCBuZXh0IHN0ZXAgdG8gaWxsdW1pbmF0ZSB0aGUgcHVycG9zZSBvZiB0aGUgY2FsbCwgYXMgdGhlIG5hbWluZyBjb252ZW50aW9ucyBvZiBSWFJQQyBjYWxsYmFja3MgYXJlIG9mdGVuIGNvbnNpc3RlbnQuIEkmIzM5O20gaG9waW5nIHRoYXQgdGhpcyB3aWxsIHByb3ZpZGUgY3J1Y2lhbCBjb250ZXh0IGFzIHRvIHRoZSBwdXJwb3NlIG9mIHRoaXMgY2FsbCBiYWNrLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMiAwOToyODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDthZnNfZGVsaXZlcl9jYl9wcm9iZV91dWlkJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvYWZzLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9hZnMvY21zZXJ2aWNlLmM9MjI9c3RhdGljIGludCBhZnNfZGVsaXZlcl9jYl9jYWxsYmFjayhzdHJ1Y3QgYWZzX2NhbGwgKik7XG5mcy9hZnMvY21zZXJ2aWNlLmM6MjM6c3RhdGljIGludCBhZnNfZGVsaXZlcl9jYl9wcm9iZV91dWlkKHN0cnVjdCBhZnNfY2FsbCAqKTtcbmZzL2Fmcy9jbXNlcnZpY2UuYy0yNC1zdGF0aWMgaW50IGFmc19kZWxpdmVyX2NiX3RlbGxfbWVfYWJvdXRfeW91cnNlbGYoc3RydWN0IGFmc19jYWxsICopO1xuLS1cbmZzL2Fmcy9jbXNlcnZpY2UuYz03Nz1zdGF0aWMgY29uc3Qgc3RydWN0IGFmc19jYWxsX3R5cGUgYWZzX1NSWENCUHJvYmVVdWlkID0ge1xuZnMvYWZzL2Ntc2VydmljZS5jLTc4LVx0Lm5hbWVcdFx0PSBcJiMzNDtDQi5Qcm9iZVV1aWRcJiMzNDssXG5mcy9hZnMvY21zZXJ2aWNlLmM6Nzk6XHQuZGVsaXZlclx0PSBhZnNfZGVsaXZlcl9jYl9wcm9iZV91dWlkLFxuZnMvYWZzL2Ntc2VydmljZS5jLTgwLVx0LmRlc3RydWN0b3JcdD0gYWZzX2NtX2Rlc3RydWN0b3IsXG4tLVxuZnMvYWZzL2Ntc2VydmljZS5jPTQxNj1zdGF0aWMgdm9pZCBTUlhBRlNDQl9Qcm9iZVV1aWQoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuLS1cbmZzL2Fmcy9jbXNlcnZpY2UuYy00MzQtICovXG5mcy9hZnMvY21zZXJ2aWNlLmM6NDM1OnN0YXRpYyBpbnQgYWZzX2RlbGl2ZXJfY2JfcHJvYmVfdXVpZChzdHJ1Y3QgYWZzX2NhbGwgKmNhbGwpXG5mcy9hZnMvY21zZXJ2aWNlLmMtNDM2LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjIgMDk6Mjg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTkwMDYKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAzMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcm9tIGFuIGV4cGVydCYjMzk7cyBwZXJzcGVjdGl2ZToKCioqRGl2aW5nIGludG8gdGhlIFJ4UlBDIEltcGxlbWVudGF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBgYWZzX2RlbGl2ZXJfY2JfcHJvYmVfdXVpZGAuIFJpZ2h0LCB0aGF0JiMzOTtzIGRlZmluaXRlbHkgYSBjYWxsYmFjayBmdW5jdGlvbiwgcGFydCBvZiB0aGUgcnhycGMgaW1wbGVtZW50YXRpb24uIEl0JiMzOTtzIHRyaWdnZXJlZCBieSBhbiByeHJwYyBldmVudCwgcHJvYmFibHkgcmVsYXRlZCB0byBzb21lIHByb2Jpbmcgb3IgZGlzY292ZXJ5IG9wZXJhdGlvbi4gTm93IEkgbmVlZCB0byBzZWUgZXhhY3RseSB3aGF0JiMzOTtzIGdvaW5nIG9uIHdpdGhpbiB0aGF0IGNhbGxiYWNrIGZ1bmN0aW9uIGFuZCBob3cgaXQgcmVsYXRlcyB0byB0aGUgd2lkZXIgc3lzdGVtLgoKTGV0JiMzOTtzIHNlZS4uLiB0aGUgbW9zdCBsaWtlbHkgZnVuY3Rpb24gdG8gc2hlZCBsaWdodCBvbiB0aGlzIGlzIGBhZnNfZXh0cmFjdF92bHNlcnZlcl9saXN0YC4gVGhhdCBzb3VuZHMgbGlrZSB0aGUgcmlnaHQgcGxhY2UgdG8gc3RhcnQsIGFzIGl0IGlzIHJlbGF0ZWQgdG8gYSBzZXJ2ZXIgbGlzdC4gSSB3YW50IHRvIHNlZSBpZiBgYWZzX2V4dHJhY3RfdmxzZXJ2ZXJfbGlzdGAgaXMgY2FsbGVkIGFuZCBob3cgaXQmIzM5O3MgYmVpbmcgdXNlZCBieSB0aGlzIHByb2JlIGZ1bmN0aW9uLiBQZXJoYXBzIHRoZXJlJiMzOTtzIGEgdml0YWwgY29ubmVjdGlvbiBoZXJlLiBJdCB3aWxsIGJlIHVzZWZ1bCB0byB1bmRlcnN0YW5kIGhvdyByeHJwYyBpcyBpbnRlcmFjdGluZyB3aXRoIHRoZSB2b2x1bWUgc2VydmVyIGxpc3Qgd2l0aGluIHRoaXMgY29udGV4dCwgaG93IHRoYXQgbGlzdCBpcyBwb3B1bGF0ZWQsIGFuZCBob3cgYW55IHVwZGF0ZXMgYXJlIGhhbmRsZWQuIEkgYmV0IHRoaXMgaXMgd2hlcmUgdGhlIG1lYXQgb2YgdGhlIHByb2JlIGxvZ2ljIGxpdmVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMiAwOToyODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDthZnNfZXh0cmFjdF92bHNlcnZlcl9saXN0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvYWZzLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9hZnMvYWRkcl9saXN0LmM9MjUwPXN0cnVjdCBhZnNfdmxzZXJ2ZXJfbGlzdCAqYWZzX2Ruc19xdWVyeShzdHJ1Y3QgYWZzX2NlbGwgKmNlbGwsIHRpbWU2NF90ICpfZXhwaXJ5KVxuLS1cbmZzL2Fmcy9hZGRyX2xpc3QuYy0yNjgtXHRpZiAocmV0IFx1MDAzZSAxIFx1MDAyNlx1MDAyNiByZXN1bHRbMF0gPT0gMClcbmZzL2Fmcy9hZGRyX2xpc3QuYzoyNjk6XHRcdHZsbGlzdCA9IGFmc19leHRyYWN0X3Zsc2VydmVyX2xpc3QoY2VsbCwgcmVzdWx0LCByZXQpO1xuZnMvYWZzL2FkZHJfbGlzdC5jLTI3MC1cdGVsc2Vcbi0tXG5mcy9hZnMvaW50ZXJuYWwuaD0xNjgyPWV4dGVybiB2b2lkIGFmc19wdXRfdmxzZXJ2ZXJsaXN0KHN0cnVjdCBhZnNfbmV0ICosIHN0cnVjdCBhZnNfdmxzZXJ2ZXJfbGlzdCAqKTtcbmZzL2Fmcy9pbnRlcm5hbC5oOjE2ODM6ZXh0ZXJuIHN0cnVjdCBhZnNfdmxzZXJ2ZXJfbGlzdCAqYWZzX2V4dHJhY3RfdmxzZXJ2ZXJfbGlzdChzdHJ1Y3QgYWZzX2NlbGwgKixcbmZzL2Fmcy9pbnRlcm5hbC5oLTE2ODQtXHRcdFx0XHRcdFx0XHQgICBjb25zdCB2b2lkICosIHNpemVfdCk7XG4tLVxuZnMvYWZzL3ZsX2xpc3QuYz04OT1zdGF0aWMgc3RydWN0IGFmc19hZGRyX2xpc3QgKmFmc19leHRyYWN0X3ZsX2FkZHJzKHN0cnVjdCBhZnNfbmV0ICpuZXQsXG4tLVxuZnMvYWZzL3ZsX2xpc3QuYy0xNTktICovXG5mcy9hZnMvdmxfbGlzdC5jOjE2MDpzdHJ1Y3QgYWZzX3Zsc2VydmVyX2xpc3QgKmFmc19leHRyYWN0X3Zsc2VydmVyX2xpc3Qoc3RydWN0IGFmc19jZWxsICpjZWxsLFxuZnMvYWZzL3ZsX2xpc3QuYy0xNjEtXHRcdFx0XHRcdFx0ICAgIGNvbnN0IHZvaWQgKmJ1ZmZlcixcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjIgMDk6Mjg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTk2NzcKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAzNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgaW1tZWRpYXRlIHRob3VnaHQgcHJvY2VzcywgZm9jdXNpbmcgb24gdGhlIHByb3ZpZGVkIHRlY2huaWNhbCBzbmlwcGV0czoKCioqRGVidWdnaW5nIGFuIEFGUyBJbnRlcmFjdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCBpdCBzZWVtcyBsaWtlIHRoZSBgYWZzX2V4dHJhY3RfdmxzZXJ2ZXJfbGlzdGAgZnVuY3Rpb24gaXMsIGF0IGxlYXN0IHBvdGVudGlhbGx5LCByZWFjaGFibGUgdGhyb3VnaCB0aGUgYGFmc19kbnNfcXVlcnlgIGZ1bmN0aW9uLiBUaGF0JiMzOTtzIGdvb2QgdG8ga25vdyDigJMgaXQgZ2l2ZXMgbWUgYSBwb3NzaWJsZSBlbnRyeSBwb2ludCBpZiBJIG5lZWQgdG8gdHJhY2UgaXRzIGV4ZWN1dGlvbi4gVGhpcyBpcyBhIGNvbW1vbiBwYXR0ZXJuIGluIEFGUzsgRE5TIHBsYXlzIGEgY3J1Y2lhbCByb2xlIGluIGxvY2F0aW5nIHZvbHVtZXMgc2VydmVycy4gTm93LCB3aGF0JiMzOTtzIGRpcmVjdGx5IHJlbGF0ZWQgdG8gdGhlIHZvbHVtZSBzZXJ2ZXJzPyBMZXQmIzM5O3Mgc3dpdGNoIGdlYXJzIGFuZCB0YWtlIGEgbG9vayBhdCBgYWZzX2lub2RlX2luaXRfZnJvbV9zdGF0dXNgLiBJdCBpcyB2ZXJ5IGxpa2VseSB0aGF0IHRoZSBpbml0aWFsaXphdGlvbiBvZiBhbiBpbm9kZSBhbmQgdGhlIHN0YXR1cyBpbmZvcm1hdGlvbiBmcm9tIHZvbHVtZSBzZXJ2ZXJzIHdpbGwgaW52b2x2ZSB0aGlzIGZ1bmN0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGlub2RlIGlzIHNldCB1cCBhbmQgd2hhdCBraW5kIG9mIHN0YXR1cyBpbmZvcm1hdGlvbiBpcyBwcm92aWRlZCBieSB0aGlzIGZ1bmN0aW9uLiBUaGlzIG1pZ2h0IGdpdmUgbWUgdGhlIGNvbnRleHQgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHdlIHJlYWNoIHRoZSB2b2x1bWUgc2VydmVyIGxpc3QuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIyIDA5OjI4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2Fmc19pbm9kZV9pbml0X2Zyb21fc3RhdHVzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvYWZzLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9hZnMvaW5vZGUuYz01NT1zdGF0aWMgdm9pZCBhZnNfc2V0X25ldGZzX2NvbnRleHQoc3RydWN0IGFmc192bm9kZSAqdm5vZGUsIGJvb2wgaXNfZmlsZSlcbi0tXG5mcy9hZnMvaW5vZGUuYy02Mi0gKi9cbmZzL2Fmcy9pbm9kZS5jOjYzOnN0YXRpYyBpbnQgYWZzX2lub2RlX2luaXRfZnJvbV9zdGF0dXMoc3RydWN0IGFmc19vcGVyYXRpb24gKm9wLFxuZnMvYWZzL2lub2RlLmMtNjQtXHRcdFx0XHQgICAgICBzdHJ1Y3QgYWZzX3Zub2RlX3BhcmFtICp2cCxcbi0tXG5mcy9hZnMvaW5vZGUuYz0zNDY9c3RhdGljIHZvaWQgYWZzX2ZldGNoX3N0YXR1c19zdWNjZXNzKHN0cnVjdCBhZnNfb3BlcmF0aW9uICpvcClcbi0tXG5mcy9hZnMvaW5vZGUuYy0zNTItXHRpZiAoaW5vZGVfc3RhdGVfcmVhZF9vbmNlKFx1MDAyNnZub2RlLVx1MDAzZW5ldGZzLmlub2RlKSBcdTAwMjYgSV9ORVcpIHtcbmZzL2Fmcy9pbm9kZS5jOjM1MzpcdFx0cmV0ID0gYWZzX2lub2RlX2luaXRfZnJvbV9zdGF0dXMob3AsIHZwLCB2bm9kZSk7XG5mcy9hZnMvaW5vZGUuYy0zNTQtXHRcdGFmc19vcF9zZXRfZXJyb3Iob3AsIHJldCk7XG4tLVxuZnMvYWZzL2lub2RlLmM9NDgyPXN0cnVjdCBpbm9kZSAqYWZzX2lnZXQoc3RydWN0IGFmc19vcGVyYXRpb24gKm9wLCBzdHJ1Y3QgYWZzX3Zub2RlX3BhcmFtICp2cClcbi0tXG5mcy9hZnMvaW5vZGUuYy01MDgtXG5mcy9hZnMvaW5vZGUuYzo1MDk6XHRyZXQgPSBhZnNfaW5vZGVfaW5pdF9mcm9tX3N0YXR1cyhvcCwgdnAsIHZub2RlKTtcbmZzL2Fmcy9pbm9kZS5jLTUxMC1cdGlmIChyZXQgXHUwMDNjIDApXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIyIDA5OjI4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwMzIzCgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMTU4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEN1cnJlbnQgVGhpbmtpbmc6IEFGUyBNb2R1bGUgRGVlcCBEaXZlKioKCk9rYXksIHNvIEkmIzM5O20gdHJhY2luZyB0aGUgZXhlY3V0aW9uIHBhdGggaGVyZSB3aXRoaW4gdGhlIEFGUyBtb2R1bGUsIHRyeWluZyB0byB1bmRlcnN0YW5kIGEgc3BlY2lmaWMgZnVuY3Rpb24sIGBhZnNfaW5vZGVfaW5pdF9mcm9tX3N0YXR1c2AuIEkmIzM5O3ZlIGVzdGFibGlzaGVkIHRoYXQgaXQmIzM5O3MgcmVhY2hhYmxlIHRocm91Z2ggYGFmc19pZ2V0YCBhbmQsIGltcG9ydGFudGx5LCBgYWZzX2ZldGNoX3N0YXR1c19zdWNjZXNzYC4gVGhhdCYjMzk7cyBhIGtleSBlbnRyeSBwb2ludC4gTm93LCBJJiMzOTttIG1hcHBpbmcgb3V0IHRoZSBzdXJyb3VuZGluZyBmdW5jdGlvbnMgdGhhdCBsaWtlbHkgaW50ZXJhY3Qgd2l0aCBpdCBvciBhcmUgcGFydCBvZiB0aGUgc2FtZSBkYXRhIGZsb3cuCgpNeSBrZXkgZm9jdXMgc3ltYm9scyBub3cgYXJlOiBgYWZzX2Rpcl9pdGVyYXRlX2Jsb2NrYCwgYGFmc19sb29rdXBfb25lX2ZpbGxkaXJgLCBgYWZzX2xvb2t1cF9maWxsZGlyYCwgYGFmc19leHRyYWN0X3ZsX2FkZHJzYCwgYGFmc19leHRyYWN0X3Zsc2VydmVyX2xpc3RgLCBuYXR1cmFsbHksIHRoZSBvbmUgSSBtZW50aW9uZWQgYWxyZWFkeSAtIGBhZnNfaW5vZGVfaW5pdF9mcm9tX3N0YXR1c2AsIHRoZW4gYGFmc19sb29rdXBfY2VsbGAsIGBhZnNfZGVsaXZlcl9jYl9pbml0X2NhbGxfYmFja19zdGF0ZTNgLCBhbmQgYGFmc19kZWxpdmVyX2NiX3Byb2JlX3V1aWRgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gdGhlc2UgZnVuY3Rpb25zLCBwYXJ0aWN1bGFybHkgaG93IHRoZXkgcmVsYXRlIHRvIGluaXRpYWxpemluZyBpbm9kZXMgZnJvbSBzdGF0dXMgaW5mb3JtYXRpb24uIEFyZSB0aGV5IGFsbCBpbnZvbHZlZCBpbiBkaXJlY3RvcnkgbG9va3VwcywgYWRkcmVzcyBleHRyYWN0aW9uLCBvciBjYWxsYmFja3MgcmVsYXRlZCB0byBmaWxlIHN5c3RlbSBvcGVyYXRpb25zPwoKQW5kIHRoaXMgaXMgYWxsIGhhcHBlbmluZyB1bmRlciB0aGUgYEFGU19GU2AgY29uZmlndXJhdGlvbi4gSXQmIzM5O3MgdGltZSB0byBxdWlja2x5IGRvdWJsZS1jaGVjayB0aGF0IHRoZXJlIGFyZW4mIzM5O3QgYW55IG90aGVyIGNydWNpYWwgY29uZmlndXJhdGlvbnMgdGhhdCBtaWdodCBpbmZsdWVuY2UgdGhlIGJlaGF2aW9yIG9mIHRoZXNlIGZ1bmN0aW9ucywgb3IgdGhlIGRlcGVuZGVuY2llcyB0aGV5IHJlbHkgdXBvbi4gSSB3b3VsZG4mIzM5O3Qgd2FudCB0byBvdmVybG9vayBhbnl0aGluZyBjcml0aWNhbC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjIgMDk6Mjg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEFGU18mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9hZnMvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9hZnMvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuZnMvYWZzL0tjb25maWc6Mjpjb25maWcgQUZTX0ZTXG5mcy9hZnMvS2NvbmZpZy0zLVx0dHJpc3RhdGUgXCYjMzQ7QW5kcmV3IEZpbGUgU3lzdGVtIHN1cHBvcnQgKEFGUylcJiMzNDtcbi0tXG5mcy9hZnMvS2NvbmZpZy0xNi1cbmZzL2Fmcy9LY29uZmlnOjE3OmNvbmZpZyBBRlNfREVCVUdcbmZzL2Fmcy9LY29uZmlnLTE4LVx0Ym9vbCBcJiMzNDtBRlMgZHluYW1pYyBkZWJ1Z2dpbmdcJiMzNDtcbi0tXG5mcy9hZnMvS2NvbmZpZy0yNi1cbmZzL2Fmcy9LY29uZmlnOjI3OmNvbmZpZyBBRlNfRlNDQUNIRVxuZnMvYWZzL0tjb25maWctMjgtXHRib29sIFwmIzM0O1Byb3ZpZGUgQUZTIGNsaWVudCBjYWNoaW5nIHN1cHBvcnRcJiMzNDtcbi0tXG5mcy9hZnMvS2NvbmZpZy0zMy1cbmZzL2Fmcy9LY29uZmlnOjM0OmNvbmZpZyBBRlNfREVCVUdfQ1VSU09SXG5mcy9hZnMvS2NvbmZpZy0zNS1cdGJvb2wgXCYjMzQ7QUZTIHNlcnZlciBjdXJzb3IgZGVidWdnaW5nXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIyIDA5OjI4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxMDQ5CgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogMTM1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgQUZTIEZpbGVzeXN0ZW0gQ2hhbmdlcyoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBiZWVuIGdpdmVuIGEgbGlzdCBvZiBtb2RpZmllZCBmaWxlcyB3aXRoaW4gdGhlIEFGUyBmaWxlc3lzdGVtIGltcGxlbWVudGF0aW9uOiBgZnMvYWZzL2NhbGxiYWNrLmNgLCBgZnMvYWZzL2NlbGwuY2AsIGBmcy9hZnMvY21zZXJ2aWNlLmNgLCBgZnMvYWZzL2Rpci5jYCwgYGZzL2Fmcy9keW5yb290LmNgLCBgZnMvYWZzL2ZzX29wZXJhdGlvbi5jYCwgYGZzL2Fmcy9pbm9kZS5jYCwgYGZzL2Fmcy9pbnRlcm5hbC5oYCwgYGZzL2Fmcy9zdXBlci5jYCwgYGZzL2Fmcy92bF9saXN0LmNgLCBhbmQgYGZzL2Fmcy92b2x1bWUuY2AuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIGFzc2VzcyB0aGUgcG90ZW50aWFsIGltcGFjdCBvZiB0aGVzZSBjaGFuZ2VzLiBTaW5jZSBBRlMgaXMgYSB3ZWxsLWVzdGFibGlzaGVkIGRpc3RyaWJ1dGVkIGZpbGVzeXN0ZW0sIGEgbW9kaWZpY2F0aW9uIHRvIHRoaXMgbWFueSBmaWxlcyB3YXJyYW50cyBjYXJlZnVsIHNjcnV0aW55LiBCZWZvcmUganVtcGluZyBpbnRvIHNwZWNpZmljcywgSSBuZWVkIHRvIGNoZWNrIHNvbWV0aGluZyBmdW5kYW1lbnRhbDogYXJlIGFueSBvZiB0aGVzZSBmaWxlcyBjb25kaXRpb25hbGx5IGNvbXBpbGVkIGJhc2VkIG9uIGtlcm5lbCBjb25maWd1cmF0aW9uIG9wdGlvbnMgb3IgZmVhdHVyZSBmbGFncz8gVGhpcyBpcyBjcml0aWNhbC4gSWYgY2hhbmdlcyBhcmUgaGlkZGVuIGJlaGluZCBkZWZpbmVzLCBJIG5lZWQgdG8ga25vdyB0aGUgcG90ZW50aWFsIHZhcmlhdGlvbnMgdGhhdCBtYXkgYmUgaW4gcGxheS4gVGhpcyB3aWxsIGluZmx1ZW5jZSBob3cgSSBhcHByb2FjaCBteSBhbmFseXNpcywgZXNwZWNpYWxseSBzaW5jZSB0aGlzIGlzIEFGUy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjIgMDk6Mjg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YWZzLXkmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9hZnMvTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvYWZzL01ha2VmaWxlLTUtXG5mcy9hZnMvTWFrZWZpbGU6NjprYWZzLXkgOj0gXFxcbmZzL2Fmcy9NYWtlZmlsZS03LVx0YWRkcl9saXN0Lm8gXFxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjIgMDk6Mjg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjE1MDMKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiA4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgTWFrZWZpbGUuIEkgbmVlZCB0byBnZXQgYSBjb21wcmVoZW5zaXZlIHVuZGVyc3RhbmRpbmcgYmVmb3JlIEkgc3RhcnQgbWFraW5nIGFueSBjaGFuZ2VzLCBzbyBhIGxpbmUtYnktbGluZSByZXZpZXcgaXMgYWJzb2x1dGVseSBuZWNlc3NhcnkuIEkmIzM5O2xsIG5lZWQgdG8gbG9vayBhdCBldmVyeSB0YXJnZXQsIGV2ZXJ5IGRlcGVuZGVuY3ksIGV2ZXJ5IGNvbW1hbmQsIGV2ZXJ5IHZhcmlhYmxlLCBhbmQgZXZlcnkgaW5jbHVkZS4gVGhpcyBpc24mIzM5O3QganVzdCBhYm91dCBzcG90dGluZyBvYnZpb3VzIGVycm9ycywgYnV0IGFib3V0IGdyYXNwaW5nIHRoZSBvdmVyYWxsIGZsb3cgYW5kIGludGVuZGVkIGJlaGF2aW9yLiBJIHdhbnQgdG8gYnVpbGQgYSBtZW50YWwgbWFwIG9mIGhvdyB0aGVzZSBjb21wb25lbnRzIGFyZSBpbnRlcmNvbm5lY3RlZCwgc28gSSBjYW4gcHJlZGljdCB0aGUgaW1wYWN0cyBvZiBhbnkgbW9kaWZpY2F0aW9ucy4gVGhpcyBpcyBhYm91dCBlbnN1cmluZyBJIGRvbuKAmXQgaW50cm9kdWNlIGFueSByZWdyZXNzaW9ucyBvciB1bmludGVuZGVkIGNvbnNlcXVlbmNlcyBkb3duIHRoZSBsaW5lLiBBIGhvbGlzdGljIHZpZXcgaXMga2V5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMiAwOToyODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2ZzL2Fmcy9NYWtlZmlsZSYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4gICAyOlx0I1xuICAgMzpcdCMgTWFrZWZpbGUgZm9yIFJlZCBIYXQgTGludXggQUZTIGNsaWVudC5cbiAgIDQ6XHQjXG4gICA1Olx0XG4gICA2Olx0a2Fmcy15IDo9IFxcXG4gICA3Olx0XHRhZGRyX2xpc3QubyBcXFxuICAgODpcdFx0YWRkcl9wcmVmcy5vIFxcXG4gICA5Olx0XHRjYWxsYmFjay5vIFxcXG4gIDEwOlx0XHRjZWxsLm8gXFxcbiAgMTE6XHRcdGNtX3NlY3VyaXR5Lm8gXFxcbiAgMTI6XHRcdGNtc2VydmljZS5vIFxcXG4gIDEzOlx0XHRkaXIubyBcXFxuICAxNDpcdFx0ZGlyX2VkaXQubyBcXFxuICAxNTpcdFx0ZGlyX3NlYXJjaC5vIFxcXG4gIDE2Olx0XHRkaXJfc2lsbHkubyBcXFxuICAxNzpcdFx0ZHlucm9vdC5vIFxcXG4gIDE4Olx0XHRmaWxlLm8gXFxcbiAgMTk6XHRcdGZsb2NrLm8gXFxcbiAgMjA6XHRcdGZzY2xpZW50Lm8gXFxcbiAgMjE6XHRcdGZzX29wZXJhdGlvbi5vIFxcXG4gIDIyOlx0XHRmc19wcm9iZS5vIFxcXG4gIDIzOlx0XHRpbm9kZS5vIFxcXG4gIDI0Olx0XHRtYWluLm8gXFxcbiAgMjU6XHRcdG1pc2MubyBcXFxuICAyNjpcdFx0bW50cHQubyBcXFxuICAyNzpcdFx0cm90YXRlLm8gXFxcbiAgMjg6XHRcdHJ4cnBjLm8gXFxcbiAgMjk6XHRcdHNlY3VyaXR5Lm8gXFxcbiAgMzA6XHRcdHNlcnZlci5vIFxcXG4gIDMxOlx0XHRzZXJ2ZXJfbGlzdC5vIFxcXG4gIDMyOlx0XHRzdXBlci5vIFxcXG4gIDMzOlx0XHRzeW1saW5rLm8gXFxcbiAgMzQ6XHRcdHZhbGlkYXRpb24ubyBcXFxuICAzNTpcdFx0dmxjbGllbnQubyBcXFxuICAzNjpcdFx0dmxfYWxpYXMubyBcXFxuICAzNzpcdFx0dmxfbGlzdC5vIFxcXG4gIDM4Olx0XHR2bF9wcm9iZS5vIFxcXG4gIDM5Olx0XHR2bF9yb3RhdGUubyBcXFxuICA0MDpcdFx0dm9sdW1lLm8gXFxcbiAgNDE6XHRcdHdyaXRlLm8gXFxcbiAgNDI6XHRcdHhhdHRyLm8gXFxcbiAgNDM6XHRcdHlmc2NsaWVudC5vXG4gIDQ0Olx0XG4gIDQ1Olx0a2Fmcy0kKENPTkZJR19QUk9DX0ZTKSAmIzQzOz0gcHJvYy5vXG4gIDQ2Olx0b2JqLSQoQ09ORklHX0FGU19GUykgIDo9IGthZnMub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMiAwOToyODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMjE5NQoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDIyNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBRlMgRmlsZXN5c3RlbSBNb2R1bGUgQW5hbHlzaXMqKgoKT2theSwgc28gaXQgbG9va3MgbGlrZSBgQ09ORklHX0FGU19GU2AgaXMgdGhlIG9ubHkgY29uZmlndXJhdGlvbiBvcHRpb24gSSByZWFsbHkgbmVlZCB0byBlbmFibGUgdG8gZ2V0IHN0YXJ0ZWQuIE5vdywgbGV0JiMzOTtzIHRha2UgYSBsb29rIGF0IHRoZSBrZXkgc3ltYm9scyByZWxhdGVkIHRvIHRoZSBBRlMgZmlsZXN5c3RlbSB0aGF0IGFyZSBpbnRlcmVzdGluZyBmb3IgYW5hbHlzaXMsIGFzIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgaG93IHRvIHRlc3QgaXQuIEkgd2FudCB0byBzZWUgaG93IHRoZXNlIGZ1bmN0aW9ucyBtaWdodCBiZSB0YXJnZXRlZC4KClJpZ2h0LCB0aGUgZm9jdXMgaXMgb24gdGhlc2Ugc3ltYm9sczogYGFmc19kaXJfaXRlcmF0ZV9ibG9ja2AsIGBhZnNfbG9va3VwX29uZV9maWxsZGlyYCwgYGFmc19sb29rdXBfZmlsbGRpcmAsIGBhZnNfZXh0cmFjdF92bF9hZGRyc2AsIGBhZnNfZXh0cmFjdF92bHNlcnZlcl9saXN0YCwgYGFmc19pbm9kZV9pbml0X2Zyb21fc3RhdHVzYCwgYGFmc19sb29rdXBfY2VsbGAsIGBhZnNfZGVsaXZlcl9jYl9pbml0X2NhbGxfYmFja19zdGF0ZTNgLCBhbmQgYGFmc19kZWxpdmVyX2NiX3Byb2JlX3V1aWRgLgoKQWhhLCBob2xkIG9uLiBJJiMzOTt2ZSBnb3QgYSBzbGlnaHQgY29uY2Vybi4gQm90aCBgYWZzX2xvb2t1cF9vbmVfZmlsbGRpcmAgYW5kIGBhZnNfbG9va3VwX2ZpbGxkaXJgIGFyZSBkZWZpbmVkIGFzIHN0YXRpYyBmdW5jdGlvbnMsIHdoaWNoIG1lYW5zIHRoZXkgYXJlIGxpa2VseSBvbmx5IHVzZWQgd2l0aGluIHRoZWlyIGNvbXBpbGF0aW9uIHVuaXQgYW5kIG5vdCBnbG9iYWxseSBleHBvcnRlZC4gU3l6a2FsbGVyLCBpbiB0aGF0IGNhc2UsIG1pZ2h0IGhhdmUgdHJvdWJsZSB0YXJnZXRpbmcgdGhlbSBkaXJlY3RseSB1bmxlc3MgdGhleSBhcmUgc29tZWhvdyByZWFjaGVkIHRocm91Z2ggYW4gZXhwb3J0ZWQgc3ltYm9sLiBJIHRoaW5rIHRoYXQgaXMgYW4gaXNzdWUgd2l0aCBjb3ZlcmFnZS4gSSBkbyB0aGluaywgaG93ZXZlciwgdGhhdCBgc3l6a2FsbGVyYCAqY2FuKiB0YXJnZXQgdGhlbSB2aWEgYGFmc19kaXJfaXRlcmF0ZV9ibG9ja2AsIHdoaWNoIGlzIHNvbWV0aGluZyB0byBrZWVwIGluIG1pbmQsIGV2ZW4gaWYgZGlyZWN0IGludm9jYXRpb24gaXNuJiMzOTt0IHBvc3NpYmxlLCB0aGUgY292ZXJhZ2UgYW5hbHlzaXMgY2FuIHN0aWxsIHRyYWNrIHRoZW0uCgpPa2F5LCBJJiMzOTtsbCBzd2l0Y2ggZ2VhcnMgZm9yIGEgbW9tZW50IGFuZCBjaGVjayBgYWZzX2xvb2t1cF92b2x1bWVfcmN1YCBpbiBgZnMvYWZzL2NhbGxiYWNrLmNgLiBJIG5lZWQgdG8gcmV2aWV3IHNvbWUgYXNwZWN0cyBvZiB0aGUgY2FsbGJhY2sgbWVjaGFuaXNtLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMiAwOToyOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDthZnNfbG9va3VwX3ZvbHVtZV9yY3UmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9hZnMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2Fmcy9jYWxsYmFjay5jPTEwMT12b2lkIGFmc19icmVha19jYWxsYmFjayhzdHJ1Y3QgYWZzX3Zub2RlICp2bm9kZSwgZW51bSBhZnNfY2JfYnJlYWtfcmVhc29uIHJlYXNvbilcbi0tXG5mcy9hZnMvY2FsbGJhY2suYy0xMTAtICovXG5mcy9hZnMvY2FsbGJhY2suYzoxMTE6c3RhdGljIHN0cnVjdCBhZnNfdm9sdW1lICphZnNfbG9va3VwX3ZvbHVtZV9yY3Uoc3RydWN0IGFmc19jZWxsICpjZWxsLFxuZnMvYWZzL2NhbGxiYWNrLmMtMTEyLVx0XHRcdFx0XHRcdGFmc192b2xpZF90IHZpZClcbi0tXG5mcy9hZnMvY2FsbGJhY2suYz0yMDY9c3RhdGljIHZvaWQgYWZzX2JyZWFrX3NvbWVfY2FsbGJhY2tzKHN0cnVjdCBhZnNfc2VydmVyICpzZXJ2ZXIsXG4tLVxuZnMvYWZzL2NhbGxiYWNrLmMtMjE1LVx0cmN1X3JlYWRfbG9jaygpO1xuZnMvYWZzL2NhbGxiYWNrLmM6MjE2Olx0dm9sdW1lID0gYWZzX2xvb2t1cF92b2x1bWVfcmN1KHNlcnZlci1cdTAwM2VjZWxsLCB2aWQpO1xuZnMvYWZzL2NhbGxiYWNrLmMtMjE3LVx0aWYgKCF2b2x1bWUpIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjIgMDk6Mjk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjMwNjIKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAyNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgaW1tZWRpYXRlIHRob3VnaHQgcHJvY2VzczoKCioqSW50ZXJuYWwgQ29kZSBBdWRpdCAtIEFuYWx5emluZyBBRlMgTG9va3VwICZhbXA7IENhbGxiYWNrcyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBgYWZzX2xvb2t1cF92b2x1bWVfcmN1YCBmdW5jdGlvbiwgYW5kIGl0JiMzOTtzIGZsYWdnZWQgYXMgYHN0YXRpY2AuIFJpZ2h0IGF3YXksIHRoYXQgdGVsbHMgbWUgaXQmIzM5O3MgbGlrZWx5IGludGVybmFsIHRvIGEgc3BlY2lmaWMgZmlsZSBvciBtb2R1bGUgd2l0aGluIHRoZSBBRlMgY29kZWJhc2UuIFRoYXQgbWVhbnMgaXRzIHNjb3BlIGlzIGxpbWl0ZWQsIHdoaWNoIHNpbXBsaWZpZXMgdW5kZXJzdGFuZGluZyBpdHMgcHVycG9zZSwgYXQgbGVhc3QgaW5pdGlhbGx5LiBNeSBpbW1lZGlhdGUgbmV4dCBzdGVwIGlzIHRvIHNlZSB3aGVyZSBpdOKAmXMgYmVpbmcgY2FsbGVkIGFuZCB3aGF0IGRhdGEgaXQmIzM5O3Mgb3BlcmF0aW5nIG9uIHdpdGhpbiB0aGF0IGNvbnRleHQuCgpOb3csIGxldCYjMzk7cyBwaXZvdCB0byBpbnZlc3RpZ2F0aW5nIHdoYXQgYGFmc19icmVha19zb21lX2NhbGxiYWNrc2AgaXMgYWxsIGFib3V0LiAmIzM0O0JyZWFrIGNhbGxiYWNrcyYjMzQ7IHNvdW5kcyBsaWtlIGl0IG1pZ2h0IGJlIGRlc2lnbmVkIGZvciBzb21lIGtpbmQgb2YgZGVidWdnaW5nLCB0ZXN0aW5nLCBvciBtYXliZSBlcnJvciBoYW5kbGluZyBzY2VuYXJpby4gQ291bGQgYmUgcmVsYXRlZCB0byB2b2x1bWUgbWFuYWdlbWVudCBvciBwb3RlbnRpYWxseSBjbGllbnQgaW50ZXJhY3Rpb25zIHdpdGggdGhlIEFGUyBzZXJ2ZXIuIEkmIzM5O2xsIG5lZWQgdG8gZGlnIGludG8gaXRzIGRlZmluaXRpb24gYW5kIHVzYWdlcyB0byBkZXRlcm1pbmUgaXRzIGZ1bmN0aW9uLCBzaW5jZSAmIzM0O2JyZWFraW5nIGNhbGxiYWNrcyYjMzQ7IGNvdWxkIGNvdmVyIGEgcmFuZ2Ugb2Ygc2NlbmFyaW9zIGZyb20gc2ltcGxlIGluc3RydW1lbnRhdGlvbiB0byBmdWxsLW9uIGZhdWx0IGluamVjdGlvbi4gSXQgY291bGQgYWxzbyBiZSBhIG1ldGhvZCB0byBzYWZlbHkgcmVtb3ZlIGNhbGxiYWNrcyBmcm9tIG9wZXJhdGlvbi4gTXkgZ29hbCBpcyB0byBnZXQgYSBjbGVhcmVyIHBpY3R1cmUgb2YgaG93IHRoZXNlIHR3byBpbnRlcmFjdCwgaWYgYXQgYWxsLiBJcyBvbmUgZnVuY3Rpb24gdXNlZCB0byBicmVhayB0aGUgY2FsbGJhY2tzIGludm9rZWQgYnkgdGhlIG90aGVyPyBUaW1lIHRvIGRpdmUgZGVlcGVyIGFuZCBzZWUgd2hhdCB0aGUgY29kZSByZXZlYWxzIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMiAwOToyOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDthZnNfYnJlYWtfc29tZV9jYWxsYmFja3MmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9hZnMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2Fmcy9jYWxsYmFjay5jPTE4MT1zdGF0aWMgdm9pZCBhZnNfYnJlYWtfb25lX2NhbGxiYWNrKHN0cnVjdCBhZnNfc2VydmVyICpzZXJ2ZXIsXG4tLVxuZnMvYWZzL2NhbGxiYWNrLmMtMjA1LVxuZnMvYWZzL2NhbGxiYWNrLmM6MjA2OnN0YXRpYyB2b2lkIGFmc19icmVha19zb21lX2NhbGxiYWNrcyhzdHJ1Y3QgYWZzX3NlcnZlciAqc2VydmVyLFxuZnMvYWZzL2NhbGxiYWNrLmMtMjA3LVx0XHRcdFx0ICAgICBzdHJ1Y3QgYWZzX2NhbGxiYWNrX2JyZWFrICpjYmIsXG4tLVxuZnMvYWZzL2NhbGxiYWNrLmM9MjUzPXZvaWQgYWZzX2JyZWFrX2NhbGxiYWNrcyhzdHJ1Y3QgYWZzX3NlcnZlciAqc2VydmVyLCBzaXplX3QgY291bnQsXG4tLVxuZnMvYWZzL2NhbGxiYWNrLmMtMjYwLVx0d2hpbGUgKGNvdW50IFx1MDAzZSAwKVxuZnMvYWZzL2NhbGxiYWNrLmM6MjYxOlx0XHRhZnNfYnJlYWtfc29tZV9jYWxsYmFja3Moc2VydmVyLCBjYWxsYmFja3MsIFx1MDAyNmNvdW50KTtcbmZzL2Fmcy9jYWxsYmFjay5jLTI2Mi19XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIyIDA5OjI5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIzNjE1CgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogMTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqR2xvYmFsIFNjb3BlIENvbnNpZGVyYXRpb25zKioKCk9rYXksIHNvIGBhZnNfYnJlYWtfY2FsbGJhY2tzYC4uLiB0aGF0JiMzOTtzIGEgZ2xvYmFsLCByaWdodD8gVGhhdCBpbW1lZGlhdGVseSBzZXRzIG9mZiBzb21lIGFsYXJtcywgZG9lc24mIzM5O3QgaXQ/IEFzIHNvbWVvbmUgZGVlcCBpbiB0aGlzIGNvZGViYXNlLCB0aGUgaW1wbGljYXRpb25zIGFyZSBwcmV0dHkgY2xlYXIuIEdsb2JhbCB2YXJpYWJsZXMgaW4gYSBzeXN0ZW0gbGlrZSB0aGlzLCBlc3BlY2lhbGx5IHNvbWV0aGluZyB0aGF0IHNlZW1zIHNvIGNlbnRyYWwgdG8gY2FsbGJhY2sgaGFuZGxpbmcsIG9mdGVuIGxlYWQgdG8gaGVhZGFjaGVzIGRvd24gdGhlIHJvYWQuIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgcG90ZW50aWFsIHRocmVhZCBzYWZldHkgaXNzdWVzLCB1bmludGVuZGVkIHNpZGUgZWZmZWN0cyBmcm9tIGRpc3RhbnQgcGFydHMgb2YgdGhlIGNvZGUgYmFzZSBtb2RpZnlpbmcgaXRzIHN0YXRlLCBhbmQgaW5jcmVhc2VkIGRpZmZpY3VsdHkgaW4gdW5pdCB0ZXN0aW5nLiBJdCBtYWtlcyB0aGUgYmVoYXZpb3Igb2YgdGhlIHN5c3RlbSBtdWNoIGhhcmRlciB0byByZWFzb24gYWJvdXQgbG9jYWxseS4gV2UgcmVhbGx5IG5lZWQgdG8gY2FyZWZ1bGx5IGNvbnNpZGVyIGhvdyB0aGlzIGdsb2JhbCBpcyBhY2Nlc3NlZCBhbmQgbW9kaWZpZWQsIHdoYXQgcHJvdGVjdGlvbnMgd2UgaGF2ZSwgYW5kIHdoZXRoZXIgYSByZWZhY3RvciB0byByZWR1Y2UgaXRzIHNjb3BlIGlzIGV2ZW4gZmVhc2libGUuIFBlcmhhcHMgdGhlcmUgaXMgYW4gZWFzeSB3YXkgdG8gbW92ZSB0aGUgY2FsbGJhY2tzIGludG8gdGhlIGNvbnRleHQgb2YgdGhlIGFmcyBpbnN0YW5jZSwgb3IgdXRpbGl6ZSBzb21lIG90aGVyIHRlY2huaXF1ZSBmb3IgcmVkdWNpbmcgdGhlIGdsb2JhbCBzY29wZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Mi8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjIgMDk6Mjk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YWZzX2JyZWFrX2NhbGxiYWNrcyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL2Fmcy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvYWZzL2NhbGxiYWNrLmM9MjA2PXN0YXRpYyB2b2lkIGFmc19icmVha19zb21lX2NhbGxiYWNrcyhzdHJ1Y3QgYWZzX3NlcnZlciAqc2VydmVyLFxuLS1cbmZzL2Fmcy9jYWxsYmFjay5jLTI1Mi0gKi9cbmZzL2Fmcy9jYWxsYmFjay5jOjI1Mzp2b2lkIGFmc19icmVha19jYWxsYmFja3Moc3RydWN0IGFmc19zZXJ2ZXIgKnNlcnZlciwgc2l6ZV90IGNvdW50LFxuZnMvYWZzL2NhbGxiYWNrLmMtMjU0LVx0XHRcdCBzdHJ1Y3QgYWZzX2NhbGxiYWNrX2JyZWFrICpjYWxsYmFja3MpXG4tLVxuZnMvYWZzL2Ntc2VydmljZS5jPTE2ND1zdGF0aWMgdm9pZCBTUlhBRlNDQl9DYWxsQmFjayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4tLVxuZnMvYWZzL2Ntc2VydmljZS5jLTE3OC1cdFx0XHRcdCBhZnNfc2VydmVyX3RyYWNlX2NhbGxiYWNrKTtcbmZzL2Fmcy9jbXNlcnZpY2UuYzoxNzk6XHRcdGFmc19icmVha19jYWxsYmFja3MoY2FsbC1cdTAwM2VzZXJ2ZXIsIGNhbGwtXHUwMDNlY291bnQsIGNhbGwtXHUwMDNlcmVxdWVzdCk7XG5mcy9hZnMvY21zZXJ2aWNlLmMtMTgwLVx0fVxuLS1cbmZzL2Fmcy9pbnRlcm5hbC5oPTEwNDA9ZXh0ZXJuIHZvaWQgYWZzX2JyZWFrX2NhbGxiYWNrKHN0cnVjdCBhZnNfdm5vZGUgKiwgZW51bSBhZnNfY2JfYnJlYWtfcmVhc29uKTtcbmZzL2Fmcy9pbnRlcm5hbC5oOjEwNDE6ZXh0ZXJuIHZvaWQgYWZzX2JyZWFrX2NhbGxiYWNrcyhzdHJ1Y3QgYWZzX3NlcnZlciAqLCBzaXplX3QsIHN0cnVjdCBhZnNfY2FsbGJhY2tfYnJlYWsgKik7XG5mcy9hZnMvaW50ZXJuYWwuaC0xMDQyLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMiAwOToyOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNDE3NwoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDMwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6CgoqKkZvY3VzaW5nIG9uIEFGUyBTeW1ib2wgTWFuYWdlbWVudCoqCgpPa2F5LCBzbyBJJiMzOTttIHRoaW5raW5nLCB3ZSBuZWVkIHRvIGJyaW5nIGluIGBhZnNfYnJlYWtfY2FsbGJhY2tzYCBhcyBhIGZvY3VzIHN5bWJvbC4gSXQmIzM5O3MgYSBrZXkgcGllY2UgaW4gdGhpcyB3aG9sZSBBRlMgcHV6emxlLCBhbmQgaXQgZmVlbHMgbGlrZSBpdCYjMzk7cyBiZWVuIGdldHRpbmcgb3Zlcmxvb2tlZCBpbiB0aGUgc3ltYm9sIG1hbmFnZW1lbnQgcHJvY2Vzcy4gSXQmIzM5O3MgY3JpdGljYWwgdG8gZW5zdXJlIHdlJiMzOTtyZSBhY2NvdW50aW5nIGZvciBob3cgdGhpcyBhc3BlY3Qgd29ya3MuCgpXaGlsZSBJJiMzOTttIGF0IGl0LCBJIHNob3VsZCBwcm9iYWJseSBkb3VibGUtY2hlY2sgYGFmc19keW5yb290X3JlYWRkaXJfY2VsbHNgIGFzIHdlbGwuIEp1c3QgYSBxdWljayBzYW5pdHkgY2hlY2sgdG8gc2VlIGlmIGl0IG1ha2VzIHNlbnNlIGluIHRoaXMgY29udGV4dC4gSXQmIzM5O3MgYmV0dGVyIHRvIGJlIHNhZmUgdGhhbiBzb3JyeSwgZXNwZWNpYWxseSB3aXRoIHNvbWV0aGluZyB0aGlzIGZ1bmRhbWVudGFsLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMiAwOToyOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDthZnNfZHlucm9vdF9yZWFkZGlyX2NlbGxzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvYWZzLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9hZnMvZHlucm9vdC5jPTI0OT1zdGF0aWMgc3RydWN0IGRlbnRyeSAqYWZzX2xvb2t1cF9hdGNlbGwoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgaW5vX3QgaW5vKVxuLS1cbmZzL2Fmcy9keW5yb290LmMtMjgzLSAqL1xuZnMvYWZzL2R5bnJvb3QuYzoyODQ6c3RhdGljIGludCBhZnNfZHlucm9vdF9yZWFkZGlyX2NlbGxzKHN0cnVjdCBhZnNfbmV0ICpuZXQsIHN0cnVjdCBkaXJfY29udGV4dCAqY3R4KVxuZnMvYWZzL2R5bnJvb3QuYy0yODUte1xuLS1cbmZzL2Fmcy9keW5yb290LmM9MzMwPXN0YXRpYyBpbnQgYWZzX2R5bnJvb3RfcmVhZGRpcihzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IGRpcl9jb250ZXh0ICpjdHgpXG4tLVxuZnMvYWZzL2R5bnJvb3QuYy0zNTItXHRcdGRvd25fcmVhZChcdTAwMjZuZXQtXHUwMDNlY2VsbHNfbG9jayk7XG5mcy9hZnMvZHlucm9vdC5jOjM1MzpcdFx0cmV0ID0gYWZzX2R5bnJvb3RfcmVhZGRpcl9jZWxscyhuZXQsIGN0eCk7XG5mcy9hZnMvZHlucm9vdC5jLTM1NC1cdFx0dXBfcmVhZChcdTAwMjZuZXQtXHUwMDNlY2VsbHNfbG9jayk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIyIDA5OjI5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI0NjM2CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHRzLCBwcmVzZW50ZWQgYXMgdGhvdWdoIHRoZXkgd2VyZSBteSBvd246CgoqKkdsb2JhbCBTY29wZSBDb25zaWRlcmF0aW9ucyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYGFmc19keW5yb290X3JlYWRkaXJgLCBhbmQgaW1tZWRpYXRlbHkgSSYjMzk7bSBoaXQgd2l0aCB0aGUgZmFjdCB0aGF0IGl0JiMzOTtzIGdsb2JhbGx5IGFjY2Vzc2libGUuIFRoYXQmIzM5O3MgYSBrZXkgb2JzZXJ2YXRpb24sIGFuZCBpdCByYWlzZXMgYSBsb3Qgb2YgcXVlc3Rpb25zIHJpZ2h0IG9mZiB0aGUgYmF0LiBLbm93aW5nIHRoZSBzY29wZSBsaWtlIHRoYXQgaXMgaW1wb3J0YW50LiBJdCYjMzk7cyBhIGZ1bmRhbWVudGFsIHBpZWNlIG9mIGluZm9ybWF0aW9uIHRoYXQgaGVscHMgbWUgdW5kZXJzdGFuZCBob3cgdGhpcyBmdW5jdGlvbiBpbnRlcmFjdHMgd2l0aCB0aGUgcmVzdCBvZiB0aGUgc3lzdGVtLiBJIG5lZWQgdG8ga2VlcCB0aGF0IGluIG1pbmQgYXMgSSBkZWx2ZSBkZWVwZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIyIDA5OjI5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2Fmc19keW5yb290X3JlYWRkaXImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9hZnMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2Fmcy9keW5yb290LmM9MjQ5PXN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICphZnNfbG9va3VwX2F0Y2VsbChzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBpbm9fdCBpbm8pXG4tLVxuZnMvYWZzL2R5bnJvb3QuYy0yODMtICovXG5mcy9hZnMvZHlucm9vdC5jOjI4NDpzdGF0aWMgaW50IGFmc19keW5yb290X3JlYWRkaXJfY2VsbHMoc3RydWN0IGFmc19uZXQgKm5ldCwgc3RydWN0IGRpcl9jb250ZXh0ICpjdHgpXG5mcy9hZnMvZHlucm9vdC5jLTI4NS17XG4tLVxuZnMvYWZzL2R5bnJvb3QuYy0zMjktICovXG5mcy9hZnMvZHlucm9vdC5jOjMzMDpzdGF0aWMgaW50IGFmc19keW5yb290X3JlYWRkaXIoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBkaXJfY29udGV4dCAqY3R4KVxuZnMvYWZzL2R5bnJvb3QuYy0zMzEte1xuLS1cbmZzL2Fmcy9keW5yb290LmMtMzUyLVx0XHRkb3duX3JlYWQoXHUwMDI2bmV0LVx1MDAzZWNlbGxzX2xvY2spO1xuZnMvYWZzL2R5bnJvb3QuYzozNTM6XHRcdHJldCA9IGFmc19keW5yb290X3JlYWRkaXJfY2VsbHMobmV0LCBjdHgpO1xuZnMvYWZzL2R5bnJvb3QuYy0zNTQtXHRcdHVwX3JlYWQoXHUwMDI2bmV0LVx1MDAzZWNlbGxzX2xvY2spO1xuLS1cbmZzL2Fmcy9keW5yb290LmM9MzU5PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGFmc19keW5yb290X2ZpbGVfb3BlcmF0aW9ucyA9IHtcbi0tXG5mcy9hZnMvZHlucm9vdC5jLTM2MS1cdC5yZWFkXHRcdD0gZ2VuZXJpY19yZWFkX2RpcixcbmZzL2Fmcy9keW5yb290LmM6MzYyOlx0Lml0ZXJhdGVfc2hhcmVkXHQ9IGFmc19keW5yb290X3JlYWRkaXIsXG5mcy9hZnMvZHlucm9vdC5jLTM2My1cdC5mc3luY1x0XHQ9IG5vb3BfZnN5bmMsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIyIDA5OjI5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI1MTg4CgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogMjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIHlvdSByZXF1ZXN0ZWQ6CgoqKkRlYnVnZ2luZyBhbiBBRlMgRmlsZSBTeXN0ZW0gVnVsbmVyYWJpbGl0eSoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBjb25maXJtZWQgdGhhdCBgYWZzX2R5bnJvb3RfcmVhZGRpcmAgaXMgcmVhY2hhYmxlLiBUaGF0JiMzOTtzIGEgZ29vZCBzdGFydGluZyBwb2ludC4gTm93LCBnaXZlbiB0aGF0IGluaXRpYWwgYWNjZXNzIHZlY3RvciwgdGhlIGxvZ2ljYWwgbmV4dCBzdGVwIGluIG15IGFuYWx5c2lzIGlzIHRvIGludmVzdGlnYXRlIGBhZnNfcHV0X29wZXJhdGlvbmAuIEkgd2FudCB0byBzZWUgaG93IHRoYXQgZnVuY3Rpb24gaW50ZXJhY3RzIHdpdGggdGhlIHJlYWQgb3BlcmF0aW9uLCBwYXJ0aWN1bGFybHkgaW4gYSBkeW5hbWljIHJvb3QgY29udGV4dC4gTXkgaHlwb3RoZXNpcyBpcyB0aGF0IHRoZXJlIG1pZ2h0IGJlIGEgZmxhdyBpbiB0aGUgaW50ZXJhY3Rpb24gdGhhdCBJIGNhbiBleHBsb2l0LiBJJiMzOTtsbCBmb2N1cyBvbiBob3cgYGFmc19wdXRfb3BlcmF0aW9uYCBoYW5kbGVzIHBlcm1pc3Npb25zLCBkYXRhIHZhbGlkYXRpb24sIGFuZCBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIGluIHRoaXMgY29udGV4dC4gSSYjMzk7bSBsb29raW5nIGZvciBhIHdheSB0byB1c2UgdGhhdCBpbnRlcmFjdGlvbiwgb3IgbGFjayBvZiBwcm9wZXIgcHJvdGVjdGlvbnMsIHRvIGVsZXZhdGUgcHJpdmlsZWdlcyBvciBvdGhlcndpc2UgY2F1c2UgdW5pbnRlbmRlZCBiZWhhdmlvdXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIyIDA5OjI5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2Fmc19wdXRfb3BlcmF0aW9uJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvYWZzLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9hZnMvZGlyLmM9NzcxPXN0YXRpYyBzdHJ1Y3QgaW5vZGUgKmFmc19kb19sb29rdXAoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSlcbi0tXG5mcy9hZnMvZGlyLmMtODk3LVx0XHRkZW50cnktXHUwMDNlZF9mc2RhdGEgPSAodm9pZCAqKSh1bnNpZ25lZCBsb25nKW9wLVx1MDAzZWZpbGVbMF0uZHZfYmVmb3JlO1xuZnMvYWZzL2Rpci5jOjg5ODpcdHJldCA9IGFmc19wdXRfb3BlcmF0aW9uKG9wKTtcbmZzL2Fmcy9kaXIuYy04OTktb3V0OlxuLS1cbmZzL2Fmcy9kaXIuYz0xNDA2PXN0YXRpYyBpbnQgYWZzX3JtZGlyKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpXG4tLVxuZnMvYWZzL2Rpci5jLTE0NTMtZXJyb3I6XG5mcy9hZnMvZGlyLmM6MTQ1NDpcdHJldCA9IGFmc19wdXRfb3BlcmF0aW9uKG9wKTtcbmZzL2Fmcy9kaXIuYy0xNDU1LVx0Z290byBvdXQ7XG4tLVxuZnMvYWZzL2Rpci5jPTE1NTI9c3RhdGljIGludCBhZnNfdW5saW5rKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpXG4tLVxuZnMvYWZzL2Rpci5jLTE2MTctZXJyb3I6XG5mcy9hZnMvZGlyLmM6MTYxODpcdHJldCA9IGFmc19wdXRfb3BlcmF0aW9uKG9wKTtcbmZzL2Fmcy9kaXIuYy0xNjE5LVx0YWZzX2Rpcl91bnVzZV9jb29raWUoZHZub2RlLCByZXQpO1xuLS1cbmZzL2Fmcy9kaXIuYz0xNzExPXN0YXRpYyBpbnQgYWZzX2xpbmsoc3RydWN0IGRlbnRyeSAqZnJvbSwgc3RydWN0IGlub2RlICpkaXIsXG4tLVxuZnMvYWZzL2Rpci5jLTE3NTQtZXJyb3Jfb3A6XG5mcy9hZnMvZGlyLmM6MTc1NTpcdGFmc19wdXRfb3BlcmF0aW9uKG9wKTtcbmZzL2Fmcy9kaXIuYy0xNzU2LVx0YWZzX2Rpcl91bnVzZV9jb29raWUoZHZub2RlLCByZXQpO1xuLS1cbmZzL2Fmcy9kaXIuYz0yMDcwPXN0YXRpYyBpbnQgYWZzX3JlbmFtZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpvbGRfZGlyLFxuLS1cbmZzL2Fmcy9kaXIuYy0yMjAzLWVycm9yOlxuZnMvYWZzL2Rpci5jOjIyMDQ6XHRyZXQgPSBhZnNfcHV0X29wZXJhdGlvbihvcCk7XG5mcy9hZnMvZGlyLmMtMjIwNS1cdGdvdG8gb3V0O1xuLS1cbmZzL2Fmcy9kaXJfc2lsbHkuYz02MD1zdGF0aWMgaW50IGFmc19kb19zaWxseV9yZW5hbWUoc3RydWN0IGFmc192bm9kZSAqZHZub2RlLCBzdHJ1Y3QgYWZzX3Zub2RlICp2bm9kZSxcbi0tXG5mcy9hZnMvZGlyX3NpbGx5LmMtNzMtXHRpZiAoIW9wLVx1MDAzZW1vcmVfZmlsZXMpIHtcbmZzL2Fmcy9kaXJfc2lsbHkuYzo3NDpcdFx0YWZzX3B1dF9vcGVyYXRpb24ob3ApO1xuZnMvYWZzL2Rpcl9zaWxseS5jLTc1LVx0XHRyZXR1cm4gLUVOT01FTTtcbi0tXG5mcy9hZnMvZGlyX3NpbGx5LmM9MjAxPXN0YXRpYyBpbnQgYWZzX2RvX3NpbGx5X3VubGluayhzdHJ1Y3QgYWZzX3Zub2RlICpkdm5vZGUsIHN0cnVjdCBhZnNfdm5vZGUgKnZub2RlLFxuLS1cbmZzL2Fmcy9kaXJfc2lsbHkuYy0yMzctXG5mcy9hZnMvZGlyX3NpbGx5LmM6MjM4Olx0cmV0dXJuIGFmc19wdXRfb3BlcmF0aW9uKG9wKTtcbmZzL2Fmcy9kaXJfc2lsbHkuYy0yMzktfVxuLS1cbmZzL2Fmcy9maWxlLmM9MjUwPXN0YXRpYyB2b2lkIGFmc19lbmRfcmVhZChzdHJ1Y3QgYWZzX29wZXJhdGlvbiAqb3ApXG4tLVxuZnMvYWZzL2ZpbGUuYy0yNjItXHRhZnNfZW5kX3Zub2RlX29wZXJhdGlvbihvcCk7XG5mcy9hZnMvZmlsZS5jOjI2MzpcdGFmc19wdXRfb3BlcmF0aW9uKG9wKTtcbmZzL2Fmcy9maWxlLmMtMjY0LX1cbi0tXG5mcy9hZnMvZmlsZS5jPTMzNT1zdGF0aWMgdm9pZCBhZnNfaXNzdWVfcmVhZChzdHJ1Y3QgbmV0ZnNfaW9fc3VicmVxdWVzdCAqc3VicmVxKVxuLS1cbmZzL2Fmcy9maWxlLmMtMzY2LVx0XHRpZiAoIWFmc19iZWdpbl92bm9kZV9vcGVyYXRpb24ob3ApKSB7XG5mcy9hZnMvZmlsZS5jOjM2NzpcdFx0XHRzdWJyZXEtXHUwMDNlZXJyb3IgPSBhZnNfcHV0X29wZXJhdGlvbihvcCk7XG5mcy9hZnMvZmlsZS5jLTM2OC1cdFx0XHRuZXRmc19yZWFkX3N1YnJlcV90ZXJtaW5hdGVkKHN1YnJlcSk7XG4tLVxuZnMvYWZzL2ZzX29wZXJhdGlvbi5jPTI3OD12b2lkIGFmc193YWl0X2Zvcl9vcGVyYXRpb24oc3RydWN0IGFmc19vcGVyYXRpb24gKm9wKVxuLS1cbmZzL2Fmcy9mc19vcGVyYXRpb24uYy0zMjgtICovXG5mcy9hZnMvZnNfb3BlcmF0aW9uLmM6MzI5OmludCBhZnNfcHV0X29wZXJhdGlvbihzdHJ1Y3QgYWZzX29wZXJhdGlvbiAqb3ApXG5mcy9hZnMvZnNfb3BlcmF0aW9uLmMtMzMwLXtcbi0tXG5mcy9hZnMvZnNfb3BlcmF0aW9uLmM9MzcyPWludCBhZnNfZG9fc3luY19vcGVyYXRpb24oc3RydWN0IGFmc19vcGVyYXRpb24gKm9wKVxuLS1cbmZzL2Fmcy9mc19vcGVyYXRpb24uYy0zNzUtXHRhZnNfd2FpdF9mb3Jfb3BlcmF0aW9uKG9wKTtcbmZzL2Fmcy9mc19vcGVyYXRpb24uYzozNzY6XHRyZXR1cm4gYWZzX3B1dF9vcGVyYXRpb24ob3ApO1xuZnMvYWZzL2ZzX29wZXJhdGlvbi5jLTM3Ny19XG4tLVxuZnMvYWZzL2lub2RlLmM9MzcyPWludCBhZnNfZmV0Y2hfc3RhdHVzKHN0cnVjdCBhZnNfdm5vZGUgKnZub2RlLCBzdHJ1Y3Qga2V5ICprZXksIGJvb2wgaXNfbmV3LFxuLS1cbmZzL2Fmcy9pbm9kZS5jLTM5NC1cdFx0Kl9jYWxsZXJfYWNjZXNzID0gb3AtXHUwMDNlZmlsZVswXS5zY2Iuc3RhdHVzLmNhbGxlcl9hY2Nlc3M7XG5mcy9hZnMvaW5vZGUuYzozOTU6XHRyZXR1cm4gYWZzX3B1dF9vcGVyYXRpb24ob3ApO1xuZnMvYWZzL2lub2RlLmMtMzk2LX1cbi0tXG5mcy9hZnMvaW50ZXJuYWwuaD0xMjE1PWV4dGVybiBzdHJ1Y3QgYWZzX29wZXJhdGlvbiAqYWZzX2FsbG9jX29wZXJhdGlvbihzdHJ1Y3Qga2V5ICosIHN0cnVjdCBhZnNfdm9sdW1lICopO1xuZnMvYWZzL2ludGVybmFsLmg6MTIxNjpleHRlcm4gaW50IGFmc19wdXRfb3BlcmF0aW9uKHN0cnVjdCBhZnNfb3BlcmF0aW9uICopO1xuZnMvYWZzL2ludGVybmFsLmgtMTIxNy1leHRlcm4gYm9vbCBhZnNfYmVnaW5fdm5vZGVfb3BlcmF0aW9uKHN0cnVjdCBhZnNfb3BlcmF0aW9uICopO1xuLS1cbmZzL2Fmcy93cml0ZS5jPTEwMj1zdGF0aWMgdm9pZCBhZnNfaXNzdWVfd3JpdGVfd29ya2VyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbi0tXG5mcy9hZnMvd3JpdGUuYy0xNDgtXHRhZnNfd2FpdF9mb3Jfb3BlcmF0aW9uKG9wKTtcbmZzL2Fmcy93cml0ZS5jOjE0OTpcdHJldCA9IGFmc19wdXRfb3BlcmF0aW9uKG9wKTtcbmZzL2Fmcy93cml0ZS5jLTE1MC1cdHN3aXRjaCAocmV0KSB7XG4tLVxuZnMvYWZzL3hhdHRyLmM9MzY9c3RhdGljIGludCBhZnNfeGF0dHJfZ2V0X2FjbChjb25zdCBzdHJ1Y3QgeGF0dHJfaGFuZGxlciAqaGFuZGxlcixcbi0tXG5mcy9hZnMveGF0dHIuYy01Ni1cdG9wLVx1MDAzZWFjbCA9IE5VTEw7XG5mcy9hZnMveGF0dHIuYzo1NzpcdHJldCA9IGFmc19wdXRfb3BlcmF0aW9uKG9wKTtcbmZzL2Fmcy94YXR0ci5jLTU4LVxuLS1cbmZzL2Fmcy94YXR0ci5jPTk5PXN0YXRpYyBpbnQgYWZzX3hhdHRyX3NldF9hY2woY29uc3Qgc3RydWN0IHhhdHRyX2hhbmRsZXIgKmhhbmRsZXIsXG4tLVxuZnMvYWZzL3hhdHRyLmMtMTE2LVx0aWYgKCFhZnNfbWFrZV9hY2wob3AsIGJ1ZmZlciwgc2l6ZSkpXG5mcy9hZnMveGF0dHIuYzoxMTc6XHRcdHJldHVybiBhZnNfcHV0X29wZXJhdGlvbihvcCk7XG5mcy9hZnMveGF0dHIuYy0xMTgtXG4tLVxuZnMvYWZzL3hhdHRyLmM9MTM4PXN0YXRpYyBpbnQgYWZzX3hhdHRyX2dldF95ZnMoY29uc3Qgc3RydWN0IHhhdHRyX2hhbmRsZXIgKmhhbmRsZXIsXG4tLVxuZnMvYWZzL3hhdHRyLmMtMTc4LVx0YWZzX3dhaXRfZm9yX29wZXJhdGlvbihvcCk7XG5mcy9hZnMveGF0dHIuYzoxNzk6XHRyZXQgPSBhZnNfcHV0X29wZXJhdGlvbihvcCk7XG5mcy9hZnMveGF0dHIuYy0xODAtXG4tLVxuZnMvYWZzL3hhdHRyLmM9MjMwPXN0YXRpYyBpbnQgYWZzX3hhdHRyX3NldF95ZnMoY29uc3Qgc3RydWN0IHhhdHRyX2hhbmRsZXIgKmhhbmRsZXIsXG4tLVxuZnMvYWZzL3hhdHRyLmMtMjQ5LVx0aWYgKCFhZnNfbWFrZV9hY2wob3AsIGJ1ZmZlciwgc2l6ZSkpXG5mcy9hZnMveGF0dHIuYzoyNTA6XHRcdHJldHVybiBhZnNfcHV0X29wZXJhdGlvbihvcCk7XG5mcy9hZnMveGF0dHIuYy0yNTEtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIyIDA5OjI5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI3MzM0CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IGltbWVkaWF0ZSB0aG91Z2h0IHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIHRoZSBBRlMgQ29kZWJhc2UqKgoKT2theSwgc28gYGFmc19wdXRfb3BlcmF0aW9uYCBpcyBhIGdsb2JhbGx5IGFjY2Vzc2libGUgZnVuY3Rpb24g4oCTIGEgY3J1Y2lhbCBzdGFydGluZyBwb2ludCBmb3IgYW55IEFGUyBpbnZlc3RpZ2F0aW9uLiBNeSBpbW1lZGlhdGUgaW5zdGluY3QgaXMgdG8gZmlndXJlIG91dCBob3cgaXQmIzM5O3MgYmVpbmcgdXNlZCBhbmQsIGNyaXRpY2FsbHksIHdoYXQgaXQmIzM5O3MgaW50ZXJhY3Rpbmcgd2l0aC4gVG8gZ2V0IGEgYmV0dGVyIGdyYXNwIG9mIHRoZSBicm9hZGVyIGNvbnRleHQsIEkmIzM5O2xsIGdvIHN0cmFpZ2h0IHRvIGBhZnNfc2V0X25ldGZzX2NvbnRleHRgLiBJJiMzOTttIGd1ZXNzaW5nIHRoYXQgZnVuY3Rpb24gaGFuZGxlcyB0aGUgbmV0d29yayBmaWxlIHN5c3RlbSBjb250ZXh0LCBhbmQgbGlrZWx5IHBsYXlzIGEga2V5IHJvbGUgaW4gaG93IHRoZXNlIG9wZXJhdGlvbnMgZ2V0IHJvdXRlZCBhbmQgaGFuZGxlZC4gVW5kZXJzdGFuZGluZyBob3cgYGFmc19wdXRfb3BlcmF0aW9uYCBpbnRlcmFjdHMgd2l0aCB0aGUgbmV0d29yayBjb250ZXh0IHNob3VsZCBnaXZlIG1lIHNvbWUgc29saWQgbGVhZHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIyIDA5OjI5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2Fmc19zZXRfbmV0ZnNfY29udGV4dCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL2Fmcy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvYWZzL2lub2RlLmM9Mjg9c3RhdGljIG5vaW5saW5lIHZvaWQgZHVtcF92bm9kZShzdHJ1Y3QgYWZzX3Zub2RlICp2bm9kZSwgc3RydWN0IGFmc192bm9kZSAqcGFyZW50X3Zub2RlKVxuLS1cbmZzL2Fmcy9pbm9kZS5jLTU0LSAqL1xuZnMvYWZzL2lub2RlLmM6NTU6c3RhdGljIHZvaWQgYWZzX3NldF9uZXRmc19jb250ZXh0KHN0cnVjdCBhZnNfdm5vZGUgKnZub2RlLCBib29sIGlzX2ZpbGUpXG5mcy9hZnMvaW5vZGUuYy01Ni17XG4tLVxuZnMvYWZzL2lub2RlLmM9NjM9c3RhdGljIGludCBhZnNfaW5vZGVfaW5pdF9mcm9tX3N0YXR1cyhzdHJ1Y3QgYWZzX29wZXJhdGlvbiAqb3AsXG4tLVxuZnMvYWZzL2lub2RlLmMtOTctXHRpbm9kZV9zZXRfYnl0ZXMoaW5vZGUsIHN0YXR1cy1cdTAwM2VzaXplKTtcbmZzL2Fmcy9pbm9kZS5jOjk4Olx0YWZzX3NldF9uZXRmc19jb250ZXh0KHZub2RlLCBzdGF0dXMtXHUwMDNldHlwZSA9PSBBRlNfRlRZUEVfRklMRSk7XG5mcy9hZnMvaW5vZGUuYy05OS1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41MS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjIgMDk6Mjk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjc3NzQKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAyOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgdGhlIEFGUyBOZXR3b3JrIEZpbGVzeXN0ZW0gQ29udGV4dCoqCgpPa2F5LCBzbyBgYWZzX3NldF9uZXRmc19jb250ZXh0YCBpcyBzdGF0aWMsIHdoaWNoIGltbWVkaWF0ZWx5IGZsYWdzIHNvbWUgaW1wbGljYXRpb25zLiBUaGF0IG1lYW5zIGl0cyBzY29wZSBpcyBsaW1pdGVkIHdpdGhpbiB0aGUgY29tcGlsYXRpb24gdW5pdCwgcHJlc3VtYWJseSB0byBhdm9pZCBnbG9iYWwgbmFtZXNwYWNlIHBvbGx1dGlvbiBhbmQgYWxsb3cgZm9yIHBvdGVudGlhbGx5IG9wdGltaXplZCB1c2Ugd2l0aGluIHRoYXQgc3BlY2lmaWMgbW9kdWxlLiBJdCBhbHNvIHN1Z2dlc3RzIHRoYXQgdGhpcyBmdW5jdGlvbiBpc24mIzM5O3QgaW50ZW5kZWQgZm9yIGRpcmVjdCBleHRlcm5hbCB1c2Ugb3IgbW9kaWZpY2F0aW9uIGFjcm9zcyB0aGUgZW50aXJlIHN5c3RlbSDigJMgbGlrZWx5IGEgZGVsaWJlcmF0ZSBkZXNpZ24gY2hvaWNlIHJlbGF0ZWQgdG8gc2VjdXJpdHkgb3IgZGF0YSBpbnRlZ3JpdHkuCgpNeSBuZXh0IGltbWVkaWF0ZSBjb25jZXJuIGlzIGFyb3VuZCBob3cgdGhlIGNvbnRleHQgaXMgYWN0dWFsbHkgZXN0YWJsaXNoZWQgYW5kIHVzZWQsIHNvIEkmIzM5O2xsIG5lZWQgdG8gZGlnIGludG8gYGFmc19leHRyYWN0X3ZsX2FkZHJzYC4gVGhpcyBmdW5jdGlvbiBpcyBsaWtlbHkgcmVzcG9uc2libGUgZm9yIGZldGNoaW5nIHRoZSB2b2x1bWUgbG9jYXRpb24gYWRkcmVzc2VzLCB3aGljaCBpcyBmdW5kYW1lbnRhbCB0byBBRlMmIzM5O3MgYXJjaGl0ZWN0dXJlIGFuZCBvcGVyYXRpb24uIFVuZGVyc3RhbmRpbmcgaG93IHRoZXNlIGFkZHJlc3NlcyBhcmUgZXh0cmFjdGVkLCBwb3RlbnRpYWxseSBmcm9tIGEgY29uZmlndXJhdGlvbiBmaWxlLCBhIG5ldHdvcmsgZGlzY292ZXJ5IHByb2Nlc3MsIG9yIGEga2VybmVsIGludGVybmFsIHN0cnVjdHVyZSBpcyBnb2luZyB0byBiZSBrZXkuIEkmIzM5O2xsIG5lZWQgdG8gZXhhbWluZSBpdCBmb3IgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucywgc2VjdXJpdHkgdnVsbmVyYWJpbGl0aWVzIHJlbGF0ZWQgdG8gYWRkcmVzcyBzcG9vZmluZyBvciBtYW5pcHVsYXRpb24sIGFuZCBlZmZpY2llbnQgbG9va3VwIGltcGxlbWVudGF0aW9ucy4gVGhlIGNvbnRleHQgZXN0YWJsaXNoZWQgYnkgYGFmc19zZXRfbmV0ZnNfY29udGV4dGAgaXMgbGlrZWx5IGludGltYXRlbHkgdGllZCB0byB0aG9zZSBhZGRyZXNzZXMsIHNvIEkgbmVlZCB0byBlc3RhYmxpc2ggdGhlIGNvbm5lY3Rpb24gdGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIyIDA5OjI5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2Fmc19leHRyYWN0X3ZsX2FkZHJzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvYWZzLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9hZnMvdmxfbGlzdC5jPTc3PXN0YXRpYyB1MTYgYWZzX2V4dHJhY3RfbGUxNihjb25zdCB1OCAqKl9iKVxuLS1cbmZzL2Fmcy92bF9saXN0LmMtODgtICovXG5mcy9hZnMvdmxfbGlzdC5jOjg5OnN0YXRpYyBzdHJ1Y3QgYWZzX2FkZHJfbGlzdCAqYWZzX2V4dHJhY3RfdmxfYWRkcnMoc3RydWN0IGFmc19uZXQgKm5ldCxcbmZzL2Fmcy92bF9saXN0LmMtOTAtXHRcdFx0XHRcdFx0ICBjb25zdCB1OCAqKl9iLCBjb25zdCB1OCAqZW5kLFxuLS1cbmZzL2Fmcy92bF9saXN0LmM9MTYwPXN0cnVjdCBhZnNfdmxzZXJ2ZXJfbGlzdCAqYWZzX2V4dHJhY3RfdmxzZXJ2ZXJfbGlzdChzdHJ1Y3QgYWZzX2NlbGwgKmNlbGwsXG4tLVxuZnMvYWZzL3ZsX2xpc3QuYy0yNjMtXHRcdCAqL1xuZnMvYWZzL3ZsX2xpc3QuYzoyNjQ6XHRcdGFkZHJzID0gYWZzX2V4dHJhY3RfdmxfYWRkcnMoY2VsbC1cdTAwM2VuZXQsIFx1MDAyNmIsIGVuZCwgYnMubnJfYWRkcnMsIGJzLnBvcnQpO1xuZnMvYWZzL3ZsX2xpc3QuYy0yNjUtXHRcdGlmIChJU19FUlIoYWRkcnMpKSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIyIDA5OjI5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI4MzU5CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqU3RhdGljIEZ1bmN0aW9uIENoZWNrIGFuZCBWb2x1bWUgSW5zZXJ0aW9uKioKCk9rYXksIHNvIGBhZnNfZXh0cmFjdF92bF9hZGRyc2AgaXMgYSBzdGF0aWMgZnVuY3Rpb24uIFRoYXQgaW1tZWRpYXRlbHkgdHJpZ2dlcnMgYSBtZW50YWwgY2hlY2sg4oCTIHdoYXQgYXJlIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhhdCB3aXRoaW4gdGhlIGJyb2FkZXIgY29udGV4dCBvZiB0aGUgQUZTIGNvZGViYXNlPyBBcmUgdGhlcmUgYW55IHBvdGVudGlhbCB2aXNpYmlsaXR5IGxpbWl0YXRpb25zIHRoYXQgbWlnaHQgaW1wYWN0IGl0cyB1c2FiaWxpdHkgb3IgaW50cm9kdWNlIHN1YnRsZSBkZXBlbmRlbmNpZXMgSSBuZWVkIHRvIGJlIGF3YXJlIG9mLCBlc3BlY2lhbGx5IGluIHRoZSBhcmVhcyBvZiBtb2R1bGUgaW5pdGlhbGl6YXRpb24gb3IgdGhyZWFkaW5nPyBJcyBpdCBpbnRlbmRlZCB0byBiZSB0aWdodGx5IHNjb3BlZCBmb3IgYSBzcGVjaWZpYyBtb2R1bGUsIG9yIGlzIGl0cyBzdGF0aWMgbmF0dXJlIHBlcmhhcHMgYW4gb3B0aW1pemF0aW9uIHRpZWQgdG8gYSBzcGVjaWZpYyBidWlsZCBjb25maWd1cmF0aW9uPwoKTXkgbmV4dCB0aG91Z2h0IHRoZW4gZ29lcyBkaXJlY3RseSB0byBgYWZzX2luc2VydF92b2x1bWVfaW50b19jZWxsYC4gU2luY2UgYGFmc19leHRyYWN0X3ZsX2FkZHJzYCBpcyBzdGF0aWMsIEkmIzM5O20gbm93IHRoaW5raW5nIGFib3V0IGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGF0IGZ1bmN0aW9uLiBBcmUgd2UgbG9va2luZyBhdCBhIGNhbGwgY2hhaW4sIHBlcmhhcHMgYSB2YWxpZGF0aW9uIHByb2Nlc3Mgd2hlcmUgZXh0cmFjdGVkIGFkZHJlc3NlcyBhcmUgdXNlZCwgb3IgaXMgdGhpcyBtb3JlIG9mIGEgY29tcGxldGVseSB1bnJlbGF0ZWQgZnVuY3Rpb24/IFVuZGVyc3RhbmRpbmcgdGhhdCByZWxhdGlvbnNoaXAgaXMga2V5LiBJIG5lZWQgdG8gcXVpY2tseSByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgb2YgaG93IHZvbHVtZXMgYXJlIGluc2VydGVkIGFuZCBob3cgdGhlIGNlbGwgaXMgc3RydWN0dXJlZCB0byBzZWUgaG93IHRoZSBleHRyYWN0ZWQgdm9sdW1lIGFkZHJlc3NlcyBtaWdodCBiZSB1c2VkIGR1cmluZyB0aGF0IHByb2Nlc3MuIENvbnRleHQgaXMgZXZlcnl0aGluZyBoZXJlLCBhbmQgdGhlIHN0YXRpYyBuYXR1cmUgb2YgdGhlIGZpcnN0IGZ1bmN0aW9uIG1heSB2ZXJ5IHdlbGwgYmUgYSBjbHVlIGFib3V0IHRoZSBvdmVyYWxsIGRlc2lnbiBvciwgcGVyaGFwcywgYSBwb2ludCBvZiBwb3RlbnRpYWwgcmVmYWN0b3JpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIyIDA5OjMwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2Fmc19pbnNlcnRfdm9sdW1lX2ludG9fY2VsbCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL2Fmcy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvYWZzL3ZvbHVtZS5jPTE1PXN0YXRpYyB2b2lkIGFmc19kZXN0cm95X3ZvbHVtZShzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspO1xuLS1cbmZzL2Fmcy92b2x1bWUuYy0yMC0gKi9cbmZzL2Fmcy92b2x1bWUuYzoyMTpzdGF0aWMgc3RydWN0IGFmc192b2x1bWUgKmFmc19pbnNlcnRfdm9sdW1lX2ludG9fY2VsbChzdHJ1Y3QgYWZzX2NlbGwgKmNlbGwsXG5mcy9hZnMvdm9sdW1lLmMtMjItXHRcdFx0XHRcdFx0ICAgICAgc3RydWN0IGFmc192b2x1bWUgKnZvbHVtZSlcbi0tXG5mcy9hZnMvdm9sdW1lLmM9MTMzPXN0YXRpYyBzdHJ1Y3QgYWZzX3ZvbHVtZSAqYWZzX2xvb2t1cF92b2x1bWUoc3RydWN0IGFmc19mc19jb250ZXh0ICpwYXJhbXMsXG4tLVxuZnMvYWZzL3ZvbHVtZS5jLTE0Mi1cbmZzL2Fmcy92b2x1bWUuYzoxNDM6XHR2b2x1bWUgPSBhZnNfaW5zZXJ0X3ZvbHVtZV9pbnRvX2NlbGwocGFyYW1zLVx1MDAzZWNlbGwsIGNhbmRpZGF0ZSk7XG5mcy9hZnMvdm9sdW1lLmMtMTQ0LVx0aWYgKHZvbHVtZSA9PSBjYW5kaWRhdGUpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIyIDA5OjMwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI4OTEzCgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogMjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIHlvdSByZXF1ZXN0ZWQ6CgoqKkRlbHZpbmcgaW50byB0aGUgRmlsZXN5c3RlbSBJbnRlcm5hbHMqKgoKT2theSwgSSYjMzk7bSBkaWdnaW5nIGludG8gdGhpcyBjb2RlLCBzcGVjaWZpY2FsbHkgYXJvdW5kIEFGUyB2b2x1bWUgaW5zZXJ0aW9uLiBGaXJzdCB0aGluZyBJJiMzOTttIG5vdGluZyBpcyB0aGF0IGBhZnNfaW5zZXJ0X3ZvbHVtZV9pbnRvX2NlbGxgIGlzIGRlY2xhcmVkIGFzIHN0YXRpYy4gVGhpcyBpbW1lZGlhdGVseSB0ZWxscyBtZSBpdCYjMzk7cyBsaWtlbHkgYW4gaW50ZXJuYWwgZnVuY3Rpb24sIG5vdCBpbnRlbmRlZCBmb3IgZXh0ZXJuYWwgdXNlIGFuZCBwcm9iYWJseSBvbmx5IHZpc2libGUgd2l0aGluIGEgc3BlY2lmaWMgY29tcGlsYXRpb24gdW5pdCBvciBmaWxlLiBUaGF0JiMzOTtzIGdvb2QgdG8ga25vdyBmcm9tIGEgc2NvcGUgYW5kIGRlcGVuZGVuY3kgcGVyc3BlY3RpdmUuCgpOb3csIHdoZXJlIGRvZXMgdGhpcyB2b2x1bWUgaW5zZXJ0aW9uIGhhcHBlbiwgYW5kIGhvdyBkb2VzIGl0IHJlbGF0ZSB0byBpbm9kZSBhbGxvY2F0aW9uPyBMZXQmIzM5O3MgdHJhY2UgaXQuIE15IG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIGV4YW1pbmUgYGFmc19hbGxvY19pbm9kZWAuIFRoYXQmIzM5O3Mgd2hlcmUgSSBleHBlY3QgdG8gZmluZCB0aGUgYWN0dWFsIGNyZWF0aW9uIG9mIG5ldyBpbm9kZSBzdHJ1Y3R1cmVzLCBhbmQgbGlrZWx5LCBhIGNhbGwgdG8gc29tZXRoaW5nIGxpa2UgYGFmc19pbnNlcnRfdm9sdW1lX2ludG9fY2VsbGAgb3Igc29tZSByZWxhdGVkIGZ1bmN0aW9uIHRvIGhvb2sgaXQgdXAgdG8gdGhlIEFGUyB2b2x1bWUgc3RydWN0dXJlLiBJJiMzOTttIGhvcGluZyB0byBnZXQgYSBjbGVhcmVyIHBpY3R1cmUgb2YgdGhlIGRhdGEgZmxvdyBhbmQgaG93IHRoZSBwaWVjZXMgY29ubmVjdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjIgMDk6MzA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YWZzX2FsbG9jX2lub2RlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvYWZzLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9hZnMvaW50ZXJuYWwuaD02NzA9ZW51bSBhZnNfbG9ja19zdGF0ZSB7XG4tLVxuZnMvYWZzL2ludGVybmFsLmgtNjgzLSAqXG5mcy9hZnMvaW50ZXJuYWwuaDo2ODQ6ICogTm90ZSB0aGF0IGFmc19hbGxvY19pbm9kZSgpICptdXN0KiByZXNldCBhbnl0aGluZyB0aGF0IGNvdWxkIGluY29ycmVjdGx5XG5mcy9hZnMvaW50ZXJuYWwuaC02ODUtICogbGVhayBmcm9tIG9uZSBpbm9kZSB0byBhbm90aGVyLlxuLS1cbmZzL2Fmcy9zdXBlci5jPTMzPXN0YXRpYyB2b2lkIGFmc19raWxsX3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpO1xuZnMvYWZzL3N1cGVyLmM6MzQ6c3RhdGljIHN0cnVjdCBpbm9kZSAqYWZzX2FsbG9jX2lub2RlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpO1xuZnMvYWZzL3N1cGVyLmMtMzUtc3RhdGljIHZvaWQgYWZzX2Rlc3Ryb3lfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSk7XG4tLVxuZnMvYWZzL3N1cGVyLmM9NTU9c3RhdGljIGNvbnN0IHN0cnVjdCBzdXBlcl9vcGVyYXRpb25zIGFmc19zdXBlcl9vcHMgPSB7XG5mcy9hZnMvc3VwZXIuYy01Ni1cdC5zdGF0ZnNcdFx0PSBhZnNfc3RhdGZzLFxuZnMvYWZzL3N1cGVyLmM6NTc6XHQuYWxsb2NfaW5vZGVcdD0gYWZzX2FsbG9jX2lub2RlLFxuZnMvYWZzL3N1cGVyLmMtNTgtXHQud3JpdGVfaW5vZGVcdD0gbmV0ZnNfdW5waW5fd3JpdGViYWNrLFxuLS1cbmZzL2Fmcy9zdXBlci5jPTYyMj1zdGF0aWMgaW50IGFmc19pbml0X2ZzX2NvbnRleHQoc3RydWN0IGZzX2NvbnRleHQgKmZjKVxuLS1cbmZzL2Fmcy9zdXBlci5jLTY0Ni0gKiBJbml0aWFsaXNlIGFuIGlub2RlIGNhY2hlIHNsYWIgZWxlbWVudCBwcmlvciB0byBhbnkgdXNlLiAgTm90ZSB0aGF0XG5mcy9hZnMvc3VwZXIuYzo2NDc6ICogYWZzX2FsbG9jX2lub2RlKCkgKm11c3QqIHJlc2V0IGFueXRoaW5nIHRoYXQgY291bGQgaW5jb3JyZWN0bHkgbGVhayBmcm9tIG9uZVxuZnMvYWZzL3N1cGVyLmMtNjQ4LSAqIGlub2RlIHRvIGFub3RoZXIuXG4tLVxuZnMvYWZzL3N1cGVyLmM9NjUwPXN0YXRpYyB2b2lkIGFmc19pX2luaXRfb25jZSh2b2lkICpfdm5vZGUpXG4tLVxuZnMvYWZzL3N1cGVyLmMtNjY5LSAqL1xuZnMvYWZzL3N1cGVyLmM6NjcwOnN0YXRpYyBzdHJ1Y3QgaW5vZGUgKmFmc19hbGxvY19pbm9kZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxuZnMvYWZzL3N1cGVyLmMtNjcxLXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjIgMDk6MzA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjk2ODAKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAyNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byB0aGUgQUZTIEZpbGVzeXN0ZW0mIzM5O3MgSW5vZGUgQWxsb2NhdGlvbioqCgpPa2F5LCBzbyB3ZSYjMzk7cmUgdGFsa2luZyBhYm91dCBpbm9kZSBhbGxvY2F0aW9uIHdpdGhpbiB0aGUgQUZTIGtlcm5lbCBtb2R1bGUuIFRoZSBzeXN0ZW0mIzM5O3MgdXNpbmcgYGFmc19hbGxvY19pbm9kZWAsIHdoaWNoIHRlbGxzIG1lIHRoaXMgaXMgYSBzdXBlcl9vcGVyYXRpb24uIFNvLCB0aGUgcXVlc3Rpb24gaXMsIGhvdyBkb2VzIHRoaXMgd29yaz8KCkxldCYjMzk7cyBzdGFydCBieSBkaWdnaW5nIGludG8gdGhlIGluaXRpYWxpemF0aW9uIGZ1bmN0aW9uLiBUaW1lIHRvIGxvb2sgY2xvc2VseSBhdCBgYWZzX2lfaW5pdF9vbmNlYC4gSSB3YW50IHRvIHVuZGVyc3RhbmQgdGhlIGluaXRpYWxpemF0aW9uIHN0cmF0ZWd5IGZvciB0aGUgaW5vZGVzLiBXaGF0JiMzOTtzIHRoZSBwbGFuPyBEb2VzIGl0IHVzZSB0aGUgc3RhbmRhcmQgaW5pdCBmdW5jdGlvbnMsIG9yIGlzIHRoZXJlIHNvbWV0aGluZyBzcGVjaWFsIHRoYXQgSSYjMzk7bSBtaXNzaW5nPyBJJiMzOTttIGN1cmlvdXMgdG8gc2VlIGhvdyB0aGUgQUZTIGZpbGVzeXN0ZW0gaGFuZGxlcyBpdHMgaW5vZGUtc3BlY2lmaWMgZGF0YSwgYW5kIHNwZWNpZmljYWxseSwgdGhlIGluaXRpYWxpemF0aW9uIG9mIHRoYXQgZGF0YS4gSSBzdXNwZWN0IHdlJiMzOTtsbCBmaW5kIHNvbWUgcG9pbnRlciBtYW5pcHVsYXRpb24gZm9yIHRoYXQgVkZTIGxheWVyLCBidXQgSSYjMzk7bSB0cnlpbmcgdG8gc2VlIGlmIHRoZXJlIGlzIHNvbWV0aGluZyBtb3JlIHNwZWNpZmljLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMiAwOTozMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDthZnNfaV9pbml0X29uY2UmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9hZnMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2Fmcy9zdXBlci5jLTMxLVxuZnMvYWZzL3N1cGVyLmM6MzI6c3RhdGljIHZvaWQgYWZzX2lfaW5pdF9vbmNlKHZvaWQgKmZvbyk7XG5mcy9hZnMvc3VwZXIuYy0zMy1zdGF0aWMgdm9pZCBhZnNfa2lsbF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKTtcbi0tXG5mcy9hZnMvc3VwZXIuYz05Nj1pbnQgX19pbml0IGFmc19mc19pbml0KHZvaWQpXG4tLVxuZnMvYWZzL3N1cGVyLmMtMTA5LVx0XHRcdFx0XHQgICAgIFNMQUJfSFdDQUNIRV9BTElHTnxTTEFCX0FDQ09VTlQsXG5mcy9hZnMvc3VwZXIuYzoxMTA6XHRcdFx0XHRcdCAgICAgYWZzX2lfaW5pdF9vbmNlKTtcbmZzL2Fmcy9zdXBlci5jLTExMS1cdGlmICghYWZzX2lub2RlX2NhY2hlcCkge1xuLS1cbmZzL2Fmcy9zdXBlci5jPTYyMj1zdGF0aWMgaW50IGFmc19pbml0X2ZzX2NvbnRleHQoc3RydWN0IGZzX2NvbnRleHQgKmZjKVxuLS1cbmZzL2Fmcy9zdXBlci5jLTY0OS0gKi9cbmZzL2Fmcy9zdXBlci5jOjY1MDpzdGF0aWMgdm9pZCBhZnNfaV9pbml0X29uY2Uodm9pZCAqX3Zub2RlKVxuZnMvYWZzL3N1cGVyLmMtNjUxLXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjIgMDk6MzA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzAyMTIKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAyNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgaW1tZWRpYXRlIHRob3VnaHQgcHJvY2VzczoKCioqSW5pdGlhbCBBc3Nlc3NtZW50OiBVbmRlcnN0YW5kaW5nIHRoZSBDb2RlJiMzOTtzIEJ1aWxkaW5nIEJsb2NrcyoqCgpPa2F5LCBzbyBgYWZzX2lfaW5pdF9vbmNlYC4uLiB0aGF0JiMzOTtzIGEgc2xhYiBjb25zdHJ1Y3RvciwgcmlnaHQ/IEkmIzM5O20gYWxyZWFkeSB2aXN1YWxpemluZyBob3cgaXQmIzM5O3Mgc2V0dGluZyB1cCB0aGUgaW4tbWVtb3J5IHN0cnVjdHVyZXMuIEdvdHRhIGtlZXAgdHJhY2sgb2YgdGhvc2Uga2V5IGRhdGEgc3RydWN0dXJlcy4KCkFscmlnaHQsIGxldCYjMzk7cyBqdXN0IG1ha2Ugc3VyZSBJJiMzOTttIGZvbGxvd2luZyB0aGUgY29kZSBjb3JyZWN0bHk7IHdoZXJlIGRvZXMgaXQgaW50ZXJmYWNlIHdpdGggdGhlIHJlc3Qgb2YgdGhlIHN5c3RlbT8gTGV0JiMzOTtzIHF1aWNrbHkgdHJhY2UgaXQgYmFjaywgSSB3YW50IHRvIGNoZWNrIGhvdyBpdCBhbGwgaW50ZXJmYWNlcy4gTm93LCB3aGVyZSB0byBnbyBuZXh0LiBJIHRoaW5rIEkmIzM5O2xsIGxvb2sgYXQgYGFmc19nZXRfdHJlZWAuIFRoYXQgZnVuY3Rpb24mIzM5O3MgbGlrZWx5IGludm9sdmVkIGluIHJldHJpZXZpbmcgb3IgaW50ZXJhY3Rpbmcgd2l0aCB0aGUgaGllcmFyY2hpY2FsIHRyZWUgc3RydWN0dXJlLiBUaGF0IG1ha2VzIHNlbnNlIGdpdmVuIHRoZSBjb250ZXh0IG9mIGEgZmlsZSBzeXN0ZW0uIEl0JiMzOTtzIHByb2JhYmx5IHRoZSBtb3N0IGxvZ2ljYWwgZW50cnkgcG9pbnQgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBzbGFiIGFsbG9jYXRpb24gaXMgYmVpbmcgdXNlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42MC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjIgMDk6MzA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YWZzX2dldF90cmVlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvYWZzLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9hZnMvc3VwZXIuYz01MzA9c3RhdGljIHZvaWQgYWZzX2tpbGxfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcbi0tXG5mcy9hZnMvc3VwZXIuYy01NDctICovXG5mcy9hZnMvc3VwZXIuYzo1NDg6c3RhdGljIGludCBhZnNfZ2V0X3RyZWUoc3RydWN0IGZzX2NvbnRleHQgKmZjKVxuZnMvYWZzL3N1cGVyLmMtNTQ5LXtcbi0tXG5mcy9hZnMvc3VwZXIuYy01OTAtXHRpZiAoIWN0eC1cdTAwM2VkeW5fcm9vdClcbmZzL2Fmcy9zdXBlci5jOjU5MTpcdFx0dHJhY2VfYWZzX2dldF90cmVlKGFzLVx1MDAzZWNlbGwsIGFzLVx1MDAzZXZvbHVtZSk7XG5mcy9hZnMvc3VwZXIuYy01OTItXHRfbGVhdmUoXCYjMzQ7ID0gMCBbJXBdXCYjMzQ7LCBzYik7XG4tLVxuZnMvYWZzL3N1cGVyLmM9NjEzPXN0YXRpYyBjb25zdCBzdHJ1Y3QgZnNfY29udGV4dF9vcGVyYXRpb25zIGFmc19jb250ZXh0X29wcyA9IHtcbi0tXG5mcy9hZnMvc3VwZXIuYy02MTUtXHQucGFyc2VfcGFyYW1cdD0gYWZzX3BhcnNlX3BhcmFtLFxuZnMvYWZzL3N1cGVyLmM6NjE2Olx0LmdldF90cmVlXHQ9IGFmc19nZXRfdHJlZSxcbmZzL2Fmcy9zdXBlci5jLTYxNy19O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMiAwOTozMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMDczMgoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDI4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOgoKKipEaXZpbmcgaW50byB0aGUgQUZTIEZpbGVzeXN0ZW0gSW1wbGVtZW50YXRpb24qKgoKT2theSwgc28gYGFmc19nZXRfdHJlZWAgaXMgZGVmaW5pdGVseSBhIGBmc19jb250ZXh0X29wZXJhdGlvbmAuIFRoYXQmIzM5O3MgdGhlIHN0YXJ0aW5nIHBvaW50IGZvciB1bmRlcnN0YW5kaW5nIGhvdyB0aGUgQUZTIGZpbGVzeXN0ZW0mIzM5O3Mgcm9vdCBpbm9kZSBpcyBoYW5kbGVkLCB3aGljaCBJIG5lZWQgdG8gZ3Jhc3AgdG8gdHJvdWJsZXNob290IHRoaXMgaXNzdWUgSSYjMzk7bSB3b3JraW5nIG9uLiBOb3csIEkgbmVlZCB0byBjaGVjayBvdXQgd2hhdCB0aGUgYGFmc19ldmljdF9pbm9kZWAgZnVuY3Rpb24gZG9lcy4gVGhhdCB3aWxsIGJlIGludGVyZXN0aW5nLiBJJiMzOTtsbCBiZXQgdGhhdCYjMzk7cyB3aGVyZSB0aGUgaW5vZGUgZGVhbGxvY2F0aW9uIGhhcHBlbnMuIEkmIzM5O2xsIGJldCBpdCYjMzk7cyBjYWxsZWQgZHVyaW5nIGEgZmlsZXN5c3RlbSB1bm1vdW50LCBvciB3aGVuIHRoZSBpbm9kZSBuZWVkcyB0byBiZSByZWxlYXNlZCBmcm9tIHRoZSBjYWNoZS4gTGV0JiMzOTtzIHNlZSBob3cgdGhhdCB3b3Jrcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42Mi8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjIgMDk6MzA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YWZzX2V2aWN0X2lub2RlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvYWZzLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9hZnMvaW5vZGUuYz02NDI9aW50IGFmc19kcm9wX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4tLVxuZnMvYWZzL2lub2RlLmMtNjU0LSAqL1xuZnMvYWZzL2lub2RlLmM6NjU1OnZvaWQgYWZzX2V2aWN0X2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpXG5mcy9hZnMvaW5vZGUuYy02NTYte1xuLS1cbmZzL2Fmcy9pbnRlcm5hbC5oPTEyNjM9ZXh0ZXJuIGludCBhZnNfc2V0YXR0cihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGRlbnRyeSAqLCBzdHJ1Y3QgaWF0dHIgKik7XG5mcy9hZnMvaW50ZXJuYWwuaDoxMjY0OmV4dGVybiB2b2lkIGFmc19ldmljdF9pbm9kZShzdHJ1Y3QgaW5vZGUgKik7XG5mcy9hZnMvaW50ZXJuYWwuaC0xMjY1LWV4dGVybiBpbnQgYWZzX2Ryb3BfaW5vZGUoc3RydWN0IGlub2RlICopO1xuLS1cbmZzL2Fmcy9zdXBlci5jPTU1PXN0YXRpYyBjb25zdCBzdHJ1Y3Qgc3VwZXJfb3BlcmF0aW9ucyBhZnNfc3VwZXJfb3BzID0ge1xuLS1cbmZzL2Fmcy9zdXBlci5jLTYxLVx0LmZyZWVfaW5vZGVcdD0gYWZzX2ZyZWVfaW5vZGUsXG5mcy9hZnMvc3VwZXIuYzo2MjpcdC5ldmljdF9pbm9kZVx0PSBhZnNfZXZpY3RfaW5vZGUsXG5mcy9hZnMvc3VwZXIuYy02My1cdC5zaG93X2Rldm5hbWVcdD0gYWZzX3Nob3dfZGV2bmFtZSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42My8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjIgMDk6MzA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzEyNDkKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAyNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSB0aGUgb25lIHRoaW5raW5nIGl0OgoKKipEaWdnaW5nIGludG8gdGhlIEFGUyBGaWxlc3lzdGVtIEltcGxlbWVudGF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBgYWZzX2V2aWN0X2lub2RlYCBoZXJlLiBSaWdodCwgdGhhdCYjMzk7cyBhIGBzdXBlcl9vcGVyYXRpb25gLCB3aGljaCBtZWFucyBpdCYjMzk7cyBhIGZ1bmN0aW9uIGhhbmRsaW5nIGlub2RlIGV2aWN0aW9uIHdpdGhpbiB0aGUgQUZTIGZpbGVzeXN0ZW0uIExldCYjMzk7cyBtYWtlIHN1cmUgSSBoYXZlIGEgZ29vZCBncmFzcCBvbiB0aGlzLi4uCgpOb3csIEkmIzM5O20gdGhpbmtpbmcsIHdoZXJlIGRvZXMgdGhlIHJvb3QgaW5vZGUgY29tZSBmcm9tIGluIEFGUz8gR290dGEgcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGluaXRpYWxpemF0aW9uIGFuZCBob3cgaXQmIzM5O3MgaGFuZGxlZCwgZXNwZWNpYWxseSBpbiByZWxhdGlvbiB0byBob3cgaXQgcmVsYXRlcyB0byB0aGlzIGV2aWN0aW9uIHJvdXRpbmUuIExldCYjMzk7cyBnbyBjaGVjayB0aGUgc291cmNlIGZvciBgYWZzX3Jvb3RfaWdldGAg4oCTIHRoYXQmIzM5O2xsIGJlIHRoZSBrZXkgdG8gdW5kZXJzdGFuZGluZyB0aGUgY29udGV4dCBvZiBgYWZzX2V2aWN0X2lub2RlYCBhbmQgaG93IHRoZSByb290IGludGVyYWN0cyB3aXRoaW4gdGhpcyBmaWxlc3lzdGVtLiBUaGlzIHNlZW1zIHRoZSByaWdodCBwYXRoIHRvIGZ1bGx5IGdyYXNwIHRoaXMgaW1wbGVtZW50YXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIyIDA5OjMwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2Fmc19yb290X2lnZXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9hZnMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2Fmcy9pbm9kZS5jPTUyOD1zdGF0aWMgaW50IGFmc19pZ2V0NV9zZXRfcm9vdChzdHJ1Y3QgaW5vZGUgKmlub2RlLCB2b2lkICpvcGFxdWUpXG4tLVxuZnMvYWZzL2lub2RlLmMtNTQ1LSAqL1xuZnMvYWZzL2lub2RlLmM6NTQ2OnN0cnVjdCBpbm9kZSAqYWZzX3Jvb3RfaWdldChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzdHJ1Y3Qga2V5ICprZXkpXG5mcy9hZnMvaW5vZGUuYy01NDcte1xuLS1cbmZzL2Fmcy9pbnRlcm5hbC5oPTEyNTk9ZXh0ZXJuIHN0cnVjdCBpbm9kZSAqYWZzX2lnZXQoc3RydWN0IGFmc19vcGVyYXRpb24gKiwgc3RydWN0IGFmc192bm9kZV9wYXJhbSAqKTtcbmZzL2Fmcy9pbnRlcm5hbC5oOjEyNjA6ZXh0ZXJuIHN0cnVjdCBpbm9kZSAqYWZzX3Jvb3RfaWdldChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKiwgc3RydWN0IGtleSAqKTtcbmZzL2Fmcy9pbnRlcm5hbC5oLTEyNjEtZXh0ZXJuIGludCBhZnNfZ2V0YXR0cihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgY29uc3Qgc3RydWN0IHBhdGggKixcbi0tXG5mcy9hZnMvc3VwZXIuYz00NDg9c3RhdGljIGludCBhZnNfZmlsbF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzdHJ1Y3QgYWZzX2ZzX2NvbnRleHQgKmN0eClcbi0tXG5mcy9hZnMvc3VwZXIuYy00NzMtXHRcdGFmc19hY3RpdmF0ZV92b2x1bWUoYXMtXHUwMDNldm9sdW1lKTtcbmZzL2Fmcy9zdXBlci5jOjQ3NDpcdFx0aW5vZGUgPSBhZnNfcm9vdF9pZ2V0KHNiLCBjdHgtXHUwMDNla2V5KTtcbmZzL2Fmcy9zdXBlci5jLTQ3NS1cdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjIgMDk6MzA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzE4MjEKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAyOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczoKCioqTmF2aWdhdGluZyB0aGUgQUZTIEZpbGVzeXN0ZW0gU3RydWN0dXJlKioKCk9rYXksIHNvIEkmIzM5O20gdHJhY2luZyBkb3duIHRoaXMgQUZTIGZpbGUgc3lzdGVtIGFyY2hpdGVjdHVyZSwgYW5kIGl0IGxvb2tzIGxpa2UgYGFmc19yb290X2lnZXRgIGlzIGRlZmluaXRlbHkgYWNjZXNzaWJsZSB0aHJvdWdoIGBhZnNfZmlsbF9zdXBlcmAuIFRoYXQgbWFrZXMgc2Vuc2U7IGBhZnNfZmlsbF9zdXBlcmAgaXMgd2hhdCYjMzk7cyByZXNwb25zaWJsZSBmb3IsIHdlbGwsIGZpbGxpbmcgaW4gdGhlIHN1cGVyYmxvY2ssIHNvIGl0IHdvdWxkIG5lZWQgdG8gaW5zdGFudGlhdGUgdGhlIHJvb3QgaW5vZGUuIE5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBzeXN0ZW0gY2xlYW5zIHRoaXMgdXAgd2hlbiB0aGUgZmlsZXN5c3RlbSBpcyB1bm1vdW50ZWQuIEkgc2hvdWxkIHRha2UgYSBsb29rIGF0IGBhZnNfY2VsbF9kZXN0cm95YC4gVGhhdCBzaG91bGQgYmUgd2hlcmUgdGhlIGNsZWFudXAgb2YgdGhvc2UgcmVzb3VyY2VzIGhhcHBlbnMuLi5JIGhvcGUuIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyBnb2luZyBvbiB0aGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjIgMDk6MzA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YWZzX2NlbGxfZGVzdHJveSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL2Fmcy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvYWZzL2NlbGwuYz00NzU9c3RhdGljIGludCBhZnNfdXBkYXRlX2NlbGwoc3RydWN0IGFmc19jZWxsICpjZWxsKVxuLS1cbmZzL2Fmcy9jZWxsLmMtNTczLSAqL1xuZnMvYWZzL2NlbGwuYzo1NzQ6c3RhdGljIHZvaWQgYWZzX2NlbGxfZGVzdHJveShzdHJ1Y3QgcmN1X2hlYWQgKnJjdSlcbmZzL2Fmcy9jZWxsLmMtNTc1LXtcbi0tXG5mcy9hZnMvY2VsbC5jPTU5Nj1zdGF0aWMgdm9pZCBhZnNfZGVzdHJveV9jZWxsX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuLS1cbmZzL2Fmcy9jZWxsLmMtNjA5LVxuZnMvYWZzL2NlbGwuYzo2MTA6XHRjYWxsX3JjdShcdTAwMjZjZWxsLVx1MDAzZXJjdSwgYWZzX2NlbGxfZGVzdHJveSk7XG5mcy9hZnMvY2VsbC5jLTYxMS19XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIyIDA5OjMwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMyMjMxCgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjoKCioqQW5hbHl6aW5nIHRoZSBgYWZzX2NlbGxfZGVzdHJveWAgQ2FsbGJhY2sqKgoKT2theSwgc28gYGFmc19jZWxsX2Rlc3Ryb3lgIGlzIGEgY2FsbGJhY2sgZnVuY3Rpb24sIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBjb250ZXh0LiBXaGVyZSBpcyBpdCBiZWluZyBjYWxsZWQgZnJvbT8gV2hhdCYjMzk7cyBpdHMgcHVycG9zZSB3aXRoaW4gdGhlIGBhZnNgIGZyYW1ld29yaz8gVGhlIHByaW1hcnkgZ29hbCBtdXN0IGJlIHRvIGNsZWFuIHVwIHRoZSBjZWxsIG9iamVjdC4KClJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoZSBjb3JlIGltcGxlbWVudGF0aW9uLiBUaGUgbG9naWNhbCBzdGFydGluZyBwb2ludCB3b3VsZCBiZSB0aGUgZnVuY3Rpb24gd2hpY2ggZG9lcyB0aGUgYWN0dWFsIHdvcmsgb2YgZGVzdHJveWluZyB0aGUgY2VsbCwgb3IsIGF0IGxlYXN0LCB3aGF0ICpzaG91bGQqIGJlIHRoZSBjb3JlIGltcGxlbWVudGF0aW9uOiBgYWZzX2Rlc3Ryb3lfY2VsbF93b3JrYC4gSSYjMzk7bGwgc3RhcnQgdGhlcmUgYW5kIHdvcmsgbXkgd2F5IG91dHdhcmQuIEkmIzM5O2xsIGNoZWNrIGl0cyBhcmd1bWVudHMsIGl0cyBkZXBlbmRlbmNpZXMsIHdoYXQgbG9ja3MgaXQmIzM5O3MgdXNpbmcgKGlmIGFueSksIGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggb3RoZXIgY29tcG9uZW50cyBvZiB0aGUgc3lzdGVtLiBJIGhhdmUgdG8gdmVyaWZ5IGl0IGlzIGRvaW5nIGFsbCB0aGUgdGhpbmdzIG5lY2Vzc2FyeSB0byBzYWZlbHkgdGVhciBkb3duIHRoZSBjZWxsLCBhbmQgaG93IHRoaXMgY2FsbGJhY2sgZml0cyBpbnRvIHRoYXQgcHJvY2Vzcy4gQSBjdXJzb3J5IHNjYW4gZm9yIHJhY2UgY29uZGl0aW9ucyBvciBtZW1vcnkgbGVha3MgaXMgYSBtdXN0LiBLbm93aW5nIHRoZSBzdXJyb3VuZGluZyBjb250ZXh0IHdpbGwgYmUga2V5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjY4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMiAwOTozMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDthZnNfZGVzdHJveV9jZWxsX3dvcmsmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9hZnMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2Fmcy9jZWxsLmM9MjM9c3RhdGljIHZvaWQgYWZzX2NlbGxfdGltZXIoc3RydWN0IHRpbWVyX2xpc3QgKnRpbWVyKTtcbmZzL2Fmcy9jZWxsLmM6MjQ6c3RhdGljIHZvaWQgYWZzX2Rlc3Ryb3lfY2VsbF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7XG5mcy9hZnMvY2VsbC5jLTI1LXN0YXRpYyB2b2lkIGFmc19tYW5hZ2VfY2VsbF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7XG4tLVxuZnMvYWZzL2NlbGwuYz0xMDg9c3RhdGljIHN0cnVjdCBhZnNfY2VsbCAqYWZzX2FsbG9jX2NlbGwoc3RydWN0IGFmc19uZXQgKm5ldCxcbi0tXG5mcy9hZnMvY2VsbC5jLTE2NC1cdGF0b21pY19zZXQoXHUwMDI2Y2VsbC1cdTAwM2VhY3RpdmUsIDApO1xuZnMvYWZzL2NlbGwuYzoxNjU6XHRJTklUX1dPUksoXHUwMDI2Y2VsbC1cdTAwM2VkZXN0cm95ZXIsIGFmc19kZXN0cm95X2NlbGxfd29yayk7XG5mcy9hZnMvY2VsbC5jLTE2Ni1cdElOSVRfV09SSyhcdTAwMjZjZWxsLVx1MDAzZW1hbmFnZXIsIGFmc19tYW5hZ2VfY2VsbF93b3JrKTtcbi0tXG5mcy9hZnMvY2VsbC5jPTU3ND1zdGF0aWMgdm9pZCBhZnNfY2VsbF9kZXN0cm95KHN0cnVjdCByY3VfaGVhZCAqcmN1KVxuLS1cbmZzL2Fmcy9jZWxsLmMtNTk1LVxuZnMvYWZzL2NlbGwuYzo1OTY6c3RhdGljIHZvaWQgYWZzX2Rlc3Ryb3lfY2VsbF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbmZzL2Fmcy9jZWxsLmMtNTk3LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjIgMDk6MzE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzI4MzMKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAyNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKkRlY29uc3RydWN0aW5nIHRoZSBXb3JrcXVldWUgQ2FsbGJhY2s6IGFmc19kZXN0cm95X2NlbGxfd29yayoqCgpPa2F5LCBzbyBgYWZzX2Rlc3Ryb3lfY2VsbF93b3JrYCBpcyBjbGVhcmx5IGEgd29ya3F1ZXVlIGNhbGxiYWNrLiBUaGF0JiMzOTtzIHRoZSBzdGFydGluZyBwb2ludC4gTXkgbWluZCBpbW1lZGlhdGVseSBqdW1wcyB0byBob3cgdGhpcyBmaXRzIHdpdGhpbiB0aGUgbGFyZ2VyIEFGUyBhcmNoaXRlY3R1cmUuIFdvcmtxdWV1ZXMgYXJlIGNydWNpYWwgZm9yIGFzeW5jaHJvbm91cyB0YXNrcywgc28gdGhpcyBpbXBsaWVzIHRoYXQgZGVzdHJveWluZyBhIGNlbGwsIG9yIGF0IGxlYXN0IGFzcGVjdHMgb2YgaXQsIGlzbiYjMzk7dCBzb21ldGhpbmcgdGhhdCBjYW4gYmUgZG9uZSBzeW5jaHJvbm91c2x5LiBUaGVyZSYjMzk7cyBwcm9iYWJseSBhIG5lZWQgdG8gaGFuZGxlIGxvY2tpbmcsIHJlc291cmNlIGNsZWFudXAsIG9yIG1heWJlIGV2ZW4gaW50ZXJhY3Rpbmcgd2l0aCBvdGhlciBzeXN0ZW0gY29tcG9uZW50cywgYWxsIG9mIHdoaWNoIGFyZSBtYW5hZ2VkIHNhZmVseSB2aWEgdGhlIHdvcmtxdWV1ZSBtZWNoYW5pc20uCgpOb3csIG15IG5leHQgaW5zdGluY3QgaXMgdG8gdHJhY2UgYmFjayB0aGUgcHJvY2Vzcy4gV2hlcmUgaXMgdGhpcyBjYWxsYmFjayAqaW52b2tlZCo/IE1vcmUgc3BlY2lmaWNhbGx5LCB3aGF0IHRyaWdnZXJzIHRoZSBkZXN0cnVjdGlvbiBvZiBhIGNlbGw/IEl0IGNvdWxkIGJlIGEgdXNlciBjb21tYW5kLCBhIHRpbWVvdXQsIG9yIG1heWJlIGV2ZW4gYW4gaW50ZXJuYWwgY2xlYW51cCByb3V0aW5lIHdpdGhpbiB0aGUgQUZTIHN1YnN5c3RlbS4KClNpbmNlIEkgYW0gY29uc2lkZXJpbmcgdGhlIGRlc3RydWN0aW9uIG9mIGEgY2VsbCwgdGhlIGZpcnN0IGZvbGxvdy11cCB0aGF0IGNvbWVzIHRvIG1pbmQgaXMgdGhhdCBJIHNob3VsZCBjaGVjayB0aGUgYGFmc191cGRhdGVfY2VsbGAgZnVuY3Rpb24uIFdoaWxlIGBhZnNfZGVzdHJveV9jZWxsX3dvcmtgIGlzIHRoZSBkZXN0cnVjdGlvbiBmdW5jdGlvbiwgYGFmc191cGRhdGVfY2VsbGAgaXMgb25lIHdheSBvZiBjcmVhdGluZyBhIGNlbGwuIEl0IGlzIHJlYXNvbmFibGUgdGhhdCBgYWZzX2Rlc3Ryb3lfY2VsbF93b3JrYCBtaWdodCBiZSByZWxhdGVkLCBhbmQgaW4gZmFjdCBiZSBvcHBvc2l0ZSwgb2YgdGhlIGFjdGlvbiBvZiBgYWZzX3VwZGF0ZV9jZWxsYC4gSSBjYW4gdGhpbmsgb2YgYSBudW1iZXIgb2YgcXVlc3Rpb25zIEkgY2FuIGFzaywgbm93LCBzdWNoIGFzOiAmIzM0O0hvdyBpcyB0aGUgY3JlYXRpb24gb2YgYSBjZWxsIGxpbmtlZCB0byBpdHMgZGVzdHJ1Y3Rpb24sIGFuZCBob3cgaXMgZWFjaCBoYW5kbGVkPyYjMzQ7LiBJdCYjMzk7cyBhbGwgYWJvdXQgdW5kZXJzdGFuZGluZyB0aGUgbGlmZWN5Y2xlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMiAwOTozMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDthZnNfdXBkYXRlX2NlbGwmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9hZnMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2Fmcy9jZWxsLmM9NDE1PWludCBhZnNfY2VsbF9pbml0KHN0cnVjdCBhZnNfbmV0ICpuZXQsIGNvbnN0IGNoYXIgKnJvb3RjZWxsKVxuLS1cbmZzL2Fmcy9jZWxsLmMtNDc0LSAqL1xuZnMvYWZzL2NlbGwuYzo0NzU6c3RhdGljIGludCBhZnNfdXBkYXRlX2NlbGwoc3RydWN0IGFmc19jZWxsICpjZWxsKVxuZnMvYWZzL2NlbGwuYy00NzYte1xuLS1cbmZzL2Fmcy9jZWxsLmM9ODA3PXN0YXRpYyBib29sIGFmc19tYW5hZ2VfY2VsbChzdHJ1Y3QgYWZzX2NlbGwgKmNlbGwpXG4tLVxuZnMvYWZzL2NlbGwuYy04NDYtXHRpZiAodGVzdF9hbmRfY2xlYXJfYml0KEFGU19DRUxMX0ZMX0RPX0xPT0tVUCwgXHUwMDI2Y2VsbC1cdTAwM2VmbGFncykpIHtcbmZzL2Fmcy9jZWxsLmM6ODQ3Olx0XHRyZXQgPSBhZnNfdXBkYXRlX2NlbGwoY2VsbCk7XG5mcy9hZnMvY2VsbC5jLTg0OC1cdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43MS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjIgMDk6MzE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzM0NTgKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAyMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoZXNlIHBvaW50cyBteXNlbGY6CgoqKlN0YXRpYyBGdW5jdGlvbiBDaGVjayoqCgpPa2F5LCBzbyBgYWZzX3VwZGF0ZV9jZWxsYCBpcyBkZWNsYXJlZCBhcyBzdGF0aWMuIFRoaXMgaW1tZWRpYXRlbHkgdHJpZ2dlcnMgYSBzcGVjaWZpYyB0cmFpbiBvZiB0aG91Z2h0IGZvciBtZSwgZ2l2ZW4gdGhlIGNvbnRleHQuIFN0YXRpYyBmdW5jdGlvbnMgaGF2ZSBpbnRlcm5hbCBsaW5rYWdlLCBtZWFuaW5nIHRoZXkmIzM5O3JlIG9ubHkgdmlzaWJsZSB3aXRoaW4gdGhlIGNvbXBpbGF0aW9uIHVuaXQgdGhleSYjMzk7cmUgZGVmaW5lZCBpbi4gVGhhdCBzdWdnZXN0cyBhIGRlbGliZXJhdGUgZGVzaWduIGRlY2lzaW9uIGhlcmUg4oCTIHBvdGVudGlhbGx5IGZvciBlbmNhcHN1bGF0aW9uLCBwcmV2ZW50aW5nIGV4dGVybmFsIGFjY2VzcyBhbmQgbW9kaWZpY2F0aW9uIGZyb20gb3RoZXIgbW9kdWxlcywgYW5kIHBvc3NpYmx5IGZvciBvcHRpbWl6YXRpb24gcmVsYXRlZCB0byBhIHNwZWNpZmljIGludGVybmFsIG1lY2hhbmlzbS4gVGhlIHN0YXRpYyBkZWNsYXJhdGlvbiBpcyBzaWduaWZpY2FudC4KCk5vdywgdGhhdCBicmluZ3MgdXAgdGhlIHJlbGF0aW9uc2hpcCB3aXRoIHJlbGF0ZWQgZnVuY3Rpb25zLiBMZXQmIzM5O3Mgc2VlIHdoYXQgaGFwcGVucyB3aXRoIGBhZnNfYWxsb2NfY2VsbGAuIEhvdyBkb2VzIGBhZnNfYWxsb2NfY2VsbGAgZnVuY3Rpb24gcmVsYXRlPyBEb2VzIGBhZnNfYWxsb2NfY2VsbGAgY2FsbCBgYWZzX3VwZGF0ZV9jZWxsYD8gRG9lcyBgYWZzX3VwZGF0ZV9jZWxsYCBjYWxsIGBhZnNfYWxsb2NfY2VsbGA/IEFyZSB0aGVyZSBvdGhlciBmdW5jdGlvbnMgYmVpbmcgY2FsbGVkIGFuZCB3aGF0IGRvIHRoZXkgbWVhbj8KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43Mi8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjIgMDk6MzE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YWZzX2FsbG9jX2NlbGwmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9hZnMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2Fmcy9jZWxsLmM9OTI9c3RydWN0IGFmc19jZWxsICphZnNfZmluZF9jZWxsKHN0cnVjdCBhZnNfbmV0ICpuZXQsXG4tLVxuZnMvYWZzL2NlbGwuYy0xMDctICovXG5mcy9hZnMvY2VsbC5jOjEwODpzdGF0aWMgc3RydWN0IGFmc19jZWxsICphZnNfYWxsb2NfY2VsbChzdHJ1Y3QgYWZzX25ldCAqbmV0LFxuZnMvYWZzL2NlbGwuYy0xMDktXHRcdFx0XHQgICAgICAgY29uc3QgY2hhciAqbmFtZSwgdW5zaWduZWQgaW50IG5hbWVsZW4sXG4tLVxuZnMvYWZzL2NlbGwuYz0yNDE9c3RydWN0IGFmc19jZWxsICphZnNfbG9va3VwX2NlbGwoc3RydWN0IGFmc19uZXQgKm5ldCxcbi0tXG5mcy9hZnMvY2VsbC5jLTI3Mi1cdCAqL1xuZnMvYWZzL2NlbGwuYzoyNzM6XHRjYW5kaWRhdGUgPSBhZnNfYWxsb2NfY2VsbChuZXQsIG5hbWUsIG5hbWVzeiwgdmxsaXN0KTtcbmZzL2Fmcy9jZWxsLmMtMjc0LVx0aWYgKElTX0VSUihjYW5kaWRhdGUpKSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NzMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIyIDA5OjMxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMzOTM2CgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogMjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKk5hdmlnYXRpbmcgdGhlIEFGUyBDb2RlYmFzZSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYGFmc19hbGxvY19jZWxsYC4gUmlnaHQgb2ZmIHRoZSBiYXQsIEkgbm90aWNlIGl0JiMzOTtzIGRlY2xhcmVkIGBzdGF0aWNgLiBUaGF0IGltbWVkaWF0ZWx5IGZsYWdzIHNvbWV0aGluZy4gVXN1YWxseSwgYHN0YXRpY2AgZnVuY3Rpb25zIGFyZSBrZXB0IHdpdGhpbiB0aGUgc2NvcGUgb2YgdGhlIGZpbGUsIG1lYW5pbmcgaXQmIzM5O3MgbGlrZWx5IGFuIGludGVybmFsIHV0aWxpdHkgZnVuY3Rpb24gZm9yIHRoYXQgc3BlY2lmaWMgbW9kdWxlLiBJIG5lZWQgdG8gZmlndXJlIG91dCBob3cgaXQmIzM5O3MgYmVpbmcgdXNlZC4gTm93LCBiYXNlZCBvbiB3aGF0IEkgY2FuIHNlZSwgSSBuZWVkIHRvIGNoZWNrIGBhZnNfbG9va3VwX2NlbGxgLiBUaGF0IHNlZW1zIHRvIGJlIHRoZSBsb2dpY2FsIG5leHQgc3RlcCB0byBmaWd1cmUgb3V0IHdoYXQgaXQgaXMgdXNlZCBmb3IuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NzQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIyIDA5OjMxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2Fmc19sb29rdXBfY2VsbCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL2Fmcy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvYWZzL2NlbGwuYz0xMDg9c3RhdGljIHN0cnVjdCBhZnNfY2VsbCAqYWZzX2FsbG9jX2NlbGwoc3RydWN0IGFmc19uZXQgKm5ldCxcbi0tXG5mcy9hZnMvY2VsbC5jLTIyNy0vKlxuZnMvYWZzL2NlbGwuYzoyMjg6ICogYWZzX2xvb2t1cF9jZWxsIC0gTG9vayB1cCBvciBjcmVhdGUgYSBjZWxsIHJlY29yZC5cbmZzL2Fmcy9jZWxsLmMtMjI5LSAqIEBuZXQ6XHRUaGUgbmV0d29yayBuYW1lc3BhY2Vcbi0tXG5mcy9hZnMvY2VsbC5jLTI0MC0gKi9cbmZzL2Fmcy9jZWxsLmM6MjQxOnN0cnVjdCBhZnNfY2VsbCAqYWZzX2xvb2t1cF9jZWxsKHN0cnVjdCBhZnNfbmV0ICpuZXQsXG5mcy9hZnMvY2VsbC5jLTI0Mi1cdFx0XHRcdCBjb25zdCBjaGFyICpuYW1lLCB1bnNpZ25lZCBpbnQgbmFtZXN6LFxuZnMvYWZzL2NlbGwuYy0yNDMtXHRcdFx0XHQgY29uc3QgY2hhciAqdmxsaXN0LFxuZnMvYWZzL2NlbGwuYzoyNDQ6XHRcdFx0XHQgZW51bSBhZnNfbG9va3VwX2NlbGxfZm9yIHJlYXNvbixcbmZzL2Fmcy9jZWxsLmMtMjQ1LVx0XHRcdFx0IGVudW0gYWZzX2NlbGxfdHJhY2UgdHJhY2UpXG4tLVxuZnMvYWZzL2NlbGwuYz00MTU9aW50IGFmc19jZWxsX2luaXQoc3RydWN0IGFmc19uZXQgKm5ldCwgY29uc3QgY2hhciAqcm9vdGNlbGwpXG4tLVxuZnMvYWZzL2NlbGwuYy00NDktXHQvKiBhbGxvY2F0ZSBhIGNlbGwgcmVjb3JkIGZvciB0aGUgcm9vdC93b3Jrc3RhdGlvbiBjZWxsICovXG5mcy9hZnMvY2VsbC5jOjQ1MDpcdG5ld19yb290ID0gYWZzX2xvb2t1cF9jZWxsKG5ldCwgcm9vdGNlbGwsIGxlbiwgdmxsaXN0LFxuZnMvYWZzL2NlbGwuYy00NTEtXHRcdFx0XHQgICBBRlNfTE9PS1VQX0NFTExfUk9PVENFTEwsXG4tLVxuZnMvYWZzL2R5bnJvb3QuYz05Mz1zdGF0aWMgc3RydWN0IGRlbnRyeSAqYWZzX2R5bnJvb3RfbG9va3VwX2NlbGwoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcbi0tXG5mcy9hZnMvZHlucm9vdC5jLTExMC1cbmZzL2Fmcy9keW5yb290LmM6MTExOlx0Y2VsbCA9IGFmc19sb29rdXBfY2VsbChuZXQsIG5hbWUsIGxlbiwgTlVMTCxcbmZzL2Fmcy9keW5yb290LmMtMTEyLVx0XHRcdCAgICAgICBBRlNfTE9PS1VQX0NFTExfRFlOUk9PVCxcbi0tXG5mcy9hZnMvaW50ZXJuYWwuaD0xMDYwPWV4dGVybiBzdHJ1Y3QgYWZzX2NlbGwgKmFmc19maW5kX2NlbGwoc3RydWN0IGFmc19uZXQgKiwgY29uc3QgY2hhciAqLCB1bnNpZ25lZCxcbmZzL2Fmcy9pbnRlcm5hbC5oLTEwNjEtXHRcdFx0XHQgICAgICBlbnVtIGFmc19jZWxsX3RyYWNlKTtcbmZzL2Fmcy9pbnRlcm5hbC5oOjEwNjI6ZW51bSBhZnNfbG9va3VwX2NlbGxfZm9yIHtcbmZzL2Fmcy9pbnRlcm5hbC5oLTEwNjMtXHRBRlNfTE9PS1VQX0NFTExfRFlOUk9PVCxcbi0tXG5mcy9hZnMvaW50ZXJuYWwuaC0xMDY5LX07XG5mcy9hZnMvaW50ZXJuYWwuaDoxMDcwOnN0cnVjdCBhZnNfY2VsbCAqYWZzX2xvb2t1cF9jZWxsKHN0cnVjdCBhZnNfbmV0ICpuZXQsXG5mcy9hZnMvaW50ZXJuYWwuaC0xMDcxLVx0XHRcdFx0IGNvbnN0IGNoYXIgKm5hbWUsIHVuc2lnbmVkIGludCBuYW1lc3osXG5mcy9hZnMvaW50ZXJuYWwuaC0xMDcyLVx0XHRcdFx0IGNvbnN0IGNoYXIgKnZsbGlzdCxcbmZzL2Fmcy9pbnRlcm5hbC5oOjEwNzM6XHRcdFx0XHQgZW51bSBhZnNfbG9va3VwX2NlbGxfZm9yIHJlYXNvbixcbmZzL2Fmcy9pbnRlcm5hbC5oLTEwNzQtXHRcdFx0XHQgZW51bSBhZnNfY2VsbF90cmFjZSB0cmFjZSk7XG4tLVxuZnMvYWZzL21udHB0LmM9NzE9c3RhdGljIGludCBhZnNfbW50cHRfc2V0X3BhcmFtcyhzdHJ1Y3QgZnNfY29udGV4dCAqZmMsIHN0cnVjdCBkZW50cnkgKm1udHB0KVxuLS1cbmZzL2Fmcy9tbnRwdC5jLTEwOS1cbmZzL2Fmcy9tbnRwdC5jOjExMDpcdFx0Y2VsbCA9IGFmc19sb29rdXBfY2VsbChjdHgtXHUwMDNlbmV0LCBwLCBzaXplLCBOVUxMLFxuZnMvYWZzL21udHB0LmMtMTExLVx0XHRcdFx0ICAgICAgIEFGU19MT09LVVBfQ0VMTF9NT1VOVFBPSU5ULFxuLS1cbmZzL2Fmcy9wcm9jLmM9ODg9c3RhdGljIGludCBhZnNfcHJvY19jZWxsc193cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciAqYnVmLCBzaXplX3Qgc2l6ZSlcbi0tXG5mcy9hZnMvcHJvYy5jLTEyNC1cbmZzL2Fmcy9wcm9jLmM6MTI1Olx0XHRjZWxsID0gYWZzX2xvb2t1cF9jZWxsKG5ldCwgbmFtZSwgc3RybGVuKG5hbWUpLCBhcmdzLFxuZnMvYWZzL3Byb2MuYy0xMjYtXHRcdFx0XHQgICAgICAgQUZTX0xPT0tVUF9DRUxMX1BSRUxPQUQsXG4tLVxuZnMvYWZzL3N1cGVyLmM9MjIzPXN0YXRpYyBpbnQgYWZzX3BhcnNlX3NvdXJjZShzdHJ1Y3QgZnNfY29udGV4dCAqZmMsIHN0cnVjdCBmc19wYXJhbWV0ZXIgKnBhcmFtKVxuLS1cbmZzL2Fmcy9zdXBlci5jLTI5MS1cdGlmIChjZWxsbmFtZSkge1xuZnMvYWZzL3N1cGVyLmM6MjkyOlx0XHRjZWxsID0gYWZzX2xvb2t1cF9jZWxsKGN0eC1cdTAwM2VuZXQsIGNlbGxuYW1lLCBjZWxsbmFtZXN6LFxuZnMvYWZzL3N1cGVyLmMtMjkzLVx0XHRcdFx0ICAgICAgIE5VTEwsIEFGU19MT09LVVBfQ0VMTF9ESVJFQ1RfTU9VTlQsXG4tLVxuZnMvYWZzL3ZsX2FsaWFzLmM9MjUzPXN0YXRpYyBpbnQgeWZzX2NoZWNrX2Nhbm9uaWNhbF9jZWxsX25hbWUoc3RydWN0IGFmc19jZWxsICpjZWxsLCBzdHJ1Y3Qga2V5ICprZXkpXG4tLVxuZnMvYWZzL3ZsX2FsaWFzLmMtMjcxLVx0ZWxzZVxuZnMvYWZzL3ZsX2FsaWFzLmM6MjcyOlx0XHRtYXN0ZXIgPSBhZnNfbG9va3VwX2NlbGwoY2VsbC1cdTAwM2VuZXQsIGNlbGxfbmFtZSwgbmFtZV9sZW4sIE5VTEwsXG5mcy9hZnMvdmxfYWxpYXMuYy0yNzMtXHRcdFx0XHRcdCBBRlNfTE9PS1VQX0NFTExfQUxJQVNfQ0hFQ0ssXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NzUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIyIDA5OjMxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM1MzYzCgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogMjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IGltbWVkaWF0ZSB0aG91Z2h0IHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIHRoZSBBRlMgQ29kZWJhc2UqKgoKT2theSwgc28gYGFmc19sb29rdXBfY2VsbGAuLi4gdGhhdCYjMzk7cyBhIGdsb2JhbCB2YXJpYWJsZSwgd2hpY2ggbWVhbnMgaXQmIzM5O3MgYSBwb3RlbnRpYWwgcG9pbnQgb2YgY29udGVudGlvbiBvciBhIHNoYXJlZCByZXNvdXJjZSBJIG5lZWQgdG8gYmUgbWluZGZ1bCBvZi4gVGhhdCBpbW1lZGlhdGVseSBmbGFncyBhIHBvdGVudGlhbCBpc3N1ZSwgZXNwZWNpYWxseSBpbiBhIGRpc3RyaWJ1dGVkIGZpbGVzeXN0ZW0gbGlrZSBBRlMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBpdCYjMzk7cyB1c2VkIGFuZCB3aGVyZSBpdCYjMzk7cyBtb2RpZmllZC4KCk5vdywgbGV0JiMzOTtzIHN3aXRjaCBnZWFycyBhbmQgZm9jdXMgb24gYGFmc19yZWFkZGlyYC4gSSYjMzk7bSBnb2luZyB0byBxdWlja2x5IHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSByZWFkZGlyIGZ1bmN0aW9uYWxpdHkgd2l0aGluIEFGUy4gSXQmIzM5O3MgY3J1Y2lhbCBmb3IgdW5kZXJzdGFuZGluZyBob3cgdGhlIHN5c3RlbSBpbnRlcmFjdHMgd2l0aCBkaXJlY3RvcmllcyBhbmQgaG93IGl0IGhhbmRsZXMgbGlzdGluZyBmaWxlIGNvbnRlbnRzLCB3aGljaCBpcyBnb2luZyB0byBiZSBpbXBvcnRhbnQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGdsb2JhbCB2YXJpYWJsZSBpcyBhY3R1YWxseSB1c2VkLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhlIGludGVyYWN0aW9ucywgaG93IGl0JiMzOTtzIGNhY2hlZCwgYW5kIGFueSBzeW5jaHJvbml6YXRpb24gaXQgbWF5IGhhdmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NzYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIyIDA5OjMxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2Fmc19yZWFkZGlyJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvYWZzLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9hZnMvZGlyLmM9MjQ9c3RhdGljIGludCBhZnNfZGlyX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpO1xuZnMvYWZzL2Rpci5jOjI1OnN0YXRpYyBpbnQgYWZzX3JlYWRkaXIoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBkaXJfY29udGV4dCAqY3R4KTtcbmZzL2Fmcy9kaXIuYy0yNi1zdGF0aWMgaW50IGFmc19kX3JldmFsaWRhdGUoc3RydWN0IGlub2RlICpkaXIsIGNvbnN0IHN0cnVjdCBxc3RyICpuYW1lLFxuLS1cbmZzL2Fmcy9kaXIuYz01Mj1jb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGFmc19kaXJfZmlsZV9vcGVyYXRpb25zID0ge1xuLS1cbmZzL2Fmcy9kaXIuYy01NC1cdC5yZWxlYXNlXHQ9IGFmc19yZWxlYXNlLFxuZnMvYWZzL2Rpci5jOjU1Olx0Lml0ZXJhdGVfc2hhcmVkXHQ9IGFmc19yZWFkZGlyLFxuZnMvYWZzL2Rpci5jLTU2LVx0LmxvY2tcdFx0PSBhZnNfbG9jayxcbi0tXG5mcy9hZnMvZGlyLmM9NTE1PXN0YXRpYyBpbnQgYWZzX2Rpcl9pdGVyYXRlKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGlyX2NvbnRleHQgKmN0eCxcbi0tXG5mcy9hZnMvZGlyLmMtNTUyLSAqL1xuZnMvYWZzL2Rpci5jOjU1MzpzdGF0aWMgaW50IGFmc19yZWFkZGlyKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgZGlyX2NvbnRleHQgKmN0eClcbmZzL2Fmcy9kaXIuYy01NTQte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjc3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMiAwOTozMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNTkwMgoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDI1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRob3NlIGxpbmVzIG9mIHRleHQ6CgoqKkRpZ2dpbmcgaW50byB0aGUgQUZTIEZpbGVzeXN0ZW0qKgoKT2theSwgc28gYGFmc19yZWFkZGlyYCBpcyBkZWZpbml0ZWx5IGEgZmlsZSBvcGVyYXRpb24sIHdoaWNoIG1ha2VzIHNlbnNlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGRpcmVjdG9yeSBzdHJ1Y3R1cmUgd2l0aGluIEFGUyBpcyB0cmF2ZXJzZWQuIExldCYjMzk7cyBkaWcgZGVlcGVyLiBUaGUgbmV4dCBsb2dpY2FsIGZ1bmN0aW9uIHRvIGludmVzdGlnYXRlIGluIGNvbmp1bmN0aW9uIHdpdGggYGFmc19yZWFkZGlyYCBpcyBgYWZzX2RvX2xvb2t1cF9vbmVgLiBJIGJldCB0aGF0JiMzOTtzIHdoZXJlIHRoZSBpbmRpdmlkdWFsIGRpcmVjdG9yeSBlbnRyaWVzIGFyZSBhY3R1YWxseSBiZWluZyByZXNvbHZlZCBkdXJpbmcgdGhlIHJlYWQgcHJvY2Vzcy4gSSYjMzk7bGwgbmVlZCB0byBjb25maXJtIGlmIGl0JiMzOTtzIHRoZSByaWdodCBmdW5jdGlvbiB0byBnbyB0aHJvdWdoLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjc4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMiAwOTozMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDthZnNfZG9fbG9va3VwX29uZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL2Fmcy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvYWZzL2Rpci5jPTU2Nj1zdGF0aWMgYm9vbCBhZnNfbG9va3VwX29uZV9maWxsZGlyKHN0cnVjdCBkaXJfY29udGV4dCAqY3R4LCBjb25zdCBjaGFyICpuYW1lLFxuLS1cbmZzL2Fmcy9kaXIuYy01OTctICovXG5mcy9hZnMvZGlyLmM6NTk4OnN0YXRpYyBpbnQgYWZzX2RvX2xvb2t1cF9vbmUoc3RydWN0IGlub2RlICpkaXIsIGNvbnN0IHN0cnVjdCBxc3RyICpuYW1lLFxuZnMvYWZzL2Rpci5jLTU5OS1cdFx0XHQgICAgIHN0cnVjdCBhZnNfZmlkICpmaWQsXG4tLVxuZnMvYWZzL2Rpci5jPTEwNTU9c3RhdGljIGludCBhZnNfZF9yZXZhbGlkYXRlKHN0cnVjdCBpbm9kZSAqcGFyZW50X2RpciwgY29uc3Qgc3RydWN0IHFzdHIgKm5hbWUsXG4tLVxuZnMvYWZzL2Rpci5jLTExMTEtXHQvKiBzZWFyY2ggdGhlIGRpcmVjdG9yeSBmb3IgdGhpcyB2bm9kZSAqL1xuZnMvYWZzL2Rpci5jOjExMTI6XHRyZXQgPSBhZnNfZG9fbG9va3VwX29uZShcdTAwMjZkaXItXHUwMDNlbmV0ZnMuaW5vZGUsIG5hbWUsIFx1MDAyNmZpZCwgXHUwMDI2ZGlyX3ZlcnNpb24pO1xuZnMvYWZzL2Rpci5jLTExMTMtXHRzd2l0Y2ggKHJldCkge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjc5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMiAwOTozMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNjMzOQoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDI0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOgoKKipOYXZpZ2F0aW5nIHRoZSBBRlMgTG9va3VwIEZ1bmN0aW9ucyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgc29tZSBBRlMgY29kZSwgc3BlY2lmaWNhbGx5IGFyb3VuZCB0aGUgbG9va3VwIGZ1bmN0aW9ucy4gRmlyc3QsIEkgc2VlIGBhZnNfZG9fbG9va3VwX29uZWAgYW5kIG15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRoYXQgdGhpcyBmdW5jdGlvbiBpcyBkZWNsYXJlZCBgc3RhdGljYC4gVGhhdCBtZWFucyBpdCYjMzk7cyBsaW1pdGVkIGluIHNjb3BlOyBpdCYjMzk7cyBub3QgbWVhbnQgdG8gYmUgY2FsbGVkIGRpcmVjdGx5IGZyb20gb3V0c2lkZSB0aGUgZmlsZSBpdCYjMzk7cyBkZWZpbmVkIGluLiBUaGlzIHN1Z2dlc3RzIGl0JiMzOTtzIGFuIGludGVybmFsIGhlbHBlciBmdW5jdGlvbiwgd2hpY2ggbWFrZXMgc2Vuc2UuIEkgb2Z0ZW4gc2VlIHN0YXRpYyBkZWNsYXJhdGlvbnMgdXNlZCB0byBlbmNhcHN1bGF0ZSBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzIGFuZCBwcmV2ZW50IGFjY2lkZW50YWwgZXh0ZXJuYWwgZGVwZW5kZW5jaWVzLgoKTm93LCBteSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byBleGFtaW5lIHRoZSBmdW5jdGlvbiB0aGF0ICpkb2VzKiBzZWVtIHRvIGJlIGRlc2lnbmVkIGZvciBicm9hZGVyIHVzZSwgdGhlIG9uZSB0aGF0IHByb2JhYmx5IGNhbGxzIGBhZnNfZG9fbG9va3VwX29uZWAuIExldCYjMzk7cyB0YWtlIGEgbG9vayBhdCBgYWZzX2RvX2xvb2t1cGAuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBpdCBvcmNoZXN0cmF0ZXMgdGhlIG92ZXJhbGwgbG9va3VwIHByb2Nlc3MsIGhvdyBpdCBoYW5kbGVzIHBvdGVudGlhbCBlcnJvcnMsIGFuZCB3aGF0IGRhdGEgc3RydWN0dXJlcyBpdCB1dGlsaXplcy4gVGhhdCB3aWxsIGdpdmUgbWUgdGhlIGJpZ2dlciBwaWN0dXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMiAwOTozMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDthZnNfZG9fbG9va3VwJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvYWZzLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9hZnMvZGlyLmM9NTY2PXN0YXRpYyBib29sIGFmc19sb29rdXBfb25lX2ZpbGxkaXIoc3RydWN0IGRpcl9jb250ZXh0ICpjdHgsIGNvbnN0IGNoYXIgKm5hbWUsXG4tLVxuZnMvYWZzL2Rpci5jLTU5Ny0gKi9cbmZzL2Fmcy9kaXIuYzo1OTg6c3RhdGljIGludCBhZnNfZG9fbG9va3VwX29uZShzdHJ1Y3QgaW5vZGUgKmRpciwgY29uc3Qgc3RydWN0IHFzdHIgKm5hbWUsXG5mcy9hZnMvZGlyLmMtNTk5LVx0XHRcdCAgICAgc3RydWN0IGFmc19maWQgKmZpZCxcbi0tXG5mcy9hZnMvZGlyLmM9NjM0PXN0YXRpYyBib29sIGFmc19sb29rdXBfZmlsbGRpcihzdHJ1Y3QgZGlyX2NvbnRleHQgKmN0eCwgY29uc3QgY2hhciAqbmFtZSxcbi0tXG5mcy9hZnMvZGlyLmMtNjYwLSAqL1xuZnMvYWZzL2Rpci5jOjY2MTpzdGF0aWMgdm9pZCBhZnNfZG9fbG9va3VwX3N1Y2Nlc3Moc3RydWN0IGFmc19vcGVyYXRpb24gKm9wKVxuZnMvYWZzL2Rpci5jLTY2Mi17XG4tLVxuZnMvYWZzL2Rpci5jPTcyMj1zdGF0aWMgY29uc3Qgc3RydWN0IGFmc19vcGVyYXRpb25fb3BzIGFmc19pbmxpbmVfYnVsa19zdGF0dXNfb3BlcmF0aW9uID0ge1xuLS1cbmZzL2Fmcy9kaXIuYy03MjQtXHQuaXNzdWVfeWZzX3JwY1x0PSB5ZnNfZnNfaW5saW5lX2J1bGtfc3RhdHVzLFxuZnMvYWZzL2Rpci5jOjcyNTpcdC5zdWNjZXNzXHQ9IGFmc19kb19sb29rdXBfc3VjY2VzcyxcbmZzL2Fmcy9kaXIuYy03MjYtfTtcbi0tXG5mcy9hZnMvZGlyLmM9NzI4PXN0YXRpYyBjb25zdCBzdHJ1Y3QgYWZzX29wZXJhdGlvbl9vcHMgYWZzX2xvb2t1cF9mZXRjaF9zdGF0dXNfb3BlcmF0aW9uID0ge1xuLS1cbmZzL2Fmcy9kaXIuYy03MzAtXHQuaXNzdWVfeWZzX3JwY1x0PSB5ZnNfZnNfZmV0Y2hfc3RhdHVzLFxuZnMvYWZzL2Rpci5jOjczMTpcdC5zdWNjZXNzXHQ9IGFmc19kb19sb29rdXBfc3VjY2VzcyxcbmZzL2Fmcy9kaXIuYy03MzItXHQuYWJvcnRlZFx0PSBhZnNfY2hlY2tfZm9yX3JlbW90ZV9kZWxldGlvbixcbi0tXG5mcy9hZnMvZGlyLmM9NzM5PXN0YXRpYyBib29sIGFmc19zZXJ2ZXJfc3VwcG9ydHNfaWJ1bGsoc3RydWN0IGFmc192bm9kZSAqZHZub2RlKVxuLS1cbmZzL2Fmcy9kaXIuYy03NzAtICovXG5mcy9hZnMvZGlyLmM6NzcxOnN0YXRpYyBzdHJ1Y3QgaW5vZGUgKmFmc19kb19sb29rdXAoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSlcbmZzL2Fmcy9kaXIuYy03NzIte1xuLS1cbmZzL2Fmcy9kaXIuYz05NjI9c3RhdGljIHN0cnVjdCBkZW50cnkgKmFmc19sb29rdXAoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcbi0tXG5mcy9hZnMvZGlyLmMtMTAwMC1cdGFmc19zdGF0X3YoZHZub2RlLCBuX2xvb2t1cCk7XG5mcy9hZnMvZGlyLmM6MTAwMTpcdGlub2RlID0gYWZzX2RvX2xvb2t1cChkaXIsIGRlbnRyeSk7XG5mcy9hZnMvZGlyLmMtMTAwMi1cdGlmIChpbm9kZSA9PSBFUlJfUFRSKC1FTk9FTlQpKVxuLS1cbmZzL2Fmcy9kaXIuYz0xMDU1PXN0YXRpYyBpbnQgYWZzX2RfcmV2YWxpZGF0ZShzdHJ1Y3QgaW5vZGUgKnBhcmVudF9kaXIsIGNvbnN0IHN0cnVjdCBxc3RyICpuYW1lLFxuLS1cbmZzL2Fmcy9kaXIuYy0xMTExLVx0Lyogc2VhcmNoIHRoZSBkaXJlY3RvcnkgZm9yIHRoaXMgdm5vZGUgKi9cbmZzL2Fmcy9kaXIuYzoxMTEyOlx0cmV0ID0gYWZzX2RvX2xvb2t1cF9vbmUoXHUwMDI2ZGlyLVx1MDAzZW5ldGZzLmlub2RlLCBuYW1lLCBcdTAwMjZmaWQsIFx1MDAyNmRpcl92ZXJzaW9uKTtcbmZzL2Fmcy9kaXIuYy0xMTEzLVx0c3dpdGNoIChyZXQpIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44MS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjIgMDk6MzE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzc0MTYKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiAyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOgoKKipBbmFseXppbmcgdGhlIExvb2t1cCBGdW5jdGlvbnMgaW4gQUZTKioKCk9rYXksIHNvIGBhZnNfZG9fbG9va3VwYCBpcyBmbGFnZ2VkIGFzIGJlaW5nIGEgc3RhdGljIGZ1bmN0aW9uLiBUaGF0JiMzOTtzIGltbWVkaWF0ZWx5IGludGVyZXN0aW5nLiBJdCBtZWFucyBpdCYjMzk7cyBvbmx5IHZpc2libGUgd2l0aGluIGl0cyBjb21waWxhdGlvbiB1bml0IGFuZCBub3QgZGlyZWN0bHkgYWNjZXNzaWJsZSBmcm9tIG90aGVyIG1vZHVsZXMuIFRoaXMgaW1wbGllcyBhIG1vcmUgY29uc3RyYWluZWQgcm9sZSwgbGlrZWx5IGEgaGVscGVyIGZ1bmN0aW9uIG9yIGFuIGludGVybmFsIGRldGFpbCBvZiBzb21lIGxhcmdlciBsb29rdXAgcHJvY2Vzcy4KCk5vdywgdGhhdCBicmluZ3MgbWUgdG8gYGFmc19sb29rdXBgLiBTaW5jZSBgYWZzX2RvX2xvb2t1cGAgaXMgc3RhdGljLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcmVsYXRpb25zaGlwIHdpdGggYGFmc19sb29rdXBgLiBJcyBgYWZzX2xvb2t1cGAgdGhlIHB1YmxpYyBlbnRyeSBwb2ludD8gSXMgaXQgdGhlIGZ1bmN0aW9uIHRoYXQgKmNhbGxzKiBgYWZzX2RvX2xvb2t1cGA/IEkgbmVlZCB0byBkaWcgZGVlcGVyIGludG8gdGhlIGNvZGUgdG8gdHJhY2UgdGhlIGNhbGwgZmxvdyBhbmQgdW5kZXJzdGFuZCBob3cgdGhpcyBzdGF0aWMgZnVuY3Rpb24gaXMgYmVpbmcgbGV2ZXJhZ2VkLiBFeGFtaW5pbmcgYGFmc19sb29rdXBgIHdpbGwgbGlrZWx5IHRlbGwgbWUgdGhlIHNjb3BlLCBwdXJwb3NlLCBhbmQgcmVsYXRpb25zaGlwIGJldHdlZW4gdGhlIHR3byBsb29rdXAgZnVuY3Rpb25zLiBUaGlzIHdpbGwgaGVscCBjbGFyaWZ5IHRoZSBvdmVyYWxsIGRlc2lnbiBvZiB0aGUgQUZTIGxvb2t1cCBtZWNoYW5pc20uIE15IGh1bmNoIGlzIHRoYXQgYGFmc19sb29rdXBgIG1pZ2h0IGJlIGhhbmRsaW5nIHNvbWUgaW5pdGlhbCBzZXR1cCBvciBjaGVja3MgYmVmb3JlIHBhc3NpbmcgdGhlIHdvcmsgb2ZmIHRvIHRoZSBwcml2YXRlIGBhZnNfZG9fbG9va3VwYCBpbXBsZW1lbnRhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44Mi8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjIgMDk6MzE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YWZzX2xvb2t1cCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL2Fmcy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvYWZzL2NhbGxiYWNrLmM9MTAxPXZvaWQgYWZzX2JyZWFrX2NhbGxiYWNrKHN0cnVjdCBhZnNfdm5vZGUgKnZub2RlLCBlbnVtIGFmc19jYl9icmVha19yZWFzb24gcmVhc29uKVxuLS1cbmZzL2Fmcy9jYWxsYmFjay5jLTExMC0gKi9cbmZzL2Fmcy9jYWxsYmFjay5jOjExMTpzdGF0aWMgc3RydWN0IGFmc192b2x1bWUgKmFmc19sb29rdXBfdm9sdW1lX3JjdShzdHJ1Y3QgYWZzX2NlbGwgKmNlbGwsXG5mcy9hZnMvY2FsbGJhY2suYy0xMTItXHRcdFx0XHRcdFx0YWZzX3ZvbGlkX3QgdmlkKVxuLS1cbmZzL2Fmcy9jYWxsYmFjay5jPTIwNj1zdGF0aWMgdm9pZCBhZnNfYnJlYWtfc29tZV9jYWxsYmFja3Moc3RydWN0IGFmc19zZXJ2ZXIgKnNlcnZlcixcbi0tXG5mcy9hZnMvY2FsbGJhY2suYy0yMTUtXHRyY3VfcmVhZF9sb2NrKCk7XG5mcy9hZnMvY2FsbGJhY2suYzoyMTY6XHR2b2x1bWUgPSBhZnNfbG9va3VwX3ZvbHVtZV9yY3Uoc2VydmVyLVx1MDAzZWNlbGwsIHZpZCk7XG5mcy9hZnMvY2FsbGJhY2suYy0yMTctXHRpZiAoIXZvbHVtZSkge1xuLS1cbmZzL2Fmcy9jZWxsLmM9MTA4PXN0YXRpYyBzdHJ1Y3QgYWZzX2NlbGwgKmFmc19hbGxvY19jZWxsKHN0cnVjdCBhZnNfbmV0ICpuZXQsXG4tLVxuZnMvYWZzL2NlbGwuYy0yMjctLypcbmZzL2Fmcy9jZWxsLmM6MjI4OiAqIGFmc19sb29rdXBfY2VsbCAtIExvb2sgdXAgb3IgY3JlYXRlIGEgY2VsbCByZWNvcmQuXG5mcy9hZnMvY2VsbC5jLTIyOS0gKiBAbmV0Olx0VGhlIG5ldHdvcmsgbmFtZXNwYWNlXG4tLVxuZnMvYWZzL2NlbGwuYy0yNDAtICovXG5mcy9hZnMvY2VsbC5jOjI0MTpzdHJ1Y3QgYWZzX2NlbGwgKmFmc19sb29rdXBfY2VsbChzdHJ1Y3QgYWZzX25ldCAqbmV0LFxuZnMvYWZzL2NlbGwuYy0yNDItXHRcdFx0XHQgY29uc3QgY2hhciAqbmFtZSwgdW5zaWduZWQgaW50IG5hbWVzeixcbmZzL2Fmcy9jZWxsLmMtMjQzLVx0XHRcdFx0IGNvbnN0IGNoYXIgKnZsbGlzdCxcbmZzL2Fmcy9jZWxsLmM6MjQ0Olx0XHRcdFx0IGVudW0gYWZzX2xvb2t1cF9jZWxsX2ZvciByZWFzb24sXG5mcy9hZnMvY2VsbC5jLTI0NS1cdFx0XHRcdCBlbnVtIGFmc19jZWxsX3RyYWNlIHRyYWNlKVxuLS1cbmZzL2Fmcy9jZWxsLmM9NDE1PWludCBhZnNfY2VsbF9pbml0KHN0cnVjdCBhZnNfbmV0ICpuZXQsIGNvbnN0IGNoYXIgKnJvb3RjZWxsKVxuLS1cbmZzL2Fmcy9jZWxsLmMtNDQ5LVx0LyogYWxsb2NhdGUgYSBjZWxsIHJlY29yZCBmb3IgdGhlIHJvb3Qvd29ya3N0YXRpb24gY2VsbCAqL1xuZnMvYWZzL2NlbGwuYzo0NTA6XHRuZXdfcm9vdCA9IGFmc19sb29rdXBfY2VsbChuZXQsIHJvb3RjZWxsLCBsZW4sIHZsbGlzdCxcbmZzL2Fmcy9jZWxsLmMtNDUxLVx0XHRcdFx0ICAgQUZTX0xPT0tVUF9DRUxMX1JPT1RDRUxMLFxuLS1cbmZzL2Fmcy9kaXIuYy0yMS1cbmZzL2Fmcy9kaXIuYzoyMjpzdGF0aWMgc3RydWN0IGRlbnRyeSAqYWZzX2xvb2t1cChzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxuZnMvYWZzL2Rpci5jLTIzLVx0XHRcdFx0IHVuc2lnbmVkIGludCBmbGFncyk7XG4tLVxuZnMvYWZzL2Rpci5jPTI5PXN0YXRpYyB2b2lkIGFmc19kX2lwdXQoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgaW5vZGUgKmlub2RlKTtcbmZzL2Fmcy9kaXIuYzozMDpzdGF0aWMgYm9vbCBhZnNfbG9va3VwX29uZV9maWxsZGlyKHN0cnVjdCBkaXJfY29udGV4dCAqY3R4LCBjb25zdCBjaGFyICpuYW1lLCBpbnQgbmxlbixcbmZzL2Fmcy9kaXIuYy0zMS1cdFx0XHRcdCAgIHU2NCBpbm8sIHUzMiB1bmlxdWlmaWVyKTtcbmZzL2Fmcy9kaXIuYy0zMi0jZGVmaW5lIEFGU19MT09LVVBfT05FICgoZmlsbGRpcl90KTB4MTIzVUwpXG5mcy9hZnMvZGlyLmM6MzM6c3RhdGljIGJvb2wgYWZzX2xvb2t1cF9maWxsZGlyKHN0cnVjdCBkaXJfY29udGV4dCAqY3R4LCBjb25zdCBjaGFyICpuYW1lLCBpbnQgbmxlbixcbmZzL2Fmcy9kaXIuYy0zNC1cdFx0XHQgICAgICAgdTY0IGlubywgdTMyIHVuaXF1aWZpZXIpO1xuLS1cbmZzL2Fmcy9kaXIuYz02MD1jb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBhZnNfZGlyX2lub2RlX29wZXJhdGlvbnMgPSB7XG5mcy9hZnMvZGlyLmMtNjEtXHQuY3JlYXRlXHRcdD0gYWZzX2NyZWF0ZSxcbmZzL2Fmcy9kaXIuYzo2MjpcdC5sb29rdXBcdFx0PSBhZnNfbG9va3VwLFxuZnMvYWZzL2Rpci5jLTYzLVx0LmxpbmtcdFx0PSBhZnNfbGluayxcbi0tXG5mcy9hZnMvZGlyLmM9Nzg9Y29uc3Qgc3RydWN0IGRlbnRyeV9vcGVyYXRpb25zIGFmc19mc19kZW50cnlfb3BlcmF0aW9ucyA9IHtcbi0tXG5mcy9hZnMvZGlyLmMtODUtXG5mcy9hZnMvZGlyLmM6ODY6c3RydWN0IGFmc19sb29rdXBfb25lX2Nvb2tpZSB7XG5mcy9hZnMvZGlyLmMtODctXHRzdHJ1Y3QgZGlyX2NvbnRleHRcdGN0eDtcbi0tXG5mcy9hZnMvZGlyLmMtOTItXG5mcy9hZnMvZGlyLmM6OTM6c3RydWN0IGFmc19sb29rdXBfY29va2llIHtcbmZzL2Fmcy9kaXIuYy05NC1cdHN0cnVjdCBkaXJfY29udGV4dFx0Y3R4O1xuLS1cbmZzL2Fmcy9kaXIuYz0zNTc9c3RhdGljIGludCBhZnNfZGlyX2l0ZXJhdGVfYmxvY2soc3RydWN0IGFmc192bm9kZSAqZHZub2RlLFxuLS1cbmZzL2Fmcy9kaXIuYy00MjYtXHRcdGlmIChjdHgtXHUwMDNlYWN0b3IgPT0gQUZTX0xPT0tVUCkge1xuZnMvYWZzL2Rpci5jOjQyNzpcdFx0XHRpZiAoIWFmc19sb29rdXBfZmlsbGRpcihjdHgsIGRpcmUtXHUwMDNldS5uYW1lLCBubGVuLFxuZnMvYWZzL2Rpci5jLTQyOC1cdFx0XHRcdFx0XHRudG9obChkaXJlLVx1MDAzZXUudm5vZGUpLFxuLS1cbmZzL2Fmcy9kaXIuYy00MzEtXHRcdH0gZWxzZSBpZiAoY3R4LVx1MDAzZWFjdG9yID09IEFGU19MT09LVVBfT05FKSB7XG5mcy9hZnMvZGlyLmM6NDMyOlx0XHRcdGlmICghYWZzX2xvb2t1cF9vbmVfZmlsbGRpcihjdHgsIGRpcmUtXHUwMDNldS5uYW1lLCBubGVuLFxuZnMvYWZzL2Rpci5jLTQzMy1cdFx0XHRcdFx0XHQgICAgbnRvaGwoZGlyZS1cdTAwM2V1LnZub2RlKSxcbi0tXG5mcy9hZnMvZGlyLmM9NTUzPXN0YXRpYyBpbnQgYWZzX3JlYWRkaXIoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBkaXJfY29udGV4dCAqY3R4KVxuLS1cbmZzL2Fmcy9kaXIuYy01NjUtICovXG5mcy9hZnMvZGlyLmM6NTY2OnN0YXRpYyBib29sIGFmc19sb29rdXBfb25lX2ZpbGxkaXIoc3RydWN0IGRpcl9jb250ZXh0ICpjdHgsIGNvbnN0IGNoYXIgKm5hbWUsXG5mcy9hZnMvZGlyLmMtNTY3LVx0XHRcdFx0ICBpbnQgbmxlbiwgdTY0IGlubywgdTMyIHVuaXF1aWZpZXIpXG5mcy9hZnMvZGlyLmMtNTY4LXtcbmZzL2Fmcy9kaXIuYzo1Njk6XHRzdHJ1Y3QgYWZzX2xvb2t1cF9vbmVfY29va2llICpjb29raWUgPVxuZnMvYWZzL2Rpci5jOjU3MDpcdFx0Y29udGFpbmVyX29mKGN0eCwgc3RydWN0IGFmc19sb29rdXBfb25lX2Nvb2tpZSwgY3R4KTtcbmZzL2Fmcy9kaXIuYy01NzEtXG4tLVxuZnMvYWZzL2Rpci5jPTU5OD1zdGF0aWMgaW50IGFmc19kb19sb29rdXBfb25lKHN0cnVjdCBpbm9kZSAqZGlyLCBjb25zdCBzdHJ1Y3QgcXN0ciAqbmFtZSxcbi0tXG5mcy9hZnMvZGlyLmMtNjAyLVx0c3RydWN0IGFmc19zdXBlcl9pbmZvICphcyA9IGRpci1cdTAwM2VpX3NiLVx1MDAzZXNfZnNfaW5mbztcbmZzL2Fmcy9kaXIuYzo2MDM6XHRzdHJ1Y3QgYWZzX2xvb2t1cF9vbmVfY29va2llIGNvb2tpZSA9IHtcbmZzL2Fmcy9kaXIuYy02MDQtXHRcdC5jdHguYWN0b3IgPSBBRlNfTE9PS1VQX09ORSxcbi0tXG5mcy9hZnMvZGlyLmMtNjMzLSAqL1xuZnMvYWZzL2Rpci5jOjYzNDpzdGF0aWMgYm9vbCBhZnNfbG9va3VwX2ZpbGxkaXIoc3RydWN0IGRpcl9jb250ZXh0ICpjdHgsIGNvbnN0IGNoYXIgKm5hbWUsXG5mcy9hZnMvZGlyLmMtNjM1LVx0XHRcdCAgICAgIGludCBubGVuLCB1NjQgaW5vLCB1MzIgdW5pcXVpZmllcilcbmZzL2Fmcy9kaXIuYy02MzYte1xuZnMvYWZzL2Rpci5jOjYzNzpcdHN0cnVjdCBhZnNfbG9va3VwX2Nvb2tpZSAqY29va2llID1cbmZzL2Fmcy9kaXIuYzo2Mzg6XHRcdGNvbnRhaW5lcl9vZihjdHgsIHN0cnVjdCBhZnNfbG9va3VwX2Nvb2tpZSwgY3R4KTtcbmZzL2Fmcy9kaXIuYy02MzktXG4tLVxuZnMvYWZzL2Rpci5jPTcyMj1zdGF0aWMgY29uc3Qgc3RydWN0IGFmc19vcGVyYXRpb25fb3BzIGFmc19pbmxpbmVfYnVsa19zdGF0dXNfb3BlcmF0aW9uID0ge1xuLS1cbmZzL2Fmcy9kaXIuYy03MjctXG5mcy9hZnMvZGlyLmM6NzI4OnN0YXRpYyBjb25zdCBzdHJ1Y3QgYWZzX29wZXJhdGlvbl9vcHMgYWZzX2xvb2t1cF9mZXRjaF9zdGF0dXNfb3BlcmF0aW9uID0ge1xuZnMvYWZzL2Rpci5jLTcyOS1cdC5pc3N1ZV9hZnNfcnBjXHQ9IGFmc19mc19mZXRjaF9zdGF0dXMsXG4tLVxuZnMvYWZzL2Rpci5jPTc3MT1zdGF0aWMgc3RydWN0IGlub2RlICphZnNfZG9fbG9va3VwKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpXG5mcy9hZnMvZGlyLmMtNzcyLXtcbmZzL2Fmcy9kaXIuYzo3NzM6XHRzdHJ1Y3QgYWZzX2xvb2t1cF9jb29raWUgKmNvb2tpZTtcbmZzL2Fmcy9kaXIuYy03NzQtXHRzdHJ1Y3QgYWZzX3Zub2RlX3BhcmFtICp2cDtcbi0tXG5mcy9hZnMvZGlyLmMtNzg0LVxuZnMvYWZzL2Rpci5jOjc4NTpcdGNvb2tpZSA9IGt6YWxsb2Nfb2JqKHN0cnVjdCBhZnNfbG9va3VwX2Nvb2tpZSk7XG5mcy9hZnMvZGlyLmMtNzg2LVx0aWYgKCFjb29raWUpXG4tLVxuZnMvYWZzL2Rpci5jLTg3Ny1cdFx0b3AtXHUwMDNlZmV0Y2hfc3RhdHVzLndoaWNoID0gMTtcbmZzL2Fmcy9kaXIuYzo4Nzg6XHRcdG9wLVx1MDAzZW9wcyA9IFx1MDAyNmFmc19sb29rdXBfZmV0Y2hfc3RhdHVzX29wZXJhdGlvbjtcbmZzL2Fmcy9kaXIuYy04NzktXHRcdGFmc19iZWdpbl92bm9kZV9vcGVyYXRpb24ob3ApO1xuLS1cbmZzL2Fmcy9kaXIuYy05MDctICovXG5mcy9hZnMvZGlyLmM6OTA4OnN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICphZnNfbG9va3VwX2F0c3lzKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpXG5mcy9hZnMvZGlyLmMtOTA5LXtcbi0tXG5mcy9hZnMvZGlyLmMtOTYxLSAqL1xuZnMvYWZzL2Rpci5jOjk2MjpzdGF0aWMgc3RydWN0IGRlbnRyeSAqYWZzX2xvb2t1cChzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxuZnMvYWZzL2Rpci5jLTk2My1cdFx0XHRcdCB1bnNpZ25lZCBpbnQgZmxhZ3MpXG4tLVxuZnMvYWZzL2Rpci5jLTk5Ny1cdCAgICBkZW50cnktXHUwMDNlZF9uYW1lLm5hbWVbZGVudHJ5LVx1MDAzZWRfbmFtZS5sZW4gLSAxXSA9PSAmIzM5O3MmIzM5OylcbmZzL2Fmcy9kaXIuYzo5OTg6XHRcdHJldHVybiBhZnNfbG9va3VwX2F0c3lzKGRpciwgZGVudHJ5KTtcbmZzL2Fmcy9kaXIuYy05OTktXG4tLVxuZnMvYWZzL2Rpci5jLTEwMTAtXHRcdGQtXHUwMDNlZF9mc2RhdGEgPSBkZW50cnktXHUwMDNlZF9mc2RhdGE7XG5mcy9hZnMvZGlyLmM6MTAxMTpcdFx0dHJhY2VfYWZzX2xvb2t1cChkdm5vZGUsIFx1MDAyNmQtXHUwMDNlZF9uYW1lLCBcdTAwMjZmaWQpO1xuZnMvYWZzL2Rpci5jLTEwMTItXHR9IGVsc2Uge1xuZnMvYWZzL2Rpci5jOjEwMTM6XHRcdHRyYWNlX2Fmc19sb29rdXAoZHZub2RlLCBcdTAwMjZkZW50cnktXHUwMDNlZF9uYW1lLCBcdTAwMjZmaWQpO1xuZnMvYWZzL2Rpci5jLTEwMTQtXHR9XG4tLVxuZnMvYWZzL2R5bnJvb3QuYy0xNS1cbmZzL2Fmcy9keW5yb290LmM6MTY6c3RhdGljIHN0cnVjdCBkZW50cnkgKmFmc19sb29rdXBfYXRjZWxsKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIGlub190IGlubyk7XG5mcy9hZnMvZHlucm9vdC5jLTE3LVxuLS1cbmZzL2Fmcy9keW5yb290LmM9OTM9c3RhdGljIHN0cnVjdCBkZW50cnkgKmFmc19keW5yb290X2xvb2t1cF9jZWxsKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXG4tLVxuZnMvYWZzL2R5bnJvb3QuYy0xMTAtXG5mcy9hZnMvZHlucm9vdC5jOjExMTpcdGNlbGwgPSBhZnNfbG9va3VwX2NlbGwobmV0LCBuYW1lLCBsZW4sIE5VTEwsXG5mcy9hZnMvZHlucm9vdC5jLTExMi1cdFx0XHQgICAgICAgQUZTX0xPT0tVUF9DRUxMX0RZTlJPT1QsXG4tLVxuZnMvYWZzL2R5bnJvb3QuYz0xMzk9c3RhdGljIHN0cnVjdCBkZW50cnkgKmFmc19keW5yb290X2xvb2t1cChzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxuLS1cbmZzL2Fmcy9keW5yb290LmMtMTUzLVx0ICAgIG1lbWNtcChkZW50cnktXHUwMDNlZF9uYW1lLm5hbWUsIFwmIzM0O0BjZWxsXCYjMzQ7LCA1KSA9PSAwKVxuZnMvYWZzL2R5bnJvb3QuYzoxNTQ6XHRcdHJldHVybiBhZnNfbG9va3VwX2F0Y2VsbChkaXIsIGRlbnRyeSwgMik7XG5mcy9hZnMvZHlucm9vdC5jLTE1NS1cbi0tXG5mcy9hZnMvZHlucm9vdC5jLTE1Ny1cdCAgICBtZW1jbXAoZGVudHJ5LVx1MDAzZWRfbmFtZS5uYW1lLCBcJiMzNDsuQGNlbGxcJiMzNDssIDYpID09IDApXG5mcy9hZnMvZHlucm9vdC5jOjE1ODpcdFx0cmV0dXJuIGFmc19sb29rdXBfYXRjZWxsKGRpciwgZGVudHJ5LCAzKTtcbmZzL2Fmcy9keW5yb290LmMtMTU5LVxuLS1cbmZzL2Fmcy9keW5yb290LmM9MjQyPXN0YXRpYyBjb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBhZnNfYXRjZWxsX2lub2RlX29wZXJhdGlvbnMgPSB7XG4tLVxuZnMvYWZzL2R5bnJvb3QuYy0yNDgtICovXG5mcy9hZnMvZHlucm9vdC5jOjI0OTpzdGF0aWMgc3RydWN0IGRlbnRyeSAqYWZzX2xvb2t1cF9hdGNlbGwoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgaW5vX3QgaW5vKVxuZnMvYWZzL2R5bnJvb3QuYy0yNTAte1xuLS1cbmZzL2Fmcy9pbnRlcm5hbC5oPTEwNjA9ZXh0ZXJuIHN0cnVjdCBhZnNfY2VsbCAqYWZzX2ZpbmRfY2VsbChzdHJ1Y3QgYWZzX25ldCAqLCBjb25zdCBjaGFyICosIHVuc2lnbmVkLFxuZnMvYWZzL2ludGVybmFsLmgtMTA2MS1cdFx0XHRcdCAgICAgIGVudW0gYWZzX2NlbGxfdHJhY2UpO1xuZnMvYWZzL2ludGVybmFsLmg6MTA2MjplbnVtIGFmc19sb29rdXBfY2VsbF9mb3Ige1xuZnMvYWZzL2ludGVybmFsLmgtMTA2My1cdEFGU19MT09LVVBfQ0VMTF9EWU5ST09ULFxuLS1cbmZzL2Fmcy9pbnRlcm5hbC5oLTEwNjktfTtcbmZzL2Fmcy9pbnRlcm5hbC5oOjEwNzA6c3RydWN0IGFmc19jZWxsICphZnNfbG9va3VwX2NlbGwoc3RydWN0IGFmc19uZXQgKm5ldCxcbmZzL2Fmcy9pbnRlcm5hbC5oLTEwNzEtXHRcdFx0XHQgY29uc3QgY2hhciAqbmFtZSwgdW5zaWduZWQgaW50IG5hbWVzeixcbmZzL2Fmcy9pbnRlcm5hbC5oLTEwNzItXHRcdFx0XHQgY29uc3QgY2hhciAqdmxsaXN0LFxuZnMvYWZzL2ludGVybmFsLmg6MTA3MzpcdFx0XHRcdCBlbnVtIGFmc19sb29rdXBfY2VsbF9mb3IgcmVhc29uLFxuZnMvYWZzL2ludGVybmFsLmgtMTA3NC1cdFx0XHRcdCBlbnVtIGFmc19jZWxsX3RyYWNlIHRyYWNlKTtcbi0tXG5mcy9hZnMvaW50ZXJuYWwuaD0xNTQwPXN0cnVjdCBhZnNfc2VydmVyICphZnNfZmluZF9zZXJ2ZXIoY29uc3Qgc3RydWN0IHJ4cnBjX3BlZXIgKnBlZXIpO1xuZnMvYWZzL2ludGVybmFsLmg6MTU0MTpleHRlcm4gc3RydWN0IGFmc19zZXJ2ZXIgKmFmc19sb29rdXBfc2VydmVyKHN0cnVjdCBhZnNfY2VsbCAqLCBzdHJ1Y3Qga2V5ICosIGNvbnN0IHV1aWRfdCAqLCB1MzIpO1xuZnMvYWZzL2ludGVybmFsLmgtMTU0Mi1leHRlcm4gc3RydWN0IGFmc19zZXJ2ZXIgKmFmc19nZXRfc2VydmVyKHN0cnVjdCBhZnNfc2VydmVyICosIGVudW0gYWZzX3NlcnZlcl90cmFjZSk7XG4tLVxuZnMvYWZzL21udHB0LmM9NzE9c3RhdGljIGludCBhZnNfbW50cHRfc2V0X3BhcmFtcyhzdHJ1Y3QgZnNfY29udGV4dCAqZmMsIHN0cnVjdCBkZW50cnkgKm1udHB0KVxuLS1cbmZzL2Fmcy9tbnRwdC5jLTEwOS1cbmZzL2Fmcy9tbnRwdC5jOjExMDpcdFx0Y2VsbCA9IGFmc19sb29rdXBfY2VsbChjdHgtXHUwMDNlbmV0LCBwLCBzaXplLCBOVUxMLFxuZnMvYWZzL21udHB0LmMtMTExLVx0XHRcdFx0ICAgICAgIEFGU19MT09LVVBfQ0VMTF9NT1VOVFBPSU5ULFxuLS1cbmZzL2Fmcy9wcm9jLmM9ODg9c3RhdGljIGludCBhZnNfcHJvY19jZWxsc193cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciAqYnVmLCBzaXplX3Qgc2l6ZSlcbi0tXG5mcy9hZnMvcHJvYy5jLTEyNC1cbmZzL2Fmcy9wcm9jLmM6MTI1Olx0XHRjZWxsID0gYWZzX2xvb2t1cF9jZWxsKG5ldCwgbmFtZSwgc3RybGVuKG5hbWUpLCBhcmdzLFxuZnMvYWZzL3Byb2MuYy0xMjYtXHRcdFx0XHQgICAgICAgQUZTX0xPT0tVUF9DRUxMX1BSRUxPQUQsXG4tLVxuZnMvYWZzL3NlcnZlci5jPTE1Mj1zdGF0aWMgc3RydWN0IGFmc19hZGRyX2xpc3QgKmFmc192bF9sb29rdXBfYWRkcnMoc3RydWN0IGFmc19zZXJ2ZXIgKnNlcnZlcixcbi0tXG5mcy9hZnMvc2VydmVyLmMtMTc3LSAqL1xuZnMvYWZzL3NlcnZlci5jOjE3ODpzdHJ1Y3QgYWZzX3NlcnZlciAqYWZzX2xvb2t1cF9zZXJ2ZXIoc3RydWN0IGFmc19jZWxsICpjZWxsLCBzdHJ1Y3Qga2V5ICprZXksXG5mcy9hZnMvc2VydmVyLmMtMTc5LVx0XHRcdFx0ICAgICBjb25zdCB1dWlkX3QgKnV1aWQsIHUzMiBhZGRyX3ZlcnNpb24pXG4tLVxuZnMvYWZzL3NlcnZlcl9saXN0LmM9Mjc9c3RydWN0IGFmc19zZXJ2ZXJfbGlzdCAqYWZzX2FsbG9jX3NlcnZlcl9saXN0KHN0cnVjdCBhZnNfdm9sdW1lICp2b2x1bWUsXG4tLVxuZnMvYWZzL3NlcnZlcl9saXN0LmMtODEtXG5mcy9hZnMvc2VydmVyX2xpc3QuYzo4MjpcdFx0c2VydmVyID0gYWZzX2xvb2t1cF9zZXJ2ZXIodm9sdW1lLVx1MDAzZWNlbGwsIGtleSwgXHUwMDI2dmxkYi1cdTAwM2Vmc19zZXJ2ZXJbaV0sXG5mcy9hZnMvc2VydmVyX2xpc3QuYy04My1cdFx0XHRcdFx0ICAgdmxkYi1cdTAwM2VhZGRyX3ZlcnNpb25baV0pO1xuLS1cbmZzL2Fmcy9zdXBlci5jPTIyMz1zdGF0aWMgaW50IGFmc19wYXJzZV9zb3VyY2Uoc3RydWN0IGZzX2NvbnRleHQgKmZjLCBzdHJ1Y3QgZnNfcGFyYW1ldGVyICpwYXJhbSlcbi0tXG5mcy9hZnMvc3VwZXIuYy0yOTEtXHRpZiAoY2VsbG5hbWUpIHtcbmZzL2Fmcy9zdXBlci5jOjI5MjpcdFx0Y2VsbCA9IGFmc19sb29rdXBfY2VsbChjdHgtXHUwMDNlbmV0LCBjZWxsbmFtZSwgY2VsbG5hbWVzeixcbmZzL2Fmcy9zdXBlci5jLTI5My1cdFx0XHRcdCAgICAgICBOVUxMLCBBRlNfTE9PS1VQX0NFTExfRElSRUNUX01PVU5ULFxuLS1cbmZzL2Fmcy92bF9hbGlhcy5jPTI1Mz1zdGF0aWMgaW50IHlmc19jaGVja19jYW5vbmljYWxfY2VsbF9uYW1lKHN0cnVjdCBhZnNfY2VsbCAqY2VsbCwgc3RydWN0IGtleSAqa2V5KVxuLS1cbmZzL2Fmcy92bF9hbGlhcy5jLTI3MS1cdGVsc2VcbmZzL2Fmcy92bF9hbGlhcy5jOjI3MjpcdFx0bWFzdGVyID0gYWZzX2xvb2t1cF9jZWxsKGNlbGwtXHUwMDNlbmV0LCBjZWxsX25hbWUsIG5hbWVfbGVuLCBOVUxMLFxuZnMvYWZzL3ZsX2FsaWFzLmMtMjczLVx0XHRcdFx0XHQgQUZTX0xPT0tVUF9DRUxMX0FMSUFTX0NIRUNLLFxuLS1cbmZzL2Fmcy92b2x1bWUuYz03Nj1zdGF0aWMgc3RydWN0IGFmc192b2x1bWUgKmFmc19hbGxvY192b2x1bWUoc3RydWN0IGFmc19mc19jb250ZXh0ICpwYXJhbXMsXG4tLVxuZnMvYWZzL3ZvbHVtZS5jLTEzMi0gKi9cbmZzL2Fmcy92b2x1bWUuYzoxMzM6c3RhdGljIHN0cnVjdCBhZnNfdm9sdW1lICphZnNfbG9va3VwX3ZvbHVtZShzdHJ1Y3QgYWZzX2ZzX2NvbnRleHQgKnBhcmFtcyxcbmZzL2Fmcy92b2x1bWUuYy0xMzQtXHRcdFx0XHRcdCAgICBzdHJ1Y3QgYWZzX3ZsZGJfZW50cnkgKnZsZGIpXG4tLVxuZnMvYWZzL3ZvbHVtZS5jPTE5OD1zdHJ1Y3QgYWZzX3ZvbHVtZSAqYWZzX2NyZWF0ZV92b2x1bWUoc3RydWN0IGFmc19mc19jb250ZXh0ICpwYXJhbXMpXG4tLVxuZnMvYWZzL3ZvbHVtZS5jLTIyNi1cbmZzL2Fmcy92b2x1bWUuYzoyMjc6XHR2b2x1bWUgPSBhZnNfbG9va3VwX3ZvbHVtZShwYXJhbXMsIHZsZGIpO1xuZnMvYWZzL3ZvbHVtZS5jLTIyOC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44My8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjIgMDk6MzE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDIwNjAKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAyNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGlzIGZyb20gYW4gZXhwZXJ0IHBlcnNwZWN0aXZlOgoKKipEaXZpbmcgaW50byBBRlMgRmlsZXN5c3RlbSBPcGVyYXRpb25zKioKCk9rYXksIHNvIGBhZnNfbG9va3VwYCBpcyBhIGRlbnRyeSBvcGVyYXRpb24sIHdoaWNoIG1ha2VzIHNlbnNlLiBJJiMzOTtkIGV4cGVjdCBpdCB0byBoYW5kbGUgbmFtZSBsb29rdXBzIHdpdGhpbiB0aGUgQUZTIGZpbGVzeXN0ZW0uIE5vdywgdGhlIG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIHNlZSBob3cgdGhpcyBsb29rdXAgaXMgYWN0dWFsbHkgaGFuZGxlZC4gQUZTIGlzIGNvbXBsZXgsIHNvIEkmIzM5O2xsIHdhbnQgdG8gdHJhY2UgaG93IGl0IHRpZXMgaW50byB0aGUgVkZTIGxheWVycy4KCkxldCYjMzk7cyBxdWlja2x5IGNoZWNrIHRoZSBhc3NvY2lhdGVkIGlub2RlIGFsbG9jYXRpb24gZnVuY3Rpb24g4oCTIHNwZWNpZmljYWxseSwgYGFmc19hbGxvY19pbm9kZWAuIFVuZGVyc3RhbmRpbmcgaG93IGlub2RlcyBhcmUgaGFuZGxlZCBpbiB0aGUgYWxsb2NhdGlvbiBwaGFzZSBzaG91bGQgaGVscCBtZSBjb3JyZWxhdGUgZmlsZS1sb29rdXBzIHRocm91Z2ggdGhlIFZGUyAoVmlydHVhbCBGaWxlIFN5c3RlbSkgbGF5ZXJzLiBJdCB3aWxsIGxpa2VseSBnaXZlIGNsdWVzIGFzIHRvIGhvdyB0aGlzIGZpbGVzeXN0ZW0gaGFuZGxlcyBpbm9kZSBjYWNoaW5nIGFuZCByZWxhdGVkIGZ1bmN0aW9uYWxpdHkuIFRoaXMgd2lsbCBob3BlZnVsbHkgcHJvdmlkZSBzb21lIGNvbnRleHQgZm9yIHRoZSBvcGVyYXRpb25zIG9uIHRoZSBkZW50cnkgbGF5ZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+ODQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIyIDA5OjMyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2Fmc19hbGxvY19pbm9kZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL2Fmcy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvYWZzL2ludGVybmFsLmg9NjcwPWVudW0gYWZzX2xvY2tfc3RhdGUge1xuLS1cbmZzL2Fmcy9pbnRlcm5hbC5oLTY4My0gKlxuZnMvYWZzL2ludGVybmFsLmg6Njg0OiAqIE5vdGUgdGhhdCBhZnNfYWxsb2NfaW5vZGUoKSAqbXVzdCogcmVzZXQgYW55dGhpbmcgdGhhdCBjb3VsZCBpbmNvcnJlY3RseVxuZnMvYWZzL2ludGVybmFsLmgtNjg1LSAqIGxlYWsgZnJvbSBvbmUgaW5vZGUgdG8gYW5vdGhlci5cbi0tXG5mcy9hZnMvc3VwZXIuYz0zMz1zdGF0aWMgdm9pZCBhZnNfa2lsbF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKTtcbmZzL2Fmcy9zdXBlci5jOjM0OnN0YXRpYyBzdHJ1Y3QgaW5vZGUgKmFmc19hbGxvY19pbm9kZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKTtcbmZzL2Fmcy9zdXBlci5jLTM1LXN0YXRpYyB2b2lkIGFmc19kZXN0cm95X2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpO1xuLS1cbmZzL2Fmcy9zdXBlci5jPTU1PXN0YXRpYyBjb25zdCBzdHJ1Y3Qgc3VwZXJfb3BlcmF0aW9ucyBhZnNfc3VwZXJfb3BzID0ge1xuZnMvYWZzL3N1cGVyLmMtNTYtXHQuc3RhdGZzXHRcdD0gYWZzX3N0YXRmcyxcbmZzL2Fmcy9zdXBlci5jOjU3Olx0LmFsbG9jX2lub2RlXHQ9IGFmc19hbGxvY19pbm9kZSxcbmZzL2Fmcy9zdXBlci5jLTU4LVx0LndyaXRlX2lub2RlXHQ9IG5ldGZzX3VucGluX3dyaXRlYmFjayxcbi0tXG5mcy9hZnMvc3VwZXIuYz02MjI9c3RhdGljIGludCBhZnNfaW5pdF9mc19jb250ZXh0KHN0cnVjdCBmc19jb250ZXh0ICpmYylcbi0tXG5mcy9hZnMvc3VwZXIuYy02NDYtICogSW5pdGlhbGlzZSBhbiBpbm9kZSBjYWNoZSBzbGFiIGVsZW1lbnQgcHJpb3IgdG8gYW55IHVzZS4gIE5vdGUgdGhhdFxuZnMvYWZzL3N1cGVyLmM6NjQ3OiAqIGFmc19hbGxvY19pbm9kZSgpICptdXN0KiByZXNldCBhbnl0aGluZyB0aGF0IGNvdWxkIGluY29ycmVjdGx5IGxlYWsgZnJvbSBvbmVcbmZzL2Fmcy9zdXBlci5jLTY0OC0gKiBpbm9kZSB0byBhbm90aGVyLlxuLS1cbmZzL2Fmcy9zdXBlci5jPTY1MD1zdGF0aWMgdm9pZCBhZnNfaV9pbml0X29uY2Uodm9pZCAqX3Zub2RlKVxuLS1cbmZzL2Fmcy9zdXBlci5jLTY2OS0gKi9cbmZzL2Fmcy9zdXBlci5jOjY3MDpzdGF0aWMgc3RydWN0IGlub2RlICphZnNfYWxsb2NfaW5vZGUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcbmZzL2Fmcy9zdXBlci5jLTY3MS17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+ODUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIyIDA5OjMyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQyNzkyCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IGltbWVkaWF0ZSB0aG91Z2h0IHByb2Nlc3MsIGZvY3VzaW5nIG9uIHRoZSByZWxldmFudCBjb2RlOgoKKipBbmFseXppbmcgdGhlIEFGUyBGaWxlc3lzdGVtIE9wZXJhdGlvbnMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGBhZnNfYWxsb2NfaW5vZGVgLCBhbmQgbXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgaXQmIzM5O3MgYSBgc3VwZXJfb3BlcmF0aW9uYC4gVGhhdCYjMzk7cyBpbXBvcnRhbnQsIGl0IHRlbGxzIG1lIGl0JiMzOTtzIHBhcnQgb2YgdGhlIGNvcmUgZmlsZXN5c3RlbSBzdXBlciBibG9jayBvcGVyYXRpb25zLiBOb3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhpcyBjb2RlIGlzIGRvaW5nIGluIGEgYml0IG1vcmUgZGV0YWlsLiBUbyBnZXQgdGhlcmUsIEkgd2FudCB0byBpbW1lZGlhdGVseSBjaGVjayBvdXQgYGFmc19leHRyYWN0X3Zsc2VydmVyX2xpc3RgLCB3aGljaCBpcyBsaWtlbHkgcmVsYXRlZC4gSSYjMzk7bSBndWVzc2luZyB0aGF0IHRoaXMgcmVsYXRlcyB0byB0aGUgdmlydHVhbCBzZXJ2ZXIgbGlzdCB0aGF0IHRoZSBBRlMgdXNlcyB0byBsb2NhdGUgdGhlIGNvcnJlY3Qgc2VydmVycywgYW5kIEkgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyBpdCBpbnRlcmFjdHMgd2l0aCBpbm9kZSBhbGxvY2F0aW9uLCBvciBpZiBpdCBpcyBldmVuIHJlbGV2YW50IGF0IGFsbCwgYnV0IGVpdGhlciB3YXkgdGhpcyBzZWVtcyBsaWtlIGEgc29saWQgc3RlcCB0byB1bmRlcnN0YW5kaW5nIHRoZSBjb2RlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjg2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMiAwOTozMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDthZnNfZXh0cmFjdF92bHNlcnZlcl9saXN0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvYWZzLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9hZnMvYWRkcl9saXN0LmM9MjUwPXN0cnVjdCBhZnNfdmxzZXJ2ZXJfbGlzdCAqYWZzX2Ruc19xdWVyeShzdHJ1Y3QgYWZzX2NlbGwgKmNlbGwsIHRpbWU2NF90ICpfZXhwaXJ5KVxuLS1cbmZzL2Fmcy9hZGRyX2xpc3QuYy0yNjgtXHRpZiAocmV0IFx1MDAzZSAxIFx1MDAyNlx1MDAyNiByZXN1bHRbMF0gPT0gMClcbmZzL2Fmcy9hZGRyX2xpc3QuYzoyNjk6XHRcdHZsbGlzdCA9IGFmc19leHRyYWN0X3Zsc2VydmVyX2xpc3QoY2VsbCwgcmVzdWx0LCByZXQpO1xuZnMvYWZzL2FkZHJfbGlzdC5jLTI3MC1cdGVsc2Vcbi0tXG5mcy9hZnMvaW50ZXJuYWwuaD0xNjgyPWV4dGVybiB2b2lkIGFmc19wdXRfdmxzZXJ2ZXJsaXN0KHN0cnVjdCBhZnNfbmV0ICosIHN0cnVjdCBhZnNfdmxzZXJ2ZXJfbGlzdCAqKTtcbmZzL2Fmcy9pbnRlcm5hbC5oOjE2ODM6ZXh0ZXJuIHN0cnVjdCBhZnNfdmxzZXJ2ZXJfbGlzdCAqYWZzX2V4dHJhY3RfdmxzZXJ2ZXJfbGlzdChzdHJ1Y3QgYWZzX2NlbGwgKixcbmZzL2Fmcy9pbnRlcm5hbC5oLTE2ODQtXHRcdFx0XHRcdFx0XHQgICBjb25zdCB2b2lkICosIHNpemVfdCk7XG4tLVxuZnMvYWZzL3ZsX2xpc3QuYz04OT1zdGF0aWMgc3RydWN0IGFmc19hZGRyX2xpc3QgKmFmc19leHRyYWN0X3ZsX2FkZHJzKHN0cnVjdCBhZnNfbmV0ICpuZXQsXG4tLVxuZnMvYWZzL3ZsX2xpc3QuYy0xNTktICovXG5mcy9hZnMvdmxfbGlzdC5jOjE2MDpzdHJ1Y3QgYWZzX3Zsc2VydmVyX2xpc3QgKmFmc19leHRyYWN0X3Zsc2VydmVyX2xpc3Qoc3RydWN0IGFmc19jZWxsICpjZWxsLFxuZnMvYWZzL3ZsX2xpc3QuYy0xNjEtXHRcdFx0XHRcdFx0ICAgIGNvbnN0IHZvaWQgKmJ1ZmZlcixcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjIgMDk6MzI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDM0MDMKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAzNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOgoKKipBbmFseXppbmcgQUZTIFNlcnZlciBIYW5kbGluZyoqCgpBbHJpZ2h0LCBzbyBgYWZzX2V4dHJhY3RfdmxzZXJ2ZXJfbGlzdGAgaXMgYSBnbG9iYWwgdmFyaWFibGUuIFRoYXQmIzM5O3MgYSBrZXkgb2JzZXJ2YXRpb24sIG1lYW5pbmcgaXQmIzM5O3MgYWNjZXNzaWJsZSBhbmQgcG90ZW50aWFsbHkgbW9kaWZpZWQgZnJvbSBhbnl3aGVyZS4gTm93LCB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIGlzIHVzZWQgYW5kIGl0cyBpbXBhY3QsIEkgbmVlZCB0byBsb29rIGludG8gaXRzIGludGVyYWN0aW9uIHdpdGggdGhlIGJyb2FkZXIgQUZTIHN1YnN5c3RlbS4gU3BlY2lmaWNhbGx5LCBsZXQmIzM5O3MgdHVybiBvdXIgYXR0ZW50aW9uIHRvIGBhZnNfZGVsaXZlcl9jYl9pbml0X2NhbGxfYmFja19zdGF0ZTNgLiBFeGFtaW5pbmcgdGhhdCBjYWxsYmFjayYjMzk7cyBzdGF0ZSBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSBsaXN0IHdpbGwgZ2l2ZSBtZSBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIHRoZSBkYXRhIGZsb3cgYW5kIHBvdGVudGlhbCBmb3IgYW55IHJhY2UgY29uZGl0aW9ucyBvciBzeW5jaHJvbml6YXRpb24gaXNzdWVzIHJlbGF0ZWQgdG8gdGhhdCBnbG9iYWwgdmFyaWFibGUuIFRpbWUgdG8gZGlnIGluIGFuZCBzZWUgaG93IHRoZXNlIHBpZWNlcyBmaXQgdG9nZXRoZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+ODgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIyIDA5OjMyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2Fmc19kZWxpdmVyX2NiX2luaXRfY2FsbF9iYWNrX3N0YXRlMyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL2Fmcy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvYWZzL2Ntc2VydmljZS5jPTE5PXN0YXRpYyBpbnQgYWZzX2RlbGl2ZXJfY2JfaW5pdF9jYWxsX2JhY2tfc3RhdGUoc3RydWN0IGFmc19jYWxsICopO1xuZnMvYWZzL2Ntc2VydmljZS5jOjIwOnN0YXRpYyBpbnQgYWZzX2RlbGl2ZXJfY2JfaW5pdF9jYWxsX2JhY2tfc3RhdGUzKHN0cnVjdCBhZnNfY2FsbCAqKTtcbmZzL2Fmcy9jbXNlcnZpY2UuYy0yMS1zdGF0aWMgaW50IGFmc19kZWxpdmVyX2NiX3Byb2JlKHN0cnVjdCBhZnNfY2FsbCAqKTtcbi0tXG5mcy9hZnMvY21zZXJ2aWNlLmM9NTc9c3RhdGljIGNvbnN0IHN0cnVjdCBhZnNfY2FsbF90eXBlIGFmc19TUlhDQkluaXRDYWxsQmFja1N0YXRlMyA9IHtcbmZzL2Fmcy9jbXNlcnZpY2UuYy01OC1cdC5uYW1lXHRcdD0gXCYjMzQ7Q0IuSW5pdENhbGxCYWNrU3RhdGUzXCYjMzQ7LFxuZnMvYWZzL2Ntc2VydmljZS5jOjU5Olx0LmRlbGl2ZXJcdD0gYWZzX2RlbGl2ZXJfY2JfaW5pdF9jYWxsX2JhY2tfc3RhdGUzLFxuZnMvYWZzL2Ntc2VydmljZS5jLTYwLVx0LmRlc3RydWN0b3JcdD0gYWZzX2NtX2Rlc3RydWN0b3IsXG4tLVxuZnMvYWZzL2Ntc2VydmljZS5jPTMwMz1zdGF0aWMgaW50IGFmc19kZWxpdmVyX2NiX2luaXRfY2FsbF9iYWNrX3N0YXRlKHN0cnVjdCBhZnNfY2FsbCAqY2FsbClcbi0tXG5mcy9hZnMvY21zZXJ2aWNlLmMtMzEzLSAqL1xuZnMvYWZzL2Ntc2VydmljZS5jOjMxNDpzdGF0aWMgaW50IGFmc19kZWxpdmVyX2NiX2luaXRfY2FsbF9iYWNrX3N0YXRlMyhzdHJ1Y3QgYWZzX2NhbGwgKmNhbGwpXG5mcy9hZnMvY21zZXJ2aWNlLmMtMzE1LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjIgMDk6MzI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDM5ODgKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAzNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgYGFmc19kZWxpdmVyX2NiX2luaXRfY2FsbF9iYWNrX3N0YXRlM2AgYW5kIGBhZnNfZGVsaXZlcl9jYl9wcm9iZV91dWlkYCoqCgpBbHJpZ2h0LCBteSBpbml0aWFsIHRob3VnaHQgaXM6ICpgYWZzX2RlbGl2ZXJfY2JfaW5pdF9jYWxsX2JhY2tfc3RhdGUzYCBpcyBkZWNsYXJlZCBhcyBzdGF0aWMuKiBUaGF0IGltbWVkaWF0ZWx5IHBpcXVlcyBteSBpbnRlcmVzdC4gU3RhdGljIHNjb3BlIG9mdGVuIGltcGxpZXMgYSBmdW5jdGlvbi1zcGVjaWZpYywgaW50ZXJuYWwgc3RhdGUuICBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgbGlmZWN5Y2xlIGFuZCB3aGV0aGVyIHRoaXMgc3RhdGljIHZhcmlhYmxlIGludHJvZHVjZXMgYW55IGNvbmN1cnJlbmN5IGNvbmNlcm5zIHdpdGhpbiB0aGUgYGFmc19kZWxpdmVyX2NiYCBjb250ZXh0LiAgTWVtb3J5IG1hbmFnZW1lbnQgaXMgYWx3YXlzIG9uIG15IG1pbmQgYW5kIGhvdyBhIHN0YXRpYyB2YXJpYWJsZSBwbGF5cyBhIHBhcnQgaW4gdGhhdC4gV2hhdCBpbXBhY3QgZG9lcyB0aGlzIGhhdmUgb24gcmVlbnRyYW5jeT8KCk15IG5leHQgaW1tZWRpYXRlIHF1ZXN0aW9uOiAqV2hhdCYjMzk7cyB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gdGhpcyBzdGF0aWMgdmFyaWFibGUgYW5kIHRoZSBjYWxsIHRvIGBhZnNfZGVsaXZlcl9jYl9wcm9iZV91dWlkYD8qICBJIG5lZWQgdG8gZGlnIGludG8gYGFmc19kZWxpdmVyX2NiX3Byb2JlX3V1aWRgLiBJcyBpdCByZWFkaW5nIG9yIHdyaXRpbmcgdGhpcyBzdGF0aWMgc3RhdGU/IERvZXMgdGhlIHByb2JlIGZ1bmN0aW9uIG1vZGlmeSB0aGUgc3RhdGUgb2YgdGhlIGluaXRpYWwgY2FsbCBiYWNrIGZ1bmN0aW9uPyBXaGF0IGtpbmQgb2YgaW52YXJpYW50cyBhcmUgYXQgcGxheT8gSSYjMzk7bSBhbHJlYWR5IGZvcm11bGF0aW5nIHF1ZXN0aW9ucyBhYm91dCBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zLCBsb2NrIHByb3RlY3Rpb24gKG9yIGxhY2sgdGhlcmVvZiksIGFuZCBob3cgZGF0YSBkZXBlbmRlbmNpZXMgYXJlIGhhbmRsZWQgd2l0aGluIHRoaXMgbW9kdWxlLiBJIHNob3VsZCBwcm9iYWJseSBiZSBvbiB0aGUgbG9va291dCBmb3IgYW55IHBvdGVudGlhbCBpc3N1ZXMgcmVsYXRlZCB0byBzdGF0ZSBwZXJzaXN0ZW5jZSBhY3Jvc3MgZGlmZmVyZW50IGNhbGxzIHRvIHJlbGF0ZWQgZnVuY3Rpb25zLCBlc3BlY2lhbGx5IGlmIHRoaXMgaXMgYSBjYWxsYmFjayBmdW5jdGlvbiB3aGVyZSBvcmRlciBhbmQgY29udGV4dCBhcmUgY3JpdGljYWwuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGlmIHRoZSBwcm9iZSBpbXBhY3RzIHRoZSBwZXJmb3JtYW5jZSwgb3IgcmVsaWFiaWxpdHksIG9mIHRoZSBvcmlnaW5hbCBjYWxsIGJhY2sgZnVuY3Rpb24uIEkmIzM5O20gc3RhcnRpbmcgdG8gdGhpbmsgYWJvdXQgcG9zc2libGUgZGVidWdnaW5nIHN0cmF0ZWdpZXMgdG8gdHJhY2sgdGhlIHZhbHVlcyBhbmQgaW1wYWN0IG9mIHRoZSB2YXJpYWJsZXMuIFRoaXMgYWxzbyBzdWdnZXN0cyB0byBtZSB0aGF0IHRoaXMgaXMgYSBjcml0aWNhbCBzZWN0aW9uIG9mIGNvZGUsIGFuZCB0aGF0IG1lYW5zIEkgbmVlZCB0byBjYXJlZnVsbHkgYW5hbHl6ZSB0aGUgcG90ZW50aWFsIGZvciBkZWFkbG9jaywgb3Igb3RoZXIgY29uY3VycmVuY3kgZXJyb3JzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMiAwOTozMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDthZnNfZGVsaXZlcl9jYl9wcm9iZV91dWlkJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvYWZzLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9hZnMvY21zZXJ2aWNlLmM9MjI9c3RhdGljIGludCBhZnNfZGVsaXZlcl9jYl9jYWxsYmFjayhzdHJ1Y3QgYWZzX2NhbGwgKik7XG5mcy9hZnMvY21zZXJ2aWNlLmM6MjM6c3RhdGljIGludCBhZnNfZGVsaXZlcl9jYl9wcm9iZV91dWlkKHN0cnVjdCBhZnNfY2FsbCAqKTtcbmZzL2Fmcy9jbXNlcnZpY2UuYy0yNC1zdGF0aWMgaW50IGFmc19kZWxpdmVyX2NiX3RlbGxfbWVfYWJvdXRfeW91cnNlbGYoc3RydWN0IGFmc19jYWxsICopO1xuLS1cbmZzL2Fmcy9jbXNlcnZpY2UuYz03Nz1zdGF0aWMgY29uc3Qgc3RydWN0IGFmc19jYWxsX3R5cGUgYWZzX1NSWENCUHJvYmVVdWlkID0ge1xuZnMvYWZzL2Ntc2VydmljZS5jLTc4LVx0Lm5hbWVcdFx0PSBcJiMzNDtDQi5Qcm9iZVV1aWRcJiMzNDssXG5mcy9hZnMvY21zZXJ2aWNlLmM6Nzk6XHQuZGVsaXZlclx0PSBhZnNfZGVsaXZlcl9jYl9wcm9iZV91dWlkLFxuZnMvYWZzL2Ntc2VydmljZS5jLTgwLVx0LmRlc3RydWN0b3JcdD0gYWZzX2NtX2Rlc3RydWN0b3IsXG4tLVxuZnMvYWZzL2Ntc2VydmljZS5jPTQxNj1zdGF0aWMgdm9pZCBTUlhBRlNDQl9Qcm9iZVV1aWQoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuLS1cbmZzL2Fmcy9jbXNlcnZpY2UuYy00MzQtICovXG5mcy9hZnMvY21zZXJ2aWNlLmM6NDM1OnN0YXRpYyBpbnQgYWZzX2RlbGl2ZXJfY2JfcHJvYmVfdXVpZChzdHJ1Y3QgYWZzX2NhbGwgKmNhbGwpXG5mcy9hZnMvY21zZXJ2aWNlLmMtNDM2LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45MS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjIgMDk6MzI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDQ3NTMKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAzMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgaW1tZWRpYXRlIHRob3VnaHQgcHJvY2VzczoKCioqU3RhdGljIFZhcmlhYmxlcyBhbmQgaW5vZGUgSW5pdGlhbGl6YXRpb24qKgoKT2theSwgc28gYGFmc19kZWxpdmVyX2NiX3Byb2JlX3V1aWRgIGlzIGRlY2xhcmVkIGFzIHN0YXRpYy4gVGhpcyBpbW1lZGlhdGVseSBzdWdnZXN0cyBpdCYjMzk7cyBsaWtlbHkgYSBjb25zdGFudCBvciBhIGxvY2FsbHkgc2NvcGVkIHZhbHVlIHdpdGhpbiBhIHNwZWNpZmljIG1vZHVsZSBvciBmdW5jdGlvbiwgYW5kIHBvdGVudGlhbGx5IGEgY2FuZGlkYXRlIGZvciBvcHRpbWl6YXRpb24gb3IgdGhyZWFkIHNhZmV0eSBjb25jZXJucywgc28gSSYjMzk7bGwga2VlcCB0aGF0IGluIG1pbmQuCgpOb3csIG15IG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgVVVJRCBpcyB1c2VkIGFuZCB0aGUgYnJvYWRlciBjb250ZXh0IGl0IHNpdHMgd2l0aGluLiBMZXQmIzM5O3MgZGVsdmUgaW50byBgYWZzX2lub2RlX2luaXRfZnJvbV9zdGF0dXNgLiBJdCBtYWtlcyBzZW5zZSB0byBleGFtaW5lIHdoZXJlIHRoaXMgc3RhdGljIFVVSUQgZ2V0cyBhc3NpZ25lZCBhbmQgdXNlZCwgYXMgYGlub2RlYCBpbml0aWFsaXphdGlvbiBpcyBrZXkuIEV4cGxvcmluZyB0aGlzIHBhdGggc2VlbXMgbGlrZWx5IHRvIHJldmVhbCB0aGUgaW50ZXJhY3Rpb24gd2l0aCB0aGUgdXVpZC4gVGhpcyB3aWxsIGdpdmUgbWUgdGhlIHByb3BlciBjb250ZXh0IGZvciB0aGUgc3RhdGljIHZhcmlhYmxlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMiAwOTozMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDthZnNfaW5vZGVfaW5pdF9mcm9tX3N0YXR1cyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL2Fmcy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvYWZzL2lub2RlLmM9NTU9c3RhdGljIHZvaWQgYWZzX3NldF9uZXRmc19jb250ZXh0KHN0cnVjdCBhZnNfdm5vZGUgKnZub2RlLCBib29sIGlzX2ZpbGUpXG4tLVxuZnMvYWZzL2lub2RlLmMtNjItICovXG5mcy9hZnMvaW5vZGUuYzo2MzpzdGF0aWMgaW50IGFmc19pbm9kZV9pbml0X2Zyb21fc3RhdHVzKHN0cnVjdCBhZnNfb3BlcmF0aW9uICpvcCxcbmZzL2Fmcy9pbm9kZS5jLTY0LVx0XHRcdFx0ICAgICAgc3RydWN0IGFmc192bm9kZV9wYXJhbSAqdnAsXG4tLVxuZnMvYWZzL2lub2RlLmM9MzQ2PXN0YXRpYyB2b2lkIGFmc19mZXRjaF9zdGF0dXNfc3VjY2VzcyhzdHJ1Y3QgYWZzX29wZXJhdGlvbiAqb3ApXG4tLVxuZnMvYWZzL2lub2RlLmMtMzUyLVx0aWYgKGlub2RlX3N0YXRlX3JlYWRfb25jZShcdTAwMjZ2bm9kZS1cdTAwM2VuZXRmcy5pbm9kZSkgXHUwMDI2IElfTkVXKSB7XG5mcy9hZnMvaW5vZGUuYzozNTM6XHRcdHJldCA9IGFmc19pbm9kZV9pbml0X2Zyb21fc3RhdHVzKG9wLCB2cCwgdm5vZGUpO1xuZnMvYWZzL2lub2RlLmMtMzU0LVx0XHRhZnNfb3Bfc2V0X2Vycm9yKG9wLCByZXQpO1xuLS1cbmZzL2Fmcy9pbm9kZS5jPTQ4Mj1zdHJ1Y3QgaW5vZGUgKmFmc19pZ2V0KHN0cnVjdCBhZnNfb3BlcmF0aW9uICpvcCwgc3RydWN0IGFmc192bm9kZV9wYXJhbSAqdnApXG4tLVxuZnMvYWZzL2lub2RlLmMtNTA4LVxuZnMvYWZzL2lub2RlLmM6NTA5Olx0cmV0ID0gYWZzX2lub2RlX2luaXRfZnJvbV9zdGF0dXMob3AsIHZwLCB2bm9kZSk7XG5mcy9hZnMvaW5vZGUuYy01MTAtXHRpZiAocmV0IFx1MDAzYyAwKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMiAwOTozMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NTM1MgoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDI2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoaXMgY29kZToKCioqQW5hbHl6aW5nIHRoZSBBRlMgSW5vZGUgSW5pdGlhbGl6YXRpb24qKgoKT2theSwgc28gYGFmc19pbm9kZV9pbml0X2Zyb21fc3RhdHVzYCBpcyBtYXJrZWQgYXMgYHN0YXRpY2AuIFRoYXQmIzM5O3MgaW50ZXJlc3RpbmcsIGFuZCBpdCBpbW1lZGlhdGVseSBmbGFncyBhIHBvdGVudGlhbCBhcmVhIGZvciBjbG9zZXIgZXhhbWluYXRpb24uIEEgc3RhdGljIGZ1bmN0aW9uLCBpbiB0aGlzIGNvbnRleHQsIHVzdWFsbHkgbWVhbnMgaXQmIzM5O3MgaW50ZW5kZWQgZm9yIGludGVybmFsIHVzZSB3aXRoaW4gdGhlIEFGUyBpbm9kZSBzdWJzeXN0ZW0gb25seSwgd2hpY2ggbWFrZXMgc2Vuc2UuIEl0IG1lYW5zIGl0JiMzOTtzIG5vdCBtZWFudCB0byBiZSBkaXJlY3RseSBjYWxsZWQgZnJvbSBvdGhlciBwYXJ0cyBvZiB0aGUga2VybmVsLCBsaW1pdGluZyBpdHMgc2NvcGUgYW5kIHBvdGVudGlhbCBmb3IgdW5pbnRlbmRlZCBpbnRlcmFjdGlvbnMsIHdoaWNoIGlzIGdvb2QgZm9yIHN0YWJpbGl0eS4gVGhlIGNvbnRleHQgaGludHMgaXQgbWlnaHQgYmUgYSBoZWxwZXIgZnVuY3Rpb24gZm9yIHNldHRpbmcgdXAgYW4gaW5vZGUgZnJvbSBzb21lIHN0b3JlZCBzdGF0dXMgaW5mb3JtYXRpb24uCgpHaXZlbiB0aGF0LCBsZXQmIzM5O3MgdHJhY2UgdGhpcyBiYWNrIGEgYml0IGFuZCBjaGVjayBgYWZzX3Jvb3RfaWdldGAuIFRoYXQmIzM5O3MgYSBsb2dpY2FsIG5leHQgc3RlcC4gVW5kZXJzdGFuZGluZyBob3cgdGhlIHJvb3QgaW5vZGUgaXMgYWNxdWlyZWQgbWlnaHQgcHJvdmlkZSBtb3JlIGNvbnRleHQgb24gd2hlbiBhbmQgaG93IHRoaXMgc3RhdGljIGluaXRpYWxpemF0aW9uIGZ1bmN0aW9uIGlzIGJlaW5nIGludm9rZWQuIEl0JiMzOTtzIGxpa2VseSB0aGF0IGBhZnNfcm9vdF9pZ2V0YCBpcyB0aGUgZW50cnkgcG9pbnQgZm9yIHJldHJpZXZpbmcgdGhlIHJvb3QgaW5vZGUsIGFuZCBpZiBzbywgaXQgd2lsbCBwcm9iYWJseSB1dGlsaXplIGBhZnNfaW5vZGVfaW5pdF9mcm9tX3N0YXR1c2AgYXQgc29tZSBwb2ludCBkdXJpbmcgdGhlIGluaXRpYWxpemF0aW9uIHNlcXVlbmNlLiBJJiMzOTttIGFzc3VtaW5nIHRoYXQgaXQgaXMgc2V0dGluZyB1cCB0aGUgQUZTIGZpbGVzeXN0ZW0mIzM5O3Mgcm9vdCBpbm9kZS4gQnkgZXhhbWluaW5nIHRoYXQgZnVuY3Rpb24sIEkgY2FuIHVuZGVyc3RhbmQgdGhlIGJpZ2dlciBwaWN0dXJlIG9mIGhvdyB0aGlzIHN0YXRpYyBoZWxwZXIgZml0cyBpbi4gRGlnZ2luZyBpbnRvIHRoZSBpZ2V0IHByb2Nlc3MgbWFrZXMgc2Vuc2UsIGFzIGEgZmlsZSBzeXN0ZW0mIzM5O3Mgcm9vdCBpbm9kZSBpcyBjcml0aWNhbCBmb3IgYW55IHN1YnNlcXVlbnQgdHJhdmVyc2FsLCB3aGljaCB0aGVuIHByb2JhYmx5IHV0aWxpemVzIHRoaXMgc3RhdGljIGZ1bmN0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjk0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMiAwOTozMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDthZnNfcm9vdF9pZ2V0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvYWZzLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9hZnMvaW5vZGUuYz01Mjg9c3RhdGljIGludCBhZnNfaWdldDVfc2V0X3Jvb3Qoc3RydWN0IGlub2RlICppbm9kZSwgdm9pZCAqb3BhcXVlKVxuLS1cbmZzL2Fmcy9pbm9kZS5jLTU0NS0gKi9cbmZzL2Fmcy9pbm9kZS5jOjU0NjpzdHJ1Y3QgaW5vZGUgKmFmc19yb290X2lnZXQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IGtleSAqa2V5KVxuZnMvYWZzL2lub2RlLmMtNTQ3LXtcbi0tXG5mcy9hZnMvaW50ZXJuYWwuaD0xMjU5PWV4dGVybiBzdHJ1Y3QgaW5vZGUgKmFmc19pZ2V0KHN0cnVjdCBhZnNfb3BlcmF0aW9uICosIHN0cnVjdCBhZnNfdm5vZGVfcGFyYW0gKik7XG5mcy9hZnMvaW50ZXJuYWwuaDoxMjYwOmV4dGVybiBzdHJ1Y3QgaW5vZGUgKmFmc19yb290X2lnZXQoc3RydWN0IHN1cGVyX2Jsb2NrICosIHN0cnVjdCBrZXkgKik7XG5mcy9hZnMvaW50ZXJuYWwuaC0xMjYxLWV4dGVybiBpbnQgYWZzX2dldGF0dHIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIGNvbnN0IHN0cnVjdCBwYXRoICosXG4tLVxuZnMvYWZzL3N1cGVyLmM9NDQ4PXN0YXRpYyBpbnQgYWZzX2ZpbGxfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IGFmc19mc19jb250ZXh0ICpjdHgpXG4tLVxuZnMvYWZzL3N1cGVyLmMtNDczLVx0XHRhZnNfYWN0aXZhdGVfdm9sdW1lKGFzLVx1MDAzZXZvbHVtZSk7XG5mcy9hZnMvc3VwZXIuYzo0NzQ6XHRcdGlub2RlID0gYWZzX3Jvb3RfaWdldChzYiwgY3R4LVx1MDAzZWtleSk7XG5mcy9hZnMvc3VwZXIuYy00NzUtXHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIyIDA5OjMyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ2MDQ5CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIEFGUyBpbm9kZSBtYW5hZ2VtZW50Li4uKioKCk9rYXksIHNvIGBhZnNfcm9vdF9pZ2V0YCBpcyBnbG9iYWwsIG1lYW5pbmcgaXQmIzM5O3MgYWNjZXNzaWJsZSBhY3Jvc3MgdGhlIGVudGlyZSBBRlMgZmlsZXN5c3RlbS4gVGhhdCYjMzk7cyBnb29kIHRvIGtub3csIHNldHMgdGhlIHN0YWdlLiBCdXQgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHJlbGF0aW9uc2hpcCB0byBpbm9kZSBldmljdGlvbiwgcGFydGljdWxhcmx5IGluIGhvdyBpdCBpbXBhY3RzIHRoZSByb290IGlub2RlLgoKTm93LCB3aGVyZSBkb2VzIHRoYXQgaW50ZXJhY3Rpb24gYWN0dWFsbHkgKmhhcHBlbio/IExldCBtZSBzaGlmdCBmb2N1cyBhbmQgY2hlY2sgYGFmc19ldmljdF9pbm9kZWAuLi4gSSBuZWVkIHRvIHNlZSBob3cgZXZpY3Rpb24gZnVuY3Rpb25zIHJlbGF0ZSB0byBpbml0aWFsIGlub2RlIHJldHJpZXZhbC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjIgMDk6MzI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YWZzX2V2aWN0X2lub2RlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvYWZzLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9hZnMvaW5vZGUuYz02NDI9aW50IGFmc19kcm9wX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4tLVxuZnMvYWZzL2lub2RlLmMtNjU0LSAqL1xuZnMvYWZzL2lub2RlLmM6NjU1OnZvaWQgYWZzX2V2aWN0X2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpXG5mcy9hZnMvaW5vZGUuYy02NTYte1xuLS1cbmZzL2Fmcy9pbnRlcm5hbC5oPTEyNjM9ZXh0ZXJuIGludCBhZnNfc2V0YXR0cihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGRlbnRyeSAqLCBzdHJ1Y3QgaWF0dHIgKik7XG5mcy9hZnMvaW50ZXJuYWwuaDoxMjY0OmV4dGVybiB2b2lkIGFmc19ldmljdF9pbm9kZShzdHJ1Y3QgaW5vZGUgKik7XG5mcy9hZnMvaW50ZXJuYWwuaC0xMjY1LWV4dGVybiBpbnQgYWZzX2Ryb3BfaW5vZGUoc3RydWN0IGlub2RlICopO1xuLS1cbmZzL2Fmcy9zdXBlci5jPTU1PXN0YXRpYyBjb25zdCBzdHJ1Y3Qgc3VwZXJfb3BlcmF0aW9ucyBhZnNfc3VwZXJfb3BzID0ge1xuLS1cbmZzL2Fmcy9zdXBlci5jLTYxLVx0LmZyZWVfaW5vZGVcdD0gYWZzX2ZyZWVfaW5vZGUsXG5mcy9hZnMvc3VwZXIuYzo2MjpcdC5ldmljdF9pbm9kZVx0PSBhZnNfZXZpY3RfaW5vZGUsXG5mcy9hZnMvc3VwZXIuYy02My1cdC5zaG93X2Rldm5hbWVcdD0gYWZzX3Nob3dfZGV2bmFtZSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjIgMDk6MzI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDY1MjkKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAyMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgaW1tZWRpYXRlIHRob3VnaHQgcHJvY2VzcywgZm9jdXNpbmcgb24gdGhlIHByb3ZpZGVkIGN1ZXMsIHJlbmRlcmVkIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKk5hdmlnYXRpbmcgdGhlIEFGUyBLZXJuZWwgQ29kZWJhc2UqKgoKT2theSwgc28gYGFmc19ldmljdF9pbm9kZWAuIFJpZ2h0LCB0aGF0JiMzOTtzIGEgZ2xvYmFsIGZ1bmN0aW9uLiBLbm93aW5nIHRoYXQgaW1tZWRpYXRlbHkgZmxhZ3MgaXQgYXMgc29tZXRoaW5nIHBvdGVudGlhbGx5IGNlbnRyYWwsIGxpa2VseSBjYWxsZWQgZnJvbSBhIG51bWJlciBvZiBwbGFjZXMgd2l0aGluIHRoZSBBRlMgZmlsZXN5c3RlbSBpbXBsZW1lbnRhdGlvbi4gSXQgbWVhbnMgSSBuZWVkIHRvIGJlIGNhcmVmdWwgd2l0aCBhbnkgYXNzdW1wdGlvbnMgYWJvdXQgaG93IGl0IGJlaGF2ZXMsIGJlY2F1c2UgaXRzIGNvbnRleHQgY291bGQgdmFyeSBncmVhdGx5LgoKTm93LCB3aGVyZSB0byBzdGFydCBsb29raW5nIHRvIHVuZGVyc3RhbmQgaXRzIHJvbGUsIGVzcGVjaWFsbHkgaW4gcmVsYXRpb24gdG8gdGhlIGlub2RlIGxpZmVjeWNsZT8gTGV0IG1lIHF1aWNrbHkgY3Jvc3MtcmVmZXJlbmNlIHRoYXQgd2l0aCBgYWZzX2dldF90cmVlYC4gVGhhdCBmdW5jdGlvbiYjMzk7cyBsaWtlbHkgcmVzcG9uc2libGUgZm9yIHJldHJpZXZpbmcgdGhlIHN1cGVyIGJsb2NrIGFzc29jaWF0ZWQgd2l0aCB0aGUgQUZTIGZpbGVzeXN0ZW0gaW5zdGFuY2Ugb24gYSBtb3VudCBhbmQgYnVpbGRpbmcgdGhlIGZpbGVzeXN0ZW0gc3RydWN0dXJlIG9uIHRoZSBkaXNrLiBUaGlzIG1heSBvciBtYXkgbm90IGJlIHRoZSBmdW5jdGlvbiB0byB1bmRlcnN0YW5kIHRoZSBldmljdGlvbiBwcm9jZXNzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjk4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMiAwOTozMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDthZnNfZ2V0X3RyZWUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9hZnMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2Fmcy9zdXBlci5jPTUzMD1zdGF0aWMgdm9pZCBhZnNfa2lsbF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxuLS1cbmZzL2Fmcy9zdXBlci5jLTU0Ny0gKi9cbmZzL2Fmcy9zdXBlci5jOjU0ODpzdGF0aWMgaW50IGFmc19nZXRfdHJlZShzdHJ1Y3QgZnNfY29udGV4dCAqZmMpXG5mcy9hZnMvc3VwZXIuYy01NDkte1xuLS1cbmZzL2Fmcy9zdXBlci5jLTU5MC1cdGlmICghY3R4LVx1MDAzZWR5bl9yb290KVxuZnMvYWZzL3N1cGVyLmM6NTkxOlx0XHR0cmFjZV9hZnNfZ2V0X3RyZWUoYXMtXHUwMDNlY2VsbCwgYXMtXHUwMDNldm9sdW1lKTtcbmZzL2Fmcy9zdXBlci5jLTU5Mi1cdF9sZWF2ZShcJiMzNDsgPSAwIFslcF1cJiMzNDssIHNiKTtcbi0tXG5mcy9hZnMvc3VwZXIuYz02MTM9c3RhdGljIGNvbnN0IHN0cnVjdCBmc19jb250ZXh0X29wZXJhdGlvbnMgYWZzX2NvbnRleHRfb3BzID0ge1xuLS1cbmZzL2Fmcy9zdXBlci5jLTYxNS1cdC5wYXJzZV9wYXJhbVx0PSBhZnNfcGFyc2VfcGFyYW0sXG5mcy9hZnMvc3VwZXIuYzo2MTY6XHQuZ2V0X3RyZWVcdD0gYWZzX2dldF90cmVlLFxuZnMvYWZzL3N1cGVyLmMtNjE3LX07XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIyIDA5OjMyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ3MDQxCgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKk5hdmlnYXRpbmcgdGhlIEFGUyBDb2RlYmFzZSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBBRlMgY29kZSwgYW5kIHRoZSBgYWZzX2dldF90cmVlYCBmdW5jdGlvbi4uLiBobW0sIHNlZW1zIHRvIGJlIGRlY2xhcmVkIGFzIHN0YXRpYy4gVGhhdCBpbW1lZGlhdGVseSB0cmlnZ2VycyBhIG1lbnRhbCBub3RlIOKAkyBzdGF0aWMgZnVuY3Rpb25zIGhhdmUgbGltaXRlZCBzY29wZSwgbWVhbmluZyB0aGV5JiMzOTtyZSBub3QgdmlzaWJsZSBvdXRzaWRlIG9mIHRoZSBmaWxlIHRoZXkmIzM5O3JlIGRlZmluZWQgaW4uIFRoYXQmIzM5O3MgYSBrZXkgcGllY2Ugb2YgaW5mb3JtYXRpb24gZm9yIHVuZGVyc3RhbmRpbmcgaG93IHRoZSBzeXN0ZW0gaXMgcHV0IHRvZ2V0aGVyLiBOb3csIHNpbmNlIGl0IGlzIHN0YXRpYywgaXQgc3RhbmRzIHRvIHJlYXNvbiB0aGF0IGl0IG1heSBiZSBwYXJ0IG9mIGEgYmlnZ2VyIGluaXRpYWxpemF0aW9uIHByb2Nlc3MuIExldCYjMzk7cyBzZWUuLi4gSSYjMzk7bGwgY2hlY2sgYGFmc19pX2luaXRfb25jZWAgbmV4dC4gVGhhdCBpbml0aWFsaXphdGlvbiBjb250ZXh0IHNlZW1zIHByZXR0eSBpbXBvcnRhbnQgaW4gdGhpcyBjYXNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjIgMDk6MzI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YWZzX2lfaW5pdF9vbmNlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvYWZzLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9hZnMvc3VwZXIuYy0zMS1cbmZzL2Fmcy9zdXBlci5jOjMyOnN0YXRpYyB2b2lkIGFmc19pX2luaXRfb25jZSh2b2lkICpmb28pO1xuZnMvYWZzL3N1cGVyLmMtMzMtc3RhdGljIHZvaWQgYWZzX2tpbGxfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYik7XG4tLVxuZnMvYWZzL3N1cGVyLmM9OTY9aW50IF9faW5pdCBhZnNfZnNfaW5pdCh2b2lkKVxuLS1cbmZzL2Fmcy9zdXBlci5jLTEwOS1cdFx0XHRcdFx0ICAgICBTTEFCX0hXQ0FDSEVfQUxJR058U0xBQl9BQ0NPVU5ULFxuZnMvYWZzL3N1cGVyLmM6MTEwOlx0XHRcdFx0XHQgICAgIGFmc19pX2luaXRfb25jZSk7XG5mcy9hZnMvc3VwZXIuYy0xMTEtXHRpZiAoIWFmc19pbm9kZV9jYWNoZXApIHtcbi0tXG5mcy9hZnMvc3VwZXIuYz02MjI9c3RhdGljIGludCBhZnNfaW5pdF9mc19jb250ZXh0KHN0cnVjdCBmc19jb250ZXh0ICpmYylcbi0tXG5mcy9hZnMvc3VwZXIuYy02NDktICovXG5mcy9hZnMvc3VwZXIuYzo2NTA6c3RhdGljIHZvaWQgYWZzX2lfaW5pdF9vbmNlKHZvaWQgKl92bm9kZSlcbmZzL2Fmcy9zdXBlci5jLTY1MS17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMiAwOTozMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NzUyMgoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDI0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSBpbW1lZGlhdGUgdGhvdWdodCBwcm9jZXNzOgoKKipJbml0aWFsIEFzc2Vzc21lbnQ6IFVuZGVyc3RhbmRpbmcgYGFmc19pX2luaXRfb25jZWAqKgoKT2theSwgc28gYGFmc19pX2luaXRfb25jZWAgaXMgc3RhdGljLiBUaGF0IGltbWVkaWF0ZWx5IHRlbGxzIG1lIGl0JiMzOTtzIGxpa2VseSBhIGxvY2FsIGluaXRpYWxpemF0aW9uIGZ1bmN0aW9uLCBzY29wZWQgd2l0aGluIHRoZSBBRlMgaW5vZGUgbWFuYWdlbWVudCBjb2RlLiBJdCYjMzk7cyBwcm9iYWJseSByZXNwb25zaWJsZSBmb3Igc2V0dGluZyB1cCBzb21lIGludGVybmFsIHN0cnVjdHVyZXMgb3IgZGVmYXVsdHMgKm9uY2UqIGR1cmluZyBtb2R1bGUgbG9hZCBvciBzeXN0ZW0gaW5pdGlhbGl6YXRpb24sIHJlbGF0ZWQgdG8gdGhlIEFGUyBmaWxlIHN5c3RlbS4gQSBzdGF0aWMgZnVuY3Rpb24gc3VnZ2VzdHMgaXQmIzM5O3Mgbm90IG1lYW50IHRvIGJlIGRpcmVjdGx5IGNhbGxlZCBmcm9tIG91dHNpZGUgdGhlIHNwZWNpZmljIHNvdXJjZSBmaWxlIG9yIGNvbXBpbGF0aW9uIHVuaXQgd2hlcmUgaXQmIzM5O3MgZGVmaW5lZC4gTm93LCBsZXQmIzM5O3Mgc2VlIGhvdyBpdCYjMzk7cyB1c2VkIHdpdGhpbiB0aGUgY29udGV4dCBvZiBpbm9kZSBhbGxvY2F0aW9uLiBJJiMzOTtsbCBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgYHN0YXRpY2AgZnVuY3Rpb24gaXMgdXRpbGl6ZWQgdG8gY29uZmlybSBteSBoeXBvdGhlc2lzLgoKTm93LCBsZXQmIzM5O3Mgc2hpZnQgZm9jdXMgdG8gdW5kZXJzdGFuZCBob3cgYWxsIG9mIHRoaXMgaW50ZXJwbGF5cyB3aXRoIGlub2RlIG1hbmFnZW1lbnQuIEkmIzM5O2xsIG5lZWQgdG8gZXhhbWluZSBgYWZzX2FsbG9jX2lub2RlYCBuZXh0LiBUaGlzIHdpbGwgbGlrZWx5IHNoZWQgbGlnaHQgb24gdGhlIHB1cnBvc2Ugb2YgdGhhdCBzdGF0aWMgZnVuY3Rpb24uIEkmIzM5O2xsIGRpdmUgaW50byB0aGUgZGV0YWlscyBvZiBpbm9kZSBhbGxvY2F0aW9uIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGUgY29kZSBpcyBkb2luZyB3aXRoaW4gdGhpcyBzY29wZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMDIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIyIDA5OjMzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2Fmc19hbGxvY19pbm9kZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL2Fmcy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvYWZzL2ludGVybmFsLmg9NjcwPWVudW0gYWZzX2xvY2tfc3RhdGUge1xuLS1cbmZzL2Fmcy9pbnRlcm5hbC5oLTY4My0gKlxuZnMvYWZzL2ludGVybmFsLmg6Njg0OiAqIE5vdGUgdGhhdCBhZnNfYWxsb2NfaW5vZGUoKSAqbXVzdCogcmVzZXQgYW55dGhpbmcgdGhhdCBjb3VsZCBpbmNvcnJlY3RseVxuZnMvYWZzL2ludGVybmFsLmgtNjg1LSAqIGxlYWsgZnJvbSBvbmUgaW5vZGUgdG8gYW5vdGhlci5cbi0tXG5mcy9hZnMvc3VwZXIuYz0zMz1zdGF0aWMgdm9pZCBhZnNfa2lsbF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKTtcbmZzL2Fmcy9zdXBlci5jOjM0OnN0YXRpYyBzdHJ1Y3QgaW5vZGUgKmFmc19hbGxvY19pbm9kZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKTtcbmZzL2Fmcy9zdXBlci5jLTM1LXN0YXRpYyB2b2lkIGFmc19kZXN0cm95X2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpO1xuLS1cbmZzL2Fmcy9zdXBlci5jPTU1PXN0YXRpYyBjb25zdCBzdHJ1Y3Qgc3VwZXJfb3BlcmF0aW9ucyBhZnNfc3VwZXJfb3BzID0ge1xuZnMvYWZzL3N1cGVyLmMtNTYtXHQuc3RhdGZzXHRcdD0gYWZzX3N0YXRmcyxcbmZzL2Fmcy9zdXBlci5jOjU3Olx0LmFsbG9jX2lub2RlXHQ9IGFmc19hbGxvY19pbm9kZSxcbmZzL2Fmcy9zdXBlci5jLTU4LVx0LndyaXRlX2lub2RlXHQ9IG5ldGZzX3VucGluX3dyaXRlYmFjayxcbi0tXG5mcy9hZnMvc3VwZXIuYz02MjI9c3RhdGljIGludCBhZnNfaW5pdF9mc19jb250ZXh0KHN0cnVjdCBmc19jb250ZXh0ICpmYylcbi0tXG5mcy9hZnMvc3VwZXIuYy02NDYtICogSW5pdGlhbGlzZSBhbiBpbm9kZSBjYWNoZSBzbGFiIGVsZW1lbnQgcHJpb3IgdG8gYW55IHVzZS4gIE5vdGUgdGhhdFxuZnMvYWZzL3N1cGVyLmM6NjQ3OiAqIGFmc19hbGxvY19pbm9kZSgpICptdXN0KiByZXNldCBhbnl0aGluZyB0aGF0IGNvdWxkIGluY29ycmVjdGx5IGxlYWsgZnJvbSBvbmVcbmZzL2Fmcy9zdXBlci5jLTY0OC0gKiBpbm9kZSB0byBhbm90aGVyLlxuLS1cbmZzL2Fmcy9zdXBlci5jPTY1MD1zdGF0aWMgdm9pZCBhZnNfaV9pbml0X29uY2Uodm9pZCAqX3Zub2RlKVxuLS1cbmZzL2Fmcy9zdXBlci5jLTY2OS0gKi9cbmZzL2Fmcy9zdXBlci5jOjY3MDpzdGF0aWMgc3RydWN0IGlub2RlICphZnNfYWxsb2NfaW5vZGUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcbmZzL2Fmcy9zdXBlci5jLTY3MS17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMiAwOTozMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0ODMwMgoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDI1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoaXMgY29kZToKCioqQW5hbHl6aW5nIHRoZSBBRlMgSW5vZGUgQWxsb2NhdGlvbiBhbmQgQWRkcmVzcyBFeHRyYWN0aW9uKioKCk9rYXksIHNvIGBhZnNfYWxsb2NfaW5vZGVgIGlzIGRlY2xhcmVkIGFzIHN0YXRpYy4gVGhpcyBpbW1lZGlhdGVseSB0ZWxscyBtZSB0aGF0IGl0JiMzOTtzIG9ubHkgdmlzaWJsZSB3aXRoaW4gdGhlIGN1cnJlbnQgY29tcGlsYXRpb24gdW5pdCwgbGlrZWx5IHdpdGhpbiB0aGUgQUZTIGlub2RlIG1hbmFnZW1lbnQgY29kZSBpdHNlbGYuIFRoaXMgaXMgaW1wb3J0YW50IGZvciBzY29waW5nIGFuZCBwcmV2ZW50aW5nIGFjY2lkZW50YWwgZXh0ZXJuYWwgY2FsbHMgdGhhdCBtaWdodCBieXBhc3MgaW50ZW5kZWQgaW5pdGlhbGl6YXRpb24gb3IgY29udHJvbCBmbG93IHdpdGhpbiB0aGF0IHBhcnQgb2YgdGhlIGNvZGUgYmFzZS4gS25vd2luZyBpdCYjMzk7cyBzdGF0aWMgaGVscHMgd2l0aCB1bmRlcnN0YW5kaW5nIGRlcGVuZGVuY2llcyBhbmQgcG90ZW50aWFsIHNpZGUgZWZmZWN0cyB3aXRoaW4gdGhlIG1vZHVsZS4gR29vZCBlbmNhcHN1bGF0aW9uLCBpbiB0aGVvcnkuCgpOb3csIEkgbmVlZCB0byBjaGVjayBob3cgaXQmIzM5O3MgYmVpbmcgdXNlZCBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIG90aGVyIHBhcnRzIG9mIHRoZSBBRlMgZmlsZXN5c3RlbSBpbXBsZW1lbnRhdGlvbi4gVGhlIG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIGV4YW1pbmUgYGFmc19leHRyYWN0X3ZsX2FkZHJzYC4gVGhpcyBmdW5jdGlvbiBpcyBsaWtlbHkgaW52b2x2ZWQgaW4gZXh0cmFjdGluZyB2aXJ0dWFsIGFkZHJlc3MgaW5mb3JtYXRpb24sIHBlcmhhcHMgZnJvbSBhbiBBRlMgdm9sdW1lIGxpc3Qgb3Igc29tZSBvdGhlciBzdHJ1Y3R1cmUgcmVsYXRlZCB0byB0aGUgZmlsZXN5c3RlbSYjMzk7cyBhZGRyZXNzaW5nIHNjaGVtZS4gSSYjMzk7bSBhc3N1bWluZyB0aGF0IHRoaXMgYWRkcmVzcyBpbmZvcm1hdGlvbiBpcyBjcnVjaWFsIGZvciBzb21lIHBhcnQgb2YgaW5vZGUgaW5pdGlhbGl6YXRpb24gb3Igb3BlcmF0aW9uLCBidXQgSSYjMzk7bGwgbmVlZCB0byBkaWcgaW50byB0aGUgZnVuY3Rpb24mIzM5O3Mgc3BlY2lmaWMgaW1wbGVtZW50YXRpb24gdG8gY29uZmlybSBteSBhc3N1bXB0aW9ucyBhbmQgaG93IHRob3NlIHJlbGF0ZSB0byBpbm9kZSBhbGxvY2F0aW9uLiBFeGFtaW5pbmcgdGhlIGZ1bmN0aW9ucyB3aGljaCBjYWxsIGl0LCBvciBpdCBjYWxscywgaXMgd2hhdCBJJiMzOTtsbCBuZWVkIHRvIGRvIG5leHQsIHdoaWNoIHdpbGwgcHJvdmlkZSBjb250ZXh0IGZvciB1bmRlcnN0YW5kaW5nIGl0cyBpbXBhY3Qgb24gdGhlIGlub2RlLXJlbGF0ZWQgbG9naWMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTA0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMiAwOTozMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDthZnNfZXh0cmFjdF92bF9hZGRycyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL2Fmcy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvYWZzL3ZsX2xpc3QuYz03Nz1zdGF0aWMgdTE2IGFmc19leHRyYWN0X2xlMTYoY29uc3QgdTggKipfYilcbi0tXG5mcy9hZnMvdmxfbGlzdC5jLTg4LSAqL1xuZnMvYWZzL3ZsX2xpc3QuYzo4OTpzdGF0aWMgc3RydWN0IGFmc19hZGRyX2xpc3QgKmFmc19leHRyYWN0X3ZsX2FkZHJzKHN0cnVjdCBhZnNfbmV0ICpuZXQsXG5mcy9hZnMvdmxfbGlzdC5jLTkwLVx0XHRcdFx0XHRcdCAgY29uc3QgdTggKipfYiwgY29uc3QgdTggKmVuZCxcbi0tXG5mcy9hZnMvdmxfbGlzdC5jPTE2MD1zdHJ1Y3QgYWZzX3Zsc2VydmVyX2xpc3QgKmFmc19leHRyYWN0X3Zsc2VydmVyX2xpc3Qoc3RydWN0IGFmc19jZWxsICpjZWxsLFxuLS1cbmZzL2Fmcy92bF9saXN0LmMtMjYzLVx0XHQgKi9cbmZzL2Fmcy92bF9saXN0LmM6MjY0Olx0XHRhZGRycyA9IGFmc19leHRyYWN0X3ZsX2FkZHJzKGNlbGwtXHUwMDNlbmV0LCBcdTAwMjZiLCBlbmQsIGJzLm5yX2FkZHJzLCBicy5wb3J0KTtcbmZzL2Fmcy92bF9saXN0LmMtMjY1LVx0XHRpZiAoSVNfRVJSKGFkZHJzKSkge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjIgMDk6MzM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDg5MDQKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAyOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgeW91IHJlcXVlc3RlZDoKCioqU3RhdGljIEZ1bmN0aW9uIENoZWNrIGFuZCBTZXJ2ZXIgTGlzdCBWZXJpZmljYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSB0aGlua2luZyBhYm91dCB0aGlzIGNvZGUsIGFuZCB0aGUgYGFmc19leHRyYWN0X3ZsX2FkZHJzYCBmdW5jdGlvbi4uLiBpdCYjMzk7cyBzdGF0aWMsIHdoaWNoIGlzIGEga2V5IGNoYXJhY3RlcmlzdGljIHRvIGNvbnNpZGVyIGluIHRoaXMgY29udGV4dC4gSXQgc3VnZ2VzdHMgcG90ZW50aWFsIHNjb3BpbmcgbGltaXRhdGlvbnMgYW5kIHBvc3NpYmxlIGltcGxpY2F0aW9ucyBmb3IgZXh0ZXJuYWwgYWNjZXNzIG9yIG1vZHVsYXJpdHkuIEdpdmVuIGl0cyBzdGF0aWMgbmF0dXJlLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcmVsYXRpb25zaGlwIHRvIHRoZSBicm9hZGVyIHN5c3RlbSwgYW5kIGhvdyB0aGF0IGltcGFjdHMgbXkgYW5hbHlzaXMuCgpOb3csIHRvIHVuZGVyc3RhbmQgaXRzIHB1cnBvc2Ugd2l0aGluIHRoZSBsYXJnZXIgYXJjaGl0ZWN0dXJlIEkgc2hvdWxkIG5vdyBjaGVjayBgYWZzX2V4dHJhY3RfdmxzZXJ2ZXJfbGlzdGAuIFRoYXQgY2FsbCBsaWtlbHkgZ2l2ZXMgaW5zaWdodCBpbnRvIHRoZSBsaXN0IG9mIHNlcnZlcnMgdGhhdCBhcmUgaW4gcGxheSwgd2hpY2ggSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IGBhZnNfZXh0cmFjdF92bF9hZGRyc2AgcmVsYXRlcyB0by4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMDYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIyIDA5OjMzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2Fmc19leHRyYWN0X3Zsc2VydmVyX2xpc3QmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9hZnMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2Fmcy9hZGRyX2xpc3QuYz0yNTA9c3RydWN0IGFmc192bHNlcnZlcl9saXN0ICphZnNfZG5zX3F1ZXJ5KHN0cnVjdCBhZnNfY2VsbCAqY2VsbCwgdGltZTY0X3QgKl9leHBpcnkpXG4tLVxuZnMvYWZzL2FkZHJfbGlzdC5jLTI2OC1cdGlmIChyZXQgXHUwMDNlIDEgXHUwMDI2XHUwMDI2IHJlc3VsdFswXSA9PSAwKVxuZnMvYWZzL2FkZHJfbGlzdC5jOjI2OTpcdFx0dmxsaXN0ID0gYWZzX2V4dHJhY3RfdmxzZXJ2ZXJfbGlzdChjZWxsLCByZXN1bHQsIHJldCk7XG5mcy9hZnMvYWRkcl9saXN0LmMtMjcwLVx0ZWxzZVxuLS1cbmZzL2Fmcy9pbnRlcm5hbC5oPTE2ODI9ZXh0ZXJuIHZvaWQgYWZzX3B1dF92bHNlcnZlcmxpc3Qoc3RydWN0IGFmc19uZXQgKiwgc3RydWN0IGFmc192bHNlcnZlcl9saXN0ICopO1xuZnMvYWZzL2ludGVybmFsLmg6MTY4MzpleHRlcm4gc3RydWN0IGFmc192bHNlcnZlcl9saXN0ICphZnNfZXh0cmFjdF92bHNlcnZlcl9saXN0KHN0cnVjdCBhZnNfY2VsbCAqLFxuZnMvYWZzL2ludGVybmFsLmgtMTY4NC1cdFx0XHRcdFx0XHRcdCAgIGNvbnN0IHZvaWQgKiwgc2l6ZV90KTtcbi0tXG5mcy9hZnMvdmxfbGlzdC5jPTg5PXN0YXRpYyBzdHJ1Y3QgYWZzX2FkZHJfbGlzdCAqYWZzX2V4dHJhY3RfdmxfYWRkcnMoc3RydWN0IGFmc19uZXQgKm5ldCxcbi0tXG5mcy9hZnMvdmxfbGlzdC5jLTE1OS0gKi9cbmZzL2Fmcy92bF9saXN0LmM6MTYwOnN0cnVjdCBhZnNfdmxzZXJ2ZXJfbGlzdCAqYWZzX2V4dHJhY3RfdmxzZXJ2ZXJfbGlzdChzdHJ1Y3QgYWZzX2NlbGwgKmNlbGwsXG5mcy9hZnMvdmxfbGlzdC5jLTE2MS1cdFx0XHRcdFx0XHQgICAgY29uc3Qgdm9pZCAqYnVmZmVyLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjIgMDk6MzM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDk0OTcKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAyOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhbmFseXNpcyBvZiB0aGUgc2l0dWF0aW9uOgoKKipSZWZsZWN0aW5nIG9uIEdsb2JhbCBTY29wZSBhbmQgRnVuY3Rpb24gSW50ZXJhY3Rpb24qKgoKT2theSwgc28gYGFmc19leHRyYWN0X3Zsc2VydmVyX2xpc3RgIGlzIGRlY2xhcmVkIGdsb2JhbGx5LiBUaGF0JiMzOTtzIGEga2V5IG9ic2VydmF0aW9uLiBOb3cgSSBuZWVkIHRvIHNlZSBob3cgaXQmIzM5O3MgdXNlZCBhbmQgd2hhdCBjb250ZXh0IGl0JiMzOTtzIG9wZXJhdGluZyB3aXRoaW4uIFRvIHVuZGVyc3RhbmQgaXRzIGltcGFjdCwgSSBuZWVkIHRvIGxvb2sgYXQgYSByZWxhdGVkIGZ1bmN0aW9uLiBMZXQmIzM5O3MgZGlnIGludG8gYGFmc19pbnNlcnRfdm9sdW1lX2ludG9fY2VsbGAgYW5kIHNlZSBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIGxpc3QuIFBlcmhhcHMgYGFmc19leHRyYWN0X3Zsc2VydmVyX2xpc3RgIHByZXBhcmVzIGRhdGEgdGhhdCBgYWZzX2luc2VydF92b2x1bWVfaW50b19jZWxsYCB1c2VzPyBPciBtYXliZSBpdCYjMzk7cyB0aGUgb3RoZXIgd2F5IGFyb3VuZD8gVW5kZXJzdGFuZGluZyB0aGVpciByZWxhdGlvbnNoaXAgd2lsbCBnaXZlIG1lIGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgdGhlIG92ZXJhbGwgc3lzdGVtJiMzOTtzIGFyY2hpdGVjdHVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMDgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIyIDA5OjMzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2Fmc19pbnNlcnRfdm9sdW1lX2ludG9fY2VsbCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL2Fmcy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvYWZzL3ZvbHVtZS5jPTE1PXN0YXRpYyB2b2lkIGFmc19kZXN0cm95X3ZvbHVtZShzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspO1xuLS1cbmZzL2Fmcy92b2x1bWUuYy0yMC0gKi9cbmZzL2Fmcy92b2x1bWUuYzoyMTpzdGF0aWMgc3RydWN0IGFmc192b2x1bWUgKmFmc19pbnNlcnRfdm9sdW1lX2ludG9fY2VsbChzdHJ1Y3QgYWZzX2NlbGwgKmNlbGwsXG5mcy9hZnMvdm9sdW1lLmMtMjItXHRcdFx0XHRcdFx0ICAgICAgc3RydWN0IGFmc192b2x1bWUgKnZvbHVtZSlcbi0tXG5mcy9hZnMvdm9sdW1lLmM9MTMzPXN0YXRpYyBzdHJ1Y3QgYWZzX3ZvbHVtZSAqYWZzX2xvb2t1cF92b2x1bWUoc3RydWN0IGFmc19mc19jb250ZXh0ICpwYXJhbXMsXG4tLVxuZnMvYWZzL3ZvbHVtZS5jLTE0Mi1cbmZzL2Fmcy92b2x1bWUuYzoxNDM6XHR2b2x1bWUgPSBhZnNfaW5zZXJ0X3ZvbHVtZV9pbnRvX2NlbGwocGFyYW1zLVx1MDAzZWNlbGwsIGNhbmRpZGF0ZSk7XG5mcy9hZnMvdm9sdW1lLmMtMTQ0LVx0aWYgKHZvbHVtZSA9PSBjYW5kaWRhdGUpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTA5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMiAwOTozMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0OTkzNwoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDI2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOgoKKipFeGFtaW5pbmcgdGhlIEFGUyBWb2x1bWUgSW5zZXJ0aW9uIFByb2Nlc3MqKgoKT2theSwgc28gYGFmc19pbnNlcnRfdm9sdW1lX2ludG9fY2VsbGAgaXMgZGVjbGFyZWQgYXMgc3RhdGljLiBUaGlzIG1lYW5zIGl0JiMzOTtzIGxpa2VseSBzY29wZWQgdG8gYSBzaW5nbGUgY29tcGlsYXRpb24gdW5pdCwgYW5kIG5vdCBpbnRlbmRlZCBmb3IgZXh0ZXJuYWwgdXNlIGJleW9uZCB0aGF0IHVuaXQuIFRoaXMgc3VnZ2VzdHMgYSBtb3JlIGludGVybmFsLCBwb3RlbnRpYWxseSBoZWxwZXIgZnVuY3Rpb24gcm9sZSwgcmF0aGVyIHRoYW4gc29tZXRoaW5nIGRlc2lnbmVkIHRvIGJlIGRpcmVjdGx5IGNhbGxlZCBmcm9tIGVsc2V3aGVyZSBpbiB0aGUgQUZTIHN5c3RlbS4KCk5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHJlbGF0aW9uc2hpcCB0byB0aGUgYnJvYWRlciB2b2x1bWUgbWFuYWdlbWVudCBmcmFtZXdvcmsuIExldCYjMzk7cyBkaWcgaW50byBgYWZzX2xvb2t1cF92b2x1bWVgLiBUaGlzIGZ1bmN0aW9uIGlzIHByb2JhYmx5IHRoZSBrZXkgdG8gbG9jYXRpbmcgZXhpc3Rpbmcgdm9sdW1lcy4gSSB3YW50IHRvIHNlZSBob3cgdGhlc2UgdHdvLCB0aGUgaW5zZXJ0aW9uIGFuZCBsb29rdXAgZnVuY3Rpb25zLCBpbnRlcmFjdC4gSSBiZXQgdGhlIGxvb2t1cCBpcyBpbnZvbHZlZCBpbiBtYWtpbmcgc3VyZSB0aGVyZSBhcmUgbm8gY29uZmxpY3RzIG9yIG92ZXJ3cml0ZXMgb2YgZXhpc3Rpbmcgdm9sdW1lIGRhdGEsIG9yIG1heWJlIGl0IGlzIHBhcnQgb2YgdGhlIHZhbGlkYXRpb24gYmVmb3JlIGluc2VydGlvbi4gVW5kZXJzdGFuZGluZyBgYWZzX2xvb2t1cF92b2x1bWVgIHdpbGwgaGVscCBtZSBkZXRlcm1pbmUgdGhlIGxhcmdlciBjb250ZXh0IG9mIGBhZnNfaW5zZXJ0X3ZvbHVtZV9pbnRvX2NlbGxgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjIgMDk6MzM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YWZzX2xvb2t1cF92b2x1bWUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9hZnMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2Fmcy9jYWxsYmFjay5jPTEwMT12b2lkIGFmc19icmVha19jYWxsYmFjayhzdHJ1Y3QgYWZzX3Zub2RlICp2bm9kZSwgZW51bSBhZnNfY2JfYnJlYWtfcmVhc29uIHJlYXNvbilcbi0tXG5mcy9hZnMvY2FsbGJhY2suYy0xMTAtICovXG5mcy9hZnMvY2FsbGJhY2suYzoxMTE6c3RhdGljIHN0cnVjdCBhZnNfdm9sdW1lICphZnNfbG9va3VwX3ZvbHVtZV9yY3Uoc3RydWN0IGFmc19jZWxsICpjZWxsLFxuZnMvYWZzL2NhbGxiYWNrLmMtMTEyLVx0XHRcdFx0XHRcdGFmc192b2xpZF90IHZpZClcbi0tXG5mcy9hZnMvY2FsbGJhY2suYz0yMDY9c3RhdGljIHZvaWQgYWZzX2JyZWFrX3NvbWVfY2FsbGJhY2tzKHN0cnVjdCBhZnNfc2VydmVyICpzZXJ2ZXIsXG4tLVxuZnMvYWZzL2NhbGxiYWNrLmMtMjE1LVx0cmN1X3JlYWRfbG9jaygpO1xuZnMvYWZzL2NhbGxiYWNrLmM6MjE2Olx0dm9sdW1lID0gYWZzX2xvb2t1cF92b2x1bWVfcmN1KHNlcnZlci1cdTAwM2VjZWxsLCB2aWQpO1xuZnMvYWZzL2NhbGxiYWNrLmMtMjE3LVx0aWYgKCF2b2x1bWUpIHtcbi0tXG5mcy9hZnMvdm9sdW1lLmM9NzY9c3RhdGljIHN0cnVjdCBhZnNfdm9sdW1lICphZnNfYWxsb2Nfdm9sdW1lKHN0cnVjdCBhZnNfZnNfY29udGV4dCAqcGFyYW1zLFxuLS1cbmZzL2Fmcy92b2x1bWUuYy0xMzItICovXG5mcy9hZnMvdm9sdW1lLmM6MTMzOnN0YXRpYyBzdHJ1Y3QgYWZzX3ZvbHVtZSAqYWZzX2xvb2t1cF92b2x1bWUoc3RydWN0IGFmc19mc19jb250ZXh0ICpwYXJhbXMsXG5mcy9hZnMvdm9sdW1lLmMtMTM0LVx0XHRcdFx0XHQgICAgc3RydWN0IGFmc192bGRiX2VudHJ5ICp2bGRiKVxuLS1cbmZzL2Fmcy92b2x1bWUuYz0xOTg9c3RydWN0IGFmc192b2x1bWUgKmFmc19jcmVhdGVfdm9sdW1lKHN0cnVjdCBhZnNfZnNfY29udGV4dCAqcGFyYW1zKVxuLS1cbmZzL2Fmcy92b2x1bWUuYy0yMjYtXG5mcy9hZnMvdm9sdW1lLmM6MjI3Olx0dm9sdW1lID0gYWZzX2xvb2t1cF92b2x1bWUocGFyYW1zLCB2bGRiKTtcbmZzL2Fmcy92b2x1bWUuYy0yMjgtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMiAwOTozMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MDY0NwoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIEFGUyBWb2x1bWUgTWFuYWdlbWVudCoqCgpPa2F5LCBzbyBgYWZzX2xvb2t1cF92b2x1bWVgIGlzIGZsYWdnZWQgYXMgYSBzdGF0aWMgZnVuY3Rpb24uIFRoYXQgaW1tZWRpYXRlbHkgbWFrZXMgbWUgdGhpbmsgYWJvdXQgaG93IGl0JiMzOTtzIHVzZWQgd2l0aGluIHRoZSBBRlMga2VybmVsLiBJcyBpdCB1c2VkIG9ubHkgaW50ZXJuYWxseSB3aXRoaW4gdGhlIGtlcm5lbCBtb2R1bGUsIG9yIGlzIGl0IGV4cG9zZWQgaW4gc29tZSB3YXkgdmlhIGEgbGltaXRlZCBBUEk/IFN0YXRpYyBmdW5jdGlvbnMgYXJlIHVzdWFsbHkgYSBzaWduYWwgb2YgaW50ZXJuYWwgdXNlIG9ubHksIHByZXZlbnRpbmcgcG90ZW50aWFsIGV4dGVybmFsIG1vZGlmaWNhdGlvbnMgb3IgbWlzdXNlLiBXZSBuZWVkIHRvIGJlIHdhcnkgb2Ygd2hlcmUgaXQgc2l0cyByZWxhdGl2ZSB0byBvdGhlciBjb21wb25lbnRzLgoKTm93LCB0aGF0JiMzOTtzIGludGVyZXN0aW5nLiBHaXZlbiB0aGF0IG9ic2VydmF0aW9uLCBsZXQmIzM5O3MgdHVybiBvdXIgYXR0ZW50aW9uIHRvIGBhZnNfY3JlYXRlX3ZvbHVtZWAuIEkmIzM5O20gY3VyaW91cyB0byBzZWUgaG93IHRoZSBzeXN0ZW0gZ29lcyBhYm91dCBzcGlubmluZyB1cCBuZXcgdm9sdW1lcywgZXNwZWNpYWxseSBpbiByZWxhdGlvbnNoaXAgdG8gbG9va3VwLiBXaGF0IGludGVyYWN0aW9ucyBoYXBwZW4gYmV0d2VlbiB0aGUgdHdvPyBQZXJoYXBzIGBhZnNfY3JlYXRlX3ZvbHVtZWAgcmVsaWVzIG9uIGBhZnNfbG9va3VwX3ZvbHVtZWAgZm9yIGluaXRpYWxpemF0aW9uIG9yIGludGVybmFsIGJvb2trZWVwaW5nIHdoZW4gZXN0YWJsaXNoaW5nIG5ldyB2b2x1bWUgcmVjb3Jkcy4gT3IgbWF5YmUgYGFmc19jcmVhdGVfdm9sdW1lYCBzaWRlc3RlcHMgbG9va3VwIGVudGlyZWx5LCB3aGljaCB3b3VsZCBpbXBseSBhIGRpZmZlcmVudCB2b2x1bWUgcmVnaXN0cmF0aW9uIG1lY2hhbmlzbS4gSXQgd2lsbCBiZSB1c2VmdWwgdG8gaW52ZXN0aWdhdGUgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHRoZXNlIHR3byBmdW5jdGlvbnMgZnVydGhlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIyIDA5OjMzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2Fmc19jcmVhdGVfdm9sdW1lJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvYWZzLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9hZnMvaW50ZXJuYWwuaD0xNjgzPWV4dGVybiBzdHJ1Y3QgYWZzX3Zsc2VydmVyX2xpc3QgKmFmc19leHRyYWN0X3Zsc2VydmVyX2xpc3Qoc3RydWN0IGFmc19jZWxsICosXG4tLVxuZnMvYWZzL2ludGVybmFsLmgtMTY4OC0gKi9cbmZzL2Fmcy9pbnRlcm5hbC5oOjE2ODk6ZXh0ZXJuIHN0cnVjdCBhZnNfdm9sdW1lICphZnNfY3JlYXRlX3ZvbHVtZShzdHJ1Y3QgYWZzX2ZzX2NvbnRleHQgKik7XG5mcy9hZnMvaW50ZXJuYWwuaC0xNjkwLWV4dGVybiBpbnQgYWZzX2FjdGl2YXRlX3ZvbHVtZShzdHJ1Y3QgYWZzX3ZvbHVtZSAqKTtcbi0tXG5mcy9hZnMvc3VwZXIuYz0zNTU9c3RhdGljIGludCBhZnNfdmFsaWRhdGVfZmMoc3RydWN0IGZzX2NvbnRleHQgKmZjKVxuLS1cbmZzL2Fmcy9zdXBlci5jLTQwMi1cbmZzL2Fmcy9zdXBlci5jOjQwMzpcdFx0dm9sdW1lID0gYWZzX2NyZWF0ZV92b2x1bWUoY3R4KTtcbmZzL2Fmcy9zdXBlci5jLTQwNC1cdFx0aWYgKElTX0VSUih2b2x1bWUpKVxuLS1cbmZzL2Fmcy92bF9hbGlhcy5jPTE3PXN0YXRpYyBzdHJ1Y3QgYWZzX3ZvbHVtZSAqYWZzX3NhbXBsZV92b2x1bWUoc3RydWN0IGFmc19jZWxsICpjZWxsLCBzdHJ1Y3Qga2V5ICprZXksXG4tLVxuZnMvYWZzL3ZsX2FsaWFzLmMtMjktXG5mcy9hZnMvdmxfYWxpYXMuYzozMDpcdHZvbHVtZSA9IGFmc19jcmVhdGVfdm9sdW1lKFx1MDAyNmZjKTtcbmZzL2Fmcy92bF9hbGlhcy5jLTMxLVx0X2xlYXZlKFwmIzM0OyA9ICVwXCYjMzQ7LCB2b2x1bWUpO1xuLS1cbmZzL2Fmcy92b2x1bWUuYz0xNTQ9c3RhdGljIHN0cnVjdCBhZnNfdmxkYl9lbnRyeSAqYWZzX3ZsX2xvb2t1cF92bGRiKHN0cnVjdCBhZnNfY2VsbCAqY2VsbCxcbi0tXG5mcy9hZnMvdm9sdW1lLmMtMTk3LSAqL1xuZnMvYWZzL3ZvbHVtZS5jOjE5ODpzdHJ1Y3QgYWZzX3ZvbHVtZSAqYWZzX2NyZWF0ZV92b2x1bWUoc3RydWN0IGFmc19mc19jb250ZXh0ICpwYXJhbXMpXG5mcy9hZnMvdm9sdW1lLmMtMTk5LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIyIDA5OjMzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUxMzc0CgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogNzM4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlJlZmluaW5nIHRoZSBGb2N1cyBmb3IgVGhpcyBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgdHJ5aW5nIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUgbW9zdCBjcml0aWNhbCBwYXJ0cy4gVGhlIGZhY3QgdGhhdCBgYWZzX2NyZWF0ZV92b2x1bWVgIGlzIGdsb2JhbCBpcyBpbW1lZGlhdGVseSB3b3J0aCBub3RpbmcuIE5vdywgbGV0JiMzOTtzIHNlZSwgbXkgaW5pdGlhbCBsaXN0IG9mIGtleSBzeW1ib2xzIGluY2x1ZGVzIHF1aXRlIGEgZmV3LiBJJiMzOTt2ZSBnb3Q6IGBhZnNfZGlyX2l0ZXJhdGVfYmxvY2tgLCBgYWZzX2xvb2t1cF9vbmVfZmlsbGRpcmAsIGBhZnNfbG9va3VwX2ZpbGxkaXJgLCBgYWZzX2V4dHJhY3RfdmxfYWRkcnNgLCBgYWZzX2V4dHJhY3RfdmxzZXJ2ZXJfbGlzdGAsIGBhZnNfaW5vZGVfaW5pdF9mcm9tX3N0YXR1c2AsIGBhZnNfbG9va3VwX2NlbGxgLCBgYWZzX2RlbGl2ZXJfY2JfaW5pdF9jYWxsX2JhY2tfc3RhdGUzYCwgYGFmc19kZWxpdmVyX2NiX3Byb2JlX3V1aWRgLCBgYWZzX2JyZWFrX2NhbGxiYWNrc2AsIGBhZnNfZHlucm9vdF9yZWFkZGlyYCwgYGFmc19wdXRfb3BlcmF0aW9uYCwgYW5kIG9mIGNvdXJzZSwgYGFmc19jcmVhdGVfdm9sdW1lYC4KCk5vdywgbGV0JiMzOTtzIGdldCBzcGVjaWZpYy4gTG9va2luZyBhdCB3aGF0JiMzOTtzIGJlZW4gbW9kaWZpZWQsIEkgY2FuIHNlZSBzb21lIG9mIHRoZXNlIGFyZSBjZW50cmFsIHRvIHRoZSBjb3JlIGNoYW5nZS4gU3BlY2lmaWNhbGx5IHRoZSBjaGFuZ2VzIHRvIGBhZnNfbG9va3VwX3ZvbHVtZV9yY3VgLCBgYWZzX2FsbG9jX2NlbGxgLCBgYWZzX3VwZGF0ZV9jZWxsYCwgYGFmc19jZWxsX2Rlc3Ryb3lgLCBgYWZzX2Rlc3Ryb3lfY2VsbF93b3JrYCBhbmQgYGFmc19pbnNlcnRfdm9sdW1lX2ludG9fY2VsbGAgcG9pbnQgdG8gc29tZSBkZWVwZXIgY2hhbmdlcyBoZXJlLgoKUmVmaW5pbmcgZnVydGhlciwgSSYjMzk7bGwgZ28gd2l0aCBhIHNsaWdodGx5IHRpZ2h0ZXIgbGlzdDogYGFmc19icmVha19jYWxsYmFja3NgLCBgYWZzX2xvb2t1cF9jZWxsYCwgYGFmc19kZWxpdmVyX2NiX2luaXRfY2FsbF9iYWNrX3N0YXRlM2AsIGBhZnNfZGVsaXZlcl9jYl9wcm9iZV91dWlkYCwgYGFmc19kaXJfaXRlcmF0ZV9ibG9ja2AsIGBhZnNfcmVhZGRpcmAsIGBhZnNfZG9fbG9va3VwX29uZWAsIGBhZnNfZG9fbG9va3VwYCwgYGFmc19keW5yb290X3JlYWRkaXJgLCBgYWZzX3B1dF9vcGVyYXRpb25gLCBgYWZzX2lub2RlX2luaXRfZnJvbV9zdGF0dXNgLCBgYWZzX2V4dHJhY3RfdmxzZXJ2ZXJfbGlzdGAsIGFuZCBgYWZzX2NyZWF0ZV92b2x1bWVgLgoKQWgsIGJ1dCB3YWl0IGEgc2Vjb25kLCBsb29raW5nIGNsb3NlciwgYGFmc19kb19sb29rdXBfb25lYCBhbmQgYGFmc19kb19sb29rdXBgIGFyZSBzdGF0aWMuIEkgbmVlZCB0byBzZWUgaWYgdGhleSYjMzk7cmUgYWN0dWFsbHkgZGlyZWN0bHkgcmVhY2hhYmxlIG9yIGlmIHdlIG5lZWQgdG8gdHJhY2sgdGhlaXIgdXNhZ2UgdGhyb3VnaCBhbiBleHBvcnQgb3IgdmlhIGFub3RoZXIgZnVuY3Rpb24uIFllcywgdGhleSBhcmUgcmVhY2hhYmxlIHRocm91Z2ggYGFmc19sb29rdXBgIGFuZCBgYWZzX2RfcmV2YWxpZGF0ZWAuIE9rYXksIEkmIzM5O2xsIHVzZSB0aG9zZSBpbnN0ZWFkLCBzaW5jZSB0aGV5JiMzOTtyZSB0aGUgZXh0ZXJuYWwgaW50ZXJmYWNlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIyIDA5OjM0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2Fmc19sb29rdXAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9hZnMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2Fmcy9jYWxsYmFjay5jPTEwMT12b2lkIGFmc19icmVha19jYWxsYmFjayhzdHJ1Y3QgYWZzX3Zub2RlICp2bm9kZSwgZW51bSBhZnNfY2JfYnJlYWtfcmVhc29uIHJlYXNvbilcbi0tXG5mcy9hZnMvY2FsbGJhY2suYy0xMTAtICovXG5mcy9hZnMvY2FsbGJhY2suYzoxMTE6c3RhdGljIHN0cnVjdCBhZnNfdm9sdW1lICphZnNfbG9va3VwX3ZvbHVtZV9yY3Uoc3RydWN0IGFmc19jZWxsICpjZWxsLFxuZnMvYWZzL2NhbGxiYWNrLmMtMTEyLVx0XHRcdFx0XHRcdGFmc192b2xpZF90IHZpZClcbi0tXG5mcy9hZnMvY2FsbGJhY2suYz0yMDY9c3RhdGljIHZvaWQgYWZzX2JyZWFrX3NvbWVfY2FsbGJhY2tzKHN0cnVjdCBhZnNfc2VydmVyICpzZXJ2ZXIsXG4tLVxuZnMvYWZzL2NhbGxiYWNrLmMtMjE1LVx0cmN1X3JlYWRfbG9jaygpO1xuZnMvYWZzL2NhbGxiYWNrLmM6MjE2Olx0dm9sdW1lID0gYWZzX2xvb2t1cF92b2x1bWVfcmN1KHNlcnZlci1cdTAwM2VjZWxsLCB2aWQpO1xuZnMvYWZzL2NhbGxiYWNrLmMtMjE3LVx0aWYgKCF2b2x1bWUpIHtcbi0tXG5mcy9hZnMvY2VsbC5jPTEwOD1zdGF0aWMgc3RydWN0IGFmc19jZWxsICphZnNfYWxsb2NfY2VsbChzdHJ1Y3QgYWZzX25ldCAqbmV0LFxuLS1cbmZzL2Fmcy9jZWxsLmMtMjI3LS8qXG5mcy9hZnMvY2VsbC5jOjIyODogKiBhZnNfbG9va3VwX2NlbGwgLSBMb29rIHVwIG9yIGNyZWF0ZSBhIGNlbGwgcmVjb3JkLlxuZnMvYWZzL2NlbGwuYy0yMjktICogQG5ldDpcdFRoZSBuZXR3b3JrIG5hbWVzcGFjZVxuLS1cbmZzL2Fmcy9jZWxsLmMtMjQwLSAqL1xuZnMvYWZzL2NlbGwuYzoyNDE6c3RydWN0IGFmc19jZWxsICphZnNfbG9va3VwX2NlbGwoc3RydWN0IGFmc19uZXQgKm5ldCxcbmZzL2Fmcy9jZWxsLmMtMjQyLVx0XHRcdFx0IGNvbnN0IGNoYXIgKm5hbWUsIHVuc2lnbmVkIGludCBuYW1lc3osXG5mcy9hZnMvY2VsbC5jLTI0My1cdFx0XHRcdCBjb25zdCBjaGFyICp2bGxpc3QsXG5mcy9hZnMvY2VsbC5jOjI0NDpcdFx0XHRcdCBlbnVtIGFmc19sb29rdXBfY2VsbF9mb3IgcmVhc29uLFxuZnMvYWZzL2NlbGwuYy0yNDUtXHRcdFx0XHQgZW51bSBhZnNfY2VsbF90cmFjZSB0cmFjZSlcbi0tXG5mcy9hZnMvY2VsbC5jPTQxNT1pbnQgYWZzX2NlbGxfaW5pdChzdHJ1Y3QgYWZzX25ldCAqbmV0LCBjb25zdCBjaGFyICpyb290Y2VsbClcbi0tXG5mcy9hZnMvY2VsbC5jLTQ0OS1cdC8qIGFsbG9jYXRlIGEgY2VsbCByZWNvcmQgZm9yIHRoZSByb290L3dvcmtzdGF0aW9uIGNlbGwgKi9cbmZzL2Fmcy9jZWxsLmM6NDUwOlx0bmV3X3Jvb3QgPSBhZnNfbG9va3VwX2NlbGwobmV0LCByb290Y2VsbCwgbGVuLCB2bGxpc3QsXG5mcy9hZnMvY2VsbC5jLTQ1MS1cdFx0XHRcdCAgIEFGU19MT09LVVBfQ0VMTF9ST09UQ0VMTCxcbi0tXG5mcy9hZnMvZGlyLmMtMjEtXG5mcy9hZnMvZGlyLmM6MjI6c3RhdGljIHN0cnVjdCBkZW50cnkgKmFmc19sb29rdXAoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcbmZzL2Fmcy9kaXIuYy0yMy1cdFx0XHRcdCB1bnNpZ25lZCBpbnQgZmxhZ3MpO1xuLS1cbmZzL2Fmcy9kaXIuYz0yOT1zdGF0aWMgdm9pZCBhZnNfZF9pcHV0KHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGlub2RlICppbm9kZSk7XG5mcy9hZnMvZGlyLmM6MzA6c3RhdGljIGJvb2wgYWZzX2xvb2t1cF9vbmVfZmlsbGRpcihzdHJ1Y3QgZGlyX2NvbnRleHQgKmN0eCwgY29uc3QgY2hhciAqbmFtZSwgaW50IG5sZW4sXG5mcy9hZnMvZGlyLmMtMzEtXHRcdFx0XHQgICB1NjQgaW5vLCB1MzIgdW5pcXVpZmllcik7XG5mcy9hZnMvZGlyLmMtMzItI2RlZmluZSBBRlNfTE9PS1VQX09ORSAoKGZpbGxkaXJfdCkweDEyM1VMKVxuZnMvYWZzL2Rpci5jOjMzOnN0YXRpYyBib29sIGFmc19sb29rdXBfZmlsbGRpcihzdHJ1Y3QgZGlyX2NvbnRleHQgKmN0eCwgY29uc3QgY2hhciAqbmFtZSwgaW50IG5sZW4sXG5mcy9hZnMvZGlyLmMtMzQtXHRcdFx0ICAgICAgIHU2NCBpbm8sIHUzMiB1bmlxdWlmaWVyKTtcbi0tXG5mcy9hZnMvZGlyLmM9NjA9Y29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgYWZzX2Rpcl9pbm9kZV9vcGVyYXRpb25zID0ge1xuZnMvYWZzL2Rpci5jLTYxLVx0LmNyZWF0ZVx0XHQ9IGFmc19jcmVhdGUsXG5mcy9hZnMvZGlyLmM6NjI6XHQubG9va3VwXHRcdD0gYWZzX2xvb2t1cCxcbmZzL2Fmcy9kaXIuYy02My1cdC5saW5rXHRcdD0gYWZzX2xpbmssXG4tLVxuZnMvYWZzL2Rpci5jPTc4PWNvbnN0IHN0cnVjdCBkZW50cnlfb3BlcmF0aW9ucyBhZnNfZnNfZGVudHJ5X29wZXJhdGlvbnMgPSB7XG4tLVxuZnMvYWZzL2Rpci5jLTg1LVxuZnMvYWZzL2Rpci5jOjg2OnN0cnVjdCBhZnNfbG9va3VwX29uZV9jb29raWUge1xuZnMvYWZzL2Rpci5jLTg3LVx0c3RydWN0IGRpcl9jb250ZXh0XHRjdHg7XG4tLVxuZnMvYWZzL2Rpci5jLTkyLVxuZnMvYWZzL2Rpci5jOjkzOnN0cnVjdCBhZnNfbG9va3VwX2Nvb2tpZSB7XG5mcy9hZnMvZGlyLmMtOTQtXHRzdHJ1Y3QgZGlyX2NvbnRleHRcdGN0eDtcbi0tXG5mcy9hZnMvZGlyLmM9MzU3PXN0YXRpYyBpbnQgYWZzX2Rpcl9pdGVyYXRlX2Jsb2NrKHN0cnVjdCBhZnNfdm5vZGUgKmR2bm9kZSxcbi0tXG5mcy9hZnMvZGlyLmMtNDI2LVx0XHRpZiAoY3R4LVx1MDAzZWFjdG9yID09IEFGU19MT09LVVApIHtcbmZzL2Fmcy9kaXIuYzo0Mjc6XHRcdFx0aWYgKCFhZnNfbG9va3VwX2ZpbGxkaXIoY3R4LCBkaXJlLVx1MDAzZXUubmFtZSwgbmxlbixcbmZzL2Fmcy9kaXIuYy00MjgtXHRcdFx0XHRcdFx0bnRvaGwoZGlyZS1cdTAwM2V1LnZub2RlKSxcbi0tXG5mcy9hZnMvZGlyLmMtNDMxLVx0XHR9IGVsc2UgaWYgKGN0eC1cdTAwM2VhY3RvciA9PSBBRlNfTE9PS1VQX09ORSkge1xuZnMvYWZzL2Rpci5jOjQzMjpcdFx0XHRpZiAoIWFmc19sb29rdXBfb25lX2ZpbGxkaXIoY3R4LCBkaXJlLVx1MDAzZXUubmFtZSwgbmxlbixcbmZzL2Fmcy9kaXIuYy00MzMtXHRcdFx0XHRcdFx0ICAgIG50b2hsKGRpcmUtXHUwMDNldS52bm9kZSksXG4tLVxuZnMvYWZzL2Rpci5jPTU1Mz1zdGF0aWMgaW50IGFmc19yZWFkZGlyKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgZGlyX2NvbnRleHQgKmN0eClcbi0tXG5mcy9hZnMvZGlyLmMtNTY1LSAqL1xuZnMvYWZzL2Rpci5jOjU2NjpzdGF0aWMgYm9vbCBhZnNfbG9va3VwX29uZV9maWxsZGlyKHN0cnVjdCBkaXJfY29udGV4dCAqY3R4LCBjb25zdCBjaGFyICpuYW1lLFxuZnMvYWZzL2Rpci5jLTU2Ny1cdFx0XHRcdCAgaW50IG5sZW4sIHU2NCBpbm8sIHUzMiB1bmlxdWlmaWVyKVxuZnMvYWZzL2Rpci5jLTU2OC17XG5mcy9hZnMvZGlyLmM6NTY5Olx0c3RydWN0IGFmc19sb29rdXBfb25lX2Nvb2tpZSAqY29va2llID1cbmZzL2Fmcy9kaXIuYzo1NzA6XHRcdGNvbnRhaW5lcl9vZihjdHgsIHN0cnVjdCBhZnNfbG9va3VwX29uZV9jb29raWUsIGN0eCk7XG5mcy9hZnMvZGlyLmMtNTcxLVxuLS1cbmZzL2Fmcy9kaXIuYz01OTg9c3RhdGljIGludCBhZnNfZG9fbG9va3VwX29uZShzdHJ1Y3QgaW5vZGUgKmRpciwgY29uc3Qgc3RydWN0IHFzdHIgKm5hbWUsXG4tLVxuZnMvYWZzL2Rpci5jLTYwMi1cdHN0cnVjdCBhZnNfc3VwZXJfaW5mbyAqYXMgPSBkaXItXHUwMDNlaV9zYi1cdTAwM2VzX2ZzX2luZm87XG5mcy9hZnMvZGlyLmM6NjAzOlx0c3RydWN0IGFmc19sb29rdXBfb25lX2Nvb2tpZSBjb29raWUgPSB7XG5mcy9hZnMvZGlyLmMtNjA0LVx0XHQuY3R4LmFjdG9yID0gQUZTX0xPT0tVUF9PTkUsXG4tLVxuZnMvYWZzL2Rpci5jLTYzMy0gKi9cbmZzL2Fmcy9kaXIuYzo2MzQ6c3RhdGljIGJvb2wgYWZzX2xvb2t1cF9maWxsZGlyKHN0cnVjdCBkaXJfY29udGV4dCAqY3R4LCBjb25zdCBjaGFyICpuYW1lLFxuZnMvYWZzL2Rpci5jLTYzNS1cdFx0XHQgICAgICBpbnQgbmxlbiwgdTY0IGlubywgdTMyIHVuaXF1aWZpZXIpXG5mcy9hZnMvZGlyLmMtNjM2LXtcbmZzL2Fmcy9kaXIuYzo2Mzc6XHRzdHJ1Y3QgYWZzX2xvb2t1cF9jb29raWUgKmNvb2tpZSA9XG5mcy9hZnMvZGlyLmM6NjM4Olx0XHRjb250YWluZXJfb2YoY3R4LCBzdHJ1Y3QgYWZzX2xvb2t1cF9jb29raWUsIGN0eCk7XG5mcy9hZnMvZGlyLmMtNjM5LVxuLS1cbmZzL2Fmcy9kaXIuYz03MjI9c3RhdGljIGNvbnN0IHN0cnVjdCBhZnNfb3BlcmF0aW9uX29wcyBhZnNfaW5saW5lX2J1bGtfc3RhdHVzX29wZXJhdGlvbiA9IHtcbi0tXG5mcy9hZnMvZGlyLmMtNzI3LVxuZnMvYWZzL2Rpci5jOjcyODpzdGF0aWMgY29uc3Qgc3RydWN0IGFmc19vcGVyYXRpb25fb3BzIGFmc19sb29rdXBfZmV0Y2hfc3RhdHVzX29wZXJhdGlvbiA9IHtcbmZzL2Fmcy9kaXIuYy03MjktXHQuaXNzdWVfYWZzX3JwY1x0PSBhZnNfZnNfZmV0Y2hfc3RhdHVzLFxuLS1cbmZzL2Fmcy9kaXIuYz03NzE9c3RhdGljIHN0cnVjdCBpbm9kZSAqYWZzX2RvX2xvb2t1cChzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5KVxuZnMvYWZzL2Rpci5jLTc3Mi17XG5mcy9hZnMvZGlyLmM6NzczOlx0c3RydWN0IGFmc19sb29rdXBfY29va2llICpjb29raWU7XG5mcy9hZnMvZGlyLmMtNzc0LVx0c3RydWN0IGFmc192bm9kZV9wYXJhbSAqdnA7XG4tLVxuZnMvYWZzL2Rpci5jLTc4NC1cbmZzL2Fmcy9kaXIuYzo3ODU6XHRjb29raWUgPSBremFsbG9jX29iaihzdHJ1Y3QgYWZzX2xvb2t1cF9jb29raWUpO1xuZnMvYWZzL2Rpci5jLTc4Ni1cdGlmICghY29va2llKVxuLS1cbmZzL2Fmcy9kaXIuYy04NzctXHRcdG9wLVx1MDAzZWZldGNoX3N0YXR1cy53aGljaCA9IDE7XG5mcy9hZnMvZGlyLmM6ODc4Olx0XHRvcC1cdTAwM2VvcHMgPSBcdTAwMjZhZnNfbG9va3VwX2ZldGNoX3N0YXR1c19vcGVyYXRpb247XG5mcy9hZnMvZGlyLmMtODc5LVx0XHRhZnNfYmVnaW5fdm5vZGVfb3BlcmF0aW9uKG9wKTtcbi0tXG5mcy9hZnMvZGlyLmMtOTA3LSAqL1xuZnMvYWZzL2Rpci5jOjkwODpzdGF0aWMgc3RydWN0IGRlbnRyeSAqYWZzX2xvb2t1cF9hdHN5cyhzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5KVxuZnMvYWZzL2Rpci5jLTkwOS17XG4tLVxuZnMvYWZzL2Rpci5jLTk2MS0gKi9cbmZzL2Fmcy9kaXIuYzo5NjI6c3RhdGljIHN0cnVjdCBkZW50cnkgKmFmc19sb29rdXAoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcbmZzL2Fmcy9kaXIuYy05NjMtXHRcdFx0XHQgdW5zaWduZWQgaW50IGZsYWdzKVxuLS1cbmZzL2Fmcy9kaXIuYy05OTctXHQgICAgZGVudHJ5LVx1MDAzZWRfbmFtZS5uYW1lW2RlbnRyeS1cdTAwM2VkX25hbWUubGVuIC0gMV0gPT0gJiMzOTtzJiMzOTspXG5mcy9hZnMvZGlyLmM6OTk4Olx0XHRyZXR1cm4gYWZzX2xvb2t1cF9hdHN5cyhkaXIsIGRlbnRyeSk7XG5mcy9hZnMvZGlyLmMtOTk5LVxuLS1cbmZzL2Fmcy9kaXIuYy0xMDEwLVx0XHRkLVx1MDAzZWRfZnNkYXRhID0gZGVudHJ5LVx1MDAzZWRfZnNkYXRhO1xuZnMvYWZzL2Rpci5jOjEwMTE6XHRcdHRyYWNlX2Fmc19sb29rdXAoZHZub2RlLCBcdTAwMjZkLVx1MDAzZWRfbmFtZSwgXHUwMDI2ZmlkKTtcbmZzL2Fmcy9kaXIuYy0xMDEyLVx0fSBlbHNlIHtcbmZzL2Fmcy9kaXIuYzoxMDEzOlx0XHR0cmFjZV9hZnNfbG9va3VwKGR2bm9kZSwgXHUwMDI2ZGVudHJ5LVx1MDAzZWRfbmFtZSwgXHUwMDI2ZmlkKTtcbmZzL2Fmcy9kaXIuYy0xMDE0LVx0fVxuLS1cbmZzL2Fmcy9keW5yb290LmMtMTUtXG5mcy9hZnMvZHlucm9vdC5jOjE2OnN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICphZnNfbG9va3VwX2F0Y2VsbChzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBpbm9fdCBpbm8pO1xuZnMvYWZzL2R5bnJvb3QuYy0xNy1cbi0tXG5mcy9hZnMvZHlucm9vdC5jPTkzPXN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICphZnNfZHlucm9vdF9sb29rdXBfY2VsbChzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxuLS1cbmZzL2Fmcy9keW5yb290LmMtMTEwLVxuZnMvYWZzL2R5bnJvb3QuYzoxMTE6XHRjZWxsID0gYWZzX2xvb2t1cF9jZWxsKG5ldCwgbmFtZSwgbGVuLCBOVUxMLFxuZnMvYWZzL2R5bnJvb3QuYy0xMTItXHRcdFx0ICAgICAgIEFGU19MT09LVVBfQ0VMTF9EWU5ST09ULFxuLS1cbmZzL2Fmcy9keW5yb290LmM9MTM5PXN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICphZnNfZHlucm9vdF9sb29rdXAoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcbi0tXG5mcy9hZnMvZHlucm9vdC5jLTE1My1cdCAgICBtZW1jbXAoZGVudHJ5LVx1MDAzZWRfbmFtZS5uYW1lLCBcJiMzNDtAY2VsbFwmIzM0OywgNSkgPT0gMClcbmZzL2Fmcy9keW5yb290LmM6MTU0Olx0XHRyZXR1cm4gYWZzX2xvb2t1cF9hdGNlbGwoZGlyLCBkZW50cnksIDIpO1xuZnMvYWZzL2R5bnJvb3QuYy0xNTUtXG4tLVxuZnMvYWZzL2R5bnJvb3QuYy0xNTctXHQgICAgbWVtY21wKGRlbnRyeS1cdTAwM2VkX25hbWUubmFtZSwgXCYjMzQ7LkBjZWxsXCYjMzQ7LCA2KSA9PSAwKVxuZnMvYWZzL2R5bnJvb3QuYzoxNTg6XHRcdHJldHVybiBhZnNfbG9va3VwX2F0Y2VsbChkaXIsIGRlbnRyeSwgMyk7XG5mcy9hZnMvZHlucm9vdC5jLTE1OS1cbi0tXG5mcy9hZnMvZHlucm9vdC5jPTI0Mj1zdGF0aWMgY29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgYWZzX2F0Y2VsbF9pbm9kZV9vcGVyYXRpb25zID0ge1xuLS1cbmZzL2Fmcy9keW5yb290LmMtMjQ4LSAqL1xuZnMvYWZzL2R5bnJvb3QuYzoyNDk6c3RhdGljIHN0cnVjdCBkZW50cnkgKmFmc19sb29rdXBfYXRjZWxsKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIGlub190IGlubylcbmZzL2Fmcy9keW5yb290LmMtMjUwLXtcbi0tXG5mcy9hZnMvaW50ZXJuYWwuaD0xMDYwPWV4dGVybiBzdHJ1Y3QgYWZzX2NlbGwgKmFmc19maW5kX2NlbGwoc3RydWN0IGFmc19uZXQgKiwgY29uc3QgY2hhciAqLCB1bnNpZ25lZCxcbmZzL2Fmcy9pbnRlcm5hbC5oLTEwNjEtXHRcdFx0XHQgICAgICBlbnVtIGFmc19jZWxsX3RyYWNlKTtcbmZzL2Fmcy9pbnRlcm5hbC5oOjEwNjI6ZW51bSBhZnNfbG9va3VwX2NlbGxfZm9yIHtcbmZzL2Fmcy9pbnRlcm5hbC5oLTEwNjMtXHRBRlNfTE9PS1VQX0NFTExfRFlOUk9PVCxcbi0tXG5mcy9hZnMvaW50ZXJuYWwuaC0xMDY5LX07XG5mcy9hZnMvaW50ZXJuYWwuaDoxMDcwOnN0cnVjdCBhZnNfY2VsbCAqYWZzX2xvb2t1cF9jZWxsKHN0cnVjdCBhZnNfbmV0ICpuZXQsXG5mcy9hZnMvaW50ZXJuYWwuaC0xMDcxLVx0XHRcdFx0IGNvbnN0IGNoYXIgKm5hbWUsIHVuc2lnbmVkIGludCBuYW1lc3osXG5mcy9hZnMvaW50ZXJuYWwuaC0xMDcyLVx0XHRcdFx0IGNvbnN0IGNoYXIgKnZsbGlzdCxcbmZzL2Fmcy9pbnRlcm5hbC5oOjEwNzM6XHRcdFx0XHQgZW51bSBhZnNfbG9va3VwX2NlbGxfZm9yIHJlYXNvbixcbmZzL2Fmcy9pbnRlcm5hbC5oLTEwNzQtXHRcdFx0XHQgZW51bSBhZnNfY2VsbF90cmFjZSB0cmFjZSk7XG4tLVxuZnMvYWZzL2ludGVybmFsLmg9MTU0MD1zdHJ1Y3QgYWZzX3NlcnZlciAqYWZzX2ZpbmRfc2VydmVyKGNvbnN0IHN0cnVjdCByeHJwY19wZWVyICpwZWVyKTtcbmZzL2Fmcy9pbnRlcm5hbC5oOjE1NDE6ZXh0ZXJuIHN0cnVjdCBhZnNfc2VydmVyICphZnNfbG9va3VwX3NlcnZlcihzdHJ1Y3QgYWZzX2NlbGwgKiwgc3RydWN0IGtleSAqLCBjb25zdCB1dWlkX3QgKiwgdTMyKTtcbmZzL2Fmcy9pbnRlcm5hbC5oLTE1NDItZXh0ZXJuIHN0cnVjdCBhZnNfc2VydmVyICphZnNfZ2V0X3NlcnZlcihzdHJ1Y3QgYWZzX3NlcnZlciAqLCBlbnVtIGFmc19zZXJ2ZXJfdHJhY2UpO1xuLS1cbmZzL2Fmcy9tbnRwdC5jPTcxPXN0YXRpYyBpbnQgYWZzX21udHB0X3NldF9wYXJhbXMoc3RydWN0IGZzX2NvbnRleHQgKmZjLCBzdHJ1Y3QgZGVudHJ5ICptbnRwdClcbi0tXG5mcy9hZnMvbW50cHQuYy0xMDktXG5mcy9hZnMvbW50cHQuYzoxMTA6XHRcdGNlbGwgPSBhZnNfbG9va3VwX2NlbGwoY3R4LVx1MDAzZW5ldCwgcCwgc2l6ZSwgTlVMTCxcbmZzL2Fmcy9tbnRwdC5jLTExMS1cdFx0XHRcdCAgICAgICBBRlNfTE9PS1VQX0NFTExfTU9VTlRQT0lOVCxcbi0tXG5mcy9hZnMvcHJvYy5jPTg4PXN0YXRpYyBpbnQgYWZzX3Byb2NfY2VsbHNfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgKmJ1Ziwgc2l6ZV90IHNpemUpXG4tLVxuZnMvYWZzL3Byb2MuYy0xMjQtXG5mcy9hZnMvcHJvYy5jOjEyNTpcdFx0Y2VsbCA9IGFmc19sb29rdXBfY2VsbChuZXQsIG5hbWUsIHN0cmxlbihuYW1lKSwgYXJncyxcbmZzL2Fmcy9wcm9jLmMtMTI2LVx0XHRcdFx0ICAgICAgIEFGU19MT09LVVBfQ0VMTF9QUkVMT0FELFxuLS1cbmZzL2Fmcy9zZXJ2ZXIuYz0xNTI9c3RhdGljIHN0cnVjdCBhZnNfYWRkcl9saXN0ICphZnNfdmxfbG9va3VwX2FkZHJzKHN0cnVjdCBhZnNfc2VydmVyICpzZXJ2ZXIsXG4tLVxuZnMvYWZzL3NlcnZlci5jLTE3Ny0gKi9cbmZzL2Fmcy9zZXJ2ZXIuYzoxNzg6c3RydWN0IGFmc19zZXJ2ZXIgKmFmc19sb29rdXBfc2VydmVyKHN0cnVjdCBhZnNfY2VsbCAqY2VsbCwgc3RydWN0IGtleSAqa2V5LFxuZnMvYWZzL3NlcnZlci5jLTE3OS1cdFx0XHRcdCAgICAgY29uc3QgdXVpZF90ICp1dWlkLCB1MzIgYWRkcl92ZXJzaW9uKVxuLS1cbmZzL2Fmcy9zZXJ2ZXJfbGlzdC5jPTI3PXN0cnVjdCBhZnNfc2VydmVyX2xpc3QgKmFmc19hbGxvY19zZXJ2ZXJfbGlzdChzdHJ1Y3QgYWZzX3ZvbHVtZSAqdm9sdW1lLFxuLS1cbmZzL2Fmcy9zZXJ2ZXJfbGlzdC5jLTgxLVxuZnMvYWZzL3NlcnZlcl9saXN0LmM6ODI6XHRcdHNlcnZlciA9IGFmc19sb29rdXBfc2VydmVyKHZvbHVtZS1cdTAwM2VjZWxsLCBrZXksIFx1MDAyNnZsZGItXHUwMDNlZnNfc2VydmVyW2ldLFxuZnMvYWZzL3NlcnZlcl9saXN0LmMtODMtXHRcdFx0XHRcdCAgIHZsZGItXHUwMDNlYWRkcl92ZXJzaW9uW2ldKTtcbi0tXG5mcy9hZnMvc3VwZXIuYz0yMjM9c3RhdGljIGludCBhZnNfcGFyc2Vfc291cmNlKHN0cnVjdCBmc19jb250ZXh0ICpmYywgc3RydWN0IGZzX3BhcmFtZXRlciAqcGFyYW0pXG4tLVxuZnMvYWZzL3N1cGVyLmMtMjkxLVx0aWYgKGNlbGxuYW1lKSB7XG5mcy9hZnMvc3VwZXIuYzoyOTI6XHRcdGNlbGwgPSBhZnNfbG9va3VwX2NlbGwoY3R4LVx1MDAzZW5ldCwgY2VsbG5hbWUsIGNlbGxuYW1lc3osXG5mcy9hZnMvc3VwZXIuYy0yOTMtXHRcdFx0XHQgICAgICAgTlVMTCwgQUZTX0xPT0tVUF9DRUxMX0RJUkVDVF9NT1VOVCxcbi0tXG5mcy9hZnMvdmxfYWxpYXMuYz0yNTM9c3RhdGljIGludCB5ZnNfY2hlY2tfY2Fub25pY2FsX2NlbGxfbmFtZShzdHJ1Y3QgYWZzX2NlbGwgKmNlbGwsIHN0cnVjdCBrZXkgKmtleSlcbi0tXG5mcy9hZnMvdmxfYWxpYXMuYy0yNzEtXHRlbHNlXG5mcy9hZnMvdmxfYWxpYXMuYzoyNzI6XHRcdG1hc3RlciA9IGFmc19sb29rdXBfY2VsbChjZWxsLVx1MDAzZW5ldCwgY2VsbF9uYW1lLCBuYW1lX2xlbiwgTlVMTCxcbmZzL2Fmcy92bF9hbGlhcy5jLTI3My1cdFx0XHRcdFx0IEFGU19MT09LVVBfQ0VMTF9BTElBU19DSEVDSyxcbi0tXG5mcy9hZnMvdm9sdW1lLmM9NzY9c3RhdGljIHN0cnVjdCBhZnNfdm9sdW1lICphZnNfYWxsb2Nfdm9sdW1lKHN0cnVjdCBhZnNfZnNfY29udGV4dCAqcGFyYW1zLFxuLS1cbmZzL2Fmcy92b2x1bWUuYy0xMzItICovXG5mcy9hZnMvdm9sdW1lLmM6MTMzOnN0YXRpYyBzdHJ1Y3QgYWZzX3ZvbHVtZSAqYWZzX2xvb2t1cF92b2x1bWUoc3RydWN0IGFmc19mc19jb250ZXh0ICpwYXJhbXMsXG5mcy9hZnMvdm9sdW1lLmMtMTM0LVx0XHRcdFx0XHQgICAgc3RydWN0IGFmc192bGRiX2VudHJ5ICp2bGRiKVxuLS1cbmZzL2Fmcy92b2x1bWUuYz0xOTg9c3RydWN0IGFmc192b2x1bWUgKmFmc19jcmVhdGVfdm9sdW1lKHN0cnVjdCBhZnNfZnNfY29udGV4dCAqcGFyYW1zKVxuLS1cbmZzL2Fmcy92b2x1bWUuYy0yMjYtXG5mcy9hZnMvdm9sdW1lLmM6MjI3Olx0dm9sdW1lID0gYWZzX2xvb2t1cF92b2x1bWUocGFyYW1zLCB2bGRiKTtcbmZzL2Fmcy92b2x1bWUuYy0yMjgtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMiAwOTozNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NzAxMQoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDI0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSBpbW1lZGlhdGUgdGhvdWdodCBwcm9jZXNzLCBmb2N1c2luZyBvbiB0aGUgY29udGV4dCB5b3UgcHJvdmlkZWQ6CgoqKkRpdmluZyBpbnRvIHRoZSBBRlMgRmlsZXN5c3RlbSoqCgpPa2F5LCBzbyB3ZSYjMzk7cmUgdGFsa2luZyBhYm91dCBBRlMuIE15IG1pbmQgaW1tZWRpYXRlbHkgZmxhZ3MgYGFmc19sb29rdXBgIGFzIGEgZGVudHJ5IG9wZXJhdGlvbiDigJMgdGhhdCYjMzk7cyBmdW5kYW1lbnRhbC4gVGhhdCBtZWFucyBpdCYjMzk7cyBhIGNyaXRpY2FsIHBpZWNlIG9mIGhvdyB0aGUgZmlsZXN5c3RlbSBoYW5kbGVzIGRpcmVjdG9yeSBlbnRyeSBsb29rdXBzLiBOb3csIHRvIHVuZGVyc3RhbmQgdGhlIGJyb2FkZXIgaW1wbGljYXRpb25zLCBlc3BlY2lhbGx5IGhvdyBBRlMgZW5zdXJlcyBjb25zaXN0ZW5jeSBhbmQgY2FjaGluZywgSSBuZWVkIHRvIGRpZyBkZWVwZXIuIE15IGluc3RpbmN0IGlzIHRvIGNoZWNrIG91dCBgYWZzX2RfcmV2YWxpZGF0ZWAuIFRoYXQgZnVuY3Rpb24gaXMgcHJvYmFibHkgd2hlcmUgYSBsb3Qgb2YgdGhlIG1hZ2ljIGhhcHBlbnMgaW4gdGVybXMgb2YgY2hlY2tpbmcgdGhlIHZhbGlkaXR5IG9mIGNhY2hlZCBkZW50cmllcy4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIGdvaW5nIG9uIGluIHRoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjIgMDk6MzQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YWZzX2RfcmV2YWxpZGF0ZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL2Fmcy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvYWZzL2Rpci5jPTI1PXN0YXRpYyBpbnQgYWZzX3JlYWRkaXIoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBkaXJfY29udGV4dCAqY3R4KTtcbmZzL2Fmcy9kaXIuYzoyNjpzdGF0aWMgaW50IGFmc19kX3JldmFsaWRhdGUoc3RydWN0IGlub2RlICpkaXIsIGNvbnN0IHN0cnVjdCBxc3RyICpuYW1lLFxuZnMvYWZzL2Rpci5jLTI3LVx0XHRcdCAgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVuc2lnbmVkIGludCBmbGFncyk7XG4tLVxuZnMvYWZzL2Rpci5jPTc4PWNvbnN0IHN0cnVjdCBkZW50cnlfb3BlcmF0aW9ucyBhZnNfZnNfZGVudHJ5X29wZXJhdGlvbnMgPSB7XG5mcy9hZnMvZGlyLmM6Nzk6XHQuZF9yZXZhbGlkYXRlXHQ9IGFmc19kX3JldmFsaWRhdGUsXG5mcy9hZnMvZGlyLmMtODAtXHQuZF9kZWxldGVcdD0gYWZzX2RfZGVsZXRlLFxuLS1cbmZzL2Fmcy9kaXIuYz05NjI9c3RhdGljIHN0cnVjdCBkZW50cnkgKmFmc19sb29rdXAoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcbi0tXG5mcy9hZnMvZGlyLmMtMTAyMS0gKi9cbmZzL2Fmcy9kaXIuYzoxMDIyOnN0YXRpYyBpbnQgYWZzX2RfcmV2YWxpZGF0ZV9yY3Uoc3RydWN0IGFmc192bm9kZSAqZHZub2RlLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpXG5mcy9hZnMvZGlyLmMtMTAyMy17XG4tLVxuZnMvYWZzL2Rpci5jLTEwNTQtICovXG5mcy9hZnMvZGlyLmM6MTA1NTpzdGF0aWMgaW50IGFmc19kX3JldmFsaWRhdGUoc3RydWN0IGlub2RlICpwYXJlbnRfZGlyLCBjb25zdCBzdHJ1Y3QgcXN0ciAqbmFtZSxcbmZzL2Fmcy9kaXIuYy0xMDU2LVx0XHRcdCAgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVuc2lnbmVkIGludCBmbGFncylcbi0tXG5mcy9hZnMvZGlyLmMtMTA2Ni1cdGlmIChmbGFncyBcdTAwMjYgTE9PS1VQX1JDVSlcbmZzL2Fmcy9kaXIuYzoxMDY3Olx0XHRyZXR1cm4gYWZzX2RfcmV2YWxpZGF0ZV9yY3UoZGlyLCBkZW50cnkpO1xuZnMvYWZzL2Rpci5jLTEwNjgtXG4tLVxuZnMvYWZzL2Rpci5jLTExMTktXHRcdGlmIChpc19iYWRfaW5vZGUoaW5vZGUpKSB7XG5mcy9hZnMvZGlyLmM6MTEyMDpcdFx0XHRwcmludGsoXCYjMzQ7a0FGUzogYWZzX2RfcmV2YWxpZGF0ZTogJXBkMiBoYXMgYmFkIGlub2RlXFxuXCYjMzQ7LFxuZnMvYWZzL2Rpci5jLTExMjEtXHRcdFx0ICAgICAgIGRlbnRyeSk7XG4tLVxuZnMvYWZzL2Rpci5jPTIwNzA9c3RhdGljIGludCBhZnNfcmVuYW1lKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKm9sZF9kaXIsXG4tLVxuZnMvYWZzL2Rpci5jLTIxODMtXHQvKiBUaGlzIGJpdCBpcyBwb3RlbnRpYWxseSBuYXN0eSBhcyB0aGVyZSYjMzk7cyBhIHBvdGVudGlhbCByYWNlIHdpdGhcbmZzL2Fmcy9kaXIuYzoyMTg0Olx0ICogYWZzX2RfcmV2YWxpZGF0ZXssX3JjdX0oKS4gIFdlIGhhdmUgdG8gY2hhbmdlIGRfZnNkYXRhIG9uIHRoZSBkZW50cnlcbmZzL2Fmcy9kaXIuYy0yMTg1LVx0ICogdG8gcmVmbGVjdCBpdCYjMzk7cyBuZXcgcGFyZW50JiMzOTtzIG5ldyBkYXRhX3ZlcnNpb24gYWZ0ZXIgdGhlIG9wLCBidXRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIyIDA5OjM0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU3OTAwCgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogMjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgY29uc2lkZXJpbmcgdGhpcyBmcm9tIGFuIGV4cGVydCBwZXJzcGVjdGl2ZToKCioqRGl2aW5nIGludG8gQUZTIEZpbGVzeXN0ZW0gSW50ZXJuYWxzKioKCk9rYXksIHNvIHdlJiMzOTtyZSB0YWxraW5nIGFib3V0IGBhZnNfZF9yZXZhbGlkYXRlYCwgdGhhdCYjMzk7cyBhIGRlbnRyeSBvcGVyYXRpb24sIGdvdCBpdC4gTXkgbWluZCBpbW1lZGlhdGVseSBzdGFydHMgdG8gbWFwIHRoaXMgdG8gdGhlIG92ZXJhbGwgbGlmZWN5Y2xlIG9mIGEgZmlsZSB3aXRoaW4gdGhlIEFGUyBmaWxlc3lzdGVtLCBwYXJ0aWN1bGFybHkgYXJvdW5kIGhvdyBpdCBtYWludGFpbnMgY29uc2lzdGVuY3kuIEtub3dpbmcgaXQmIzM5O3MgYSBkZW50cnkgb3BlcmF0aW9uIHRlbGxzIG1lIGl0JiMzOTtzIGRlZXBseSBpbnZvbHZlZCBpbiB0aGUgbG9va3VwIGFuZCBjYWNoaW5nIG1lY2hhbmlzbXMuIE5vdywgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dCBhbmQgaG93IHRoaXMgZml0cywgSSYjMzk7bSBnb2luZyB0byBxdWlja2x5IGNoZWNrIGBhZnNfYWxsb2NfaW5vZGVgLiBUaGF0JiMzOTtzIHdoZXJlIHdlIGdldCB0aGUgZnVuZGFtZW50YWwgaW5vZGUgc3RydWN0dXJlcyBhbGxvY2F0ZWQuIEkgd2FudCB0byBzZWUgaG93IHRoZXNlIHR3byBwaWVjZXMgb2YgY29kZSBpbnRlcmFjdCwgYW5kIGhvdyB0aGUgZGVudHJ5IG9wZXJhdGlvbiB0aWVzIGludG8gdGhvc2UuIEFyZSB0aGVyZSBhbnkgaGludHMgYWJvdXQgZGF0YSB2YWxpZGF0aW9uIG9yIHRoZSBjYWNoaW5nL2ludmFsaWRhdGluZyBzdHJhdGVnaWVzIGhlcmU/IEkgZXhwZWN0IHRoYXQgYGFmc19kX3JldmFsaWRhdGVgIHdpbGwgYmUgY2FsbGVkIGR1cmluZyB0aGUgbG9va3VwIG9wZXJhdGlvbiBhbmQgYWxzbyB3aGVuIHRoZSBrZXJuZWwgc3VzcGVjdHMgdGhlIGZpbGUgbWV0YWRhdGEgbWF5IGhhdmUgY2hhbmdlZC4gVGhlIGlub2RlIGFsbG9jYXRpb24gZnVuY3Rpb24gc2hvdWxkIHByb3ZpZGUgdGhhdCBiYXNlIHN0cnVjdHVyZSB0aGF0IGBhZnNfZF9yZXZhbGlkYXRlYCBsaWtlbHkgZGVwZW5kcyB1cG9uLiBMZXQmIzM5O3Mgc2VlIGhvdyB0aGV5IGZpdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIyIDA5OjM0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2Fmc19hbGxvY19pbm9kZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL2Fmcy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvYWZzL2ludGVybmFsLmg9NjcwPWVudW0gYWZzX2xvY2tfc3RhdGUge1xuLS1cbmZzL2Fmcy9pbnRlcm5hbC5oLTY4My0gKlxuZnMvYWZzL2ludGVybmFsLmg6Njg0OiAqIE5vdGUgdGhhdCBhZnNfYWxsb2NfaW5vZGUoKSAqbXVzdCogcmVzZXQgYW55dGhpbmcgdGhhdCBjb3VsZCBpbmNvcnJlY3RseVxuZnMvYWZzL2ludGVybmFsLmgtNjg1LSAqIGxlYWsgZnJvbSBvbmUgaW5vZGUgdG8gYW5vdGhlci5cbi0tXG5mcy9hZnMvc3VwZXIuYz0zMz1zdGF0aWMgdm9pZCBhZnNfa2lsbF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKTtcbmZzL2Fmcy9zdXBlci5jOjM0OnN0YXRpYyBzdHJ1Y3QgaW5vZGUgKmFmc19hbGxvY19pbm9kZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKTtcbmZzL2Fmcy9zdXBlci5jLTM1LXN0YXRpYyB2b2lkIGFmc19kZXN0cm95X2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpO1xuLS1cbmZzL2Fmcy9zdXBlci5jPTU1PXN0YXRpYyBjb25zdCBzdHJ1Y3Qgc3VwZXJfb3BlcmF0aW9ucyBhZnNfc3VwZXJfb3BzID0ge1xuZnMvYWZzL3N1cGVyLmMtNTYtXHQuc3RhdGZzXHRcdD0gYWZzX3N0YXRmcyxcbmZzL2Fmcy9zdXBlci5jOjU3Olx0LmFsbG9jX2lub2RlXHQ9IGFmc19hbGxvY19pbm9kZSxcbmZzL2Fmcy9zdXBlci5jLTU4LVx0LndyaXRlX2lub2RlXHQ9IG5ldGZzX3VucGluX3dyaXRlYmFjayxcbi0tXG5mcy9hZnMvc3VwZXIuYz02MjI9c3RhdGljIGludCBhZnNfaW5pdF9mc19jb250ZXh0KHN0cnVjdCBmc19jb250ZXh0ICpmYylcbi0tXG5mcy9hZnMvc3VwZXIuYy02NDYtICogSW5pdGlhbGlzZSBhbiBpbm9kZSBjYWNoZSBzbGFiIGVsZW1lbnQgcHJpb3IgdG8gYW55IHVzZS4gIE5vdGUgdGhhdFxuZnMvYWZzL3N1cGVyLmM6NjQ3OiAqIGFmc19hbGxvY19pbm9kZSgpICptdXN0KiByZXNldCBhbnl0aGluZyB0aGF0IGNvdWxkIGluY29ycmVjdGx5IGxlYWsgZnJvbSBvbmVcbmZzL2Fmcy9zdXBlci5jLTY0OC0gKiBpbm9kZSB0byBhbm90aGVyLlxuLS1cbmZzL2Fmcy9zdXBlci5jPTY1MD1zdGF0aWMgdm9pZCBhZnNfaV9pbml0X29uY2Uodm9pZCAqX3Zub2RlKVxuLS1cbmZzL2Fmcy9zdXBlci5jLTY2OS0gKi9cbmZzL2Fmcy9zdXBlci5jOjY3MDpzdGF0aWMgc3RydWN0IGlub2RlICphZnNfYWxsb2NfaW5vZGUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcbmZzL2Fmcy9zdXBlci5jLTY3MS17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMiAwOTozNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1ODY5NQoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDI1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKklub2RlIEFsbG9jYXRpb24gYW5kIEV2aWN0aW9uIGluIEFGUzogQSBRdWljayBEaWFnbm9zdGljKioKCk9rYXksIHNvIHdlJiMzOTtyZSB0YWxraW5nIEFGUyBpbm9kZSBtYW5hZ2VtZW50IGhlcmUsIGFuZCB0aGUgZmlyc3QgdGhpbmcgdGhhdCBqdW1wcyBvdXQgaXMgdGhlIGNvbnRleHQ6IGBhZnNfYWxsb2NfaW5vZGVgIGlzIGEgKnN1cGVyKiBvcGVyYXRpb24uIFJpZ2h0LCBnb3QgaXQuIFRoYXQgaW1tZWRpYXRlbHkgZm9jdXNlcyBteSBhdHRlbnRpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgaXQgYmVpbmcgYSBzdXBlciBvcGVyYXRpb24uIFdoYXQmIzM5O3MgdGhlIGFsbG9jYXRpb24gc3RyYXRlZ3k/IElzIGl0IG9wdGltaXplZCBmb3Igdm9sdW1lIGxheW91dD8gRG9lcyBpdCBhY2NvdW50IGZvciBBRlMmIzM5O3MgdW5pcXVlIGRpc3RyaWJ1dGVkIG5hdHVyZT8KCk5vdywgZ2l2ZW4gdGhhdCBjb250ZXh0LCB0aGUgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gY2hlY2sgYGFmc19ldmljdF9pbm9kZWAuIFRoYXQmIzM5O3MgdGhlIGNsZWFudXAgc2lkZSBvZiB0aGluZ3MuIEkmIzM5O20gd29uZGVyaW5nIGlmIHRoZXJlJiMzOTtzIGFueSBvYnZpb3VzIGxpbmthZ2UgYmV0d2VlbiBhbGxvY2F0aW9uIGFuZCBldmljdGlvbi4gQXJlIHRoZXJlIGFueSBwb3RlbnRpYWwgaW5lZmZpY2llbmNpZXMgb3IgcmFjZXMgaW4gdGhlIGxpZmVjeWNsZSBtYW5hZ2VtZW50IHRoYXQgbWF5IGJlIGFwcGFyZW50PyBNeSBpbW1lZGlhdGUgdGhvdWdodHMgYXJlIHRvd2FyZHMgaG93IHdlIGhhbmRsZSBkaXN0cmlidXRlZCBsb2NrcywgY2FjaGUgY29oZXJlbmN5LCBhbmQgdGhlIGltcGFjdHMgdGhpcyBtaWdodCBoYXZlIG9uIHZvbHVtZSBtZXRhZGF0YS4gR2l2ZW4gbXkgZXhwZXJpZW5jZSwgSSYjMzk7bSBhbHJlYWR5IGFudGljaXBhdGluZyBhcmVhcyBmb3IgaW52ZXN0aWdhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIyIDA5OjM0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2Fmc19ldmljdF9pbm9kZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL2Fmcy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvYWZzL2lub2RlLmM9NjQyPWludCBhZnNfZHJvcF9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuLS1cbmZzL2Fmcy9pbm9kZS5jLTY1NC0gKi9cbmZzL2Fmcy9pbm9kZS5jOjY1NTp2b2lkIGFmc19ldmljdF9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuZnMvYWZzL2lub2RlLmMtNjU2LXtcbi0tXG5mcy9hZnMvaW50ZXJuYWwuaD0xMjYzPWV4dGVybiBpbnQgYWZzX3NldGF0dHIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBkZW50cnkgKiwgc3RydWN0IGlhdHRyICopO1xuZnMvYWZzL2ludGVybmFsLmg6MTI2NDpleHRlcm4gdm9pZCBhZnNfZXZpY3RfaW5vZGUoc3RydWN0IGlub2RlICopO1xuZnMvYWZzL2ludGVybmFsLmgtMTI2NS1leHRlcm4gaW50IGFmc19kcm9wX2lub2RlKHN0cnVjdCBpbm9kZSAqKTtcbi0tXG5mcy9hZnMvc3VwZXIuYz01NT1zdGF0aWMgY29uc3Qgc3RydWN0IHN1cGVyX29wZXJhdGlvbnMgYWZzX3N1cGVyX29wcyA9IHtcbi0tXG5mcy9hZnMvc3VwZXIuYy02MS1cdC5mcmVlX2lub2RlXHQ9IGFmc19mcmVlX2lub2RlLFxuZnMvYWZzL3N1cGVyLmM6NjI6XHQuZXZpY3RfaW5vZGVcdD0gYWZzX2V2aWN0X2lub2RlLFxuZnMvYWZzL3N1cGVyLmMtNjMtXHQuc2hvd19kZXZuYW1lXHQ9IGFmc19zaG93X2Rldm5hbWUsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMiAwOTozNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1OTI3MgoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDI1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSBpbW1lZGlhdGUgdGhvdWdodCBwcm9jZXNzLCBiYXNlZCBvbiB0aGUgcHJvdmlkZWQgaW5wdXQsIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqQW5hbHl6aW5nIGBhZnNfZXZpY3RfaW5vZGVgIGFuZCBDb25zaWRlcmluZyB0aGUgSW1wbGljYXRpb25zKioKCk9rYXksIHNvIGBhZnNfZXZpY3RfaW5vZGVgIGlzIGZsYWdnZWQgYXMgYSBzdXBlciBvcGVyYXRpb24uIFRoYXQmIzM5O3MgYSBrZXkgcGllY2Ugb2YgaW5mb3JtYXRpb24uIFNpbmNlIEkmIzM5O20gd29ya2luZyB3aXRoIEFGUywgdGhhdCBpbXBsaWVzIGl0JiMzOTtzIGEgY3JpdGljYWwgZnVuY3Rpb24gZm9yIG1hbmFnaW5nIGlub2RlcyB3aXRoaW4gdGhlIEFGUyBmaWxlIHN5c3RlbS4gQSAmIzM0O3N1cGVyIG9wZXJhdGlvbiYjMzQ7IHN1Z2dlc3RzIGl0IGxpa2VseSBoYW5kbGVzIGFzcGVjdHMgbGlrZSBmcmVlaW5nIHVwIHJlc291cmNlcywgcG90ZW50aWFsbHkgd3JpdGluZyBiYWNrIGRpcnR5IGRhdGEsIGFuZCBnZW5lcmFsbHkgY2xlYW5pbmcgdXAgdGhlIGlub2RlJiMzOTtzIHByZXNlbmNlIGluIHRoZSBzeXN0ZW0gd2hlbiBpdCYjMzk7cyBiZWluZyBldmljdGVkLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcmVsYXRpb25zaGlwIHRvIG90aGVyIGNvcmUgQUZTIG9wZXJhdGlvbnMuCgpHaXZlbiB0aGF0IGNvbnRleHQsIGxldCBtZSBzaGlmdCBnZWFycyBhbmQgY2hlY2sgaG93IGBhZnNfcm9vdF9pZ2V0YCBjb21lcyBpbnRvIHBsYXkuIFVuZGVyc3RhbmRpbmcgaG93IHRoZSByb290IGlub2RlIGlzIGhhbmRsZWQsIGVzcGVjaWFsbHkgaW4gcmVsYXRpb24gdG8gdGhlIGV2aWN0aW9uIHByb2Nlc3MsIGlzIGltcG9ydGFudC4gSSBuZWVkIHRvIHNlZSBpZiB0aGVyZSYjMzk7cyBhIGNvbm5lY3Rpb24gdGhlcmU6IGRvZXMgYGFmc19ldmljdF9pbm9kZWAgaW50ZXJhY3Qgd2l0aCB0aGUgcm9vdCBpbm9kZSBkaWZmZXJlbnRseSwgb3IgaXMgdGhlIHByb2Nlc3MgY29uc2lzdGVudCBhY3Jvc3MgYWxsIGlub2Rlcz8KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIyIDA5OjM0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2Fmc19yb290X2lnZXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9hZnMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2Fmcy9pbm9kZS5jPTUyOD1zdGF0aWMgaW50IGFmc19pZ2V0NV9zZXRfcm9vdChzdHJ1Y3QgaW5vZGUgKmlub2RlLCB2b2lkICpvcGFxdWUpXG4tLVxuZnMvYWZzL2lub2RlLmMtNTQ1LSAqL1xuZnMvYWZzL2lub2RlLmM6NTQ2OnN0cnVjdCBpbm9kZSAqYWZzX3Jvb3RfaWdldChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzdHJ1Y3Qga2V5ICprZXkpXG5mcy9hZnMvaW5vZGUuYy01NDcte1xuLS1cbmZzL2Fmcy9pbnRlcm5hbC5oPTEyNTk9ZXh0ZXJuIHN0cnVjdCBpbm9kZSAqYWZzX2lnZXQoc3RydWN0IGFmc19vcGVyYXRpb24gKiwgc3RydWN0IGFmc192bm9kZV9wYXJhbSAqKTtcbmZzL2Fmcy9pbnRlcm5hbC5oOjEyNjA6ZXh0ZXJuIHN0cnVjdCBpbm9kZSAqYWZzX3Jvb3RfaWdldChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKiwgc3RydWN0IGtleSAqKTtcbmZzL2Fmcy9pbnRlcm5hbC5oLTEyNjEtZXh0ZXJuIGludCBhZnNfZ2V0YXR0cihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgY29uc3Qgc3RydWN0IHBhdGggKixcbi0tXG5mcy9hZnMvc3VwZXIuYz00NDg9c3RhdGljIGludCBhZnNfZmlsbF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzdHJ1Y3QgYWZzX2ZzX2NvbnRleHQgKmN0eClcbi0tXG5mcy9hZnMvc3VwZXIuYy00NzMtXHRcdGFmc19hY3RpdmF0ZV92b2x1bWUoYXMtXHUwMDNldm9sdW1lKTtcbmZzL2Fmcy9zdXBlci5jOjQ3NDpcdFx0aW5vZGUgPSBhZnNfcm9vdF9pZ2V0KHNiLCBjdHgtXHUwMDNla2V5KTtcbmZzL2Fmcy9zdXBlci5jLTQ3NS1cdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIyIDA5OjM0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU5ODc5CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhlIGV4cGVydDoKCioqVHJhY2luZyB0aGUgQUZTIEZpbGVzeXN0ZW0gSW5pdGlhbGl6YXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gaG93IEFGUyBmaWxlc3lzdGVtcyBhcmUgbW91bnRlZCBpbiB0aGUga2VybmVsLiBgYWZzX3Jvb3RfaWdldGAgaXMgdGhlIGtleSBmdW5jdGlvbiBmb3IgZ2V0dGluZyB0aGUgcm9vdCBpbm9kZSwgd2hpY2ggbWFrZXMgc2Vuc2UuIEkgc2VlIHRoYXQgaXQmIzM5O3MgcmVhY2hhYmxlIHRocm91Z2ggYGFmc19maWxsX3N1cGVyYCwgdGhlIGZ1bmN0aW9uIHRoYXQgYWN0dWFsbHkgZmlsbHMgdGhlIHN1cGVyYmxvY2sgZHVyaW5nIG1vdW50IHRpbWUuIFRoYXQmIzM5O3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBOb3csIHRvIHVuZGVyc3RhbmQgaG93IHRoZSB2b2x1bWUgc2VydmVyIGluZm9ybWF0aW9uIGlzIHBvcHVsYXRlZCwgbXkgbmV4dCBzdG9wIGlzIHRvIGV4YW1pbmUgYGFmc19leHRyYWN0X3Zsc2VydmVyX2xpc3RgLiBJIG5lZWQgdG8gZmlndXJlIG91dCBob3cgdGhlIHNlcnZlciBsaXN0IGdldHMgYnVpbHQgYW5kIHBhc3NlZCB0byB0aGUgZmlsZXN5c3RlbSwgc28gSSBjYW4gdW5kZXJzdGFuZCBpdHMgZnVuZGFtZW50YWwgY29ubmVjdGl2aXR5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjIgMDk6MzU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YWZzX2V4dHJhY3RfdmxzZXJ2ZXJfbGlzdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL2Fmcy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvYWZzL2FkZHJfbGlzdC5jPTI1MD1zdHJ1Y3QgYWZzX3Zsc2VydmVyX2xpc3QgKmFmc19kbnNfcXVlcnkoc3RydWN0IGFmc19jZWxsICpjZWxsLCB0aW1lNjRfdCAqX2V4cGlyeSlcbi0tXG5mcy9hZnMvYWRkcl9saXN0LmMtMjY4LVx0aWYgKHJldCBcdTAwM2UgMSBcdTAwMjZcdTAwMjYgcmVzdWx0WzBdID09IDApXG5mcy9hZnMvYWRkcl9saXN0LmM6MjY5Olx0XHR2bGxpc3QgPSBhZnNfZXh0cmFjdF92bHNlcnZlcl9saXN0KGNlbGwsIHJlc3VsdCwgcmV0KTtcbmZzL2Fmcy9hZGRyX2xpc3QuYy0yNzAtXHRlbHNlXG4tLVxuZnMvYWZzL2ludGVybmFsLmg9MTY4Mj1leHRlcm4gdm9pZCBhZnNfcHV0X3Zsc2VydmVybGlzdChzdHJ1Y3QgYWZzX25ldCAqLCBzdHJ1Y3QgYWZzX3Zsc2VydmVyX2xpc3QgKik7XG5mcy9hZnMvaW50ZXJuYWwuaDoxNjgzOmV4dGVybiBzdHJ1Y3QgYWZzX3Zsc2VydmVyX2xpc3QgKmFmc19leHRyYWN0X3Zsc2VydmVyX2xpc3Qoc3RydWN0IGFmc19jZWxsICosXG5mcy9hZnMvaW50ZXJuYWwuaC0xNjg0LVx0XHRcdFx0XHRcdFx0ICAgY29uc3Qgdm9pZCAqLCBzaXplX3QpO1xuLS1cbmZzL2Fmcy92bF9saXN0LmM9ODk9c3RhdGljIHN0cnVjdCBhZnNfYWRkcl9saXN0ICphZnNfZXh0cmFjdF92bF9hZGRycyhzdHJ1Y3QgYWZzX25ldCAqbmV0LFxuLS1cbmZzL2Fmcy92bF9saXN0LmMtMTU5LSAqL1xuZnMvYWZzL3ZsX2xpc3QuYzoxNjA6c3RydWN0IGFmc192bHNlcnZlcl9saXN0ICphZnNfZXh0cmFjdF92bHNlcnZlcl9saXN0KHN0cnVjdCBhZnNfY2VsbCAqY2VsbCxcbmZzL2Fmcy92bF9saXN0LmMtMTYxLVx0XHRcdFx0XHRcdCAgICBjb25zdCB2b2lkICpidWZmZXIsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMiAwOTozNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MDQ2MwoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDMyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246CgoqKkFuYWx5emluZyBBRlMgU2VydmVyIEludGVyYWN0aW9ucyoqCgpSaWdodCwgc28gYGFmc19leHRyYWN0X3Zsc2VydmVyX2xpc3RgIGlzIGFjY2Vzc2libGUgdGhyb3VnaCB0aGUgYGFmc19kbnNfcXVlcnlgIGZ1bmN0aW9uLiBUaGF0JiMzOTtzIGEgZnVuZGFtZW50YWwgbGluayBpbiB0aGUgQUZTIGFyY2hpdGVjdHVyZS4gS25vd2luZyB0aGF0LCBsZXQmIzM5O3Mgc2hpZnQgZ2VhcnMgYW5kIGV4YW1pbmUgYW5vdGhlciBjcnVjaWFsIGZ1bmN0aW9uLCBgYWZzX2NyZWF0ZV92b2x1bWVgLiBUaGlzIGNvbm5lY3Rpb24gaXMgaW1wb3J0YW50LCBJIGNhbiBzZWUgaG93IGNyZWF0aW5nIHZvbHVtZXMgaXMgbGlua2VkIHRvIEROUyBxdWVyaWVzIGZvciBzZXJ2ZXJzIGFuZCBleHRyYWN0aW5nIHRoZWlyIGxpc3RzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIEROUyByZXNvbHV0aW9uIGZlZWRzIGludG8gdm9sdW1lIGNyZWF0aW9uOyB3aGF0IHNlcnZlciBpbmZvcm1hdGlvbiBmcm9tIHRoYXQgbGlzdCBkb2VzIGBhZnNfY3JlYXRlX3ZvbHVtZWAgYWN0dWFsbHkgY29uc3VtZT8gQXJlIHRoZXJlIHBvdGVudGlhbCBwZXJmb3JtYW5jZSBib3R0bGVuZWNrcyBvciBzZWN1cml0eSBpbXBsaWNhdGlvbnMgaW4gdGhpcyBpbnRlcmFjdGlvbj8gQXJlIHRoZXJlIGVycm9yIGhhbmRsaW5nIHBvc3NpYmlsaXRpZXMgdGhhdCBuZWVkIHRvIGJlIHRlc3RlZD8gSSYjMzk7bSBhbHJlYWR5IGZvcm11bGF0aW5nIHF1ZXN0aW9ucyBhYm91dCB0aGUgcG90ZW50aWFsIGZhaWx1cmUgc2NlbmFyaW9zIGFuZCBob3cgdGhleSBtaWdodCByZWxhdGUgdG8gdGhlIEROUyBsb29rdXAuIFRoZSBpbnRlcmRlcGVuZGVuY2llcyBhcmUgdGhlIGtleS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIyIDA5OjM1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2Fmc19jcmVhdGVfdm9sdW1lJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvYWZzLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9hZnMvaW50ZXJuYWwuaD0xNjgzPWV4dGVybiBzdHJ1Y3QgYWZzX3Zsc2VydmVyX2xpc3QgKmFmc19leHRyYWN0X3Zsc2VydmVyX2xpc3Qoc3RydWN0IGFmc19jZWxsICosXG4tLVxuZnMvYWZzL2ludGVybmFsLmgtMTY4OC0gKi9cbmZzL2Fmcy9pbnRlcm5hbC5oOjE2ODk6ZXh0ZXJuIHN0cnVjdCBhZnNfdm9sdW1lICphZnNfY3JlYXRlX3ZvbHVtZShzdHJ1Y3QgYWZzX2ZzX2NvbnRleHQgKik7XG5mcy9hZnMvaW50ZXJuYWwuaC0xNjkwLWV4dGVybiBpbnQgYWZzX2FjdGl2YXRlX3ZvbHVtZShzdHJ1Y3QgYWZzX3ZvbHVtZSAqKTtcbi0tXG5mcy9hZnMvc3VwZXIuYz0zNTU9c3RhdGljIGludCBhZnNfdmFsaWRhdGVfZmMoc3RydWN0IGZzX2NvbnRleHQgKmZjKVxuLS1cbmZzL2Fmcy9zdXBlci5jLTQwMi1cbmZzL2Fmcy9zdXBlci5jOjQwMzpcdFx0dm9sdW1lID0gYWZzX2NyZWF0ZV92b2x1bWUoY3R4KTtcbmZzL2Fmcy9zdXBlci5jLTQwNC1cdFx0aWYgKElTX0VSUih2b2x1bWUpKVxuLS1cbmZzL2Fmcy92bF9hbGlhcy5jPTE3PXN0YXRpYyBzdHJ1Y3QgYWZzX3ZvbHVtZSAqYWZzX3NhbXBsZV92b2x1bWUoc3RydWN0IGFmc19jZWxsICpjZWxsLCBzdHJ1Y3Qga2V5ICprZXksXG4tLVxuZnMvYWZzL3ZsX2FsaWFzLmMtMjktXG5mcy9hZnMvdmxfYWxpYXMuYzozMDpcdHZvbHVtZSA9IGFmc19jcmVhdGVfdm9sdW1lKFx1MDAyNmZjKTtcbmZzL2Fmcy92bF9hbGlhcy5jLTMxLVx0X2xlYXZlKFwmIzM0OyA9ICVwXCYjMzQ7LCB2b2x1bWUpO1xuLS1cbmZzL2Fmcy92b2x1bWUuYz0xNTQ9c3RhdGljIHN0cnVjdCBhZnNfdmxkYl9lbnRyeSAqYWZzX3ZsX2xvb2t1cF92bGRiKHN0cnVjdCBhZnNfY2VsbCAqY2VsbCxcbi0tXG5mcy9hZnMvdm9sdW1lLmMtMTk3LSAqL1xuZnMvYWZzL3ZvbHVtZS5jOjE5ODpzdHJ1Y3QgYWZzX3ZvbHVtZSAqYWZzX2NyZWF0ZV92b2x1bWUoc3RydWN0IGFmc19mc19jb250ZXh0ICpwYXJhbXMpXG5mcy9hZnMvdm9sdW1lLmMtMTk5LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIyIDA5OjM1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYxMTU0CgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogNDA3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlJlZmluaW5nIHRoZSBGb2N1cyBmb3IgQW5hbHl6aW5nIEFGUyBWb2x1bWUgQ3JlYXRpb24qKgoKT2theSwgc28gYGFmc19jcmVhdGVfdm9sdW1lYCBpcyByZWFjaGFibGUgdGhyb3VnaCBgYWZzX3ZhbGlkYXRlX2ZjYCDigJMgdGhhdCYjMzk7cyB0aGUgZW50cnkgcG9pbnQuIExldCYjMzk7cyBzZWUuLi4gaW5pdGlhbGx5IEkgd2FzIGxvb2tpbmcgYXQgYSBicm9hZCBsaXN0IG9mIHN5bWJvbHMgcmVsYXRlZCB0byBBRlMgb3BlcmF0aW9ucywgaW5jbHVkaW5nIHRoaW5ncyBsaWtlIGBhZnNfYnJlYWtfY2FsbGJhY2tzYCwgYGFmc19sb29rdXBfY2VsbGAsIGBhZnNfcmVhZGRpcmAsIGBhZnNfbG9va3VwYCwgYGFmc19kX3JldmFsaWRhdGVgLCBgYWZzX2R5bnJvb3RfcmVhZGRpcmAsIGBhZnNfcHV0X29wZXJhdGlvbmAsIGBhZnNfYWxsb2NfaW5vZGVgLCBgYWZzX2V2aWN0X2lub2RlYCwgYGFmc19yb290X2lnZXRgLCBgYWZzX2V4dHJhY3RfdmxzZXJ2ZXJfbGlzdGAsIGFuZCwgb2YgY291cnNlLCBgYWZzX2NyZWF0ZV92b2x1bWVgIGl0c2VsZi4gIEkgbmVlZCB0byBuYXJyb3cgdGhpcyBkb3duIGZvciBhIG1vcmUgZWZmZWN0aXZlIGFuYWx5c2lzLgoKTGV0JiMzOTtzIGN1dCBvdXQgdGhlIG1vcmUgZ2VuZXJpYyBvbmVzIGZvciBub3csIGZvY3VzaW5nIG9uIGZ1bmN0aW9ucyB0aGF0IG1pZ2h0IGRpcmVjdGx5IGluZmx1ZW5jZSBvciBpbnRlcmFjdCBzaWduaWZpY2FudGx5IHdpdGggdm9sdW1lIGNyZWF0aW9uLiBJIGNhbiBhbHdheXMgYnJvYWRlbiB0aGUgc2NvcGUgbGF0ZXIuIFRoYXQgbGVhdmVzIG1lIHdpdGg6IGBhZnNfYnJlYWtfY2FsbGJhY2tzYCwgYGFmc19sb29rdXBfY2VsbGAsIGBhZnNfcmVhZGRpcmAsIGBhZnNfbG9va3VwYCwgYGFmc19kX3JldmFsaWRhdGVgLCBgYWZzX2R5bnJvb3RfcmVhZGRpcmAsIGBhZnNfcHV0X29wZXJhdGlvbmAsIGBhZnNfZXh0cmFjdF92bHNlcnZlcl9saXN0YCwgYW5kIGBhZnNfY3JlYXRlX3ZvbHVtZWAuCgpXYWl0IGEgbWludXRlLCBgYWZzX2FsbG9jX2lub2RlYCBhbmQgYGFmc19ldmljdF9pbm9kZWAgYXJlIG1vZGlmaWVkISBUaGF0JiMzOTtzIGEga2V5IGRldGFpbCEgU3BlY2lmaWNhbGx5LCBgYWZzX2FsbG9jX2lub2RlYCBub3cgaW5pdGlhbGl6ZXMgYHZub2RlLSZndDtsb2NrX3dvcmtgIGFuZCBgYWZzX2V2aWN0X2lub2RlYCBmbHVzaGVzIGl0LiBUaGlzIGlzIGEgY2xlYXIsIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgbmVlZHMgdG8gYmUgZXhwbG9yZWQuIExldCYjMzk7cyBtYWtlIHN1cmUgdGhhdCYjMzk7cyBrZXB0IGluIG1pbmQuIEFoLCBhbmQgYGFmc19yb290X2lnZXRgIGlzIG1vZGlmaWVkIHRvbywgdG8gbm8gbG9uZ2VyIGNhbGwgYGFmc19zZXRfbmV0ZnNfY29udGV4dGAuICBPbiB0aGUgb3RoZXIgaGFuZCwgIGBhZnNfaW5vZGVfaW5pdF9mcm9tX3N0YXR1c2AgKmlzKiBtb2RpZmllZCB0byBjYWxsIGBhZnNfc2V0X25ldGZzX2NvbnRleHRgLiAgVGhhdCBhY3R1YWxseSBzb3VuZHMgbW9yZSByZWxldmFudCwgc28gbGV0JiMzOTtzIHVzZSB0aGF0IGFzIHRoZSBmb2N1cyBzeW1ib2wgaW5zdGVhZCBvZiBgYWZzX3Jvb3RfaWdldGAuCgpTaG9vdCwgaXQmIzM5O3Mgc3RhdGljISBXZWxsLCBpdCYjMzk7cyBjYWxsZWQgYnkgYGFmc19pZ2V0YCBhbmQgYGFmc19mZXRjaF9zdGF0dXNfc3VjY2Vzc2AgaW5zdGVhZC4gTXVjaCBiZXR0ZXIgLSBJIGNhbiB1c2UgYGFmc19pZ2V0YCBhcyB0aGUgZm9jdXMgc3ltYm9sIGluc3RlYWQuIFRoYXQgc2hvdWxkIGdpdmUgYSBtb3JlIHVzZWZ1bCBwaWN0dXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjIgMDk6MzU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YWZzX2lnZXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9hZnMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2Fmcy9kaXIuYz02NjE9c3RhdGljIHZvaWQgYWZzX2RvX2xvb2t1cF9zdWNjZXNzKHN0cnVjdCBhZnNfb3BlcmF0aW9uICpvcClcbi0tXG5mcy9hZnMvZGlyLmMtNzAxLVx0XHR9IGVsc2UgaWYgKHZwLVx1MDAzZXNjYi5zdGF0dXMuYWJvcnRfY29kZSA9PSAwKSB7XG5mcy9hZnMvZGlyLmM6NzAyOlx0XHRcdGlub2RlID0gYWZzX2lnZXQob3AsIHZwKTtcbmZzL2Fmcy9kaXIuYy03MDMtXHRcdFx0aWYgKCFJU19FUlIoaW5vZGUpKSB7XG4tLVxuZnMvYWZzL2Rpci5jPTEyMzQ9c3RhdGljIHZvaWQgYWZzX3Zub2RlX25ld19pbm9kZShzdHJ1Y3QgYWZzX29wZXJhdGlvbiAqb3ApXG4tLVxuZnMvYWZzL2Rpci5jLTEyNDQtXG5mcy9hZnMvZGlyLmM6MTI0NTpcdGlub2RlID0gYWZzX2lnZXQob3AsIHZwKTtcbmZzL2Fmcy9kaXIuYy0xMjQ2LVx0aWYgKElTX0VSUihpbm9kZSkpIHtcbi0tXG5mcy9hZnMvZHlucm9vdC5jPTE2PXN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICphZnNfbG9va3VwX2F0Y2VsbChzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBpbm9fdCBpbm8pO1xuLS1cbmZzL2Fmcy9keW5yb290LmMtMjAtICovXG5mcy9hZnMvZHlucm9vdC5jOjIxOnN0YXRpYyBpbnQgYWZzX2lnZXQ1X3BzZXVkb190ZXN0KHN0cnVjdCBpbm9kZSAqaW5vZGUsIHZvaWQgKm9wYXF1ZSlcbmZzL2Fmcy9keW5yb290LmMtMjIte1xuLS1cbmZzL2Fmcy9keW5yb290LmMtMzAtICovXG5mcy9hZnMvZHlucm9vdC5jOjMxOnN0YXRpYyBpbnQgYWZzX2lnZXQ1X3BzZXVkb19zZXQoc3RydWN0IGlub2RlICppbm9kZSwgdm9pZCAqb3BhcXVlKVxuZnMvYWZzL2R5bnJvb3QuYy0zMi17XG4tLVxuZnMvYWZzL2R5bnJvb3QuYy00Ni0gKi9cbmZzL2Fmcy9keW5yb290LmM6NDc6c3RhdGljIHN0cnVjdCBpbm9kZSAqYWZzX2lnZXRfcHNldWRvX2RpcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBpbm9fdCBpbm8pXG5mcy9hZnMvZHlucm9vdC5jLTQ4LXtcbi0tXG5mcy9hZnMvZHlucm9vdC5jLTU1LVx0aW5vZGUgPSBpZ2V0NV9sb2NrZWQoc2IsIGZpZC52bm9kZSxcbmZzL2Fmcy9keW5yb290LmM6NTY6XHRcdFx0ICAgICBhZnNfaWdldDVfcHNldWRvX3Rlc3QsIGFmc19pZ2V0NV9wc2V1ZG9fc2V0LCBcdTAwMjZmaWQpO1xuZnMvYWZzL2R5bnJvb3QuYy01Ny1cdGlmICghaW5vZGUpIHtcbi0tXG5mcy9hZnMvZHlucm9vdC5jPTkzPXN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICphZnNfZHlucm9vdF9sb29rdXBfY2VsbChzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxuLS1cbmZzL2Fmcy9keW5yb290LmMtMTE4LVxuZnMvYWZzL2R5bnJvb3QuYzoxMTk6XHRpbm9kZSA9IGFmc19pZ2V0X3BzZXVkb19kaXIoZGlyLVx1MDAzZWlfc2IsIGNlbGwtXHUwMDNlZHlucm9vdF9pbm8gKiAyICYjNDM7IGRvdHRlZCk7XG5mcy9hZnMvZHlucm9vdC5jLTEyMC1cdGlmIChJU19FUlIoaW5vZGUpKSB7XG4tLVxuZnMvYWZzL2R5bnJvb3QuYz0yNDk9c3RhdGljIHN0cnVjdCBkZW50cnkgKmFmc19sb29rdXBfYXRjZWxsKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIGlub190IGlubylcbi0tXG5mcy9hZnMvZHlucm9vdC5jLTI1NS1cdGlub2RlID0gaWdldDVfbG9ja2VkKGRpci1cdTAwM2VpX3NiLCBmaWQudm5vZGUsXG5mcy9hZnMvZHlucm9vdC5jOjI1NjpcdFx0XHQgICAgIGFmc19pZ2V0NV9wc2V1ZG9fdGVzdCwgYWZzX2lnZXQ1X3BzZXVkb19zZXQsIFx1MDAyNmZpZCk7XG5mcy9hZnMvZHlucm9vdC5jLTI1Ny1cdGlmICghaW5vZGUpXG4tLVxuZnMvYWZzL2R5bnJvb3QuYz0zNjk9c3RydWN0IGlub2RlICphZnNfZHlucm9vdF9pZ2V0X3Jvb3Qoc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcbi0tXG5mcy9hZnMvZHlucm9vdC5jLTM3OS1cdGlub2RlID0gaWdldDVfbG9ja2VkKHNiLCBmaWQudm5vZGUsXG5mcy9hZnMvZHlucm9vdC5jOjM4MDpcdFx0XHQgICAgIGFmc19pZ2V0NV9wc2V1ZG9fdGVzdCwgYWZzX2lnZXQ1X3BzZXVkb19zZXQsIFx1MDAyNmZpZCk7XG5mcy9hZnMvZHlucm9vdC5jLTM4MS1cdGlmICghaW5vZGUpXG4tLVxuZnMvYWZzL2lub2RlLmM9NDAxPWludCBhZnNfaWxvb2t1cDVfdGVzdF9ieV9maWQoc3RydWN0IGlub2RlICppbm9kZSwgdm9pZCAqb3BhcXVlKVxuLS1cbmZzL2Fmcy9pbm9kZS5jLTQxMy0gKi9cbmZzL2Fmcy9pbm9kZS5jOjQxNDpzdGF0aWMgaW50IGFmc19pZ2V0NV90ZXN0KHN0cnVjdCBpbm9kZSAqaW5vZGUsIHZvaWQgKm9wYXF1ZSlcbmZzL2Fmcy9pbm9kZS5jLTQxNS17XG4tLVxuZnMvYWZzL2lub2RlLmMtNDI0LSAqL1xuZnMvYWZzL2lub2RlLmM6NDI1OnN0YXRpYyBpbnQgYWZzX2lnZXQ1X3NldChzdHJ1Y3QgaW5vZGUgKmlub2RlLCB2b2lkICpvcGFxdWUpXG5mcy9hZnMvaW5vZGUuYy00MjYte1xuLS1cbmZzL2Fmcy9pbm9kZS5jPTQ0NT1zdGF0aWMgdm9pZCBhZnNfZ2V0X2lub2RlX2NhY2hlKHN0cnVjdCBhZnNfdm5vZGUgKnZub2RlKVxuLS1cbmZzL2Fmcy9pbm9kZS5jLTQ4MS0gKi9cbmZzL2Fmcy9pbm9kZS5jOjQ4MjpzdHJ1Y3QgaW5vZGUgKmFmc19pZ2V0KHN0cnVjdCBhZnNfb3BlcmF0aW9uICpvcCwgc3RydWN0IGFmc192bm9kZV9wYXJhbSAqdnApXG5mcy9hZnMvaW5vZGUuYy00ODMte1xuLS1cbmZzL2Fmcy9pbm9kZS5jLTQ5MS1cbmZzL2Fmcy9pbm9kZS5jOjQ5MjpcdGlub2RlID0gaWdldDVfbG9ja2VkKHNiLCB2cC1cdTAwM2VmaWQudm5vZGUsIGFmc19pZ2V0NV90ZXN0LCBhZnNfaWdldDVfc2V0LCB2cCk7XG5mcy9hZnMvaW5vZGUuYy00OTMtXHRpZiAoIWlub2RlKSB7XG4tLVxuZnMvYWZzL2lub2RlLmMtNTI3LVxuZnMvYWZzL2lub2RlLmM6NTI4OnN0YXRpYyBpbnQgYWZzX2lnZXQ1X3NldF9yb290KHN0cnVjdCBpbm9kZSAqaW5vZGUsIHZvaWQgKm9wYXF1ZSlcbmZzL2Fmcy9pbm9kZS5jLTUyOS17XG4tLVxuZnMvYWZzL2lub2RlLmM9NTQ2PXN0cnVjdCBpbm9kZSAqYWZzX3Jvb3RfaWdldChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzdHJ1Y3Qga2V5ICprZXkpXG4tLVxuZnMvYWZzL2lub2RlLmMtNTU1LVxuZnMvYWZzL2lub2RlLmM6NTU2Olx0aW5vZGUgPSBpZ2V0NV9sb2NrZWQoc2IsIDEsIE5VTEwsIGFmc19pZ2V0NV9zZXRfcm9vdCwgTlVMTCk7XG5mcy9hZnMvaW5vZGUuYy01NTctXHRpZiAoIWlub2RlKSB7XG4tLVxuZnMvYWZzL2ludGVybmFsLmg9MTI1OD1leHRlcm4gaW50IGFmc19pbG9va3VwNV90ZXN0X2J5X2ZpZChzdHJ1Y3QgaW5vZGUgKiwgdm9pZCAqKTtcbmZzL2Fmcy9pbnRlcm5hbC5oOjEyNTk6ZXh0ZXJuIHN0cnVjdCBpbm9kZSAqYWZzX2lnZXQoc3RydWN0IGFmc19vcGVyYXRpb24gKiwgc3RydWN0IGFmc192bm9kZV9wYXJhbSAqKTtcbmZzL2Fmcy9pbnRlcm5hbC5oLTEyNjAtZXh0ZXJuIHN0cnVjdCBpbm9kZSAqYWZzX3Jvb3RfaWdldChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKiwgc3RydWN0IGtleSAqKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIyIDA5OjM1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYzNjY0CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogNTQyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIEFGUyBGaWxlc3lzdGVtIGZvciBGdXp6aW5nKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgc2NhbiByZXZlYWxlZCBhIGhhbmRmdWwgb2YgZ2xvYmFsbHkgZGVmaW5lZCBzeW1ib2xzIGluIHRoZSBBRlMgY29kZTogYGFmc19pZ2V0YCwgYGFmc19wdXRfb3BlcmF0aW9uYCwgYGFmc19leHRyYWN0X3Zsc2VydmVyX2xpc3RgLCBhbmQgYGFmc19jcmVhdGVfdm9sdW1lYC4gSSB0aGVuIGNyb3NzLXJlZmVyZW5jZWQgdGhlc2Ugd2l0aCBzdXBlciBvcGVyYXRpb25zIHRyaWdnZXJlZCBieSBWRlMgbGlrZSBgYWZzX2FsbG9jX2lub2RlYCBhbmQgYGFmc19ldmljdF9pbm9kZWAuIFRoaXMgZ2F2ZSBtZSBhIHByZWxpbWluYXJ5IGxpc3Qgb2YgZm9jdXMgYXJlYXMuCgpOZXh0LCBJIGNvbXBpbGVkIGEgbW9yZSBjb21wcmVoZW5zaXZlIGxpc3Qgb2Ygc3ltYm9scyBsaWtlbHkgaW1wYWN0ZWQgYnkgdGhlIHBhdGNoOiBgYWZzX2JyZWFrX2NhbGxiYWNrc2AsIGBhZnNfbG9va3VwX2NlbGxgLCBgYWZzX3JlYWRkaXJgLCBgYWZzX2xvb2t1cGAsIGBhZnNfZF9yZXZhbGlkYXRlYCwgYGFmc19keW5yb290X3JlYWRkaXJgLCBgYWZzX3B1dF9vcGVyYXRpb25gLCBgYWZzX2lnZXRgLCBgYWZzX2V4dHJhY3RfdmxzZXJ2ZXJfbGlzdGAsIGFuZCBgYWZzX2NyZWF0ZV92b2x1bWVgLiBUaGlzIGxpc3QgcG9pbnRzIGRpcmVjdGx5IHRvIGNoYW5nZXMgaW4gdm9sdW1lIGxvb2t1cCB3aXRoIFJDVSBsb2NrcywgY2VsbCBhbGxvY2F0aW9uIGFuZCBkZXN0cnVjdGlvbiwgY2FsbGJhY2sgaGFuZGxpbmcsIGRpcmVjdG9yeSBpdGVyYXRpb24gYW5kIGxvb2t1cCwgZHluYW1pYyByb290IHJlYWRpbmcsIG9wZXJhdGlvbiBwdXR0aW5nLCBpbm9kZSBpbml0aWFsaXphdGlvbi9ldmljdGlvbiwgVkwgc2VydmVyIGV4dHJhY3Rpb24sIGFuZCB2b2x1bWUgaW5zZXJ0aW9uLiBBIHNpZ25pZmljYW50IG51bWJlciBvZiBjb3JlIEFGUyBmdW5jdGlvbnMgYXJlIHRvdWNoZWQsIHN1Z2dlc3RpbmcgYSBicm9hZCBzY29wZSBvZiBjaGFuZ2VzLgoKQW5hbHl6aW5nIHRoZSBjb25maWd1cmF0aW9uLCBgQUZTX0ZTYCBpcywgb2YgY291cnNlLCB0aGUga2V5IGVuYWJsZXIuIEhvd2V2ZXIsIEkgZG91YmxlLWNoZWNrZWQgdGhlIGRlcGVuZGVuY2llcy4gYE5FVGAsIGBLRVlTYCwgYW5kIGBSWFJQQ2AgYXJlIGFsc28gcmVxdWlyZWQgZm9yIEFGUyBmdW5jdGlvbmFsaXR5LCBidXQgdGhleSBhcmUgZWl0aGVyIGVuYWJsZWQgYnkgZGVmYXVsdCBvciBzZWxlY3RlZCBieSBgQUZTX0ZTYCwgd2hpY2ggc2ltcGxpZmllcyB0aGluZ3MuIE5vIGFkZGl0aW9uYWwgY29uZmlndXJhdGlvbnMgYXBwZWFyIG5lY2Vzc2FyeS4KCkJhc2VkIG9uIHRoaXMgYXNzZXNzbWVudCwgdGhlIGZ1bmN0aW9uYWwgY2hhbmdlcyBzcGFuIHJlYWNoYWJsZSBjb3JlIGxvZ2ljIHdpdGhpbiBBRlMuIFRoZSBBRlMgZmlsZXN5c3RlbSBpcyBub3cgY2xlYXJseSBhIHZpYWJsZSBjYW5kaWRhdGUgZm9yIGZ1enppbmcsIGFuZCBJIGJlbGlldmUgc3l6a2FsbGVyIHNob3VsZCBiZSBzdWNjZXNzZnVsIGluIGV4cG9zaW5nIGJ1Z3Mgb3IgdnVsbmVyYWJpbGl0aWVzLiBUaGVyZWZvcmUsIEkgYmVsaWV2ZSBpdCYjMzk7cyB3b3J0aCBmdXp6aW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjIgMDk6MzU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEFGU19GUyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL2Fmcy9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2Fmcy9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG5mcy9hZnMvS2NvbmZpZzoyOmNvbmZpZyBBRlNfRlNcbmZzL2Fmcy9LY29uZmlnLTMtXHR0cmlzdGF0ZSBcJiMzNDtBbmRyZXcgRmlsZSBTeXN0ZW0gc3VwcG9ydCAoQUZTKVwmIzM0O1xuLS1cbmZzL2Fmcy9LY29uZmlnPTE3PWNvbmZpZyBBRlNfREVCVUdcbi0tXG5mcy9hZnMvS2NvbmZpZy0yNi1cbmZzL2Fmcy9LY29uZmlnOjI3OmNvbmZpZyBBRlNfRlNDQUNIRVxuZnMvYWZzL0tjb25maWctMjgtXHRib29sIFwmIzM0O1Byb3ZpZGUgQUZTIGNsaWVudCBjYWNoaW5nIHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMzEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIyIDA5OjM1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY0NzczCgkJCQkJCQlvdXRwdXQ6IDE4MgoJCQkJCQkJdGhvdWdodHM6IDIxNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGaW5hbCBBRlNfRlMgQ2hlY2sqKgoKT2theSwgSSYjMzk7bSBjb25maWRlbnQgdGhhdCBgQUZTX0ZTYCBpcyBhIHN1aXRhYmxlIHN0YXJ0aW5nIHBvaW50IGZvciB0aGUgY29kZSBjaGFuZ2VzLiBOb3csIGl0JiMzOTtzIHRpbWUgZm9yIG9uZSBsYXN0LCB2ZXJ5IHRob3JvdWdoIHJldmlldyBvZiB0aGUgY3J1Y2lhbCBmb2N1cyBzeW1ib2xzIHRoYXQgaGF2ZSBiZWVuIG1vZGlmaWVkIGJ5IHRoaXMgcGF0Y2guIExldCYjMzk7cyBtYWtlIHN1cmUgd2UgaGF2ZW4mIzM5O3QgbWlzc2VkIGFueXRoaW5nIGNydWNpYWwuIEkmIzM5O20gZm9jdXNpbmcgb246CgoqICAgYGFmc19icmVha19jYWxsYmFja3NgOiAgTWFraW5nIHN1cmUgdGhlIGNhbGxiYWNrIGhhbmRsaW5nIGlzIGNvcnJlY3QsIGFzIHRoaXMgaXMgYSBmcmVxdWVudCBzb3VyY2Ugb2Ygc3VidGxlIGlzc3Vlcy4KKiAgIGBhZnNfbG9va3VwX2NlbGxgOiBBIGNsb3NlIGNoZWNrIG9uIHRoZSBjZWxsIG1hbmFnZW1lbnQgbG9naWMsIGNyaXRpY2FsIHRvIGNvcnJlY3Qgb3BlcmF0aW9uLgoqICAgYGFmc19yZWFkZGlyYCwgYGFmc19sb29rdXBgLCBgYWZzX2RfcmV2YWxpZGF0ZWAsIGFuZCBgYWZzX2R5bnJvb3RfcmVhZGRpcmA6IEkmIzM5O20gZ29pbmcgdGhyb3VnaCBlYWNoIG9mIHRoZXNlIGRpcmVjdG9yeSBvcGVyYXRpb25zIHdpdGggYSBmaW5lLXRvb3RoIGNvbWIuIEFueSBwcm9ibGVtcyBoZXJlIHdpbGwgY2F1c2Ugd2lkZXNwcmVhZCBpc3N1ZXMuCiogICBgYWZzX3B1dF9vcGVyYXRpb25gOiBUaGUgb3BlcmF0aW9uIG1hbmFnZW1lbnQgaXMgdml0YWwgZm9yIGNsZWFuIHJlc291cmNlIHVzYWdlLgoqICAgYGFmc19pZ2V0YDogVGhlIGlub2RlIG1hbmFnZW1lbnQgbmVlZHMgY2FyZWZ1bCByZXZpZXcgZm9yIHBvdGVudGlhbCBpbm9kZSBsZWFrcyBvciBjb3JydXB0aW9uLgoqICAgYGFmc19leHRyYWN0X3Zsc2VydmVyX2xpc3RgOiBJdCYjMzk7cyBlc3NlbnRpYWwgdG8gZW5zdXJlIHRoZSBWTCBzZXJ2ZXIgbGlzdCBleHRyYWN0aW9uIGlzIGFjY3VyYXRlIGFuZCByb2J1c3QuCiogICBgYWZzX2NyZWF0ZV92b2x1bWVgOiBNYWtpbmcgY2VydGFpbiB0aGlzIGlzIHNvbGlkLCBhbmQgdGhhdCB2b2x1bWUgbWFuYWdlbWVudCBpcyBoYW5kbGVkIHByb3Blcmx5LgoKQmFzaWNhbGx5LCBJJiMzOTttIHZlcmlmeWluZyB0aGF0IHdlJiMzOTt2ZSBjb3ZlcmVkIHRoZSBjb3JlIGFyZWFzIHRoZSBwYXRjaCB0b3VjaGVzOiB0aGUgY2FsbGJhY2sgaGFuZGxpbmcsIGNlbGwgbWFuYWdlbWVudCwgZGlyZWN0b3J5IG9wZXJhdGlvbnMsIG92ZXJhbGwgb3BlcmF0aW9uIG1hbmFnZW1lbnQsIGlub2RlIG1hbmFnZW1lbnQsIFZMIHNlcnZlciBsaXN0IGV4dHJhY3Rpb24sIGFuZCB2b2x1bWUgbWFuYWdlbWVudC4gVGFraW5nIGEgZ29vZCBsb29rIGF0IGVhY2ggb2YgdGhlc2Ugc3ltYm9scywgSSYjMzk7bSBmZWVsaW5nIGdvb2QgYWJvdXQgdGhlIG92ZXJhbGwgcGljdHVyZS4gTG9va3Mgc29saWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMiAwOTozNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QUZTX0ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YWZzX2JyZWFrX2NhbGxiYWNrcyYjMzQ7LAogICAgJiMzNDthZnNfbG9va3VwX2NlbGwmIzM0OywKICAgICYjMzQ7YWZzX3JlYWRkaXImIzM0OywKICAgICYjMzQ7YWZzX2xvb2t1cCYjMzQ7LAogICAgJiMzNDthZnNfZF9yZXZhbGlkYXRlJiMzNDssCiAgICAmIzM0O2Fmc19keW5yb290X3JlYWRkaXImIzM0OywKICAgICYjMzQ7YWZzX3B1dF9vcGVyYXRpb24mIzM0OywKICAgICYjMzQ7YWZzX2lnZXQmIzM0OywKICAgICYjMzQ7YWZzX2V4dHJhY3RfdmxzZXJ2ZXJfbGlzdCYjMzQ7LAogICAgJiMzNDthZnNfY3JlYXRlX3ZvbHVtZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIEFGUyBmaWxlc3lzdGVtLCBtb2RpZnlpbmcgY2VsbCBhbGxvY2F0aW9uL2Rlc3RydWN0aW9uLCBjYWxsYmFjayBoYW5kbGluZywgZGlyZWN0b3J5IGl0ZXJhdGlvbiBhbmQgbG9va3VwLCBkeW5hbWljIHJvb3QgcmVhZGluZywgb3BlcmF0aW9uIG1hbmFnZW1lbnQsIGlub2RlIGluaXRpYWxpemF0aW9uL2V2aWN0aW9uLCBWTCBzZXJ2ZXIgbGlzdCBleHRyYWN0aW9uLCBhbmQgdm9sdW1lIGluc2VydGlvbi4gVGhlc2UgYXJlIHJlYWNoYWJsZSBjb3JlIEFGUyBsb2dpYyBwYXRocyB0aGF0IGNhbiBiZSBmdXp6ZWQgdmlhIGZpbGVzeXN0ZW0gb3BlcmF0aW9ucyBhbmQgbmV0d29yayBpbnRlcmFjdGlvbnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0FGU19GUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2Fmc19icmVha19jYWxsYmFja3MmIzM0OywKICAgICYjMzQ7YWZzX2xvb2t1cF9jZWxsJiMzNDssCiAgICAmIzM0O2Fmc19yZWFkZGlyJiMzNDssCiAgICAmIzM0O2Fmc19sb29rdXAmIzM0OywKICAgICYjMzQ7YWZzX2RfcmV2YWxpZGF0ZSYjMzQ7LAogICAgJiMzNDthZnNfZHlucm9vdF9yZWFkZGlyJiMzNDssCiAgICAmIzM0O2Fmc19wdXRfb3BlcmF0aW9uJiMzNDssCiAgICAmIzM0O2Fmc19pZ2V0JiMzNDssCiAgICAmIzM0O2Fmc19leHRyYWN0X3Zsc2VydmVyX2xpc3QmIzM0OywKICAgICYjMzQ7YWZzX2NyZWF0ZV92b2x1bWUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBBRlMgZmlsZXN5c3RlbSwgbW9kaWZ5aW5nIGNlbGwgYWxsb2NhdGlvbi9kZXN0cnVjdGlvbiwgY2FsbGJhY2sgaGFuZGxpbmcsIGRpcmVjdG9yeSBpdGVyYXRpb24gYW5kIGxvb2t1cCwgZHluYW1pYyByb290IHJlYWRpbmcsIG9wZXJhdGlvbiBtYW5hZ2VtZW50LCBpbm9kZSBpbml0aWFsaXphdGlvbi9ldmljdGlvbiwgVkwgc2VydmVyIGxpc3QgZXh0cmFjdGlvbiwgYW5kIHZvbHVtZSBpbnNlcnRpb24uIFRoZXNlIGFyZSByZWFjaGFibGUgY29yZSBBRlMgbG9naWMgcGF0aHMgdGhhdCBjYW4gYmUgZnV6emVkIHZpYSBmaWxlc3lzdGVtIG9wZXJhdGlvbnMgYW5kIG5ldHdvcmsgaW50ZXJhY3Rpb25zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDYtMjJUMDk6Mjc6MTAuNjA2OTcxMTM5WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTA5ODIxNzkyMzkwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkFGU19GU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImFmc19icmVha19jYWxsYmFja3NcIixcbiAgICBcImFmc19sb29rdXBfY2VsbFwiLFxuICAgIFwiYWZzX3JlYWRkaXJcIixcbiAgICBcImFmc19sb29rdXBcIixcbiAgICBcImFmc19kX3JldmFsaWRhdGVcIixcbiAgICBcImFmc19keW5yb290X3JlYWRkaXJcIixcbiAgICBcImFmc19wdXRfb3BlcmF0aW9uXCIsXG4gICAgXCJhZnNfaWdldFwiLFxuICAgIFwiYWZzX2V4dHJhY3RfdmxzZXJ2ZXJfbGlzdFwiLFxuICAgIFwiYWZzX2NyZWF0ZV92b2x1bWVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIEFGUyBmaWxlc3lzdGVtLCBtb2RpZnlpbmcgY2VsbCBhbGxvY2F0aW9uL2Rlc3RydWN0aW9uLCBjYWxsYmFjayBoYW5kbGluZywgZGlyZWN0b3J5IGl0ZXJhdGlvbiBhbmQgbG9va3VwLCBkeW5hbWljIHJvb3QgcmVhZGluZywgb3BlcmF0aW9uIG1hbmFnZW1lbnQsIGlub2RlIGluaXRpYWxpemF0aW9uL2V2aWN0aW9uLCBWTCBzZXJ2ZXIgbGlzdCBleHRyYWN0aW9uLCBhbmQgdm9sdW1lIGluc2VydGlvbi4gVGhlc2UgYXJlIHJlYWNoYWJsZSBjb3JlIEFGUyBsb2dpYyBwYXRocyB0aGF0IGNhbiBiZSBmdXp6ZWQgdmlhIGZpbGVzeXN0ZW0gb3BlcmF0aW9ucyBhbmQgbmV0d29yayBpbnRlcmFjdGlvbnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIyVDA5OjI3OjEwLjYwNjk3NzMwOVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzgxMDg5NDcwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgZTIyNzI2ODk0ZTYwYzdhOTg0OWRlOWVlMmU4ZTRiZTBhNmNhNDAxOFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgTW9uIEp1biAyMiAwOToyNzowOCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9mcy9hZnMvY2FsbGJhY2suYyBiL2ZzL2Fmcy9jYWxsYmFjay5jXFxuaW5kZXggODk0ZDJiYWQ2YjZjZWMuLjYxMzU0MDAzYzAwNmNmIDEwMDY0NFxcbi0tLSBhL2ZzL2Fmcy9jYWxsYmFjay5jXFxuKysrIGIvZnMvYWZzL2NhbGxiYWNrLmNcXG5AQCAtMTEzLDE2ICsxMTMsMTIgQEAgc3RhdGljIHN0cnVjdCBhZnNfdm9sdW1lICphZnNfbG9va3VwX3ZvbHVtZV9yY3Uoc3RydWN0IGFmc19jZWxsICpjZWxsLFxcbiB7XFxuIFxcdHN0cnVjdCBhZnNfdm9sdW1lICp2b2x1bWUgPSBOVUxMO1xcbiBcXHRzdHJ1Y3QgcmJfbm9kZSAqcDtcXG4tXFx0aW50IHNlcSA9IDE7XFxuIFxcbi1cXHRmb3IgKDs7KSB7XFxuK1xcdHNjb3BlZF9zZXFsb2NrX3JlYWQoXFx1MDAyNmNlbGwtXFx1MDAzZXZvbHVtZV9sb2NrLCBzc19sb2NrKSB7XFxuIFxcdFxcdC8qIFVuZm9ydHVuYXRlbHksIHJidHJlZSB3YWxraW5nIGRvZXNuJ3QgZ2l2ZSByZWxpYWJsZSByZXN1bHRzXFxuIFxcdFxcdCAqIHVuZGVyIGp1c3QgdGhlIFJDVSByZWFkIGxvY2ssIHNvIHdlIGhhdmUgdG8gY2hlY2sgZm9yXFxuIFxcdFxcdCAqIGNoYW5nZXMuXFxuIFxcdFxcdCAqL1xcbi1cXHRcXHRzZXErKzsgLyogMiBvbiB0aGUgMXN0L2xvY2tsZXNzIHBhdGgsIG90aGVyd2lzZSBvZGQgKi9cXG4tXFx0XFx0cmVhZF9zZXFiZWdpbl9vcl9sb2NrKFxcdTAwMjZjZWxsLVxcdTAwM2V2b2x1bWVfbG9jaywgXFx1MDAyNnNlcSk7XFxuLVxcbiBcXHRcXHRwID0gcmN1X2RlcmVmZXJlbmNlX3JhdyhjZWxsLVxcdTAwM2V2b2x1bWVzLnJiX25vZGUpO1xcbiBcXHRcXHR3aGlsZSAocCkge1xcbiBcXHRcXHRcXHR2b2x1bWUgPSByYl9lbnRyeShwLCBzdHJ1Y3QgYWZzX3ZvbHVtZSwgY2VsbF9ub2RlKTtcXG5AQCAtMTM4LDEyICsxMzQsOSBAQCBzdGF0aWMgc3RydWN0IGFmc192b2x1bWUgKmFmc19sb29rdXBfdm9sdW1lX3JjdShzdHJ1Y3QgYWZzX2NlbGwgKmNlbGwsXFxuIFxcbiBcXHRcXHRpZiAodm9sdW1lIFxcdTAwMjZcXHUwMDI2IGFmc190cnlfZ2V0X3ZvbHVtZSh2b2x1bWUsIGFmc192b2x1bWVfdHJhY2VfZ2V0X2NhbGxiYWNrKSlcXG4gXFx0XFx0XFx0YnJlYWs7XFxuLVxcdFxcdGlmICghbmVlZF9zZXFyZXRyeShcXHUwMDI2Y2VsbC1cXHUwMDNldm9sdW1lX2xvY2ssIHNlcSkpXFxuLVxcdFxcdFxcdGJyZWFrO1xcbi1cXHRcXHRzZXEgfD0gMTsgLyogV2FudCBhIGxvY2sgbmV4dCB0aW1lICovXFxuK1xcdFxcdHZvbHVtZSA9IE5VTEw7XFxuIFxcdH1cXG4gXFxuLVxcdGRvbmVfc2VxcmV0cnkoXFx1MDAyNmNlbGwtXFx1MDAzZXZvbHVtZV9sb2NrLCBzZXEpO1xcbiBcXHRyZXR1cm4gdm9sdW1lO1xcbiB9XFxuIFxcbkBAIC0yMjEsNyArMjE0LDExIEBAIHN0YXRpYyB2b2lkIGFmc19icmVha19zb21lX2NhbGxiYWNrcyhzdHJ1Y3QgYWZzX3NlcnZlciAqc2VydmVyLFxcbiBcXG4gXFx0cmN1X3JlYWRfbG9jaygpO1xcbiBcXHR2b2x1bWUgPSBhZnNfbG9va3VwX3ZvbHVtZV9yY3Uoc2VydmVyLVxcdTAwM2VjZWxsLCB2aWQpO1xcbi1cXHRpZiAoY2JiLVxcdTAwM2VmaWQudm5vZGUgPT0gMCBcXHUwMDI2XFx1MDAyNiBjYmItXFx1MDAzZWZpZC51bmlxdWUgPT0gMCkge1xcbitcXHRpZiAoIXZvbHVtZSkge1xcbitcXHRcXHQvKiBJZ25vcmUgYnJlYWtzIG9uIHVua25vd24gdm9sdW1lcy4gKi9cXG4rXFx0XFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuK1xcdFxcdCpfY291bnQgPSAwO1xcbitcXHR9IGVsc2UgaWYgKGNiYi1cXHUwMDNlZmlkLnZub2RlID09IDAgXFx1MDAyNlxcdTAwMjYgY2JiLVxcdTAwM2VmaWQudW5pcXVlID09IDApIHtcXG4gXFx0XFx0YWZzX2JyZWFrX3ZvbHVtZV9jYWxsYmFjayhzZXJ2ZXIsIHZvbHVtZSk7XFxuIFxcdFxcdCpfY291bnQgLT0gMTtcXG4gXFx0XFx0aWYgKCpfY291bnQpXFxuZGlmZiAtLWdpdCBhL2ZzL2Fmcy9jZWxsLmMgYi9mcy9hZnMvY2VsbC5jXFxuaW5kZXggOTczODY4NGRiZGQyNjguLjQ3YTI2NDU3NjhkNzllIDEwMDY0NFxcbi0tLSBhL2ZzL2Fmcy9jZWxsLmNcXG4rKysgYi9mcy9hZnMvY2VsbC5jXFxuQEAgLTIwNiwxMSArMjA2LDYgQEAgc3RhdGljIHN0cnVjdCBhZnNfY2VsbCAqYWZzX2FsbG9jX2NlbGwoc3RydWN0IGFmc19uZXQgKm5ldCxcXG4gXFx0Y2VsbC1cXHUwMDNlZG5zX3N0YXR1cyA9IHZsbGlzdC1cXHUwMDNlc3RhdHVzO1xcbiBcXHRzbXBfc3RvcmVfcmVsZWFzZShcXHUwMDI2Y2VsbC1cXHUwMDNlZG5zX2xvb2t1cF9jb3VudCwgMSk7IC8qIHZzIHNvdXJjZS9zdGF0dXMgKi9cXG4gXFx0YXRvbWljX2luYyhcXHUwMDI2bmV0LVxcdTAwM2VjZWxsc19vdXRzdGFuZGluZyk7XFxuLVxcdHJldCA9IGlkcl9hbGxvY19jeWNsaWMoXFx1MDAyNm5ldC1cXHUwMDNlY2VsbHNfZHluX2lubywgY2VsbCxcXG4tXFx0XFx0XFx0ICAgICAgIDIsIElOVF9NQVggLyAyLCBHRlBfS0VSTkVMKTtcXG4tXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuLVxcdFxcdGdvdG8gZXJyb3I7XFxuLVxcdGNlbGwtXFx1MDAzZWR5bnJvb3RfaW5vID0gcmV0O1xcbiBcXHRjZWxsLVxcdTAwM2VkZWJ1Z19pZCA9IGF0b21pY19pbmNfcmV0dXJuKFxcdTAwMjZjZWxsX2RlYnVnX2lkKTtcXG4gXFxuIFxcdHRyYWNlX2Fmc19jZWxsKGNlbGwtXFx1MDAzZWRlYnVnX2lkLCAxLCAwLCBhZnNfY2VsbF90cmFjZV9hbGxvYyk7XFxuQEAgLTMwNCw2ICsyOTksMTMgQEAgc3RydWN0IGFmc19jZWxsICphZnNfbG9va3VwX2NlbGwoc3RydWN0IGFmc19uZXQgKm5ldCxcXG4gXFx0XFx0XFx0Z290byBjZWxsX2FscmVhZHlfZXhpc3RzO1xcbiBcXHR9XFxuIFxcbitcXHRyZXQgPSBpZHJfYWxsb2NfY3ljbGljKFxcdTAwMjZuZXQtXFx1MDAzZWNlbGxzX2R5bl9pbm8sIGNhbmRpZGF0ZSxcXG4rXFx0XFx0XFx0ICAgICAgIDIsIElOVF9NQVggLyAyLCBHRlBfS0VSTkVMKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gY2FudF9hbGxvY19pbm87XFxuK1xcdGNhbmRpZGF0ZS1cXHUwMDNlZHlucm9vdF9pbm8gPSByZXQ7XFxuK1xcdHNldF9iaXQoQUZTX0NFTExfRkxfSEFWRV9JTk8sIFxcdTAwMjZjYW5kaWRhdGUtXFx1MDAzZWZsYWdzKTtcXG4rXFxuIFxcdGNlbGwgPSBjYW5kaWRhdGU7XFxuIFxcdGNhbmRpZGF0ZSA9IE5VTEw7XFxuIFxcdGFmc191c2VfY2VsbChjZWxsLCB0cmFjZSk7XFxuQEAgLTM3OCw2ICszODAsMTEgQEAgc3RydWN0IGFmc19jZWxsICphZnNfbG9va3VwX2NlbGwoc3RydWN0IGFmc19uZXQgKm5ldCxcXG4gXFx0X2xlYXZlKFxcXCIgPSAlcCBbY2VsbF1cXFwiLCBjZWxsKTtcXG4gXFx0cmV0dXJuIGNlbGw7XFxuIFxcbitjYW50X2FsbG9jX2lubzpcXG4rXFx0dXBfd3JpdGUoXFx1MDAyNm5ldC1cXHUwMDNlY2VsbHNfbG9jayk7XFxuK1xcdGFmc19wdXRfY2VsbChjYW5kaWRhdGUsIGFmc19jZWxsX3RyYWNlX3B1dF9jYW5kaWRhdGUpO1xcbitcXHRnb3RvIGVycm9yX25vcHV0O1xcbitcXG4gY2VsbF9hbHJlYWR5X2V4aXN0czpcXG4gXFx0X2RlYnVnKFxcXCJjZWxsIGV4aXN0c1xcXCIpO1xcbiBcXHRjZWxsID0gY3Vyc29yO1xcbkBAIC01NDcsNiArNTU0LDggQEAgc3RhdGljIGludCBhZnNfdXBkYXRlX2NlbGwoc3RydWN0IGFmc19jZWxsICpjZWxsKVxcbiBcXHRcXHRyY3VfYXNzaWduX3BvaW50ZXIoY2VsbC1cXHUwMDNldmxfc2VydmVycywgdmxsaXN0KTtcXG4gXFx0XFx0Y2VsbC1cXHUwMDNlZG5zX3NvdXJjZSA9IHZsbGlzdC1cXHUwMDNlc291cmNlO1xcbiBcXHRcXHRvbGQgPSBwO1xcbitcXHR9IGVsc2Uge1xcbitcXHRcXHRvbGQgPSB2bGxpc3Q7XFxuIFxcdH1cXG4gXFx0d3JpdGVfdW5sb2NrKFxcdTAwMjZjZWxsLVxcdTAwM2V2bF9zZXJ2ZXJzX2xvY2spO1xcbiBcXHRhZnNfcHV0X3Zsc2VydmVybGlzdChjZWxsLVxcdTAwM2VuZXQsIG9sZCk7XFxuQEAgLTU3Nyw3ICs1ODYsNiBAQCBzdGF0aWMgdm9pZCBhZnNfY2VsbF9kZXN0cm95KHN0cnVjdCByY3VfaGVhZCAqcmN1KVxcbiBcXHRhZnNfcHV0X3Zsc2VydmVybGlzdChuZXQsIHJjdV9hY2Nlc3NfcG9pbnRlcihjZWxsLVxcdTAwM2V2bF9zZXJ2ZXJzKSk7XFxuIFxcdGFmc191bnVzZV9jZWxsKGNlbGwtXFx1MDAzZWFsaWFzX29mLCBhZnNfY2VsbF90cmFjZV91bnVzZV9hbGlhcyk7XFxuIFxcdGtleV9wdXQoY2VsbC1cXHUwMDNlYW5vbnltb3VzX2tleSk7XFxuLVxcdGlkcl9yZW1vdmUoXFx1MDAyNm5ldC1cXHUwMDNlY2VsbHNfZHluX2lubywgY2VsbC1cXHUwMDNlZHlucm9vdF9pbm8pO1xcbiBcXHRrZnJlZShjZWxsLVxcdTAwM2VuYW1lIC0gMSk7XFxuIFxcdGtmcmVlKGNlbGwpO1xcbiBcXG5AQCAtNTkyLDYgKzYwMCwxMyBAQCBzdGF0aWMgdm9pZCBhZnNfZGVzdHJveV9jZWxsX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbiBcXHRhZnNfc2VlX2NlbGwoY2VsbCwgYWZzX2NlbGxfdHJhY2VfZGVzdHJveSk7XFxuIFxcdHRpbWVyX2RlbGV0ZV9zeW5jKFxcdTAwMjZjZWxsLVxcdTAwM2VtYW5hZ2VtZW50X3RpbWVyKTtcXG4gXFx0Y2FuY2VsX3dvcmtfc3luYyhcXHUwMDI2Y2VsbC1cXHUwMDNlbWFuYWdlcik7XFxuK1xcbitcXHRpZiAodGVzdF9iaXQoQUZTX0NFTExfRkxfSEFWRV9JTk8sIFxcdTAwMjZjZWxsLVxcdTAwM2VmbGFncykpIHtcXG4rXFx0XFx0ZG93bl93cml0ZShcXHUwMDI2Y2VsbC1cXHUwMDNlbmV0LVxcdTAwM2VjZWxsc19sb2NrKTtcXG4rXFx0XFx0aWRyX3JlbW92ZShcXHUwMDI2Y2VsbC1cXHUwMDNlbmV0LVxcdTAwM2VjZWxsc19keW5faW5vLCBjZWxsLVxcdTAwM2VkeW5yb290X2lubyk7XFxuK1xcdFxcdHVwX3dyaXRlKFxcdTAwMjZjZWxsLVxcdTAwM2VuZXQtXFx1MDAzZWNlbGxzX2xvY2spO1xcbitcXHR9XFxuK1xcbiBcXHRjYWxsX3JjdShcXHUwMDI2Y2VsbC1cXHUwMDNlcmN1LCBhZnNfY2VsbF9kZXN0cm95KTtcXG4gfVxcbiBcXG5kaWZmIC0tZ2l0IGEvZnMvYWZzL2Ntc2VydmljZS5jIGIvZnMvYWZzL2Ntc2VydmljZS5jXFxuaW5kZXggNTU0MGFlMWNhZDU5OWEuLmRiMzk0ZjEwMWZjNjZhIDEwMDY0NFxcbi0tLSBhL2ZzL2Fmcy9jbXNlcnZpY2UuY1xcbisrKyBiL2ZzL2Fmcy9jbXNlcnZpY2UuY1xcbkBAIC0zMzQsNyArMzM0LDYgQEAgc3RhdGljIGludCBhZnNfZGVsaXZlcl9jYl9pbml0X2NhbGxfYmFja19zdGF0ZTMoc3RydWN0IGFmc19jYWxsICpjYWxsKVxcbiBcXHRcXHRyZXQgPSBhZnNfZXh0cmFjdF9kYXRhKGNhbGwsIGZhbHNlKTtcXG4gXFx0XFx0c3dpdGNoIChyZXQpIHtcXG4gXFx0XFx0Y2FzZSAwOlxcdFxcdGJyZWFrO1xcbi1cXHRcXHRjYXNlIC1FQUdBSU46XFx0cmV0dXJuIDA7XFxuIFxcdFxcdGRlZmF1bHQ6XFx0cmV0dXJuIHJldDtcXG4gXFx0XFx0fVxcbiBcXG5AQCAtMzY0LDYgKzM2MywxMSBAQCBzdGF0aWMgaW50IGFmc19kZWxpdmVyX2NiX2luaXRfY2FsbF9iYWNrX3N0YXRlMyhzdHJ1Y3QgYWZzX2NhbGwgKmNhbGwpXFxuIFxcdGlmICghYWZzX2NoZWNrX2NhbGxfc3RhdGUoY2FsbCwgQUZTX0NBTExfU1ZfUkVQTFlJTkcpKVxcbiBcXHRcXHRyZXR1cm4gYWZzX2lvX2Vycm9yKGNhbGwsIGFmc19pb19lcnJvcl9jbV9yZXBseSk7XFxuIFxcbitcXHRpZiAoIWNhbGwtXFx1MDAzZXNlcnZlcikge1xcbitcXHRcXHR0cmFjZV9hZnNfY21fbm9fc2VydmVyX3UoY2FsbCwgY2FsbC1cXHUwMDNlcmVxdWVzdCk7XFxuK1xcdFxcdHJldHVybiAwO1xcbitcXHR9XFxuK1xcbiBcXHRpZiAobWVtY21wKGNhbGwtXFx1MDAzZXJlcXVlc3QsIFxcdTAwMjZjYWxsLVxcdTAwM2VzZXJ2ZXItXFx1MDAzZV91dWlkLCBzaXplb2YoY2FsbC1cXHUwMDNlc2VydmVyLVxcdTAwM2VfdXVpZCkpICE9IDApIHtcXG4gXFx0XFx0cHJfbm90aWNlKFxcXCJDYWxsYmFjayBVVUlEIGRvZXMgbm90IG1hdGNoIGZpbGVzZXJ2ZXIgVVVJRFxcXFxuXFxcIik7XFxuIFxcdFxcdHRyYWNlX2Fmc19jbV9ub19zZXJ2ZXJfdShjYWxsLCBjYWxsLVxcdTAwM2VyZXF1ZXN0KTtcXG5AQCAtNDUxLDcgKzQ1NSw2IEBAIHN0YXRpYyBpbnQgYWZzX2RlbGl2ZXJfY2JfcHJvYmVfdXVpZChzdHJ1Y3QgYWZzX2NhbGwgKmNhbGwpXFxuIFxcdFxcdHJldCA9IGFmc19leHRyYWN0X2RhdGEoY2FsbCwgZmFsc2UpO1xcbiBcXHRcXHRzd2l0Y2ggKHJldCkge1xcbiBcXHRcXHRjYXNlIDA6XFx0XFx0YnJlYWs7XFxuLVxcdFxcdGNhc2UgLUVBR0FJTjpcXHRyZXR1cm4gMDtcXG4gXFx0XFx0ZGVmYXVsdDpcXHRyZXR1cm4gcmV0O1xcbiBcXHRcXHR9XFxuIFxcbmRpZmYgLS1naXQgYS9mcy9hZnMvZGlyLmMgYi9mcy9hZnMvZGlyLmNcXG5pbmRleCA0OThiOTljY2RmMGUyNy4uNmRmNTZmZTkxNjNmZDcgMTAwNjQ0XFxuLS0tIGEvZnMvYWZzL2Rpci5jXFxuKysrIGIvZnMvYWZzL2Rpci5jXFxuQEAgLTI4LDkgKzI4LDExIEBAIHN0YXRpYyBpbnQgYWZzX2RfcmV2YWxpZGF0ZShzdHJ1Y3QgaW5vZGUgKmRpciwgY29uc3Qgc3RydWN0IHFzdHIgKm5hbWUsXFxuIHN0YXRpYyBpbnQgYWZzX2RfZGVsZXRlKGNvbnN0IHN0cnVjdCBkZW50cnkgKmRlbnRyeSk7XFxuIHN0YXRpYyB2b2lkIGFmc19kX2lwdXQoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgaW5vZGUgKmlub2RlKTtcXG4gc3RhdGljIGJvb2wgYWZzX2xvb2t1cF9vbmVfZmlsbGRpcihzdHJ1Y3QgZGlyX2NvbnRleHQgKmN0eCwgY29uc3QgY2hhciAqbmFtZSwgaW50IG5sZW4sXFxuLVxcdFxcdFxcdFxcdCAgbG9mZl90IGZwb3MsIHU2NCBpbm8sIHVuc2lnbmVkIGR0eXBlKTtcXG4rXFx0XFx0XFx0XFx0ICAgdTY0IGlubywgdTMyIHVuaXF1aWZpZXIpO1xcbisjZGVmaW5lIEFGU19MT09LVVBfT05FICgoZmlsbGRpcl90KTB4MTIzVUwpXFxuIHN0YXRpYyBib29sIGFmc19sb29rdXBfZmlsbGRpcihzdHJ1Y3QgZGlyX2NvbnRleHQgKmN0eCwgY29uc3QgY2hhciAqbmFtZSwgaW50IG5sZW4sXFxuLVxcdFxcdFxcdCAgICAgIGxvZmZfdCBmcG9zLCB1NjQgaW5vLCB1bnNpZ25lZCBkdHlwZSk7XFxuK1xcdFxcdFxcdCAgICAgICB1NjQgaW5vLCB1MzIgdW5pcXVpZmllcik7XFxuKyNkZWZpbmUgQUZTX0xPT0tVUCAoKGZpbGxkaXJfdCkweDEzN1VMKVxcbiBzdGF0aWMgaW50IGFmc19jcmVhdGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxcbiBcXHRcXHQgICAgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSwgYm9vbCBleGNsKTtcXG4gc3RhdGljIHN0cnVjdCBkZW50cnkgKmFmc19ta2RpcihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXFxuQEAgLTQyMSwxMSArNDIzLDE4IEBAIHN0YXRpYyBpbnQgYWZzX2Rpcl9pdGVyYXRlX2Jsb2NrKHN0cnVjdCBhZnNfdm5vZGUgKmR2bm9kZSxcXG4gXFx0XFx0fVxcbiBcXG4gXFx0XFx0LyogZm91bmQgdGhlIG5leHQgZW50cnkgKi9cXG4tXFx0XFx0aWYgKCFkaXJfZW1pdChjdHgsIGRpcmUtXFx1MDAzZXUubmFtZSwgbmxlbixcXG4tXFx0XFx0XFx0ICAgICAgbnRvaGwoZGlyZS1cXHUwMDNldS52bm9kZSksXFxuLVxcdFxcdFxcdCAgICAgIChjdHgtXFx1MDAzZWFjdG9yID09IGFmc19sb29rdXBfZmlsbGRpciB8fFxcbi1cXHRcXHRcXHQgICAgICAgY3R4LVxcdTAwM2VhY3RvciA9PSBhZnNfbG9va3VwX29uZV9maWxsZGlyKT9cXG4tXFx0XFx0XFx0ICAgICAgbnRvaGwoZGlyZS1cXHUwMDNldS51bmlxdWUpIDogRFRfVU5LTk9XTikpIHtcXG4rXFx0XFx0aWYgKGN0eC1cXHUwMDNlYWN0b3IgPT0gQUZTX0xPT0tVUCkge1xcbitcXHRcXHRcXHRpZiAoIWFmc19sb29rdXBfZmlsbGRpcihjdHgsIGRpcmUtXFx1MDAzZXUubmFtZSwgbmxlbixcXG4rXFx0XFx0XFx0XFx0XFx0XFx0bnRvaGwoZGlyZS1cXHUwMDNldS52bm9kZSksXFxuK1xcdFxcdFxcdFxcdFxcdFxcdG50b2hsKGRpcmUtXFx1MDAzZXUudW5pcXVlKSkpXFxuK1xcdFxcdFxcdFxcdHJldHVybiAwO1xcbitcXHRcXHR9IGVsc2UgaWYgKGN0eC1cXHUwMDNlYWN0b3IgPT0gQUZTX0xPT0tVUF9PTkUpIHtcXG4rXFx0XFx0XFx0aWYgKCFhZnNfbG9va3VwX29uZV9maWxsZGlyKGN0eCwgZGlyZS1cXHUwMDNldS5uYW1lLCBubGVuLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgICAgbnRvaGwoZGlyZS1cXHUwMDNldS52bm9kZSksXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgICBudG9obChkaXJlLVxcdTAwM2V1LnVuaXF1ZSkpKVxcbitcXHRcXHRcXHRcXHRyZXR1cm4gMDtcXG4rXFx0XFx0fSBlbHNlIGlmICghZGlyX2VtaXQoY3R4LCBkaXJlLVxcdTAwM2V1Lm5hbWUsIG5sZW4sXFxuK1xcdFxcdFxcdFxcdCAgICAgbnRvaGwoZGlyZS1cXHUwMDNldS52bm9kZSksIERUX1VOS05PV04pKSB7XFxuIFxcdFxcdFxcdF9sZWF2ZShcXFwiID0gMCBbZnVsbF1cXFwiKTtcXG4gXFx0XFx0XFx0cmV0dXJuIDA7XFxuIFxcdFxcdH1cXG5AQCAtNTQ1LDYgKzU1NCw3IEBAIHN0YXRpYyBpbnQgYWZzX3JlYWRkaXIoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBkaXJfY29udGV4dCAqY3R4KVxcbiB7XFxuIFxcdGFmc19kYXRhdmVyc2lvbl90IGRpcl92ZXJzaW9uO1xcbiBcXG4rXFx0Y3R4LVxcdTAwM2VkdF9mbGFnc19tYXNrID0gVUlOVF9NQVg7XFxuIFxcdHJldHVybiBhZnNfZGlyX2l0ZXJhdGUoZmlsZV9pbm9kZShmaWxlKSwgY3R4LCBmaWxlLCBcXHUwMDI2ZGlyX3ZlcnNpb24pO1xcbiB9XFxuIFxcbkBAIC01NTQsMTQgKzU2NCwxNCBAQCBzdGF0aWMgaW50IGFmc19yZWFkZGlyKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgZGlyX2NvbnRleHQgKmN0eClcXG4gICogICB1bmlxdWlmaWVyIHRocm91Z2ggZHR5cGVcXG4gICovXFxuIHN0YXRpYyBib29sIGFmc19sb29rdXBfb25lX2ZpbGxkaXIoc3RydWN0IGRpcl9jb250ZXh0ICpjdHgsIGNvbnN0IGNoYXIgKm5hbWUsXFxuLVxcdFxcdFxcdFxcdCAgaW50IG5sZW4sIGxvZmZfdCBmcG9zLCB1NjQgaW5vLCB1bnNpZ25lZCBkdHlwZSlcXG4rXFx0XFx0XFx0XFx0ICBpbnQgbmxlbiwgdTY0IGlubywgdTMyIHVuaXF1aWZpZXIpXFxuIHtcXG4gXFx0c3RydWN0IGFmc19sb29rdXBfb25lX2Nvb2tpZSAqY29va2llID1cXG4gXFx0XFx0Y29udGFpbmVyX29mKGN0eCwgc3RydWN0IGFmc19sb29rdXBfb25lX2Nvb2tpZSwgY3R4KTtcXG4gXFxuIFxcdF9lbnRlcihcXFwieyVzLCV1fSwlcywldSwsJWxsdSwldVxcXCIsXFxuIFxcdCAgICAgICBjb29raWUtXFx1MDAzZW5hbWUubmFtZSwgY29va2llLVxcdTAwM2VuYW1lLmxlbiwgbmFtZSwgbmxlbixcXG4tXFx0ICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpIGlubywgZHR5cGUpO1xcbitcXHQgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZykgaW5vLCB1bmlxdWlmaWVyKTtcXG4gXFxuIFxcdC8qIGluc2FuaXR5IGNoZWNrcyBmaXJzdCAqL1xcbiBcXHRCVUlMRF9CVUdfT04oc2l6ZW9mKHVuaW9uIGFmc194ZHJfZGlyX2Jsb2NrKSAhPSAyMDQ4KTtcXG5AQCAtNTc0LDcgKzU4NCw3IEBAIHN0YXRpYyBib29sIGFmc19sb29rdXBfb25lX2ZpbGxkaXIoc3RydWN0IGRpcl9jb250ZXh0ICpjdHgsIGNvbnN0IGNoYXIgKm5hbWUsXFxuIFxcdH1cXG4gXFxuIFxcdGNvb2tpZS1cXHUwMDNlZmlkLnZub2RlID0gaW5vO1xcbi1cXHRjb29raWUtXFx1MDAzZWZpZC51bmlxdWUgPSBkdHlwZTtcXG4rXFx0Y29va2llLVxcdTAwM2VmaWQudW5pcXVlID0gdW5pcXVpZmllcjtcXG4gXFx0Y29va2llLVxcdTAwM2Vmb3VuZCA9IDE7XFxuIFxcbiBcXHRfbGVhdmUoXFxcIiA9IGZhbHNlIFtmb3VuZF1cXFwiKTtcXG5AQCAtNTkxLDcgKzYwMSw3IEBAIHN0YXRpYyBpbnQgYWZzX2RvX2xvb2t1cF9vbmUoc3RydWN0IGlub2RlICpkaXIsIGNvbnN0IHN0cnVjdCBxc3RyICpuYW1lLFxcbiB7XFxuIFxcdHN0cnVjdCBhZnNfc3VwZXJfaW5mbyAqYXMgPSBkaXItXFx1MDAzZWlfc2ItXFx1MDAzZXNfZnNfaW5mbztcXG4gXFx0c3RydWN0IGFmc19sb29rdXBfb25lX2Nvb2tpZSBjb29raWUgPSB7XFxuLVxcdFxcdC5jdHguYWN0b3IgPSBhZnNfbG9va3VwX29uZV9maWxsZGlyLFxcbitcXHRcXHQuY3R4LmFjdG9yID0gQUZTX0xPT0tVUF9PTkUsXFxuIFxcdFxcdC5uYW1lID0gKm5hbWUsXFxuIFxcdFxcdC5maWQudmlkID0gYXMtXFx1MDAzZXZvbHVtZS1cXHUwMDNldmlkXFxuIFxcdH07XFxuQEAgLTYyMiwxNCArNjMyLDE0IEBAIHN0YXRpYyBpbnQgYWZzX2RvX2xvb2t1cF9vbmUoc3RydWN0IGlub2RlICpkaXIsIGNvbnN0IHN0cnVjdCBxc3RyICpuYW1lLFxcbiAgKiAgIHVuaXF1aWZpZXIgdGhyb3VnaCBkdHlwZVxcbiAgKi9cXG4gc3RhdGljIGJvb2wgYWZzX2xvb2t1cF9maWxsZGlyKHN0cnVjdCBkaXJfY29udGV4dCAqY3R4LCBjb25zdCBjaGFyICpuYW1lLFxcbi1cXHRcXHRcXHQgICAgICBpbnQgbmxlbiwgbG9mZl90IGZwb3MsIHU2NCBpbm8sIHVuc2lnbmVkIGR0eXBlKVxcbitcXHRcXHRcXHQgICAgICBpbnQgbmxlbiwgdTY0IGlubywgdTMyIHVuaXF1aWZpZXIpXFxuIHtcXG4gXFx0c3RydWN0IGFmc19sb29rdXBfY29va2llICpjb29raWUgPVxcbiBcXHRcXHRjb250YWluZXJfb2YoY3R4LCBzdHJ1Y3QgYWZzX2xvb2t1cF9jb29raWUsIGN0eCk7XFxuIFxcbiBcXHRfZW50ZXIoXFxcInslcywldX0sJXMsJXUsLCVsbHUsJXVcXFwiLFxcbiBcXHQgICAgICAgY29va2llLVxcdTAwM2VuYW1lLm5hbWUsIGNvb2tpZS1cXHUwMDNlbmFtZS5sZW4sIG5hbWUsIG5sZW4sXFxuLVxcdCAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKSBpbm8sIGR0eXBlKTtcXG4rXFx0ICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpIGlubywgdW5pcXVpZmllcik7XFxuIFxcbiBcXHQvKiBpbnNhbml0eSBjaGVja3MgZmlyc3QgKi9cXG4gXFx0QlVJTERfQlVHX09OKHNpemVvZih1bmlvbiBhZnNfeGRyX2Rpcl9ibG9jaykgIT0gMjA0OCk7XFxuQEAgLTYzNyw3ICs2NDcsNyBAQCBzdGF0aWMgYm9vbCBhZnNfbG9va3VwX2ZpbGxkaXIoc3RydWN0IGRpcl9jb250ZXh0ICpjdHgsIGNvbnN0IGNoYXIgKm5hbWUsXFxuIFxcbiBcXHRpZiAoY29va2llLVxcdTAwM2Vucl9maWRzIFxcdTAwM2MgNTApIHtcXG4gXFx0XFx0Y29va2llLVxcdTAwM2VmaWRzW2Nvb2tpZS1cXHUwMDNlbnJfZmlkc10udm5vZGVcXHQ9IGlubztcXG4tXFx0XFx0Y29va2llLVxcdTAwM2VmaWRzW2Nvb2tpZS1cXHUwMDNlbnJfZmlkc10udW5pcXVlXFx0PSBkdHlwZTtcXG4rXFx0XFx0Y29va2llLVxcdTAwM2VmaWRzW2Nvb2tpZS1cXHUwMDNlbnJfZmlkc10udW5pcXVlXFx0PSB1bmlxdWlmaWVyO1xcbiBcXHRcXHRjb29raWUtXFx1MDAzZW5yX2ZpZHMrKztcXG4gXFx0fVxcbiBcXG5AQCAtNzc4LDcgKzc4OCw3IEBAIHN0YXRpYyBzdHJ1Y3QgaW5vZGUgKmFmc19kb19sb29rdXAoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSlcXG4gXFxuIFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBBUlJBWV9TSVpFKGNvb2tpZS1cXHUwMDNlZmlkcyk7IGkrKylcXG4gXFx0XFx0Y29va2llLVxcdTAwM2VmaWRzW2ldLnZpZCA9IGR2bm9kZS1cXHUwMDNlZmlkLnZpZDtcXG4tXFx0Y29va2llLVxcdTAwM2VjdHguYWN0b3IgPSBhZnNfbG9va3VwX2ZpbGxkaXI7XFxuK1xcdGNvb2tpZS1cXHUwMDNlY3R4LmFjdG9yID0gQUZTX0xPT0tVUDtcXG4gXFx0Y29va2llLVxcdTAwM2VuYW1lID0gZGVudHJ5LVxcdTAwM2VkX25hbWU7XFxuIFxcdGNvb2tpZS1cXHUwMDNlbnJfZmlkcyA9IDI7IC8qIHNsb3QgMSBpcyBzYXZlZCBmb3IgdGhlIGZpZCB3ZSBhY3R1YWxseSB3YW50XFxuIFxcdFxcdFxcdCAgICAgICogYW5kIHNsb3QgMCBmb3IgdGhlIGRpcmVjdG9yeSAqL1xcbmRpZmYgLS1naXQgYS9mcy9hZnMvZHlucm9vdC5jIGIvZnMvYWZzL2R5bnJvb3QuY1xcbmluZGV4IDFkNWUzM2JjNzUwMjI0Li42ZTNjOGM2OTFiYTk3ZiAxMDA2NDRcXG4tLS0gYS9mcy9hZnMvZHlucm9vdC5jXFxuKysrIGIvZnMvYWZzL2R5bnJvb3QuY1xcbkBAIC0yNzgsNyArMjc4LDcgQEAgc3RhdGljIHN0cnVjdCBkZW50cnkgKmFmc19sb29rdXBfYXRjZWxsKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnlcXG4gfVxcbiBcXG4gLypcXG4tICogVHJhbnNjcmliZSB0aGUgY2VsbCBkYXRhYmFzZSBpbnRvIHJlYWRkaXIgY29udGVudCB1bmRlciB0aGUgUkNVIHJlYWQgbG9jay5cXG4rICogVHJhbnNjcmliZSB0aGUgY2VsbCBkYXRhYmFzZSBpbnRvIHJlYWRkaXIgY29udGVudCB1bmRlciBuZXQtXFx1MDAzZWNlbGxzX2xvY2suXFxuICAqIEVhY2ggY2VsbCBwcm9kdWNlcyB0d28gZW50cmllcywgb25lIHByZWZpeGVkIHdpdGggYSBkb3QgYW5kIG9uZSBub3QuXFxuICAqL1xcbiBzdGF0aWMgaW50IGFmc19keW5yb290X3JlYWRkaXJfY2VsbHMoc3RydWN0IGFmc19uZXQgKm5ldCwgc3RydWN0IGRpcl9jb250ZXh0ICpjdHgpXFxuZGlmZiAtLWdpdCBhL2ZzL2Fmcy9mc19vcGVyYXRpb24uYyBiL2ZzL2Fmcy9mc19vcGVyYXRpb24uY1xcbmluZGV4IGMwZGJiYzZkMzcxNmUwLi4yMDgwMWIyOTUyMWQxZSAxMDA2NDRcXG4tLS0gYS9mcy9hZnMvZnNfb3BlcmF0aW9uLmNcXG4rKysgYi9mcy9hZnMvZnNfb3BlcmF0aW9uLmNcXG5AQCAtMzQ4LDcgKzM0OCw3IEBAIGludCBhZnNfcHV0X29wZXJhdGlvbihzdHJ1Y3QgYWZzX29wZXJhdGlvbiAqb3ApXFxuIFxcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBvcC1cXHUwMDNlbnJfZmlsZXMgLSAyOyBpKyspXFxuIFxcdFxcdFxcdGlmIChvcC1cXHUwMDNlbW9yZV9maWxlc1tpXS5wdXRfdm5vZGUpXFxuIFxcdFxcdFxcdFxcdGlwdXQoXFx1MDAyNm9wLVxcdTAwM2Vtb3JlX2ZpbGVzW2ldLnZub2RlLVxcdTAwM2VuZXRmcy5pbm9kZSk7XFxuLVxcdFxcdGtmcmVlKG9wLVxcdTAwM2Vtb3JlX2ZpbGVzKTtcXG4rXFx0XFx0a3ZmcmVlKG9wLVxcdTAwM2Vtb3JlX2ZpbGVzKTtcXG4gXFx0fVxcbiBcXG4gXFx0aWYgKG9wLVxcdTAwM2Vlc3RhdGUpIHtcXG5kaWZmIC0tZ2l0IGEvZnMvYWZzL2lub2RlLmMgYi9mcy9hZnMvaW5vZGUuY1xcbmluZGV4IDNmNDg0NTg2OTRiYWE1Li4xNGYzOWE5YmVhNmNmZSAxMDA2NDRcXG4tLS0gYS9mcy9hZnMvaW5vZGUuY1xcbisrKyBiL2ZzL2Fmcy9pbm9kZS5jXFxuQEAgLTUyLDkgKzUyLDkgQEAgc3RhdGljIG5vaW5saW5lIHZvaWQgZHVtcF92bm9kZShzdHJ1Y3QgYWZzX3Zub2RlICp2bm9kZSwgc3RydWN0IGFmc192bm9kZSAqcGFyZW5cXG4gLypcXG4gICogU2V0IHBhcmFtZXRlcnMgZm9yIHRoZSBuZXRmcyBsaWJyYXJ5XFxuICAqL1xcbi1zdGF0aWMgdm9pZCBhZnNfc2V0X25ldGZzX2NvbnRleHQoc3RydWN0IGFmc192bm9kZSAqdm5vZGUpXFxuK3N0YXRpYyB2b2lkIGFmc19zZXRfbmV0ZnNfY29udGV4dChzdHJ1Y3QgYWZzX3Zub2RlICp2bm9kZSwgYm9vbCBpc19maWxlKVxcbiB7XFxuLVxcdG5ldGZzX2lub2RlX2luaXQoXFx1MDAyNnZub2RlLVxcdTAwM2VuZXRmcywgXFx1MDAyNmFmc19yZXFfb3BzLCB0cnVlKTtcXG4rXFx0bmV0ZnNfaW5vZGVfaW5pdChcXHUwMDI2dm5vZGUtXFx1MDAzZW5ldGZzLCBcXHUwMDI2YWZzX3JlcV9vcHMsIGlzX2ZpbGUpO1xcbiB9XFxuIFxcbiAvKlxcbkBAIC05Myw2ICs5MywxMCBAQCBzdGF0aWMgaW50IGFmc19pbm9kZV9pbml0X2Zyb21fc3RhdHVzKHN0cnVjdCBhZnNfb3BlcmF0aW9uICpvcCxcXG4gXFx0aW5vZGUtXFx1MDAzZWlfZ2lkID0gbWFrZV9rZ2lkKFxcdTAwMjZpbml0X3VzZXJfbnMsIHN0YXR1cy1cXHUwMDNlZ3JvdXApO1xcbiBcXHRzZXRfbmxpbmsoXFx1MDAyNnZub2RlLVxcdTAwM2VuZXRmcy5pbm9kZSwgc3RhdHVzLVxcdTAwM2VubGluayk7XFxuIFxcbitcXHRpX3NpemVfd3JpdGUoaW5vZGUsIHN0YXR1cy1cXHUwMDNlc2l6ZSk7XFxuK1xcdGlub2RlX3NldF9ieXRlcyhpbm9kZSwgc3RhdHVzLVxcdTAwM2VzaXplKTtcXG4rXFx0YWZzX3NldF9uZXRmc19jb250ZXh0KHZub2RlLCBzdGF0dXMtXFx1MDAzZXR5cGUgPT0gQUZTX0ZUWVBFX0ZJTEUpO1xcbitcXG4gXFx0c3dpdGNoIChzdGF0dXMtXFx1MDAzZXR5cGUpIHtcXG4gXFx0Y2FzZSBBRlNfRlRZUEVfRklMRTpcXG4gXFx0XFx0aW5vZGUtXFx1MDAzZWlfbW9kZVxcdD0gU19JRlJFRyB8IChzdGF0dXMtXFx1MDAzZW1vZGUgXFx1MDAyNiBTX0lBTExVR08pO1xcbkBAIC0xMjYsNyArMTMwLDYgQEAgc3RhdGljIGludCBhZnNfaW5vZGVfaW5pdF9mcm9tX3N0YXR1cyhzdHJ1Y3QgYWZzX29wZXJhdGlvbiAqb3AsXFxuIFxcdFxcdH1cXG4gXFx0XFx0aW5vZGUtXFx1MDAzZWlfbWFwcGluZy1cXHUwMDNlYV9vcHNcXHQ9IFxcdTAwMjZhZnNfc3ltbGlua19hb3BzO1xcbiBcXHRcXHRpbm9kZV9ub2hpZ2htZW0oaW5vZGUpO1xcbi1cXHRcXHRtYXBwaW5nX3NldF9yZWxlYXNlX2Fsd2F5cyhpbm9kZS1cXHUwMDNlaV9tYXBwaW5nKTtcXG4gXFx0XFx0YnJlYWs7XFxuIFxcdGRlZmF1bHQ6XFxuIFxcdFxcdGR1bXBfdm5vZGUodm5vZGUsIG9wLVxcdTAwM2VmaWxlWzBdLnZub2RlICE9IHZub2RlID8gb3AtXFx1MDAzZWZpbGVbMF0udm5vZGUgOiBOVUxMKTtcXG5AQCAtMTM0LDEwICsxMzcsNiBAQCBzdGF0aWMgaW50IGFmc19pbm9kZV9pbml0X2Zyb21fc3RhdHVzKHN0cnVjdCBhZnNfb3BlcmF0aW9uICpvcCxcXG4gXFx0XFx0cmV0dXJuIGFmc19wcm90b2NvbF9lcnJvcihOVUxMLCBhZnNfZXByb3RvX2ZpbGVfdHlwZSk7XFxuIFxcdH1cXG4gXFxuLVxcdGlfc2l6ZV93cml0ZShpbm9kZSwgc3RhdHVzLVxcdTAwM2VzaXplKTtcXG4tXFx0aW5vZGVfc2V0X2J5dGVzKGlub2RlLCBzdGF0dXMtXFx1MDAzZXNpemUpO1xcbi1cXHRhZnNfc2V0X25ldGZzX2NvbnRleHQodm5vZGUpO1xcbi1cXG4gXFx0dm5vZGUtXFx1MDAzZWludmFsaWRfYmVmb3JlXFx0PSBzdGF0dXMtXFx1MDAzZWRhdGFfdmVyc2lvbjtcXG4gXFx0dHJhY2VfYWZzX3NldF9kdih2bm9kZSwgc3RhdHVzLVxcdTAwM2VkYXRhX3ZlcnNpb24pO1xcbiBcXHRpbm9kZV9zZXRfaXZlcnNpb25fcmF3KFxcdTAwMjZ2bm9kZS1cXHUwMDNlbmV0ZnMuaW5vZGUsIHN0YXR1cy1cXHUwMDNlZGF0YV92ZXJzaW9uKTtcXG5AQCAtNTY2LDcgKzU2NSw2IEBAIHN0cnVjdCBpbm9kZSAqYWZzX3Jvb3RfaWdldChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzdHJ1Y3Qga2V5ICprZXkpXFxuIFxcbiBcXHR2bm9kZSA9IEFGU19GU19JKGlub2RlKTtcXG4gXFx0dm5vZGUtXFx1MDAzZWNiX3ZfY2hlY2sgPSBhdG9taWNfcmVhZChcXHUwMDI2YXMtXFx1MDAzZXZvbHVtZS1cXHUwMDNlY2Jfdl9icmVhayk7XFxuLVxcdGFmc19zZXRfbmV0ZnNfY29udGV4dCh2bm9kZSk7XFxuIFxcbiBcXHRvcCA9IGFmc19hbGxvY19vcGVyYXRpb24oa2V5LCBhcy1cXHUwMDNldm9sdW1lKTtcXG4gXFx0aWYgKElTX0VSUihvcCkpIHtcXG5AQCAtNjgyLDYgKzY4MCw3IEBAIHZvaWQgYWZzX2V2aWN0X2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuIFxcdFxcdGlub2RlLVxcdTAwM2VpX21hcHBpbmctXFx1MDAzZWFfb3BzLVxcdTAwM2V3cml0ZXBhZ2VzKGlub2RlLVxcdTAwM2VpX21hcHBpbmcsIFxcdTAwMjZ3YmMpO1xcbiBcXHR9XFxuIFxcbitcXHRmbHVzaF9kZWxheWVkX3dvcmsoXFx1MDAyNnZub2RlLVxcdTAwM2Vsb2NrX3dvcmspO1xcbiBcXHRuZXRmc193YWl0X2Zvcl9vdXRzdGFuZGluZ19pbyhpbm9kZSk7XFxuIFxcdHRydW5jYXRlX2lub2RlX3BhZ2VzX2ZpbmFsKFxcdTAwMjZpbm9kZS1cXHUwMDNlaV9kYXRhKTtcXG4gXFx0bmV0ZnNfZnJlZV9mb2xpb3FfYnVmZmVyKHZub2RlLVxcdTAwM2VkaXJlY3RvcnkpO1xcbmRpZmYgLS1naXQgYS9mcy9hZnMvaW50ZXJuYWwuaCBiL2ZzL2Fmcy9pbnRlcm5hbC5oXFxuaW5kZXggMGI3MmE4NTY2Mjk5OTIuLjYwMWYwMWU1YzE1ZmNjIDEwMDY0NFxcbi0tLSBhL2ZzL2Fmcy9pbnRlcm5hbC5oXFxuKysrIGIvZnMvYWZzL2ludGVybmFsLmhcXG5AQCAtMzg4LDYgKzM4OCw3IEBAIHN0cnVjdCBhZnNfY2VsbCB7XFxuICNkZWZpbmUgQUZTX0NFTExfRkxfTk9fR0NcXHQwXFx0XFx0LyogVGhlIGNlbGwgd2FzIGFkZGVkIG1hbnVhbGx5LCBkb24ndCBhdXRvLWdjICovXFxuICNkZWZpbmUgQUZTX0NFTExfRkxfRE9fTE9PS1VQXFx0MVxcdFxcdC8qIEROUyBsb29rdXAgcmVxdWVzdGVkICovXFxuICNkZWZpbmUgQUZTX0NFTExfRkxfQ0hFQ0tfQUxJQVNcXHQyXFx0XFx0LyogTmVlZCB0byBjaGVjayBmb3IgYWxpYXNlcyAqL1xcbisjZGVmaW5lIEFGU19DRUxMX0ZMX0hBVkVfSU5PXFx0M1xcdFxcdC8qIEhhdmUgZHlucm9vdF9pbm8gKi9cXG4gXFx0ZW51bSBhZnNfY2VsbF9zdGF0ZVxcdHN0YXRlO1xcbiBcXHRzaG9ydFxcdFxcdFxcdGVycm9yO1xcbiBcXHRlbnVtIGRuc19yZWNvcmRfc291cmNlXFx0ZG5zX3NvdXJjZTo4O1xcdC8qIExhdGVzdCBzb3VyY2Ugb2YgZGF0YSBmcm9tIGxvb2t1cCAqL1xcbkBAIC03NTAsOCArNzUxLDYgQEAgc3RhdGljIGlubGluZSB2b2lkIGFmc192bm9kZV9zZXRfY2FjaGUoc3RydWN0IGFmc192bm9kZSAqdm5vZGUsXFxuIHtcXG4gI2lmZGVmIENPTkZJR19BRlNfRlNDQUNIRVxcbiBcXHR2bm9kZS1cXHUwMDNlbmV0ZnMuY2FjaGUgPSBjb29raWU7XFxuLVxcdGlmIChjb29raWUpXFxuLVxcdFxcdG1hcHBpbmdfc2V0X3JlbGVhc2VfYWx3YXlzKHZub2RlLVxcdTAwM2VuZXRmcy5pbm9kZS5pX21hcHBpbmcpO1xcbiAjZW5kaWZcXG4gfVxcbiBcXG5kaWZmIC0tZ2l0IGEvZnMvYWZzL3N1cGVyLmMgYi9mcy9hZnMvc3VwZXIuY1xcbmluZGV4IDk0MmYzZTk4MDBkN2RjLi44MmJiNzEzODI1YTBkNSAxMDA2NDRcXG4tLS0gYS9mcy9hZnMvc3VwZXIuY1xcbisrKyBiL2ZzL2Fmcy9zdXBlci5jXFxuQEAgLTU4Nyw3ICs1ODcsOCBAQCBzdGF0aWMgaW50IGFmc19nZXRfdHJlZShzdHJ1Y3QgZnNfY29udGV4dCAqZmMpXFxuIFxcdH1cXG4gXFxuIFxcdGZjLVxcdTAwM2Vyb290ID0gZGdldChzYi1cXHUwMDNlc19yb290KTtcXG4tXFx0dHJhY2VfYWZzX2dldF90cmVlKGFzLVxcdTAwM2VjZWxsLCBhcy1cXHUwMDNldm9sdW1lKTtcXG4rXFx0aWYgKCFjdHgtXFx1MDAzZWR5bl9yb290KVxcbitcXHRcXHR0cmFjZV9hZnNfZ2V0X3RyZWUoYXMtXFx1MDAzZWNlbGwsIGFzLVxcdTAwM2V2b2x1bWUpO1xcbiBcXHRfbGVhdmUoXFxcIiA9IDAgWyVwXVxcXCIsIHNiKTtcXG4gXFx0cmV0dXJuIDA7XFxuIFxcbkBAIC02NTksNyArNjYwLDYgQEAgc3RhdGljIHZvaWQgYWZzX2lfaW5pdF9vbmNlKHZvaWQgKl92bm9kZSlcXG4gXFx0SU5JVF9MSVNUX0hFQUQoXFx1MDAyNnZub2RlLVxcdTAwM2V3Yl9rZXlzKTtcXG4gXFx0SU5JVF9MSVNUX0hFQUQoXFx1MDAyNnZub2RlLVxcdTAwM2VwZW5kaW5nX2xvY2tzKTtcXG4gXFx0SU5JVF9MSVNUX0hFQUQoXFx1MDAyNnZub2RlLVxcdTAwM2VncmFudGVkX2xvY2tzKTtcXG4tXFx0SU5JVF9ERUxBWUVEX1dPUksoXFx1MDAyNnZub2RlLVxcdTAwM2Vsb2NrX3dvcmssIGFmc19sb2NrX3dvcmspO1xcbiBcXHRJTklUX0xJU1RfSEVBRChcXHUwMDI2dm5vZGUtXFx1MDAzZWNiX21tYXBfbGluayk7XFxuIFxcdHNlcWxvY2tfaW5pdChcXHUwMDI2dm5vZGUtXFx1MDAzZWNiX2xvY2spO1xcbiB9XFxuQEAgLTY5Myw2ICs2OTMsNyBAQCBzdGF0aWMgc3RydWN0IGlub2RlICphZnNfYWxsb2NfaW5vZGUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcXG4gXFxuIFxcdGluaXRfcndzZW0oXFx1MDAyNnZub2RlLVxcdTAwM2VybWRpcl9sb2NrKTtcXG4gXFx0SU5JVF9XT1JLKFxcdTAwMjZ2bm9kZS1cXHUwMDNlY2Jfd29yaywgYWZzX2ludmFsaWRhdGVfbW1hcF93b3JrKTtcXG4rXFx0SU5JVF9ERUxBWUVEX1dPUksoXFx1MDAyNnZub2RlLVxcdTAwM2Vsb2NrX3dvcmssIGFmc19sb2NrX3dvcmspO1xcbiBcXG4gXFx0X2xlYXZlKFxcXCIgPSAlcFxcXCIsIFxcdTAwMjZ2bm9kZS1cXHUwMDNlbmV0ZnMuaW5vZGUpO1xcbiBcXHRyZXR1cm4gXFx1MDAyNnZub2RlLVxcdTAwM2VuZXRmcy5pbm9kZTtcXG5kaWZmIC0tZ2l0IGEvZnMvYWZzL3ZsX2xpc3QuYyBiL2ZzL2Fmcy92bF9saXN0LmNcXG5pbmRleCAzZTQ5NjY5MTVlYTRjYy4uYzFkYWM1ZGJlZDBkZDAgMTAwNjQ0XFxuLS0tIGEvZnMvYWZzL3ZsX2xpc3QuY1xcbisrKyBiL2ZzL2Fmcy92bF9saXN0LmNcXG5AQCAtOTIsNyArOTIsNyBAQCBzdGF0aWMgc3RydWN0IGFmc19hZGRyX2xpc3QgKmFmc19leHRyYWN0X3ZsX2FkZHJzKHN0cnVjdCBhZnNfbmV0ICpuZXQsXFxuIHtcXG4gXFx0c3RydWN0IGFmc19hZGRyX2xpc3QgKmFsaXN0O1xcbiBcXHRjb25zdCB1OCAqYiA9ICpfYjtcXG4tXFx0aW50IHJldCA9IC1FSU5WQUw7XFxuK1xcdGludCByZXQ7XFxuIFxcbiBcXHRhbGlzdCA9IGFmc19hbGxvY19hZGRybGlzdChucl9hZGRycyk7XFxuIFxcdGlmICghYWxpc3QpXFxuQEAgLTExMCw2ICsxMTAsNyBAQCBzdGF0aWMgc3RydWN0IGFmc19hZGRyX2xpc3QgKmFmc19leHRyYWN0X3ZsX2FkZHJzKHN0cnVjdCBhZnNfbmV0ICpuZXQsXFxuIFxcdFxcdGNhc2UgRE5TX0FERFJFU1NfSVNfSVBWNDpcXG4gXFx0XFx0XFx0aWYgKGVuZCAtIGIgXFx1MDAzYyA0KSB7XFxuIFxcdFxcdFxcdFxcdF9sZWF2ZShcXFwiID0gLUVJTlZBTCBbc2hvcnQgaW5ldF1cXFwiKTtcXG4rXFx0XFx0XFx0XFx0cmV0ID0gLUVJTlZBTDtcXG4gXFx0XFx0XFx0XFx0Z290byBlcnJvcjtcXG4gXFx0XFx0XFx0fVxcbiBcXHRcXHRcXHRtZW1jcHkoeCwgYiwgNCk7XFxuQEAgLTEyMiw2ICsxMjMsNyBAQCBzdGF0aWMgc3RydWN0IGFmc19hZGRyX2xpc3QgKmFmc19leHRyYWN0X3ZsX2FkZHJzKHN0cnVjdCBhZnNfbmV0ICpuZXQsXFxuIFxcdFxcdGNhc2UgRE5TX0FERFJFU1NfSVNfSVBWNjpcXG4gXFx0XFx0XFx0aWYgKGVuZCAtIGIgXFx1MDAzYyAxNikge1xcbiBcXHRcXHRcXHRcXHRfbGVhdmUoXFxcIiA9IC1FSU5WQUwgW3Nob3J0IGluZXQ2XVxcXCIpO1xcbitcXHRcXHRcXHRcXHRyZXQgPSAtRUlOVkFMO1xcbiBcXHRcXHRcXHRcXHRnb3RvIGVycm9yO1xcbiBcXHRcXHRcXHR9XFxuIFxcdFxcdFxcdG1lbWNweSh4LCBiLCAxNik7XFxuQEAgLTE5OCw2ICsyMDAsOCBAQCBzdHJ1Y3QgYWZzX3Zsc2VydmVyX2xpc3QgKmFmc19leHRyYWN0X3Zsc2VydmVyX2xpc3Qoc3RydWN0IGFmc19jZWxsICpjZWxsLFxcbiBcXG4gXFx0YiArPSBzaXplb2YoKmhkcik7XFxuIFxcdHdoaWxlIChlbmQgLSBiIFxcdTAwM2U9IHNpemVvZihicykpIHtcXG4rXFx0XFx0aW50IG5sZW47XFxuK1xcbiBcXHRcXHRicy5uYW1lX2xlblxcdD0gYWZzX2V4dHJhY3RfbGUxNihcXHUwMDI2Yik7XFxuIFxcdFxcdGJzLnByaW9yaXR5XFx0PSBhZnNfZXh0cmFjdF9sZTE2KFxcdTAwMjZiKTtcXG4gXFx0XFx0YnMud2VpZ2h0XFx0PSBhZnNfZXh0cmFjdF9sZTE2KFxcdTAwMjZiKTtcXG5AQCAtMjA3LDEwICsyMTEsMTIgQEAgc3RydWN0IGFmc192bHNlcnZlcl9saXN0ICphZnNfZXh0cmFjdF92bHNlcnZlcl9saXN0KHN0cnVjdCBhZnNfY2VsbCAqY2VsbCxcXG4gXFx0XFx0YnMucHJvdG9jb2xcXHQ9ICpiKys7XFxuIFxcdFxcdGJzLm5yX2FkZHJzXFx0PSAqYisrO1xcbiBcXG4rXFx0XFx0bmxlbiA9IG1pbjMoYnMubmFtZV9sZW4sIGVuZCAtIGIsIDI1NSk7XFxuK1xcbiBcXHRcXHRfZGVidWcoXFxcImV4dHJhY3QgJXUgJXUgJXUgJXUgJXUgJXUgJSouKnNcXFwiLFxcbiBcXHRcXHQgICAgICAgYnMubmFtZV9sZW4sIGJzLnByaW9yaXR5LCBicy53ZWlnaHQsXFxuIFxcdFxcdCAgICAgICBicy5wb3J0LCBicy5wcm90b2NvbCwgYnMubnJfYWRkcnMsXFxuLVxcdFxcdCAgICAgICBicy5uYW1lX2xlbiwgYnMubmFtZV9sZW4sIGIpO1xcbitcXHRcXHQgICAgICAgYnMubmFtZV9sZW4sIG5sZW4sIGIpO1xcbiBcXG4gXFx0XFx0aWYgKGVuZCAtIGIgXFx1MDAzYyBicy5uYW1lX2xlbilcXG4gXFx0XFx0XFx0YnJlYWs7XFxuQEAgLTI4Nyw4ICsyOTMsMjAgQEAgc3RydWN0IGFmc192bHNlcnZlcl9saXN0ICphZnNfZXh0cmFjdF92bHNlcnZlcl9saXN0KHN0cnVjdCBhZnNfY2VsbCAqY2VsbCxcXG4gXFx0XFx0XFx0YWZzX3B1dF9hZGRybGlzdChvbGQsIGFmc19hbGlzdF90cmFjZV9wdXRfdmxzZXJ2ZXJfb2xkKTtcXG4gXFx0XFx0fVxcbiBcXG4rXFx0XFx0LyogQ2hlY2sgZm9yIGR1cGxpY2F0ZXMgaW4gdGhlIHNlcnZlciBsaXN0ICovXFxuK1xcdFxcdGZvciAoaiA9IDA7IGogXFx1MDAzYyB2bGxpc3QtXFx1MDAzZW5yX3NlcnZlcnM7IGorKykge1xcbitcXHRcXHRcXHRzdHJ1Y3QgYWZzX3Zsc2VydmVyICpzID0gdmxsaXN0LVxcdTAwM2VzZXJ2ZXJzW2pdLnNlcnZlcjtcXG4gXFxuLVxcdFxcdC8qIFRPRE86IE1pZ2h0IHdhbnQgdG8gY2hlY2sgZm9yIGR1cGxpY2F0ZXMgKi9cXG4rXFx0XFx0XFx0aWYgKHMtXFx1MDAzZW5hbWVfbGVuID09IHNlcnZlci1cXHUwMDNlbmFtZV9sZW4gXFx1MDAyNlxcdTAwMjZcXG4rXFx0XFx0XFx0ICAgIHMtXFx1MDAzZXBvcnQgPT0gc2VydmVyLVxcdTAwM2Vwb3J0IFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdFxcdCAgICBzdHJuY2FzZWNtcChzLVxcdTAwM2VuYW1lLCBzZXJ2ZXItXFx1MDAzZW5hbWUsIHNlcnZlci1cXHUwMDNlbmFtZV9sZW4pID09IDApIHtcXG4rXFx0XFx0XFx0XFx0YWZzX3B1dF92bHNlcnZlcihjZWxsLVxcdTAwM2VuZXQsIHNlcnZlcik7XFxuK1xcdFxcdFxcdFxcdHNlcnZlciA9IE5VTEw7XFxuK1xcdFxcdFxcdFxcdGJyZWFrO1xcbitcXHRcXHRcXHR9XFxuK1xcdFxcdH1cXG4rXFx0XFx0aWYgKCFzZXJ2ZXIpXFxuK1xcdFxcdFxcdGNvbnRpbnVlO1xcbiBcXG4gXFx0XFx0LyogSW5zZXJ0aW9uLXNvcnQgYnkgcHJpb3JpdHkgYW5kIHdlaWdodCAqL1xcbiBcXHRcXHRmb3IgKGogPSAwOyBqIFxcdTAwM2MgdmxsaXN0LVxcdTAwM2Vucl9zZXJ2ZXJzOyBqKyspIHtcXG5kaWZmIC0tZ2l0IGEvZnMvYWZzL3ZvbHVtZS5jIGIvZnMvYWZzL3ZvbHVtZS5jXFxuaW5kZXggOWFlNWM4YWQyZTA0YjQuLjRmNzlkMjVlYzM3ZjRiIDEwMDY0NFxcbi0tLSBhL2ZzL2Fmcy92b2x1bWUuY1xcbisrKyBiL2ZzL2Fmcy92b2x1bWUuY1xcbkBAIC00MCw3ICs0MCw3IEBAIHN0YXRpYyBzdHJ1Y3QgYWZzX3ZvbHVtZSAqYWZzX2luc2VydF92b2x1bWVfaW50b19jZWxsKHN0cnVjdCBhZnNfY2VsbCAqY2VsbCxcXG4gXFx0XFx0XFx0XFx0Z290byBmb3VuZDtcXG4gXFx0XFx0XFx0fVxcbiBcXG4tXFx0XFx0XFx0c2V0X2JpdChBRlNfVk9MVU1FX1JNX1RSRUUsIFxcdTAwMjZ2b2x1bWUtXFx1MDAzZWZsYWdzKTtcXG4rXFx0XFx0XFx0c2V0X2JpdChBRlNfVk9MVU1FX1JNX1RSRUUsIFxcdTAwMjZwLVxcdTAwM2VmbGFncyk7XFxuIFxcdFxcdFxcdHJiX3JlcGxhY2Vfbm9kZV9yY3UoXFx1MDAyNnAtXFx1MDAzZWNlbGxfbm9kZSwgXFx1MDAyNnZvbHVtZS1cXHUwMDNlY2VsbF9ub2RlLCBcXHUwMDI2Y2VsbC1cXHUwMDNldm9sdW1lcyk7XFxuIFxcdFxcdH1cXG4gXFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yMlQwOToyNzoxMS4zODkxNjg3NzlaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUwOTAzOTU3MTI1MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJBRlNfRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJhZnNfYnJlYWtfY2FsbGJhY2tzXCIsXG4gICAgXCJhZnNfbG9va3VwX2NlbGxcIixcbiAgICBcImFmc19yZWFkZGlyXCIsXG4gICAgXCJhZnNfbG9va3VwXCIsXG4gICAgXCJhZnNfZF9yZXZhbGlkYXRlXCIsXG4gICAgXCJhZnNfZHlucm9vdF9yZWFkZGlyXCIsXG4gICAgXCJhZnNfcHV0X29wZXJhdGlvblwiLFxuICAgIFwiYWZzX2lnZXRcIixcbiAgICBcImFmc19leHRyYWN0X3Zsc2VydmVyX2xpc3RcIixcbiAgICBcImFmc19jcmVhdGVfdm9sdW1lXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBBRlMgZmlsZXN5c3RlbSwgbW9kaWZ5aW5nIGNlbGwgYWxsb2NhdGlvbi9kZXN0cnVjdGlvbiwgY2FsbGJhY2sgaGFuZGxpbmcsIGRpcmVjdG9yeSBpdGVyYXRpb24gYW5kIGxvb2t1cCwgZHluYW1pYyByb290IHJlYWRpbmcsIG9wZXJhdGlvbiBtYW5hZ2VtZW50LCBpbm9kZSBpbml0aWFsaXphdGlvbi9ldmljdGlvbiwgVkwgc2VydmVyIGxpc3QgZXh0cmFjdGlvbiwgYW5kIHZvbHVtZSBpbnNlcnRpb24uIFRoZXNlIGFyZSByZWFjaGFibGUgY29yZSBBRlMgbG9naWMgcGF0aHMgdGhhdCBjYW4gYmUgZnV6emVkIHZpYSBmaWxlc3lzdGVtIG9wZXJhdGlvbnMgYW5kIG5ldHdvcmsgaW50ZXJhY3Rpb25zLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG5ldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0XG4gICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksXG4gICBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGUyMjcyNjg5NGU2MGM3YTk4NDlkZTllZTJlOGU0YmUwYTZjYTQwMThcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEp1biAyMiAwOToyNzowOCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2ZzL2Fmcy9jYWxsYmFjay5jIGIvZnMvYWZzL2NhbGxiYWNrLmNcbmluZGV4IDg5NGQyYmFkNmI2Y2VjLi42MTM1NDAwM2MwMDZjZiAxMDA2NDRcbi0tLSBhL2ZzL2Fmcy9jYWxsYmFjay5jXG4rKysgYi9mcy9hZnMvY2FsbGJhY2suY1xuQEAgLTExMywxNiArMTEzLDEyIEBAIHN0YXRpYyBzdHJ1Y3QgYWZzX3ZvbHVtZSAqYWZzX2xvb2t1cF92b2x1bWVfcmN1KHN0cnVjdCBhZnNfY2VsbCAqY2VsbCxcbiB7XG4gXHRzdHJ1Y3QgYWZzX3ZvbHVtZSAqdm9sdW1lID0gTlVMTDtcbiBcdHN0cnVjdCByYl9ub2RlICpwO1xuLVx0aW50IHNlcSA9IDE7XG4gXG4tXHRmb3IgKDs7KSB7XG4rXHRzY29wZWRfc2VxbG9ja19yZWFkKFx1MDAyNmNlbGwtXHUwMDNldm9sdW1lX2xvY2ssIHNzX2xvY2spIHtcbiBcdFx0LyogVW5mb3J0dW5hdGVseSwgcmJ0cmVlIHdhbGtpbmcgZG9lc24ndCBnaXZlIHJlbGlhYmxlIHJlc3VsdHNcbiBcdFx0ICogdW5kZXIganVzdCB0aGUgUkNVIHJlYWQgbG9jaywgc28gd2UgaGF2ZSB0byBjaGVjayBmb3JcbiBcdFx0ICogY2hhbmdlcy5cbiBcdFx0ICovXG4tXHRcdHNlcSsrOyAvKiAyIG9uIHRoZSAxc3QvbG9ja2xlc3MgcGF0aCwgb3RoZXJ3aXNlIG9kZCAqL1xuLVx0XHRyZWFkX3NlcWJlZ2luX29yX2xvY2soXHUwMDI2Y2VsbC1cdTAwM2V2b2x1bWVfbG9jaywgXHUwMDI2c2VxKTtcbi1cbiBcdFx0cCA9IHJjdV9kZXJlZmVyZW5jZV9yYXcoY2VsbC1cdTAwM2V2b2x1bWVzLnJiX25vZGUpO1xuIFx0XHR3aGlsZSAocCkge1xuIFx0XHRcdHZvbHVtZSA9IHJiX2VudHJ5KHAsIHN0cnVjdCBhZnNfdm9sdW1lLCBjZWxsX25vZGUpO1xuQEAgLTEzOCwxMiArMTM0LDkgQEAgc3RhdGljIHN0cnVjdCBhZnNfdm9sdW1lICphZnNfbG9va3VwX3ZvbHVtZV9yY3Uoc3RydWN0IGFmc19jZWxsICpjZWxsLFxuIFxuIFx0XHRpZiAodm9sdW1lIFx1MDAyNlx1MDAyNiBhZnNfdHJ5X2dldF92b2x1bWUodm9sdW1lLCBhZnNfdm9sdW1lX3RyYWNlX2dldF9jYWxsYmFjaykpXG4gXHRcdFx0YnJlYWs7XG4tXHRcdGlmICghbmVlZF9zZXFyZXRyeShcdTAwMjZjZWxsLVx1MDAzZXZvbHVtZV9sb2NrLCBzZXEpKVxuLVx0XHRcdGJyZWFrO1xuLVx0XHRzZXEgfD0gMTsgLyogV2FudCBhIGxvY2sgbmV4dCB0aW1lICovXG4rXHRcdHZvbHVtZSA9IE5VTEw7XG4gXHR9XG4gXG4tXHRkb25lX3NlcXJldHJ5KFx1MDAyNmNlbGwtXHUwMDNldm9sdW1lX2xvY2ssIHNlcSk7XG4gXHRyZXR1cm4gdm9sdW1lO1xuIH1cbiBcbkBAIC0yMjEsNyArMjE0LDExIEBAIHN0YXRpYyB2b2lkIGFmc19icmVha19zb21lX2NhbGxiYWNrcyhzdHJ1Y3QgYWZzX3NlcnZlciAqc2VydmVyLFxuIFxuIFx0cmN1X3JlYWRfbG9jaygpO1xuIFx0dm9sdW1lID0gYWZzX2xvb2t1cF92b2x1bWVfcmN1KHNlcnZlci1cdTAwM2VjZWxsLCB2aWQpO1xuLVx0aWYgKGNiYi1cdTAwM2VmaWQudm5vZGUgPT0gMCBcdTAwMjZcdTAwMjYgY2JiLVx1MDAzZWZpZC51bmlxdWUgPT0gMCkge1xuK1x0aWYgKCF2b2x1bWUpIHtcbitcdFx0LyogSWdub3JlIGJyZWFrcyBvbiB1bmtub3duIHZvbHVtZXMuICovXG4rXHRcdHJjdV9yZWFkX3VubG9jaygpO1xuK1x0XHQqX2NvdW50ID0gMDtcbitcdH0gZWxzZSBpZiAoY2JiLVx1MDAzZWZpZC52bm9kZSA9PSAwIFx1MDAyNlx1MDAyNiBjYmItXHUwMDNlZmlkLnVuaXF1ZSA9PSAwKSB7XG4gXHRcdGFmc19icmVha192b2x1bWVfY2FsbGJhY2soc2VydmVyLCB2b2x1bWUpO1xuIFx0XHQqX2NvdW50IC09IDE7XG4gXHRcdGlmICgqX2NvdW50KVxuZGlmZiAtLWdpdCBhL2ZzL2Fmcy9jZWxsLmMgYi9mcy9hZnMvY2VsbC5jXG5pbmRleCA5NzM4Njg0ZGJkZDI2OC4uNDdhMjY0NTc2OGQ3OWUgMTAwNjQ0XG4tLS0gYS9mcy9hZnMvY2VsbC5jXG4rKysgYi9mcy9hZnMvY2VsbC5jXG5AQCAtMjA2LDExICsyMDYsNiBAQCBzdGF0aWMgc3RydWN0IGFmc19jZWxsICphZnNfYWxsb2NfY2VsbChzdHJ1Y3QgYWZzX25ldCAqbmV0LFxuIFx0Y2VsbC1cdTAwM2VkbnNfc3RhdHVzID0gdmxsaXN0LVx1MDAzZXN0YXR1cztcbiBcdHNtcF9zdG9yZV9yZWxlYXNlKFx1MDAyNmNlbGwtXHUwMDNlZG5zX2xvb2t1cF9jb3VudCwgMSk7IC8qIHZzIHNvdXJjZS9zdGF0dXMgKi9cbiBcdGF0b21pY19pbmMoXHUwMDI2bmV0LVx1MDAzZWNlbGxzX291dHN0YW5kaW5nKTtcbi1cdHJldCA9IGlkcl9hbGxvY19jeWNsaWMoXHUwMDI2bmV0LVx1MDAzZWNlbGxzX2R5bl9pbm8sIGNlbGwsXG4tXHRcdFx0ICAgICAgIDIsIElOVF9NQVggLyAyLCBHRlBfS0VSTkVMKTtcbi1cdGlmIChyZXQgXHUwMDNjIDApXG4tXHRcdGdvdG8gZXJyb3I7XG4tXHRjZWxsLVx1MDAzZWR5bnJvb3RfaW5vID0gcmV0O1xuIFx0Y2VsbC1cdTAwM2VkZWJ1Z19pZCA9IGF0b21pY19pbmNfcmV0dXJuKFx1MDAyNmNlbGxfZGVidWdfaWQpO1xuIFxuIFx0dHJhY2VfYWZzX2NlbGwoY2VsbC1cdTAwM2VkZWJ1Z19pZCwgMSwgMCwgYWZzX2NlbGxfdHJhY2VfYWxsb2MpO1xuQEAgLTMwNCw2ICsyOTksMTMgQEAgc3RydWN0IGFmc19jZWxsICphZnNfbG9va3VwX2NlbGwoc3RydWN0IGFmc19uZXQgKm5ldCxcbiBcdFx0XHRnb3RvIGNlbGxfYWxyZWFkeV9leGlzdHM7XG4gXHR9XG4gXG4rXHRyZXQgPSBpZHJfYWxsb2NfY3ljbGljKFx1MDAyNm5ldC1cdTAwM2VjZWxsc19keW5faW5vLCBjYW5kaWRhdGUsXG4rXHRcdFx0ICAgICAgIDIsIElOVF9NQVggLyAyLCBHRlBfS0VSTkVMKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gY2FudF9hbGxvY19pbm87XG4rXHRjYW5kaWRhdGUtXHUwMDNlZHlucm9vdF9pbm8gPSByZXQ7XG4rXHRzZXRfYml0KEFGU19DRUxMX0ZMX0hBVkVfSU5PLCBcdTAwMjZjYW5kaWRhdGUtXHUwMDNlZmxhZ3MpO1xuK1xuIFx0Y2VsbCA9IGNhbmRpZGF0ZTtcbiBcdGNhbmRpZGF0ZSA9IE5VTEw7XG4gXHRhZnNfdXNlX2NlbGwoY2VsbCwgdHJhY2UpO1xuQEAgLTM3OCw2ICszODAsMTEgQEAgc3RydWN0IGFmc19jZWxsICphZnNfbG9va3VwX2NlbGwoc3RydWN0IGFmc19uZXQgKm5ldCxcbiBcdF9sZWF2ZShcIiA9ICVwIFtjZWxsXVwiLCBjZWxsKTtcbiBcdHJldHVybiBjZWxsO1xuIFxuK2NhbnRfYWxsb2NfaW5vOlxuK1x0dXBfd3JpdGUoXHUwMDI2bmV0LVx1MDAzZWNlbGxzX2xvY2spO1xuK1x0YWZzX3B1dF9jZWxsKGNhbmRpZGF0ZSwgYWZzX2NlbGxfdHJhY2VfcHV0X2NhbmRpZGF0ZSk7XG4rXHRnb3RvIGVycm9yX25vcHV0O1xuK1xuIGNlbGxfYWxyZWFkeV9leGlzdHM6XG4gXHRfZGVidWcoXCJjZWxsIGV4aXN0c1wiKTtcbiBcdGNlbGwgPSBjdXJzb3I7XG5AQCAtNTQ3LDYgKzU1NCw4IEBAIHN0YXRpYyBpbnQgYWZzX3VwZGF0ZV9jZWxsKHN0cnVjdCBhZnNfY2VsbCAqY2VsbClcbiBcdFx0cmN1X2Fzc2lnbl9wb2ludGVyKGNlbGwtXHUwMDNldmxfc2VydmVycywgdmxsaXN0KTtcbiBcdFx0Y2VsbC1cdTAwM2VkbnNfc291cmNlID0gdmxsaXN0LVx1MDAzZXNvdXJjZTtcbiBcdFx0b2xkID0gcDtcbitcdH0gZWxzZSB7XG4rXHRcdG9sZCA9IHZsbGlzdDtcbiBcdH1cbiBcdHdyaXRlX3VubG9jayhcdTAwMjZjZWxsLVx1MDAzZXZsX3NlcnZlcnNfbG9jayk7XG4gXHRhZnNfcHV0X3Zsc2VydmVybGlzdChjZWxsLVx1MDAzZW5ldCwgb2xkKTtcbkBAIC01NzcsNyArNTg2LDYgQEAgc3RhdGljIHZvaWQgYWZzX2NlbGxfZGVzdHJveShzdHJ1Y3QgcmN1X2hlYWQgKnJjdSlcbiBcdGFmc19wdXRfdmxzZXJ2ZXJsaXN0KG5ldCwgcmN1X2FjY2Vzc19wb2ludGVyKGNlbGwtXHUwMDNldmxfc2VydmVycykpO1xuIFx0YWZzX3VudXNlX2NlbGwoY2VsbC1cdTAwM2VhbGlhc19vZiwgYWZzX2NlbGxfdHJhY2VfdW51c2VfYWxpYXMpO1xuIFx0a2V5X3B1dChjZWxsLVx1MDAzZWFub255bW91c19rZXkpO1xuLVx0aWRyX3JlbW92ZShcdTAwMjZuZXQtXHUwMDNlY2VsbHNfZHluX2lubywgY2VsbC1cdTAwM2VkeW5yb290X2lubyk7XG4gXHRrZnJlZShjZWxsLVx1MDAzZW5hbWUgLSAxKTtcbiBcdGtmcmVlKGNlbGwpO1xuIFxuQEAgLTU5Miw2ICs2MDAsMTMgQEAgc3RhdGljIHZvaWQgYWZzX2Rlc3Ryb3lfY2VsbF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbiBcdGFmc19zZWVfY2VsbChjZWxsLCBhZnNfY2VsbF90cmFjZV9kZXN0cm95KTtcbiBcdHRpbWVyX2RlbGV0ZV9zeW5jKFx1MDAyNmNlbGwtXHUwMDNlbWFuYWdlbWVudF90aW1lcik7XG4gXHRjYW5jZWxfd29ya19zeW5jKFx1MDAyNmNlbGwtXHUwMDNlbWFuYWdlcik7XG4rXG4rXHRpZiAodGVzdF9iaXQoQUZTX0NFTExfRkxfSEFWRV9JTk8sIFx1MDAyNmNlbGwtXHUwMDNlZmxhZ3MpKSB7XG4rXHRcdGRvd25fd3JpdGUoXHUwMDI2Y2VsbC1cdTAwM2VuZXQtXHUwMDNlY2VsbHNfbG9jayk7XG4rXHRcdGlkcl9yZW1vdmUoXHUwMDI2Y2VsbC1cdTAwM2VuZXQtXHUwMDNlY2VsbHNfZHluX2lubywgY2VsbC1cdTAwM2VkeW5yb290X2lubyk7XG4rXHRcdHVwX3dyaXRlKFx1MDAyNmNlbGwtXHUwMDNlbmV0LVx1MDAzZWNlbGxzX2xvY2spO1xuK1x0fVxuK1xuIFx0Y2FsbF9yY3UoXHUwMDI2Y2VsbC1cdTAwM2VyY3UsIGFmc19jZWxsX2Rlc3Ryb3kpO1xuIH1cbiBcbmRpZmYgLS1naXQgYS9mcy9hZnMvY21zZXJ2aWNlLmMgYi9mcy9hZnMvY21zZXJ2aWNlLmNcbmluZGV4IDU1NDBhZTFjYWQ1OTlhLi5kYjM5NGYxMDFmYzY2YSAxMDA2NDRcbi0tLSBhL2ZzL2Fmcy9jbXNlcnZpY2UuY1xuKysrIGIvZnMvYWZzL2Ntc2VydmljZS5jXG5AQCAtMzM0LDcgKzMzNCw2IEBAIHN0YXRpYyBpbnQgYWZzX2RlbGl2ZXJfY2JfaW5pdF9jYWxsX2JhY2tfc3RhdGUzKHN0cnVjdCBhZnNfY2FsbCAqY2FsbClcbiBcdFx0cmV0ID0gYWZzX2V4dHJhY3RfZGF0YShjYWxsLCBmYWxzZSk7XG4gXHRcdHN3aXRjaCAocmV0KSB7XG4gXHRcdGNhc2UgMDpcdFx0YnJlYWs7XG4tXHRcdGNhc2UgLUVBR0FJTjpcdHJldHVybiAwO1xuIFx0XHRkZWZhdWx0Olx0cmV0dXJuIHJldDtcbiBcdFx0fVxuIFxuQEAgLTM2NCw2ICszNjMsMTEgQEAgc3RhdGljIGludCBhZnNfZGVsaXZlcl9jYl9pbml0X2NhbGxfYmFja19zdGF0ZTMoc3RydWN0IGFmc19jYWxsICpjYWxsKVxuIFx0aWYgKCFhZnNfY2hlY2tfY2FsbF9zdGF0ZShjYWxsLCBBRlNfQ0FMTF9TVl9SRVBMWUlORykpXG4gXHRcdHJldHVybiBhZnNfaW9fZXJyb3IoY2FsbCwgYWZzX2lvX2Vycm9yX2NtX3JlcGx5KTtcbiBcbitcdGlmICghY2FsbC1cdTAwM2VzZXJ2ZXIpIHtcbitcdFx0dHJhY2VfYWZzX2NtX25vX3NlcnZlcl91KGNhbGwsIGNhbGwtXHUwMDNlcmVxdWVzdCk7XG4rXHRcdHJldHVybiAwO1xuK1x0fVxuK1xuIFx0aWYgKG1lbWNtcChjYWxsLVx1MDAzZXJlcXVlc3QsIFx1MDAyNmNhbGwtXHUwMDNlc2VydmVyLVx1MDAzZV91dWlkLCBzaXplb2YoY2FsbC1cdTAwM2VzZXJ2ZXItXHUwMDNlX3V1aWQpKSAhPSAwKSB7XG4gXHRcdHByX25vdGljZShcIkNhbGxiYWNrIFVVSUQgZG9lcyBub3QgbWF0Y2ggZmlsZXNlcnZlciBVVUlEXFxuXCIpO1xuIFx0XHR0cmFjZV9hZnNfY21fbm9fc2VydmVyX3UoY2FsbCwgY2FsbC1cdTAwM2VyZXF1ZXN0KTtcbkBAIC00NTEsNyArNDU1LDYgQEAgc3RhdGljIGludCBhZnNfZGVsaXZlcl9jYl9wcm9iZV91dWlkKHN0cnVjdCBhZnNfY2FsbCAqY2FsbClcbiBcdFx0cmV0ID0gYWZzX2V4dHJhY3RfZGF0YShjYWxsLCBmYWxzZSk7XG4gXHRcdHN3aXRjaCAocmV0KSB7XG4gXHRcdGNhc2UgMDpcdFx0YnJlYWs7XG4tXHRcdGNhc2UgLUVBR0FJTjpcdHJldHVybiAwO1xuIFx0XHRkZWZhdWx0Olx0cmV0dXJuIHJldDtcbiBcdFx0fVxuIFxuZGlmZiAtLWdpdCBhL2ZzL2Fmcy9kaXIuYyBiL2ZzL2Fmcy9kaXIuY1xuaW5kZXggNDk4Yjk5Y2NkZjBlMjcuLjZkZjU2ZmU5MTYzZmQ3IDEwMDY0NFxuLS0tIGEvZnMvYWZzL2Rpci5jXG4rKysgYi9mcy9hZnMvZGlyLmNcbkBAIC0yOCw5ICsyOCwxMSBAQCBzdGF0aWMgaW50IGFmc19kX3JldmFsaWRhdGUoc3RydWN0IGlub2RlICpkaXIsIGNvbnN0IHN0cnVjdCBxc3RyICpuYW1lLFxuIHN0YXRpYyBpbnQgYWZzX2RfZGVsZXRlKGNvbnN0IHN0cnVjdCBkZW50cnkgKmRlbnRyeSk7XG4gc3RhdGljIHZvaWQgYWZzX2RfaXB1dChzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBpbm9kZSAqaW5vZGUpO1xuIHN0YXRpYyBib29sIGFmc19sb29rdXBfb25lX2ZpbGxkaXIoc3RydWN0IGRpcl9jb250ZXh0ICpjdHgsIGNvbnN0IGNoYXIgKm5hbWUsIGludCBubGVuLFxuLVx0XHRcdFx0ICBsb2ZmX3QgZnBvcywgdTY0IGlubywgdW5zaWduZWQgZHR5cGUpO1xuK1x0XHRcdFx0ICAgdTY0IGlubywgdTMyIHVuaXF1aWZpZXIpO1xuKyNkZWZpbmUgQUZTX0xPT0tVUF9PTkUgKChmaWxsZGlyX3QpMHgxMjNVTClcbiBzdGF0aWMgYm9vbCBhZnNfbG9va3VwX2ZpbGxkaXIoc3RydWN0IGRpcl9jb250ZXh0ICpjdHgsIGNvbnN0IGNoYXIgKm5hbWUsIGludCBubGVuLFxuLVx0XHRcdCAgICAgIGxvZmZfdCBmcG9zLCB1NjQgaW5vLCB1bnNpZ25lZCBkdHlwZSk7XG4rXHRcdFx0ICAgICAgIHU2NCBpbm8sIHUzMiB1bmlxdWlmaWVyKTtcbisjZGVmaW5lIEFGU19MT09LVVAgKChmaWxsZGlyX3QpMHgxMzdVTClcbiBzdGF0aWMgaW50IGFmc19jcmVhdGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuIFx0XHQgICAgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSwgYm9vbCBleGNsKTtcbiBzdGF0aWMgc3RydWN0IGRlbnRyeSAqYWZzX21rZGlyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbkBAIC00MjEsMTEgKzQyMywxOCBAQCBzdGF0aWMgaW50IGFmc19kaXJfaXRlcmF0ZV9ibG9jayhzdHJ1Y3QgYWZzX3Zub2RlICpkdm5vZGUsXG4gXHRcdH1cbiBcbiBcdFx0LyogZm91bmQgdGhlIG5leHQgZW50cnkgKi9cbi1cdFx0aWYgKCFkaXJfZW1pdChjdHgsIGRpcmUtXHUwMDNldS5uYW1lLCBubGVuLFxuLVx0XHRcdCAgICAgIG50b2hsKGRpcmUtXHUwMDNldS52bm9kZSksXG4tXHRcdFx0ICAgICAgKGN0eC1cdTAwM2VhY3RvciA9PSBhZnNfbG9va3VwX2ZpbGxkaXIgfHxcbi1cdFx0XHQgICAgICAgY3R4LVx1MDAzZWFjdG9yID09IGFmc19sb29rdXBfb25lX2ZpbGxkaXIpP1xuLVx0XHRcdCAgICAgIG50b2hsKGRpcmUtXHUwMDNldS51bmlxdWUpIDogRFRfVU5LTk9XTikpIHtcbitcdFx0aWYgKGN0eC1cdTAwM2VhY3RvciA9PSBBRlNfTE9PS1VQKSB7XG4rXHRcdFx0aWYgKCFhZnNfbG9va3VwX2ZpbGxkaXIoY3R4LCBkaXJlLVx1MDAzZXUubmFtZSwgbmxlbixcbitcdFx0XHRcdFx0XHRudG9obChkaXJlLVx1MDAzZXUudm5vZGUpLFxuK1x0XHRcdFx0XHRcdG50b2hsKGRpcmUtXHUwMDNldS51bmlxdWUpKSlcbitcdFx0XHRcdHJldHVybiAwO1xuK1x0XHR9IGVsc2UgaWYgKGN0eC1cdTAwM2VhY3RvciA9PSBBRlNfTE9PS1VQX09ORSkge1xuK1x0XHRcdGlmICghYWZzX2xvb2t1cF9vbmVfZmlsbGRpcihjdHgsIGRpcmUtXHUwMDNldS5uYW1lLCBubGVuLFxuK1x0XHRcdFx0XHRcdCAgICBudG9obChkaXJlLVx1MDAzZXUudm5vZGUpLFxuK1x0XHRcdFx0XHRcdCAgICBudG9obChkaXJlLVx1MDAzZXUudW5pcXVlKSkpXG4rXHRcdFx0XHRyZXR1cm4gMDtcbitcdFx0fSBlbHNlIGlmICghZGlyX2VtaXQoY3R4LCBkaXJlLVx1MDAzZXUubmFtZSwgbmxlbixcbitcdFx0XHRcdCAgICAgbnRvaGwoZGlyZS1cdTAwM2V1LnZub2RlKSwgRFRfVU5LTk9XTikpIHtcbiBcdFx0XHRfbGVhdmUoXCIgPSAwIFtmdWxsXVwiKTtcbiBcdFx0XHRyZXR1cm4gMDtcbiBcdFx0fVxuQEAgLTU0NSw2ICs1NTQsNyBAQCBzdGF0aWMgaW50IGFmc19yZWFkZGlyKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgZGlyX2NvbnRleHQgKmN0eClcbiB7XG4gXHRhZnNfZGF0YXZlcnNpb25fdCBkaXJfdmVyc2lvbjtcbiBcbitcdGN0eC1cdTAwM2VkdF9mbGFnc19tYXNrID0gVUlOVF9NQVg7XG4gXHRyZXR1cm4gYWZzX2Rpcl9pdGVyYXRlKGZpbGVfaW5vZGUoZmlsZSksIGN0eCwgZmlsZSwgXHUwMDI2ZGlyX3ZlcnNpb24pO1xuIH1cbiBcbkBAIC01NTQsMTQgKzU2NCwxNCBAQCBzdGF0aWMgaW50IGFmc19yZWFkZGlyKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgZGlyX2NvbnRleHQgKmN0eClcbiAgKiAgIHVuaXF1aWZpZXIgdGhyb3VnaCBkdHlwZVxuICAqL1xuIHN0YXRpYyBib29sIGFmc19sb29rdXBfb25lX2ZpbGxkaXIoc3RydWN0IGRpcl9jb250ZXh0ICpjdHgsIGNvbnN0IGNoYXIgKm5hbWUsXG4tXHRcdFx0XHQgIGludCBubGVuLCBsb2ZmX3QgZnBvcywgdTY0IGlubywgdW5zaWduZWQgZHR5cGUpXG4rXHRcdFx0XHQgIGludCBubGVuLCB1NjQgaW5vLCB1MzIgdW5pcXVpZmllcilcbiB7XG4gXHRzdHJ1Y3QgYWZzX2xvb2t1cF9vbmVfY29va2llICpjb29raWUgPVxuIFx0XHRjb250YWluZXJfb2YoY3R4LCBzdHJ1Y3QgYWZzX2xvb2t1cF9vbmVfY29va2llLCBjdHgpO1xuIFxuIFx0X2VudGVyKFwieyVzLCV1fSwlcywldSwsJWxsdSwldVwiLFxuIFx0ICAgICAgIGNvb2tpZS1cdTAwM2VuYW1lLm5hbWUsIGNvb2tpZS1cdTAwM2VuYW1lLmxlbiwgbmFtZSwgbmxlbixcbi1cdCAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKSBpbm8sIGR0eXBlKTtcbitcdCAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKSBpbm8sIHVuaXF1aWZpZXIpO1xuIFxuIFx0LyogaW5zYW5pdHkgY2hlY2tzIGZpcnN0ICovXG4gXHRCVUlMRF9CVUdfT04oc2l6ZW9mKHVuaW9uIGFmc194ZHJfZGlyX2Jsb2NrKSAhPSAyMDQ4KTtcbkBAIC01NzQsNyArNTg0LDcgQEAgc3RhdGljIGJvb2wgYWZzX2xvb2t1cF9vbmVfZmlsbGRpcihzdHJ1Y3QgZGlyX2NvbnRleHQgKmN0eCwgY29uc3QgY2hhciAqbmFtZSxcbiBcdH1cbiBcbiBcdGNvb2tpZS1cdTAwM2VmaWQudm5vZGUgPSBpbm87XG4tXHRjb29raWUtXHUwMDNlZmlkLnVuaXF1ZSA9IGR0eXBlO1xuK1x0Y29va2llLVx1MDAzZWZpZC51bmlxdWUgPSB1bmlxdWlmaWVyO1xuIFx0Y29va2llLVx1MDAzZWZvdW5kID0gMTtcbiBcbiBcdF9sZWF2ZShcIiA9IGZhbHNlIFtmb3VuZF1cIik7XG5AQCAtNTkxLDcgKzYwMSw3IEBAIHN0YXRpYyBpbnQgYWZzX2RvX2xvb2t1cF9vbmUoc3RydWN0IGlub2RlICpkaXIsIGNvbnN0IHN0cnVjdCBxc3RyICpuYW1lLFxuIHtcbiBcdHN0cnVjdCBhZnNfc3VwZXJfaW5mbyAqYXMgPSBkaXItXHUwMDNlaV9zYi1cdTAwM2VzX2ZzX2luZm87XG4gXHRzdHJ1Y3QgYWZzX2xvb2t1cF9vbmVfY29va2llIGNvb2tpZSA9IHtcbi1cdFx0LmN0eC5hY3RvciA9IGFmc19sb29rdXBfb25lX2ZpbGxkaXIsXG4rXHRcdC5jdHguYWN0b3IgPSBBRlNfTE9PS1VQX09ORSxcbiBcdFx0Lm5hbWUgPSAqbmFtZSxcbiBcdFx0LmZpZC52aWQgPSBhcy1cdTAwM2V2b2x1bWUtXHUwMDNldmlkXG4gXHR9O1xuQEAgLTYyMiwxNCArNjMyLDE0IEBAIHN0YXRpYyBpbnQgYWZzX2RvX2xvb2t1cF9vbmUoc3RydWN0IGlub2RlICpkaXIsIGNvbnN0IHN0cnVjdCBxc3RyICpuYW1lLFxuICAqICAgdW5pcXVpZmllciB0aHJvdWdoIGR0eXBlXG4gICovXG4gc3RhdGljIGJvb2wgYWZzX2xvb2t1cF9maWxsZGlyKHN0cnVjdCBkaXJfY29udGV4dCAqY3R4LCBjb25zdCBjaGFyICpuYW1lLFxuLVx0XHRcdCAgICAgIGludCBubGVuLCBsb2ZmX3QgZnBvcywgdTY0IGlubywgdW5zaWduZWQgZHR5cGUpXG4rXHRcdFx0ICAgICAgaW50IG5sZW4sIHU2NCBpbm8sIHUzMiB1bmlxdWlmaWVyKVxuIHtcbiBcdHN0cnVjdCBhZnNfbG9va3VwX2Nvb2tpZSAqY29va2llID1cbiBcdFx0Y29udGFpbmVyX29mKGN0eCwgc3RydWN0IGFmc19sb29rdXBfY29va2llLCBjdHgpO1xuIFxuIFx0X2VudGVyKFwieyVzLCV1fSwlcywldSwsJWxsdSwldVwiLFxuIFx0ICAgICAgIGNvb2tpZS1cdTAwM2VuYW1lLm5hbWUsIGNvb2tpZS1cdTAwM2VuYW1lLmxlbiwgbmFtZSwgbmxlbixcbi1cdCAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKSBpbm8sIGR0eXBlKTtcbitcdCAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKSBpbm8sIHVuaXF1aWZpZXIpO1xuIFxuIFx0LyogaW5zYW5pdHkgY2hlY2tzIGZpcnN0ICovXG4gXHRCVUlMRF9CVUdfT04oc2l6ZW9mKHVuaW9uIGFmc194ZHJfZGlyX2Jsb2NrKSAhPSAyMDQ4KTtcbkBAIC02MzcsNyArNjQ3LDcgQEAgc3RhdGljIGJvb2wgYWZzX2xvb2t1cF9maWxsZGlyKHN0cnVjdCBkaXJfY29udGV4dCAqY3R4LCBjb25zdCBjaGFyICpuYW1lLFxuIFxuIFx0aWYgKGNvb2tpZS1cdTAwM2Vucl9maWRzIFx1MDAzYyA1MCkge1xuIFx0XHRjb29raWUtXHUwMDNlZmlkc1tjb29raWUtXHUwMDNlbnJfZmlkc10udm5vZGVcdD0gaW5vO1xuLVx0XHRjb29raWUtXHUwMDNlZmlkc1tjb29raWUtXHUwMDNlbnJfZmlkc10udW5pcXVlXHQ9IGR0eXBlO1xuK1x0XHRjb29raWUtXHUwMDNlZmlkc1tjb29raWUtXHUwMDNlbnJfZmlkc10udW5pcXVlXHQ9IHVuaXF1aWZpZXI7XG4gXHRcdGNvb2tpZS1cdTAwM2Vucl9maWRzKys7XG4gXHR9XG4gXG5AQCAtNzc4LDcgKzc4OCw3IEBAIHN0YXRpYyBzdHJ1Y3QgaW5vZGUgKmFmc19kb19sb29rdXAoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSlcbiBcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIEFSUkFZX1NJWkUoY29va2llLVx1MDAzZWZpZHMpOyBpKyspXG4gXHRcdGNvb2tpZS1cdTAwM2VmaWRzW2ldLnZpZCA9IGR2bm9kZS1cdTAwM2VmaWQudmlkO1xuLVx0Y29va2llLVx1MDAzZWN0eC5hY3RvciA9IGFmc19sb29rdXBfZmlsbGRpcjtcbitcdGNvb2tpZS1cdTAwM2VjdHguYWN0b3IgPSBBRlNfTE9PS1VQO1xuIFx0Y29va2llLVx1MDAzZW5hbWUgPSBkZW50cnktXHUwMDNlZF9uYW1lO1xuIFx0Y29va2llLVx1MDAzZW5yX2ZpZHMgPSAyOyAvKiBzbG90IDEgaXMgc2F2ZWQgZm9yIHRoZSBmaWQgd2UgYWN0dWFsbHkgd2FudFxuIFx0XHRcdCAgICAgICogYW5kIHNsb3QgMCBmb3IgdGhlIGRpcmVjdG9yeSAqL1xuZGlmZiAtLWdpdCBhL2ZzL2Fmcy9keW5yb290LmMgYi9mcy9hZnMvZHlucm9vdC5jXG5pbmRleCAxZDVlMzNiYzc1MDIyNC4uNmUzYzhjNjkxYmE5N2YgMTAwNjQ0XG4tLS0gYS9mcy9hZnMvZHlucm9vdC5jXG4rKysgYi9mcy9hZnMvZHlucm9vdC5jXG5AQCAtMjc4LDcgKzI3OCw3IEBAIHN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICphZnNfbG9va3VwX2F0Y2VsbChzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5XG4gfVxuIFxuIC8qXG4tICogVHJhbnNjcmliZSB0aGUgY2VsbCBkYXRhYmFzZSBpbnRvIHJlYWRkaXIgY29udGVudCB1bmRlciB0aGUgUkNVIHJlYWQgbG9jay5cbisgKiBUcmFuc2NyaWJlIHRoZSBjZWxsIGRhdGFiYXNlIGludG8gcmVhZGRpciBjb250ZW50IHVuZGVyIG5ldC1cdTAwM2VjZWxsc19sb2NrLlxuICAqIEVhY2ggY2VsbCBwcm9kdWNlcyB0d28gZW50cmllcywgb25lIHByZWZpeGVkIHdpdGggYSBkb3QgYW5kIG9uZSBub3QuXG4gICovXG4gc3RhdGljIGludCBhZnNfZHlucm9vdF9yZWFkZGlyX2NlbGxzKHN0cnVjdCBhZnNfbmV0ICpuZXQsIHN0cnVjdCBkaXJfY29udGV4dCAqY3R4KVxuZGlmZiAtLWdpdCBhL2ZzL2Fmcy9mc19vcGVyYXRpb24uYyBiL2ZzL2Fmcy9mc19vcGVyYXRpb24uY1xuaW5kZXggYzBkYmJjNmQzNzE2ZTAuLjIwODAxYjI5NTIxZDFlIDEwMDY0NFxuLS0tIGEvZnMvYWZzL2ZzX29wZXJhdGlvbi5jXG4rKysgYi9mcy9hZnMvZnNfb3BlcmF0aW9uLmNcbkBAIC0zNDgsNyArMzQ4LDcgQEAgaW50IGFmc19wdXRfb3BlcmF0aW9uKHN0cnVjdCBhZnNfb3BlcmF0aW9uICpvcClcbiBcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2Mgb3AtXHUwMDNlbnJfZmlsZXMgLSAyOyBpKyspXG4gXHRcdFx0aWYgKG9wLVx1MDAzZW1vcmVfZmlsZXNbaV0ucHV0X3Zub2RlKVxuIFx0XHRcdFx0aXB1dChcdTAwMjZvcC1cdTAwM2Vtb3JlX2ZpbGVzW2ldLnZub2RlLVx1MDAzZW5ldGZzLmlub2RlKTtcbi1cdFx0a2ZyZWUob3AtXHUwMDNlbW9yZV9maWxlcyk7XG4rXHRcdGt2ZnJlZShvcC1cdTAwM2Vtb3JlX2ZpbGVzKTtcbiBcdH1cbiBcbiBcdGlmIChvcC1cdTAwM2Vlc3RhdGUpIHtcbmRpZmYgLS1naXQgYS9mcy9hZnMvaW5vZGUuYyBiL2ZzL2Fmcy9pbm9kZS5jXG5pbmRleCAzZjQ4NDU4Njk0YmFhNS4uMTRmMzlhOWJlYTZjZmUgMTAwNjQ0XG4tLS0gYS9mcy9hZnMvaW5vZGUuY1xuKysrIGIvZnMvYWZzL2lub2RlLmNcbkBAIC01Miw5ICs1Miw5IEBAIHN0YXRpYyBub2lubGluZSB2b2lkIGR1bXBfdm5vZGUoc3RydWN0IGFmc192bm9kZSAqdm5vZGUsIHN0cnVjdCBhZnNfdm5vZGUgKnBhcmVuXG4gLypcbiAgKiBTZXQgcGFyYW1ldGVycyBmb3IgdGhlIG5ldGZzIGxpYnJhcnlcbiAgKi9cbi1zdGF0aWMgdm9pZCBhZnNfc2V0X25ldGZzX2NvbnRleHQoc3RydWN0IGFmc192bm9kZSAqdm5vZGUpXG4rc3RhdGljIHZvaWQgYWZzX3NldF9uZXRmc19jb250ZXh0KHN0cnVjdCBhZnNfdm5vZGUgKnZub2RlLCBib29sIGlzX2ZpbGUpXG4ge1xuLVx0bmV0ZnNfaW5vZGVfaW5pdChcdTAwMjZ2bm9kZS1cdTAwM2VuZXRmcywgXHUwMDI2YWZzX3JlcV9vcHMsIHRydWUpO1xuK1x0bmV0ZnNfaW5vZGVfaW5pdChcdTAwMjZ2bm9kZS1cdTAwM2VuZXRmcywgXHUwMDI2YWZzX3JlcV9vcHMsIGlzX2ZpbGUpO1xuIH1cbiBcbiAvKlxuQEAgLTkzLDYgKzkzLDEwIEBAIHN0YXRpYyBpbnQgYWZzX2lub2RlX2luaXRfZnJvbV9zdGF0dXMoc3RydWN0IGFmc19vcGVyYXRpb24gKm9wLFxuIFx0aW5vZGUtXHUwMDNlaV9naWQgPSBtYWtlX2tnaWQoXHUwMDI2aW5pdF91c2VyX25zLCBzdGF0dXMtXHUwMDNlZ3JvdXApO1xuIFx0c2V0X25saW5rKFx1MDAyNnZub2RlLVx1MDAzZW5ldGZzLmlub2RlLCBzdGF0dXMtXHUwMDNlbmxpbmspO1xuIFxuK1x0aV9zaXplX3dyaXRlKGlub2RlLCBzdGF0dXMtXHUwMDNlc2l6ZSk7XG4rXHRpbm9kZV9zZXRfYnl0ZXMoaW5vZGUsIHN0YXR1cy1cdTAwM2VzaXplKTtcbitcdGFmc19zZXRfbmV0ZnNfY29udGV4dCh2bm9kZSwgc3RhdHVzLVx1MDAzZXR5cGUgPT0gQUZTX0ZUWVBFX0ZJTEUpO1xuK1xuIFx0c3dpdGNoIChzdGF0dXMtXHUwMDNldHlwZSkge1xuIFx0Y2FzZSBBRlNfRlRZUEVfRklMRTpcbiBcdFx0aW5vZGUtXHUwMDNlaV9tb2RlXHQ9IFNfSUZSRUcgfCAoc3RhdHVzLVx1MDAzZW1vZGUgXHUwMDI2IFNfSUFMTFVHTyk7XG5AQCAtMTI2LDcgKzEzMCw2IEBAIHN0YXRpYyBpbnQgYWZzX2lub2RlX2luaXRfZnJvbV9zdGF0dXMoc3RydWN0IGFmc19vcGVyYXRpb24gKm9wLFxuIFx0XHR9XG4gXHRcdGlub2RlLVx1MDAzZWlfbWFwcGluZy1cdTAwM2VhX29wc1x0PSBcdTAwMjZhZnNfc3ltbGlua19hb3BzO1xuIFx0XHRpbm9kZV9ub2hpZ2htZW0oaW5vZGUpO1xuLVx0XHRtYXBwaW5nX3NldF9yZWxlYXNlX2Fsd2F5cyhpbm9kZS1cdTAwM2VpX21hcHBpbmcpO1xuIFx0XHRicmVhaztcbiBcdGRlZmF1bHQ6XG4gXHRcdGR1bXBfdm5vZGUodm5vZGUsIG9wLVx1MDAzZWZpbGVbMF0udm5vZGUgIT0gdm5vZGUgPyBvcC1cdTAwM2VmaWxlWzBdLnZub2RlIDogTlVMTCk7XG5AQCAtMTM0LDEwICsxMzcsNiBAQCBzdGF0aWMgaW50IGFmc19pbm9kZV9pbml0X2Zyb21fc3RhdHVzKHN0cnVjdCBhZnNfb3BlcmF0aW9uICpvcCxcbiBcdFx0cmV0dXJuIGFmc19wcm90b2NvbF9lcnJvcihOVUxMLCBhZnNfZXByb3RvX2ZpbGVfdHlwZSk7XG4gXHR9XG4gXG4tXHRpX3NpemVfd3JpdGUoaW5vZGUsIHN0YXR1cy1cdTAwM2VzaXplKTtcbi1cdGlub2RlX3NldF9ieXRlcyhpbm9kZSwgc3RhdHVzLVx1MDAzZXNpemUpO1xuLVx0YWZzX3NldF9uZXRmc19jb250ZXh0KHZub2RlKTtcbi1cbiBcdHZub2RlLVx1MDAzZWludmFsaWRfYmVmb3JlXHQ9IHN0YXR1cy1cdTAwM2VkYXRhX3ZlcnNpb247XG4gXHR0cmFjZV9hZnNfc2V0X2R2KHZub2RlLCBzdGF0dXMtXHUwMDNlZGF0YV92ZXJzaW9uKTtcbiBcdGlub2RlX3NldF9pdmVyc2lvbl9yYXcoXHUwMDI2dm5vZGUtXHUwMDNlbmV0ZnMuaW5vZGUsIHN0YXR1cy1cdTAwM2VkYXRhX3ZlcnNpb24pO1xuQEAgLTU2Niw3ICs1NjUsNiBAQCBzdHJ1Y3QgaW5vZGUgKmFmc19yb290X2lnZXQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IGtleSAqa2V5KVxuIFxuIFx0dm5vZGUgPSBBRlNfRlNfSShpbm9kZSk7XG4gXHR2bm9kZS1cdTAwM2VjYl92X2NoZWNrID0gYXRvbWljX3JlYWQoXHUwMDI2YXMtXHUwMDNldm9sdW1lLVx1MDAzZWNiX3ZfYnJlYWspO1xuLVx0YWZzX3NldF9uZXRmc19jb250ZXh0KHZub2RlKTtcbiBcbiBcdG9wID0gYWZzX2FsbG9jX29wZXJhdGlvbihrZXksIGFzLVx1MDAzZXZvbHVtZSk7XG4gXHRpZiAoSVNfRVJSKG9wKSkge1xuQEAgLTY4Miw2ICs2ODAsNyBAQCB2b2lkIGFmc19ldmljdF9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuIFx0XHRpbm9kZS1cdTAwM2VpX21hcHBpbmctXHUwMDNlYV9vcHMtXHUwMDNld3JpdGVwYWdlcyhpbm9kZS1cdTAwM2VpX21hcHBpbmcsIFx1MDAyNndiYyk7XG4gXHR9XG4gXG4rXHRmbHVzaF9kZWxheWVkX3dvcmsoXHUwMDI2dm5vZGUtXHUwMDNlbG9ja193b3JrKTtcbiBcdG5ldGZzX3dhaXRfZm9yX291dHN0YW5kaW5nX2lvKGlub2RlKTtcbiBcdHRydW5jYXRlX2lub2RlX3BhZ2VzX2ZpbmFsKFx1MDAyNmlub2RlLVx1MDAzZWlfZGF0YSk7XG4gXHRuZXRmc19mcmVlX2ZvbGlvcV9idWZmZXIodm5vZGUtXHUwMDNlZGlyZWN0b3J5KTtcbmRpZmYgLS1naXQgYS9mcy9hZnMvaW50ZXJuYWwuaCBiL2ZzL2Fmcy9pbnRlcm5hbC5oXG5pbmRleCAwYjcyYTg1NjYyOTk5Mi4uNjAxZjAxZTVjMTVmY2MgMTAwNjQ0XG4tLS0gYS9mcy9hZnMvaW50ZXJuYWwuaFxuKysrIGIvZnMvYWZzL2ludGVybmFsLmhcbkBAIC0zODgsNiArMzg4LDcgQEAgc3RydWN0IGFmc19jZWxsIHtcbiAjZGVmaW5lIEFGU19DRUxMX0ZMX05PX0dDXHQwXHRcdC8qIFRoZSBjZWxsIHdhcyBhZGRlZCBtYW51YWxseSwgZG9uJ3QgYXV0by1nYyAqL1xuICNkZWZpbmUgQUZTX0NFTExfRkxfRE9fTE9PS1VQXHQxXHRcdC8qIEROUyBsb29rdXAgcmVxdWVzdGVkICovXG4gI2RlZmluZSBBRlNfQ0VMTF9GTF9DSEVDS19BTElBU1x0Mlx0XHQvKiBOZWVkIHRvIGNoZWNrIGZvciBhbGlhc2VzICovXG4rI2RlZmluZSBBRlNfQ0VMTF9GTF9IQVZFX0lOT1x0M1x0XHQvKiBIYXZlIGR5bnJvb3RfaW5vICovXG4gXHRlbnVtIGFmc19jZWxsX3N0YXRlXHRzdGF0ZTtcbiBcdHNob3J0XHRcdFx0ZXJyb3I7XG4gXHRlbnVtIGRuc19yZWNvcmRfc291cmNlXHRkbnNfc291cmNlOjg7XHQvKiBMYXRlc3Qgc291cmNlIG9mIGRhdGEgZnJvbSBsb29rdXAgKi9cbkBAIC03NTAsOCArNzUxLDYgQEAgc3RhdGljIGlubGluZSB2b2lkIGFmc192bm9kZV9zZXRfY2FjaGUoc3RydWN0IGFmc192bm9kZSAqdm5vZGUsXG4ge1xuICNpZmRlZiBDT05GSUdfQUZTX0ZTQ0FDSEVcbiBcdHZub2RlLVx1MDAzZW5ldGZzLmNhY2hlID0gY29va2llO1xuLVx0aWYgKGNvb2tpZSlcbi1cdFx0bWFwcGluZ19zZXRfcmVsZWFzZV9hbHdheXModm5vZGUtXHUwMDNlbmV0ZnMuaW5vZGUuaV9tYXBwaW5nKTtcbiAjZW5kaWZcbiB9XG4gXG5kaWZmIC0tZ2l0IGEvZnMvYWZzL3N1cGVyLmMgYi9mcy9hZnMvc3VwZXIuY1xuaW5kZXggOTQyZjNlOTgwMGQ3ZGMuLjgyYmI3MTM4MjVhMGQ1IDEwMDY0NFxuLS0tIGEvZnMvYWZzL3N1cGVyLmNcbisrKyBiL2ZzL2Fmcy9zdXBlci5jXG5AQCAtNTg3LDcgKzU4Nyw4IEBAIHN0YXRpYyBpbnQgYWZzX2dldF90cmVlKHN0cnVjdCBmc19jb250ZXh0ICpmYylcbiBcdH1cbiBcbiBcdGZjLVx1MDAzZXJvb3QgPSBkZ2V0KHNiLVx1MDAzZXNfcm9vdCk7XG4tXHR0cmFjZV9hZnNfZ2V0X3RyZWUoYXMtXHUwMDNlY2VsbCwgYXMtXHUwMDNldm9sdW1lKTtcbitcdGlmICghY3R4LVx1MDAzZWR5bl9yb290KVxuK1x0XHR0cmFjZV9hZnNfZ2V0X3RyZWUoYXMtXHUwMDNlY2VsbCwgYXMtXHUwMDNldm9sdW1lKTtcbiBcdF9sZWF2ZShcIiA9IDAgWyVwXVwiLCBzYik7XG4gXHRyZXR1cm4gMDtcbiBcbkBAIC02NTksNyArNjYwLDYgQEAgc3RhdGljIHZvaWQgYWZzX2lfaW5pdF9vbmNlKHZvaWQgKl92bm9kZSlcbiBcdElOSVRfTElTVF9IRUFEKFx1MDAyNnZub2RlLVx1MDAzZXdiX2tleXMpO1xuIFx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2dm5vZGUtXHUwMDNlcGVuZGluZ19sb2Nrcyk7XG4gXHRJTklUX0xJU1RfSEVBRChcdTAwMjZ2bm9kZS1cdTAwM2VncmFudGVkX2xvY2tzKTtcbi1cdElOSVRfREVMQVlFRF9XT1JLKFx1MDAyNnZub2RlLVx1MDAzZWxvY2tfd29yaywgYWZzX2xvY2tfd29yayk7XG4gXHRJTklUX0xJU1RfSEVBRChcdTAwMjZ2bm9kZS1cdTAwM2VjYl9tbWFwX2xpbmspO1xuIFx0c2VxbG9ja19pbml0KFx1MDAyNnZub2RlLVx1MDAzZWNiX2xvY2spO1xuIH1cbkBAIC02OTMsNiArNjkzLDcgQEAgc3RhdGljIHN0cnVjdCBpbm9kZSAqYWZzX2FsbG9jX2lub2RlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXG4gXG4gXHRpbml0X3J3c2VtKFx1MDAyNnZub2RlLVx1MDAzZXJtZGlyX2xvY2spO1xuIFx0SU5JVF9XT1JLKFx1MDAyNnZub2RlLVx1MDAzZWNiX3dvcmssIGFmc19pbnZhbGlkYXRlX21tYXBfd29yayk7XG4rXHRJTklUX0RFTEFZRURfV09SSyhcdTAwMjZ2bm9kZS1cdTAwM2Vsb2NrX3dvcmssIGFmc19sb2NrX3dvcmspO1xuIFxuIFx0X2xlYXZlKFwiID0gJXBcIiwgXHUwMDI2dm5vZGUtXHUwMDNlbmV0ZnMuaW5vZGUpO1xuIFx0cmV0dXJuIFx1MDAyNnZub2RlLVx1MDAzZW5ldGZzLmlub2RlO1xuZGlmZiAtLWdpdCBhL2ZzL2Fmcy92bF9saXN0LmMgYi9mcy9hZnMvdmxfbGlzdC5jXG5pbmRleCAzZTQ5NjY5MTVlYTRjYy4uYzFkYWM1ZGJlZDBkZDAgMTAwNjQ0XG4tLS0gYS9mcy9hZnMvdmxfbGlzdC5jXG4rKysgYi9mcy9hZnMvdmxfbGlzdC5jXG5AQCAtOTIsNyArOTIsNyBAQCBzdGF0aWMgc3RydWN0IGFmc19hZGRyX2xpc3QgKmFmc19leHRyYWN0X3ZsX2FkZHJzKHN0cnVjdCBhZnNfbmV0ICpuZXQsXG4ge1xuIFx0c3RydWN0IGFmc19hZGRyX2xpc3QgKmFsaXN0O1xuIFx0Y29uc3QgdTggKmIgPSAqX2I7XG4tXHRpbnQgcmV0ID0gLUVJTlZBTDtcbitcdGludCByZXQ7XG4gXG4gXHRhbGlzdCA9IGFmc19hbGxvY19hZGRybGlzdChucl9hZGRycyk7XG4gXHRpZiAoIWFsaXN0KVxuQEAgLTExMCw2ICsxMTAsNyBAQCBzdGF0aWMgc3RydWN0IGFmc19hZGRyX2xpc3QgKmFmc19leHRyYWN0X3ZsX2FkZHJzKHN0cnVjdCBhZnNfbmV0ICpuZXQsXG4gXHRcdGNhc2UgRE5TX0FERFJFU1NfSVNfSVBWNDpcbiBcdFx0XHRpZiAoZW5kIC0gYiBcdTAwM2MgNCkge1xuIFx0XHRcdFx0X2xlYXZlKFwiID0gLUVJTlZBTCBbc2hvcnQgaW5ldF1cIik7XG4rXHRcdFx0XHRyZXQgPSAtRUlOVkFMO1xuIFx0XHRcdFx0Z290byBlcnJvcjtcbiBcdFx0XHR9XG4gXHRcdFx0bWVtY3B5KHgsIGIsIDQpO1xuQEAgLTEyMiw2ICsxMjMsNyBAQCBzdGF0aWMgc3RydWN0IGFmc19hZGRyX2xpc3QgKmFmc19leHRyYWN0X3ZsX2FkZHJzKHN0cnVjdCBhZnNfbmV0ICpuZXQsXG4gXHRcdGNhc2UgRE5TX0FERFJFU1NfSVNfSVBWNjpcbiBcdFx0XHRpZiAoZW5kIC0gYiBcdTAwM2MgMTYpIHtcbiBcdFx0XHRcdF9sZWF2ZShcIiA9IC1FSU5WQUwgW3Nob3J0IGluZXQ2XVwiKTtcbitcdFx0XHRcdHJldCA9IC1FSU5WQUw7XG4gXHRcdFx0XHRnb3RvIGVycm9yO1xuIFx0XHRcdH1cbiBcdFx0XHRtZW1jcHkoeCwgYiwgMTYpO1xuQEAgLTE5OCw2ICsyMDAsOCBAQCBzdHJ1Y3QgYWZzX3Zsc2VydmVyX2xpc3QgKmFmc19leHRyYWN0X3Zsc2VydmVyX2xpc3Qoc3RydWN0IGFmc19jZWxsICpjZWxsLFxuIFxuIFx0YiArPSBzaXplb2YoKmhkcik7XG4gXHR3aGlsZSAoZW5kIC0gYiBcdTAwM2U9IHNpemVvZihicykpIHtcbitcdFx0aW50IG5sZW47XG4rXG4gXHRcdGJzLm5hbWVfbGVuXHQ9IGFmc19leHRyYWN0X2xlMTYoXHUwMDI2Yik7XG4gXHRcdGJzLnByaW9yaXR5XHQ9IGFmc19leHRyYWN0X2xlMTYoXHUwMDI2Yik7XG4gXHRcdGJzLndlaWdodFx0PSBhZnNfZXh0cmFjdF9sZTE2KFx1MDAyNmIpO1xuQEAgLTIwNywxMCArMjExLDEyIEBAIHN0cnVjdCBhZnNfdmxzZXJ2ZXJfbGlzdCAqYWZzX2V4dHJhY3RfdmxzZXJ2ZXJfbGlzdChzdHJ1Y3QgYWZzX2NlbGwgKmNlbGwsXG4gXHRcdGJzLnByb3RvY29sXHQ9ICpiKys7XG4gXHRcdGJzLm5yX2FkZHJzXHQ9ICpiKys7XG4gXG4rXHRcdG5sZW4gPSBtaW4zKGJzLm5hbWVfbGVuLCBlbmQgLSBiLCAyNTUpO1xuK1xuIFx0XHRfZGVidWcoXCJleHRyYWN0ICV1ICV1ICV1ICV1ICV1ICV1ICUqLipzXCIsXG4gXHRcdCAgICAgICBicy5uYW1lX2xlbiwgYnMucHJpb3JpdHksIGJzLndlaWdodCxcbiBcdFx0ICAgICAgIGJzLnBvcnQsIGJzLnByb3RvY29sLCBicy5ucl9hZGRycyxcbi1cdFx0ICAgICAgIGJzLm5hbWVfbGVuLCBicy5uYW1lX2xlbiwgYik7XG4rXHRcdCAgICAgICBicy5uYW1lX2xlbiwgbmxlbiwgYik7XG4gXG4gXHRcdGlmIChlbmQgLSBiIFx1MDAzYyBicy5uYW1lX2xlbilcbiBcdFx0XHRicmVhaztcbkBAIC0yODcsOCArMjkzLDIwIEBAIHN0cnVjdCBhZnNfdmxzZXJ2ZXJfbGlzdCAqYWZzX2V4dHJhY3RfdmxzZXJ2ZXJfbGlzdChzdHJ1Y3QgYWZzX2NlbGwgKmNlbGwsXG4gXHRcdFx0YWZzX3B1dF9hZGRybGlzdChvbGQsIGFmc19hbGlzdF90cmFjZV9wdXRfdmxzZXJ2ZXJfb2xkKTtcbiBcdFx0fVxuIFxuK1x0XHQvKiBDaGVjayBmb3IgZHVwbGljYXRlcyBpbiB0aGUgc2VydmVyIGxpc3QgKi9cbitcdFx0Zm9yIChqID0gMDsgaiBcdTAwM2MgdmxsaXN0LVx1MDAzZW5yX3NlcnZlcnM7IGorKykge1xuK1x0XHRcdHN0cnVjdCBhZnNfdmxzZXJ2ZXIgKnMgPSB2bGxpc3QtXHUwMDNlc2VydmVyc1tqXS5zZXJ2ZXI7XG4gXG4tXHRcdC8qIFRPRE86IE1pZ2h0IHdhbnQgdG8gY2hlY2sgZm9yIGR1cGxpY2F0ZXMgKi9cbitcdFx0XHRpZiAocy1cdTAwM2VuYW1lX2xlbiA9PSBzZXJ2ZXItXHUwMDNlbmFtZV9sZW4gXHUwMDI2XHUwMDI2XG4rXHRcdFx0ICAgIHMtXHUwMDNlcG9ydCA9PSBzZXJ2ZXItXHUwMDNlcG9ydCBcdTAwMjZcdTAwMjZcbitcdFx0XHQgICAgc3RybmNhc2VjbXAocy1cdTAwM2VuYW1lLCBzZXJ2ZXItXHUwMDNlbmFtZSwgc2VydmVyLVx1MDAzZW5hbWVfbGVuKSA9PSAwKSB7XG4rXHRcdFx0XHRhZnNfcHV0X3Zsc2VydmVyKGNlbGwtXHUwMDNlbmV0LCBzZXJ2ZXIpO1xuK1x0XHRcdFx0c2VydmVyID0gTlVMTDtcbitcdFx0XHRcdGJyZWFrO1xuK1x0XHRcdH1cbitcdFx0fVxuK1x0XHRpZiAoIXNlcnZlcilcbitcdFx0XHRjb250aW51ZTtcbiBcbiBcdFx0LyogSW5zZXJ0aW9uLXNvcnQgYnkgcHJpb3JpdHkgYW5kIHdlaWdodCAqL1xuIFx0XHRmb3IgKGogPSAwOyBqIFx1MDAzYyB2bGxpc3QtXHUwMDNlbnJfc2VydmVyczsgaisrKSB7XG5kaWZmIC0tZ2l0IGEvZnMvYWZzL3ZvbHVtZS5jIGIvZnMvYWZzL3ZvbHVtZS5jXG5pbmRleCA5YWU1YzhhZDJlMDRiNC4uNGY3OWQyNWVjMzdmNGIgMTAwNjQ0XG4tLS0gYS9mcy9hZnMvdm9sdW1lLmNcbisrKyBiL2ZzL2Fmcy92b2x1bWUuY1xuQEAgLTQwLDcgKzQwLDcgQEAgc3RhdGljIHN0cnVjdCBhZnNfdm9sdW1lICphZnNfaW5zZXJ0X3ZvbHVtZV9pbnRvX2NlbGwoc3RydWN0IGFmc19jZWxsICpjZWxsLFxuIFx0XHRcdFx0Z290byBmb3VuZDtcbiBcdFx0XHR9XG4gXG4tXHRcdFx0c2V0X2JpdChBRlNfVk9MVU1FX1JNX1RSRUUsIFx1MDAyNnZvbHVtZS1cdTAwM2VmbGFncyk7XG4rXHRcdFx0c2V0X2JpdChBRlNfVk9MVU1FX1JNX1RSRUUsIFx1MDAyNnAtXHUwMDNlZmxhZ3MpO1xuIFx0XHRcdHJiX3JlcGxhY2Vfbm9kZV9yY3UoXHUwMDI2cC1cdTAwM2VjZWxsX25vZGUsIFx1MDAyNnZvbHVtZS1cdTAwM2VjZWxsX25vZGUsIFx1MDAyNmNlbGwtXHUwMDNldm9sdW1lcyk7XG4gXHRcdH1cbiBcdH1cbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIyVDA5OjI3OjExLjM4OTE3MTU0OVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ3MzI0NTA0MTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQUZTIFBhdGNoIFZlcmlmaWNhdGlvbioqXG5cbk9rYXksIHNvIEkndmUgZ290IGEgcGF0Y2ggaGVyZSB0aGF0J3MgaGl0dGluZyB0aGUgYGZzL2Fmcy9gIGRpcmVjdG9yeS4gVGhhdCdzIGltbWVkaWF0ZWx5IGludGVyZXN0aW5nOyB0aGlzIG1lYW5zIHdlJ3JlIGRlYWxpbmcgd2l0aCBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIEFGUyBmaWxlc3lzdGVtIGltcGxlbWVudGF0aW9uLCBubyBxdWVzdGlvbiBhYm91dCBpdC4gTG9va2luZyBhdCB0aGUgYWZmZWN0ZWQgZmlsZXMg4oCTIGBjYWxsYmFjay5jYCwgYGNlbGwuY2AsIGBjbXNlcnZpY2UuY2AsIGBkaXIuY2AsIGBkeW5yb290LmNgLCBgZnNfb3BlcmF0aW9uLmNgLCBgaW5vZGUuY2AsIGBpbnRlcm5hbC5oYCwgYHN1cGVyLmNgLCBgdmxfbGlzdC5jYCwgYW5kIGB2b2x1bWUuY2Ag4oCTIGl0J3MgYSBwcmV0dHkgYnJvYWQgc3dlZXAsIHRvdWNoaW5nIGEgZ29vZCBjaHVuayBvZiBjb3JlIEFGUyBmdW5jdGlvbmFsaXR5LlxuXG5GaXJzdCB0aGluZ3MgZmlyc3QsIEkgbmVlZCB0byBjb25maXJtIHRoYXQgQUZTIGlzIGV2ZW4gcmVhY2hhYmxlIGluIHRoZSBidWlsZCBlbnZpcm9ubWVudC4gSSdtIGdvaW5nIHRvIGhhdmUgdG8gZGV0ZXJtaW5lIGlmIGBDT05GSUdfQUZTX0ZTYCBpcyBzZXQsIGFuZCBpZiBzbywgaG93LiBJJ2xsIG5lZWQgdG8gZG91YmxlLWNoZWNrIHRoYXQgdGhpcyBpcyBjb3JyZWN0LiBUaGVuLCBJIHNob3VsZCBwcm9iYWJseSB0YWtlIGEgbG9vayBhdCBgZnMvYWZzL0tjb25maWdgIHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55IG90aGVyIHJlbGF0ZWQgY29uZmlndXJhdGlvbnMgdGhhdCBoYXZlIGJlZW4gdG91Y2hlZCBieSB0aGlzIHBhdGNoLCBhbnkgZGVwZW5kZW5jaWVzIG9yIG5ldyBmZWF0dXJlcyB0aGF0IG5lZWQgdG8gYmUgY29uc2lkZXJlZC4gTmVlZCB0byBnZXQgYSBoYW5kbGUgb24gdGhlIGZ1bGwgY29uZmlndXJhdGlvbiBpbXBsaWNhdGlvbnMgYmVmb3JlIGRpdmluZyBkZWVwZXIgaW50byB0aGUgY29kZS5cblxuXG4iLCJJbnB1dFRva2VucyI6OTI4NiwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzNSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIyVDA5OjI3OjE2LjEyMTYyNTI0WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwODIxNDM1NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQUZTX1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9hZnMvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9hZnMvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbmZzL2Fmcy9LY29uZmlnOjI6Y29uZmlnIEFGU19GU1xcbmZzL2Fmcy9LY29uZmlnLTMtXFx0dHJpc3RhdGUgXFxcIkFuZHJldyBGaWxlIFN5c3RlbSBzdXBwb3J0IChBRlMpXFxcIlxcbi0tXFxuZnMvYWZzL0tjb25maWctMTYtXFxuZnMvYWZzL0tjb25maWc6MTc6Y29uZmlnIEFGU19ERUJVR1xcbmZzL2Fmcy9LY29uZmlnLTE4LVxcdGJvb2wgXFxcIkFGUyBkeW5hbWljIGRlYnVnZ2luZ1xcXCJcXG4tLVxcbmZzL2Fmcy9LY29uZmlnLTI2LVxcbmZzL2Fmcy9LY29uZmlnOjI3OmNvbmZpZyBBRlNfRlNDQUNIRVxcbmZzL2Fmcy9LY29uZmlnLTI4LVxcdGJvb2wgXFxcIlByb3ZpZGUgQUZTIGNsaWVudCBjYWNoaW5nIHN1cHBvcnRcXFwiXFxuLS1cXG5mcy9hZnMvS2NvbmZpZy0zMy1cXG5mcy9hZnMvS2NvbmZpZzozNDpjb25maWcgQUZTX0RFQlVHX0NVUlNPUlxcbmZzL2Fmcy9LY29uZmlnLTM1LVxcdGJvb2wgXFxcIkFGUyBzZXJ2ZXIgY3Vyc29yIGRlYnVnZ2luZ1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjJUMDk6Mjc6MTYuMjI5ODQ1Nzk3WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzUyMzAxMzcxMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246XG5cbioqQW5hbHl6aW5nIEFGUyBGaWxlIFN5c3RlbSBDb25maWd1cmF0aW9uKipcblxuQWxyaWdodCwgdGhlIGNvbmZpZ3VyYXRpb24gaW4gcXVlc3Rpb24gaGVyZSBzZWVtcyB0byBiZSBgQUZTX0ZTYC4gTGV0J3MgZGlnIGludG8gdGhhdCBhbmQgc2VlIHdoYXQgdGhhdCBhY3R1YWxseSBtZWFucyB3aXRoaW4gdGhlIGZpbGUgc3lzdGVtIGNvZGUuIEknbGwgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgZnVuY3Rpb25hbGl0eSBpcyBiZWluZyBlbmFibGVkIG9yIGFsdGVyZWQuIE15IGluaXRpYWwgaW5zdGluY3QgaXMgdG8gZ28gc3RyYWlnaHQgdG8gYGZzL2Fmcy9kaXIuY2AuIFRoYXQncyB3aGVyZSBJJ2QgZXhwZWN0IHRvIGZpbmQgdGhlIGNvcmUgZGlyZWN0b3J5IG9wZXJhdGlvbnMg4oCTIHRoZSByb3V0aW5lcyBtb3N0IGxpa2VseSB0byBiZSBpbXBhY3RlZCBvciBtb2RpZmllZCBieSBhIGNvbmZpZ3VyYXRpb24gc2V0dGluZy4gSSBuZWVkIHRvIGNyb3NzLXJlZmVyZW5jZSB0aGF0IGZpbGUgd2l0aCB0aGUgZGVmaW5lcyBmb3IgYEFGU19GU2AgdG8gdW5kZXJzdGFuZCB0aGUgZGlmZmVyZW5jZXMgaW4gaW1wbGVtZW50YXRpb24gb3IgdG8gY2hlY2sgd2hhdCdzIGVuYWJsZWQuIEknbGwgZm9jdXMgb24gdGhlIGZ1bmN0aW9ucyB3aXRoaW4gYGRpci5jYCB0byBzZWUgd2hpY2ggb25lcyBhcmUgY29uZGl0aW9uYWxseSBjb21waWxlZCBvciBoYXZlIGRpZmZlcmVudCBiZWhhdmlvciBiYXNlZCBvbiB0aGUgYEFGU19GU2AgZGVmaW5lLiBUaGlzIHNob3VsZCBzaGVkIGxpZ2h0IG9uIHRoZSBzcGVjaWZpYyBhZGp1c3RtZW50cyBtYWRlIGZvciB0aGlzIEFGUyBjb25maWd1cmF0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5OTM1LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjJUMDk6Mjc6MTkuNzUyODYyMjE5WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwNzA1NjM2NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhZnNfZGlyX2l0ZXJhdGVfYmxvY2tcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvYWZzL2Rpci5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2Fmcy9kaXIuYz0zMDA9c3NpemVfdCBhZnNfcmVhZF9kaXIoc3RydWN0IGFmc192bm9kZSAqZHZub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSlcXG4tLVxcbmZzL2Fmcy9kaXIuYy0zNTYtICovXFxuZnMvYWZzL2Rpci5jOjM1NzpzdGF0aWMgaW50IGFmc19kaXJfaXRlcmF0ZV9ibG9jayhzdHJ1Y3QgYWZzX3Zub2RlICpkdm5vZGUsXFxuZnMvYWZzL2Rpci5jLTM1OC1cXHRcXHRcXHRcXHQgc3RydWN0IGRpcl9jb250ZXh0ICpjdHgsXFxuLS1cXG5mcy9hZnMvZGlyLmM9NDU3PXN0YXRpYyBzaXplX3QgYWZzX2Rpcl9pdGVyYXRlX3N0ZXAodm9pZCAqaXRlcl9iYXNlLCBzaXplX3QgcHJvZ3Jlc3MsIHNpemVfdCBsZW4sXFxuLS1cXG5mcy9hZnMvZGlyLmMtNDcyLVxcdGRvIHtcXG5mcy9hZnMvZGlyLmM6NDczOlxcdFxcdHJldCA9IGFmc19kaXJfaXRlcmF0ZV9ibG9jayhkdm5vZGUsIGN0eC1cXHUwMDNlZGlyX2N0eCwgaXRlcl9iYXNlKTtcXG5mcy9hZnMvZGlyLmMtNDc0LVxcdFxcdGlmIChyZXQgIT0gMSlcXG4tLVxcbmZzL2Fmcy9kaXIuYz01NTM9c3RhdGljIGludCBhZnNfcmVhZGRpcihzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IGRpcl9jb250ZXh0ICpjdHgpXFxuLS1cXG5mcy9hZnMvZGlyLmMtNTYyLSAqIFNlYXJjaCB0aGUgZGlyZWN0b3J5IGZvciBhIHNpbmdsZSBuYW1lXFxuZnMvYWZzL2Rpci5jOjU2MzogKiAtIGlmIGFmc19kaXJfaXRlcmF0ZV9ibG9jaygpIHNwb3RzIHRoaXMgZnVuY3Rpb24sIGl0J2xsIHBhc3MgdGhlIEZJRFxcbmZzL2Fmcy9kaXIuYy01NjQtICogICB1bmlxdWlmaWVyIHRocm91Z2ggZHR5cGVcXG4tLVxcbmZzL2Fmcy9kaXIuYz01OTg9c3RhdGljIGludCBhZnNfZG9fbG9va3VwX29uZShzdHJ1Y3QgaW5vZGUgKmRpciwgY29uc3Qgc3RydWN0IHFzdHIgKm5hbWUsXFxuLS1cXG5mcy9hZnMvZGlyLmMtNjMwLSAqIHNlYXJjaCB0aGUgZGlyZWN0b3J5IGZvciBhIG5hbWVcXG5mcy9hZnMvZGlyLmM6NjMxOiAqIC0gaWYgYWZzX2Rpcl9pdGVyYXRlX2Jsb2NrKCkgc3BvdHMgdGhpcyBmdW5jdGlvbiwgaXQnbGwgcGFzcyB0aGUgRklEXFxuZnMvYWZzL2Rpci5jLTYzMi0gKiAgIHVuaXF1aWZpZXIgdGhyb3VnaCBkdHlwZVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yMlQwOToyNzoxOS44NTk5NDExNDZaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5MzUxMTkyNjE1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBBRlMgQ29kZSBmb3IgUG90ZW50aWFsIEZ1enppbmcgVGFyZ2V0cyoqXG5cbk9rYXksIGxldCdzIHRha2UgYSBsb29rIGF0IHRoaXMgbGlzdCBvZiBtb2RpZmllZCBmdW5jdGlvbnMgaW4gdGhlIEFGUyBjb2RlLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gaWRlbnRpZnkgcG90ZW50aWFsIGFyZWFzIGZvciBmdXp6aW5nIGFuZCB2dWxuZXJhYmlsaXR5IHJlc2VhcmNoLiBBRlMgaXMgYSBuZXR3b3JrIGZpbGVzeXN0ZW0sIHdoaWNoIGltbWVkaWF0ZWx5IHN1Z2dlc3RzIGl0IGNhbiBiZSBwcm9iZWQgYW5kIHRlc3RlZCB3aXRoIHRvb2xzIGxpa2Ugc3l6a2FsbGVyLlxuXG5JJ3ZlIG1hZGUgYSBxdWljayBzY2FuIG9mIHRoZSBmdW5jdGlvbnMgdGhhdCB3ZXJlIG1vZGlmaWVkLiBGcm9tIHRoYXQsIEkndmUgc2VsZWN0ZWQgYSBzZXQgb2YgZm9jdXMgc3ltYm9scyB0aGF0IHNlZW0gaW50ZXJlc3RpbmcgZnJvbSBhIGZ1enppbmcgcGVyc3BlY3RpdmU6IGBhZnNfZGlyX2l0ZXJhdGVfYmxvY2tgLCBgYWZzX2xvb2t1cF9vbmVfZmlsbGRpcmAsIGBhZnNfbG9va3VwX2ZpbGxkaXJgLCBgYWZzX2V4dHJhY3RfdmxfYWRkcnNgLCBgYWZzX2V4dHJhY3RfdmxzZXJ2ZXJfbGlzdGAsIGBhZnNfZGVsaXZlcl9jYl9pbml0X2NhbGxfYmFja19zdGF0ZTNgLCBgYWZzX2RlbGl2ZXJfY2JfcHJvYmVfdXVpZGAsIGBhZnNfaW5vZGVfaW5pdF9mcm9tX3N0YXR1c2AsIGFuZCBgYWZzX2xvb2t1cF9jZWxsYC5cblxuTm93LCBkaWdnaW5nIGEgYml0IGRlZXBlciwgSSBuZWVkIHRvIGNoZWNrIHRoZSBzY29wZSBvZiB0aGVzZSBmdW5jdGlvbnMgdG8gdW5kZXJzdGFuZCBob3cgdGhleSdyZSB1c2VkLiBJIG5vdGljZWQgdGhhdCBgYWZzX2xvb2t1cF9vbmVfZmlsbGRpcmAsIGBhZnNfbG9va3VwX2ZpbGxkaXJgLCBhbmQgYGFmc19kaXJfaXRlcmF0ZV9ibG9ja2AgYXJlIHN0YXRpYyBmdW5jdGlvbnMsIHdoaWNoIHVzdWFsbHkgaW5kaWNhdGVzIHRoZXkgYXJlIGNhbGxiYWNrcywgdXNlZCBsb2NhbGx5IGFuZCBwb3RlbnRpYWxseSBoYW5kbGluZyBkYXRhIG1hbmlwdWxhdGlvbi4gYGFmc19leHRyYWN0X3Zsc2VydmVyX2xpc3RgIGFuZCBgYWZzX2xvb2t1cF9jZWxsYCBzZWVtIHRvIGJlIGdsb2JhbCwgaW1wbHlpbmcgdGhleSdyZSBwYXJ0IG9mIHRoZSBjb3JlIGZ1bmN0aW9uYWxpdHksIHRoZSBmb3JtZXIgcmVzcG9uc2libGUgZm9yIFZMIHNlcnZlciBtYW5hZ2VtZW50LiAgYGFmc19leHRyYWN0X3ZsX2FkZHJzYCBhbmQgYGFmc19pbm9kZV9pbml0X2Zyb21fc3RhdHVzYCBhcmUgc3RhdGljLCBhbHNvIGxpa2VseSBjYWxsZWQgd2l0aGluIHRoZSBmaWxlc3lzdGVtJ3MgaW50ZXJuYWwgbG9naWMuXG5cblRoZSBuZXh0IHN0ZXAgaXMgdG8gZXhhbWluZSBob3cgdGhlc2UgZnVuY3Rpb25zIGFyZSByZWFjaGVkIHdpdGhpbiB0aGUgQUZTIGNvZGViYXNlLiBTaW5jZSB0aGlzIGlzIGEgZmlsZXN5c3RlbSwgdGhlIGludGVyZmFjZSB0byB0aGUgZmlsZSBzeXN0ZW0gd291bGQgYmUgdGhlIHByaW1lIHRhcmdldHMuIEkgbmVlZCB0byBkZXRlcm1pbmUgaG93IHRoZXNlIGZ1bmN0aW9ucyBhcmUgcmVhY2hhYmxlIHRocm91Z2ggdGhlIHN5c3RlbSBjYWxscyB0aGF0IHN5emthbGxlciB3b3VsZCBleHBvc2UgdG8gdGhlIGZ1enplci4gQUZTIGlzIGEgbmV0d29yayBmaWxlc3lzdGVtLCBzbyBpdCdzIGEgZ29vZCBjYW5kaWRhdGUgZm9yIGZ1enppbmcuXG5cbk15IGltbWVkaWF0ZSBuZXh0IHN0ZXBzIGFyZSB0byB2ZXJpZnkgdGhlIHJvbGVzIG9mIGBhZnNfZXh0cmFjdF92bF9hZGRyc2AgYW5kIGBhZnNfZXh0cmFjdF92bHNlcnZlcl9saXN0YCBpbiBtb3JlIGRldGFpbC4gVGhlc2UgdHdvIGZ1bmN0aW9uIG5hbWVzIHNlZW0gdG8gYmUgaW52b2x2ZWQgd2l0aCB0aGUgYWRkcmVzcyBhbmQgc2VydmVyIGxpc3RzLCBib3RoIG9mIHdoaWNoIGFyZSBjZW50cmFsIHRvIG5ldHdvcmstZmlsZXN5c3RlbSBmdW5jdGlvbi4gSSBhbHNvIG5lZWQgdG8gdmVyaWZ5IHRoZSByZWFjaGFiaWxpdHkgb2YgdGhlIG90aGVyIGZvY3VzIHN5bWJvbHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNjY5LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjM4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIyVDA5OjI3OjI5LjIxMTEzNjUzMVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzE3NDE1MDYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYWZzX2V4dHJhY3RfdmxfYWRkcnNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvYWZzL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9hZnMvdmxfbGlzdC5jPTc3PXN0YXRpYyB1MTYgYWZzX2V4dHJhY3RfbGUxNihjb25zdCB1OCAqKl9iKVxcbi0tXFxuZnMvYWZzL3ZsX2xpc3QuYy04OC0gKi9cXG5mcy9hZnMvdmxfbGlzdC5jOjg5OnN0YXRpYyBzdHJ1Y3QgYWZzX2FkZHJfbGlzdCAqYWZzX2V4dHJhY3RfdmxfYWRkcnMoc3RydWN0IGFmc19uZXQgKm5ldCxcXG5mcy9hZnMvdmxfbGlzdC5jLTkwLVxcdFxcdFxcdFxcdFxcdFxcdCAgY29uc3QgdTggKipfYiwgY29uc3QgdTggKmVuZCxcXG4tLVxcbmZzL2Fmcy92bF9saXN0LmM9MTYwPXN0cnVjdCBhZnNfdmxzZXJ2ZXJfbGlzdCAqYWZzX2V4dHJhY3RfdmxzZXJ2ZXJfbGlzdChzdHJ1Y3QgYWZzX2NlbGwgKmNlbGwsXFxuLS1cXG5mcy9hZnMvdmxfbGlzdC5jLTI2My1cXHRcXHQgKi9cXG5mcy9hZnMvdmxfbGlzdC5jOjI2NDpcXHRcXHRhZGRycyA9IGFmc19leHRyYWN0X3ZsX2FkZHJzKGNlbGwtXFx1MDAzZW5ldCwgXFx1MDAyNmIsIGVuZCwgYnMubnJfYWRkcnMsIGJzLnBvcnQpO1xcbmZzL2Fmcy92bF9saXN0LmMtMjY1LVxcdFxcdGlmIChJU19FUlIoYWRkcnMpKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIyVDA5OjI3OjI5LjM4Mjg4NDY3N1oiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQwNTEyNzAwMTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKlZlcmlmeWluZyBgYWZzX2RlbGl2ZXJfY2JfaW5pdF9jYWxsX2JhY2tfc3RhdGUzYCoqXG5cbkFscmlnaHQsIGxldCdzIHplcm8gaW4gb24gdGhpcyBgYWZzX2RlbGl2ZXJfY2JfaW5pdF9jYWxsX2JhY2tfc3RhdGUzYC4gU2VlbXMgbGlrZSB3ZSdyZSBkaXZpbmcgaW50byB0aGUgY2FsbGJhY2sgaW5pdGlhbGl6YXRpb24gc3RhdGUgZm9yIHRoZSBgYWZzX2RlbGl2ZXJgIGNvbXBvbmVudC4gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gY29uZmlybSBpdHMgcHVycG9zZSB3aXRoaW4gdGhlIG92ZXJhbGwgYGFmc2AgYXJjaGl0ZWN0dXJlLiBJcyB0aGlzIHRoZSB0aGlyZCBzdGF0ZSBpbiBhIGRlZmluZWQgc2VxdWVuY2U/IElzIGl0IGhhbmRsaW5nIHRoZSBzdGF0ZSB0cmFuc2l0aW9uIG9yIHRoZSBzdGF0ZSBpbml0aWF0aW9uLCBhbmQgaG93PyBJIG5lZWQgdG8gcXVpY2tseSByZWNhbGwgdGhlIHR5cGljYWwgY2FsbCBmbG93IGluIHRoaXMgYXJlYTsgaXMgYGFmc19kZWxpdmVyYCB0aGUgc291cmNlIG9mIHRoZSBtZXNzYWdlIG9yIHRoZSBjb25zdW1lcj8gV2hhdCBpcyBpdCByZXNwb25zaWJsZSBmb3IgZGVsaXZlcmluZz9cblxuTGV0IG1lIHJldmlldyB0aGUgY29udGV4dCBhcm91bmQgdGhpcyBmdW5jdGlvbiBpbiByZWxhdGlvbiB0byBvdGhlciBgYWZzX2RlbGl2ZXJfY2JfYCBmdW5jdGlvbnMuIFdoYXQgYXJlIHRoZSBkZXBlbmRlbmNpZXM/IEFyZSB3ZSBsb29raW5nIGF0IGEgc3RhdGUgbWFjaGluZSwgYSBzaW1wbGUgY29uZGl0aW9uYWwsIG9yIHNvbWV0aGluZyBtb3JlIGNvbXBsZXg/IEkgbmVlZCB0byB0aGluayBhYm91dCBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zLiBXaGF0IGhhcHBlbnMgaWYgbXVsdGlwbGUgdGhyZWFkcyBhdHRlbXB0IHRvIGluaXRpYWxpemUgdGhpcyBjYWxsYmFjayBzdGF0ZSBjb25jdXJyZW50bHk/IFdoYXQgYXJlIHRoZSBpbXBsaWNhdGlvbnMgaWYgYSBtZXNzYWdlIGFycml2ZXMgYmVmb3JlIGluaXRpYWxpemF0aW9uIGlzIGNvbXBsZXRlPyBUaGlzIGluaXRpYWxpemF0aW9uIG5lZWRzIHRvIGJlIHRocmVhZCBzYWZlIHRvIGF2b2lkIGNvcnJ1cHRpb24gaXNzdWVzLlxuXG5NeSBpbW1lZGlhdGUgZm9jdXMgaXMgb24gZW5zdXJpbmcgdGhlIGNvcnJlY3QgZnVuY3Rpb24gaXMgY2FsbGVkLCB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGFyZSBwcm9wZXJseSBpbml0aWFsaXplZCwgYW5kIGFueSBuZWNlc3NhcnkgbG9ja3MgYXJlIGFjcXVpcmVkIGFuZCByZWxlYXNlZCBhcHByb3ByaWF0ZWx5LiBBbnkgbWVtb3J5IGFsbG9jYXRpb24gaW52b2x2ZWQ/IEkgbmVlZCB0byBjb25maXJtIHByb3BlciBlcnJvciBoYW5kbGluZyDigJMgd2hhdCBhcmUgdGhlIGZhaWx1cmUgbW9kZXMgYW5kIGhvdyBhcmUgdGhleSBoYW5kbGVkPyBEZWJ1Z2dpbmcgdGhpcyBraW5kIG9mIHRoaW5nIGNhbiBiZSB0ZWRpb3VzLCBzbyBJIHdhbnQgdG8gY29uc2lkZXIgYW55IHBvdGVudGlhbCBjb3JuZXIgY2FzZXMgdXBmcm9udC4gTGV0J3Mgc2VlIGlmIHRoZXJlIGFyZSBhbnkgZXhpc3RpbmcgdW5pdCB0ZXN0cyBmb3IgdGhpcyBhcmVhIG9yIHNvbWV0aGluZyBJIGNhbiBhZGFwdC4gVGltZSB0byBzdGFydCBkaWdnaW5nIVxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjExNywiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIyVDA5OjI3OjMzLjQzNDE1ODU5NVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTEzODkyNzA4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImFmc19kZWxpdmVyX2NiX2luaXRfY2FsbF9iYWNrX3N0YXRlM1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9hZnMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2Fmcy9jbXNlcnZpY2UuYz0xOT1zdGF0aWMgaW50IGFmc19kZWxpdmVyX2NiX2luaXRfY2FsbF9iYWNrX3N0YXRlKHN0cnVjdCBhZnNfY2FsbCAqKTtcXG5mcy9hZnMvY21zZXJ2aWNlLmM6MjA6c3RhdGljIGludCBhZnNfZGVsaXZlcl9jYl9pbml0X2NhbGxfYmFja19zdGF0ZTMoc3RydWN0IGFmc19jYWxsICopO1xcbmZzL2Fmcy9jbXNlcnZpY2UuYy0yMS1zdGF0aWMgaW50IGFmc19kZWxpdmVyX2NiX3Byb2JlKHN0cnVjdCBhZnNfY2FsbCAqKTtcXG4tLVxcbmZzL2Fmcy9jbXNlcnZpY2UuYz01Nz1zdGF0aWMgY29uc3Qgc3RydWN0IGFmc19jYWxsX3R5cGUgYWZzX1NSWENCSW5pdENhbGxCYWNrU3RhdGUzID0ge1xcbmZzL2Fmcy9jbXNlcnZpY2UuYy01OC1cXHQubmFtZVxcdFxcdD0gXFxcIkNCLkluaXRDYWxsQmFja1N0YXRlM1xcXCIsXFxuZnMvYWZzL2Ntc2VydmljZS5jOjU5OlxcdC5kZWxpdmVyXFx0PSBhZnNfZGVsaXZlcl9jYl9pbml0X2NhbGxfYmFja19zdGF0ZTMsXFxuZnMvYWZzL2Ntc2VydmljZS5jLTYwLVxcdC5kZXN0cnVjdG9yXFx0PSBhZnNfY21fZGVzdHJ1Y3RvcixcXG4tLVxcbmZzL2Fmcy9jbXNlcnZpY2UuYz0zMDM9c3RhdGljIGludCBhZnNfZGVsaXZlcl9jYl9pbml0X2NhbGxfYmFja19zdGF0ZShzdHJ1Y3QgYWZzX2NhbGwgKmNhbGwpXFxuLS1cXG5mcy9hZnMvY21zZXJ2aWNlLmMtMzEzLSAqL1xcbmZzL2Fmcy9jbXNlcnZpY2UuYzozMTQ6c3RhdGljIGludCBhZnNfZGVsaXZlcl9jYl9pbml0X2NhbGxfYmFja19zdGF0ZTMoc3RydWN0IGFmc19jYWxsICpjYWxsKVxcbmZzL2Fmcy9jbXNlcnZpY2UuYy0zMTUte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yMlQwOToyNzozMy41NDgwNjQyNzNaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDU2NDU1MzM4NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqVmVyaWZ5aW5nIGBhZnNfZGVsaXZlcl9jYl9wcm9iZV91dWlkYCoqXG5cbkFscmlnaHQsIGxldCdzIHplcm8gaW4gb24gYGFmc19kZWxpdmVyX2NiX3Byb2JlX3V1aWRgLiBTb3VuZHMgbGlrZSB3ZSdyZSBkaXZpbmcgaW50byB0aGUgY2FsbGJhY2sgbWVjaGFuaXNtIGZvciBhbiBBRlMgZGVsaXZlciBvcGVyYXRpb24sIGFuZCBzcGVjaWZpY2FsbHksIHdlJ3JlIHByb2JpbmcgZm9yIGEgVVVJRCDigJMgYSB1bml2ZXJzYWxseSB1bmlxdWUgaWRlbnRpZmllci4gVGhlIGZhY3QgdGhhdCB3ZSdyZSBwcm9iaW5nIHN1Z2dlc3RzIHRoaXMgVVVJRCBpcyBjcml0aWNhbCB0byB0aGUgc3VjY2Vzc2Z1bCBjb21wbGV0aW9uIG9yIHRyYWNraW5nIG9mIGEgY2FsbGJhY2sgb3BlcmF0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCAqd2h5KiB0aGlzIHNwZWNpZmljIGZ1bmN0aW9uIG5lZWRzIHZlcmlmaWNhdGlvbi5cblxuTXkgbWluZCBpbW1lZGlhdGVseSBzdGFydHMgdGlja2luZyB0aHJvdWdoIHBvdGVudGlhbCByZWFzb25zLiBJcyB0aGVyZSBhIHJhY2UgY29uZGl0aW9uPyBBcmUgd2Ugc2VlaW5nIGluY29uc2lzdGVudCBVVUlEcyBhY3Jvc3MgZGlmZmVyZW50IHN5c3RlbXMgb3IgcHJvY2Vzc2VzPyBJcyB0aGlzIHByb2JlIHBhcnQgb2YgYSBsYXJnZXIgZGVidWdnaW5nIG9yIHRyYWNpbmcgZnJhbWV3b3JrIHdpdGhpbiBBRlM/IElzIGBhZnNfZGVsaXZlcl9jYl9wcm9iZV91dWlkYCBzb21laG93IGJlaW5nIGNhbGxlZCBpbiBhIHdheSBpdCBzaG91bGRuJ3Q/IFBlcmhhcHMgdGhlcmUncyBhIHNlY3VyaXR5IHZ1bG5lcmFiaWxpdHkgdGllZCB0byBpbXByb3BlciBVVUlEIGhhbmRsaW5nIGR1cmluZyBjYWxsYmFja3MsIGEgcG90ZW50aWFsIHZlY3RvciBmb3IgY29tcHJvbWlzZS5cblxuSSdkIHdhbnQgdG8gY2hlY2sgc2V2ZXJhbCB0aGluZ3MgcmlnaHQgYXdheS4gSSdkIG5lZWQgdG8gdHJhY2UgdGhlIGNhbGwgcGF0aHMgdG8gYGFmc19kZWxpdmVyX2NiX3Byb2JlX3V1aWRgIHRvIHNlZSBob3cgaXQncyBiZWluZyBpbnZva2VkLiBBcmUgd2UgaGFuZGxpbmcgbXVsdGlwbGUgcmVxdWVzdHMgaW4gcGFyYWxsZWw/IElzIHRoZXJlIGFueSBzaGFyZWQgc3RhdGUgdGhhdCBjb3VsZCBiZSBjb3JydXB0ZWQ/IEEgcXVpY2sgY29kZSByZXZpZXcgb2YgdGhpcyBmdW5jdGlvbiBhbmQgYW55IHJlbGF0ZWQgc3RydWN0dXJlcyB3aWxsIGJlIGtleS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGRhdGEgZmxvdywgdGhlIGV4cGVjdGVkIHZhbHVlcywgYW5kIHdoYXQgY29uc3RpdHV0ZXMgYSBcInZhbGlkXCIgVVVJRCBpbiB0aGlzIGNvbnRleHQuXG5cbkJhc2VkIG9uIHRoZSBzdXJyb3VuZGluZyBjb2RlLCBjb250ZXh0LCBhbmQgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcywgdGhpcyBwcm9iZSBpcyBsaWtlbHkgYmVpbmcgaW1wbGVtZW50ZWQgdG8gYWRkcmVzcyBhIHNwZWNpZmljIGlzc3VlLCBvciB0byB2ZXJpZnkgcHJvcGVyIG9wZXJhdGlvbi4gTGV0J3MgZGlnIGluLCBhbmQgc2VlIHdoYXQgdGhlIGNvZGUgcmV2ZWFscy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI4ODAsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yMlQwOToyNzozOC4xMTI2MjEyMThaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyNDQzMzUyNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhZnNfZGVsaXZlcl9jYl9wcm9iZV91dWlkXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL2Fmcy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvYWZzL2Ntc2VydmljZS5jPTIyPXN0YXRpYyBpbnQgYWZzX2RlbGl2ZXJfY2JfY2FsbGJhY2soc3RydWN0IGFmc19jYWxsICopO1xcbmZzL2Fmcy9jbXNlcnZpY2UuYzoyMzpzdGF0aWMgaW50IGFmc19kZWxpdmVyX2NiX3Byb2JlX3V1aWQoc3RydWN0IGFmc19jYWxsICopO1xcbmZzL2Fmcy9jbXNlcnZpY2UuYy0yNC1zdGF0aWMgaW50IGFmc19kZWxpdmVyX2NiX3RlbGxfbWVfYWJvdXRfeW91cnNlbGYoc3RydWN0IGFmc19jYWxsICopO1xcbi0tXFxuZnMvYWZzL2Ntc2VydmljZS5jPTc3PXN0YXRpYyBjb25zdCBzdHJ1Y3QgYWZzX2NhbGxfdHlwZSBhZnNfU1JYQ0JQcm9iZVV1aWQgPSB7XFxuZnMvYWZzL2Ntc2VydmljZS5jLTc4LVxcdC5uYW1lXFx0XFx0PSBcXFwiQ0IuUHJvYmVVdWlkXFxcIixcXG5mcy9hZnMvY21zZXJ2aWNlLmM6Nzk6XFx0LmRlbGl2ZXJcXHQ9IGFmc19kZWxpdmVyX2NiX3Byb2JlX3V1aWQsXFxuZnMvYWZzL2Ntc2VydmljZS5jLTgwLVxcdC5kZXN0cnVjdG9yXFx0PSBhZnNfY21fZGVzdHJ1Y3RvcixcXG4tLVxcbmZzL2Fmcy9jbXNlcnZpY2UuYz00MTY9c3RhdGljIHZvaWQgU1JYQUZTQ0JfUHJvYmVVdWlkKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4tLVxcbmZzL2Fmcy9jbXNlcnZpY2UuYy00MzQtICovXFxuZnMvYWZzL2Ntc2VydmljZS5jOjQzNTpzdGF0aWMgaW50IGFmc19kZWxpdmVyX2NiX3Byb2JlX3V1aWQoc3RydWN0IGFmc19jYWxsICpjYWxsKVxcbmZzL2Fmcy9jbXNlcnZpY2UuYy00MzYte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yMlQwOToyNzozOC4yMzcwNjcyMTVaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDYzNzg0MzkzNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipWZXJpZnlpbmcgYGFmc19pbm9kZV9pbml0X2Zyb21fc3RhdHVzYCoqXG5cbk9rYXksIHRpbWUgdG8gZGl2ZSBpbnRvIGBhZnNfaW5vZGVfaW5pdF9mcm9tX3N0YXR1c2AuIEkgbmVlZCB0byBlbnN1cmUgdGhpcyBmdW5jdGlvbiBpcyBiZWhhdmluZyBhcyBleHBlY3RlZCwgcGFydGljdWxhcmx5IGluIGVkZ2UgY2FzZXMgYW5kIHVuZGVyIHN0cmVzcy4gTGV0J3Mgc2VlLi4uIHdoYXQgYXJlIHRoZSBjcml0aWNhbCBpbnZhcmlhbnRzIGl0IG5lZWRzIHRvIG1haW50YWluPyBJdCdzIHJlc3BvbnNpYmxlIGZvciBpbml0aWFsaXppbmcgYW4gYGlub2RlYCBzdHJ1Y3R1cmUgYmFzZWQgb24gc29tZSBleHRlcm5hbCBzdGF0dXMgaW5mb3JtYXRpb24sIGxpa2VseSBmZXRjaGVkIGZyb20gdGhlIEFGUyBzZXJ2ZXIsIHJpZ2h0PyBTbywgSSBuZWVkIHRvIGxvb2sgZm9yIHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXMgaW4gdGhlIHdheSB0aGUgc3RhdHVzIGRhdGEgaXMgbWFwcGVkIHRvIHRoZSBpbnRlcm5hbCBpbm9kZSBmaWVsZHMuIEFyZSB0aGVyZSBhbnkgdW5jaGVja2VkIGFzc3VtcHRpb25zIGFib3V0IGRhdGEgc2l6ZXMgb3IgZm9ybWF0cz8gQXJlIHdlIGhhbmRsaW5nIGVycm9ycyBmcm9tIHRoZSBzdGF0dXMgc291cmNlIGdyYWNlZnVsbHk/IEknbSB0aGlua2luZyBhYm91dCBwb3RlbnRpYWwgaW50ZWdlciBvdmVyZmxvd3MsIGJ1ZmZlciBvdmVyZmxvd3MgaWYgdGhlIHN0YXR1cyBkYXRhIGlzIG1hbGZvcm1lZCwgYW5kIHJhY2UgY29uZGl0aW9ucyBpZiB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBjb25jdXJyZW50bHkuIEknbGwgbmVlZCB0byB0cmFjZSB0aGUgZGF0YSBmbG93IGZyb20gdGhlIHBvaW50IHdoZXJlIHRoZSBzdGF0dXMgaXMgcmVjZWl2ZWQsIHRocm91Z2ggdGhpcyBmdW5jdGlvbiwgYW5kIHRoZW4gZG93bnN0cmVhbSB0byBhbnkgY29uc3VtZXIgb2YgdGhlIGlub2RlIGRhdGEuIEknbGwgYWxzbyBiZSBsb29raW5nIGF0IHRoZSBlcnJvciBoYW5kbGluZyBhbmQgbWFraW5nIHN1cmUgYW55IGZhaWx1cmVzIGFyZSByZXBvcnRlZCBhcHByb3ByaWF0ZWx5LCBwb3NzaWJseSBsb2dnaW5nIGVycm9ycyBvciByZXR1cm5pbmcgZmFpbHVyZSBjb2Rlcy4gRXNzZW50aWFsbHksIEknbSB0aGlua2luZywgdGhpcyBuZWVkcyB0byBiZSBhIHJvYnVzdCwgZmF1bHQtdG9sZXJhbnQgZnVuY3Rpb24gdGhhdCBjYW4gaGFuZGxlIGEgdmFyaWV0eSBvZiBwb3RlbnRpYWxseSBob3N0aWxlIGlucHV0cy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM2MDgsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yMlQwOToyNzo0Mi44NzQ5MjQ3NzlaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExNTA1MDU5OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhZnNfaW5vZGVfaW5pdF9mcm9tX3N0YXR1c1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9hZnMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2Fmcy9pbm9kZS5jPTU1PXN0YXRpYyB2b2lkIGFmc19zZXRfbmV0ZnNfY29udGV4dChzdHJ1Y3QgYWZzX3Zub2RlICp2bm9kZSwgYm9vbCBpc19maWxlKVxcbi0tXFxuZnMvYWZzL2lub2RlLmMtNjItICovXFxuZnMvYWZzL2lub2RlLmM6NjM6c3RhdGljIGludCBhZnNfaW5vZGVfaW5pdF9mcm9tX3N0YXR1cyhzdHJ1Y3QgYWZzX29wZXJhdGlvbiAqb3AsXFxuZnMvYWZzL2lub2RlLmMtNjQtXFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IGFmc192bm9kZV9wYXJhbSAqdnAsXFxuLS1cXG5mcy9hZnMvaW5vZGUuYz0zNDY9c3RhdGljIHZvaWQgYWZzX2ZldGNoX3N0YXR1c19zdWNjZXNzKHN0cnVjdCBhZnNfb3BlcmF0aW9uICpvcClcXG4tLVxcbmZzL2Fmcy9pbm9kZS5jLTM1Mi1cXHRpZiAoaW5vZGVfc3RhdGVfcmVhZF9vbmNlKFxcdTAwMjZ2bm9kZS1cXHUwMDNlbmV0ZnMuaW5vZGUpIFxcdTAwMjYgSV9ORVcpIHtcXG5mcy9hZnMvaW5vZGUuYzozNTM6XFx0XFx0cmV0ID0gYWZzX2lub2RlX2luaXRfZnJvbV9zdGF0dXMob3AsIHZwLCB2bm9kZSk7XFxuZnMvYWZzL2lub2RlLmMtMzU0LVxcdFxcdGFmc19vcF9zZXRfZXJyb3Iob3AsIHJldCk7XFxuLS1cXG5mcy9hZnMvaW5vZGUuYz00ODI9c3RydWN0IGlub2RlICphZnNfaWdldChzdHJ1Y3QgYWZzX29wZXJhdGlvbiAqb3AsIHN0cnVjdCBhZnNfdm5vZGVfcGFyYW0gKnZwKVxcbi0tXFxuZnMvYWZzL2lub2RlLmMtNTA4LVxcbmZzL2Fmcy9pbm9kZS5jOjUwOTpcXHRyZXQgPSBhZnNfaW5vZGVfaW5pdF9mcm9tX3N0YXR1cyhvcCwgdnAsIHZub2RlKTtcXG5mcy9hZnMvaW5vZGUuYy01MTAtXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIyVDA5OjI3OjQyLjk4OTk4NDkyNloiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjk3NTU3MzI3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgc3VtbWFyaXphdGlvbiwgYXNzdW1pbmcgSSdtIGFuIGV4cGVydCBhbmQgdGhpcyBpcyBhIGRlZXAgZGl2ZTpcblxuKipWZXJpZnlpbmcgYGFmc19sb29rdXBfY2VsbGAgLSBBIERlZXAgRGl2ZSoqXG5cbkFscmlnaHQsIHRpbWUgdG8gZGlnIGludG8gYGFmc19sb29rdXBfY2VsbGAuIExldCdzIGNvbmZpcm0gZXZlcnl0aGluZydzIHdvcmtpbmcgYXMgZXhwZWN0ZWQuIFRoZXJlIGFyZSBzZXZlcmFsIGZhY2V0cyB0byBpdHMgZnVuY3Rpb25hbGl0eSBJIG5lZWQgdG8gc2NydXRpbml6ZS4gV2hhdCBhcmUgdGhlIGtleSBhc3N1bXB0aW9ucyB0aGlzIGZ1bmN0aW9uIG1ha2VzPyBIb3cgZG9lcyBpdCBoYW5kbGUgcG90ZW50aWFsIGVycm9ycywgYW5kIHdoYXQgYXJlIHRoZSBjb3JuZXIgY2FzZXMgSSBuZWVkIHRvIHRlc3QgdGhvcm91Z2hseT8gSXMgdGhlIGNvZGUgY2xlYW4gYW5kIGVhc2lseSB1bmRlcnN0YW5kYWJsZT8gVGhhdCdzIGFsd2F5cyBhIGNyaXRpY2FsIGZhY3Rvci4gTm93LCBsZXQncyBzdGVwIHRocm91Z2ggaXQgbG9naWNhbGx5LCBsaW5lIGJ5IGxpbmUsIHRvIGNoZWNrIGZvciBhbnkgb2J2aW91cyB2dWxuZXJhYmlsaXRpZXMgb3Igb3Bwb3J0dW5pdGllcyBmb3Igb3B0aW1pemF0aW9uLiBJIHdhbnQgdG8gc2VlIGhvdyByb2J1c3QgdGhpcyBjb2RlIHRydWx5IGlzLiBXaGF0J3MgdGhlIGltcGFjdCBvbiBwZXJmb3JtYW5jZT8gQ2FuIHRoaXMgcG90ZW50aWFsbHkgYmVjb21lIGEgYm90dGxlbmVjayB1bmRlciBoZWF2eSBsb2FkPyBMZXQncyBmb3JtdWxhdGUgYSBjaGVja2xpc3Qgb2YgdGVzdHMsIGluY2x1ZGluZyBib3RoIHBvc2l0aXZlIGFuZCBuZWdhdGl2ZSBzY2VuYXJpb3MsIGFuZCBtYWtlIHN1cmUgdG8gdmFsaWRhdGUgdGhlIGV4cGVjdGVkIG91dHB1dHMuIEkgbmVlZCB0byBiZSBjZXJ0YWluIHRoYXQgdGhlIGxvZ2ljLCBlcnJvciBoYW5kbGluZywgYW5kIHBlcmZvcm1hbmNlIGFyZSBhbGwgdXAgdG8gcGFyLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDI5NiwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIyVDA5OjI3OjQ2LjY4NzU0NTM2M1oiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTMzMzYzMjQ2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImFmc19sb29rdXBfY2VsbFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9hZnMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2Fmcy9jZWxsLmM9MTA4PXN0YXRpYyBzdHJ1Y3QgYWZzX2NlbGwgKmFmc19hbGxvY19jZWxsKHN0cnVjdCBhZnNfbmV0ICpuZXQsXFxuLS1cXG5mcy9hZnMvY2VsbC5jLTIyNy0vKlxcbmZzL2Fmcy9jZWxsLmM6MjI4OiAqIGFmc19sb29rdXBfY2VsbCAtIExvb2sgdXAgb3IgY3JlYXRlIGEgY2VsbCByZWNvcmQuXFxuZnMvYWZzL2NlbGwuYy0yMjktICogQG5ldDpcXHRUaGUgbmV0d29yayBuYW1lc3BhY2VcXG4tLVxcbmZzL2Fmcy9jZWxsLmMtMjQwLSAqL1xcbmZzL2Fmcy9jZWxsLmM6MjQxOnN0cnVjdCBhZnNfY2VsbCAqYWZzX2xvb2t1cF9jZWxsKHN0cnVjdCBhZnNfbmV0ICpuZXQsXFxuZnMvYWZzL2NlbGwuYy0yNDItXFx0XFx0XFx0XFx0IGNvbnN0IGNoYXIgKm5hbWUsIHVuc2lnbmVkIGludCBuYW1lc3osXFxuZnMvYWZzL2NlbGwuYy0yNDMtXFx0XFx0XFx0XFx0IGNvbnN0IGNoYXIgKnZsbGlzdCxcXG5mcy9hZnMvY2VsbC5jOjI0NDpcXHRcXHRcXHRcXHQgZW51bSBhZnNfbG9va3VwX2NlbGxfZm9yIHJlYXNvbixcXG5mcy9hZnMvY2VsbC5jLTI0NS1cXHRcXHRcXHRcXHQgZW51bSBhZnNfY2VsbF90cmFjZSB0cmFjZSlcXG4tLVxcbmZzL2Fmcy9jZWxsLmM9NDE1PWludCBhZnNfY2VsbF9pbml0KHN0cnVjdCBhZnNfbmV0ICpuZXQsIGNvbnN0IGNoYXIgKnJvb3RjZWxsKVxcbi0tXFxuZnMvYWZzL2NlbGwuYy00NDktXFx0LyogYWxsb2NhdGUgYSBjZWxsIHJlY29yZCBmb3IgdGhlIHJvb3Qvd29ya3N0YXRpb24gY2VsbCAqL1xcbmZzL2Fmcy9jZWxsLmM6NDUwOlxcdG5ld19yb290ID0gYWZzX2xvb2t1cF9jZWxsKG5ldCwgcm9vdGNlbGwsIGxlbiwgdmxsaXN0LFxcbmZzL2Fmcy9jZWxsLmMtNDUxLVxcdFxcdFxcdFxcdCAgIEFGU19MT09LVVBfQ0VMTF9ST09UQ0VMTCxcXG4tLVxcbmZzL2Fmcy9keW5yb290LmM9OTM9c3RhdGljIHN0cnVjdCBkZW50cnkgKmFmc19keW5yb290X2xvb2t1cF9jZWxsKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXFxuLS1cXG5mcy9hZnMvZHlucm9vdC5jLTExMC1cXG5mcy9hZnMvZHlucm9vdC5jOjExMTpcXHRjZWxsID0gYWZzX2xvb2t1cF9jZWxsKG5ldCwgbmFtZSwgbGVuLCBOVUxMLFxcbmZzL2Fmcy9keW5yb290LmMtMTEyLVxcdFxcdFxcdCAgICAgICBBRlNfTE9PS1VQX0NFTExfRFlOUk9PVCxcXG4tLVxcbmZzL2Fmcy9pbnRlcm5hbC5oPTEwNjA9ZXh0ZXJuIHN0cnVjdCBhZnNfY2VsbCAqYWZzX2ZpbmRfY2VsbChzdHJ1Y3QgYWZzX25ldCAqLCBjb25zdCBjaGFyICosIHVuc2lnbmVkLFxcbmZzL2Fmcy9pbnRlcm5hbC5oLTEwNjEtXFx0XFx0XFx0XFx0ICAgICAgZW51bSBhZnNfY2VsbF90cmFjZSk7XFxuZnMvYWZzL2ludGVybmFsLmg6MTA2MjplbnVtIGFmc19sb29rdXBfY2VsbF9mb3Ige1xcbmZzL2Fmcy9pbnRlcm5hbC5oLTEwNjMtXFx0QUZTX0xPT0tVUF9DRUxMX0RZTlJPT1QsXFxuLS1cXG5mcy9hZnMvaW50ZXJuYWwuaC0xMDY5LX07XFxuZnMvYWZzL2ludGVybmFsLmg6MTA3MDpzdHJ1Y3QgYWZzX2NlbGwgKmFmc19sb29rdXBfY2VsbChzdHJ1Y3QgYWZzX25ldCAqbmV0LFxcbmZzL2Fmcy9pbnRlcm5hbC5oLTEwNzEtXFx0XFx0XFx0XFx0IGNvbnN0IGNoYXIgKm5hbWUsIHVuc2lnbmVkIGludCBuYW1lc3osXFxuZnMvYWZzL2ludGVybmFsLmgtMTA3Mi1cXHRcXHRcXHRcXHQgY29uc3QgY2hhciAqdmxsaXN0LFxcbmZzL2Fmcy9pbnRlcm5hbC5oOjEwNzM6XFx0XFx0XFx0XFx0IGVudW0gYWZzX2xvb2t1cF9jZWxsX2ZvciByZWFzb24sXFxuZnMvYWZzL2ludGVybmFsLmgtMTA3NC1cXHRcXHRcXHRcXHQgZW51bSBhZnNfY2VsbF90cmFjZSB0cmFjZSk7XFxuLS1cXG5mcy9hZnMvbW50cHQuYz03MT1zdGF0aWMgaW50IGFmc19tbnRwdF9zZXRfcGFyYW1zKHN0cnVjdCBmc19jb250ZXh0ICpmYywgc3RydWN0IGRlbnRyeSAqbW50cHQpXFxuLS1cXG5mcy9hZnMvbW50cHQuYy0xMDktXFxuZnMvYWZzL21udHB0LmM6MTEwOlxcdFxcdGNlbGwgPSBhZnNfbG9va3VwX2NlbGwoY3R4LVxcdTAwM2VuZXQsIHAsIHNpemUsIE5VTEwsXFxuZnMvYWZzL21udHB0LmMtMTExLVxcdFxcdFxcdFxcdCAgICAgICBBRlNfTE9PS1VQX0NFTExfTU9VTlRQT0lOVCxcXG4tLVxcbmZzL2Fmcy9wcm9jLmM9ODg9c3RhdGljIGludCBhZnNfcHJvY19jZWxsc193cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciAqYnVmLCBzaXplX3Qgc2l6ZSlcXG4tLVxcbmZzL2Fmcy9wcm9jLmMtMTI0LVxcbmZzL2Fmcy9wcm9jLmM6MTI1OlxcdFxcdGNlbGwgPSBhZnNfbG9va3VwX2NlbGwobmV0LCBuYW1lLCBzdHJsZW4obmFtZSksIGFyZ3MsXFxuZnMvYWZzL3Byb2MuYy0xMjYtXFx0XFx0XFx0XFx0ICAgICAgIEFGU19MT09LVVBfQ0VMTF9QUkVMT0FELFxcbi0tXFxuZnMvYWZzL3N1cGVyLmM9MjIzPXN0YXRpYyBpbnQgYWZzX3BhcnNlX3NvdXJjZShzdHJ1Y3QgZnNfY29udGV4dCAqZmMsIHN0cnVjdCBmc19wYXJhbWV0ZXIgKnBhcmFtKVxcbi0tXFxuZnMvYWZzL3N1cGVyLmMtMjkxLVxcdGlmIChjZWxsbmFtZSkge1xcbmZzL2Fmcy9zdXBlci5jOjI5MjpcXHRcXHRjZWxsID0gYWZzX2xvb2t1cF9jZWxsKGN0eC1cXHUwMDNlbmV0LCBjZWxsbmFtZSwgY2VsbG5hbWVzeixcXG5mcy9hZnMvc3VwZXIuYy0yOTMtXFx0XFx0XFx0XFx0ICAgICAgIE5VTEwsIEFGU19MT09LVVBfQ0VMTF9ESVJFQ1RfTU9VTlQsXFxuLS1cXG5mcy9hZnMvdmxfYWxpYXMuYz0yNTM9c3RhdGljIGludCB5ZnNfY2hlY2tfY2Fub25pY2FsX2NlbGxfbmFtZShzdHJ1Y3QgYWZzX2NlbGwgKmNlbGwsIHN0cnVjdCBrZXkgKmtleSlcXG4tLVxcbmZzL2Fmcy92bF9hbGlhcy5jLTI3MS1cXHRlbHNlXFxuZnMvYWZzL3ZsX2FsaWFzLmM6MjcyOlxcdFxcdG1hc3RlciA9IGFmc19sb29rdXBfY2VsbChjZWxsLVxcdTAwM2VuZXQsIGNlbGxfbmFtZSwgbmFtZV9sZW4sIE5VTEwsXFxuZnMvYWZzL3ZsX2FsaWFzLmMtMjczLVxcdFxcdFxcdFxcdFxcdCBBRlNfTE9PS1VQX0NFTExfQUxJQVNfQ0hFQ0ssXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIyVDA5OjI3OjQ2LjgyMDkxOTM2OVoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTY3MTcyMzMxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgYW5hbHl6aW5nIHRoaXMgY29kZTpcblxuKipSZWFjaGluZyBLZXkgQ29kZSBTZWN0aW9ucyoqXG5cbk9rYXksIHNvIEkndmUgZXN0YWJsaXNoZWQgdGhhdCBgYWZzX2xvb2t1cF9jZWxsYCBpcyBkZWZpbml0ZWx5IHJlYWNoYWJsZS4gVGhhdCdzIGEgZ29vZCBzdGFydGluZyBwb2ludC4gTm93LCB0byB1bmRlcnN0YW5kIHRoZSBkYXRhIGZsb3cgYW5kIGhvdyB0aGlzIHdob2xlIHRoaW5nIGhhbmdzIHRvZ2V0aGVyLCBteSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byBsb29rIGF0IGBhZnNfZGlyX2l0ZXJhdGVfYmxvY2tgLiBJIG5lZWQgdG8gc2VlIGhvdyB0aGF0IGZ1bmN0aW9uIGludGVyYWN0cyB3aXRoIGBhZnNfbG9va3VwX2NlbGxgLCB3aGF0IGRhdGEgaXMgcGFzc2VkLCBhbmQgaWYgdGhlcmUgYXJlIGFueSBvYnZpb3VzIHZ1bG5lcmFiaWxpdGllcyBvciBwZXJmb3JtYW5jZSBib3R0bGVuZWNrcyB0aGVyZS4gVGhpcyBpdGVyYXRpb24gaXMgb2Z0ZW4gYSBjcml0aWNhbCBwYXRoLCBzbyBJIG5lZWQgdG8gdGhvcm91Z2hseSB1bmRlcnN0YW5kIGl0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTc5OCwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIyVDA5OjI3OjQ5Ljk4ODA5NTQyWiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTExMDE4MTQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYWZzX2Rpcl9pdGVyYXRlX2Jsb2NrXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL2Fmcy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvYWZzL2Rpci5jPTMwMD1zc2l6ZV90IGFmc19yZWFkX2RpcihzdHJ1Y3QgYWZzX3Zub2RlICpkdm5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKVxcbi0tXFxuZnMvYWZzL2Rpci5jLTM1Ni0gKi9cXG5mcy9hZnMvZGlyLmM6MzU3OnN0YXRpYyBpbnQgYWZzX2Rpcl9pdGVyYXRlX2Jsb2NrKHN0cnVjdCBhZnNfdm5vZGUgKmR2bm9kZSxcXG5mcy9hZnMvZGlyLmMtMzU4LVxcdFxcdFxcdFxcdCBzdHJ1Y3QgZGlyX2NvbnRleHQgKmN0eCxcXG4tLVxcbmZzL2Fmcy9kaXIuYz00NTc9c3RhdGljIHNpemVfdCBhZnNfZGlyX2l0ZXJhdGVfc3RlcCh2b2lkICppdGVyX2Jhc2UsIHNpemVfdCBwcm9ncmVzcywgc2l6ZV90IGxlbixcXG4tLVxcbmZzL2Fmcy9kaXIuYy00NzItXFx0ZG8ge1xcbmZzL2Fmcy9kaXIuYzo0NzM6XFx0XFx0cmV0ID0gYWZzX2Rpcl9pdGVyYXRlX2Jsb2NrKGR2bm9kZSwgY3R4LVxcdTAwM2VkaXJfY3R4LCBpdGVyX2Jhc2UpO1xcbmZzL2Fmcy9kaXIuYy00NzQtXFx0XFx0aWYgKHJldCAhPSAxKVxcbi0tXFxuZnMvYWZzL2Rpci5jPTU1Mz1zdGF0aWMgaW50IGFmc19yZWFkZGlyKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgZGlyX2NvbnRleHQgKmN0eClcXG4tLVxcbmZzL2Fmcy9kaXIuYy01NjItICogU2VhcmNoIHRoZSBkaXJlY3RvcnkgZm9yIGEgc2luZ2xlIG5hbWVcXG5mcy9hZnMvZGlyLmM6NTYzOiAqIC0gaWYgYWZzX2Rpcl9pdGVyYXRlX2Jsb2NrKCkgc3BvdHMgdGhpcyBmdW5jdGlvbiwgaXQnbGwgcGFzcyB0aGUgRklEXFxuZnMvYWZzL2Rpci5jLTU2NC0gKiAgIHVuaXF1aWZpZXIgdGhyb3VnaCBkdHlwZVxcbi0tXFxuZnMvYWZzL2Rpci5jPTU5OD1zdGF0aWMgaW50IGFmc19kb19sb29rdXBfb25lKHN0cnVjdCBpbm9kZSAqZGlyLCBjb25zdCBzdHJ1Y3QgcXN0ciAqbmFtZSxcXG4tLVxcbmZzL2Fmcy9kaXIuYy02MzAtICogc2VhcmNoIHRoZSBkaXJlY3RvcnkgZm9yIGEgbmFtZVxcbmZzL2Fmcy9kaXIuYzo2MzE6ICogLSBpZiBhZnNfZGlyX2l0ZXJhdGVfYmxvY2soKSBzcG90cyB0aGlzIGZ1bmN0aW9uLCBpdCdsbCBwYXNzIHRoZSBGSURcXG5mcy9hZnMvZGlyLmMtNjMyLSAqICAgdW5pcXVpZmllciB0aHJvdWdoIGR0eXBlXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIyVDA5OjI3OjUwLjE5OTIwNTAyNFoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4MTg4NjE2OTE0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3MsIGdpdmVuIG15IGV4cGVydGlzZTpcblxuKipFeGFtaW5pbmcgdGhlIEFGUyBEaXJlY3RvcnkgSXRlcmF0aW9uIFBhdGgqKlxuXG5BbHJpZ2h0LCBzbyBJJ20gdGhpbmtpbmcgYWJvdXQgYGFmc19kaXJfaXRlcmF0ZV9ibG9ja2AuIEl0J3MgYSBjb3JlIGZ1bmN0aW9uIGluIEFGUywgYW5kIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBjYWxsIHBhdGhzIHRvIHJlYWxseSBncmFzcCBpdHMgYmVoYXZpb3IuIEJhc2VkIG9uIHRoZSBjb25uZWN0aW9ucyBJIGtub3csIG15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIHRyYWNlIGl0cyB1c2FnZS4gSSBrbm93IGl0J3MgcmVhY2hhYmxlIHRocm91Z2ggYGFmc19yZWFkZGlyYC4gVGhhdCBtYWtlcyBzZW5zZTsgcmVhZGluZyBhIGRpcmVjdG9yeSBpcyB0aGUgdHlwaWNhbCB1c2UgY2FzZS4gVGhlbiwgSSByZW1lbWJlciBgYWZzX2RvX2xvb2t1cF9vbmVgIGFuZCBgYWZzX2RvX2xvb2t1cGAuIFRob3NlIGFyZSBjcnVjaWFsIGZvciBuYW1lIHJlc29sdXRpb24gd2l0aGluIHRoZSBmaWxlc3lzdGVtLiBUaGlzIGxpa2VseSBtZWFucyBgYWZzX2Rpcl9pdGVyYXRlX2Jsb2NrYCBpcyBpbnZvbHZlZCBpbiBmdWxmaWxsaW5nIGxvb2t1cCByZXF1ZXN0cyBhcyB3ZWxsLCBwZXJoYXBzIHdoZW4gc2VhcmNoaW5nIHdpdGhpbiBhIGRpcmVjdG9yeSB0byBmaW5kIGEgc3BlY2lmaWMgZW50cnkuXG5cbk15IG5leHQgc3RlcCBpcyB0byBkcmlsbCBkb3duIGZ1cnRoZXIuIEdpdmVuIHRoZSBkaXJlY3Rvcnkgb3BlcmF0aW9ucyBhcmUgc28ga2V5IGhlcmUsIGxldCdzIHRha2UgYSBjbG9zZXIgbG9vayBhdCBgYWZzX2xvb2t1cF9vbmVfZmlsbGRpcmAuIEl0J3MgaGlnaGx5IGxpa2VseSB0aGlzIGlzIHRoZSBmdW5jdGlvbiB0aGF0IGFjdHVhbGx5ICpmaWxscyogdGhlIGRpcmVjdG9yeSBlbnRyaWVzIGR1cmluZyBsb29rdXBzLCBhbmQgbGlrZWx5IGludGVyYWN0cyB3aXRoIGBhZnNfZGlyX2l0ZXJhdGVfYmxvY2tgLiBJIGV4cGVjdCB0aGF0IHRoaXMgZnVuY3Rpb24gaXMgd2hlcmUgdGhlIEFGUy1zcGVjaWZpYyBkaXJlY3RvcnkgaW5mb3JtYXRpb24gaXMgZW5jb2RlZC4gVW5kZXJzdGFuZGluZyBob3cgdGhvc2UgdHdvIGZ1bmN0aW9ucyBpbnRlcmFjdCB3aWxsIGdpdmUgbWUgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiBob3cgdGhlIGludGVybmFsIEFGUyBkaXJlY3Rvcnkgc3RydWN0dXJlIGlzIGJlaW5nIGNyZWF0ZWQgYW5kIHRyYXZlcnNlZC4gSSBuZWVkIHRvIHNlZSBob3cgdGhlIGRpcmVjdG9yeSBlbnRyaWVzIGFyZSBiZWluZyBidWlsdCwgcGFydGljdWxhcmx5IHdpdGggaG93IHRoZSBibG9jayBpbmZvcm1hdGlvbiBpcyBiZWluZyBwYXNzZWQuIFRoaXMgd2lsbCBiZSB0aGUgbmV4dCBwbGFjZSB0byBpbnZlc3RpZ2F0ZSBpbiBkZXB0aC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTY0NTgsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yMlQwOToyNzo1OC4zODc4MjY4ODlaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzNDMxOTkzNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhZnNfbG9va3VwX29uZV9maWxsZGlyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL2Fmcy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvYWZzL2Rpci5jPTI5PXN0YXRpYyB2b2lkIGFmc19kX2lwdXQoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgaW5vZGUgKmlub2RlKTtcXG5mcy9hZnMvZGlyLmM6MzA6c3RhdGljIGJvb2wgYWZzX2xvb2t1cF9vbmVfZmlsbGRpcihzdHJ1Y3QgZGlyX2NvbnRleHQgKmN0eCwgY29uc3QgY2hhciAqbmFtZSwgaW50IG5sZW4sXFxuZnMvYWZzL2Rpci5jLTMxLVxcdFxcdFxcdFxcdCAgIHU2NCBpbm8sIHUzMiB1bmlxdWlmaWVyKTtcXG4tLVxcbmZzL2Fmcy9kaXIuYz0zNTc9c3RhdGljIGludCBhZnNfZGlyX2l0ZXJhdGVfYmxvY2soc3RydWN0IGFmc192bm9kZSAqZHZub2RlLFxcbi0tXFxuZnMvYWZzL2Rpci5jLTQzMS1cXHRcXHR9IGVsc2UgaWYgKGN0eC1cXHUwMDNlYWN0b3IgPT0gQUZTX0xPT0tVUF9PTkUpIHtcXG5mcy9hZnMvZGlyLmM6NDMyOlxcdFxcdFxcdGlmICghYWZzX2xvb2t1cF9vbmVfZmlsbGRpcihjdHgsIGRpcmUtXFx1MDAzZXUubmFtZSwgbmxlbixcXG5mcy9hZnMvZGlyLmMtNDMzLVxcdFxcdFxcdFxcdFxcdFxcdCAgICBudG9obChkaXJlLVxcdTAwM2V1LnZub2RlKSxcXG4tLVxcbmZzL2Fmcy9kaXIuYz01NTM9c3RhdGljIGludCBhZnNfcmVhZGRpcihzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IGRpcl9jb250ZXh0ICpjdHgpXFxuLS1cXG5mcy9hZnMvZGlyLmMtNTY1LSAqL1xcbmZzL2Fmcy9kaXIuYzo1NjY6c3RhdGljIGJvb2wgYWZzX2xvb2t1cF9vbmVfZmlsbGRpcihzdHJ1Y3QgZGlyX2NvbnRleHQgKmN0eCwgY29uc3QgY2hhciAqbmFtZSxcXG5mcy9hZnMvZGlyLmMtNTY3LVxcdFxcdFxcdFxcdCAgaW50IG5sZW4sIHU2NCBpbm8sIHUzMiB1bmlxdWlmaWVyKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yMlQwOToyNzo1OC41MjIxNTQxMzVaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTUyMDM0MDAzMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKk5hdmlnYXRpbmcgdGhlIEFGUyBGaWxlc3lzdGVtIEltcGxlbWVudGF0aW9uKipcblxuT2theSwgc28gYGFmc19sb29rdXBfb25lX2ZpbGxkaXJgIGlzIGRlZmluaXRlbHkgcmVhY2hhYmxlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcm9sZSB3aXRoaW4gdGhlIEFGUyBmaWxlc3lzdGVtJ3MgbG9va3VwIG1lY2hhbmlzbS4gR2l2ZW4gdGhhdCwgdGhlIG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIGV4YW1pbmUgYGFmc19sb29rdXBfZmlsbGRpcmAuIEl0J3MgbGlrZWx5IHRoYXQgYGFmc19sb29rdXBfZmlsbGRpcmAgaXMgd2hlcmUgdGhlIGNvcmUgbG9naWMgb2YgZmlsbGluZyB0aGUgZGlyZWN0b3J5IGVudHJpZXMgd2lsbCByZXNpZGUsIGFuZCB3aGVyZSBgYWZzX2xvb2t1cF9vbmVfZmlsbGRpcmAgaXMgY2FsbGVkIGZyb20uIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIGhvdyBkaXJlY3RvcnkgZW50cmllcyBhcmUgZ2VuZXJhdGVkIHdpdGhpbiB0aGlzIGZ1bmN0aW9uLiBJJ2xsIGZvY3VzIG9uIGhvdyB0aGUgZGlyZWN0b3J5IHN0cnVjdHVyZSBpcyB0cmF2ZXJzZWQgYW5kIHBvcHVsYXRlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTcyMjcsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yMlQwOToyODowNC4wNDI0OTc0MTdaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4NTIzOTk3NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhZnNfbG9va3VwX2ZpbGxkaXJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvYWZzL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9hZnMvZGlyLmM9MzA9c3RhdGljIGJvb2wgYWZzX2xvb2t1cF9vbmVfZmlsbGRpcihzdHJ1Y3QgZGlyX2NvbnRleHQgKmN0eCwgY29uc3QgY2hhciAqbmFtZSwgaW50IG5sZW4sXFxuLS1cXG5mcy9hZnMvZGlyLmMtMzItI2RlZmluZSBBRlNfTE9PS1VQX09ORSAoKGZpbGxkaXJfdCkweDEyM1VMKVxcbmZzL2Fmcy9kaXIuYzozMzpzdGF0aWMgYm9vbCBhZnNfbG9va3VwX2ZpbGxkaXIoc3RydWN0IGRpcl9jb250ZXh0ICpjdHgsIGNvbnN0IGNoYXIgKm5hbWUsIGludCBubGVuLFxcbmZzL2Fmcy9kaXIuYy0zNC1cXHRcXHRcXHQgICAgICAgdTY0IGlubywgdTMyIHVuaXF1aWZpZXIpO1xcbi0tXFxuZnMvYWZzL2Rpci5jPTM1Nz1zdGF0aWMgaW50IGFmc19kaXJfaXRlcmF0ZV9ibG9jayhzdHJ1Y3QgYWZzX3Zub2RlICpkdm5vZGUsXFxuLS1cXG5mcy9hZnMvZGlyLmMtNDI2LVxcdFxcdGlmIChjdHgtXFx1MDAzZWFjdG9yID09IEFGU19MT09LVVApIHtcXG5mcy9hZnMvZGlyLmM6NDI3OlxcdFxcdFxcdGlmICghYWZzX2xvb2t1cF9maWxsZGlyKGN0eCwgZGlyZS1cXHUwMDNldS5uYW1lLCBubGVuLFxcbmZzL2Fmcy9kaXIuYy00MjgtXFx0XFx0XFx0XFx0XFx0XFx0bnRvaGwoZGlyZS1cXHUwMDNldS52bm9kZSksXFxuLS1cXG5mcy9hZnMvZGlyLmM9NTk4PXN0YXRpYyBpbnQgYWZzX2RvX2xvb2t1cF9vbmUoc3RydWN0IGlub2RlICpkaXIsIGNvbnN0IHN0cnVjdCBxc3RyICpuYW1lLFxcbi0tXFxuZnMvYWZzL2Rpci5jLTYzMy0gKi9cXG5mcy9hZnMvZGlyLmM6NjM0OnN0YXRpYyBib29sIGFmc19sb29rdXBfZmlsbGRpcihzdHJ1Y3QgZGlyX2NvbnRleHQgKmN0eCwgY29uc3QgY2hhciAqbmFtZSxcXG5mcy9hZnMvZGlyLmMtNjM1LVxcdFxcdFxcdCAgICAgIGludCBubGVuLCB1NjQgaW5vLCB1MzIgdW5pcXVpZmllcilcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjJUMDk6Mjg6MDQuMjI3NzQ0MDMyWiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzMDkwNTUyOTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhbmFseXNpcyBvZiB0aGUgcHJvdmlkZWQgaW5mb3JtYXRpb24sIGFzIGlmIHRoZXNlIGFyZSBteSBpbW1lZGlhdGUgdGhvdWdodHM6XG5cbioqTmF2aWdhdGluZyB0aGUgQUZTIENvZGViYXNlKipcblxuT2theSwgc28gYGFmc19sb29rdXBfZmlsbGRpcmAgaXMgZGVmaW5pdGVseSByZWFjaGFibGUuIFRoYXQncyBhIGtleSBmdW5jdGlvbiwgbWVhbmluZyBpdCdzIGludm9sdmVkIGluIGRpcmVjdG9yeSBsb29rdXBzIHdpdGhpbiB0aGUgQUZTIGZpbGVzeXN0ZW0uIE5vdywgbGV0J3Mgc2VlIHdoZXJlIHRoYXQgdGFrZXMgdXMuIFRoZSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byBleGFtaW5lIGBhZnNfZGVsaXZlcl9jYl9pbml0X2NhbGxfYmFja19zdGF0ZTNgLiBJJ20gZ3Vlc3NpbmcgdGhpcyBmdW5jdGlvbiBpcyByZWxhdGVkIHRvIGRlbGl2ZXJpbmcgY2FsbC1iYWNrcywgbGlrZWx5IHdpdGhpbiB0aGUgY29udGV4dCBvZiBhIHNwZWNpZmljIHN0YXRlLCBwb3NzaWJseSByZWxhdGVkIHRvIHZlcnNpb24gMyBvZiB0aGUgY2FsbGJhY2sgcHJvdG9jb2wsIGdpdmVuIHRoZSBuYW1lLiBVbmRlcnN0YW5kaW5nIGhvdyBjYWxsYmFja3MgYXJlIGhhbmRsZWQgaXMgY3J1Y2lhbCBmb3IgdW5kZXJzdGFuZGluZyBBRlMncyBkaXN0cmlidXRlZCBuYXR1cmUgYW5kIGVuc3VyaW5nIGRhdGEgY29uc2lzdGVuY3kuIFRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBjb2RlIGFuZCBzZWUgd2hhdCBgYWZzX2RlbGl2ZXJfY2JfaW5pdF9jYWxsX2JhY2tfc3RhdGUzYCBpcyBkb2luZywgYW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgYnJvYWRlciBkaXJlY3RvcnkgbG9va3VwIHByb2Nlc3MuIEknbGwgYmUgbG9va2luZyBmb3IgaG93IHRoZSBjYWxsYmFjayBzdGF0ZXMgYXJlIGluaXRpYXRlZCBhbmQgbWFuYWdlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTc4MjIsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yMlQwOToyODowNy41MzY4MjU4MTlaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU5MDE0NTYxNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhZnNfZGVsaXZlcl9jYl9pbml0X2NhbGxfYmFja19zdGF0ZTNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvYWZzL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9hZnMvY21zZXJ2aWNlLmM9MTk9c3RhdGljIGludCBhZnNfZGVsaXZlcl9jYl9pbml0X2NhbGxfYmFja19zdGF0ZShzdHJ1Y3QgYWZzX2NhbGwgKik7XFxuZnMvYWZzL2Ntc2VydmljZS5jOjIwOnN0YXRpYyBpbnQgYWZzX2RlbGl2ZXJfY2JfaW5pdF9jYWxsX2JhY2tfc3RhdGUzKHN0cnVjdCBhZnNfY2FsbCAqKTtcXG5mcy9hZnMvY21zZXJ2aWNlLmMtMjEtc3RhdGljIGludCBhZnNfZGVsaXZlcl9jYl9wcm9iZShzdHJ1Y3QgYWZzX2NhbGwgKik7XFxuLS1cXG5mcy9hZnMvY21zZXJ2aWNlLmM9NTc9c3RhdGljIGNvbnN0IHN0cnVjdCBhZnNfY2FsbF90eXBlIGFmc19TUlhDQkluaXRDYWxsQmFja1N0YXRlMyA9IHtcXG5mcy9hZnMvY21zZXJ2aWNlLmMtNTgtXFx0Lm5hbWVcXHRcXHQ9IFxcXCJDQi5Jbml0Q2FsbEJhY2tTdGF0ZTNcXFwiLFxcbmZzL2Fmcy9jbXNlcnZpY2UuYzo1OTpcXHQuZGVsaXZlclxcdD0gYWZzX2RlbGl2ZXJfY2JfaW5pdF9jYWxsX2JhY2tfc3RhdGUzLFxcbmZzL2Fmcy9jbXNlcnZpY2UuYy02MC1cXHQuZGVzdHJ1Y3RvclxcdD0gYWZzX2NtX2Rlc3RydWN0b3IsXFxuLS1cXG5mcy9hZnMvY21zZXJ2aWNlLmM9MzAzPXN0YXRpYyBpbnQgYWZzX2RlbGl2ZXJfY2JfaW5pdF9jYWxsX2JhY2tfc3RhdGUoc3RydWN0IGFmc19jYWxsICpjYWxsKVxcbi0tXFxuZnMvYWZzL2Ntc2VydmljZS5jLTMxMy0gKi9cXG5mcy9hZnMvY21zZXJ2aWNlLmM6MzE0OnN0YXRpYyBpbnQgYWZzX2RlbGl2ZXJfY2JfaW5pdF9jYWxsX2JhY2tfc3RhdGUzKHN0cnVjdCBhZnNfY2FsbCAqY2FsbClcXG5mcy9hZnMvY21zZXJ2aWNlLmMtMzE1LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjJUMDk6Mjg6MDguMTI2OTgzMDM0WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ4ODMzNzA3MDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgaW1tZWRpYXRlIHRob3VnaHQgcHJvY2VzcywgZm9jdXNpbmcgb24gdGhlIGNvbnRleHQgb2YgcnhycGM6XG5cbioqQW5hbHl6aW5nIGFuIFJYUlBDIENhbGxiYWNrKipcblxuT2theSwgSSdtIGxvb2tpbmcgYXQgYGFmc19kZWxpdmVyX2NiX2luaXRfY2FsbF9iYWNrX3N0YXRlM2AuIFRoZSBuYW1lIHN0cm9uZ2x5IHN1Z2dlc3RzIHRoaXMgaXMgYSBjYWxsYmFjayBmdW5jdGlvbiByZWxhdGVkIHRvIHJ4cnBjLCB3aGljaCBpcyB0aGUgYXNzdW1wdGlvbiBJJ20gb3BlcmF0aW5nIHVuZGVyLiBHaXZlbiB0aGF0LCBsZXQncyBpbW1lZGlhdGVseSB2ZXJpZnkgdGhhdCBhc3N1bXB0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgc3BlY2lmaWMgZnVuY3Rpb24uIEEgcXVpY2sgaW52ZXN0aWdhdGlvbiBvZiBgYWZzX2RlbGl2ZXJfY2JfcHJvYmVfdXVpZGAgZmVlbHMgbGlrZSBhIGxvZ2ljYWwgbmV4dCBzdGVwIHRvIGlsbHVtaW5hdGUgdGhlIHB1cnBvc2Ugb2YgdGhlIGNhbGwsIGFzIHRoZSBuYW1pbmcgY29udmVudGlvbnMgb2YgUlhSUEMgY2FsbGJhY2tzIGFyZSBvZnRlbiBjb25zaXN0ZW50LiBJJ20gaG9waW5nIHRoYXQgdGhpcyB3aWxsIHByb3ZpZGUgY3J1Y2lhbCBjb250ZXh0IGFzIHRvIHRoZSBwdXJwb3NlIG9mIHRoaXMgY2FsbCBiYWNrLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODQ1NSwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIyVDA5OjI4OjEzLjAxMDM1Njk0MloiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjIxNTA2NjU1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImFmc19kZWxpdmVyX2NiX3Byb2JlX3V1aWRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvYWZzL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9hZnMvY21zZXJ2aWNlLmM9MjI9c3RhdGljIGludCBhZnNfZGVsaXZlcl9jYl9jYWxsYmFjayhzdHJ1Y3QgYWZzX2NhbGwgKik7XFxuZnMvYWZzL2Ntc2VydmljZS5jOjIzOnN0YXRpYyBpbnQgYWZzX2RlbGl2ZXJfY2JfcHJvYmVfdXVpZChzdHJ1Y3QgYWZzX2NhbGwgKik7XFxuZnMvYWZzL2Ntc2VydmljZS5jLTI0LXN0YXRpYyBpbnQgYWZzX2RlbGl2ZXJfY2JfdGVsbF9tZV9hYm91dF95b3Vyc2VsZihzdHJ1Y3QgYWZzX2NhbGwgKik7XFxuLS1cXG5mcy9hZnMvY21zZXJ2aWNlLmM9Nzc9c3RhdGljIGNvbnN0IHN0cnVjdCBhZnNfY2FsbF90eXBlIGFmc19TUlhDQlByb2JlVXVpZCA9IHtcXG5mcy9hZnMvY21zZXJ2aWNlLmMtNzgtXFx0Lm5hbWVcXHRcXHQ9IFxcXCJDQi5Qcm9iZVV1aWRcXFwiLFxcbmZzL2Fmcy9jbXNlcnZpY2UuYzo3OTpcXHQuZGVsaXZlclxcdD0gYWZzX2RlbGl2ZXJfY2JfcHJvYmVfdXVpZCxcXG5mcy9hZnMvY21zZXJ2aWNlLmMtODAtXFx0LmRlc3RydWN0b3JcXHQ9IGFmc19jbV9kZXN0cnVjdG9yLFxcbi0tXFxuZnMvYWZzL2Ntc2VydmljZS5jPTQxNj1zdGF0aWMgdm9pZCBTUlhBRlNDQl9Qcm9iZVV1aWQoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbi0tXFxuZnMvYWZzL2Ntc2VydmljZS5jLTQzNC0gKi9cXG5mcy9hZnMvY21zZXJ2aWNlLmM6NDM1OnN0YXRpYyBpbnQgYWZzX2RlbGl2ZXJfY2JfcHJvYmVfdXVpZChzdHJ1Y3QgYWZzX2NhbGwgKmNhbGwpXFxuZnMvYWZzL2Ntc2VydmljZS5jLTQzNi17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIyVDA5OjI4OjEzLjIzMTg3MTA2NloiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4MTQzNTcwMTQ1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJvbSBhbiBleHBlcnQncyBwZXJzcGVjdGl2ZTpcblxuKipEaXZpbmcgaW50byB0aGUgUnhSUEMgSW1wbGVtZW50YXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBgYWZzX2RlbGl2ZXJfY2JfcHJvYmVfdXVpZGAuIFJpZ2h0LCB0aGF0J3MgZGVmaW5pdGVseSBhIGNhbGxiYWNrIGZ1bmN0aW9uLCBwYXJ0IG9mIHRoZSByeHJwYyBpbXBsZW1lbnRhdGlvbi4gSXQncyB0cmlnZ2VyZWQgYnkgYW4gcnhycGMgZXZlbnQsIHByb2JhYmx5IHJlbGF0ZWQgdG8gc29tZSBwcm9iaW5nIG9yIGRpc2NvdmVyeSBvcGVyYXRpb24uIE5vdyBJIG5lZWQgdG8gc2VlIGV4YWN0bHkgd2hhdCdzIGdvaW5nIG9uIHdpdGhpbiB0aGF0IGNhbGxiYWNrIGZ1bmN0aW9uIGFuZCBob3cgaXQgcmVsYXRlcyB0byB0aGUgd2lkZXIgc3lzdGVtLlxuXG5MZXQncyBzZWUuLi4gdGhlIG1vc3QgbGlrZWx5IGZ1bmN0aW9uIHRvIHNoZWQgbGlnaHQgb24gdGhpcyBpcyBgYWZzX2V4dHJhY3RfdmxzZXJ2ZXJfbGlzdGAuIFRoYXQgc291bmRzIGxpa2UgdGhlIHJpZ2h0IHBsYWNlIHRvIHN0YXJ0LCBhcyBpdCBpcyByZWxhdGVkIHRvIGEgc2VydmVyIGxpc3QuIEkgd2FudCB0byBzZWUgaWYgYGFmc19leHRyYWN0X3Zsc2VydmVyX2xpc3RgIGlzIGNhbGxlZCBhbmQgaG93IGl0J3MgYmVpbmcgdXNlZCBieSB0aGlzIHByb2JlIGZ1bmN0aW9uLiBQZXJoYXBzIHRoZXJlJ3MgYSB2aXRhbCBjb25uZWN0aW9uIGhlcmUuIEl0IHdpbGwgYmUgdXNlZnVsIHRvIHVuZGVyc3RhbmQgaG93IHJ4cnBjIGlzIGludGVyYWN0aW5nIHdpdGggdGhlIHZvbHVtZSBzZXJ2ZXIgbGlzdCB3aXRoaW4gdGhpcyBjb250ZXh0LCBob3cgdGhhdCBsaXN0IGlzIHBvcHVsYXRlZCwgYW5kIGhvdyBhbnkgdXBkYXRlcyBhcmUgaGFuZGxlZC4gSSBiZXQgdGhpcyBpcyB3aGVyZSB0aGUgbWVhdCBvZiB0aGUgcHJvYmUgbG9naWMgbGl2ZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5MDA2LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjJUMDk6Mjg6MjEuMzc1NDQ0NTkyWiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5NDk0MTc0OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhZnNfZXh0cmFjdF92bHNlcnZlcl9saXN0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL2Fmcy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvYWZzL2FkZHJfbGlzdC5jPTI1MD1zdHJ1Y3QgYWZzX3Zsc2VydmVyX2xpc3QgKmFmc19kbnNfcXVlcnkoc3RydWN0IGFmc19jZWxsICpjZWxsLCB0aW1lNjRfdCAqX2V4cGlyeSlcXG4tLVxcbmZzL2Fmcy9hZGRyX2xpc3QuYy0yNjgtXFx0aWYgKHJldCBcXHUwMDNlIDEgXFx1MDAyNlxcdTAwMjYgcmVzdWx0WzBdID09IDApXFxuZnMvYWZzL2FkZHJfbGlzdC5jOjI2OTpcXHRcXHR2bGxpc3QgPSBhZnNfZXh0cmFjdF92bHNlcnZlcl9saXN0KGNlbGwsIHJlc3VsdCwgcmV0KTtcXG5mcy9hZnMvYWRkcl9saXN0LmMtMjcwLVxcdGVsc2VcXG4tLVxcbmZzL2Fmcy9pbnRlcm5hbC5oPTE2ODI9ZXh0ZXJuIHZvaWQgYWZzX3B1dF92bHNlcnZlcmxpc3Qoc3RydWN0IGFmc19uZXQgKiwgc3RydWN0IGFmc192bHNlcnZlcl9saXN0ICopO1xcbmZzL2Fmcy9pbnRlcm5hbC5oOjE2ODM6ZXh0ZXJuIHN0cnVjdCBhZnNfdmxzZXJ2ZXJfbGlzdCAqYWZzX2V4dHJhY3RfdmxzZXJ2ZXJfbGlzdChzdHJ1Y3QgYWZzX2NlbGwgKixcXG5mcy9hZnMvaW50ZXJuYWwuaC0xNjg0LVxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgIGNvbnN0IHZvaWQgKiwgc2l6ZV90KTtcXG4tLVxcbmZzL2Fmcy92bF9saXN0LmM9ODk9c3RhdGljIHN0cnVjdCBhZnNfYWRkcl9saXN0ICphZnNfZXh0cmFjdF92bF9hZGRycyhzdHJ1Y3QgYWZzX25ldCAqbmV0LFxcbi0tXFxuZnMvYWZzL3ZsX2xpc3QuYy0xNTktICovXFxuZnMvYWZzL3ZsX2xpc3QuYzoxNjA6c3RydWN0IGFmc192bHNlcnZlcl9saXN0ICphZnNfZXh0cmFjdF92bHNlcnZlcl9saXN0KHN0cnVjdCBhZnNfY2VsbCAqY2VsbCxcXG5mcy9hZnMvdmxfbGlzdC5jLTE2MS1cXHRcXHRcXHRcXHRcXHRcXHQgICAgY29uc3Qgdm9pZCAqYnVmZmVyLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yMlQwOToyODoyMS40NzAzOTI4ODlaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDU0MjQ0NzM2NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSBpbW1lZGlhdGUgdGhvdWdodCBwcm9jZXNzLCBmb2N1c2luZyBvbiB0aGUgcHJvdmlkZWQgdGVjaG5pY2FsIHNuaXBwZXRzOlxuXG4qKkRlYnVnZ2luZyBhbiBBRlMgSW50ZXJhY3Rpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGNvZGUgYW5kIGl0IHNlZW1zIGxpa2UgdGhlIGBhZnNfZXh0cmFjdF92bHNlcnZlcl9saXN0YCBmdW5jdGlvbiBpcywgYXQgbGVhc3QgcG90ZW50aWFsbHksIHJlYWNoYWJsZSB0aHJvdWdoIHRoZSBgYWZzX2Ruc19xdWVyeWAgZnVuY3Rpb24uIFRoYXQncyBnb29kIHRvIGtub3cg4oCTIGl0IGdpdmVzIG1lIGEgcG9zc2libGUgZW50cnkgcG9pbnQgaWYgSSBuZWVkIHRvIHRyYWNlIGl0cyBleGVjdXRpb24uIFRoaXMgaXMgYSBjb21tb24gcGF0dGVybiBpbiBBRlM7IEROUyBwbGF5cyBhIGNydWNpYWwgcm9sZSBpbiBsb2NhdGluZyB2b2x1bWVzIHNlcnZlcnMuIE5vdywgd2hhdCdzIGRpcmVjdGx5IHJlbGF0ZWQgdG8gdGhlIHZvbHVtZSBzZXJ2ZXJzPyBMZXQncyBzd2l0Y2ggZ2VhcnMgYW5kIHRha2UgYSBsb29rIGF0IGBhZnNfaW5vZGVfaW5pdF9mcm9tX3N0YXR1c2AuIEl0IGlzIHZlcnkgbGlrZWx5IHRoYXQgdGhlIGluaXRpYWxpemF0aW9uIG9mIGFuIGlub2RlIGFuZCB0aGUgc3RhdHVzIGluZm9ybWF0aW9uIGZyb20gdm9sdW1lIHNlcnZlcnMgd2lsbCBpbnZvbHZlIHRoaXMgZnVuY3Rpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgaW5vZGUgaXMgc2V0IHVwIGFuZCB3aGF0IGtpbmQgb2Ygc3RhdHVzIGluZm9ybWF0aW9uIGlzIHByb3ZpZGVkIGJ5IHRoaXMgZnVuY3Rpb24uIFRoaXMgbWlnaHQgZ2l2ZSBtZSB0aGUgY29udGV4dCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgd2UgcmVhY2ggdGhlIHZvbHVtZSBzZXJ2ZXIgbGlzdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTk2NzcsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yMlQwOToyODoyNi4wMTI4NDQwOTVaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwNDYyOTQ4NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhZnNfaW5vZGVfaW5pdF9mcm9tX3N0YXR1c1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9hZnMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2Fmcy9pbm9kZS5jPTU1PXN0YXRpYyB2b2lkIGFmc19zZXRfbmV0ZnNfY29udGV4dChzdHJ1Y3QgYWZzX3Zub2RlICp2bm9kZSwgYm9vbCBpc19maWxlKVxcbi0tXFxuZnMvYWZzL2lub2RlLmMtNjItICovXFxuZnMvYWZzL2lub2RlLmM6NjM6c3RhdGljIGludCBhZnNfaW5vZGVfaW5pdF9mcm9tX3N0YXR1cyhzdHJ1Y3QgYWZzX29wZXJhdGlvbiAqb3AsXFxuZnMvYWZzL2lub2RlLmMtNjQtXFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IGFmc192bm9kZV9wYXJhbSAqdnAsXFxuLS1cXG5mcy9hZnMvaW5vZGUuYz0zNDY9c3RhdGljIHZvaWQgYWZzX2ZldGNoX3N0YXR1c19zdWNjZXNzKHN0cnVjdCBhZnNfb3BlcmF0aW9uICpvcClcXG4tLVxcbmZzL2Fmcy9pbm9kZS5jLTM1Mi1cXHRpZiAoaW5vZGVfc3RhdGVfcmVhZF9vbmNlKFxcdTAwMjZ2bm9kZS1cXHUwMDNlbmV0ZnMuaW5vZGUpIFxcdTAwMjYgSV9ORVcpIHtcXG5mcy9hZnMvaW5vZGUuYzozNTM6XFx0XFx0cmV0ID0gYWZzX2lub2RlX2luaXRfZnJvbV9zdGF0dXMob3AsIHZwLCB2bm9kZSk7XFxuZnMvYWZzL2lub2RlLmMtMzU0LVxcdFxcdGFmc19vcF9zZXRfZXJyb3Iob3AsIHJldCk7XFxuLS1cXG5mcy9hZnMvaW5vZGUuYz00ODI9c3RydWN0IGlub2RlICphZnNfaWdldChzdHJ1Y3QgYWZzX29wZXJhdGlvbiAqb3AsIHN0cnVjdCBhZnNfdm5vZGVfcGFyYW0gKnZwKVxcbi0tXFxuZnMvYWZzL2lub2RlLmMtNTA4LVxcbmZzL2Fmcy9pbm9kZS5jOjUwOTpcXHRyZXQgPSBhZnNfaW5vZGVfaW5pdF9mcm9tX3N0YXR1cyhvcCwgdnAsIHZub2RlKTtcXG5mcy9hZnMvaW5vZGUuYy01MTAtXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIyVDA5OjI4OjI2LjExNzQ4MTA3M1oiLCJTZXEiOjMxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NzUzNjI2MTUxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEN1cnJlbnQgVGhpbmtpbmc6IEFGUyBNb2R1bGUgRGVlcCBEaXZlKipcblxuT2theSwgc28gSSdtIHRyYWNpbmcgdGhlIGV4ZWN1dGlvbiBwYXRoIGhlcmUgd2l0aGluIHRoZSBBRlMgbW9kdWxlLCB0cnlpbmcgdG8gdW5kZXJzdGFuZCBhIHNwZWNpZmljIGZ1bmN0aW9uLCBgYWZzX2lub2RlX2luaXRfZnJvbV9zdGF0dXNgLiBJJ3ZlIGVzdGFibGlzaGVkIHRoYXQgaXQncyByZWFjaGFibGUgdGhyb3VnaCBgYWZzX2lnZXRgIGFuZCwgaW1wb3J0YW50bHksIGBhZnNfZmV0Y2hfc3RhdHVzX3N1Y2Nlc3NgLiBUaGF0J3MgYSBrZXkgZW50cnkgcG9pbnQuIE5vdywgSSdtIG1hcHBpbmcgb3V0IHRoZSBzdXJyb3VuZGluZyBmdW5jdGlvbnMgdGhhdCBsaWtlbHkgaW50ZXJhY3Qgd2l0aCBpdCBvciBhcmUgcGFydCBvZiB0aGUgc2FtZSBkYXRhIGZsb3cuXG5cbk15IGtleSBmb2N1cyBzeW1ib2xzIG5vdyBhcmU6IGBhZnNfZGlyX2l0ZXJhdGVfYmxvY2tgLCBgYWZzX2xvb2t1cF9vbmVfZmlsbGRpcmAsIGBhZnNfbG9va3VwX2ZpbGxkaXJgLCBgYWZzX2V4dHJhY3RfdmxfYWRkcnNgLCBgYWZzX2V4dHJhY3RfdmxzZXJ2ZXJfbGlzdGAsIG5hdHVyYWxseSwgdGhlIG9uZSBJIG1lbnRpb25lZCBhbHJlYWR5IC0gYGFmc19pbm9kZV9pbml0X2Zyb21fc3RhdHVzYCwgdGhlbiBgYWZzX2xvb2t1cF9jZWxsYCwgYGFmc19kZWxpdmVyX2NiX2luaXRfY2FsbF9iYWNrX3N0YXRlM2AsIGFuZCBgYWZzX2RlbGl2ZXJfY2JfcHJvYmVfdXVpZGAuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiB0aGVzZSBmdW5jdGlvbnMsIHBhcnRpY3VsYXJseSBob3cgdGhleSByZWxhdGUgdG8gaW5pdGlhbGl6aW5nIGlub2RlcyBmcm9tIHN0YXR1cyBpbmZvcm1hdGlvbi4gQXJlIHRoZXkgYWxsIGludm9sdmVkIGluIGRpcmVjdG9yeSBsb29rdXBzLCBhZGRyZXNzIGV4dHJhY3Rpb24sIG9yIGNhbGxiYWNrcyByZWxhdGVkIHRvIGZpbGUgc3lzdGVtIG9wZXJhdGlvbnM/XG5cbkFuZCB0aGlzIGlzIGFsbCBoYXBwZW5pbmcgdW5kZXIgdGhlIGBBRlNfRlNgIGNvbmZpZ3VyYXRpb24uIEl0J3MgdGltZSB0byBxdWlja2x5IGRvdWJsZS1jaGVjayB0aGF0IHRoZXJlIGFyZW4ndCBhbnkgb3RoZXIgY3J1Y2lhbCBjb25maWd1cmF0aW9ucyB0aGF0IG1pZ2h0IGluZmx1ZW5jZSB0aGUgYmVoYXZpb3Igb2YgdGhlc2UgZnVuY3Rpb25zLCBvciB0aGUgZGVwZW5kZW5jaWVzIHRoZXkgcmVseSB1cG9uLiBJIHdvdWxkbid0IHdhbnQgdG8gb3Zlcmxvb2sgYW55dGhpbmcgY3JpdGljYWwuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwMzIzLCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTU4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIyVDA5OjI4OjMwLjg3MTExMjgyNFoiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODQ3NjI3NzcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEFGU19cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvYWZzL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvYWZzL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG5mcy9hZnMvS2NvbmZpZzoyOmNvbmZpZyBBRlNfRlNcXG5mcy9hZnMvS2NvbmZpZy0zLVxcdHRyaXN0YXRlIFxcXCJBbmRyZXcgRmlsZSBTeXN0ZW0gc3VwcG9ydCAoQUZTKVxcXCJcXG4tLVxcbmZzL2Fmcy9LY29uZmlnLTE2LVxcbmZzL2Fmcy9LY29uZmlnOjE3OmNvbmZpZyBBRlNfREVCVUdcXG5mcy9hZnMvS2NvbmZpZy0xOC1cXHRib29sIFxcXCJBRlMgZHluYW1pYyBkZWJ1Z2dpbmdcXFwiXFxuLS1cXG5mcy9hZnMvS2NvbmZpZy0yNi1cXG5mcy9hZnMvS2NvbmZpZzoyNzpjb25maWcgQUZTX0ZTQ0FDSEVcXG5mcy9hZnMvS2NvbmZpZy0yOC1cXHRib29sIFxcXCJQcm92aWRlIEFGUyBjbGllbnQgY2FjaGluZyBzdXBwb3J0XFxcIlxcbi0tXFxuZnMvYWZzL0tjb25maWctMzMtXFxuZnMvYWZzL0tjb25maWc6MzQ6Y29uZmlnIEFGU19ERUJVR19DVVJTT1JcXG5mcy9hZnMvS2NvbmZpZy0zNS1cXHRib29sIFxcXCJBRlMgc2VydmVyIGN1cnNvciBkZWJ1Z2dpbmdcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIyVDA5OjI4OjMwLjk1NTg4Mzg1MloiLCJTZXEiOjMzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4ODMxMzQzNDE5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgQUZTIEZpbGVzeXN0ZW0gQ2hhbmdlcyoqXG5cbk9rYXksIHNvIEkndmUgYmVlbiBnaXZlbiBhIGxpc3Qgb2YgbW9kaWZpZWQgZmlsZXMgd2l0aGluIHRoZSBBRlMgZmlsZXN5c3RlbSBpbXBsZW1lbnRhdGlvbjogYGZzL2Fmcy9jYWxsYmFjay5jYCwgYGZzL2Fmcy9jZWxsLmNgLCBgZnMvYWZzL2Ntc2VydmljZS5jYCwgYGZzL2Fmcy9kaXIuY2AsIGBmcy9hZnMvZHlucm9vdC5jYCwgYGZzL2Fmcy9mc19vcGVyYXRpb24uY2AsIGBmcy9hZnMvaW5vZGUuY2AsIGBmcy9hZnMvaW50ZXJuYWwuaGAsIGBmcy9hZnMvc3VwZXIuY2AsIGBmcy9hZnMvdmxfbGlzdC5jYCwgYW5kIGBmcy9hZnMvdm9sdW1lLmNgLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byBhc3Nlc3MgdGhlIHBvdGVudGlhbCBpbXBhY3Qgb2YgdGhlc2UgY2hhbmdlcy4gU2luY2UgQUZTIGlzIGEgd2VsbC1lc3RhYmxpc2hlZCBkaXN0cmlidXRlZCBmaWxlc3lzdGVtLCBhIG1vZGlmaWNhdGlvbiB0byB0aGlzIG1hbnkgZmlsZXMgd2FycmFudHMgY2FyZWZ1bCBzY3J1dGlueS4gQmVmb3JlIGp1bXBpbmcgaW50byBzcGVjaWZpY3MsIEkgbmVlZCB0byBjaGVjayBzb21ldGhpbmcgZnVuZGFtZW50YWw6IGFyZSBhbnkgb2YgdGhlc2UgZmlsZXMgY29uZGl0aW9uYWxseSBjb21waWxlZCBiYXNlZCBvbiBrZXJuZWwgY29uZmlndXJhdGlvbiBvcHRpb25zIG9yIGZlYXR1cmUgZmxhZ3M/IFRoaXMgaXMgY3JpdGljYWwuIElmIGNoYW5nZXMgYXJlIGhpZGRlbiBiZWhpbmQgZGVmaW5lcywgSSBuZWVkIHRvIGtub3cgdGhlIHBvdGVudGlhbCB2YXJpYXRpb25zIHRoYXQgbWF5IGJlIGluIHBsYXkuIFRoaXMgd2lsbCBpbmZsdWVuY2UgaG93IEkgYXBwcm9hY2ggbXkgYW5hbHlzaXMsIGVzcGVjaWFsbHkgc2luY2UgdGhpcyBpcyBBRlMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxMDQ5LCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTM1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIyVDA5OjI4OjM5Ljc4NzIzMTU1WiIsIlNlcSI6MzQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDExNzUyNjYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYWZzLXlcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvYWZzL01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2Fmcy9NYWtlZmlsZS01LVxcbmZzL2Fmcy9NYWtlZmlsZTo2OmthZnMteSA6PSBcXFxcXFxuZnMvYWZzL01ha2VmaWxlLTctXFx0YWRkcl9saXN0Lm8gXFxcXFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yMlQwOToyODozOS45Mjg0MTI3NTZaIiwiU2VxIjozNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTA0MTQxNzA2MTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIE1ha2VmaWxlLiBJIG5lZWQgdG8gZ2V0IGEgY29tcHJlaGVuc2l2ZSB1bmRlcnN0YW5kaW5nIGJlZm9yZSBJIHN0YXJ0IG1ha2luZyBhbnkgY2hhbmdlcywgc28gYSBsaW5lLWJ5LWxpbmUgcmV2aWV3IGlzIGFic29sdXRlbHkgbmVjZXNzYXJ5LiBJJ2xsIG5lZWQgdG8gbG9vayBhdCBldmVyeSB0YXJnZXQsIGV2ZXJ5IGRlcGVuZGVuY3ksIGV2ZXJ5IGNvbW1hbmQsIGV2ZXJ5IHZhcmlhYmxlLCBhbmQgZXZlcnkgaW5jbHVkZS4gVGhpcyBpc24ndCBqdXN0IGFib3V0IHNwb3R0aW5nIG9idmlvdXMgZXJyb3JzLCBidXQgYWJvdXQgZ3Jhc3BpbmcgdGhlIG92ZXJhbGwgZmxvdyBhbmQgaW50ZW5kZWQgYmVoYXZpb3IuIEkgd2FudCB0byBidWlsZCBhIG1lbnRhbCBtYXAgb2YgaG93IHRoZXNlIGNvbXBvbmVudHMgYXJlIGludGVyY29ubmVjdGVkLCBzbyBJIGNhbiBwcmVkaWN0IHRoZSBpbXBhY3RzIG9mIGFueSBtb2RpZmljYXRpb25zLiBUaGlzIGlzIGFib3V0IGVuc3VyaW5nIEkgZG9u4oCZdCBpbnRyb2R1Y2UgYW55IHJlZ3Jlc3Npb25zIG9yIHVuaW50ZW5kZWQgY29uc2VxdWVuY2VzIGRvd24gdGhlIGxpbmUuIEEgaG9saXN0aWMgdmlldyBpcyBrZXkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxNTAzLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yMlQwOToyODo1MC4zNDI1ODYwNDZaIiwiU2VxIjozNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODMyODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZnMvYWZzL01ha2VmaWxlXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG4gICAyOlxcdCNcXG4gICAzOlxcdCMgTWFrZWZpbGUgZm9yIFJlZCBIYXQgTGludXggQUZTIGNsaWVudC5cXG4gICA0OlxcdCNcXG4gICA1OlxcdFxcbiAgIDY6XFx0a2Fmcy15IDo9IFxcXFxcXG4gICA3OlxcdFxcdGFkZHJfbGlzdC5vIFxcXFxcXG4gICA4OlxcdFxcdGFkZHJfcHJlZnMubyBcXFxcXFxuICAgOTpcXHRcXHRjYWxsYmFjay5vIFxcXFxcXG4gIDEwOlxcdFxcdGNlbGwubyBcXFxcXFxuICAxMTpcXHRcXHRjbV9zZWN1cml0eS5vIFxcXFxcXG4gIDEyOlxcdFxcdGNtc2VydmljZS5vIFxcXFxcXG4gIDEzOlxcdFxcdGRpci5vIFxcXFxcXG4gIDE0OlxcdFxcdGRpcl9lZGl0Lm8gXFxcXFxcbiAgMTU6XFx0XFx0ZGlyX3NlYXJjaC5vIFxcXFxcXG4gIDE2OlxcdFxcdGRpcl9zaWxseS5vIFxcXFxcXG4gIDE3OlxcdFxcdGR5bnJvb3QubyBcXFxcXFxuICAxODpcXHRcXHRmaWxlLm8gXFxcXFxcbiAgMTk6XFx0XFx0ZmxvY2subyBcXFxcXFxuICAyMDpcXHRcXHRmc2NsaWVudC5vIFxcXFxcXG4gIDIxOlxcdFxcdGZzX29wZXJhdGlvbi5vIFxcXFxcXG4gIDIyOlxcdFxcdGZzX3Byb2JlLm8gXFxcXFxcbiAgMjM6XFx0XFx0aW5vZGUubyBcXFxcXFxuICAyNDpcXHRcXHRtYWluLm8gXFxcXFxcbiAgMjU6XFx0XFx0bWlzYy5vIFxcXFxcXG4gIDI2OlxcdFxcdG1udHB0Lm8gXFxcXFxcbiAgMjc6XFx0XFx0cm90YXRlLm8gXFxcXFxcbiAgMjg6XFx0XFx0cnhycGMubyBcXFxcXFxuICAyOTpcXHRcXHRzZWN1cml0eS5vIFxcXFxcXG4gIDMwOlxcdFxcdHNlcnZlci5vIFxcXFxcXG4gIDMxOlxcdFxcdHNlcnZlcl9saXN0Lm8gXFxcXFxcbiAgMzI6XFx0XFx0c3VwZXIubyBcXFxcXFxuICAzMzpcXHRcXHRzeW1saW5rLm8gXFxcXFxcbiAgMzQ6XFx0XFx0dmFsaWRhdGlvbi5vIFxcXFxcXG4gIDM1OlxcdFxcdHZsY2xpZW50Lm8gXFxcXFxcbiAgMzY6XFx0XFx0dmxfYWxpYXMubyBcXFxcXFxuICAzNzpcXHRcXHR2bF9saXN0Lm8gXFxcXFxcbiAgMzg6XFx0XFx0dmxfcHJvYmUubyBcXFxcXFxuICAzOTpcXHRcXHR2bF9yb3RhdGUubyBcXFxcXFxuICA0MDpcXHRcXHR2b2x1bWUubyBcXFxcXFxuICA0MTpcXHRcXHR3cml0ZS5vIFxcXFxcXG4gIDQyOlxcdFxcdHhhdHRyLm8gXFxcXFxcbiAgNDM6XFx0XFx0eWZzY2xpZW50Lm9cXG4gIDQ0OlxcdFxcbiAgNDU6XFx0a2Fmcy0kKENPTkZJR19QUk9DX0ZTKSArPSBwcm9jLm9cXG4gIDQ2OlxcdG9iai0kKENPTkZJR19BRlNfRlMpICA6PSBrYWZzLm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjJUMDk6Mjg6NTAuMzQyNjcxMTI2WiIsIlNlcSI6MzcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE1MTQ3ODk0Mzc5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFGUyBGaWxlc3lzdGVtIE1vZHVsZSBBbmFseXNpcyoqXG5cbk9rYXksIHNvIGl0IGxvb2tzIGxpa2UgYENPTkZJR19BRlNfRlNgIGlzIHRoZSBvbmx5IGNvbmZpZ3VyYXRpb24gb3B0aW9uIEkgcmVhbGx5IG5lZWQgdG8gZW5hYmxlIHRvIGdldCBzdGFydGVkLiBOb3csIGxldCdzIHRha2UgYSBsb29rIGF0IHRoZSBrZXkgc3ltYm9scyByZWxhdGVkIHRvIHRoZSBBRlMgZmlsZXN5c3RlbSB0aGF0IGFyZSBpbnRlcmVzdGluZyBmb3IgYW5hbHlzaXMsIGFzIEknbSB0aGlua2luZyBhYm91dCBob3cgdG8gdGVzdCBpdC4gSSB3YW50IHRvIHNlZSBob3cgdGhlc2UgZnVuY3Rpb25zIG1pZ2h0IGJlIHRhcmdldGVkLlxuXG5SaWdodCwgdGhlIGZvY3VzIGlzIG9uIHRoZXNlIHN5bWJvbHM6IGBhZnNfZGlyX2l0ZXJhdGVfYmxvY2tgLCBgYWZzX2xvb2t1cF9vbmVfZmlsbGRpcmAsIGBhZnNfbG9va3VwX2ZpbGxkaXJgLCBgYWZzX2V4dHJhY3RfdmxfYWRkcnNgLCBgYWZzX2V4dHJhY3RfdmxzZXJ2ZXJfbGlzdGAsIGBhZnNfaW5vZGVfaW5pdF9mcm9tX3N0YXR1c2AsIGBhZnNfbG9va3VwX2NlbGxgLCBgYWZzX2RlbGl2ZXJfY2JfaW5pdF9jYWxsX2JhY2tfc3RhdGUzYCwgYW5kIGBhZnNfZGVsaXZlcl9jYl9wcm9iZV91dWlkYC5cblxuQWhhLCBob2xkIG9uLiBJJ3ZlIGdvdCBhIHNsaWdodCBjb25jZXJuLiBCb3RoIGBhZnNfbG9va3VwX29uZV9maWxsZGlyYCBhbmQgYGFmc19sb29rdXBfZmlsbGRpcmAgYXJlIGRlZmluZWQgYXMgc3RhdGljIGZ1bmN0aW9ucywgd2hpY2ggbWVhbnMgdGhleSBhcmUgbGlrZWx5IG9ubHkgdXNlZCB3aXRoaW4gdGhlaXIgY29tcGlsYXRpb24gdW5pdCBhbmQgbm90IGdsb2JhbGx5IGV4cG9ydGVkLiBTeXprYWxsZXIsIGluIHRoYXQgY2FzZSwgbWlnaHQgaGF2ZSB0cm91YmxlIHRhcmdldGluZyB0aGVtIGRpcmVjdGx5IHVubGVzcyB0aGV5IGFyZSBzb21laG93IHJlYWNoZWQgdGhyb3VnaCBhbiBleHBvcnRlZCBzeW1ib2wuIEkgdGhpbmsgdGhhdCBpcyBhbiBpc3N1ZSB3aXRoIGNvdmVyYWdlLiBJIGRvIHRoaW5rLCBob3dldmVyLCB0aGF0IGBzeXprYWxsZXJgICpjYW4qIHRhcmdldCB0aGVtIHZpYSBgYWZzX2Rpcl9pdGVyYXRlX2Jsb2NrYCwgd2hpY2ggaXMgc29tZXRoaW5nIHRvIGtlZXAgaW4gbWluZCwgZXZlbiBpZiBkaXJlY3QgaW52b2NhdGlvbiBpc24ndCBwb3NzaWJsZSwgdGhlIGNvdmVyYWdlIGFuYWx5c2lzIGNhbiBzdGlsbCB0cmFjayB0aGVtLlxuXG5Pa2F5LCBJJ2xsIHN3aXRjaCBnZWFycyBmb3IgYSBtb21lbnQgYW5kIGNoZWNrIGBhZnNfbG9va3VwX3ZvbHVtZV9yY3VgIGluIGBmcy9hZnMvY2FsbGJhY2suY2AuIEkgbmVlZCB0byByZXZpZXcgc29tZSBhc3BlY3RzIG9mIHRoZSBjYWxsYmFjayBtZWNoYW5pc20uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIyMTk1LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjI3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjJUMDk6Mjk6MDUuNDkwNTY5Nzc1WiIsIlNlcSI6MzgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDI0NDQwODcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYWZzX2xvb2t1cF92b2x1bWVfcmN1XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL2Fmcy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvYWZzL2NhbGxiYWNrLmM9MTAxPXZvaWQgYWZzX2JyZWFrX2NhbGxiYWNrKHN0cnVjdCBhZnNfdm5vZGUgKnZub2RlLCBlbnVtIGFmc19jYl9icmVha19yZWFzb24gcmVhc29uKVxcbi0tXFxuZnMvYWZzL2NhbGxiYWNrLmMtMTEwLSAqL1xcbmZzL2Fmcy9jYWxsYmFjay5jOjExMTpzdGF0aWMgc3RydWN0IGFmc192b2x1bWUgKmFmc19sb29rdXBfdm9sdW1lX3JjdShzdHJ1Y3QgYWZzX2NlbGwgKmNlbGwsXFxuZnMvYWZzL2NhbGxiYWNrLmMtMTEyLVxcdFxcdFxcdFxcdFxcdFxcdGFmc192b2xpZF90IHZpZClcXG4tLVxcbmZzL2Fmcy9jYWxsYmFjay5jPTIwNj1zdGF0aWMgdm9pZCBhZnNfYnJlYWtfc29tZV9jYWxsYmFja3Moc3RydWN0IGFmc19zZXJ2ZXIgKnNlcnZlcixcXG4tLVxcbmZzL2Fmcy9jYWxsYmFjay5jLTIxNS1cXHRyY3VfcmVhZF9sb2NrKCk7XFxuZnMvYWZzL2NhbGxiYWNrLmM6MjE2OlxcdHZvbHVtZSA9IGFmc19sb29rdXBfdm9sdW1lX3JjdShzZXJ2ZXItXFx1MDAzZWNlbGwsIHZpZCk7XFxuZnMvYWZzL2NhbGxiYWNrLmMtMjE3LVxcdGlmICghdm9sdW1lKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIyVDA5OjI5OjA1LjYzMzAxOTc1MloiLCJTZXEiOjM5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0OTk0NjYyMDI1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IGltbWVkaWF0ZSB0aG91Z2h0IHByb2Nlc3M6XG5cbioqSW50ZXJuYWwgQ29kZSBBdWRpdCAtIEFuYWx5emluZyBBRlMgTG9va3VwIFx1MDAyNiBDYWxsYmFja3MqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGBhZnNfbG9va3VwX3ZvbHVtZV9yY3VgIGZ1bmN0aW9uLCBhbmQgaXQncyBmbGFnZ2VkIGFzIGBzdGF0aWNgLiBSaWdodCBhd2F5LCB0aGF0IHRlbGxzIG1lIGl0J3MgbGlrZWx5IGludGVybmFsIHRvIGEgc3BlY2lmaWMgZmlsZSBvciBtb2R1bGUgd2l0aGluIHRoZSBBRlMgY29kZWJhc2UuIFRoYXQgbWVhbnMgaXRzIHNjb3BlIGlzIGxpbWl0ZWQsIHdoaWNoIHNpbXBsaWZpZXMgdW5kZXJzdGFuZGluZyBpdHMgcHVycG9zZSwgYXQgbGVhc3QgaW5pdGlhbGx5LiBNeSBpbW1lZGlhdGUgbmV4dCBzdGVwIGlzIHRvIHNlZSB3aGVyZSBpdOKAmXMgYmVpbmcgY2FsbGVkIGFuZCB3aGF0IGRhdGEgaXQncyBvcGVyYXRpbmcgb24gd2l0aGluIHRoYXQgY29udGV4dC5cblxuTm93LCBsZXQncyBwaXZvdCB0byBpbnZlc3RpZ2F0aW5nIHdoYXQgYGFmc19icmVha19zb21lX2NhbGxiYWNrc2AgaXMgYWxsIGFib3V0LiBcIkJyZWFrIGNhbGxiYWNrc1wiIHNvdW5kcyBsaWtlIGl0IG1pZ2h0IGJlIGRlc2lnbmVkIGZvciBzb21lIGtpbmQgb2YgZGVidWdnaW5nLCB0ZXN0aW5nLCBvciBtYXliZSBlcnJvciBoYW5kbGluZyBzY2VuYXJpby4gQ291bGQgYmUgcmVsYXRlZCB0byB2b2x1bWUgbWFuYWdlbWVudCBvciBwb3RlbnRpYWxseSBjbGllbnQgaW50ZXJhY3Rpb25zIHdpdGggdGhlIEFGUyBzZXJ2ZXIuIEknbGwgbmVlZCB0byBkaWcgaW50byBpdHMgZGVmaW5pdGlvbiBhbmQgdXNhZ2VzIHRvIGRldGVybWluZSBpdHMgZnVuY3Rpb24sIHNpbmNlIFwiYnJlYWtpbmcgY2FsbGJhY2tzXCIgY291bGQgY292ZXIgYSByYW5nZSBvZiBzY2VuYXJpb3MgZnJvbSBzaW1wbGUgaW5zdHJ1bWVudGF0aW9uIHRvIGZ1bGwtb24gZmF1bHQgaW5qZWN0aW9uLiBJdCBjb3VsZCBhbHNvIGJlIGEgbWV0aG9kIHRvIHNhZmVseSByZW1vdmUgY2FsbGJhY2tzIGZyb20gb3BlcmF0aW9uLiBNeSBnb2FsIGlzIHRvIGdldCBhIGNsZWFyZXIgcGljdHVyZSBvZiBob3cgdGhlc2UgdHdvIGludGVyYWN0LCBpZiBhdCBhbGwuIElzIG9uZSBmdW5jdGlvbiB1c2VkIHRvIGJyZWFrIHRoZSBjYWxsYmFja3MgaW52b2tlZCBieSB0aGUgb3RoZXI/IFRpbWUgdG8gZGl2ZSBkZWVwZXIgYW5kIHNlZSB3aGF0IHRoZSBjb2RlIHJldmVhbHMhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIzMDYyLCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjJUMDk6Mjk6MTAuNjI3Njg0Nzg3WiIsIlNlcSI6NDAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MTQ2NDg5OTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYWZzX2JyZWFrX3NvbWVfY2FsbGJhY2tzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL2Fmcy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvYWZzL2NhbGxiYWNrLmM9MTgxPXN0YXRpYyB2b2lkIGFmc19icmVha19vbmVfY2FsbGJhY2soc3RydWN0IGFmc19zZXJ2ZXIgKnNlcnZlcixcXG4tLVxcbmZzL2Fmcy9jYWxsYmFjay5jLTIwNS1cXG5mcy9hZnMvY2FsbGJhY2suYzoyMDY6c3RhdGljIHZvaWQgYWZzX2JyZWFrX3NvbWVfY2FsbGJhY2tzKHN0cnVjdCBhZnNfc2VydmVyICpzZXJ2ZXIsXFxuZnMvYWZzL2NhbGxiYWNrLmMtMjA3LVxcdFxcdFxcdFxcdCAgICAgc3RydWN0IGFmc19jYWxsYmFja19icmVhayAqY2JiLFxcbi0tXFxuZnMvYWZzL2NhbGxiYWNrLmM9MjUzPXZvaWQgYWZzX2JyZWFrX2NhbGxiYWNrcyhzdHJ1Y3QgYWZzX3NlcnZlciAqc2VydmVyLCBzaXplX3QgY291bnQsXFxuLS1cXG5mcy9hZnMvY2FsbGJhY2suYy0yNjAtXFx0d2hpbGUgKGNvdW50IFxcdTAwM2UgMClcXG5mcy9hZnMvY2FsbGJhY2suYzoyNjE6XFx0XFx0YWZzX2JyZWFrX3NvbWVfY2FsbGJhY2tzKHNlcnZlciwgY2FsbGJhY2tzLCBcXHUwMDI2Y291bnQpO1xcbmZzL2Fmcy9jYWxsYmFjay5jLTI2Mi19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIyVDA5OjI5OjExLjA0MjM0MDE1NloiLCJTZXEiOjQxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NDIzODY0MDY5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipHbG9iYWwgU2NvcGUgQ29uc2lkZXJhdGlvbnMqKlxuXG5Pa2F5LCBzbyBgYWZzX2JyZWFrX2NhbGxiYWNrc2AuLi4gdGhhdCdzIGEgZ2xvYmFsLCByaWdodD8gVGhhdCBpbW1lZGlhdGVseSBzZXRzIG9mZiBzb21lIGFsYXJtcywgZG9lc24ndCBpdD8gQXMgc29tZW9uZSBkZWVwIGluIHRoaXMgY29kZWJhc2UsIHRoZSBpbXBsaWNhdGlvbnMgYXJlIHByZXR0eSBjbGVhci4gR2xvYmFsIHZhcmlhYmxlcyBpbiBhIHN5c3RlbSBsaWtlIHRoaXMsIGVzcGVjaWFsbHkgc29tZXRoaW5nIHRoYXQgc2VlbXMgc28gY2VudHJhbCB0byBjYWxsYmFjayBoYW5kbGluZywgb2Z0ZW4gbGVhZCB0byBoZWFkYWNoZXMgZG93biB0aGUgcm9hZC4gSSdtIHRoaW5raW5nIGFib3V0IHBvdGVudGlhbCB0aHJlYWQgc2FmZXR5IGlzc3VlcywgdW5pbnRlbmRlZCBzaWRlIGVmZmVjdHMgZnJvbSBkaXN0YW50IHBhcnRzIG9mIHRoZSBjb2RlIGJhc2UgbW9kaWZ5aW5nIGl0cyBzdGF0ZSwgYW5kIGluY3JlYXNlZCBkaWZmaWN1bHR5IGluIHVuaXQgdGVzdGluZy4gSXQgbWFrZXMgdGhlIGJlaGF2aW9yIG9mIHRoZSBzeXN0ZW0gbXVjaCBoYXJkZXIgdG8gcmVhc29uIGFib3V0IGxvY2FsbHkuIFdlIHJlYWxseSBuZWVkIHRvIGNhcmVmdWxseSBjb25zaWRlciBob3cgdGhpcyBnbG9iYWwgaXMgYWNjZXNzZWQgYW5kIG1vZGlmaWVkLCB3aGF0IHByb3RlY3Rpb25zIHdlIGhhdmUsIGFuZCB3aGV0aGVyIGEgcmVmYWN0b3IgdG8gcmVkdWNlIGl0cyBzY29wZSBpcyBldmVuIGZlYXNpYmxlLiBQZXJoYXBzIHRoZXJlIGlzIGFuIGVhc3kgd2F5IHRvIG1vdmUgdGhlIGNhbGxiYWNrcyBpbnRvIHRoZSBjb250ZXh0IG9mIHRoZSBhZnMgaW5zdGFuY2UsIG9yIHV0aWxpemUgc29tZSBvdGhlciB0ZWNobmlxdWUgZm9yIHJlZHVjaW5nIHRoZSBnbG9iYWwgc2NvcGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIzNjE1LCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjJUMDk6Mjk6MTUuNDY2MjA3NzU1WiIsIlNlcSI6NDIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5OTcxNDU3NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhZnNfYnJlYWtfY2FsbGJhY2tzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL2Fmcy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvYWZzL2NhbGxiYWNrLmM9MjA2PXN0YXRpYyB2b2lkIGFmc19icmVha19zb21lX2NhbGxiYWNrcyhzdHJ1Y3QgYWZzX3NlcnZlciAqc2VydmVyLFxcbi0tXFxuZnMvYWZzL2NhbGxiYWNrLmMtMjUyLSAqL1xcbmZzL2Fmcy9jYWxsYmFjay5jOjI1Mzp2b2lkIGFmc19icmVha19jYWxsYmFja3Moc3RydWN0IGFmc19zZXJ2ZXIgKnNlcnZlciwgc2l6ZV90IGNvdW50LFxcbmZzL2Fmcy9jYWxsYmFjay5jLTI1NC1cXHRcXHRcXHQgc3RydWN0IGFmc19jYWxsYmFja19icmVhayAqY2FsbGJhY2tzKVxcbi0tXFxuZnMvYWZzL2Ntc2VydmljZS5jPTE2ND1zdGF0aWMgdm9pZCBTUlhBRlNDQl9DYWxsQmFjayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuLS1cXG5mcy9hZnMvY21zZXJ2aWNlLmMtMTc4LVxcdFxcdFxcdFxcdCBhZnNfc2VydmVyX3RyYWNlX2NhbGxiYWNrKTtcXG5mcy9hZnMvY21zZXJ2aWNlLmM6MTc5OlxcdFxcdGFmc19icmVha19jYWxsYmFja3MoY2FsbC1cXHUwMDNlc2VydmVyLCBjYWxsLVxcdTAwM2Vjb3VudCwgY2FsbC1cXHUwMDNlcmVxdWVzdCk7XFxuZnMvYWZzL2Ntc2VydmljZS5jLTE4MC1cXHR9XFxuLS1cXG5mcy9hZnMvaW50ZXJuYWwuaD0xMDQwPWV4dGVybiB2b2lkIGFmc19icmVha19jYWxsYmFjayhzdHJ1Y3QgYWZzX3Zub2RlICosIGVudW0gYWZzX2NiX2JyZWFrX3JlYXNvbik7XFxuZnMvYWZzL2ludGVybmFsLmg6MTA0MTpleHRlcm4gdm9pZCBhZnNfYnJlYWtfY2FsbGJhY2tzKHN0cnVjdCBhZnNfc2VydmVyICosIHNpemVfdCwgc3RydWN0IGFmc19jYWxsYmFja19icmVhayAqKTtcXG5mcy9hZnMvaW50ZXJuYWwuaC0xMDQyLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yMlQwOToyOToxNS41NjU5MzM5NTNaIiwiU2VxIjo0MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODE1NzE5NjcyNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6XG5cbioqRm9jdXNpbmcgb24gQUZTIFN5bWJvbCBNYW5hZ2VtZW50KipcblxuT2theSwgc28gSSdtIHRoaW5raW5nLCB3ZSBuZWVkIHRvIGJyaW5nIGluIGBhZnNfYnJlYWtfY2FsbGJhY2tzYCBhcyBhIGZvY3VzIHN5bWJvbC4gSXQncyBhIGtleSBwaWVjZSBpbiB0aGlzIHdob2xlIEFGUyBwdXp6bGUsIGFuZCBpdCBmZWVscyBsaWtlIGl0J3MgYmVlbiBnZXR0aW5nIG92ZXJsb29rZWQgaW4gdGhlIHN5bWJvbCBtYW5hZ2VtZW50IHByb2Nlc3MuIEl0J3MgY3JpdGljYWwgdG8gZW5zdXJlIHdlJ3JlIGFjY291bnRpbmcgZm9yIGhvdyB0aGlzIGFzcGVjdCB3b3Jrcy5cblxuV2hpbGUgSSdtIGF0IGl0LCBJIHNob3VsZCBwcm9iYWJseSBkb3VibGUtY2hlY2sgYGFmc19keW5yb290X3JlYWRkaXJfY2VsbHNgIGFzIHdlbGwuIEp1c3QgYSBxdWljayBzYW5pdHkgY2hlY2sgdG8gc2VlIGlmIGl0IG1ha2VzIHNlbnNlIGluIHRoaXMgY29udGV4dC4gSXQncyBiZXR0ZXIgdG8gYmUgc2FmZSB0aGFuIHNvcnJ5LCBlc3BlY2lhbGx5IHdpdGggc29tZXRoaW5nIHRoaXMgZnVuZGFtZW50YWwuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI0MTc3LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjJUMDk6Mjk6MjMuNzIzMTMyNzE3WiIsIlNlcSI6NDQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTk4MTAyMDgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYWZzX2R5bnJvb3RfcmVhZGRpcl9jZWxsc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9hZnMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2Fmcy9keW5yb290LmM9MjQ5PXN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICphZnNfbG9va3VwX2F0Y2VsbChzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBpbm9fdCBpbm8pXFxuLS1cXG5mcy9hZnMvZHlucm9vdC5jLTI4My0gKi9cXG5mcy9hZnMvZHlucm9vdC5jOjI4NDpzdGF0aWMgaW50IGFmc19keW5yb290X3JlYWRkaXJfY2VsbHMoc3RydWN0IGFmc19uZXQgKm5ldCwgc3RydWN0IGRpcl9jb250ZXh0ICpjdHgpXFxuZnMvYWZzL2R5bnJvb3QuYy0yODUte1xcbi0tXFxuZnMvYWZzL2R5bnJvb3QuYz0zMzA9c3RhdGljIGludCBhZnNfZHlucm9vdF9yZWFkZGlyKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgZGlyX2NvbnRleHQgKmN0eClcXG4tLVxcbmZzL2Fmcy9keW5yb290LmMtMzUyLVxcdFxcdGRvd25fcmVhZChcXHUwMDI2bmV0LVxcdTAwM2VjZWxsc19sb2NrKTtcXG5mcy9hZnMvZHlucm9vdC5jOjM1MzpcXHRcXHRyZXQgPSBhZnNfZHlucm9vdF9yZWFkZGlyX2NlbGxzKG5ldCwgY3R4KTtcXG5mcy9hZnMvZHlucm9vdC5jLTM1NC1cXHRcXHR1cF9yZWFkKFxcdTAwMjZuZXQtXFx1MDAzZWNlbGxzX2xvY2spO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yMlQwOToyOToyMy44NDI5NDg1OTRaIiwiU2VxIjo0NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzAwNDgyMzYyNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0cywgcHJlc2VudGVkIGFzIHRob3VnaCB0aGV5IHdlcmUgbXkgb3duOlxuXG4qKkdsb2JhbCBTY29wZSBDb25zaWRlcmF0aW9ucyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGBhZnNfZHlucm9vdF9yZWFkZGlyYCwgYW5kIGltbWVkaWF0ZWx5IEknbSBoaXQgd2l0aCB0aGUgZmFjdCB0aGF0IGl0J3MgZ2xvYmFsbHkgYWNjZXNzaWJsZS4gVGhhdCdzIGEga2V5IG9ic2VydmF0aW9uLCBhbmQgaXQgcmFpc2VzIGEgbG90IG9mIHF1ZXN0aW9ucyByaWdodCBvZmYgdGhlIGJhdC4gS25vd2luZyB0aGUgc2NvcGUgbGlrZSB0aGF0IGlzIGltcG9ydGFudC4gSXQncyBhIGZ1bmRhbWVudGFsIHBpZWNlIG9mIGluZm9ybWF0aW9uIHRoYXQgaGVscHMgbWUgdW5kZXJzdGFuZCBob3cgdGhpcyBmdW5jdGlvbiBpbnRlcmFjdHMgd2l0aCB0aGUgcmVzdCBvZiB0aGUgc3lzdGVtLiBJIG5lZWQgdG8ga2VlcCB0aGF0IGluIG1pbmQgYXMgSSBkZWx2ZSBkZWVwZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI0NjM2LCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjJUMDk6Mjk6MzAuODQ3Nzc1NDk5WiIsIlNlcSI6NDYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTMxMDM4MTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYWZzX2R5bnJvb3RfcmVhZGRpclwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9hZnMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2Fmcy9keW5yb290LmM9MjQ5PXN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICphZnNfbG9va3VwX2F0Y2VsbChzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBpbm9fdCBpbm8pXFxuLS1cXG5mcy9hZnMvZHlucm9vdC5jLTI4My0gKi9cXG5mcy9hZnMvZHlucm9vdC5jOjI4NDpzdGF0aWMgaW50IGFmc19keW5yb290X3JlYWRkaXJfY2VsbHMoc3RydWN0IGFmc19uZXQgKm5ldCwgc3RydWN0IGRpcl9jb250ZXh0ICpjdHgpXFxuZnMvYWZzL2R5bnJvb3QuYy0yODUte1xcbi0tXFxuZnMvYWZzL2R5bnJvb3QuYy0zMjktICovXFxuZnMvYWZzL2R5bnJvb3QuYzozMzA6c3RhdGljIGludCBhZnNfZHlucm9vdF9yZWFkZGlyKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgZGlyX2NvbnRleHQgKmN0eClcXG5mcy9hZnMvZHlucm9vdC5jLTMzMS17XFxuLS1cXG5mcy9hZnMvZHlucm9vdC5jLTM1Mi1cXHRcXHRkb3duX3JlYWQoXFx1MDAyNm5ldC1cXHUwMDNlY2VsbHNfbG9jayk7XFxuZnMvYWZzL2R5bnJvb3QuYzozNTM6XFx0XFx0cmV0ID0gYWZzX2R5bnJvb3RfcmVhZGRpcl9jZWxscyhuZXQsIGN0eCk7XFxuZnMvYWZzL2R5bnJvb3QuYy0zNTQtXFx0XFx0dXBfcmVhZChcXHUwMDI2bmV0LVxcdTAwM2VjZWxsc19sb2NrKTtcXG4tLVxcbmZzL2Fmcy9keW5yb290LmM9MzU5PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGFmc19keW5yb290X2ZpbGVfb3BlcmF0aW9ucyA9IHtcXG4tLVxcbmZzL2Fmcy9keW5yb290LmMtMzYxLVxcdC5yZWFkXFx0XFx0PSBnZW5lcmljX3JlYWRfZGlyLFxcbmZzL2Fmcy9keW5yb290LmM6MzYyOlxcdC5pdGVyYXRlX3NoYXJlZFxcdD0gYWZzX2R5bnJvb3RfcmVhZGRpcixcXG5mcy9hZnMvZHlucm9vdC5jLTM2My1cXHQuZnN5bmNcXHRcXHQ9IG5vb3BfZnN5bmMsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIyVDA5OjI5OjMwLjk2MDg4NzUxNloiLCJTZXEiOjQ3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0OTM3NTgwMDU2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIHlvdSByZXF1ZXN0ZWQ6XG5cbioqRGVidWdnaW5nIGFuIEFGUyBGaWxlIFN5c3RlbSBWdWxuZXJhYmlsaXR5KipcblxuT2theSwgc28gSSd2ZSBjb25maXJtZWQgdGhhdCBgYWZzX2R5bnJvb3RfcmVhZGRpcmAgaXMgcmVhY2hhYmxlLiBUaGF0J3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBOb3csIGdpdmVuIHRoYXQgaW5pdGlhbCBhY2Nlc3MgdmVjdG9yLCB0aGUgbG9naWNhbCBuZXh0IHN0ZXAgaW4gbXkgYW5hbHlzaXMgaXMgdG8gaW52ZXN0aWdhdGUgYGFmc19wdXRfb3BlcmF0aW9uYC4gSSB3YW50IHRvIHNlZSBob3cgdGhhdCBmdW5jdGlvbiBpbnRlcmFjdHMgd2l0aCB0aGUgcmVhZCBvcGVyYXRpb24sIHBhcnRpY3VsYXJseSBpbiBhIGR5bmFtaWMgcm9vdCBjb250ZXh0LiBNeSBoeXBvdGhlc2lzIGlzIHRoYXQgdGhlcmUgbWlnaHQgYmUgYSBmbGF3IGluIHRoZSBpbnRlcmFjdGlvbiB0aGF0IEkgY2FuIGV4cGxvaXQuIEknbGwgZm9jdXMgb24gaG93IGBhZnNfcHV0X29wZXJhdGlvbmAgaGFuZGxlcyBwZXJtaXNzaW9ucywgZGF0YSB2YWxpZGF0aW9uLCBhbmQgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyBpbiB0aGlzIGNvbnRleHQuIEknbSBsb29raW5nIGZvciBhIHdheSB0byB1c2UgdGhhdCBpbnRlcmFjdGlvbiwgb3IgbGFjayBvZiBwcm9wZXIgcHJvdGVjdGlvbnMsIHRvIGVsZXZhdGUgcHJpdmlsZWdlcyBvciBvdGhlcndpc2UgY2F1c2UgdW5pbnRlbmRlZCBiZWhhdmlvdXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI1MTg4LCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjJUMDk6Mjk6MzUuODk4NDcxODQyWiIsIlNlcSI6NDgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTU3MDgzODcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYWZzX3B1dF9vcGVyYXRpb25cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvYWZzL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9hZnMvZGlyLmM9NzcxPXN0YXRpYyBzdHJ1Y3QgaW5vZGUgKmFmc19kb19sb29rdXAoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSlcXG4tLVxcbmZzL2Fmcy9kaXIuYy04OTctXFx0XFx0ZGVudHJ5LVxcdTAwM2VkX2ZzZGF0YSA9ICh2b2lkICopKHVuc2lnbmVkIGxvbmcpb3AtXFx1MDAzZWZpbGVbMF0uZHZfYmVmb3JlO1xcbmZzL2Fmcy9kaXIuYzo4OTg6XFx0cmV0ID0gYWZzX3B1dF9vcGVyYXRpb24ob3ApO1xcbmZzL2Fmcy9kaXIuYy04OTktb3V0Olxcbi0tXFxuZnMvYWZzL2Rpci5jPTE0MDY9c3RhdGljIGludCBhZnNfcm1kaXIoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSlcXG4tLVxcbmZzL2Fmcy9kaXIuYy0xNDUzLWVycm9yOlxcbmZzL2Fmcy9kaXIuYzoxNDU0OlxcdHJldCA9IGFmc19wdXRfb3BlcmF0aW9uKG9wKTtcXG5mcy9hZnMvZGlyLmMtMTQ1NS1cXHRnb3RvIG91dDtcXG4tLVxcbmZzL2Fmcy9kaXIuYz0xNTUyPXN0YXRpYyBpbnQgYWZzX3VubGluayhzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5KVxcbi0tXFxuZnMvYWZzL2Rpci5jLTE2MTctZXJyb3I6XFxuZnMvYWZzL2Rpci5jOjE2MTg6XFx0cmV0ID0gYWZzX3B1dF9vcGVyYXRpb24ob3ApO1xcbmZzL2Fmcy9kaXIuYy0xNjE5LVxcdGFmc19kaXJfdW51c2VfY29va2llKGR2bm9kZSwgcmV0KTtcXG4tLVxcbmZzL2Fmcy9kaXIuYz0xNzExPXN0YXRpYyBpbnQgYWZzX2xpbmsoc3RydWN0IGRlbnRyeSAqZnJvbSwgc3RydWN0IGlub2RlICpkaXIsXFxuLS1cXG5mcy9hZnMvZGlyLmMtMTc1NC1lcnJvcl9vcDpcXG5mcy9hZnMvZGlyLmM6MTc1NTpcXHRhZnNfcHV0X29wZXJhdGlvbihvcCk7XFxuZnMvYWZzL2Rpci5jLTE3NTYtXFx0YWZzX2Rpcl91bnVzZV9jb29raWUoZHZub2RlLCByZXQpO1xcbi0tXFxuZnMvYWZzL2Rpci5jPTIwNzA9c3RhdGljIGludCBhZnNfcmVuYW1lKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKm9sZF9kaXIsXFxuLS1cXG5mcy9hZnMvZGlyLmMtMjIwMy1lcnJvcjpcXG5mcy9hZnMvZGlyLmM6MjIwNDpcXHRyZXQgPSBhZnNfcHV0X29wZXJhdGlvbihvcCk7XFxuZnMvYWZzL2Rpci5jLTIyMDUtXFx0Z290byBvdXQ7XFxuLS1cXG5mcy9hZnMvZGlyX3NpbGx5LmM9NjA9c3RhdGljIGludCBhZnNfZG9fc2lsbHlfcmVuYW1lKHN0cnVjdCBhZnNfdm5vZGUgKmR2bm9kZSwgc3RydWN0IGFmc192bm9kZSAqdm5vZGUsXFxuLS1cXG5mcy9hZnMvZGlyX3NpbGx5LmMtNzMtXFx0aWYgKCFvcC1cXHUwMDNlbW9yZV9maWxlcykge1xcbmZzL2Fmcy9kaXJfc2lsbHkuYzo3NDpcXHRcXHRhZnNfcHV0X29wZXJhdGlvbihvcCk7XFxuZnMvYWZzL2Rpcl9zaWxseS5jLTc1LVxcdFxcdHJldHVybiAtRU5PTUVNO1xcbi0tXFxuZnMvYWZzL2Rpcl9zaWxseS5jPTIwMT1zdGF0aWMgaW50IGFmc19kb19zaWxseV91bmxpbmsoc3RydWN0IGFmc192bm9kZSAqZHZub2RlLCBzdHJ1Y3QgYWZzX3Zub2RlICp2bm9kZSxcXG4tLVxcbmZzL2Fmcy9kaXJfc2lsbHkuYy0yMzctXFxuZnMvYWZzL2Rpcl9zaWxseS5jOjIzODpcXHRyZXR1cm4gYWZzX3B1dF9vcGVyYXRpb24ob3ApO1xcbmZzL2Fmcy9kaXJfc2lsbHkuYy0yMzktfVxcbi0tXFxuZnMvYWZzL2ZpbGUuYz0yNTA9c3RhdGljIHZvaWQgYWZzX2VuZF9yZWFkKHN0cnVjdCBhZnNfb3BlcmF0aW9uICpvcClcXG4tLVxcbmZzL2Fmcy9maWxlLmMtMjYyLVxcdGFmc19lbmRfdm5vZGVfb3BlcmF0aW9uKG9wKTtcXG5mcy9hZnMvZmlsZS5jOjI2MzpcXHRhZnNfcHV0X29wZXJhdGlvbihvcCk7XFxuZnMvYWZzL2ZpbGUuYy0yNjQtfVxcbi0tXFxuZnMvYWZzL2ZpbGUuYz0zMzU9c3RhdGljIHZvaWQgYWZzX2lzc3VlX3JlYWQoc3RydWN0IG5ldGZzX2lvX3N1YnJlcXVlc3QgKnN1YnJlcSlcXG4tLVxcbmZzL2Fmcy9maWxlLmMtMzY2LVxcdFxcdGlmICghYWZzX2JlZ2luX3Zub2RlX29wZXJhdGlvbihvcCkpIHtcXG5mcy9hZnMvZmlsZS5jOjM2NzpcXHRcXHRcXHRzdWJyZXEtXFx1MDAzZWVycm9yID0gYWZzX3B1dF9vcGVyYXRpb24ob3ApO1xcbmZzL2Fmcy9maWxlLmMtMzY4LVxcdFxcdFxcdG5ldGZzX3JlYWRfc3VicmVxX3Rlcm1pbmF0ZWQoc3VicmVxKTtcXG4tLVxcbmZzL2Fmcy9mc19vcGVyYXRpb24uYz0yNzg9dm9pZCBhZnNfd2FpdF9mb3Jfb3BlcmF0aW9uKHN0cnVjdCBhZnNfb3BlcmF0aW9uICpvcClcXG4tLVxcbmZzL2Fmcy9mc19vcGVyYXRpb24uYy0zMjgtICovXFxuZnMvYWZzL2ZzX29wZXJhdGlvbi5jOjMyOTppbnQgYWZzX3B1dF9vcGVyYXRpb24oc3RydWN0IGFmc19vcGVyYXRpb24gKm9wKVxcbmZzL2Fmcy9mc19vcGVyYXRpb24uYy0zMzAte1xcbi0tXFxuZnMvYWZzL2ZzX29wZXJhdGlvbi5jPTM3Mj1pbnQgYWZzX2RvX3N5bmNfb3BlcmF0aW9uKHN0cnVjdCBhZnNfb3BlcmF0aW9uICpvcClcXG4tLVxcbmZzL2Fmcy9mc19vcGVyYXRpb24uYy0zNzUtXFx0YWZzX3dhaXRfZm9yX29wZXJhdGlvbihvcCk7XFxuZnMvYWZzL2ZzX29wZXJhdGlvbi5jOjM3NjpcXHRyZXR1cm4gYWZzX3B1dF9vcGVyYXRpb24ob3ApO1xcbmZzL2Fmcy9mc19vcGVyYXRpb24uYy0zNzctfVxcbi0tXFxuZnMvYWZzL2lub2RlLmM9MzcyPWludCBhZnNfZmV0Y2hfc3RhdHVzKHN0cnVjdCBhZnNfdm5vZGUgKnZub2RlLCBzdHJ1Y3Qga2V5ICprZXksIGJvb2wgaXNfbmV3LFxcbi0tXFxuZnMvYWZzL2lub2RlLmMtMzk0LVxcdFxcdCpfY2FsbGVyX2FjY2VzcyA9IG9wLVxcdTAwM2VmaWxlWzBdLnNjYi5zdGF0dXMuY2FsbGVyX2FjY2VzcztcXG5mcy9hZnMvaW5vZGUuYzozOTU6XFx0cmV0dXJuIGFmc19wdXRfb3BlcmF0aW9uKG9wKTtcXG5mcy9hZnMvaW5vZGUuYy0zOTYtfVxcbi0tXFxuZnMvYWZzL2ludGVybmFsLmg9MTIxNT1leHRlcm4gc3RydWN0IGFmc19vcGVyYXRpb24gKmFmc19hbGxvY19vcGVyYXRpb24oc3RydWN0IGtleSAqLCBzdHJ1Y3QgYWZzX3ZvbHVtZSAqKTtcXG5mcy9hZnMvaW50ZXJuYWwuaDoxMjE2OmV4dGVybiBpbnQgYWZzX3B1dF9vcGVyYXRpb24oc3RydWN0IGFmc19vcGVyYXRpb24gKik7XFxuZnMvYWZzL2ludGVybmFsLmgtMTIxNy1leHRlcm4gYm9vbCBhZnNfYmVnaW5fdm5vZGVfb3BlcmF0aW9uKHN0cnVjdCBhZnNfb3BlcmF0aW9uICopO1xcbi0tXFxuZnMvYWZzL3dyaXRlLmM9MTAyPXN0YXRpYyB2b2lkIGFmc19pc3N1ZV93cml0ZV93b3JrZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbi0tXFxuZnMvYWZzL3dyaXRlLmMtMTQ4LVxcdGFmc193YWl0X2Zvcl9vcGVyYXRpb24ob3ApO1xcbmZzL2Fmcy93cml0ZS5jOjE0OTpcXHRyZXQgPSBhZnNfcHV0X29wZXJhdGlvbihvcCk7XFxuZnMvYWZzL3dyaXRlLmMtMTUwLVxcdHN3aXRjaCAocmV0KSB7XFxuLS1cXG5mcy9hZnMveGF0dHIuYz0zNj1zdGF0aWMgaW50IGFmc194YXR0cl9nZXRfYWNsKGNvbnN0IHN0cnVjdCB4YXR0cl9oYW5kbGVyICpoYW5kbGVyLFxcbi0tXFxuZnMvYWZzL3hhdHRyLmMtNTYtXFx0b3AtXFx1MDAzZWFjbCA9IE5VTEw7XFxuZnMvYWZzL3hhdHRyLmM6NTc6XFx0cmV0ID0gYWZzX3B1dF9vcGVyYXRpb24ob3ApO1xcbmZzL2Fmcy94YXR0ci5jLTU4LVxcbi0tXFxuZnMvYWZzL3hhdHRyLmM9OTk9c3RhdGljIGludCBhZnNfeGF0dHJfc2V0X2FjbChjb25zdCBzdHJ1Y3QgeGF0dHJfaGFuZGxlciAqaGFuZGxlcixcXG4tLVxcbmZzL2Fmcy94YXR0ci5jLTExNi1cXHRpZiAoIWFmc19tYWtlX2FjbChvcCwgYnVmZmVyLCBzaXplKSlcXG5mcy9hZnMveGF0dHIuYzoxMTc6XFx0XFx0cmV0dXJuIGFmc19wdXRfb3BlcmF0aW9uKG9wKTtcXG5mcy9hZnMveGF0dHIuYy0xMTgtXFxuLS1cXG5mcy9hZnMveGF0dHIuYz0xMzg9c3RhdGljIGludCBhZnNfeGF0dHJfZ2V0X3lmcyhjb25zdCBzdHJ1Y3QgeGF0dHJfaGFuZGxlciAqaGFuZGxlcixcXG4tLVxcbmZzL2Fmcy94YXR0ci5jLTE3OC1cXHRhZnNfd2FpdF9mb3Jfb3BlcmF0aW9uKG9wKTtcXG5mcy9hZnMveGF0dHIuYzoxNzk6XFx0cmV0ID0gYWZzX3B1dF9vcGVyYXRpb24ob3ApO1xcbmZzL2Fmcy94YXR0ci5jLTE4MC1cXG4tLVxcbmZzL2Fmcy94YXR0ci5jPTIzMD1zdGF0aWMgaW50IGFmc194YXR0cl9zZXRfeWZzKGNvbnN0IHN0cnVjdCB4YXR0cl9oYW5kbGVyICpoYW5kbGVyLFxcbi0tXFxuZnMvYWZzL3hhdHRyLmMtMjQ5LVxcdGlmICghYWZzX21ha2VfYWNsKG9wLCBidWZmZXIsIHNpemUpKVxcbmZzL2Fmcy94YXR0ci5jOjI1MDpcXHRcXHRyZXR1cm4gYWZzX3B1dF9vcGVyYXRpb24ob3ApO1xcbmZzL2Fmcy94YXR0ci5jLTI1MS1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjJUMDk6Mjk6MzYuMDE0MTg5ODA5WiIsIlNlcSI6NDksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE2MjI2ODI2NTM1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IGltbWVkaWF0ZSB0aG91Z2h0IHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gdGhlIEFGUyBDb2RlYmFzZSoqXG5cbk9rYXksIHNvIGBhZnNfcHV0X29wZXJhdGlvbmAgaXMgYSBnbG9iYWxseSBhY2Nlc3NpYmxlIGZ1bmN0aW9uIOKAkyBhIGNydWNpYWwgc3RhcnRpbmcgcG9pbnQgZm9yIGFueSBBRlMgaW52ZXN0aWdhdGlvbi4gTXkgaW1tZWRpYXRlIGluc3RpbmN0IGlzIHRvIGZpZ3VyZSBvdXQgaG93IGl0J3MgYmVpbmcgdXNlZCBhbmQsIGNyaXRpY2FsbHksIHdoYXQgaXQncyBpbnRlcmFjdGluZyB3aXRoLiBUbyBnZXQgYSBiZXR0ZXIgZ3Jhc3Agb2YgdGhlIGJyb2FkZXIgY29udGV4dCwgSSdsbCBnbyBzdHJhaWdodCB0byBgYWZzX3NldF9uZXRmc19jb250ZXh0YC4gSSdtIGd1ZXNzaW5nIHRoYXQgZnVuY3Rpb24gaGFuZGxlcyB0aGUgbmV0d29yayBmaWxlIHN5c3RlbSBjb250ZXh0LCBhbmQgbGlrZWx5IHBsYXlzIGEga2V5IHJvbGUgaW4gaG93IHRoZXNlIG9wZXJhdGlvbnMgZ2V0IHJvdXRlZCBhbmQgaGFuZGxlZC4gVW5kZXJzdGFuZGluZyBob3cgYGFmc19wdXRfb3BlcmF0aW9uYCBpbnRlcmFjdHMgd2l0aCB0aGUgbmV0d29yayBjb250ZXh0IHNob3VsZCBnaXZlIG1lIHNvbWUgc29saWQgbGVhZHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI3MzM0LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjJUMDk6Mjk6NTIuMjQxMDE5NjE0WiIsIlNlcSI6NTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDY2MDI3MjgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYWZzX3NldF9uZXRmc19jb250ZXh0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL2Fmcy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvYWZzL2lub2RlLmM9Mjg9c3RhdGljIG5vaW5saW5lIHZvaWQgZHVtcF92bm9kZShzdHJ1Y3QgYWZzX3Zub2RlICp2bm9kZSwgc3RydWN0IGFmc192bm9kZSAqcGFyZW50X3Zub2RlKVxcbi0tXFxuZnMvYWZzL2lub2RlLmMtNTQtICovXFxuZnMvYWZzL2lub2RlLmM6NTU6c3RhdGljIHZvaWQgYWZzX3NldF9uZXRmc19jb250ZXh0KHN0cnVjdCBhZnNfdm5vZGUgKnZub2RlLCBib29sIGlzX2ZpbGUpXFxuZnMvYWZzL2lub2RlLmMtNTYte1xcbi0tXFxuZnMvYWZzL2lub2RlLmM9NjM9c3RhdGljIGludCBhZnNfaW5vZGVfaW5pdF9mcm9tX3N0YXR1cyhzdHJ1Y3QgYWZzX29wZXJhdGlvbiAqb3AsXFxuLS1cXG5mcy9hZnMvaW5vZGUuYy05Ny1cXHRpbm9kZV9zZXRfYnl0ZXMoaW5vZGUsIHN0YXR1cy1cXHUwMDNlc2l6ZSk7XFxuZnMvYWZzL2lub2RlLmM6OTg6XFx0YWZzX3NldF9uZXRmc19jb250ZXh0KHZub2RlLCBzdGF0dXMtXFx1MDAzZXR5cGUgPT0gQUZTX0ZUWVBFX0ZJTEUpO1xcbmZzL2Fmcy9pbm9kZS5jLTk5LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yMlQwOToyOTo1Mi4zNDc2MjgxMTJaIiwiU2VxIjo1MSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzg5MTUyOTc2MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIHRoZSBBRlMgTmV0d29yayBGaWxlc3lzdGVtIENvbnRleHQqKlxuXG5Pa2F5LCBzbyBgYWZzX3NldF9uZXRmc19jb250ZXh0YCBpcyBzdGF0aWMsIHdoaWNoIGltbWVkaWF0ZWx5IGZsYWdzIHNvbWUgaW1wbGljYXRpb25zLiBUaGF0IG1lYW5zIGl0cyBzY29wZSBpcyBsaW1pdGVkIHdpdGhpbiB0aGUgY29tcGlsYXRpb24gdW5pdCwgcHJlc3VtYWJseSB0byBhdm9pZCBnbG9iYWwgbmFtZXNwYWNlIHBvbGx1dGlvbiBhbmQgYWxsb3cgZm9yIHBvdGVudGlhbGx5IG9wdGltaXplZCB1c2Ugd2l0aGluIHRoYXQgc3BlY2lmaWMgbW9kdWxlLiBJdCBhbHNvIHN1Z2dlc3RzIHRoYXQgdGhpcyBmdW5jdGlvbiBpc24ndCBpbnRlbmRlZCBmb3IgZGlyZWN0IGV4dGVybmFsIHVzZSBvciBtb2RpZmljYXRpb24gYWNyb3NzIHRoZSBlbnRpcmUgc3lzdGVtIOKAkyBsaWtlbHkgYSBkZWxpYmVyYXRlIGRlc2lnbiBjaG9pY2UgcmVsYXRlZCB0byBzZWN1cml0eSBvciBkYXRhIGludGVncml0eS5cblxuTXkgbmV4dCBpbW1lZGlhdGUgY29uY2VybiBpcyBhcm91bmQgaG93IHRoZSBjb250ZXh0IGlzIGFjdHVhbGx5IGVzdGFibGlzaGVkIGFuZCB1c2VkLCBzbyBJJ2xsIG5lZWQgdG8gZGlnIGludG8gYGFmc19leHRyYWN0X3ZsX2FkZHJzYC4gVGhpcyBmdW5jdGlvbiBpcyBsaWtlbHkgcmVzcG9uc2libGUgZm9yIGZldGNoaW5nIHRoZSB2b2x1bWUgbG9jYXRpb24gYWRkcmVzc2VzLCB3aGljaCBpcyBmdW5kYW1lbnRhbCB0byBBRlMncyBhcmNoaXRlY3R1cmUgYW5kIG9wZXJhdGlvbi4gVW5kZXJzdGFuZGluZyBob3cgdGhlc2UgYWRkcmVzc2VzIGFyZSBleHRyYWN0ZWQsIHBvdGVudGlhbGx5IGZyb20gYSBjb25maWd1cmF0aW9uIGZpbGUsIGEgbmV0d29yayBkaXNjb3ZlcnkgcHJvY2Vzcywgb3IgYSBrZXJuZWwgaW50ZXJuYWwgc3RydWN0dXJlIGlzIGdvaW5nIHRvIGJlIGtleS4gSSdsbCBuZWVkIHRvIGV4YW1pbmUgaXQgZm9yIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMsIHNlY3VyaXR5IHZ1bG5lcmFiaWxpdGllcyByZWxhdGVkIHRvIGFkZHJlc3Mgc3Bvb2Zpbmcgb3IgbWFuaXB1bGF0aW9uLCBhbmQgZWZmaWNpZW50IGxvb2t1cCBpbXBsZW1lbnRhdGlvbnMuIFRoZSBjb250ZXh0IGVzdGFibGlzaGVkIGJ5IGBhZnNfc2V0X25ldGZzX2NvbnRleHRgIGlzIGxpa2VseSBpbnRpbWF0ZWx5IHRpZWQgdG8gdGhvc2UgYWRkcmVzc2VzLCBzbyBJIG5lZWQgdG8gZXN0YWJsaXNoIHRoZSBjb25uZWN0aW9uIHRoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNzc3NCwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIyVDA5OjI5OjU2LjIzOTE2MTA4NFoiLCJTZXEiOjUyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTAyODIzNzE3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImFmc19leHRyYWN0X3ZsX2FkZHJzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL2Fmcy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvYWZzL3ZsX2xpc3QuYz03Nz1zdGF0aWMgdTE2IGFmc19leHRyYWN0X2xlMTYoY29uc3QgdTggKipfYilcXG4tLVxcbmZzL2Fmcy92bF9saXN0LmMtODgtICovXFxuZnMvYWZzL3ZsX2xpc3QuYzo4OTpzdGF0aWMgc3RydWN0IGFmc19hZGRyX2xpc3QgKmFmc19leHRyYWN0X3ZsX2FkZHJzKHN0cnVjdCBhZnNfbmV0ICpuZXQsXFxuZnMvYWZzL3ZsX2xpc3QuYy05MC1cXHRcXHRcXHRcXHRcXHRcXHQgIGNvbnN0IHU4ICoqX2IsIGNvbnN0IHU4ICplbmQsXFxuLS1cXG5mcy9hZnMvdmxfbGlzdC5jPTE2MD1zdHJ1Y3QgYWZzX3Zsc2VydmVyX2xpc3QgKmFmc19leHRyYWN0X3Zsc2VydmVyX2xpc3Qoc3RydWN0IGFmc19jZWxsICpjZWxsLFxcbi0tXFxuZnMvYWZzL3ZsX2xpc3QuYy0yNjMtXFx0XFx0ICovXFxuZnMvYWZzL3ZsX2xpc3QuYzoyNjQ6XFx0XFx0YWRkcnMgPSBhZnNfZXh0cmFjdF92bF9hZGRycyhjZWxsLVxcdTAwM2VuZXQsIFxcdTAwMjZiLCBlbmQsIGJzLm5yX2FkZHJzLCBicy5wb3J0KTtcXG5mcy9hZnMvdmxfbGlzdC5jLTI2NS1cXHRcXHRpZiAoSVNfRVJSKGFkZHJzKSkge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yMlQwOToyOTo1Ni4zNDIwMTM3MTJaIiwiU2VxIjo1MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTUzMDY2Njc3MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqU3RhdGljIEZ1bmN0aW9uIENoZWNrIGFuZCBWb2x1bWUgSW5zZXJ0aW9uKipcblxuT2theSwgc28gYGFmc19leHRyYWN0X3ZsX2FkZHJzYCBpcyBhIHN0YXRpYyBmdW5jdGlvbi4gVGhhdCBpbW1lZGlhdGVseSB0cmlnZ2VycyBhIG1lbnRhbCBjaGVjayDigJMgd2hhdCBhcmUgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGF0IHdpdGhpbiB0aGUgYnJvYWRlciBjb250ZXh0IG9mIHRoZSBBRlMgY29kZWJhc2U/IEFyZSB0aGVyZSBhbnkgcG90ZW50aWFsIHZpc2liaWxpdHkgbGltaXRhdGlvbnMgdGhhdCBtaWdodCBpbXBhY3QgaXRzIHVzYWJpbGl0eSBvciBpbnRyb2R1Y2Ugc3VidGxlIGRlcGVuZGVuY2llcyBJIG5lZWQgdG8gYmUgYXdhcmUgb2YsIGVzcGVjaWFsbHkgaW4gdGhlIGFyZWFzIG9mIG1vZHVsZSBpbml0aWFsaXphdGlvbiBvciB0aHJlYWRpbmc/IElzIGl0IGludGVuZGVkIHRvIGJlIHRpZ2h0bHkgc2NvcGVkIGZvciBhIHNwZWNpZmljIG1vZHVsZSwgb3IgaXMgaXRzIHN0YXRpYyBuYXR1cmUgcGVyaGFwcyBhbiBvcHRpbWl6YXRpb24gdGllZCB0byBhIHNwZWNpZmljIGJ1aWxkIGNvbmZpZ3VyYXRpb24/XG5cbk15IG5leHQgdGhvdWdodCB0aGVuIGdvZXMgZGlyZWN0bHkgdG8gYGFmc19pbnNlcnRfdm9sdW1lX2ludG9fY2VsbGAuIFNpbmNlIGBhZnNfZXh0cmFjdF92bF9hZGRyc2AgaXMgc3RhdGljLCBJJ20gbm93IHRoaW5raW5nIGFib3V0IGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGF0IGZ1bmN0aW9uLiBBcmUgd2UgbG9va2luZyBhdCBhIGNhbGwgY2hhaW4sIHBlcmhhcHMgYSB2YWxpZGF0aW9uIHByb2Nlc3Mgd2hlcmUgZXh0cmFjdGVkIGFkZHJlc3NlcyBhcmUgdXNlZCwgb3IgaXMgdGhpcyBtb3JlIG9mIGEgY29tcGxldGVseSB1bnJlbGF0ZWQgZnVuY3Rpb24/IFVuZGVyc3RhbmRpbmcgdGhhdCByZWxhdGlvbnNoaXAgaXMga2V5LiBJIG5lZWQgdG8gcXVpY2tseSByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgb2YgaG93IHZvbHVtZXMgYXJlIGluc2VydGVkIGFuZCBob3cgdGhlIGNlbGwgaXMgc3RydWN0dXJlZCB0byBzZWUgaG93IHRoZSBleHRyYWN0ZWQgdm9sdW1lIGFkZHJlc3NlcyBtaWdodCBiZSB1c2VkIGR1cmluZyB0aGF0IHByb2Nlc3MuIENvbnRleHQgaXMgZXZlcnl0aGluZyBoZXJlLCBhbmQgdGhlIHN0YXRpYyBuYXR1cmUgb2YgdGhlIGZpcnN0IGZ1bmN0aW9uIG1heSB2ZXJ5IHdlbGwgYmUgYSBjbHVlIGFib3V0IHRoZSBvdmVyYWxsIGRlc2lnbiBvciwgcGVyaGFwcywgYSBwb2ludCBvZiBwb3RlbnRpYWwgcmVmYWN0b3JpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI4MzU5LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjJUMDk6MzA6MDEuODcyNjg1MDIzWiIsIlNlcSI6NTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzQyMjE4NDYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYWZzX2luc2VydF92b2x1bWVfaW50b19jZWxsXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL2Fmcy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvYWZzL3ZvbHVtZS5jPTE1PXN0YXRpYyB2b2lkIGFmc19kZXN0cm95X3ZvbHVtZShzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspO1xcbi0tXFxuZnMvYWZzL3ZvbHVtZS5jLTIwLSAqL1xcbmZzL2Fmcy92b2x1bWUuYzoyMTpzdGF0aWMgc3RydWN0IGFmc192b2x1bWUgKmFmc19pbnNlcnRfdm9sdW1lX2ludG9fY2VsbChzdHJ1Y3QgYWZzX2NlbGwgKmNlbGwsXFxuZnMvYWZzL3ZvbHVtZS5jLTIyLVxcdFxcdFxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCBhZnNfdm9sdW1lICp2b2x1bWUpXFxuLS1cXG5mcy9hZnMvdm9sdW1lLmM9MTMzPXN0YXRpYyBzdHJ1Y3QgYWZzX3ZvbHVtZSAqYWZzX2xvb2t1cF92b2x1bWUoc3RydWN0IGFmc19mc19jb250ZXh0ICpwYXJhbXMsXFxuLS1cXG5mcy9hZnMvdm9sdW1lLmMtMTQyLVxcbmZzL2Fmcy92b2x1bWUuYzoxNDM6XFx0dm9sdW1lID0gYWZzX2luc2VydF92b2x1bWVfaW50b19jZWxsKHBhcmFtcy1cXHUwMDNlY2VsbCwgY2FuZGlkYXRlKTtcXG5mcy9hZnMvdm9sdW1lLmMtMTQ0LVxcdGlmICh2b2x1bWUgPT0gY2FuZGlkYXRlKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yMlQwOTozMDowMi4wMDY5MTU3NzlaIiwiU2VxIjo1NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODE0Nzk1OTczNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyB5b3UgcmVxdWVzdGVkOlxuXG4qKkRlbHZpbmcgaW50byB0aGUgRmlsZXN5c3RlbSBJbnRlcm5hbHMqKlxuXG5Pa2F5LCBJJ20gZGlnZ2luZyBpbnRvIHRoaXMgY29kZSwgc3BlY2lmaWNhbGx5IGFyb3VuZCBBRlMgdm9sdW1lIGluc2VydGlvbi4gRmlyc3QgdGhpbmcgSSdtIG5vdGluZyBpcyB0aGF0IGBhZnNfaW5zZXJ0X3ZvbHVtZV9pbnRvX2NlbGxgIGlzIGRlY2xhcmVkIGFzIHN0YXRpYy4gVGhpcyBpbW1lZGlhdGVseSB0ZWxscyBtZSBpdCdzIGxpa2VseSBhbiBpbnRlcm5hbCBmdW5jdGlvbiwgbm90IGludGVuZGVkIGZvciBleHRlcm5hbCB1c2UgYW5kIHByb2JhYmx5IG9ubHkgdmlzaWJsZSB3aXRoaW4gYSBzcGVjaWZpYyBjb21waWxhdGlvbiB1bml0IG9yIGZpbGUuIFRoYXQncyBnb29kIHRvIGtub3cgZnJvbSBhIHNjb3BlIGFuZCBkZXBlbmRlbmN5IHBlcnNwZWN0aXZlLlxuXG5Ob3csIHdoZXJlIGRvZXMgdGhpcyB2b2x1bWUgaW5zZXJ0aW9uIGhhcHBlbiwgYW5kIGhvdyBkb2VzIGl0IHJlbGF0ZSB0byBpbm9kZSBhbGxvY2F0aW9uPyBMZXQncyB0cmFjZSBpdC4gTXkgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gZXhhbWluZSBgYWZzX2FsbG9jX2lub2RlYC4gVGhhdCdzIHdoZXJlIEkgZXhwZWN0IHRvIGZpbmQgdGhlIGFjdHVhbCBjcmVhdGlvbiBvZiBuZXcgaW5vZGUgc3RydWN0dXJlcywgYW5kIGxpa2VseSwgYSBjYWxsIHRvIHNvbWV0aGluZyBsaWtlIGBhZnNfaW5zZXJ0X3ZvbHVtZV9pbnRvX2NlbGxgIG9yIHNvbWUgcmVsYXRlZCBmdW5jdGlvbiB0byBob29rIGl0IHVwIHRvIHRoZSBBRlMgdm9sdW1lIHN0cnVjdHVyZS4gSSdtIGhvcGluZyB0byBnZXQgYSBjbGVhcmVyIHBpY3R1cmUgb2YgdGhlIGRhdGEgZmxvdyBhbmQgaG93IHRoZSBwaWVjZXMgY29ubmVjdC5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjg5MTMsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yMlQwOTozMDoxMC4xNTQ4ODIzMzVaIiwiU2VxIjo1NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2ODI0NzI3NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhZnNfYWxsb2NfaW5vZGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvYWZzL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9hZnMvaW50ZXJuYWwuaD02NzA9ZW51bSBhZnNfbG9ja19zdGF0ZSB7XFxuLS1cXG5mcy9hZnMvaW50ZXJuYWwuaC02ODMtICpcXG5mcy9hZnMvaW50ZXJuYWwuaDo2ODQ6ICogTm90ZSB0aGF0IGFmc19hbGxvY19pbm9kZSgpICptdXN0KiByZXNldCBhbnl0aGluZyB0aGF0IGNvdWxkIGluY29ycmVjdGx5XFxuZnMvYWZzL2ludGVybmFsLmgtNjg1LSAqIGxlYWsgZnJvbSBvbmUgaW5vZGUgdG8gYW5vdGhlci5cXG4tLVxcbmZzL2Fmcy9zdXBlci5jPTMzPXN0YXRpYyB2b2lkIGFmc19raWxsX3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpO1xcbmZzL2Fmcy9zdXBlci5jOjM0OnN0YXRpYyBzdHJ1Y3QgaW5vZGUgKmFmc19hbGxvY19pbm9kZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKTtcXG5mcy9hZnMvc3VwZXIuYy0zNS1zdGF0aWMgdm9pZCBhZnNfZGVzdHJveV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKTtcXG4tLVxcbmZzL2Fmcy9zdXBlci5jPTU1PXN0YXRpYyBjb25zdCBzdHJ1Y3Qgc3VwZXJfb3BlcmF0aW9ucyBhZnNfc3VwZXJfb3BzID0ge1xcbmZzL2Fmcy9zdXBlci5jLTU2LVxcdC5zdGF0ZnNcXHRcXHQ9IGFmc19zdGF0ZnMsXFxuZnMvYWZzL3N1cGVyLmM6NTc6XFx0LmFsbG9jX2lub2RlXFx0PSBhZnNfYWxsb2NfaW5vZGUsXFxuZnMvYWZzL3N1cGVyLmMtNTgtXFx0LndyaXRlX2lub2RlXFx0PSBuZXRmc191bnBpbl93cml0ZWJhY2ssXFxuLS1cXG5mcy9hZnMvc3VwZXIuYz02MjI9c3RhdGljIGludCBhZnNfaW5pdF9mc19jb250ZXh0KHN0cnVjdCBmc19jb250ZXh0ICpmYylcXG4tLVxcbmZzL2Fmcy9zdXBlci5jLTY0Ni0gKiBJbml0aWFsaXNlIGFuIGlub2RlIGNhY2hlIHNsYWIgZWxlbWVudCBwcmlvciB0byBhbnkgdXNlLiAgTm90ZSB0aGF0XFxuZnMvYWZzL3N1cGVyLmM6NjQ3OiAqIGFmc19hbGxvY19pbm9kZSgpICptdXN0KiByZXNldCBhbnl0aGluZyB0aGF0IGNvdWxkIGluY29ycmVjdGx5IGxlYWsgZnJvbSBvbmVcXG5mcy9hZnMvc3VwZXIuYy02NDgtICogaW5vZGUgdG8gYW5vdGhlci5cXG4tLVxcbmZzL2Fmcy9zdXBlci5jPTY1MD1zdGF0aWMgdm9pZCBhZnNfaV9pbml0X29uY2Uodm9pZCAqX3Zub2RlKVxcbi0tXFxuZnMvYWZzL3N1cGVyLmMtNjY5LSAqL1xcbmZzL2Fmcy9zdXBlci5jOjY3MDpzdGF0aWMgc3RydWN0IGlub2RlICphZnNfYWxsb2NfaW5vZGUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcXG5mcy9hZnMvc3VwZXIuYy02NzEte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yMlQwOTozMDoxMC4zMjMxMzU2MVoiLCJTZXEiOjU3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNDI1MTU0MTk0MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gdGhlIEFGUyBGaWxlc3lzdGVtJ3MgSW5vZGUgQWxsb2NhdGlvbioqXG5cbk9rYXksIHNvIHdlJ3JlIHRhbGtpbmcgYWJvdXQgaW5vZGUgYWxsb2NhdGlvbiB3aXRoaW4gdGhlIEFGUyBrZXJuZWwgbW9kdWxlLiBUaGUgc3lzdGVtJ3MgdXNpbmcgYGFmc19hbGxvY19pbm9kZWAsIHdoaWNoIHRlbGxzIG1lIHRoaXMgaXMgYSBzdXBlcl9vcGVyYXRpb24uIFNvLCB0aGUgcXVlc3Rpb24gaXMsIGhvdyBkb2VzIHRoaXMgd29yaz9cblxuTGV0J3Mgc3RhcnQgYnkgZGlnZ2luZyBpbnRvIHRoZSBpbml0aWFsaXphdGlvbiBmdW5jdGlvbi4gVGltZSB0byBsb29rIGNsb3NlbHkgYXQgYGFmc19pX2luaXRfb25jZWAuIEkgd2FudCB0byB1bmRlcnN0YW5kIHRoZSBpbml0aWFsaXphdGlvbiBzdHJhdGVneSBmb3IgdGhlIGlub2Rlcy4gV2hhdCdzIHRoZSBwbGFuPyBEb2VzIGl0IHVzZSB0aGUgc3RhbmRhcmQgaW5pdCBmdW5jdGlvbnMsIG9yIGlzIHRoZXJlIHNvbWV0aGluZyBzcGVjaWFsIHRoYXQgSSdtIG1pc3Npbmc/IEknbSBjdXJpb3VzIHRvIHNlZSBob3cgdGhlIEFGUyBmaWxlc3lzdGVtIGhhbmRsZXMgaXRzIGlub2RlLXNwZWNpZmljIGRhdGEsIGFuZCBzcGVjaWZpY2FsbHksIHRoZSBpbml0aWFsaXphdGlvbiBvZiB0aGF0IGRhdGEuIEkgc3VzcGVjdCB3ZSdsbCBmaW5kIHNvbWUgcG9pbnRlciBtYW5pcHVsYXRpb24gZm9yIHRoYXQgVkZTIGxheWVyLCBidXQgSSdtIHRyeWluZyB0byBzZWUgaWYgdGhlcmUgaXMgc29tZXRoaW5nIG1vcmUgc3BlY2lmaWMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI5NjgwLCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjJUMDk6MzA6MjQuNTc0NjgyMzYzWiIsIlNlcSI6NTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0Njc4NDI4ODgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYWZzX2lfaW5pdF9vbmNlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL2Fmcy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvYWZzL3N1cGVyLmMtMzEtXFxuZnMvYWZzL3N1cGVyLmM6MzI6c3RhdGljIHZvaWQgYWZzX2lfaW5pdF9vbmNlKHZvaWQgKmZvbyk7XFxuZnMvYWZzL3N1cGVyLmMtMzMtc3RhdGljIHZvaWQgYWZzX2tpbGxfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYik7XFxuLS1cXG5mcy9hZnMvc3VwZXIuYz05Nj1pbnQgX19pbml0IGFmc19mc19pbml0KHZvaWQpXFxuLS1cXG5mcy9hZnMvc3VwZXIuYy0xMDktXFx0XFx0XFx0XFx0XFx0ICAgICBTTEFCX0hXQ0FDSEVfQUxJR058U0xBQl9BQ0NPVU5ULFxcbmZzL2Fmcy9zdXBlci5jOjExMDpcXHRcXHRcXHRcXHRcXHQgICAgIGFmc19pX2luaXRfb25jZSk7XFxuZnMvYWZzL3N1cGVyLmMtMTExLVxcdGlmICghYWZzX2lub2RlX2NhY2hlcCkge1xcbi0tXFxuZnMvYWZzL3N1cGVyLmM9NjIyPXN0YXRpYyBpbnQgYWZzX2luaXRfZnNfY29udGV4dChzdHJ1Y3QgZnNfY29udGV4dCAqZmMpXFxuLS1cXG5mcy9hZnMvc3VwZXIuYy02NDktICovXFxuZnMvYWZzL3N1cGVyLmM6NjUwOnN0YXRpYyB2b2lkIGFmc19pX2luaXRfb25jZSh2b2lkICpfdm5vZGUpXFxuZnMvYWZzL3N1cGVyLmMtNjUxLXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjJUMDk6MzA6MjUuMDQyNTM5ODgxWiIsIlNlcSI6NTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEzNTY4OTk4NDk5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IGltbWVkaWF0ZSB0aG91Z2h0IHByb2Nlc3M6XG5cbioqSW5pdGlhbCBBc3Nlc3NtZW50OiBVbmRlcnN0YW5kaW5nIHRoZSBDb2RlJ3MgQnVpbGRpbmcgQmxvY2tzKipcblxuT2theSwgc28gYGFmc19pX2luaXRfb25jZWAuLi4gdGhhdCdzIGEgc2xhYiBjb25zdHJ1Y3RvciwgcmlnaHQ/IEknbSBhbHJlYWR5IHZpc3VhbGl6aW5nIGhvdyBpdCdzIHNldHRpbmcgdXAgdGhlIGluLW1lbW9yeSBzdHJ1Y3R1cmVzLiBHb3R0YSBrZWVwIHRyYWNrIG9mIHRob3NlIGtleSBkYXRhIHN0cnVjdHVyZXMuXG5cbkFscmlnaHQsIGxldCdzIGp1c3QgbWFrZSBzdXJlIEknbSBmb2xsb3dpbmcgdGhlIGNvZGUgY29ycmVjdGx5OyB3aGVyZSBkb2VzIGl0IGludGVyZmFjZSB3aXRoIHRoZSByZXN0IG9mIHRoZSBzeXN0ZW0/IExldCdzIHF1aWNrbHkgdHJhY2UgaXQgYmFjaywgSSB3YW50IHRvIGNoZWNrIGhvdyBpdCBhbGwgaW50ZXJmYWNlcy4gTm93LCB3aGVyZSB0byBnbyBuZXh0LiBJIHRoaW5rIEknbGwgbG9vayBhdCBgYWZzX2dldF90cmVlYC4gVGhhdCBmdW5jdGlvbidzIGxpa2VseSBpbnZvbHZlZCBpbiByZXRyaWV2aW5nIG9yIGludGVyYWN0aW5nIHdpdGggdGhlIGhpZXJhcmNoaWNhbCB0cmVlIHN0cnVjdHVyZS4gVGhhdCBtYWtlcyBzZW5zZSBnaXZlbiB0aGUgY29udGV4dCBvZiBhIGZpbGUgc3lzdGVtLiBJdCdzIHByb2JhYmx5IHRoZSBtb3N0IGxvZ2ljYWwgZW50cnkgcG9pbnQgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBzbGFiIGFsbG9jYXRpb24gaXMgYmVpbmcgdXNlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzAyMTIsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yMlQwOTozMDozOC42MTE1NDIwNTFaIiwiU2VxIjo2MCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExNTM2OTA3OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhZnNfZ2V0X3RyZWVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvYWZzL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9hZnMvc3VwZXIuYz01MzA9c3RhdGljIHZvaWQgYWZzX2tpbGxfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcXG4tLVxcbmZzL2Fmcy9zdXBlci5jLTU0Ny0gKi9cXG5mcy9hZnMvc3VwZXIuYzo1NDg6c3RhdGljIGludCBhZnNfZ2V0X3RyZWUoc3RydWN0IGZzX2NvbnRleHQgKmZjKVxcbmZzL2Fmcy9zdXBlci5jLTU0OS17XFxuLS1cXG5mcy9hZnMvc3VwZXIuYy01OTAtXFx0aWYgKCFjdHgtXFx1MDAzZWR5bl9yb290KVxcbmZzL2Fmcy9zdXBlci5jOjU5MTpcXHRcXHR0cmFjZV9hZnNfZ2V0X3RyZWUoYXMtXFx1MDAzZWNlbGwsIGFzLVxcdTAwM2V2b2x1bWUpO1xcbmZzL2Fmcy9zdXBlci5jLTU5Mi1cXHRfbGVhdmUoXFxcIiA9IDAgWyVwXVxcXCIsIHNiKTtcXG4tLVxcbmZzL2Fmcy9zdXBlci5jPTYxMz1zdGF0aWMgY29uc3Qgc3RydWN0IGZzX2NvbnRleHRfb3BlcmF0aW9ucyBhZnNfY29udGV4dF9vcHMgPSB7XFxuLS1cXG5mcy9hZnMvc3VwZXIuYy02MTUtXFx0LnBhcnNlX3BhcmFtXFx0PSBhZnNfcGFyc2VfcGFyYW0sXFxuZnMvYWZzL3N1cGVyLmM6NjE2OlxcdC5nZXRfdHJlZVxcdD0gYWZzX2dldF90cmVlLFxcbmZzL2Fmcy9zdXBlci5jLTYxNy19O1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yMlQwOTozMDozOC43MjY5MTYyNDhaIiwiU2VxIjo2MSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTgzNzQ5NjM2MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gdGhlIEFGUyBGaWxlc3lzdGVtIEltcGxlbWVudGF0aW9uKipcblxuT2theSwgc28gYGFmc19nZXRfdHJlZWAgaXMgZGVmaW5pdGVseSBhIGBmc19jb250ZXh0X29wZXJhdGlvbmAuIFRoYXQncyB0aGUgc3RhcnRpbmcgcG9pbnQgZm9yIHVuZGVyc3RhbmRpbmcgaG93IHRoZSBBRlMgZmlsZXN5c3RlbSdzIHJvb3QgaW5vZGUgaXMgaGFuZGxlZCwgd2hpY2ggSSBuZWVkIHRvIGdyYXNwIHRvIHRyb3VibGVzaG9vdCB0aGlzIGlzc3VlIEknbSB3b3JraW5nIG9uLiBOb3csIEkgbmVlZCB0byBjaGVjayBvdXQgd2hhdCB0aGUgYGFmc19ldmljdF9pbm9kZWAgZnVuY3Rpb24gZG9lcy4gVGhhdCB3aWxsIGJlIGludGVyZXN0aW5nLiBJJ2xsIGJldCB0aGF0J3Mgd2hlcmUgdGhlIGlub2RlIGRlYWxsb2NhdGlvbiBoYXBwZW5zLiBJJ2xsIGJldCBpdCdzIGNhbGxlZCBkdXJpbmcgYSBmaWxlc3lzdGVtIHVubW91bnQsIG9yIHdoZW4gdGhlIGlub2RlIG5lZWRzIHRvIGJlIHJlbGVhc2VkIGZyb20gdGhlIGNhY2hlLiBMZXQncyBzZWUgaG93IHRoYXQgd29ya3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMwNzMyLCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjJUMDk6MzA6NDguNTY0NDE2NTFaIiwiU2VxIjo2MiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg5NDYzMDA3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImFmc19ldmljdF9pbm9kZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9hZnMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2Fmcy9pbm9kZS5jPTY0Mj1pbnQgYWZzX2Ryb3BfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSlcXG4tLVxcbmZzL2Fmcy9pbm9kZS5jLTY1NC0gKi9cXG5mcy9hZnMvaW5vZGUuYzo2NTU6dm9pZCBhZnNfZXZpY3RfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSlcXG5mcy9hZnMvaW5vZGUuYy02NTYte1xcbi0tXFxuZnMvYWZzL2ludGVybmFsLmg9MTI2Mz1leHRlcm4gaW50IGFmc19zZXRhdHRyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgZGVudHJ5ICosIHN0cnVjdCBpYXR0ciAqKTtcXG5mcy9hZnMvaW50ZXJuYWwuaDoxMjY0OmV4dGVybiB2b2lkIGFmc19ldmljdF9pbm9kZShzdHJ1Y3QgaW5vZGUgKik7XFxuZnMvYWZzL2ludGVybmFsLmgtMTI2NS1leHRlcm4gaW50IGFmc19kcm9wX2lub2RlKHN0cnVjdCBpbm9kZSAqKTtcXG4tLVxcbmZzL2Fmcy9zdXBlci5jPTU1PXN0YXRpYyBjb25zdCBzdHJ1Y3Qgc3VwZXJfb3BlcmF0aW9ucyBhZnNfc3VwZXJfb3BzID0ge1xcbi0tXFxuZnMvYWZzL3N1cGVyLmMtNjEtXFx0LmZyZWVfaW5vZGVcXHQ9IGFmc19mcmVlX2lub2RlLFxcbmZzL2Fmcy9zdXBlci5jOjYyOlxcdC5ldmljdF9pbm9kZVxcdD0gYWZzX2V2aWN0X2lub2RlLFxcbmZzL2Fmcy9zdXBlci5jLTYzLVxcdC5zaG93X2Rldm5hbWVcXHQ9IGFmc19zaG93X2Rldm5hbWUsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIyVDA5OjMwOjQ4LjY1Mzg4ODA5OFoiLCJTZXEiOjYzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MTI1NDk1MTIxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgdGhlIG9uZSB0aGlua2luZyBpdDpcblxuKipEaWdnaW5nIGludG8gdGhlIEFGUyBGaWxlc3lzdGVtIEltcGxlbWVudGF0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYGFmc19ldmljdF9pbm9kZWAgaGVyZS4gUmlnaHQsIHRoYXQncyBhIGBzdXBlcl9vcGVyYXRpb25gLCB3aGljaCBtZWFucyBpdCdzIGEgZnVuY3Rpb24gaGFuZGxpbmcgaW5vZGUgZXZpY3Rpb24gd2l0aGluIHRoZSBBRlMgZmlsZXN5c3RlbS4gTGV0J3MgbWFrZSBzdXJlIEkgaGF2ZSBhIGdvb2QgZ3Jhc3Agb24gdGhpcy4uLlxuXG5Ob3csIEknbSB0aGlua2luZywgd2hlcmUgZG9lcyB0aGUgcm9vdCBpbm9kZSBjb21lIGZyb20gaW4gQUZTPyBHb3R0YSByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgaW5pdGlhbGl6YXRpb24gYW5kIGhvdyBpdCdzIGhhbmRsZWQsIGVzcGVjaWFsbHkgaW4gcmVsYXRpb24gdG8gaG93IGl0IHJlbGF0ZXMgdG8gdGhpcyBldmljdGlvbiByb3V0aW5lLiBMZXQncyBnbyBjaGVjayB0aGUgc291cmNlIGZvciBgYWZzX3Jvb3RfaWdldGAg4oCTIHRoYXQnbGwgYmUgdGhlIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSBjb250ZXh0IG9mIGBhZnNfZXZpY3RfaW5vZGVgIGFuZCBob3cgdGhlIHJvb3QgaW50ZXJhY3RzIHdpdGhpbiB0aGlzIGZpbGVzeXN0ZW0uIFRoaXMgc2VlbXMgdGhlIHJpZ2h0IHBhdGggdG8gZnVsbHkgZ3Jhc3AgdGhpcyBpbXBsZW1lbnRhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MzEyNDksIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yMlQwOTozMDo1My43NzkzODYxNTlaIiwiU2VxIjo2NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyMTYzMzg5NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhZnNfcm9vdF9pZ2V0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL2Fmcy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvYWZzL2lub2RlLmM9NTI4PXN0YXRpYyBpbnQgYWZzX2lnZXQ1X3NldF9yb290KHN0cnVjdCBpbm9kZSAqaW5vZGUsIHZvaWQgKm9wYXF1ZSlcXG4tLVxcbmZzL2Fmcy9pbm9kZS5jLTU0NS0gKi9cXG5mcy9hZnMvaW5vZGUuYzo1NDY6c3RydWN0IGlub2RlICphZnNfcm9vdF9pZ2V0KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHN0cnVjdCBrZXkgKmtleSlcXG5mcy9hZnMvaW5vZGUuYy01NDcte1xcbi0tXFxuZnMvYWZzL2ludGVybmFsLmg9MTI1OT1leHRlcm4gc3RydWN0IGlub2RlICphZnNfaWdldChzdHJ1Y3QgYWZzX29wZXJhdGlvbiAqLCBzdHJ1Y3QgYWZzX3Zub2RlX3BhcmFtICopO1xcbmZzL2Fmcy9pbnRlcm5hbC5oOjEyNjA6ZXh0ZXJuIHN0cnVjdCBpbm9kZSAqYWZzX3Jvb3RfaWdldChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKiwgc3RydWN0IGtleSAqKTtcXG5mcy9hZnMvaW50ZXJuYWwuaC0xMjYxLWV4dGVybiBpbnQgYWZzX2dldGF0dHIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIGNvbnN0IHN0cnVjdCBwYXRoICosXFxuLS1cXG5mcy9hZnMvc3VwZXIuYz00NDg9c3RhdGljIGludCBhZnNfZmlsbF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzdHJ1Y3QgYWZzX2ZzX2NvbnRleHQgKmN0eClcXG4tLVxcbmZzL2Fmcy9zdXBlci5jLTQ3My1cXHRcXHRhZnNfYWN0aXZhdGVfdm9sdW1lKGFzLVxcdTAwM2V2b2x1bWUpO1xcbmZzL2Fmcy9zdXBlci5jOjQ3NDpcXHRcXHRpbm9kZSA9IGFmc19yb290X2lnZXQoc2IsIGN0eC1cXHUwMDNla2V5KTtcXG5mcy9hZnMvc3VwZXIuYy00NzUtXFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yMlQwOTozMDo1My45MDEwMjc0MjZaIiwiU2VxIjo2NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTUyNDE3MDM0MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6XG5cbioqTmF2aWdhdGluZyB0aGUgQUZTIEZpbGVzeXN0ZW0gU3RydWN0dXJlKipcblxuT2theSwgc28gSSdtIHRyYWNpbmcgZG93biB0aGlzIEFGUyBmaWxlIHN5c3RlbSBhcmNoaXRlY3R1cmUsIGFuZCBpdCBsb29rcyBsaWtlIGBhZnNfcm9vdF9pZ2V0YCBpcyBkZWZpbml0ZWx5IGFjY2Vzc2libGUgdGhyb3VnaCBgYWZzX2ZpbGxfc3VwZXJgLiBUaGF0IG1ha2VzIHNlbnNlOyBgYWZzX2ZpbGxfc3VwZXJgIGlzIHdoYXQncyByZXNwb25zaWJsZSBmb3IsIHdlbGwsIGZpbGxpbmcgaW4gdGhlIHN1cGVyYmxvY2ssIHNvIGl0IHdvdWxkIG5lZWQgdG8gaW5zdGFudGlhdGUgdGhlIHJvb3QgaW5vZGUuIE5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBzeXN0ZW0gY2xlYW5zIHRoaXMgdXAgd2hlbiB0aGUgZmlsZXN5c3RlbSBpcyB1bm1vdW50ZWQuIEkgc2hvdWxkIHRha2UgYSBsb29rIGF0IGBhZnNfY2VsbF9kZXN0cm95YC4gVGhhdCBzaG91bGQgYmUgd2hlcmUgdGhlIGNsZWFudXAgb2YgdGhvc2UgcmVzb3VyY2VzIGhhcHBlbnMuLi5JIGhvcGUuIExldCdzIHNlZSB3aGF0J3MgZ29pbmcgb24gdGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMxODIxLCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjJUMDk6MzA6NTkuNDI1MjAwNjM3WiIsIlNlcSI6NjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTc3MzA0MzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYWZzX2NlbGxfZGVzdHJveVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9hZnMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2Fmcy9jZWxsLmM9NDc1PXN0YXRpYyBpbnQgYWZzX3VwZGF0ZV9jZWxsKHN0cnVjdCBhZnNfY2VsbCAqY2VsbClcXG4tLVxcbmZzL2Fmcy9jZWxsLmMtNTczLSAqL1xcbmZzL2Fmcy9jZWxsLmM6NTc0OnN0YXRpYyB2b2lkIGFmc19jZWxsX2Rlc3Ryb3koc3RydWN0IHJjdV9oZWFkICpyY3UpXFxuZnMvYWZzL2NlbGwuYy01NzUte1xcbi0tXFxuZnMvYWZzL2NlbGwuYz01OTY9c3RhdGljIHZvaWQgYWZzX2Rlc3Ryb3lfY2VsbF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4tLVxcbmZzL2Fmcy9jZWxsLmMtNjA5LVxcbmZzL2Fmcy9jZWxsLmM6NjEwOlxcdGNhbGxfcmN1KFxcdTAwMjZjZWxsLVxcdTAwM2VyY3UsIGFmc19jZWxsX2Rlc3Ryb3kpO1xcbmZzL2Fmcy9jZWxsLmMtNjExLX1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjJUMDk6MzA6NTkuNTQyOTM5ODI1WiIsIlNlcSI6NjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU4Nzg2NDQ4NDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duOlxuXG4qKkFuYWx5emluZyB0aGUgYGFmc19jZWxsX2Rlc3Ryb3lgIENhbGxiYWNrKipcblxuT2theSwgc28gYGFmc19jZWxsX2Rlc3Ryb3lgIGlzIGEgY2FsbGJhY2sgZnVuY3Rpb24sIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBjb250ZXh0LiBXaGVyZSBpcyBpdCBiZWluZyBjYWxsZWQgZnJvbT8gV2hhdCdzIGl0cyBwdXJwb3NlIHdpdGhpbiB0aGUgYGFmc2AgZnJhbWV3b3JrPyBUaGUgcHJpbWFyeSBnb2FsIG11c3QgYmUgdG8gY2xlYW4gdXAgdGhlIGNlbGwgb2JqZWN0LlxuXG5SaWdodCwgbGV0J3MgZGl2ZSBpbnRvIHRoZSBjb3JlIGltcGxlbWVudGF0aW9uLiBUaGUgbG9naWNhbCBzdGFydGluZyBwb2ludCB3b3VsZCBiZSB0aGUgZnVuY3Rpb24gd2hpY2ggZG9lcyB0aGUgYWN0dWFsIHdvcmsgb2YgZGVzdHJveWluZyB0aGUgY2VsbCwgb3IsIGF0IGxlYXN0LCB3aGF0ICpzaG91bGQqIGJlIHRoZSBjb3JlIGltcGxlbWVudGF0aW9uOiBgYWZzX2Rlc3Ryb3lfY2VsbF93b3JrYC4gSSdsbCBzdGFydCB0aGVyZSBhbmQgd29yayBteSB3YXkgb3V0d2FyZC4gSSdsbCBjaGVjayBpdHMgYXJndW1lbnRzLCBpdHMgZGVwZW5kZW5jaWVzLCB3aGF0IGxvY2tzIGl0J3MgdXNpbmcgKGlmIGFueSksIGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggb3RoZXIgY29tcG9uZW50cyBvZiB0aGUgc3lzdGVtLiBJIGhhdmUgdG8gdmVyaWZ5IGl0IGlzIGRvaW5nIGFsbCB0aGUgdGhpbmdzIG5lY2Vzc2FyeSB0byBzYWZlbHkgdGVhciBkb3duIHRoZSBjZWxsLCBhbmQgaG93IHRoaXMgY2FsbGJhY2sgZml0cyBpbnRvIHRoYXQgcHJvY2Vzcy4gQSBjdXJzb3J5IHNjYW4gZm9yIHJhY2UgY29uZGl0aW9ucyBvciBtZW1vcnkgbGVha3MgaXMgYSBtdXN0LiBLbm93aW5nIHRoZSBzdXJyb3VuZGluZyBjb250ZXh0IHdpbGwgYmUga2V5LlxuXG5cbiIsIklucHV0VG9rZW5zIjozMjIzMSwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIyVDA5OjMxOjA1LjQyMTU4ODMyN1oiLCJTZXEiOjY4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTIzNzcxMzE3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImFmc19kZXN0cm95X2NlbGxfd29ya1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9hZnMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2Fmcy9jZWxsLmM9MjM9c3RhdGljIHZvaWQgYWZzX2NlbGxfdGltZXIoc3RydWN0IHRpbWVyX2xpc3QgKnRpbWVyKTtcXG5mcy9hZnMvY2VsbC5jOjI0OnN0YXRpYyB2b2lkIGFmc19kZXN0cm95X2NlbGxfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspO1xcbmZzL2Fmcy9jZWxsLmMtMjUtc3RhdGljIHZvaWQgYWZzX21hbmFnZV9jZWxsX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTtcXG4tLVxcbmZzL2Fmcy9jZWxsLmM9MTA4PXN0YXRpYyBzdHJ1Y3QgYWZzX2NlbGwgKmFmc19hbGxvY19jZWxsKHN0cnVjdCBhZnNfbmV0ICpuZXQsXFxuLS1cXG5mcy9hZnMvY2VsbC5jLTE2NC1cXHRhdG9taWNfc2V0KFxcdTAwMjZjZWxsLVxcdTAwM2VhY3RpdmUsIDApO1xcbmZzL2Fmcy9jZWxsLmM6MTY1OlxcdElOSVRfV09SSyhcXHUwMDI2Y2VsbC1cXHUwMDNlZGVzdHJveWVyLCBhZnNfZGVzdHJveV9jZWxsX3dvcmspO1xcbmZzL2Fmcy9jZWxsLmMtMTY2LVxcdElOSVRfV09SSyhcXHUwMDI2Y2VsbC1cXHUwMDNlbWFuYWdlciwgYWZzX21hbmFnZV9jZWxsX3dvcmspO1xcbi0tXFxuZnMvYWZzL2NlbGwuYz01NzQ9c3RhdGljIHZvaWQgYWZzX2NlbGxfZGVzdHJveShzdHJ1Y3QgcmN1X2hlYWQgKnJjdSlcXG4tLVxcbmZzL2Fmcy9jZWxsLmMtNTk1LVxcbmZzL2Fmcy9jZWxsLmM6NTk2OnN0YXRpYyB2b2lkIGFmc19kZXN0cm95X2NlbGxfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuZnMvYWZzL2NlbGwuYy01OTcte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yMlQwOTozMTowNS41NDUzNjQxODRaIiwiU2VxIjo2OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDkyNDg2NDE5NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipEZWNvbnN0cnVjdGluZyB0aGUgV29ya3F1ZXVlIENhbGxiYWNrOiBhZnNfZGVzdHJveV9jZWxsX3dvcmsqKlxuXG5Pa2F5LCBzbyBgYWZzX2Rlc3Ryb3lfY2VsbF93b3JrYCBpcyBjbGVhcmx5IGEgd29ya3F1ZXVlIGNhbGxiYWNrLiBUaGF0J3MgdGhlIHN0YXJ0aW5nIHBvaW50LiBNeSBtaW5kIGltbWVkaWF0ZWx5IGp1bXBzIHRvIGhvdyB0aGlzIGZpdHMgd2l0aGluIHRoZSBsYXJnZXIgQUZTIGFyY2hpdGVjdHVyZS4gV29ya3F1ZXVlcyBhcmUgY3J1Y2lhbCBmb3IgYXN5bmNocm9ub3VzIHRhc2tzLCBzbyB0aGlzIGltcGxpZXMgdGhhdCBkZXN0cm95aW5nIGEgY2VsbCwgb3IgYXQgbGVhc3QgYXNwZWN0cyBvZiBpdCwgaXNuJ3Qgc29tZXRoaW5nIHRoYXQgY2FuIGJlIGRvbmUgc3luY2hyb25vdXNseS4gVGhlcmUncyBwcm9iYWJseSBhIG5lZWQgdG8gaGFuZGxlIGxvY2tpbmcsIHJlc291cmNlIGNsZWFudXAsIG9yIG1heWJlIGV2ZW4gaW50ZXJhY3Rpbmcgd2l0aCBvdGhlciBzeXN0ZW0gY29tcG9uZW50cywgYWxsIG9mIHdoaWNoIGFyZSBtYW5hZ2VkIHNhZmVseSB2aWEgdGhlIHdvcmtxdWV1ZSBtZWNoYW5pc20uXG5cbk5vdywgbXkgbmV4dCBpbnN0aW5jdCBpcyB0byB0cmFjZSBiYWNrIHRoZSBwcm9jZXNzLiBXaGVyZSBpcyB0aGlzIGNhbGxiYWNrICppbnZva2VkKj8gTW9yZSBzcGVjaWZpY2FsbHksIHdoYXQgdHJpZ2dlcnMgdGhlIGRlc3RydWN0aW9uIG9mIGEgY2VsbD8gSXQgY291bGQgYmUgYSB1c2VyIGNvbW1hbmQsIGEgdGltZW91dCwgb3IgbWF5YmUgZXZlbiBhbiBpbnRlcm5hbCBjbGVhbnVwIHJvdXRpbmUgd2l0aGluIHRoZSBBRlMgc3Vic3lzdGVtLlxuXG5TaW5jZSBJIGFtIGNvbnNpZGVyaW5nIHRoZSBkZXN0cnVjdGlvbiBvZiBhIGNlbGwsIHRoZSBmaXJzdCBmb2xsb3ctdXAgdGhhdCBjb21lcyB0byBtaW5kIGlzIHRoYXQgSSBzaG91bGQgY2hlY2sgdGhlIGBhZnNfdXBkYXRlX2NlbGxgIGZ1bmN0aW9uLiBXaGlsZSBgYWZzX2Rlc3Ryb3lfY2VsbF93b3JrYCBpcyB0aGUgZGVzdHJ1Y3Rpb24gZnVuY3Rpb24sIGBhZnNfdXBkYXRlX2NlbGxgIGlzIG9uZSB3YXkgb2YgY3JlYXRpbmcgYSBjZWxsLiBJdCBpcyByZWFzb25hYmxlIHRoYXQgYGFmc19kZXN0cm95X2NlbGxfd29ya2AgbWlnaHQgYmUgcmVsYXRlZCwgYW5kIGluIGZhY3QgYmUgb3Bwb3NpdGUsIG9mIHRoZSBhY3Rpb24gb2YgYGFmc191cGRhdGVfY2VsbGAuIEkgY2FuIHRoaW5rIG9mIGEgbnVtYmVyIG9mIHF1ZXN0aW9ucyBJIGNhbiBhc2ssIG5vdywgc3VjaCBhczogXCJIb3cgaXMgdGhlIGNyZWF0aW9uIG9mIGEgY2VsbCBsaW5rZWQgdG8gaXRzIGRlc3RydWN0aW9uLCBhbmQgaG93IGlzIGVhY2ggaGFuZGxlZD9cIi4gSXQncyBhbGwgYWJvdXQgdW5kZXJzdGFuZGluZyB0aGUgbGlmZWN5Y2xlLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMjgzMywiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIyVDA5OjMxOjEwLjQ3MDIzMjczWiIsIlNlcSI6NzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzA5ODc0NDYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYWZzX3VwZGF0ZV9jZWxsXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL2Fmcy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvYWZzL2NlbGwuYz00MTU9aW50IGFmc19jZWxsX2luaXQoc3RydWN0IGFmc19uZXQgKm5ldCwgY29uc3QgY2hhciAqcm9vdGNlbGwpXFxuLS1cXG5mcy9hZnMvY2VsbC5jLTQ3NC0gKi9cXG5mcy9hZnMvY2VsbC5jOjQ3NTpzdGF0aWMgaW50IGFmc191cGRhdGVfY2VsbChzdHJ1Y3QgYWZzX2NlbGwgKmNlbGwpXFxuZnMvYWZzL2NlbGwuYy00NzYte1xcbi0tXFxuZnMvYWZzL2NlbGwuYz04MDc9c3RhdGljIGJvb2wgYWZzX21hbmFnZV9jZWxsKHN0cnVjdCBhZnNfY2VsbCAqY2VsbClcXG4tLVxcbmZzL2Fmcy9jZWxsLmMtODQ2LVxcdGlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoQUZTX0NFTExfRkxfRE9fTE9PS1VQLCBcXHUwMDI2Y2VsbC1cXHUwMDNlZmxhZ3MpKSB7XFxuZnMvYWZzL2NlbGwuYzo4NDc6XFx0XFx0cmV0ID0gYWZzX3VwZGF0ZV9jZWxsKGNlbGwpO1xcbmZzL2Fmcy9jZWxsLmMtODQ4LVxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yMlQwOTozMToxMC42NDEyMjY4OTZaIiwiU2VxIjo3MSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDU1NDM5NjkyNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyBpZiBJIHdlcmUgY29uc2lkZXJpbmcgdGhlc2UgcG9pbnRzIG15c2VsZjpcblxuKipTdGF0aWMgRnVuY3Rpb24gQ2hlY2sqKlxuXG5Pa2F5LCBzbyBgYWZzX3VwZGF0ZV9jZWxsYCBpcyBkZWNsYXJlZCBhcyBzdGF0aWMuIFRoaXMgaW1tZWRpYXRlbHkgdHJpZ2dlcnMgYSBzcGVjaWZpYyB0cmFpbiBvZiB0aG91Z2h0IGZvciBtZSwgZ2l2ZW4gdGhlIGNvbnRleHQuIFN0YXRpYyBmdW5jdGlvbnMgaGF2ZSBpbnRlcm5hbCBsaW5rYWdlLCBtZWFuaW5nIHRoZXkncmUgb25seSB2aXNpYmxlIHdpdGhpbiB0aGUgY29tcGlsYXRpb24gdW5pdCB0aGV5J3JlIGRlZmluZWQgaW4uIFRoYXQgc3VnZ2VzdHMgYSBkZWxpYmVyYXRlIGRlc2lnbiBkZWNpc2lvbiBoZXJlIOKAkyBwb3RlbnRpYWxseSBmb3IgZW5jYXBzdWxhdGlvbiwgcHJldmVudGluZyBleHRlcm5hbCBhY2Nlc3MgYW5kIG1vZGlmaWNhdGlvbiBmcm9tIG90aGVyIG1vZHVsZXMsIGFuZCBwb3NzaWJseSBmb3Igb3B0aW1pemF0aW9uIHJlbGF0ZWQgdG8gYSBzcGVjaWZpYyBpbnRlcm5hbCBtZWNoYW5pc20uIFRoZSBzdGF0aWMgZGVjbGFyYXRpb24gaXMgc2lnbmlmaWNhbnQuXG5cbk5vdywgdGhhdCBicmluZ3MgdXAgdGhlIHJlbGF0aW9uc2hpcCB3aXRoIHJlbGF0ZWQgZnVuY3Rpb25zLiBMZXQncyBzZWUgd2hhdCBoYXBwZW5zIHdpdGggYGFmc19hbGxvY19jZWxsYC4gSG93IGRvZXMgYGFmc19hbGxvY19jZWxsYCBmdW5jdGlvbiByZWxhdGU/IERvZXMgYGFmc19hbGxvY19jZWxsYCBjYWxsIGBhZnNfdXBkYXRlX2NlbGxgPyBEb2VzIGBhZnNfdXBkYXRlX2NlbGxgIGNhbGwgYGFmc19hbGxvY19jZWxsYD8gQXJlIHRoZXJlIG90aGVyIGZ1bmN0aW9ucyBiZWluZyBjYWxsZWQgYW5kIHdoYXQgZG8gdGhleSBtZWFuP1xuXG5cbiIsIklucHV0VG9rZW5zIjozMzQ1OCwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIyVDA5OjMxOjE1LjE5NTYyNjg4MVoiLCJTZXEiOjcyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjA0MzU5NTQ4OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhZnNfYWxsb2NfY2VsbFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9hZnMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2Fmcy9jZWxsLmM9OTI9c3RydWN0IGFmc19jZWxsICphZnNfZmluZF9jZWxsKHN0cnVjdCBhZnNfbmV0ICpuZXQsXFxuLS1cXG5mcy9hZnMvY2VsbC5jLTEwNy0gKi9cXG5mcy9hZnMvY2VsbC5jOjEwODpzdGF0aWMgc3RydWN0IGFmc19jZWxsICphZnNfYWxsb2NfY2VsbChzdHJ1Y3QgYWZzX25ldCAqbmV0LFxcbmZzL2Fmcy9jZWxsLmMtMTA5LVxcdFxcdFxcdFxcdCAgICAgICBjb25zdCBjaGFyICpuYW1lLCB1bnNpZ25lZCBpbnQgbmFtZWxlbixcXG4tLVxcbmZzL2Fmcy9jZWxsLmM9MjQxPXN0cnVjdCBhZnNfY2VsbCAqYWZzX2xvb2t1cF9jZWxsKHN0cnVjdCBhZnNfbmV0ICpuZXQsXFxuLS1cXG5mcy9hZnMvY2VsbC5jLTI3Mi1cXHQgKi9cXG5mcy9hZnMvY2VsbC5jOjI3MzpcXHRjYW5kaWRhdGUgPSBhZnNfYWxsb2NfY2VsbChuZXQsIG5hbWUsIG5hbWVzeiwgdmxsaXN0KTtcXG5mcy9hZnMvY2VsbC5jLTI3NC1cXHRpZiAoSVNfRVJSKGNhbmRpZGF0ZSkpIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjJUMDk6MzE6MTcuMjM5MjQ1MDhaIiwiU2VxIjo3MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzkyNDAxNjE1MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKk5hdmlnYXRpbmcgdGhlIEFGUyBDb2RlYmFzZSoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGBhZnNfYWxsb2NfY2VsbGAuIFJpZ2h0IG9mZiB0aGUgYmF0LCBJIG5vdGljZSBpdCdzIGRlY2xhcmVkIGBzdGF0aWNgLiBUaGF0IGltbWVkaWF0ZWx5IGZsYWdzIHNvbWV0aGluZy4gVXN1YWxseSwgYHN0YXRpY2AgZnVuY3Rpb25zIGFyZSBrZXB0IHdpdGhpbiB0aGUgc2NvcGUgb2YgdGhlIGZpbGUsIG1lYW5pbmcgaXQncyBsaWtlbHkgYW4gaW50ZXJuYWwgdXRpbGl0eSBmdW5jdGlvbiBmb3IgdGhhdCBzcGVjaWZpYyBtb2R1bGUuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyBpdCdzIGJlaW5nIHVzZWQuIE5vdywgYmFzZWQgb24gd2hhdCBJIGNhbiBzZWUsIEkgbmVlZCB0byBjaGVjayBgYWZzX2xvb2t1cF9jZWxsYC4gVGhhdCBzZWVtcyB0byBiZSB0aGUgbG9naWNhbCBuZXh0IHN0ZXAgdG8gZmlndXJlIG91dCB3aGF0IGl0IGlzIHVzZWQgZm9yLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMzkzNiwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIyVDA5OjMxOjI1LjE2MzI2MzgyMVoiLCJTZXEiOjc0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDgwMjA4ODg4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImFmc19sb29rdXBfY2VsbFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9hZnMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2Fmcy9jZWxsLmM9MTA4PXN0YXRpYyBzdHJ1Y3QgYWZzX2NlbGwgKmFmc19hbGxvY19jZWxsKHN0cnVjdCBhZnNfbmV0ICpuZXQsXFxuLS1cXG5mcy9hZnMvY2VsbC5jLTIyNy0vKlxcbmZzL2Fmcy9jZWxsLmM6MjI4OiAqIGFmc19sb29rdXBfY2VsbCAtIExvb2sgdXAgb3IgY3JlYXRlIGEgY2VsbCByZWNvcmQuXFxuZnMvYWZzL2NlbGwuYy0yMjktICogQG5ldDpcXHRUaGUgbmV0d29yayBuYW1lc3BhY2VcXG4tLVxcbmZzL2Fmcy9jZWxsLmMtMjQwLSAqL1xcbmZzL2Fmcy9jZWxsLmM6MjQxOnN0cnVjdCBhZnNfY2VsbCAqYWZzX2xvb2t1cF9jZWxsKHN0cnVjdCBhZnNfbmV0ICpuZXQsXFxuZnMvYWZzL2NlbGwuYy0yNDItXFx0XFx0XFx0XFx0IGNvbnN0IGNoYXIgKm5hbWUsIHVuc2lnbmVkIGludCBuYW1lc3osXFxuZnMvYWZzL2NlbGwuYy0yNDMtXFx0XFx0XFx0XFx0IGNvbnN0IGNoYXIgKnZsbGlzdCxcXG5mcy9hZnMvY2VsbC5jOjI0NDpcXHRcXHRcXHRcXHQgZW51bSBhZnNfbG9va3VwX2NlbGxfZm9yIHJlYXNvbixcXG5mcy9hZnMvY2VsbC5jLTI0NS1cXHRcXHRcXHRcXHQgZW51bSBhZnNfY2VsbF90cmFjZSB0cmFjZSlcXG4tLVxcbmZzL2Fmcy9jZWxsLmM9NDE1PWludCBhZnNfY2VsbF9pbml0KHN0cnVjdCBhZnNfbmV0ICpuZXQsIGNvbnN0IGNoYXIgKnJvb3RjZWxsKVxcbi0tXFxuZnMvYWZzL2NlbGwuYy00NDktXFx0LyogYWxsb2NhdGUgYSBjZWxsIHJlY29yZCBmb3IgdGhlIHJvb3Qvd29ya3N0YXRpb24gY2VsbCAqL1xcbmZzL2Fmcy9jZWxsLmM6NDUwOlxcdG5ld19yb290ID0gYWZzX2xvb2t1cF9jZWxsKG5ldCwgcm9vdGNlbGwsIGxlbiwgdmxsaXN0LFxcbmZzL2Fmcy9jZWxsLmMtNDUxLVxcdFxcdFxcdFxcdCAgIEFGU19MT09LVVBfQ0VMTF9ST09UQ0VMTCxcXG4tLVxcbmZzL2Fmcy9keW5yb290LmM9OTM9c3RhdGljIHN0cnVjdCBkZW50cnkgKmFmc19keW5yb290X2xvb2t1cF9jZWxsKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXFxuLS1cXG5mcy9hZnMvZHlucm9vdC5jLTExMC1cXG5mcy9hZnMvZHlucm9vdC5jOjExMTpcXHRjZWxsID0gYWZzX2xvb2t1cF9jZWxsKG5ldCwgbmFtZSwgbGVuLCBOVUxMLFxcbmZzL2Fmcy9keW5yb290LmMtMTEyLVxcdFxcdFxcdCAgICAgICBBRlNfTE9PS1VQX0NFTExfRFlOUk9PVCxcXG4tLVxcbmZzL2Fmcy9pbnRlcm5hbC5oPTEwNjA9ZXh0ZXJuIHN0cnVjdCBhZnNfY2VsbCAqYWZzX2ZpbmRfY2VsbChzdHJ1Y3QgYWZzX25ldCAqLCBjb25zdCBjaGFyICosIHVuc2lnbmVkLFxcbmZzL2Fmcy9pbnRlcm5hbC5oLTEwNjEtXFx0XFx0XFx0XFx0ICAgICAgZW51bSBhZnNfY2VsbF90cmFjZSk7XFxuZnMvYWZzL2ludGVybmFsLmg6MTA2MjplbnVtIGFmc19sb29rdXBfY2VsbF9mb3Ige1xcbmZzL2Fmcy9pbnRlcm5hbC5oLTEwNjMtXFx0QUZTX0xPT0tVUF9DRUxMX0RZTlJPT1QsXFxuLS1cXG5mcy9hZnMvaW50ZXJuYWwuaC0xMDY5LX07XFxuZnMvYWZzL2ludGVybmFsLmg6MTA3MDpzdHJ1Y3QgYWZzX2NlbGwgKmFmc19sb29rdXBfY2VsbChzdHJ1Y3QgYWZzX25ldCAqbmV0LFxcbmZzL2Fmcy9pbnRlcm5hbC5oLTEwNzEtXFx0XFx0XFx0XFx0IGNvbnN0IGNoYXIgKm5hbWUsIHVuc2lnbmVkIGludCBuYW1lc3osXFxuZnMvYWZzL2ludGVybmFsLmgtMTA3Mi1cXHRcXHRcXHRcXHQgY29uc3QgY2hhciAqdmxsaXN0LFxcbmZzL2Fmcy9pbnRlcm5hbC5oOjEwNzM6XFx0XFx0XFx0XFx0IGVudW0gYWZzX2xvb2t1cF9jZWxsX2ZvciByZWFzb24sXFxuZnMvYWZzL2ludGVybmFsLmgtMTA3NC1cXHRcXHRcXHRcXHQgZW51bSBhZnNfY2VsbF90cmFjZSB0cmFjZSk7XFxuLS1cXG5mcy9hZnMvbW50cHQuYz03MT1zdGF0aWMgaW50IGFmc19tbnRwdF9zZXRfcGFyYW1zKHN0cnVjdCBmc19jb250ZXh0ICpmYywgc3RydWN0IGRlbnRyeSAqbW50cHQpXFxuLS1cXG5mcy9hZnMvbW50cHQuYy0xMDktXFxuZnMvYWZzL21udHB0LmM6MTEwOlxcdFxcdGNlbGwgPSBhZnNfbG9va3VwX2NlbGwoY3R4LVxcdTAwM2VuZXQsIHAsIHNpemUsIE5VTEwsXFxuZnMvYWZzL21udHB0LmMtMTExLVxcdFxcdFxcdFxcdCAgICAgICBBRlNfTE9PS1VQX0NFTExfTU9VTlRQT0lOVCxcXG4tLVxcbmZzL2Fmcy9wcm9jLmM9ODg9c3RhdGljIGludCBhZnNfcHJvY19jZWxsc193cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciAqYnVmLCBzaXplX3Qgc2l6ZSlcXG4tLVxcbmZzL2Fmcy9wcm9jLmMtMTI0LVxcbmZzL2Fmcy9wcm9jLmM6MTI1OlxcdFxcdGNlbGwgPSBhZnNfbG9va3VwX2NlbGwobmV0LCBuYW1lLCBzdHJsZW4obmFtZSksIGFyZ3MsXFxuZnMvYWZzL3Byb2MuYy0xMjYtXFx0XFx0XFx0XFx0ICAgICAgIEFGU19MT09LVVBfQ0VMTF9QUkVMT0FELFxcbi0tXFxuZnMvYWZzL3N1cGVyLmM9MjIzPXN0YXRpYyBpbnQgYWZzX3BhcnNlX3NvdXJjZShzdHJ1Y3QgZnNfY29udGV4dCAqZmMsIHN0cnVjdCBmc19wYXJhbWV0ZXIgKnBhcmFtKVxcbi0tXFxuZnMvYWZzL3N1cGVyLmMtMjkxLVxcdGlmIChjZWxsbmFtZSkge1xcbmZzL2Fmcy9zdXBlci5jOjI5MjpcXHRcXHRjZWxsID0gYWZzX2xvb2t1cF9jZWxsKGN0eC1cXHUwMDNlbmV0LCBjZWxsbmFtZSwgY2VsbG5hbWVzeixcXG5mcy9hZnMvc3VwZXIuYy0yOTMtXFx0XFx0XFx0XFx0ICAgICAgIE5VTEwsIEFGU19MT09LVVBfQ0VMTF9ESVJFQ1RfTU9VTlQsXFxuLS1cXG5mcy9hZnMvdmxfYWxpYXMuYz0yNTM9c3RhdGljIGludCB5ZnNfY2hlY2tfY2Fub25pY2FsX2NlbGxfbmFtZShzdHJ1Y3QgYWZzX2NlbGwgKmNlbGwsIHN0cnVjdCBrZXkgKmtleSlcXG4tLVxcbmZzL2Fmcy92bF9hbGlhcy5jLTI3MS1cXHRlbHNlXFxuZnMvYWZzL3ZsX2FsaWFzLmM6MjcyOlxcdFxcdG1hc3RlciA9IGFmc19sb29rdXBfY2VsbChjZWxsLVxcdTAwM2VuZXQsIGNlbGxfbmFtZSwgbmFtZV9sZW4sIE5VTEwsXFxuZnMvYWZzL3ZsX2FsaWFzLmMtMjczLVxcdFxcdFxcdFxcdFxcdCBBRlNfTE9PS1VQX0NFTExfQUxJQVNfQ0hFQ0ssXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIyVDA5OjMxOjI1LjY0MzQ4MDc2OVoiLCJTZXEiOjc1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4NTQ4NjA1NzY1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IGltbWVkaWF0ZSB0aG91Z2h0IHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gdGhlIEFGUyBDb2RlYmFzZSoqXG5cbk9rYXksIHNvIGBhZnNfbG9va3VwX2NlbGxgLi4uIHRoYXQncyBhIGdsb2JhbCB2YXJpYWJsZSwgd2hpY2ggbWVhbnMgaXQncyBhIHBvdGVudGlhbCBwb2ludCBvZiBjb250ZW50aW9uIG9yIGEgc2hhcmVkIHJlc291cmNlIEkgbmVlZCB0byBiZSBtaW5kZnVsIG9mLiBUaGF0IGltbWVkaWF0ZWx5IGZsYWdzIGEgcG90ZW50aWFsIGlzc3VlLCBlc3BlY2lhbGx5IGluIGEgZGlzdHJpYnV0ZWQgZmlsZXN5c3RlbSBsaWtlIEFGUy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IGl0J3MgdXNlZCBhbmQgd2hlcmUgaXQncyBtb2RpZmllZC5cblxuTm93LCBsZXQncyBzd2l0Y2ggZ2VhcnMgYW5kIGZvY3VzIG9uIGBhZnNfcmVhZGRpcmAuIEknbSBnb2luZyB0byBxdWlja2x5IHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSByZWFkZGlyIGZ1bmN0aW9uYWxpdHkgd2l0aGluIEFGUy4gSXQncyBjcnVjaWFsIGZvciB1bmRlcnN0YW5kaW5nIGhvdyB0aGUgc3lzdGVtIGludGVyYWN0cyB3aXRoIGRpcmVjdG9yaWVzIGFuZCBob3cgaXQgaGFuZGxlcyBsaXN0aW5nIGZpbGUgY29udGVudHMsIHdoaWNoIGlzIGdvaW5nIHRvIGJlIGltcG9ydGFudCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgZ2xvYmFsIHZhcmlhYmxlIGlzIGFjdHVhbGx5IHVzZWQuIFNwZWNpZmljYWxseSwgSSdtIHRoaW5raW5nIGFib3V0IHRoZSBpbnRlcmFjdGlvbnMsIGhvdyBpdCdzIGNhY2hlZCwgYW5kIGFueSBzeW5jaHJvbml6YXRpb24gaXQgbWF5IGhhdmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM1MzYzLCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjJUMDk6MzE6MzQuMTkyMDkxNDU0WiIsIlNlcSI6NzYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTA0NzI1MjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYWZzX3JlYWRkaXJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvYWZzL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9hZnMvZGlyLmM9MjQ9c3RhdGljIGludCBhZnNfZGlyX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpO1xcbmZzL2Fmcy9kaXIuYzoyNTpzdGF0aWMgaW50IGFmc19yZWFkZGlyKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgZGlyX2NvbnRleHQgKmN0eCk7XFxuZnMvYWZzL2Rpci5jLTI2LXN0YXRpYyBpbnQgYWZzX2RfcmV2YWxpZGF0ZShzdHJ1Y3QgaW5vZGUgKmRpciwgY29uc3Qgc3RydWN0IHFzdHIgKm5hbWUsXFxuLS1cXG5mcy9hZnMvZGlyLmM9NTI9Y29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBhZnNfZGlyX2ZpbGVfb3BlcmF0aW9ucyA9IHtcXG4tLVxcbmZzL2Fmcy9kaXIuYy01NC1cXHQucmVsZWFzZVxcdD0gYWZzX3JlbGVhc2UsXFxuZnMvYWZzL2Rpci5jOjU1OlxcdC5pdGVyYXRlX3NoYXJlZFxcdD0gYWZzX3JlYWRkaXIsXFxuZnMvYWZzL2Rpci5jLTU2LVxcdC5sb2NrXFx0XFx0PSBhZnNfbG9jayxcXG4tLVxcbmZzL2Fmcy9kaXIuYz01MTU9c3RhdGljIGludCBhZnNfZGlyX2l0ZXJhdGUoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkaXJfY29udGV4dCAqY3R4LFxcbi0tXFxuZnMvYWZzL2Rpci5jLTU1Mi0gKi9cXG5mcy9hZnMvZGlyLmM6NTUzOnN0YXRpYyBpbnQgYWZzX3JlYWRkaXIoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBkaXJfY29udGV4dCAqY3R4KVxcbmZzL2Fmcy9kaXIuYy01NTQte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yMlQwOTozMTozNC42NDI1NjkwOTNaIiwiU2VxIjo3NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTU2ODQzMTU3MjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aG9zZSBsaW5lcyBvZiB0ZXh0OlxuXG4qKkRpZ2dpbmcgaW50byB0aGUgQUZTIEZpbGVzeXN0ZW0qKlxuXG5Pa2F5LCBzbyBgYWZzX3JlYWRkaXJgIGlzIGRlZmluaXRlbHkgYSBmaWxlIG9wZXJhdGlvbiwgd2hpY2ggbWFrZXMgc2Vuc2UuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgZGlyZWN0b3J5IHN0cnVjdHVyZSB3aXRoaW4gQUZTIGlzIHRyYXZlcnNlZC4gTGV0J3MgZGlnIGRlZXBlci4gVGhlIG5leHQgbG9naWNhbCBmdW5jdGlvbiB0byBpbnZlc3RpZ2F0ZSBpbiBjb25qdW5jdGlvbiB3aXRoIGBhZnNfcmVhZGRpcmAgaXMgYGFmc19kb19sb29rdXBfb25lYC4gSSBiZXQgdGhhdCdzIHdoZXJlIHRoZSBpbmRpdmlkdWFsIGRpcmVjdG9yeSBlbnRyaWVzIGFyZSBhY3R1YWxseSBiZWluZyByZXNvbHZlZCBkdXJpbmcgdGhlIHJlYWQgcHJvY2Vzcy4gSSdsbCBuZWVkIHRvIGNvbmZpcm0gaWYgaXQncyB0aGUgcmlnaHQgZnVuY3Rpb24gdG8gZ28gdGhyb3VnaC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzU5MDIsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yMlQwOTozMTo1MC4zMjY4ODc2MjlaIiwiU2VxIjo3OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUxNDI0ODgzNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhZnNfZG9fbG9va3VwX29uZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9hZnMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2Fmcy9kaXIuYz01NjY9c3RhdGljIGJvb2wgYWZzX2xvb2t1cF9vbmVfZmlsbGRpcihzdHJ1Y3QgZGlyX2NvbnRleHQgKmN0eCwgY29uc3QgY2hhciAqbmFtZSxcXG4tLVxcbmZzL2Fmcy9kaXIuYy01OTctICovXFxuZnMvYWZzL2Rpci5jOjU5ODpzdGF0aWMgaW50IGFmc19kb19sb29rdXBfb25lKHN0cnVjdCBpbm9kZSAqZGlyLCBjb25zdCBzdHJ1Y3QgcXN0ciAqbmFtZSxcXG5mcy9hZnMvZGlyLmMtNTk5LVxcdFxcdFxcdCAgICAgc3RydWN0IGFmc19maWQgKmZpZCxcXG4tLVxcbmZzL2Fmcy9kaXIuYz0xMDU1PXN0YXRpYyBpbnQgYWZzX2RfcmV2YWxpZGF0ZShzdHJ1Y3QgaW5vZGUgKnBhcmVudF9kaXIsIGNvbnN0IHN0cnVjdCBxc3RyICpuYW1lLFxcbi0tXFxuZnMvYWZzL2Rpci5jLTExMTEtXFx0Lyogc2VhcmNoIHRoZSBkaXJlY3RvcnkgZm9yIHRoaXMgdm5vZGUgKi9cXG5mcy9hZnMvZGlyLmM6MTExMjpcXHRyZXQgPSBhZnNfZG9fbG9va3VwX29uZShcXHUwMDI2ZGlyLVxcdTAwM2VuZXRmcy5pbm9kZSwgbmFtZSwgXFx1MDAyNmZpZCwgXFx1MDAyNmRpcl92ZXJzaW9uKTtcXG5mcy9hZnMvZGlyLmMtMTExMy1cXHRzd2l0Y2ggKHJldCkge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yMlQwOTozMTo1MC44NDExNDI1NDZaIiwiU2VxIjo3OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzMwNjE0OTk1NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKk5hdmlnYXRpbmcgdGhlIEFGUyBMb29rdXAgRnVuY3Rpb25zKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgc29tZSBBRlMgY29kZSwgc3BlY2lmaWNhbGx5IGFyb3VuZCB0aGUgbG9va3VwIGZ1bmN0aW9ucy4gRmlyc3QsIEkgc2VlIGBhZnNfZG9fbG9va3VwX29uZWAgYW5kIG15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRoYXQgdGhpcyBmdW5jdGlvbiBpcyBkZWNsYXJlZCBgc3RhdGljYC4gVGhhdCBtZWFucyBpdCdzIGxpbWl0ZWQgaW4gc2NvcGU7IGl0J3Mgbm90IG1lYW50IHRvIGJlIGNhbGxlZCBkaXJlY3RseSBmcm9tIG91dHNpZGUgdGhlIGZpbGUgaXQncyBkZWZpbmVkIGluLiBUaGlzIHN1Z2dlc3RzIGl0J3MgYW4gaW50ZXJuYWwgaGVscGVyIGZ1bmN0aW9uLCB3aGljaCBtYWtlcyBzZW5zZS4gSSBvZnRlbiBzZWUgc3RhdGljIGRlY2xhcmF0aW9ucyB1c2VkIHRvIGVuY2Fwc3VsYXRlIGltcGxlbWVudGF0aW9uIGRldGFpbHMgYW5kIHByZXZlbnQgYWNjaWRlbnRhbCBleHRlcm5hbCBkZXBlbmRlbmNpZXMuXG5cbk5vdywgbXkgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gZXhhbWluZSB0aGUgZnVuY3Rpb24gdGhhdCAqZG9lcyogc2VlbSB0byBiZSBkZXNpZ25lZCBmb3IgYnJvYWRlciB1c2UsIHRoZSBvbmUgdGhhdCBwcm9iYWJseSBjYWxscyBgYWZzX2RvX2xvb2t1cF9vbmVgLiBMZXQncyB0YWtlIGEgbG9vayBhdCBgYWZzX2RvX2xvb2t1cGAuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBpdCBvcmNoZXN0cmF0ZXMgdGhlIG92ZXJhbGwgbG9va3VwIHByb2Nlc3MsIGhvdyBpdCBoYW5kbGVzIHBvdGVudGlhbCBlcnJvcnMsIGFuZCB3aGF0IGRhdGEgc3RydWN0dXJlcyBpdCB1dGlsaXplcy4gVGhhdCB3aWxsIGdpdmUgbWUgdGhlIGJpZ2dlciBwaWN0dXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNjMzOSwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIyVDA5OjMxOjU0LjE0NzI5NTMzM1oiLCJTZXEiOjgwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTEyNDA3NTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYWZzX2RvX2xvb2t1cFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9hZnMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2Fmcy9kaXIuYz01NjY9c3RhdGljIGJvb2wgYWZzX2xvb2t1cF9vbmVfZmlsbGRpcihzdHJ1Y3QgZGlyX2NvbnRleHQgKmN0eCwgY29uc3QgY2hhciAqbmFtZSxcXG4tLVxcbmZzL2Fmcy9kaXIuYy01OTctICovXFxuZnMvYWZzL2Rpci5jOjU5ODpzdGF0aWMgaW50IGFmc19kb19sb29rdXBfb25lKHN0cnVjdCBpbm9kZSAqZGlyLCBjb25zdCBzdHJ1Y3QgcXN0ciAqbmFtZSxcXG5mcy9hZnMvZGlyLmMtNTk5LVxcdFxcdFxcdCAgICAgc3RydWN0IGFmc19maWQgKmZpZCxcXG4tLVxcbmZzL2Fmcy9kaXIuYz02MzQ9c3RhdGljIGJvb2wgYWZzX2xvb2t1cF9maWxsZGlyKHN0cnVjdCBkaXJfY29udGV4dCAqY3R4LCBjb25zdCBjaGFyICpuYW1lLFxcbi0tXFxuZnMvYWZzL2Rpci5jLTY2MC0gKi9cXG5mcy9hZnMvZGlyLmM6NjYxOnN0YXRpYyB2b2lkIGFmc19kb19sb29rdXBfc3VjY2VzcyhzdHJ1Y3QgYWZzX29wZXJhdGlvbiAqb3ApXFxuZnMvYWZzL2Rpci5jLTY2Mi17XFxuLS1cXG5mcy9hZnMvZGlyLmM9NzIyPXN0YXRpYyBjb25zdCBzdHJ1Y3QgYWZzX29wZXJhdGlvbl9vcHMgYWZzX2lubGluZV9idWxrX3N0YXR1c19vcGVyYXRpb24gPSB7XFxuLS1cXG5mcy9hZnMvZGlyLmMtNzI0LVxcdC5pc3N1ZV95ZnNfcnBjXFx0PSB5ZnNfZnNfaW5saW5lX2J1bGtfc3RhdHVzLFxcbmZzL2Fmcy9kaXIuYzo3MjU6XFx0LnN1Y2Nlc3NcXHQ9IGFmc19kb19sb29rdXBfc3VjY2VzcyxcXG5mcy9hZnMvZGlyLmMtNzI2LX07XFxuLS1cXG5mcy9hZnMvZGlyLmM9NzI4PXN0YXRpYyBjb25zdCBzdHJ1Y3QgYWZzX29wZXJhdGlvbl9vcHMgYWZzX2xvb2t1cF9mZXRjaF9zdGF0dXNfb3BlcmF0aW9uID0ge1xcbi0tXFxuZnMvYWZzL2Rpci5jLTczMC1cXHQuaXNzdWVfeWZzX3JwY1xcdD0geWZzX2ZzX2ZldGNoX3N0YXR1cyxcXG5mcy9hZnMvZGlyLmM6NzMxOlxcdC5zdWNjZXNzXFx0PSBhZnNfZG9fbG9va3VwX3N1Y2Nlc3MsXFxuZnMvYWZzL2Rpci5jLTczMi1cXHQuYWJvcnRlZFxcdD0gYWZzX2NoZWNrX2Zvcl9yZW1vdGVfZGVsZXRpb24sXFxuLS1cXG5mcy9hZnMvZGlyLmM9NzM5PXN0YXRpYyBib29sIGFmc19zZXJ2ZXJfc3VwcG9ydHNfaWJ1bGsoc3RydWN0IGFmc192bm9kZSAqZHZub2RlKVxcbi0tXFxuZnMvYWZzL2Rpci5jLTc3MC0gKi9cXG5mcy9hZnMvZGlyLmM6NzcxOnN0YXRpYyBzdHJ1Y3QgaW5vZGUgKmFmc19kb19sb29rdXAoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSlcXG5mcy9hZnMvZGlyLmMtNzcyLXtcXG4tLVxcbmZzL2Fmcy9kaXIuYz05NjI9c3RhdGljIHN0cnVjdCBkZW50cnkgKmFmc19sb29rdXAoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcXG4tLVxcbmZzL2Fmcy9kaXIuYy0xMDAwLVxcdGFmc19zdGF0X3YoZHZub2RlLCBuX2xvb2t1cCk7XFxuZnMvYWZzL2Rpci5jOjEwMDE6XFx0aW5vZGUgPSBhZnNfZG9fbG9va3VwKGRpciwgZGVudHJ5KTtcXG5mcy9hZnMvZGlyLmMtMTAwMi1cXHRpZiAoaW5vZGUgPT0gRVJSX1BUUigtRU5PRU5UKSlcXG4tLVxcbmZzL2Fmcy9kaXIuYz0xMDU1PXN0YXRpYyBpbnQgYWZzX2RfcmV2YWxpZGF0ZShzdHJ1Y3QgaW5vZGUgKnBhcmVudF9kaXIsIGNvbnN0IHN0cnVjdCBxc3RyICpuYW1lLFxcbi0tXFxuZnMvYWZzL2Rpci5jLTExMTEtXFx0Lyogc2VhcmNoIHRoZSBkaXJlY3RvcnkgZm9yIHRoaXMgdm5vZGUgKi9cXG5mcy9hZnMvZGlyLmM6MTExMjpcXHRyZXQgPSBhZnNfZG9fbG9va3VwX29uZShcXHUwMDI2ZGlyLVxcdTAwM2VuZXRmcy5pbm9kZSwgbmFtZSwgXFx1MDAyNmZpZCwgXFx1MDAyNmRpcl92ZXJzaW9uKTtcXG5mcy9hZnMvZGlyLmMtMTExMy1cXHRzd2l0Y2ggKHJldCkge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yMlQwOTozMTo1NC4yMzg1NDEyODFaIiwiU2VxIjo4MSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTM5MTMyNTQ3NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6XG5cbioqQW5hbHl6aW5nIHRoZSBMb29rdXAgRnVuY3Rpb25zIGluIEFGUyoqXG5cbk9rYXksIHNvIGBhZnNfZG9fbG9va3VwYCBpcyBmbGFnZ2VkIGFzIGJlaW5nIGEgc3RhdGljIGZ1bmN0aW9uLiBUaGF0J3MgaW1tZWRpYXRlbHkgaW50ZXJlc3RpbmcuIEl0IG1lYW5zIGl0J3Mgb25seSB2aXNpYmxlIHdpdGhpbiBpdHMgY29tcGlsYXRpb24gdW5pdCBhbmQgbm90IGRpcmVjdGx5IGFjY2Vzc2libGUgZnJvbSBvdGhlciBtb2R1bGVzLiBUaGlzIGltcGxpZXMgYSBtb3JlIGNvbnN0cmFpbmVkIHJvbGUsIGxpa2VseSBhIGhlbHBlciBmdW5jdGlvbiBvciBhbiBpbnRlcm5hbCBkZXRhaWwgb2Ygc29tZSBsYXJnZXIgbG9va3VwIHByb2Nlc3MuXG5cbk5vdywgdGhhdCBicmluZ3MgbWUgdG8gYGFmc19sb29rdXBgLiBTaW5jZSBgYWZzX2RvX2xvb2t1cGAgaXMgc3RhdGljLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcmVsYXRpb25zaGlwIHdpdGggYGFmc19sb29rdXBgLiBJcyBgYWZzX2xvb2t1cGAgdGhlIHB1YmxpYyBlbnRyeSBwb2ludD8gSXMgaXQgdGhlIGZ1bmN0aW9uIHRoYXQgKmNhbGxzKiBgYWZzX2RvX2xvb2t1cGA/IEkgbmVlZCB0byBkaWcgZGVlcGVyIGludG8gdGhlIGNvZGUgdG8gdHJhY2UgdGhlIGNhbGwgZmxvdyBhbmQgdW5kZXJzdGFuZCBob3cgdGhpcyBzdGF0aWMgZnVuY3Rpb24gaXMgYmVpbmcgbGV2ZXJhZ2VkLiBFeGFtaW5pbmcgYGFmc19sb29rdXBgIHdpbGwgbGlrZWx5IHRlbGwgbWUgdGhlIHNjb3BlLCBwdXJwb3NlLCBhbmQgcmVsYXRpb25zaGlwIGJldHdlZW4gdGhlIHR3byBsb29rdXAgZnVuY3Rpb25zLiBUaGlzIHdpbGwgaGVscCBjbGFyaWZ5IHRoZSBvdmVyYWxsIGRlc2lnbiBvZiB0aGUgQUZTIGxvb2t1cCBtZWNoYW5pc20uIE15IGh1bmNoIGlzIHRoYXQgYGFmc19sb29rdXBgIG1pZ2h0IGJlIGhhbmRsaW5nIHNvbWUgaW5pdGlhbCBzZXR1cCBvciBjaGVja3MgYmVmb3JlIHBhc3NpbmcgdGhlIHdvcmsgb2ZmIHRvIHRoZSBwcml2YXRlIGBhZnNfZG9fbG9va3VwYCBpbXBsZW1lbnRhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6Mzc0MTYsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yMlQwOTozMTo1OS42Mjk4NjkwODVaIiwiU2VxIjo4MiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwODUyNjQ3NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhZnNfbG9va3VwXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL2Fmcy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvYWZzL2NhbGxiYWNrLmM9MTAxPXZvaWQgYWZzX2JyZWFrX2NhbGxiYWNrKHN0cnVjdCBhZnNfdm5vZGUgKnZub2RlLCBlbnVtIGFmc19jYl9icmVha19yZWFzb24gcmVhc29uKVxcbi0tXFxuZnMvYWZzL2NhbGxiYWNrLmMtMTEwLSAqL1xcbmZzL2Fmcy9jYWxsYmFjay5jOjExMTpzdGF0aWMgc3RydWN0IGFmc192b2x1bWUgKmFmc19sb29rdXBfdm9sdW1lX3JjdShzdHJ1Y3QgYWZzX2NlbGwgKmNlbGwsXFxuZnMvYWZzL2NhbGxiYWNrLmMtMTEyLVxcdFxcdFxcdFxcdFxcdFxcdGFmc192b2xpZF90IHZpZClcXG4tLVxcbmZzL2Fmcy9jYWxsYmFjay5jPTIwNj1zdGF0aWMgdm9pZCBhZnNfYnJlYWtfc29tZV9jYWxsYmFja3Moc3RydWN0IGFmc19zZXJ2ZXIgKnNlcnZlcixcXG4tLVxcbmZzL2Fmcy9jYWxsYmFjay5jLTIxNS1cXHRyY3VfcmVhZF9sb2NrKCk7XFxuZnMvYWZzL2NhbGxiYWNrLmM6MjE2OlxcdHZvbHVtZSA9IGFmc19sb29rdXBfdm9sdW1lX3JjdShzZXJ2ZXItXFx1MDAzZWNlbGwsIHZpZCk7XFxuZnMvYWZzL2NhbGxiYWNrLmMtMjE3LVxcdGlmICghdm9sdW1lKSB7XFxuLS1cXG5mcy9hZnMvY2VsbC5jPTEwOD1zdGF0aWMgc3RydWN0IGFmc19jZWxsICphZnNfYWxsb2NfY2VsbChzdHJ1Y3QgYWZzX25ldCAqbmV0LFxcbi0tXFxuZnMvYWZzL2NlbGwuYy0yMjctLypcXG5mcy9hZnMvY2VsbC5jOjIyODogKiBhZnNfbG9va3VwX2NlbGwgLSBMb29rIHVwIG9yIGNyZWF0ZSBhIGNlbGwgcmVjb3JkLlxcbmZzL2Fmcy9jZWxsLmMtMjI5LSAqIEBuZXQ6XFx0VGhlIG5ldHdvcmsgbmFtZXNwYWNlXFxuLS1cXG5mcy9hZnMvY2VsbC5jLTI0MC0gKi9cXG5mcy9hZnMvY2VsbC5jOjI0MTpzdHJ1Y3QgYWZzX2NlbGwgKmFmc19sb29rdXBfY2VsbChzdHJ1Y3QgYWZzX25ldCAqbmV0LFxcbmZzL2Fmcy9jZWxsLmMtMjQyLVxcdFxcdFxcdFxcdCBjb25zdCBjaGFyICpuYW1lLCB1bnNpZ25lZCBpbnQgbmFtZXN6LFxcbmZzL2Fmcy9jZWxsLmMtMjQzLVxcdFxcdFxcdFxcdCBjb25zdCBjaGFyICp2bGxpc3QsXFxuZnMvYWZzL2NlbGwuYzoyNDQ6XFx0XFx0XFx0XFx0IGVudW0gYWZzX2xvb2t1cF9jZWxsX2ZvciByZWFzb24sXFxuZnMvYWZzL2NlbGwuYy0yNDUtXFx0XFx0XFx0XFx0IGVudW0gYWZzX2NlbGxfdHJhY2UgdHJhY2UpXFxuLS1cXG5mcy9hZnMvY2VsbC5jPTQxNT1pbnQgYWZzX2NlbGxfaW5pdChzdHJ1Y3QgYWZzX25ldCAqbmV0LCBjb25zdCBjaGFyICpyb290Y2VsbClcXG4tLVxcbmZzL2Fmcy9jZWxsLmMtNDQ5LVxcdC8qIGFsbG9jYXRlIGEgY2VsbCByZWNvcmQgZm9yIHRoZSByb290L3dvcmtzdGF0aW9uIGNlbGwgKi9cXG5mcy9hZnMvY2VsbC5jOjQ1MDpcXHRuZXdfcm9vdCA9IGFmc19sb29rdXBfY2VsbChuZXQsIHJvb3RjZWxsLCBsZW4sIHZsbGlzdCxcXG5mcy9hZnMvY2VsbC5jLTQ1MS1cXHRcXHRcXHRcXHQgICBBRlNfTE9PS1VQX0NFTExfUk9PVENFTEwsXFxuLS1cXG5mcy9hZnMvZGlyLmMtMjEtXFxuZnMvYWZzL2Rpci5jOjIyOnN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICphZnNfbG9va3VwKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXFxuZnMvYWZzL2Rpci5jLTIzLVxcdFxcdFxcdFxcdCB1bnNpZ25lZCBpbnQgZmxhZ3MpO1xcbi0tXFxuZnMvYWZzL2Rpci5jPTI5PXN0YXRpYyB2b2lkIGFmc19kX2lwdXQoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgaW5vZGUgKmlub2RlKTtcXG5mcy9hZnMvZGlyLmM6MzA6c3RhdGljIGJvb2wgYWZzX2xvb2t1cF9vbmVfZmlsbGRpcihzdHJ1Y3QgZGlyX2NvbnRleHQgKmN0eCwgY29uc3QgY2hhciAqbmFtZSwgaW50IG5sZW4sXFxuZnMvYWZzL2Rpci5jLTMxLVxcdFxcdFxcdFxcdCAgIHU2NCBpbm8sIHUzMiB1bmlxdWlmaWVyKTtcXG5mcy9hZnMvZGlyLmMtMzItI2RlZmluZSBBRlNfTE9PS1VQX09ORSAoKGZpbGxkaXJfdCkweDEyM1VMKVxcbmZzL2Fmcy9kaXIuYzozMzpzdGF0aWMgYm9vbCBhZnNfbG9va3VwX2ZpbGxkaXIoc3RydWN0IGRpcl9jb250ZXh0ICpjdHgsIGNvbnN0IGNoYXIgKm5hbWUsIGludCBubGVuLFxcbmZzL2Fmcy9kaXIuYy0zNC1cXHRcXHRcXHQgICAgICAgdTY0IGlubywgdTMyIHVuaXF1aWZpZXIpO1xcbi0tXFxuZnMvYWZzL2Rpci5jPTYwPWNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIGFmc19kaXJfaW5vZGVfb3BlcmF0aW9ucyA9IHtcXG5mcy9hZnMvZGlyLmMtNjEtXFx0LmNyZWF0ZVxcdFxcdD0gYWZzX2NyZWF0ZSxcXG5mcy9hZnMvZGlyLmM6NjI6XFx0Lmxvb2t1cFxcdFxcdD0gYWZzX2xvb2t1cCxcXG5mcy9hZnMvZGlyLmMtNjMtXFx0LmxpbmtcXHRcXHQ9IGFmc19saW5rLFxcbi0tXFxuZnMvYWZzL2Rpci5jPTc4PWNvbnN0IHN0cnVjdCBkZW50cnlfb3BlcmF0aW9ucyBhZnNfZnNfZGVudHJ5X29wZXJhdGlvbnMgPSB7XFxuLS1cXG5mcy9hZnMvZGlyLmMtODUtXFxuZnMvYWZzL2Rpci5jOjg2OnN0cnVjdCBhZnNfbG9va3VwX29uZV9jb29raWUge1xcbmZzL2Fmcy9kaXIuYy04Ny1cXHRzdHJ1Y3QgZGlyX2NvbnRleHRcXHRjdHg7XFxuLS1cXG5mcy9hZnMvZGlyLmMtOTItXFxuZnMvYWZzL2Rpci5jOjkzOnN0cnVjdCBhZnNfbG9va3VwX2Nvb2tpZSB7XFxuZnMvYWZzL2Rpci5jLTk0LVxcdHN0cnVjdCBkaXJfY29udGV4dFxcdGN0eDtcXG4tLVxcbmZzL2Fmcy9kaXIuYz0zNTc9c3RhdGljIGludCBhZnNfZGlyX2l0ZXJhdGVfYmxvY2soc3RydWN0IGFmc192bm9kZSAqZHZub2RlLFxcbi0tXFxuZnMvYWZzL2Rpci5jLTQyNi1cXHRcXHRpZiAoY3R4LVxcdTAwM2VhY3RvciA9PSBBRlNfTE9PS1VQKSB7XFxuZnMvYWZzL2Rpci5jOjQyNzpcXHRcXHRcXHRpZiAoIWFmc19sb29rdXBfZmlsbGRpcihjdHgsIGRpcmUtXFx1MDAzZXUubmFtZSwgbmxlbixcXG5mcy9hZnMvZGlyLmMtNDI4LVxcdFxcdFxcdFxcdFxcdFxcdG50b2hsKGRpcmUtXFx1MDAzZXUudm5vZGUpLFxcbi0tXFxuZnMvYWZzL2Rpci5jLTQzMS1cXHRcXHR9IGVsc2UgaWYgKGN0eC1cXHUwMDNlYWN0b3IgPT0gQUZTX0xPT0tVUF9PTkUpIHtcXG5mcy9hZnMvZGlyLmM6NDMyOlxcdFxcdFxcdGlmICghYWZzX2xvb2t1cF9vbmVfZmlsbGRpcihjdHgsIGRpcmUtXFx1MDAzZXUubmFtZSwgbmxlbixcXG5mcy9hZnMvZGlyLmMtNDMzLVxcdFxcdFxcdFxcdFxcdFxcdCAgICBudG9obChkaXJlLVxcdTAwM2V1LnZub2RlKSxcXG4tLVxcbmZzL2Fmcy9kaXIuYz01NTM9c3RhdGljIGludCBhZnNfcmVhZGRpcihzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IGRpcl9jb250ZXh0ICpjdHgpXFxuLS1cXG5mcy9hZnMvZGlyLmMtNTY1LSAqL1xcbmZzL2Fmcy9kaXIuYzo1NjY6c3RhdGljIGJvb2wgYWZzX2xvb2t1cF9vbmVfZmlsbGRpcihzdHJ1Y3QgZGlyX2NvbnRleHQgKmN0eCwgY29uc3QgY2hhciAqbmFtZSxcXG5mcy9hZnMvZGlyLmMtNTY3LVxcdFxcdFxcdFxcdCAgaW50IG5sZW4sIHU2NCBpbm8sIHUzMiB1bmlxdWlmaWVyKVxcbmZzL2Fmcy9kaXIuYy01Njgte1xcbmZzL2Fmcy9kaXIuYzo1Njk6XFx0c3RydWN0IGFmc19sb29rdXBfb25lX2Nvb2tpZSAqY29va2llID1cXG5mcy9hZnMvZGlyLmM6NTcwOlxcdFxcdGNvbnRhaW5lcl9vZihjdHgsIHN0cnVjdCBhZnNfbG9va3VwX29uZV9jb29raWUsIGN0eCk7XFxuZnMvYWZzL2Rpci5jLTU3MS1cXG4tLVxcbmZzL2Fmcy9kaXIuYz01OTg9c3RhdGljIGludCBhZnNfZG9fbG9va3VwX29uZShzdHJ1Y3QgaW5vZGUgKmRpciwgY29uc3Qgc3RydWN0IHFzdHIgKm5hbWUsXFxuLS1cXG5mcy9hZnMvZGlyLmMtNjAyLVxcdHN0cnVjdCBhZnNfc3VwZXJfaW5mbyAqYXMgPSBkaXItXFx1MDAzZWlfc2ItXFx1MDAzZXNfZnNfaW5mbztcXG5mcy9hZnMvZGlyLmM6NjAzOlxcdHN0cnVjdCBhZnNfbG9va3VwX29uZV9jb29raWUgY29va2llID0ge1xcbmZzL2Fmcy9kaXIuYy02MDQtXFx0XFx0LmN0eC5hY3RvciA9IEFGU19MT09LVVBfT05FLFxcbi0tXFxuZnMvYWZzL2Rpci5jLTYzMy0gKi9cXG5mcy9hZnMvZGlyLmM6NjM0OnN0YXRpYyBib29sIGFmc19sb29rdXBfZmlsbGRpcihzdHJ1Y3QgZGlyX2NvbnRleHQgKmN0eCwgY29uc3QgY2hhciAqbmFtZSxcXG5mcy9hZnMvZGlyLmMtNjM1LVxcdFxcdFxcdCAgICAgIGludCBubGVuLCB1NjQgaW5vLCB1MzIgdW5pcXVpZmllcilcXG5mcy9hZnMvZGlyLmMtNjM2LXtcXG5mcy9hZnMvZGlyLmM6NjM3OlxcdHN0cnVjdCBhZnNfbG9va3VwX2Nvb2tpZSAqY29va2llID1cXG5mcy9hZnMvZGlyLmM6NjM4OlxcdFxcdGNvbnRhaW5lcl9vZihjdHgsIHN0cnVjdCBhZnNfbG9va3VwX2Nvb2tpZSwgY3R4KTtcXG5mcy9hZnMvZGlyLmMtNjM5LVxcbi0tXFxuZnMvYWZzL2Rpci5jPTcyMj1zdGF0aWMgY29uc3Qgc3RydWN0IGFmc19vcGVyYXRpb25fb3BzIGFmc19pbmxpbmVfYnVsa19zdGF0dXNfb3BlcmF0aW9uID0ge1xcbi0tXFxuZnMvYWZzL2Rpci5jLTcyNy1cXG5mcy9hZnMvZGlyLmM6NzI4OnN0YXRpYyBjb25zdCBzdHJ1Y3QgYWZzX29wZXJhdGlvbl9vcHMgYWZzX2xvb2t1cF9mZXRjaF9zdGF0dXNfb3BlcmF0aW9uID0ge1xcbmZzL2Fmcy9kaXIuYy03MjktXFx0Lmlzc3VlX2Fmc19ycGNcXHQ9IGFmc19mc19mZXRjaF9zdGF0dXMsXFxuLS1cXG5mcy9hZnMvZGlyLmM9NzcxPXN0YXRpYyBzdHJ1Y3QgaW5vZGUgKmFmc19kb19sb29rdXAoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSlcXG5mcy9hZnMvZGlyLmMtNzcyLXtcXG5mcy9hZnMvZGlyLmM6NzczOlxcdHN0cnVjdCBhZnNfbG9va3VwX2Nvb2tpZSAqY29va2llO1xcbmZzL2Fmcy9kaXIuYy03NzQtXFx0c3RydWN0IGFmc192bm9kZV9wYXJhbSAqdnA7XFxuLS1cXG5mcy9hZnMvZGlyLmMtNzg0LVxcbmZzL2Fmcy9kaXIuYzo3ODU6XFx0Y29va2llID0ga3phbGxvY19vYmooc3RydWN0IGFmc19sb29rdXBfY29va2llKTtcXG5mcy9hZnMvZGlyLmMtNzg2LVxcdGlmICghY29va2llKVxcbi0tXFxuZnMvYWZzL2Rpci5jLTg3Ny1cXHRcXHRvcC1cXHUwMDNlZmV0Y2hfc3RhdHVzLndoaWNoID0gMTtcXG5mcy9hZnMvZGlyLmM6ODc4OlxcdFxcdG9wLVxcdTAwM2VvcHMgPSBcXHUwMDI2YWZzX2xvb2t1cF9mZXRjaF9zdGF0dXNfb3BlcmF0aW9uO1xcbmZzL2Fmcy9kaXIuYy04NzktXFx0XFx0YWZzX2JlZ2luX3Zub2RlX29wZXJhdGlvbihvcCk7XFxuLS1cXG5mcy9hZnMvZGlyLmMtOTA3LSAqL1xcbmZzL2Fmcy9kaXIuYzo5MDg6c3RhdGljIHN0cnVjdCBkZW50cnkgKmFmc19sb29rdXBfYXRzeXMoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSlcXG5mcy9hZnMvZGlyLmMtOTA5LXtcXG4tLVxcbmZzL2Fmcy9kaXIuYy05NjEtICovXFxuZnMvYWZzL2Rpci5jOjk2MjpzdGF0aWMgc3RydWN0IGRlbnRyeSAqYWZzX2xvb2t1cChzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxcbmZzL2Fmcy9kaXIuYy05NjMtXFx0XFx0XFx0XFx0IHVuc2lnbmVkIGludCBmbGFncylcXG4tLVxcbmZzL2Fmcy9kaXIuYy05OTctXFx0ICAgIGRlbnRyeS1cXHUwMDNlZF9uYW1lLm5hbWVbZGVudHJ5LVxcdTAwM2VkX25hbWUubGVuIC0gMV0gPT0gJ3MnKVxcbmZzL2Fmcy9kaXIuYzo5OTg6XFx0XFx0cmV0dXJuIGFmc19sb29rdXBfYXRzeXMoZGlyLCBkZW50cnkpO1xcbmZzL2Fmcy9kaXIuYy05OTktXFxuLS1cXG5mcy9hZnMvZGlyLmMtMTAxMC1cXHRcXHRkLVxcdTAwM2VkX2ZzZGF0YSA9IGRlbnRyeS1cXHUwMDNlZF9mc2RhdGE7XFxuZnMvYWZzL2Rpci5jOjEwMTE6XFx0XFx0dHJhY2VfYWZzX2xvb2t1cChkdm5vZGUsIFxcdTAwMjZkLVxcdTAwM2VkX25hbWUsIFxcdTAwMjZmaWQpO1xcbmZzL2Fmcy9kaXIuYy0xMDEyLVxcdH0gZWxzZSB7XFxuZnMvYWZzL2Rpci5jOjEwMTM6XFx0XFx0dHJhY2VfYWZzX2xvb2t1cChkdm5vZGUsIFxcdTAwMjZkZW50cnktXFx1MDAzZWRfbmFtZSwgXFx1MDAyNmZpZCk7XFxuZnMvYWZzL2Rpci5jLTEwMTQtXFx0fVxcbi0tXFxuZnMvYWZzL2R5bnJvb3QuYy0xNS1cXG5mcy9hZnMvZHlucm9vdC5jOjE2OnN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICphZnNfbG9va3VwX2F0Y2VsbChzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBpbm9fdCBpbm8pO1xcbmZzL2Fmcy9keW5yb290LmMtMTctXFxuLS1cXG5mcy9hZnMvZHlucm9vdC5jPTkzPXN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICphZnNfZHlucm9vdF9sb29rdXBfY2VsbChzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxcbi0tXFxuZnMvYWZzL2R5bnJvb3QuYy0xMTAtXFxuZnMvYWZzL2R5bnJvb3QuYzoxMTE6XFx0Y2VsbCA9IGFmc19sb29rdXBfY2VsbChuZXQsIG5hbWUsIGxlbiwgTlVMTCxcXG5mcy9hZnMvZHlucm9vdC5jLTExMi1cXHRcXHRcXHQgICAgICAgQUZTX0xPT0tVUF9DRUxMX0RZTlJPT1QsXFxuLS1cXG5mcy9hZnMvZHlucm9vdC5jPTEzOT1zdGF0aWMgc3RydWN0IGRlbnRyeSAqYWZzX2R5bnJvb3RfbG9va3VwKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXFxuLS1cXG5mcy9hZnMvZHlucm9vdC5jLTE1My1cXHQgICAgbWVtY21wKGRlbnRyeS1cXHUwMDNlZF9uYW1lLm5hbWUsIFxcXCJAY2VsbFxcXCIsIDUpID09IDApXFxuZnMvYWZzL2R5bnJvb3QuYzoxNTQ6XFx0XFx0cmV0dXJuIGFmc19sb29rdXBfYXRjZWxsKGRpciwgZGVudHJ5LCAyKTtcXG5mcy9hZnMvZHlucm9vdC5jLTE1NS1cXG4tLVxcbmZzL2Fmcy9keW5yb290LmMtMTU3LVxcdCAgICBtZW1jbXAoZGVudHJ5LVxcdTAwM2VkX25hbWUubmFtZSwgXFxcIi5AY2VsbFxcXCIsIDYpID09IDApXFxuZnMvYWZzL2R5bnJvb3QuYzoxNTg6XFx0XFx0cmV0dXJuIGFmc19sb29rdXBfYXRjZWxsKGRpciwgZGVudHJ5LCAzKTtcXG5mcy9hZnMvZHlucm9vdC5jLTE1OS1cXG4tLVxcbmZzL2Fmcy9keW5yb290LmM9MjQyPXN0YXRpYyBjb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBhZnNfYXRjZWxsX2lub2RlX29wZXJhdGlvbnMgPSB7XFxuLS1cXG5mcy9hZnMvZHlucm9vdC5jLTI0OC0gKi9cXG5mcy9hZnMvZHlucm9vdC5jOjI0OTpzdGF0aWMgc3RydWN0IGRlbnRyeSAqYWZzX2xvb2t1cF9hdGNlbGwoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgaW5vX3QgaW5vKVxcbmZzL2Fmcy9keW5yb290LmMtMjUwLXtcXG4tLVxcbmZzL2Fmcy9pbnRlcm5hbC5oPTEwNjA9ZXh0ZXJuIHN0cnVjdCBhZnNfY2VsbCAqYWZzX2ZpbmRfY2VsbChzdHJ1Y3QgYWZzX25ldCAqLCBjb25zdCBjaGFyICosIHVuc2lnbmVkLFxcbmZzL2Fmcy9pbnRlcm5hbC5oLTEwNjEtXFx0XFx0XFx0XFx0ICAgICAgZW51bSBhZnNfY2VsbF90cmFjZSk7XFxuZnMvYWZzL2ludGVybmFsLmg6MTA2MjplbnVtIGFmc19sb29rdXBfY2VsbF9mb3Ige1xcbmZzL2Fmcy9pbnRlcm5hbC5oLTEwNjMtXFx0QUZTX0xPT0tVUF9DRUxMX0RZTlJPT1QsXFxuLS1cXG5mcy9hZnMvaW50ZXJuYWwuaC0xMDY5LX07XFxuZnMvYWZzL2ludGVybmFsLmg6MTA3MDpzdHJ1Y3QgYWZzX2NlbGwgKmFmc19sb29rdXBfY2VsbChzdHJ1Y3QgYWZzX25ldCAqbmV0LFxcbmZzL2Fmcy9pbnRlcm5hbC5oLTEwNzEtXFx0XFx0XFx0XFx0IGNvbnN0IGNoYXIgKm5hbWUsIHVuc2lnbmVkIGludCBuYW1lc3osXFxuZnMvYWZzL2ludGVybmFsLmgtMTA3Mi1cXHRcXHRcXHRcXHQgY29uc3QgY2hhciAqdmxsaXN0LFxcbmZzL2Fmcy9pbnRlcm5hbC5oOjEwNzM6XFx0XFx0XFx0XFx0IGVudW0gYWZzX2xvb2t1cF9jZWxsX2ZvciByZWFzb24sXFxuZnMvYWZzL2ludGVybmFsLmgtMTA3NC1cXHRcXHRcXHRcXHQgZW51bSBhZnNfY2VsbF90cmFjZSB0cmFjZSk7XFxuLS1cXG5mcy9hZnMvaW50ZXJuYWwuaD0xNTQwPXN0cnVjdCBhZnNfc2VydmVyICphZnNfZmluZF9zZXJ2ZXIoY29uc3Qgc3RydWN0IHJ4cnBjX3BlZXIgKnBlZXIpO1xcbmZzL2Fmcy9pbnRlcm5hbC5oOjE1NDE6ZXh0ZXJuIHN0cnVjdCBhZnNfc2VydmVyICphZnNfbG9va3VwX3NlcnZlcihzdHJ1Y3QgYWZzX2NlbGwgKiwgc3RydWN0IGtleSAqLCBjb25zdCB1dWlkX3QgKiwgdTMyKTtcXG5mcy9hZnMvaW50ZXJuYWwuaC0xNTQyLWV4dGVybiBzdHJ1Y3QgYWZzX3NlcnZlciAqYWZzX2dldF9zZXJ2ZXIoc3RydWN0IGFmc19zZXJ2ZXIgKiwgZW51bSBhZnNfc2VydmVyX3RyYWNlKTtcXG4tLVxcbmZzL2Fmcy9tbnRwdC5jPTcxPXN0YXRpYyBpbnQgYWZzX21udHB0X3NldF9wYXJhbXMoc3RydWN0IGZzX2NvbnRleHQgKmZjLCBzdHJ1Y3QgZGVudHJ5ICptbnRwdClcXG4tLVxcbmZzL2Fmcy9tbnRwdC5jLTEwOS1cXG5mcy9hZnMvbW50cHQuYzoxMTA6XFx0XFx0Y2VsbCA9IGFmc19sb29rdXBfY2VsbChjdHgtXFx1MDAzZW5ldCwgcCwgc2l6ZSwgTlVMTCxcXG5mcy9hZnMvbW50cHQuYy0xMTEtXFx0XFx0XFx0XFx0ICAgICAgIEFGU19MT09LVVBfQ0VMTF9NT1VOVFBPSU5ULFxcbi0tXFxuZnMvYWZzL3Byb2MuYz04OD1zdGF0aWMgaW50IGFmc19wcm9jX2NlbGxzX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyICpidWYsIHNpemVfdCBzaXplKVxcbi0tXFxuZnMvYWZzL3Byb2MuYy0xMjQtXFxuZnMvYWZzL3Byb2MuYzoxMjU6XFx0XFx0Y2VsbCA9IGFmc19sb29rdXBfY2VsbChuZXQsIG5hbWUsIHN0cmxlbihuYW1lKSwgYXJncyxcXG5mcy9hZnMvcHJvYy5jLTEyNi1cXHRcXHRcXHRcXHQgICAgICAgQUZTX0xPT0tVUF9DRUxMX1BSRUxPQUQsXFxuLS1cXG5mcy9hZnMvc2VydmVyLmM9MTUyPXN0YXRpYyBzdHJ1Y3QgYWZzX2FkZHJfbGlzdCAqYWZzX3ZsX2xvb2t1cF9hZGRycyhzdHJ1Y3QgYWZzX3NlcnZlciAqc2VydmVyLFxcbi0tXFxuZnMvYWZzL3NlcnZlci5jLTE3Ny0gKi9cXG5mcy9hZnMvc2VydmVyLmM6MTc4OnN0cnVjdCBhZnNfc2VydmVyICphZnNfbG9va3VwX3NlcnZlcihzdHJ1Y3QgYWZzX2NlbGwgKmNlbGwsIHN0cnVjdCBrZXkgKmtleSxcXG5mcy9hZnMvc2VydmVyLmMtMTc5LVxcdFxcdFxcdFxcdCAgICAgY29uc3QgdXVpZF90ICp1dWlkLCB1MzIgYWRkcl92ZXJzaW9uKVxcbi0tXFxuZnMvYWZzL3NlcnZlcl9saXN0LmM9Mjc9c3RydWN0IGFmc19zZXJ2ZXJfbGlzdCAqYWZzX2FsbG9jX3NlcnZlcl9saXN0KHN0cnVjdCBhZnNfdm9sdW1lICp2b2x1bWUsXFxuLS1cXG5mcy9hZnMvc2VydmVyX2xpc3QuYy04MS1cXG5mcy9hZnMvc2VydmVyX2xpc3QuYzo4MjpcXHRcXHRzZXJ2ZXIgPSBhZnNfbG9va3VwX3NlcnZlcih2b2x1bWUtXFx1MDAzZWNlbGwsIGtleSwgXFx1MDAyNnZsZGItXFx1MDAzZWZzX3NlcnZlcltpXSxcXG5mcy9hZnMvc2VydmVyX2xpc3QuYy04My1cXHRcXHRcXHRcXHRcXHQgICB2bGRiLVxcdTAwM2VhZGRyX3ZlcnNpb25baV0pO1xcbi0tXFxuZnMvYWZzL3N1cGVyLmM9MjIzPXN0YXRpYyBpbnQgYWZzX3BhcnNlX3NvdXJjZShzdHJ1Y3QgZnNfY29udGV4dCAqZmMsIHN0cnVjdCBmc19wYXJhbWV0ZXIgKnBhcmFtKVxcbi0tXFxuZnMvYWZzL3N1cGVyLmMtMjkxLVxcdGlmIChjZWxsbmFtZSkge1xcbmZzL2Fmcy9zdXBlci5jOjI5MjpcXHRcXHRjZWxsID0gYWZzX2xvb2t1cF9jZWxsKGN0eC1cXHUwMDNlbmV0LCBjZWxsbmFtZSwgY2VsbG5hbWVzeixcXG5mcy9hZnMvc3VwZXIuYy0yOTMtXFx0XFx0XFx0XFx0ICAgICAgIE5VTEwsIEFGU19MT09LVVBfQ0VMTF9ESVJFQ1RfTU9VTlQsXFxuLS1cXG5mcy9hZnMvdmxfYWxpYXMuYz0yNTM9c3RhdGljIGludCB5ZnNfY2hlY2tfY2Fub25pY2FsX2NlbGxfbmFtZShzdHJ1Y3QgYWZzX2NlbGwgKmNlbGwsIHN0cnVjdCBrZXkgKmtleSlcXG4tLVxcbmZzL2Fmcy92bF9hbGlhcy5jLTI3MS1cXHRlbHNlXFxuZnMvYWZzL3ZsX2FsaWFzLmM6MjcyOlxcdFxcdG1hc3RlciA9IGFmc19sb29rdXBfY2VsbChjZWxsLVxcdTAwM2VuZXQsIGNlbGxfbmFtZSwgbmFtZV9sZW4sIE5VTEwsXFxuZnMvYWZzL3ZsX2FsaWFzLmMtMjczLVxcdFxcdFxcdFxcdFxcdCBBRlNfTE9PS1VQX0NFTExfQUxJQVNfQ0hFQ0ssXFxuLS1cXG5mcy9hZnMvdm9sdW1lLmM9NzY9c3RhdGljIHN0cnVjdCBhZnNfdm9sdW1lICphZnNfYWxsb2Nfdm9sdW1lKHN0cnVjdCBhZnNfZnNfY29udGV4dCAqcGFyYW1zLFxcbi0tXFxuZnMvYWZzL3ZvbHVtZS5jLTEzMi0gKi9cXG5mcy9hZnMvdm9sdW1lLmM6MTMzOnN0YXRpYyBzdHJ1Y3QgYWZzX3ZvbHVtZSAqYWZzX2xvb2t1cF92b2x1bWUoc3RydWN0IGFmc19mc19jb250ZXh0ICpwYXJhbXMsXFxuZnMvYWZzL3ZvbHVtZS5jLTEzNC1cXHRcXHRcXHRcXHRcXHQgICAgc3RydWN0IGFmc192bGRiX2VudHJ5ICp2bGRiKVxcbi0tXFxuZnMvYWZzL3ZvbHVtZS5jPTE5OD1zdHJ1Y3QgYWZzX3ZvbHVtZSAqYWZzX2NyZWF0ZV92b2x1bWUoc3RydWN0IGFmc19mc19jb250ZXh0ICpwYXJhbXMpXFxuLS1cXG5mcy9hZnMvdm9sdW1lLmMtMjI2LVxcbmZzL2Fmcy92b2x1bWUuYzoyMjc6XFx0dm9sdW1lID0gYWZzX2xvb2t1cF92b2x1bWUocGFyYW1zLCB2bGRiKTtcXG5mcy9hZnMvdm9sdW1lLmMtMjI4LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yMlQwOTozMTo1OS44Mzg0MDMzNFoiLCJTZXEiOjgzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMDIzNTIxMTIzMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoaXMgZnJvbSBhbiBleHBlcnQgcGVyc3BlY3RpdmU6XG5cbioqRGl2aW5nIGludG8gQUZTIEZpbGVzeXN0ZW0gT3BlcmF0aW9ucyoqXG5cbk9rYXksIHNvIGBhZnNfbG9va3VwYCBpcyBhIGRlbnRyeSBvcGVyYXRpb24sIHdoaWNoIG1ha2VzIHNlbnNlLiBJJ2QgZXhwZWN0IGl0IHRvIGhhbmRsZSBuYW1lIGxvb2t1cHMgd2l0aGluIHRoZSBBRlMgZmlsZXN5c3RlbS4gTm93LCB0aGUgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gc2VlIGhvdyB0aGlzIGxvb2t1cCBpcyBhY3R1YWxseSBoYW5kbGVkLiBBRlMgaXMgY29tcGxleCwgc28gSSdsbCB3YW50IHRvIHRyYWNlIGhvdyBpdCB0aWVzIGludG8gdGhlIFZGUyBsYXllcnMuXG5cbkxldCdzIHF1aWNrbHkgY2hlY2sgdGhlIGFzc29jaWF0ZWQgaW5vZGUgYWxsb2NhdGlvbiBmdW5jdGlvbiDigJMgc3BlY2lmaWNhbGx5LCBgYWZzX2FsbG9jX2lub2RlYC4gVW5kZXJzdGFuZGluZyBob3cgaW5vZGVzIGFyZSBoYW5kbGVkIGluIHRoZSBhbGxvY2F0aW9uIHBoYXNlIHNob3VsZCBoZWxwIG1lIGNvcnJlbGF0ZSBmaWxlLWxvb2t1cHMgdGhyb3VnaCB0aGUgVkZTIChWaXJ0dWFsIEZpbGUgU3lzdGVtKSBsYXllcnMuIEl0IHdpbGwgbGlrZWx5IGdpdmUgY2x1ZXMgYXMgdG8gaG93IHRoaXMgZmlsZXN5c3RlbSBoYW5kbGVzIGlub2RlIGNhY2hpbmcgYW5kIHJlbGF0ZWQgZnVuY3Rpb25hbGl0eS4gVGhpcyB3aWxsIGhvcGVmdWxseSBwcm92aWRlIHNvbWUgY29udGV4dCBmb3IgdGhlIG9wZXJhdGlvbnMgb24gdGhlIGRlbnRyeSBsYXllci5cblxuXG4iLCJJbnB1dFRva2VucyI6NDIwNjAsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yMlQwOTozMjoxMC4wNzM2MTg3OTNaIiwiU2VxIjo4NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2NzU1MTYxMzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYWZzX2FsbG9jX2lub2RlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL2Fmcy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvYWZzL2ludGVybmFsLmg9NjcwPWVudW0gYWZzX2xvY2tfc3RhdGUge1xcbi0tXFxuZnMvYWZzL2ludGVybmFsLmgtNjgzLSAqXFxuZnMvYWZzL2ludGVybmFsLmg6Njg0OiAqIE5vdGUgdGhhdCBhZnNfYWxsb2NfaW5vZGUoKSAqbXVzdCogcmVzZXQgYW55dGhpbmcgdGhhdCBjb3VsZCBpbmNvcnJlY3RseVxcbmZzL2Fmcy9pbnRlcm5hbC5oLTY4NS0gKiBsZWFrIGZyb20gb25lIGlub2RlIHRvIGFub3RoZXIuXFxuLS1cXG5mcy9hZnMvc3VwZXIuYz0zMz1zdGF0aWMgdm9pZCBhZnNfa2lsbF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKTtcXG5mcy9hZnMvc3VwZXIuYzozNDpzdGF0aWMgc3RydWN0IGlub2RlICphZnNfYWxsb2NfaW5vZGUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYik7XFxuZnMvYWZzL3N1cGVyLmMtMzUtc3RhdGljIHZvaWQgYWZzX2Rlc3Ryb3lfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSk7XFxuLS1cXG5mcy9hZnMvc3VwZXIuYz01NT1zdGF0aWMgY29uc3Qgc3RydWN0IHN1cGVyX29wZXJhdGlvbnMgYWZzX3N1cGVyX29wcyA9IHtcXG5mcy9hZnMvc3VwZXIuYy01Ni1cXHQuc3RhdGZzXFx0XFx0PSBhZnNfc3RhdGZzLFxcbmZzL2Fmcy9zdXBlci5jOjU3OlxcdC5hbGxvY19pbm9kZVxcdD0gYWZzX2FsbG9jX2lub2RlLFxcbmZzL2Fmcy9zdXBlci5jLTU4LVxcdC53cml0ZV9pbm9kZVxcdD0gbmV0ZnNfdW5waW5fd3JpdGViYWNrLFxcbi0tXFxuZnMvYWZzL3N1cGVyLmM9NjIyPXN0YXRpYyBpbnQgYWZzX2luaXRfZnNfY29udGV4dChzdHJ1Y3QgZnNfY29udGV4dCAqZmMpXFxuLS1cXG5mcy9hZnMvc3VwZXIuYy02NDYtICogSW5pdGlhbGlzZSBhbiBpbm9kZSBjYWNoZSBzbGFiIGVsZW1lbnQgcHJpb3IgdG8gYW55IHVzZS4gIE5vdGUgdGhhdFxcbmZzL2Fmcy9zdXBlci5jOjY0NzogKiBhZnNfYWxsb2NfaW5vZGUoKSAqbXVzdCogcmVzZXQgYW55dGhpbmcgdGhhdCBjb3VsZCBpbmNvcnJlY3RseSBsZWFrIGZyb20gb25lXFxuZnMvYWZzL3N1cGVyLmMtNjQ4LSAqIGlub2RlIHRvIGFub3RoZXIuXFxuLS1cXG5mcy9hZnMvc3VwZXIuYz02NTA9c3RhdGljIHZvaWQgYWZzX2lfaW5pdF9vbmNlKHZvaWQgKl92bm9kZSlcXG4tLVxcbmZzL2Fmcy9zdXBlci5jLTY2OS0gKi9cXG5mcy9hZnMvc3VwZXIuYzo2NzA6c3RhdGljIHN0cnVjdCBpbm9kZSAqYWZzX2FsbG9jX2lub2RlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXFxuZnMvYWZzL3N1cGVyLmMtNjcxLXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjJUMDk6MzI6MTEuNzQ5MTQ1NDcxWiIsIlNlcSI6ODUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQwNDEzNzg4NTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgaW1tZWRpYXRlIHRob3VnaHQgcHJvY2VzcywgZm9jdXNpbmcgb24gdGhlIHJlbGV2YW50IGNvZGU6XG5cbioqQW5hbHl6aW5nIHRoZSBBRlMgRmlsZXN5c3RlbSBPcGVyYXRpb25zKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYGFmc19hbGxvY19pbm9kZWAsIGFuZCBteSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCBpdCdzIGEgYHN1cGVyX29wZXJhdGlvbmAuIFRoYXQncyBpbXBvcnRhbnQsIGl0IHRlbGxzIG1lIGl0J3MgcGFydCBvZiB0aGUgY29yZSBmaWxlc3lzdGVtIHN1cGVyIGJsb2NrIG9wZXJhdGlvbnMuIE5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGlzIGNvZGUgaXMgZG9pbmcgaW4gYSBiaXQgbW9yZSBkZXRhaWwuIFRvIGdldCB0aGVyZSwgSSB3YW50IHRvIGltbWVkaWF0ZWx5IGNoZWNrIG91dCBgYWZzX2V4dHJhY3RfdmxzZXJ2ZXJfbGlzdGAsIHdoaWNoIGlzIGxpa2VseSByZWxhdGVkLiBJJ20gZ3Vlc3NpbmcgdGhhdCB0aGlzIHJlbGF0ZXMgdG8gdGhlIHZpcnR1YWwgc2VydmVyIGxpc3QgdGhhdCB0aGUgQUZTIHVzZXMgdG8gbG9jYXRlIHRoZSBjb3JyZWN0IHNlcnZlcnMsIGFuZCBJIG5lZWQgdG8gZmlndXJlIG91dCBob3cgaXQgaW50ZXJhY3RzIHdpdGggaW5vZGUgYWxsb2NhdGlvbiwgb3IgaWYgaXQgaXMgZXZlbiByZWxldmFudCBhdCBhbGwsIGJ1dCBlaXRoZXIgd2F5IHRoaXMgc2VlbXMgbGlrZSBhIHNvbGlkIHN0ZXAgdG8gdW5kZXJzdGFuZGluZyB0aGUgY29kZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NDI3OTIsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yMlQwOTozMjoxNS43OTA1Mjk0NVoiLCJTZXEiOjg2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODk0NDgzMTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYWZzX2V4dHJhY3RfdmxzZXJ2ZXJfbGlzdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9hZnMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2Fmcy9hZGRyX2xpc3QuYz0yNTA9c3RydWN0IGFmc192bHNlcnZlcl9saXN0ICphZnNfZG5zX3F1ZXJ5KHN0cnVjdCBhZnNfY2VsbCAqY2VsbCwgdGltZTY0X3QgKl9leHBpcnkpXFxuLS1cXG5mcy9hZnMvYWRkcl9saXN0LmMtMjY4LVxcdGlmIChyZXQgXFx1MDAzZSAxIFxcdTAwMjZcXHUwMDI2IHJlc3VsdFswXSA9PSAwKVxcbmZzL2Fmcy9hZGRyX2xpc3QuYzoyNjk6XFx0XFx0dmxsaXN0ID0gYWZzX2V4dHJhY3RfdmxzZXJ2ZXJfbGlzdChjZWxsLCByZXN1bHQsIHJldCk7XFxuZnMvYWZzL2FkZHJfbGlzdC5jLTI3MC1cXHRlbHNlXFxuLS1cXG5mcy9hZnMvaW50ZXJuYWwuaD0xNjgyPWV4dGVybiB2b2lkIGFmc19wdXRfdmxzZXJ2ZXJsaXN0KHN0cnVjdCBhZnNfbmV0ICosIHN0cnVjdCBhZnNfdmxzZXJ2ZXJfbGlzdCAqKTtcXG5mcy9hZnMvaW50ZXJuYWwuaDoxNjgzOmV4dGVybiBzdHJ1Y3QgYWZzX3Zsc2VydmVyX2xpc3QgKmFmc19leHRyYWN0X3Zsc2VydmVyX2xpc3Qoc3RydWN0IGFmc19jZWxsICosXFxuZnMvYWZzL2ludGVybmFsLmgtMTY4NC1cXHRcXHRcXHRcXHRcXHRcXHRcXHQgICBjb25zdCB2b2lkICosIHNpemVfdCk7XFxuLS1cXG5mcy9hZnMvdmxfbGlzdC5jPTg5PXN0YXRpYyBzdHJ1Y3QgYWZzX2FkZHJfbGlzdCAqYWZzX2V4dHJhY3RfdmxfYWRkcnMoc3RydWN0IGFmc19uZXQgKm5ldCxcXG4tLVxcbmZzL2Fmcy92bF9saXN0LmMtMTU5LSAqL1xcbmZzL2Fmcy92bF9saXN0LmM6MTYwOnN0cnVjdCBhZnNfdmxzZXJ2ZXJfbGlzdCAqYWZzX2V4dHJhY3RfdmxzZXJ2ZXJfbGlzdChzdHJ1Y3QgYWZzX2NlbGwgKmNlbGwsXFxuZnMvYWZzL3ZsX2xpc3QuYy0xNjEtXFx0XFx0XFx0XFx0XFx0XFx0ICAgIGNvbnN0IHZvaWQgKmJ1ZmZlcixcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjJUMDk6MzI6MTUuODc5OTg1NTU3WiIsIlNlcSI6ODcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1MjM2MTk0NTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOlxuXG4qKkFuYWx5emluZyBBRlMgU2VydmVyIEhhbmRsaW5nKipcblxuQWxyaWdodCwgc28gYGFmc19leHRyYWN0X3Zsc2VydmVyX2xpc3RgIGlzIGEgZ2xvYmFsIHZhcmlhYmxlLiBUaGF0J3MgYSBrZXkgb2JzZXJ2YXRpb24sIG1lYW5pbmcgaXQncyBhY2Nlc3NpYmxlIGFuZCBwb3RlbnRpYWxseSBtb2RpZmllZCBmcm9tIGFueXdoZXJlLiBOb3csIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgaXMgdXNlZCBhbmQgaXRzIGltcGFjdCwgSSBuZWVkIHRvIGxvb2sgaW50byBpdHMgaW50ZXJhY3Rpb24gd2l0aCB0aGUgYnJvYWRlciBBRlMgc3Vic3lzdGVtLiBTcGVjaWZpY2FsbHksIGxldCdzIHR1cm4gb3VyIGF0dGVudGlvbiB0byBgYWZzX2RlbGl2ZXJfY2JfaW5pdF9jYWxsX2JhY2tfc3RhdGUzYC4gRXhhbWluaW5nIHRoYXQgY2FsbGJhY2sncyBzdGF0ZSBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSBsaXN0IHdpbGwgZ2l2ZSBtZSBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIHRoZSBkYXRhIGZsb3cgYW5kIHBvdGVudGlhbCBmb3IgYW55IHJhY2UgY29uZGl0aW9ucyBvciBzeW5jaHJvbml6YXRpb24gaXNzdWVzIHJlbGF0ZWQgdG8gdGhhdCBnbG9iYWwgdmFyaWFibGUuIFRpbWUgdG8gZGlnIGluIGFuZCBzZWUgaG93IHRoZXNlIHBpZWNlcyBmaXQgdG9nZXRoZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQzNDAzLCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjJUMDk6MzI6MTkuNDAzNjA4Njc5WiIsIlNlcSI6ODgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNDI4NzQxNDEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYWZzX2RlbGl2ZXJfY2JfaW5pdF9jYWxsX2JhY2tfc3RhdGUzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL2Fmcy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvYWZzL2Ntc2VydmljZS5jPTE5PXN0YXRpYyBpbnQgYWZzX2RlbGl2ZXJfY2JfaW5pdF9jYWxsX2JhY2tfc3RhdGUoc3RydWN0IGFmc19jYWxsICopO1xcbmZzL2Fmcy9jbXNlcnZpY2UuYzoyMDpzdGF0aWMgaW50IGFmc19kZWxpdmVyX2NiX2luaXRfY2FsbF9iYWNrX3N0YXRlMyhzdHJ1Y3QgYWZzX2NhbGwgKik7XFxuZnMvYWZzL2Ntc2VydmljZS5jLTIxLXN0YXRpYyBpbnQgYWZzX2RlbGl2ZXJfY2JfcHJvYmUoc3RydWN0IGFmc19jYWxsICopO1xcbi0tXFxuZnMvYWZzL2Ntc2VydmljZS5jPTU3PXN0YXRpYyBjb25zdCBzdHJ1Y3QgYWZzX2NhbGxfdHlwZSBhZnNfU1JYQ0JJbml0Q2FsbEJhY2tTdGF0ZTMgPSB7XFxuZnMvYWZzL2Ntc2VydmljZS5jLTU4LVxcdC5uYW1lXFx0XFx0PSBcXFwiQ0IuSW5pdENhbGxCYWNrU3RhdGUzXFxcIixcXG5mcy9hZnMvY21zZXJ2aWNlLmM6NTk6XFx0LmRlbGl2ZXJcXHQ9IGFmc19kZWxpdmVyX2NiX2luaXRfY2FsbF9iYWNrX3N0YXRlMyxcXG5mcy9hZnMvY21zZXJ2aWNlLmMtNjAtXFx0LmRlc3RydWN0b3JcXHQ9IGFmc19jbV9kZXN0cnVjdG9yLFxcbi0tXFxuZnMvYWZzL2Ntc2VydmljZS5jPTMwMz1zdGF0aWMgaW50IGFmc19kZWxpdmVyX2NiX2luaXRfY2FsbF9iYWNrX3N0YXRlKHN0cnVjdCBhZnNfY2FsbCAqY2FsbClcXG4tLVxcbmZzL2Fmcy9jbXNlcnZpY2UuYy0zMTMtICovXFxuZnMvYWZzL2Ntc2VydmljZS5jOjMxNDpzdGF0aWMgaW50IGFmc19kZWxpdmVyX2NiX2luaXRfY2FsbF9iYWNrX3N0YXRlMyhzdHJ1Y3QgYWZzX2NhbGwgKmNhbGwpXFxuZnMvYWZzL2Ntc2VydmljZS5jLTMxNS17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIyVDA5OjMyOjE5Ljc0NjQ5MDg1WiIsIlNlcSI6ODksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQzNzkwNDg0NzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyBgYWZzX2RlbGl2ZXJfY2JfaW5pdF9jYWxsX2JhY2tfc3RhdGUzYCBhbmQgYGFmc19kZWxpdmVyX2NiX3Byb2JlX3V1aWRgKipcblxuQWxyaWdodCwgbXkgaW5pdGlhbCB0aG91Z2h0IGlzOiAqYGFmc19kZWxpdmVyX2NiX2luaXRfY2FsbF9iYWNrX3N0YXRlM2AgaXMgZGVjbGFyZWQgYXMgc3RhdGljLiogVGhhdCBpbW1lZGlhdGVseSBwaXF1ZXMgbXkgaW50ZXJlc3QuIFN0YXRpYyBzY29wZSBvZnRlbiBpbXBsaWVzIGEgZnVuY3Rpb24tc3BlY2lmaWMsIGludGVybmFsIHN0YXRlLiAgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGxpZmVjeWNsZSBhbmQgd2hldGhlciB0aGlzIHN0YXRpYyB2YXJpYWJsZSBpbnRyb2R1Y2VzIGFueSBjb25jdXJyZW5jeSBjb25jZXJucyB3aXRoaW4gdGhlIGBhZnNfZGVsaXZlcl9jYmAgY29udGV4dC4gIE1lbW9yeSBtYW5hZ2VtZW50IGlzIGFsd2F5cyBvbiBteSBtaW5kIGFuZCBob3cgYSBzdGF0aWMgdmFyaWFibGUgcGxheXMgYSBwYXJ0IGluIHRoYXQuIFdoYXQgaW1wYWN0IGRvZXMgdGhpcyBoYXZlIG9uIHJlZW50cmFuY3k/XG5cbk15IG5leHQgaW1tZWRpYXRlIHF1ZXN0aW9uOiAqV2hhdCdzIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiB0aGlzIHN0YXRpYyB2YXJpYWJsZSBhbmQgdGhlIGNhbGwgdG8gYGFmc19kZWxpdmVyX2NiX3Byb2JlX3V1aWRgPyogIEkgbmVlZCB0byBkaWcgaW50byBgYWZzX2RlbGl2ZXJfY2JfcHJvYmVfdXVpZGAuIElzIGl0IHJlYWRpbmcgb3Igd3JpdGluZyB0aGlzIHN0YXRpYyBzdGF0ZT8gRG9lcyB0aGUgcHJvYmUgZnVuY3Rpb24gbW9kaWZ5IHRoZSBzdGF0ZSBvZiB0aGUgaW5pdGlhbCBjYWxsIGJhY2sgZnVuY3Rpb24/IFdoYXQga2luZCBvZiBpbnZhcmlhbnRzIGFyZSBhdCBwbGF5PyBJJ20gYWxyZWFkeSBmb3JtdWxhdGluZyBxdWVzdGlvbnMgYWJvdXQgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucywgbG9jayBwcm90ZWN0aW9uIChvciBsYWNrIHRoZXJlb2YpLCBhbmQgaG93IGRhdGEgZGVwZW5kZW5jaWVzIGFyZSBoYW5kbGVkIHdpdGhpbiB0aGlzIG1vZHVsZS4gSSBzaG91bGQgcHJvYmFibHkgYmUgb24gdGhlIGxvb2tvdXQgZm9yIGFueSBwb3RlbnRpYWwgaXNzdWVzIHJlbGF0ZWQgdG8gc3RhdGUgcGVyc2lzdGVuY2UgYWNyb3NzIGRpZmZlcmVudCBjYWxscyB0byByZWxhdGVkIGZ1bmN0aW9ucywgZXNwZWNpYWxseSBpZiB0aGlzIGlzIGEgY2FsbGJhY2sgZnVuY3Rpb24gd2hlcmUgb3JkZXIgYW5kIGNvbnRleHQgYXJlIGNyaXRpY2FsLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpZiB0aGUgcHJvYmUgaW1wYWN0cyB0aGUgcGVyZm9ybWFuY2UsIG9yIHJlbGlhYmlsaXR5LCBvZiB0aGUgb3JpZ2luYWwgY2FsbCBiYWNrIGZ1bmN0aW9uLiBJJ20gc3RhcnRpbmcgdG8gdGhpbmsgYWJvdXQgcG9zc2libGUgZGVidWdnaW5nIHN0cmF0ZWdpZXMgdG8gdHJhY2sgdGhlIHZhbHVlcyBhbmQgaW1wYWN0IG9mIHRoZSB2YXJpYWJsZXMuIFRoaXMgYWxzbyBzdWdnZXN0cyB0byBtZSB0aGF0IHRoaXMgaXMgYSBjcml0aWNhbCBzZWN0aW9uIG9mIGNvZGUsIGFuZCB0aGF0IG1lYW5zIEkgbmVlZCB0byBjYXJlZnVsbHkgYW5hbHl6ZSB0aGUgcG90ZW50aWFsIGZvciBkZWFkbG9jaywgb3Igb3RoZXIgY29uY3VycmVuY3kgZXJyb3JzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0Mzk4OCwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIyVDA5OjMyOjI0LjEyNTU0MzA1WiIsIlNlcSI6OTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDY0NDE4MzUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYWZzX2RlbGl2ZXJfY2JfcHJvYmVfdXVpZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9hZnMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2Fmcy9jbXNlcnZpY2UuYz0yMj1zdGF0aWMgaW50IGFmc19kZWxpdmVyX2NiX2NhbGxiYWNrKHN0cnVjdCBhZnNfY2FsbCAqKTtcXG5mcy9hZnMvY21zZXJ2aWNlLmM6MjM6c3RhdGljIGludCBhZnNfZGVsaXZlcl9jYl9wcm9iZV91dWlkKHN0cnVjdCBhZnNfY2FsbCAqKTtcXG5mcy9hZnMvY21zZXJ2aWNlLmMtMjQtc3RhdGljIGludCBhZnNfZGVsaXZlcl9jYl90ZWxsX21lX2Fib3V0X3lvdXJzZWxmKHN0cnVjdCBhZnNfY2FsbCAqKTtcXG4tLVxcbmZzL2Fmcy9jbXNlcnZpY2UuYz03Nz1zdGF0aWMgY29uc3Qgc3RydWN0IGFmc19jYWxsX3R5cGUgYWZzX1NSWENCUHJvYmVVdWlkID0ge1xcbmZzL2Fmcy9jbXNlcnZpY2UuYy03OC1cXHQubmFtZVxcdFxcdD0gXFxcIkNCLlByb2JlVXVpZFxcXCIsXFxuZnMvYWZzL2Ntc2VydmljZS5jOjc5OlxcdC5kZWxpdmVyXFx0PSBhZnNfZGVsaXZlcl9jYl9wcm9iZV91dWlkLFxcbmZzL2Fmcy9jbXNlcnZpY2UuYy04MC1cXHQuZGVzdHJ1Y3RvclxcdD0gYWZzX2NtX2Rlc3RydWN0b3IsXFxuLS1cXG5mcy9hZnMvY21zZXJ2aWNlLmM9NDE2PXN0YXRpYyB2b2lkIFNSWEFGU0NCX1Byb2JlVXVpZChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuLS1cXG5mcy9hZnMvY21zZXJ2aWNlLmMtNDM0LSAqL1xcbmZzL2Fmcy9jbXNlcnZpY2UuYzo0MzU6c3RhdGljIGludCBhZnNfZGVsaXZlcl9jYl9wcm9iZV91dWlkKHN0cnVjdCBhZnNfY2FsbCAqY2FsbClcXG5mcy9hZnMvY21zZXJ2aWNlLmMtNDM2LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjJUMDk6MzI6MjQuMzMxOTkyODY1WiIsIlNlcSI6OTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY0OTk3NDA1NDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgaW1tZWRpYXRlIHRob3VnaHQgcHJvY2VzczpcblxuKipTdGF0aWMgVmFyaWFibGVzIGFuZCBpbm9kZSBJbml0aWFsaXphdGlvbioqXG5cbk9rYXksIHNvIGBhZnNfZGVsaXZlcl9jYl9wcm9iZV91dWlkYCBpcyBkZWNsYXJlZCBhcyBzdGF0aWMuIFRoaXMgaW1tZWRpYXRlbHkgc3VnZ2VzdHMgaXQncyBsaWtlbHkgYSBjb25zdGFudCBvciBhIGxvY2FsbHkgc2NvcGVkIHZhbHVlIHdpdGhpbiBhIHNwZWNpZmljIG1vZHVsZSBvciBmdW5jdGlvbiwgYW5kIHBvdGVudGlhbGx5IGEgY2FuZGlkYXRlIGZvciBvcHRpbWl6YXRpb24gb3IgdGhyZWFkIHNhZmV0eSBjb25jZXJucywgc28gSSdsbCBrZWVwIHRoYXQgaW4gbWluZC5cblxuTm93LCBteSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIFVVSUQgaXMgdXNlZCBhbmQgdGhlIGJyb2FkZXIgY29udGV4dCBpdCBzaXRzIHdpdGhpbi4gTGV0J3MgZGVsdmUgaW50byBgYWZzX2lub2RlX2luaXRfZnJvbV9zdGF0dXNgLiBJdCBtYWtlcyBzZW5zZSB0byBleGFtaW5lIHdoZXJlIHRoaXMgc3RhdGljIFVVSUQgZ2V0cyBhc3NpZ25lZCBhbmQgdXNlZCwgYXMgYGlub2RlYCBpbml0aWFsaXphdGlvbiBpcyBrZXkuIEV4cGxvcmluZyB0aGlzIHBhdGggc2VlbXMgbGlrZWx5IHRvIHJldmVhbCB0aGUgaW50ZXJhY3Rpb24gd2l0aCB0aGUgdXVpZC4gVGhpcyB3aWxsIGdpdmUgbWUgdGhlIHByb3BlciBjb250ZXh0IGZvciB0aGUgc3RhdGljIHZhcmlhYmxlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NDc1MywiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIyVDA5OjMyOjMwLjgzMTczNTYxMloiLCJTZXEiOjkyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTYxMDkwNTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYWZzX2lub2RlX2luaXRfZnJvbV9zdGF0dXNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvYWZzL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9hZnMvaW5vZGUuYz01NT1zdGF0aWMgdm9pZCBhZnNfc2V0X25ldGZzX2NvbnRleHQoc3RydWN0IGFmc192bm9kZSAqdm5vZGUsIGJvb2wgaXNfZmlsZSlcXG4tLVxcbmZzL2Fmcy9pbm9kZS5jLTYyLSAqL1xcbmZzL2Fmcy9pbm9kZS5jOjYzOnN0YXRpYyBpbnQgYWZzX2lub2RlX2luaXRfZnJvbV9zdGF0dXMoc3RydWN0IGFmc19vcGVyYXRpb24gKm9wLFxcbmZzL2Fmcy9pbm9kZS5jLTY0LVxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCBhZnNfdm5vZGVfcGFyYW0gKnZwLFxcbi0tXFxuZnMvYWZzL2lub2RlLmM9MzQ2PXN0YXRpYyB2b2lkIGFmc19mZXRjaF9zdGF0dXNfc3VjY2VzcyhzdHJ1Y3QgYWZzX29wZXJhdGlvbiAqb3ApXFxuLS1cXG5mcy9hZnMvaW5vZGUuYy0zNTItXFx0aWYgKGlub2RlX3N0YXRlX3JlYWRfb25jZShcXHUwMDI2dm5vZGUtXFx1MDAzZW5ldGZzLmlub2RlKSBcXHUwMDI2IElfTkVXKSB7XFxuZnMvYWZzL2lub2RlLmM6MzUzOlxcdFxcdHJldCA9IGFmc19pbm9kZV9pbml0X2Zyb21fc3RhdHVzKG9wLCB2cCwgdm5vZGUpO1xcbmZzL2Fmcy9pbm9kZS5jLTM1NC1cXHRcXHRhZnNfb3Bfc2V0X2Vycm9yKG9wLCByZXQpO1xcbi0tXFxuZnMvYWZzL2lub2RlLmM9NDgyPXN0cnVjdCBpbm9kZSAqYWZzX2lnZXQoc3RydWN0IGFmc19vcGVyYXRpb24gKm9wLCBzdHJ1Y3QgYWZzX3Zub2RlX3BhcmFtICp2cClcXG4tLVxcbmZzL2Fmcy9pbm9kZS5jLTUwOC1cXG5mcy9hZnMvaW5vZGUuYzo1MDk6XFx0cmV0ID0gYWZzX2lub2RlX2luaXRfZnJvbV9zdGF0dXMob3AsIHZwLCB2bm9kZSk7XFxuZnMvYWZzL2lub2RlLmMtNTEwLVxcdGlmIChyZXQgXFx1MDAzYyAwKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yMlQwOTozMjozMC45Mjc4NTA3MDlaIiwiU2VxIjo5MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTA3Njg2OTE3NTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGlzIGNvZGU6XG5cbioqQW5hbHl6aW5nIHRoZSBBRlMgSW5vZGUgSW5pdGlhbGl6YXRpb24qKlxuXG5Pa2F5LCBzbyBgYWZzX2lub2RlX2luaXRfZnJvbV9zdGF0dXNgIGlzIG1hcmtlZCBhcyBgc3RhdGljYC4gVGhhdCdzIGludGVyZXN0aW5nLCBhbmQgaXQgaW1tZWRpYXRlbHkgZmxhZ3MgYSBwb3RlbnRpYWwgYXJlYSBmb3IgY2xvc2VyIGV4YW1pbmF0aW9uLiBBIHN0YXRpYyBmdW5jdGlvbiwgaW4gdGhpcyBjb250ZXh0LCB1c3VhbGx5IG1lYW5zIGl0J3MgaW50ZW5kZWQgZm9yIGludGVybmFsIHVzZSB3aXRoaW4gdGhlIEFGUyBpbm9kZSBzdWJzeXN0ZW0gb25seSwgd2hpY2ggbWFrZXMgc2Vuc2UuIEl0IG1lYW5zIGl0J3Mgbm90IG1lYW50IHRvIGJlIGRpcmVjdGx5IGNhbGxlZCBmcm9tIG90aGVyIHBhcnRzIG9mIHRoZSBrZXJuZWwsIGxpbWl0aW5nIGl0cyBzY29wZSBhbmQgcG90ZW50aWFsIGZvciB1bmludGVuZGVkIGludGVyYWN0aW9ucywgd2hpY2ggaXMgZ29vZCBmb3Igc3RhYmlsaXR5LiBUaGUgY29udGV4dCBoaW50cyBpdCBtaWdodCBiZSBhIGhlbHBlciBmdW5jdGlvbiBmb3Igc2V0dGluZyB1cCBhbiBpbm9kZSBmcm9tIHNvbWUgc3RvcmVkIHN0YXR1cyBpbmZvcm1hdGlvbi5cblxuR2l2ZW4gdGhhdCwgbGV0J3MgdHJhY2UgdGhpcyBiYWNrIGEgYml0IGFuZCBjaGVjayBgYWZzX3Jvb3RfaWdldGAuIFRoYXQncyBhIGxvZ2ljYWwgbmV4dCBzdGVwLiBVbmRlcnN0YW5kaW5nIGhvdyB0aGUgcm9vdCBpbm9kZSBpcyBhY3F1aXJlZCBtaWdodCBwcm92aWRlIG1vcmUgY29udGV4dCBvbiB3aGVuIGFuZCBob3cgdGhpcyBzdGF0aWMgaW5pdGlhbGl6YXRpb24gZnVuY3Rpb24gaXMgYmVpbmcgaW52b2tlZC4gSXQncyBsaWtlbHkgdGhhdCBgYWZzX3Jvb3RfaWdldGAgaXMgdGhlIGVudHJ5IHBvaW50IGZvciByZXRyaWV2aW5nIHRoZSByb290IGlub2RlLCBhbmQgaWYgc28sIGl0IHdpbGwgcHJvYmFibHkgdXRpbGl6ZSBgYWZzX2lub2RlX2luaXRfZnJvbV9zdGF0dXNgIGF0IHNvbWUgcG9pbnQgZHVyaW5nIHRoZSBpbml0aWFsaXphdGlvbiBzZXF1ZW5jZS4gSSdtIGFzc3VtaW5nIHRoYXQgaXQgaXMgc2V0dGluZyB1cCB0aGUgQUZTIGZpbGVzeXN0ZW0ncyByb290IGlub2RlLiBCeSBleGFtaW5pbmcgdGhhdCBmdW5jdGlvbiwgSSBjYW4gdW5kZXJzdGFuZCB0aGUgYmlnZ2VyIHBpY3R1cmUgb2YgaG93IHRoaXMgc3RhdGljIGhlbHBlciBmaXRzIGluLiBEaWdnaW5nIGludG8gdGhlIGlnZXQgcHJvY2VzcyBtYWtlcyBzZW5zZSwgYXMgYSBmaWxlIHN5c3RlbSdzIHJvb3QgaW5vZGUgaXMgY3JpdGljYWwgZm9yIGFueSBzdWJzZXF1ZW50IHRyYXZlcnNhbCwgd2hpY2ggdGhlbiBwcm9iYWJseSB1dGlsaXplcyB0aGlzIHN0YXRpYyBmdW5jdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NDUzNTIsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yMlQwOTozMjo0MS42OTY1NDU1MjlaIiwiU2VxIjo5NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM1MjcwNTc1MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhZnNfcm9vdF9pZ2V0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL2Fmcy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvYWZzL2lub2RlLmM9NTI4PXN0YXRpYyBpbnQgYWZzX2lnZXQ1X3NldF9yb290KHN0cnVjdCBpbm9kZSAqaW5vZGUsIHZvaWQgKm9wYXF1ZSlcXG4tLVxcbmZzL2Fmcy9pbm9kZS5jLTU0NS0gKi9cXG5mcy9hZnMvaW5vZGUuYzo1NDY6c3RydWN0IGlub2RlICphZnNfcm9vdF9pZ2V0KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHN0cnVjdCBrZXkgKmtleSlcXG5mcy9hZnMvaW5vZGUuYy01NDcte1xcbi0tXFxuZnMvYWZzL2ludGVybmFsLmg9MTI1OT1leHRlcm4gc3RydWN0IGlub2RlICphZnNfaWdldChzdHJ1Y3QgYWZzX29wZXJhdGlvbiAqLCBzdHJ1Y3QgYWZzX3Zub2RlX3BhcmFtICopO1xcbmZzL2Fmcy9pbnRlcm5hbC5oOjEyNjA6ZXh0ZXJuIHN0cnVjdCBpbm9kZSAqYWZzX3Jvb3RfaWdldChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKiwgc3RydWN0IGtleSAqKTtcXG5mcy9hZnMvaW50ZXJuYWwuaC0xMjYxLWV4dGVybiBpbnQgYWZzX2dldGF0dHIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIGNvbnN0IHN0cnVjdCBwYXRoICosXFxuLS1cXG5mcy9hZnMvc3VwZXIuYz00NDg9c3RhdGljIGludCBhZnNfZmlsbF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzdHJ1Y3QgYWZzX2ZzX2NvbnRleHQgKmN0eClcXG4tLVxcbmZzL2Fmcy9zdXBlci5jLTQ3My1cXHRcXHRhZnNfYWN0aXZhdGVfdm9sdW1lKGFzLVxcdTAwM2V2b2x1bWUpO1xcbmZzL2Fmcy9zdXBlci5jOjQ3NDpcXHRcXHRpbm9kZSA9IGFmc19yb290X2lnZXQoc2IsIGN0eC1cXHUwMDNla2V5KTtcXG5mcy9hZnMvc3VwZXIuYy00NzUtXFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yMlQwOTozMjo0Mi4wNDkyNTc0NloiLCJTZXEiOjk1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4NDg5OTgyMDQ2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byBBRlMgaW5vZGUgbWFuYWdlbWVudC4uLioqXG5cbk9rYXksIHNvIGBhZnNfcm9vdF9pZ2V0YCBpcyBnbG9iYWwsIG1lYW5pbmcgaXQncyBhY2Nlc3NpYmxlIGFjcm9zcyB0aGUgZW50aXJlIEFGUyBmaWxlc3lzdGVtLiBUaGF0J3MgZ29vZCB0byBrbm93LCBzZXRzIHRoZSBzdGFnZS4gQnV0IEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyByZWxhdGlvbnNoaXAgdG8gaW5vZGUgZXZpY3Rpb24sIHBhcnRpY3VsYXJseSBpbiBob3cgaXQgaW1wYWN0cyB0aGUgcm9vdCBpbm9kZS5cblxuTm93LCB3aGVyZSBkb2VzIHRoYXQgaW50ZXJhY3Rpb24gYWN0dWFsbHkgKmhhcHBlbio/IExldCBtZSBzaGlmdCBmb2N1cyBhbmQgY2hlY2sgYGFmc19ldmljdF9pbm9kZWAuLi4gSSBuZWVkIHRvIHNlZSBob3cgZXZpY3Rpb24gZnVuY3Rpb25zIHJlbGF0ZSB0byBpbml0aWFsIGlub2RlIHJldHJpZXZhbC5cblxuXG4iLCJJbnB1dFRva2VucyI6NDYwNDksIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yMlQwOTozMjo1MC41MzkyNDI1MTdaIiwiU2VxIjo5NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwMzU0NzM4NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhZnNfZXZpY3RfaW5vZGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvYWZzL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9hZnMvaW5vZGUuYz02NDI9aW50IGFmc19kcm9wX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuLS1cXG5mcy9hZnMvaW5vZGUuYy02NTQtICovXFxuZnMvYWZzL2lub2RlLmM6NjU1OnZvaWQgYWZzX2V2aWN0X2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuZnMvYWZzL2lub2RlLmMtNjU2LXtcXG4tLVxcbmZzL2Fmcy9pbnRlcm5hbC5oPTEyNjM9ZXh0ZXJuIGludCBhZnNfc2V0YXR0cihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGRlbnRyeSAqLCBzdHJ1Y3QgaWF0dHIgKik7XFxuZnMvYWZzL2ludGVybmFsLmg6MTI2NDpleHRlcm4gdm9pZCBhZnNfZXZpY3RfaW5vZGUoc3RydWN0IGlub2RlICopO1xcbmZzL2Fmcy9pbnRlcm5hbC5oLTEyNjUtZXh0ZXJuIGludCBhZnNfZHJvcF9pbm9kZShzdHJ1Y3QgaW5vZGUgKik7XFxuLS1cXG5mcy9hZnMvc3VwZXIuYz01NT1zdGF0aWMgY29uc3Qgc3RydWN0IHN1cGVyX29wZXJhdGlvbnMgYWZzX3N1cGVyX29wcyA9IHtcXG4tLVxcbmZzL2Fmcy9zdXBlci5jLTYxLVxcdC5mcmVlX2lub2RlXFx0PSBhZnNfZnJlZV9pbm9kZSxcXG5mcy9hZnMvc3VwZXIuYzo2MjpcXHQuZXZpY3RfaW5vZGVcXHQ9IGFmc19ldmljdF9pbm9kZSxcXG5mcy9hZnMvc3VwZXIuYy02My1cXHQuc2hvd19kZXZuYW1lXFx0PSBhZnNfc2hvd19kZXZuYW1lLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yMlQwOTozMjo1MC43NDI3OTg4MDFaIiwiU2VxIjo5NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzE2NDM2MDQ5MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSBpbW1lZGlhdGUgdGhvdWdodCBwcm9jZXNzLCBmb2N1c2luZyBvbiB0aGUgcHJvdmlkZWQgY3VlcywgcmVuZGVyZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipOYXZpZ2F0aW5nIHRoZSBBRlMgS2VybmVsIENvZGViYXNlKipcblxuT2theSwgc28gYGFmc19ldmljdF9pbm9kZWAuIFJpZ2h0LCB0aGF0J3MgYSBnbG9iYWwgZnVuY3Rpb24uIEtub3dpbmcgdGhhdCBpbW1lZGlhdGVseSBmbGFncyBpdCBhcyBzb21ldGhpbmcgcG90ZW50aWFsbHkgY2VudHJhbCwgbGlrZWx5IGNhbGxlZCBmcm9tIGEgbnVtYmVyIG9mIHBsYWNlcyB3aXRoaW4gdGhlIEFGUyBmaWxlc3lzdGVtIGltcGxlbWVudGF0aW9uLiBJdCBtZWFucyBJIG5lZWQgdG8gYmUgY2FyZWZ1bCB3aXRoIGFueSBhc3N1bXB0aW9ucyBhYm91dCBob3cgaXQgYmVoYXZlcywgYmVjYXVzZSBpdHMgY29udGV4dCBjb3VsZCB2YXJ5IGdyZWF0bHkuXG5cbk5vdywgd2hlcmUgdG8gc3RhcnQgbG9va2luZyB0byB1bmRlcnN0YW5kIGl0cyByb2xlLCBlc3BlY2lhbGx5IGluIHJlbGF0aW9uIHRvIHRoZSBpbm9kZSBsaWZlY3ljbGU/IExldCBtZSBxdWlja2x5IGNyb3NzLXJlZmVyZW5jZSB0aGF0IHdpdGggYGFmc19nZXRfdHJlZWAuIFRoYXQgZnVuY3Rpb24ncyBsaWtlbHkgcmVzcG9uc2libGUgZm9yIHJldHJpZXZpbmcgdGhlIHN1cGVyIGJsb2NrIGFzc29jaWF0ZWQgd2l0aCB0aGUgQUZTIGZpbGVzeXN0ZW0gaW5zdGFuY2Ugb24gYSBtb3VudCBhbmQgYnVpbGRpbmcgdGhlIGZpbGVzeXN0ZW0gc3RydWN0dXJlIG9uIHRoZSBkaXNrLiBUaGlzIG1heSBvciBtYXkgbm90IGJlIHRoZSBmdW5jdGlvbiB0byB1bmRlcnN0YW5kIHRoZSBldmljdGlvbiBwcm9jZXNzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NjUyOSwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIyVDA5OjMyOjUzLjkwNzE2NDA1MloiLCJTZXEiOjk4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjcxMDk0OTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYWZzX2dldF90cmVlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL2Fmcy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvYWZzL3N1cGVyLmM9NTMwPXN0YXRpYyB2b2lkIGFmc19raWxsX3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXFxuLS1cXG5mcy9hZnMvc3VwZXIuYy01NDctICovXFxuZnMvYWZzL3N1cGVyLmM6NTQ4OnN0YXRpYyBpbnQgYWZzX2dldF90cmVlKHN0cnVjdCBmc19jb250ZXh0ICpmYylcXG5mcy9hZnMvc3VwZXIuYy01NDkte1xcbi0tXFxuZnMvYWZzL3N1cGVyLmMtNTkwLVxcdGlmICghY3R4LVxcdTAwM2VkeW5fcm9vdClcXG5mcy9hZnMvc3VwZXIuYzo1OTE6XFx0XFx0dHJhY2VfYWZzX2dldF90cmVlKGFzLVxcdTAwM2VjZWxsLCBhcy1cXHUwMDNldm9sdW1lKTtcXG5mcy9hZnMvc3VwZXIuYy01OTItXFx0X2xlYXZlKFxcXCIgPSAwIFslcF1cXFwiLCBzYik7XFxuLS1cXG5mcy9hZnMvc3VwZXIuYz02MTM9c3RhdGljIGNvbnN0IHN0cnVjdCBmc19jb250ZXh0X29wZXJhdGlvbnMgYWZzX2NvbnRleHRfb3BzID0ge1xcbi0tXFxuZnMvYWZzL3N1cGVyLmMtNjE1LVxcdC5wYXJzZV9wYXJhbVxcdD0gYWZzX3BhcnNlX3BhcmFtLFxcbmZzL2Fmcy9zdXBlci5jOjYxNjpcXHQuZ2V0X3RyZWVcXHQ9IGFmc19nZXRfdHJlZSxcXG5mcy9hZnMvc3VwZXIuYy02MTctfTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjJUMDk6MzI6NTMuOTc0MjgwMTJaIiwiU2VxIjo5OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTQ5MDU5NTU1MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKk5hdmlnYXRpbmcgdGhlIEFGUyBDb2RlYmFzZSoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgQUZTIGNvZGUsIGFuZCB0aGUgYGFmc19nZXRfdHJlZWAgZnVuY3Rpb24uLi4gaG1tLCBzZWVtcyB0byBiZSBkZWNsYXJlZCBhcyBzdGF0aWMuIFRoYXQgaW1tZWRpYXRlbHkgdHJpZ2dlcnMgYSBtZW50YWwgbm90ZSDigJMgc3RhdGljIGZ1bmN0aW9ucyBoYXZlIGxpbWl0ZWQgc2NvcGUsIG1lYW5pbmcgdGhleSdyZSBub3QgdmlzaWJsZSBvdXRzaWRlIG9mIHRoZSBmaWxlIHRoZXkncmUgZGVmaW5lZCBpbi4gVGhhdCdzIGEga2V5IHBpZWNlIG9mIGluZm9ybWF0aW9uIGZvciB1bmRlcnN0YW5kaW5nIGhvdyB0aGUgc3lzdGVtIGlzIHB1dCB0b2dldGhlci4gTm93LCBzaW5jZSBpdCBpcyBzdGF0aWMsIGl0IHN0YW5kcyB0byByZWFzb24gdGhhdCBpdCBtYXkgYmUgcGFydCBvZiBhIGJpZ2dlciBpbml0aWFsaXphdGlvbiBwcm9jZXNzLiBMZXQncyBzZWUuLi4gSSdsbCBjaGVjayBgYWZzX2lfaW5pdF9vbmNlYCBuZXh0LiBUaGF0IGluaXRpYWxpemF0aW9uIGNvbnRleHQgc2VlbXMgcHJldHR5IGltcG9ydGFudCBpbiB0aGlzIGNhc2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ3MDQxLCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjJUMDk6MzI6NTkuNDY0ODc5MjQyWiIsIlNlcSI6MTAwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODcxNDg0OTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYWZzX2lfaW5pdF9vbmNlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL2Fmcy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvYWZzL3N1cGVyLmMtMzEtXFxuZnMvYWZzL3N1cGVyLmM6MzI6c3RhdGljIHZvaWQgYWZzX2lfaW5pdF9vbmNlKHZvaWQgKmZvbyk7XFxuZnMvYWZzL3N1cGVyLmMtMzMtc3RhdGljIHZvaWQgYWZzX2tpbGxfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYik7XFxuLS1cXG5mcy9hZnMvc3VwZXIuYz05Nj1pbnQgX19pbml0IGFmc19mc19pbml0KHZvaWQpXFxuLS1cXG5mcy9hZnMvc3VwZXIuYy0xMDktXFx0XFx0XFx0XFx0XFx0ICAgICBTTEFCX0hXQ0FDSEVfQUxJR058U0xBQl9BQ0NPVU5ULFxcbmZzL2Fmcy9zdXBlci5jOjExMDpcXHRcXHRcXHRcXHRcXHQgICAgIGFmc19pX2luaXRfb25jZSk7XFxuZnMvYWZzL3N1cGVyLmMtMTExLVxcdGlmICghYWZzX2lub2RlX2NhY2hlcCkge1xcbi0tXFxuZnMvYWZzL3N1cGVyLmM9NjIyPXN0YXRpYyBpbnQgYWZzX2luaXRfZnNfY29udGV4dChzdHJ1Y3QgZnNfY29udGV4dCAqZmMpXFxuLS1cXG5mcy9hZnMvc3VwZXIuYy02NDktICovXFxuZnMvYWZzL3N1cGVyLmM6NjUwOnN0YXRpYyB2b2lkIGFmc19pX2luaXRfb25jZSh2b2lkICpfdm5vZGUpXFxuZnMvYWZzL3N1cGVyLmMtNjUxLXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjJUMDk6MzI6NTkuNTUyMDMzOTZaIiwiU2VxIjoxMDEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE1NzkzNTY3NTEzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IGltbWVkaWF0ZSB0aG91Z2h0IHByb2Nlc3M6XG5cbioqSW5pdGlhbCBBc3Nlc3NtZW50OiBVbmRlcnN0YW5kaW5nIGBhZnNfaV9pbml0X29uY2VgKipcblxuT2theSwgc28gYGFmc19pX2luaXRfb25jZWAgaXMgc3RhdGljLiBUaGF0IGltbWVkaWF0ZWx5IHRlbGxzIG1lIGl0J3MgbGlrZWx5IGEgbG9jYWwgaW5pdGlhbGl6YXRpb24gZnVuY3Rpb24sIHNjb3BlZCB3aXRoaW4gdGhlIEFGUyBpbm9kZSBtYW5hZ2VtZW50IGNvZGUuIEl0J3MgcHJvYmFibHkgcmVzcG9uc2libGUgZm9yIHNldHRpbmcgdXAgc29tZSBpbnRlcm5hbCBzdHJ1Y3R1cmVzIG9yIGRlZmF1bHRzICpvbmNlKiBkdXJpbmcgbW9kdWxlIGxvYWQgb3Igc3lzdGVtIGluaXRpYWxpemF0aW9uLCByZWxhdGVkIHRvIHRoZSBBRlMgZmlsZSBzeXN0ZW0uIEEgc3RhdGljIGZ1bmN0aW9uIHN1Z2dlc3RzIGl0J3Mgbm90IG1lYW50IHRvIGJlIGRpcmVjdGx5IGNhbGxlZCBmcm9tIG91dHNpZGUgdGhlIHNwZWNpZmljIHNvdXJjZSBmaWxlIG9yIGNvbXBpbGF0aW9uIHVuaXQgd2hlcmUgaXQncyBkZWZpbmVkLiBOb3csIGxldCdzIHNlZSBob3cgaXQncyB1c2VkIHdpdGhpbiB0aGUgY29udGV4dCBvZiBpbm9kZSBhbGxvY2F0aW9uLiBJJ2xsIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBgc3RhdGljYCBmdW5jdGlvbiBpcyB1dGlsaXplZCB0byBjb25maXJtIG15IGh5cG90aGVzaXMuXG5cbk5vdywgbGV0J3Mgc2hpZnQgZm9jdXMgdG8gdW5kZXJzdGFuZCBob3cgYWxsIG9mIHRoaXMgaW50ZXJwbGF5cyB3aXRoIGlub2RlIG1hbmFnZW1lbnQuIEknbGwgbmVlZCB0byBleGFtaW5lIGBhZnNfYWxsb2NfaW5vZGVgIG5leHQuIFRoaXMgd2lsbCBsaWtlbHkgc2hlZCBsaWdodCBvbiB0aGUgcHVycG9zZSBvZiB0aGF0IHN0YXRpYyBmdW5jdGlvbi4gSSdsbCBkaXZlIGludG8gdGhlIGRldGFpbHMgb2YgaW5vZGUgYWxsb2NhdGlvbiB0byB1bmRlcnN0YW5kIHdoYXQgdGhlIGNvZGUgaXMgZG9pbmcgd2l0aGluIHRoaXMgc2NvcGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ3NTIyLCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjJUMDk6MzM6MTUuMzQ1NjA1NjMzWiIsIlNlcSI6MTAyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mzg5NTQ4MTAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImFmc19hbGxvY19pbm9kZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9hZnMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2Fmcy9pbnRlcm5hbC5oPTY3MD1lbnVtIGFmc19sb2NrX3N0YXRlIHtcXG4tLVxcbmZzL2Fmcy9pbnRlcm5hbC5oLTY4My0gKlxcbmZzL2Fmcy9pbnRlcm5hbC5oOjY4NDogKiBOb3RlIHRoYXQgYWZzX2FsbG9jX2lub2RlKCkgKm11c3QqIHJlc2V0IGFueXRoaW5nIHRoYXQgY291bGQgaW5jb3JyZWN0bHlcXG5mcy9hZnMvaW50ZXJuYWwuaC02ODUtICogbGVhayBmcm9tIG9uZSBpbm9kZSB0byBhbm90aGVyLlxcbi0tXFxuZnMvYWZzL3N1cGVyLmM9MzM9c3RhdGljIHZvaWQgYWZzX2tpbGxfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYik7XFxuZnMvYWZzL3N1cGVyLmM6MzQ6c3RhdGljIHN0cnVjdCBpbm9kZSAqYWZzX2FsbG9jX2lub2RlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpO1xcbmZzL2Fmcy9zdXBlci5jLTM1LXN0YXRpYyB2b2lkIGFmc19kZXN0cm95X2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpO1xcbi0tXFxuZnMvYWZzL3N1cGVyLmM9NTU9c3RhdGljIGNvbnN0IHN0cnVjdCBzdXBlcl9vcGVyYXRpb25zIGFmc19zdXBlcl9vcHMgPSB7XFxuZnMvYWZzL3N1cGVyLmMtNTYtXFx0LnN0YXRmc1xcdFxcdD0gYWZzX3N0YXRmcyxcXG5mcy9hZnMvc3VwZXIuYzo1NzpcXHQuYWxsb2NfaW5vZGVcXHQ9IGFmc19hbGxvY19pbm9kZSxcXG5mcy9hZnMvc3VwZXIuYy01OC1cXHQud3JpdGVfaW5vZGVcXHQ9IG5ldGZzX3VucGluX3dyaXRlYmFjayxcXG4tLVxcbmZzL2Fmcy9zdXBlci5jPTYyMj1zdGF0aWMgaW50IGFmc19pbml0X2ZzX2NvbnRleHQoc3RydWN0IGZzX2NvbnRleHQgKmZjKVxcbi0tXFxuZnMvYWZzL3N1cGVyLmMtNjQ2LSAqIEluaXRpYWxpc2UgYW4gaW5vZGUgY2FjaGUgc2xhYiBlbGVtZW50IHByaW9yIHRvIGFueSB1c2UuICBOb3RlIHRoYXRcXG5mcy9hZnMvc3VwZXIuYzo2NDc6ICogYWZzX2FsbG9jX2lub2RlKCkgKm11c3QqIHJlc2V0IGFueXRoaW5nIHRoYXQgY291bGQgaW5jb3JyZWN0bHkgbGVhayBmcm9tIG9uZVxcbmZzL2Fmcy9zdXBlci5jLTY0OC0gKiBpbm9kZSB0byBhbm90aGVyLlxcbi0tXFxuZnMvYWZzL3N1cGVyLmM9NjUwPXN0YXRpYyB2b2lkIGFmc19pX2luaXRfb25jZSh2b2lkICpfdm5vZGUpXFxuLS1cXG5mcy9hZnMvc3VwZXIuYy02NjktICovXFxuZnMvYWZzL3N1cGVyLmM6NjcwOnN0YXRpYyBzdHJ1Y3QgaW5vZGUgKmFmc19hbGxvY19pbm9kZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxcbmZzL2Fmcy9zdXBlci5jLTY3MS17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIyVDA5OjMzOjE1LjczNTE2MjkyNFoiLCJTZXEiOjEwMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjgwNzgzMDcwOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoaXMgY29kZTpcblxuKipBbmFseXppbmcgdGhlIEFGUyBJbm9kZSBBbGxvY2F0aW9uIGFuZCBBZGRyZXNzIEV4dHJhY3Rpb24qKlxuXG5Pa2F5LCBzbyBgYWZzX2FsbG9jX2lub2RlYCBpcyBkZWNsYXJlZCBhcyBzdGF0aWMuIFRoaXMgaW1tZWRpYXRlbHkgdGVsbHMgbWUgdGhhdCBpdCdzIG9ubHkgdmlzaWJsZSB3aXRoaW4gdGhlIGN1cnJlbnQgY29tcGlsYXRpb24gdW5pdCwgbGlrZWx5IHdpdGhpbiB0aGUgQUZTIGlub2RlIG1hbmFnZW1lbnQgY29kZSBpdHNlbGYuIFRoaXMgaXMgaW1wb3J0YW50IGZvciBzY29waW5nIGFuZCBwcmV2ZW50aW5nIGFjY2lkZW50YWwgZXh0ZXJuYWwgY2FsbHMgdGhhdCBtaWdodCBieXBhc3MgaW50ZW5kZWQgaW5pdGlhbGl6YXRpb24gb3IgY29udHJvbCBmbG93IHdpdGhpbiB0aGF0IHBhcnQgb2YgdGhlIGNvZGUgYmFzZS4gS25vd2luZyBpdCdzIHN0YXRpYyBoZWxwcyB3aXRoIHVuZGVyc3RhbmRpbmcgZGVwZW5kZW5jaWVzIGFuZCBwb3RlbnRpYWwgc2lkZSBlZmZlY3RzIHdpdGhpbiB0aGUgbW9kdWxlLiBHb29kIGVuY2Fwc3VsYXRpb24sIGluIHRoZW9yeS5cblxuTm93LCBJIG5lZWQgdG8gY2hlY2sgaG93IGl0J3MgYmVpbmcgdXNlZCBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIG90aGVyIHBhcnRzIG9mIHRoZSBBRlMgZmlsZXN5c3RlbSBpbXBsZW1lbnRhdGlvbi4gVGhlIG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIGV4YW1pbmUgYGFmc19leHRyYWN0X3ZsX2FkZHJzYC4gVGhpcyBmdW5jdGlvbiBpcyBsaWtlbHkgaW52b2x2ZWQgaW4gZXh0cmFjdGluZyB2aXJ0dWFsIGFkZHJlc3MgaW5mb3JtYXRpb24sIHBlcmhhcHMgZnJvbSBhbiBBRlMgdm9sdW1lIGxpc3Qgb3Igc29tZSBvdGhlciBzdHJ1Y3R1cmUgcmVsYXRlZCB0byB0aGUgZmlsZXN5c3RlbSdzIGFkZHJlc3Npbmcgc2NoZW1lLiBJJ20gYXNzdW1pbmcgdGhhdCB0aGlzIGFkZHJlc3MgaW5mb3JtYXRpb24gaXMgY3J1Y2lhbCBmb3Igc29tZSBwYXJ0IG9mIGlub2RlIGluaXRpYWxpemF0aW9uIG9yIG9wZXJhdGlvbiwgYnV0IEknbGwgbmVlZCB0byBkaWcgaW50byB0aGUgZnVuY3Rpb24ncyBzcGVjaWZpYyBpbXBsZW1lbnRhdGlvbiB0byBjb25maXJtIG15IGFzc3VtcHRpb25zIGFuZCBob3cgdGhvc2UgcmVsYXRlIHRvIGlub2RlIGFsbG9jYXRpb24uIEV4YW1pbmluZyB0aGUgZnVuY3Rpb25zIHdoaWNoIGNhbGwgaXQsIG9yIGl0IGNhbGxzLCBpcyB3aGF0IEknbGwgbmVlZCB0byBkbyBuZXh0LCB3aGljaCB3aWxsIHByb3ZpZGUgY29udGV4dCBmb3IgdW5kZXJzdGFuZGluZyBpdHMgaW1wYWN0IG9uIHRoZSBpbm9kZS1yZWxhdGVkIGxvZ2ljLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0ODMwMiwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIyVDA5OjMzOjIyLjU0Mjk5NzIxM1oiLCJTZXEiOjEwNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwMTA2MDUzNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhZnNfZXh0cmFjdF92bF9hZGRyc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9hZnMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2Fmcy92bF9saXN0LmM9Nzc9c3RhdGljIHUxNiBhZnNfZXh0cmFjdF9sZTE2KGNvbnN0IHU4ICoqX2IpXFxuLS1cXG5mcy9hZnMvdmxfbGlzdC5jLTg4LSAqL1xcbmZzL2Fmcy92bF9saXN0LmM6ODk6c3RhdGljIHN0cnVjdCBhZnNfYWRkcl9saXN0ICphZnNfZXh0cmFjdF92bF9hZGRycyhzdHJ1Y3QgYWZzX25ldCAqbmV0LFxcbmZzL2Fmcy92bF9saXN0LmMtOTAtXFx0XFx0XFx0XFx0XFx0XFx0ICBjb25zdCB1OCAqKl9iLCBjb25zdCB1OCAqZW5kLFxcbi0tXFxuZnMvYWZzL3ZsX2xpc3QuYz0xNjA9c3RydWN0IGFmc192bHNlcnZlcl9saXN0ICphZnNfZXh0cmFjdF92bHNlcnZlcl9saXN0KHN0cnVjdCBhZnNfY2VsbCAqY2VsbCxcXG4tLVxcbmZzL2Fmcy92bF9saXN0LmMtMjYzLVxcdFxcdCAqL1xcbmZzL2Fmcy92bF9saXN0LmM6MjY0OlxcdFxcdGFkZHJzID0gYWZzX2V4dHJhY3RfdmxfYWRkcnMoY2VsbC1cXHUwMDNlbmV0LCBcXHUwMDI2YiwgZW5kLCBicy5ucl9hZGRycywgYnMucG9ydCk7XFxuZnMvYWZzL3ZsX2xpc3QuYy0yNjUtXFx0XFx0aWYgKElTX0VSUihhZGRycykpIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjJUMDk6MzM6MjIuNjQ0MDYyNTdaIiwiU2VxIjoxMDUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU0NTQ0NjUwNzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgeW91IHJlcXVlc3RlZDpcblxuKipTdGF0aWMgRnVuY3Rpb24gQ2hlY2sgYW5kIFNlcnZlciBMaXN0IFZlcmlmaWNhdGlvbioqXG5cbk9rYXksIHNvIEknbSB0aGlua2luZyBhYm91dCB0aGlzIGNvZGUsIGFuZCB0aGUgYGFmc19leHRyYWN0X3ZsX2FkZHJzYCBmdW5jdGlvbi4uLiBpdCdzIHN0YXRpYywgd2hpY2ggaXMgYSBrZXkgY2hhcmFjdGVyaXN0aWMgdG8gY29uc2lkZXIgaW4gdGhpcyBjb250ZXh0LiBJdCBzdWdnZXN0cyBwb3RlbnRpYWwgc2NvcGluZyBsaW1pdGF0aW9ucyBhbmQgcG9zc2libGUgaW1wbGljYXRpb25zIGZvciBleHRlcm5hbCBhY2Nlc3Mgb3IgbW9kdWxhcml0eS4gR2l2ZW4gaXRzIHN0YXRpYyBuYXR1cmUsIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyByZWxhdGlvbnNoaXAgdG8gdGhlIGJyb2FkZXIgc3lzdGVtLCBhbmQgaG93IHRoYXQgaW1wYWN0cyBteSBhbmFseXNpcy5cblxuTm93LCB0byB1bmRlcnN0YW5kIGl0cyBwdXJwb3NlIHdpdGhpbiB0aGUgbGFyZ2VyIGFyY2hpdGVjdHVyZSBJIHNob3VsZCBub3cgY2hlY2sgYGFmc19leHRyYWN0X3Zsc2VydmVyX2xpc3RgLiBUaGF0IGNhbGwgbGlrZWx5IGdpdmVzIGluc2lnaHQgaW50byB0aGUgbGlzdCBvZiBzZXJ2ZXJzIHRoYXQgYXJlIGluIHBsYXksIHdoaWNoIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBgYWZzX2V4dHJhY3RfdmxfYWRkcnNgIHJlbGF0ZXMgdG8uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ4OTA0LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjJUMDk6MzM6MjguMDk4NTMyNDIzWiIsIlNlcSI6MTA2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTY3NzIxODcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYWZzX2V4dHJhY3RfdmxzZXJ2ZXJfbGlzdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9hZnMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2Fmcy9hZGRyX2xpc3QuYz0yNTA9c3RydWN0IGFmc192bHNlcnZlcl9saXN0ICphZnNfZG5zX3F1ZXJ5KHN0cnVjdCBhZnNfY2VsbCAqY2VsbCwgdGltZTY0X3QgKl9leHBpcnkpXFxuLS1cXG5mcy9hZnMvYWRkcl9saXN0LmMtMjY4LVxcdGlmIChyZXQgXFx1MDAzZSAxIFxcdTAwMjZcXHUwMDI2IHJlc3VsdFswXSA9PSAwKVxcbmZzL2Fmcy9hZGRyX2xpc3QuYzoyNjk6XFx0XFx0dmxsaXN0ID0gYWZzX2V4dHJhY3RfdmxzZXJ2ZXJfbGlzdChjZWxsLCByZXN1bHQsIHJldCk7XFxuZnMvYWZzL2FkZHJfbGlzdC5jLTI3MC1cXHRlbHNlXFxuLS1cXG5mcy9hZnMvaW50ZXJuYWwuaD0xNjgyPWV4dGVybiB2b2lkIGFmc19wdXRfdmxzZXJ2ZXJsaXN0KHN0cnVjdCBhZnNfbmV0ICosIHN0cnVjdCBhZnNfdmxzZXJ2ZXJfbGlzdCAqKTtcXG5mcy9hZnMvaW50ZXJuYWwuaDoxNjgzOmV4dGVybiBzdHJ1Y3QgYWZzX3Zsc2VydmVyX2xpc3QgKmFmc19leHRyYWN0X3Zsc2VydmVyX2xpc3Qoc3RydWN0IGFmc19jZWxsICosXFxuZnMvYWZzL2ludGVybmFsLmgtMTY4NC1cXHRcXHRcXHRcXHRcXHRcXHRcXHQgICBjb25zdCB2b2lkICosIHNpemVfdCk7XFxuLS1cXG5mcy9hZnMvdmxfbGlzdC5jPTg5PXN0YXRpYyBzdHJ1Y3QgYWZzX2FkZHJfbGlzdCAqYWZzX2V4dHJhY3RfdmxfYWRkcnMoc3RydWN0IGFmc19uZXQgKm5ldCxcXG4tLVxcbmZzL2Fmcy92bF9saXN0LmMtMTU5LSAqL1xcbmZzL2Fmcy92bF9saXN0LmM6MTYwOnN0cnVjdCBhZnNfdmxzZXJ2ZXJfbGlzdCAqYWZzX2V4dHJhY3RfdmxzZXJ2ZXJfbGlzdChzdHJ1Y3QgYWZzX2NlbGwgKmNlbGwsXFxuZnMvYWZzL3ZsX2xpc3QuYy0xNjEtXFx0XFx0XFx0XFx0XFx0XFx0ICAgIGNvbnN0IHZvaWQgKmJ1ZmZlcixcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjJUMDk6MzM6MjguMTk1MzEwOTkxWiIsIlNlcSI6MTA3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMDg5MTA4ODM3NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGFuYWx5c2lzIG9mIHRoZSBzaXR1YXRpb246XG5cbioqUmVmbGVjdGluZyBvbiBHbG9iYWwgU2NvcGUgYW5kIEZ1bmN0aW9uIEludGVyYWN0aW9uKipcblxuT2theSwgc28gYGFmc19leHRyYWN0X3Zsc2VydmVyX2xpc3RgIGlzIGRlY2xhcmVkIGdsb2JhbGx5LiBUaGF0J3MgYSBrZXkgb2JzZXJ2YXRpb24uIE5vdyBJIG5lZWQgdG8gc2VlIGhvdyBpdCdzIHVzZWQgYW5kIHdoYXQgY29udGV4dCBpdCdzIG9wZXJhdGluZyB3aXRoaW4uIFRvIHVuZGVyc3RhbmQgaXRzIGltcGFjdCwgSSBuZWVkIHRvIGxvb2sgYXQgYSByZWxhdGVkIGZ1bmN0aW9uLiBMZXQncyBkaWcgaW50byBgYWZzX2luc2VydF92b2x1bWVfaW50b19jZWxsYCBhbmQgc2VlIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgbGlzdC4gUGVyaGFwcyBgYWZzX2V4dHJhY3RfdmxzZXJ2ZXJfbGlzdGAgcHJlcGFyZXMgZGF0YSB0aGF0IGBhZnNfaW5zZXJ0X3ZvbHVtZV9pbnRvX2NlbGxgIHVzZXM/IE9yIG1heWJlIGl0J3MgdGhlIG90aGVyIHdheSBhcm91bmQ/IFVuZGVyc3RhbmRpbmcgdGhlaXIgcmVsYXRpb25zaGlwIHdpbGwgZ2l2ZSBtZSBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIHRoZSBvdmVyYWxsIHN5c3RlbSdzIGFyY2hpdGVjdHVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NDk0OTcsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yMlQwOTozMzozOS4wODY0MDQwMzdaIiwiU2VxIjoxMDgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNDgyNjM1MTQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYWZzX2luc2VydF92b2x1bWVfaW50b19jZWxsXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL2Fmcy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvYWZzL3ZvbHVtZS5jPTE1PXN0YXRpYyB2b2lkIGFmc19kZXN0cm95X3ZvbHVtZShzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspO1xcbi0tXFxuZnMvYWZzL3ZvbHVtZS5jLTIwLSAqL1xcbmZzL2Fmcy92b2x1bWUuYzoyMTpzdGF0aWMgc3RydWN0IGFmc192b2x1bWUgKmFmc19pbnNlcnRfdm9sdW1lX2ludG9fY2VsbChzdHJ1Y3QgYWZzX2NlbGwgKmNlbGwsXFxuZnMvYWZzL3ZvbHVtZS5jLTIyLVxcdFxcdFxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCBhZnNfdm9sdW1lICp2b2x1bWUpXFxuLS1cXG5mcy9hZnMvdm9sdW1lLmM9MTMzPXN0YXRpYyBzdHJ1Y3QgYWZzX3ZvbHVtZSAqYWZzX2xvb2t1cF92b2x1bWUoc3RydWN0IGFmc19mc19jb250ZXh0ICpwYXJhbXMsXFxuLS1cXG5mcy9hZnMvdm9sdW1lLmMtMTQyLVxcbmZzL2Fmcy92b2x1bWUuYzoxNDM6XFx0dm9sdW1lID0gYWZzX2luc2VydF92b2x1bWVfaW50b19jZWxsKHBhcmFtcy1cXHUwMDNlY2VsbCwgY2FuZGlkYXRlKTtcXG5mcy9hZnMvdm9sdW1lLmMtMTQ0LVxcdGlmICh2b2x1bWUgPT0gY2FuZGlkYXRlKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yMlQwOTozMzozOS4zMzQ2NzY3NDFaIiwiU2VxIjoxMDksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQwNjM5NzI0NzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipFeGFtaW5pbmcgdGhlIEFGUyBWb2x1bWUgSW5zZXJ0aW9uIFByb2Nlc3MqKlxuXG5Pa2F5LCBzbyBgYWZzX2luc2VydF92b2x1bWVfaW50b19jZWxsYCBpcyBkZWNsYXJlZCBhcyBzdGF0aWMuIFRoaXMgbWVhbnMgaXQncyBsaWtlbHkgc2NvcGVkIHRvIGEgc2luZ2xlIGNvbXBpbGF0aW9uIHVuaXQsIGFuZCBub3QgaW50ZW5kZWQgZm9yIGV4dGVybmFsIHVzZSBiZXlvbmQgdGhhdCB1bml0LiBUaGlzIHN1Z2dlc3RzIGEgbW9yZSBpbnRlcm5hbCwgcG90ZW50aWFsbHkgaGVscGVyIGZ1bmN0aW9uIHJvbGUsIHJhdGhlciB0aGFuIHNvbWV0aGluZyBkZXNpZ25lZCB0byBiZSBkaXJlY3RseSBjYWxsZWQgZnJvbSBlbHNld2hlcmUgaW4gdGhlIEFGUyBzeXN0ZW0uXG5cbk5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHJlbGF0aW9uc2hpcCB0byB0aGUgYnJvYWRlciB2b2x1bWUgbWFuYWdlbWVudCBmcmFtZXdvcmsuIExldCdzIGRpZyBpbnRvIGBhZnNfbG9va3VwX3ZvbHVtZWAuIFRoaXMgZnVuY3Rpb24gaXMgcHJvYmFibHkgdGhlIGtleSB0byBsb2NhdGluZyBleGlzdGluZyB2b2x1bWVzLiBJIHdhbnQgdG8gc2VlIGhvdyB0aGVzZSB0d28sIHRoZSBpbnNlcnRpb24gYW5kIGxvb2t1cCBmdW5jdGlvbnMsIGludGVyYWN0LiBJIGJldCB0aGUgbG9va3VwIGlzIGludm9sdmVkIGluIG1ha2luZyBzdXJlIHRoZXJlIGFyZSBubyBjb25mbGljdHMgb3Igb3ZlcndyaXRlcyBvZiBleGlzdGluZyB2b2x1bWUgZGF0YSwgb3IgbWF5YmUgaXQgaXMgcGFydCBvZiB0aGUgdmFsaWRhdGlvbiBiZWZvcmUgaW5zZXJ0aW9uLiBVbmRlcnN0YW5kaW5nIGBhZnNfbG9va3VwX3ZvbHVtZWAgd2lsbCBoZWxwIG1lIGRldGVybWluZSB0aGUgbGFyZ2VyIGNvbnRleHQgb2YgYGFmc19pbnNlcnRfdm9sdW1lX2ludG9fY2VsbGAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ5OTM3LCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjJUMDk6MzM6NDMuMzk4NjUyMTE4WiIsIlNlcSI6MTEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTg0NDQ4Nzc4MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhZnNfbG9va3VwX3ZvbHVtZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9hZnMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2Fmcy9jYWxsYmFjay5jPTEwMT12b2lkIGFmc19icmVha19jYWxsYmFjayhzdHJ1Y3QgYWZzX3Zub2RlICp2bm9kZSwgZW51bSBhZnNfY2JfYnJlYWtfcmVhc29uIHJlYXNvbilcXG4tLVxcbmZzL2Fmcy9jYWxsYmFjay5jLTExMC0gKi9cXG5mcy9hZnMvY2FsbGJhY2suYzoxMTE6c3RhdGljIHN0cnVjdCBhZnNfdm9sdW1lICphZnNfbG9va3VwX3ZvbHVtZV9yY3Uoc3RydWN0IGFmc19jZWxsICpjZWxsLFxcbmZzL2Fmcy9jYWxsYmFjay5jLTExMi1cXHRcXHRcXHRcXHRcXHRcXHRhZnNfdm9saWRfdCB2aWQpXFxuLS1cXG5mcy9hZnMvY2FsbGJhY2suYz0yMDY9c3RhdGljIHZvaWQgYWZzX2JyZWFrX3NvbWVfY2FsbGJhY2tzKHN0cnVjdCBhZnNfc2VydmVyICpzZXJ2ZXIsXFxuLS1cXG5mcy9hZnMvY2FsbGJhY2suYy0yMTUtXFx0cmN1X3JlYWRfbG9jaygpO1xcbmZzL2Fmcy9jYWxsYmFjay5jOjIxNjpcXHR2b2x1bWUgPSBhZnNfbG9va3VwX3ZvbHVtZV9yY3Uoc2VydmVyLVxcdTAwM2VjZWxsLCB2aWQpO1xcbmZzL2Fmcy9jYWxsYmFjay5jLTIxNy1cXHRpZiAoIXZvbHVtZSkge1xcbi0tXFxuZnMvYWZzL3ZvbHVtZS5jPTc2PXN0YXRpYyBzdHJ1Y3QgYWZzX3ZvbHVtZSAqYWZzX2FsbG9jX3ZvbHVtZShzdHJ1Y3QgYWZzX2ZzX2NvbnRleHQgKnBhcmFtcyxcXG4tLVxcbmZzL2Fmcy92b2x1bWUuYy0xMzItICovXFxuZnMvYWZzL3ZvbHVtZS5jOjEzMzpzdGF0aWMgc3RydWN0IGFmc192b2x1bWUgKmFmc19sb29rdXBfdm9sdW1lKHN0cnVjdCBhZnNfZnNfY29udGV4dCAqcGFyYW1zLFxcbmZzL2Fmcy92b2x1bWUuYy0xMzQtXFx0XFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBhZnNfdmxkYl9lbnRyeSAqdmxkYilcXG4tLVxcbmZzL2Fmcy92b2x1bWUuYz0xOTg9c3RydWN0IGFmc192b2x1bWUgKmFmc19jcmVhdGVfdm9sdW1lKHN0cnVjdCBhZnNfZnNfY29udGV4dCAqcGFyYW1zKVxcbi0tXFxuZnMvYWZzL3ZvbHVtZS5jLTIyNi1cXG5mcy9hZnMvdm9sdW1lLmM6MjI3OlxcdHZvbHVtZSA9IGFmc19sb29rdXBfdm9sdW1lKHBhcmFtcywgdmxkYik7XFxuZnMvYWZzL3ZvbHVtZS5jLTIyOC1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjJUMDk6MzM6NDUuMjQzMTQ3NTUyWiIsIlNlcSI6MTExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5ODUzNjczMDUzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byBBRlMgVm9sdW1lIE1hbmFnZW1lbnQqKlxuXG5Pa2F5LCBzbyBgYWZzX2xvb2t1cF92b2x1bWVgIGlzIGZsYWdnZWQgYXMgYSBzdGF0aWMgZnVuY3Rpb24uIFRoYXQgaW1tZWRpYXRlbHkgbWFrZXMgbWUgdGhpbmsgYWJvdXQgaG93IGl0J3MgdXNlZCB3aXRoaW4gdGhlIEFGUyBrZXJuZWwuIElzIGl0IHVzZWQgb25seSBpbnRlcm5hbGx5IHdpdGhpbiB0aGUga2VybmVsIG1vZHVsZSwgb3IgaXMgaXQgZXhwb3NlZCBpbiBzb21lIHdheSB2aWEgYSBsaW1pdGVkIEFQST8gU3RhdGljIGZ1bmN0aW9ucyBhcmUgdXN1YWxseSBhIHNpZ25hbCBvZiBpbnRlcm5hbCB1c2Ugb25seSwgcHJldmVudGluZyBwb3RlbnRpYWwgZXh0ZXJuYWwgbW9kaWZpY2F0aW9ucyBvciBtaXN1c2UuIFdlIG5lZWQgdG8gYmUgd2FyeSBvZiB3aGVyZSBpdCBzaXRzIHJlbGF0aXZlIHRvIG90aGVyIGNvbXBvbmVudHMuXG5cbk5vdywgdGhhdCdzIGludGVyZXN0aW5nLiBHaXZlbiB0aGF0IG9ic2VydmF0aW9uLCBsZXQncyB0dXJuIG91ciBhdHRlbnRpb24gdG8gYGFmc19jcmVhdGVfdm9sdW1lYC4gSSdtIGN1cmlvdXMgdG8gc2VlIGhvdyB0aGUgc3lzdGVtIGdvZXMgYWJvdXQgc3Bpbm5pbmcgdXAgbmV3IHZvbHVtZXMsIGVzcGVjaWFsbHkgaW4gcmVsYXRpb25zaGlwIHRvIGxvb2t1cC4gV2hhdCBpbnRlcmFjdGlvbnMgaGFwcGVuIGJldHdlZW4gdGhlIHR3bz8gUGVyaGFwcyBgYWZzX2NyZWF0ZV92b2x1bWVgIHJlbGllcyBvbiBgYWZzX2xvb2t1cF92b2x1bWVgIGZvciBpbml0aWFsaXphdGlvbiBvciBpbnRlcm5hbCBib29ra2VlcGluZyB3aGVuIGVzdGFibGlzaGluZyBuZXcgdm9sdW1lIHJlY29yZHMuIE9yIG1heWJlIGBhZnNfY3JlYXRlX3ZvbHVtZWAgc2lkZXN0ZXBzIGxvb2t1cCBlbnRpcmVseSwgd2hpY2ggd291bGQgaW1wbHkgYSBkaWZmZXJlbnQgdm9sdW1lIHJlZ2lzdHJhdGlvbiBtZWNoYW5pc20uIEl0IHdpbGwgYmUgdXNlZnVsIHRvIGludmVzdGlnYXRlIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiB0aGVzZSB0d28gZnVuY3Rpb25zIGZ1cnRoZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUwNjQ3LCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjJUMDk6MzM6NTUuMDk2ODI1MDA1WiIsIlNlcSI6MTEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA1MDc0MzU3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImFmc19jcmVhdGVfdm9sdW1lXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL2Fmcy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvYWZzL2ludGVybmFsLmg9MTY4Mz1leHRlcm4gc3RydWN0IGFmc192bHNlcnZlcl9saXN0ICphZnNfZXh0cmFjdF92bHNlcnZlcl9saXN0KHN0cnVjdCBhZnNfY2VsbCAqLFxcbi0tXFxuZnMvYWZzL2ludGVybmFsLmgtMTY4OC0gKi9cXG5mcy9hZnMvaW50ZXJuYWwuaDoxNjg5OmV4dGVybiBzdHJ1Y3QgYWZzX3ZvbHVtZSAqYWZzX2NyZWF0ZV92b2x1bWUoc3RydWN0IGFmc19mc19jb250ZXh0ICopO1xcbmZzL2Fmcy9pbnRlcm5hbC5oLTE2OTAtZXh0ZXJuIGludCBhZnNfYWN0aXZhdGVfdm9sdW1lKHN0cnVjdCBhZnNfdm9sdW1lICopO1xcbi0tXFxuZnMvYWZzL3N1cGVyLmM9MzU1PXN0YXRpYyBpbnQgYWZzX3ZhbGlkYXRlX2ZjKHN0cnVjdCBmc19jb250ZXh0ICpmYylcXG4tLVxcbmZzL2Fmcy9zdXBlci5jLTQwMi1cXG5mcy9hZnMvc3VwZXIuYzo0MDM6XFx0XFx0dm9sdW1lID0gYWZzX2NyZWF0ZV92b2x1bWUoY3R4KTtcXG5mcy9hZnMvc3VwZXIuYy00MDQtXFx0XFx0aWYgKElTX0VSUih2b2x1bWUpKVxcbi0tXFxuZnMvYWZzL3ZsX2FsaWFzLmM9MTc9c3RhdGljIHN0cnVjdCBhZnNfdm9sdW1lICphZnNfc2FtcGxlX3ZvbHVtZShzdHJ1Y3QgYWZzX2NlbGwgKmNlbGwsIHN0cnVjdCBrZXkgKmtleSxcXG4tLVxcbmZzL2Fmcy92bF9hbGlhcy5jLTI5LVxcbmZzL2Fmcy92bF9hbGlhcy5jOjMwOlxcdHZvbHVtZSA9IGFmc19jcmVhdGVfdm9sdW1lKFxcdTAwMjZmYyk7XFxuZnMvYWZzL3ZsX2FsaWFzLmMtMzEtXFx0X2xlYXZlKFxcXCIgPSAlcFxcXCIsIHZvbHVtZSk7XFxuLS1cXG5mcy9hZnMvdm9sdW1lLmM9MTU0PXN0YXRpYyBzdHJ1Y3QgYWZzX3ZsZGJfZW50cnkgKmFmc192bF9sb29rdXBfdmxkYihzdHJ1Y3QgYWZzX2NlbGwgKmNlbGwsXFxuLS1cXG5mcy9hZnMvdm9sdW1lLmMtMTk3LSAqL1xcbmZzL2Fmcy92b2x1bWUuYzoxOTg6c3RydWN0IGFmc192b2x1bWUgKmFmc19jcmVhdGVfdm9sdW1lKHN0cnVjdCBhZnNfZnNfY29udGV4dCAqcGFyYW1zKVxcbmZzL2Fmcy92b2x1bWUuYy0xOTkte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yMlQwOTozMzo1NS4yMDE5MDU4NjJaIiwiU2VxIjoxMTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEzNzY0ODIyODI0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlJlZmluaW5nIHRoZSBGb2N1cyBmb3IgVGhpcyBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIHRyeWluZyB0byBnZXQgYSBoYW5kbGUgb24gdGhlIG1vc3QgY3JpdGljYWwgcGFydHMuIFRoZSBmYWN0IHRoYXQgYGFmc19jcmVhdGVfdm9sdW1lYCBpcyBnbG9iYWwgaXMgaW1tZWRpYXRlbHkgd29ydGggbm90aW5nLiBOb3csIGxldCdzIHNlZSwgbXkgaW5pdGlhbCBsaXN0IG9mIGtleSBzeW1ib2xzIGluY2x1ZGVzIHF1aXRlIGEgZmV3LiBJJ3ZlIGdvdDogYGFmc19kaXJfaXRlcmF0ZV9ibG9ja2AsIGBhZnNfbG9va3VwX29uZV9maWxsZGlyYCwgYGFmc19sb29rdXBfZmlsbGRpcmAsIGBhZnNfZXh0cmFjdF92bF9hZGRyc2AsIGBhZnNfZXh0cmFjdF92bHNlcnZlcl9saXN0YCwgYGFmc19pbm9kZV9pbml0X2Zyb21fc3RhdHVzYCwgYGFmc19sb29rdXBfY2VsbGAsIGBhZnNfZGVsaXZlcl9jYl9pbml0X2NhbGxfYmFja19zdGF0ZTNgLCBgYWZzX2RlbGl2ZXJfY2JfcHJvYmVfdXVpZGAsIGBhZnNfYnJlYWtfY2FsbGJhY2tzYCwgYGFmc19keW5yb290X3JlYWRkaXJgLCBgYWZzX3B1dF9vcGVyYXRpb25gLCBhbmQgb2YgY291cnNlLCBgYWZzX2NyZWF0ZV92b2x1bWVgLlxuXG5Ob3csIGxldCdzIGdldCBzcGVjaWZpYy4gTG9va2luZyBhdCB3aGF0J3MgYmVlbiBtb2RpZmllZCwgSSBjYW4gc2VlIHNvbWUgb2YgdGhlc2UgYXJlIGNlbnRyYWwgdG8gdGhlIGNvcmUgY2hhbmdlLiBTcGVjaWZpY2FsbHkgdGhlIGNoYW5nZXMgdG8gYGFmc19sb29rdXBfdm9sdW1lX3JjdWAsIGBhZnNfYWxsb2NfY2VsbGAsIGBhZnNfdXBkYXRlX2NlbGxgLCBgYWZzX2NlbGxfZGVzdHJveWAsIGBhZnNfZGVzdHJveV9jZWxsX3dvcmtgIGFuZCBgYWZzX2luc2VydF92b2x1bWVfaW50b19jZWxsYCBwb2ludCB0byBzb21lIGRlZXBlciBjaGFuZ2VzIGhlcmUuXG5cblJlZmluaW5nIGZ1cnRoZXIsIEknbGwgZ28gd2l0aCBhIHNsaWdodGx5IHRpZ2h0ZXIgbGlzdDogYGFmc19icmVha19jYWxsYmFja3NgLCBgYWZzX2xvb2t1cF9jZWxsYCwgYGFmc19kZWxpdmVyX2NiX2luaXRfY2FsbF9iYWNrX3N0YXRlM2AsIGBhZnNfZGVsaXZlcl9jYl9wcm9iZV91dWlkYCwgYGFmc19kaXJfaXRlcmF0ZV9ibG9ja2AsIGBhZnNfcmVhZGRpcmAsIGBhZnNfZG9fbG9va3VwX29uZWAsIGBhZnNfZG9fbG9va3VwYCwgYGFmc19keW5yb290X3JlYWRkaXJgLCBgYWZzX3B1dF9vcGVyYXRpb25gLCBgYWZzX2lub2RlX2luaXRfZnJvbV9zdGF0dXNgLCBgYWZzX2V4dHJhY3RfdmxzZXJ2ZXJfbGlzdGAsIGFuZCBgYWZzX2NyZWF0ZV92b2x1bWVgLlxuXG5BaCwgYnV0IHdhaXQgYSBzZWNvbmQsIGxvb2tpbmcgY2xvc2VyLCBgYWZzX2RvX2xvb2t1cF9vbmVgIGFuZCBgYWZzX2RvX2xvb2t1cGAgYXJlIHN0YXRpYy4gSSBuZWVkIHRvIHNlZSBpZiB0aGV5J3JlIGFjdHVhbGx5IGRpcmVjdGx5IHJlYWNoYWJsZSBvciBpZiB3ZSBuZWVkIHRvIHRyYWNrIHRoZWlyIHVzYWdlIHRocm91Z2ggYW4gZXhwb3J0IG9yIHZpYSBhbm90aGVyIGZ1bmN0aW9uLiBZZXMsIHRoZXkgYXJlIHJlYWNoYWJsZSB0aHJvdWdoIGBhZnNfbG9va3VwYCBhbmQgYGFmc19kX3JldmFsaWRhdGVgLiBPa2F5LCBJJ2xsIHVzZSB0aG9zZSBpbnN0ZWFkLCBzaW5jZSB0aGV5J3JlIHRoZSBleHRlcm5hbCBpbnRlcmZhY2VzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MTM3NCwiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjczOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yMlQwOTozNDowOC45NjY3MzM5OTZaIiwiU2VxIjoxMTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NzI2Njg2NTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYWZzX2xvb2t1cFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9hZnMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2Fmcy9jYWxsYmFjay5jPTEwMT12b2lkIGFmc19icmVha19jYWxsYmFjayhzdHJ1Y3QgYWZzX3Zub2RlICp2bm9kZSwgZW51bSBhZnNfY2JfYnJlYWtfcmVhc29uIHJlYXNvbilcXG4tLVxcbmZzL2Fmcy9jYWxsYmFjay5jLTExMC0gKi9cXG5mcy9hZnMvY2FsbGJhY2suYzoxMTE6c3RhdGljIHN0cnVjdCBhZnNfdm9sdW1lICphZnNfbG9va3VwX3ZvbHVtZV9yY3Uoc3RydWN0IGFmc19jZWxsICpjZWxsLFxcbmZzL2Fmcy9jYWxsYmFjay5jLTExMi1cXHRcXHRcXHRcXHRcXHRcXHRhZnNfdm9saWRfdCB2aWQpXFxuLS1cXG5mcy9hZnMvY2FsbGJhY2suYz0yMDY9c3RhdGljIHZvaWQgYWZzX2JyZWFrX3NvbWVfY2FsbGJhY2tzKHN0cnVjdCBhZnNfc2VydmVyICpzZXJ2ZXIsXFxuLS1cXG5mcy9hZnMvY2FsbGJhY2suYy0yMTUtXFx0cmN1X3JlYWRfbG9jaygpO1xcbmZzL2Fmcy9jYWxsYmFjay5jOjIxNjpcXHR2b2x1bWUgPSBhZnNfbG9va3VwX3ZvbHVtZV9yY3Uoc2VydmVyLVxcdTAwM2VjZWxsLCB2aWQpO1xcbmZzL2Fmcy9jYWxsYmFjay5jLTIxNy1cXHRpZiAoIXZvbHVtZSkge1xcbi0tXFxuZnMvYWZzL2NlbGwuYz0xMDg9c3RhdGljIHN0cnVjdCBhZnNfY2VsbCAqYWZzX2FsbG9jX2NlbGwoc3RydWN0IGFmc19uZXQgKm5ldCxcXG4tLVxcbmZzL2Fmcy9jZWxsLmMtMjI3LS8qXFxuZnMvYWZzL2NlbGwuYzoyMjg6ICogYWZzX2xvb2t1cF9jZWxsIC0gTG9vayB1cCBvciBjcmVhdGUgYSBjZWxsIHJlY29yZC5cXG5mcy9hZnMvY2VsbC5jLTIyOS0gKiBAbmV0OlxcdFRoZSBuZXR3b3JrIG5hbWVzcGFjZVxcbi0tXFxuZnMvYWZzL2NlbGwuYy0yNDAtICovXFxuZnMvYWZzL2NlbGwuYzoyNDE6c3RydWN0IGFmc19jZWxsICphZnNfbG9va3VwX2NlbGwoc3RydWN0IGFmc19uZXQgKm5ldCxcXG5mcy9hZnMvY2VsbC5jLTI0Mi1cXHRcXHRcXHRcXHQgY29uc3QgY2hhciAqbmFtZSwgdW5zaWduZWQgaW50IG5hbWVzeixcXG5mcy9hZnMvY2VsbC5jLTI0My1cXHRcXHRcXHRcXHQgY29uc3QgY2hhciAqdmxsaXN0LFxcbmZzL2Fmcy9jZWxsLmM6MjQ0OlxcdFxcdFxcdFxcdCBlbnVtIGFmc19sb29rdXBfY2VsbF9mb3IgcmVhc29uLFxcbmZzL2Fmcy9jZWxsLmMtMjQ1LVxcdFxcdFxcdFxcdCBlbnVtIGFmc19jZWxsX3RyYWNlIHRyYWNlKVxcbi0tXFxuZnMvYWZzL2NlbGwuYz00MTU9aW50IGFmc19jZWxsX2luaXQoc3RydWN0IGFmc19uZXQgKm5ldCwgY29uc3QgY2hhciAqcm9vdGNlbGwpXFxuLS1cXG5mcy9hZnMvY2VsbC5jLTQ0OS1cXHQvKiBhbGxvY2F0ZSBhIGNlbGwgcmVjb3JkIGZvciB0aGUgcm9vdC93b3Jrc3RhdGlvbiBjZWxsICovXFxuZnMvYWZzL2NlbGwuYzo0NTA6XFx0bmV3X3Jvb3QgPSBhZnNfbG9va3VwX2NlbGwobmV0LCByb290Y2VsbCwgbGVuLCB2bGxpc3QsXFxuZnMvYWZzL2NlbGwuYy00NTEtXFx0XFx0XFx0XFx0ICAgQUZTX0xPT0tVUF9DRUxMX1JPT1RDRUxMLFxcbi0tXFxuZnMvYWZzL2Rpci5jLTIxLVxcbmZzL2Fmcy9kaXIuYzoyMjpzdGF0aWMgc3RydWN0IGRlbnRyeSAqYWZzX2xvb2t1cChzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxcbmZzL2Fmcy9kaXIuYy0yMy1cXHRcXHRcXHRcXHQgdW5zaWduZWQgaW50IGZsYWdzKTtcXG4tLVxcbmZzL2Fmcy9kaXIuYz0yOT1zdGF0aWMgdm9pZCBhZnNfZF9pcHV0KHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGlub2RlICppbm9kZSk7XFxuZnMvYWZzL2Rpci5jOjMwOnN0YXRpYyBib29sIGFmc19sb29rdXBfb25lX2ZpbGxkaXIoc3RydWN0IGRpcl9jb250ZXh0ICpjdHgsIGNvbnN0IGNoYXIgKm5hbWUsIGludCBubGVuLFxcbmZzL2Fmcy9kaXIuYy0zMS1cXHRcXHRcXHRcXHQgICB1NjQgaW5vLCB1MzIgdW5pcXVpZmllcik7XFxuZnMvYWZzL2Rpci5jLTMyLSNkZWZpbmUgQUZTX0xPT0tVUF9PTkUgKChmaWxsZGlyX3QpMHgxMjNVTClcXG5mcy9hZnMvZGlyLmM6MzM6c3RhdGljIGJvb2wgYWZzX2xvb2t1cF9maWxsZGlyKHN0cnVjdCBkaXJfY29udGV4dCAqY3R4LCBjb25zdCBjaGFyICpuYW1lLCBpbnQgbmxlbixcXG5mcy9hZnMvZGlyLmMtMzQtXFx0XFx0XFx0ICAgICAgIHU2NCBpbm8sIHUzMiB1bmlxdWlmaWVyKTtcXG4tLVxcbmZzL2Fmcy9kaXIuYz02MD1jb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBhZnNfZGlyX2lub2RlX29wZXJhdGlvbnMgPSB7XFxuZnMvYWZzL2Rpci5jLTYxLVxcdC5jcmVhdGVcXHRcXHQ9IGFmc19jcmVhdGUsXFxuZnMvYWZzL2Rpci5jOjYyOlxcdC5sb29rdXBcXHRcXHQ9IGFmc19sb29rdXAsXFxuZnMvYWZzL2Rpci5jLTYzLVxcdC5saW5rXFx0XFx0PSBhZnNfbGluayxcXG4tLVxcbmZzL2Fmcy9kaXIuYz03OD1jb25zdCBzdHJ1Y3QgZGVudHJ5X29wZXJhdGlvbnMgYWZzX2ZzX2RlbnRyeV9vcGVyYXRpb25zID0ge1xcbi0tXFxuZnMvYWZzL2Rpci5jLTg1LVxcbmZzL2Fmcy9kaXIuYzo4NjpzdHJ1Y3QgYWZzX2xvb2t1cF9vbmVfY29va2llIHtcXG5mcy9hZnMvZGlyLmMtODctXFx0c3RydWN0IGRpcl9jb250ZXh0XFx0Y3R4O1xcbi0tXFxuZnMvYWZzL2Rpci5jLTkyLVxcbmZzL2Fmcy9kaXIuYzo5MzpzdHJ1Y3QgYWZzX2xvb2t1cF9jb29raWUge1xcbmZzL2Fmcy9kaXIuYy05NC1cXHRzdHJ1Y3QgZGlyX2NvbnRleHRcXHRjdHg7XFxuLS1cXG5mcy9hZnMvZGlyLmM9MzU3PXN0YXRpYyBpbnQgYWZzX2Rpcl9pdGVyYXRlX2Jsb2NrKHN0cnVjdCBhZnNfdm5vZGUgKmR2bm9kZSxcXG4tLVxcbmZzL2Fmcy9kaXIuYy00MjYtXFx0XFx0aWYgKGN0eC1cXHUwMDNlYWN0b3IgPT0gQUZTX0xPT0tVUCkge1xcbmZzL2Fmcy9kaXIuYzo0Mjc6XFx0XFx0XFx0aWYgKCFhZnNfbG9va3VwX2ZpbGxkaXIoY3R4LCBkaXJlLVxcdTAwM2V1Lm5hbWUsIG5sZW4sXFxuZnMvYWZzL2Rpci5jLTQyOC1cXHRcXHRcXHRcXHRcXHRcXHRudG9obChkaXJlLVxcdTAwM2V1LnZub2RlKSxcXG4tLVxcbmZzL2Fmcy9kaXIuYy00MzEtXFx0XFx0fSBlbHNlIGlmIChjdHgtXFx1MDAzZWFjdG9yID09IEFGU19MT09LVVBfT05FKSB7XFxuZnMvYWZzL2Rpci5jOjQzMjpcXHRcXHRcXHRpZiAoIWFmc19sb29rdXBfb25lX2ZpbGxkaXIoY3R4LCBkaXJlLVxcdTAwM2V1Lm5hbWUsIG5sZW4sXFxuZnMvYWZzL2Rpci5jLTQzMy1cXHRcXHRcXHRcXHRcXHRcXHQgICAgbnRvaGwoZGlyZS1cXHUwMDNldS52bm9kZSksXFxuLS1cXG5mcy9hZnMvZGlyLmM9NTUzPXN0YXRpYyBpbnQgYWZzX3JlYWRkaXIoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBkaXJfY29udGV4dCAqY3R4KVxcbi0tXFxuZnMvYWZzL2Rpci5jLTU2NS0gKi9cXG5mcy9hZnMvZGlyLmM6NTY2OnN0YXRpYyBib29sIGFmc19sb29rdXBfb25lX2ZpbGxkaXIoc3RydWN0IGRpcl9jb250ZXh0ICpjdHgsIGNvbnN0IGNoYXIgKm5hbWUsXFxuZnMvYWZzL2Rpci5jLTU2Ny1cXHRcXHRcXHRcXHQgIGludCBubGVuLCB1NjQgaW5vLCB1MzIgdW5pcXVpZmllcilcXG5mcy9hZnMvZGlyLmMtNTY4LXtcXG5mcy9hZnMvZGlyLmM6NTY5OlxcdHN0cnVjdCBhZnNfbG9va3VwX29uZV9jb29raWUgKmNvb2tpZSA9XFxuZnMvYWZzL2Rpci5jOjU3MDpcXHRcXHRjb250YWluZXJfb2YoY3R4LCBzdHJ1Y3QgYWZzX2xvb2t1cF9vbmVfY29va2llLCBjdHgpO1xcbmZzL2Fmcy9kaXIuYy01NzEtXFxuLS1cXG5mcy9hZnMvZGlyLmM9NTk4PXN0YXRpYyBpbnQgYWZzX2RvX2xvb2t1cF9vbmUoc3RydWN0IGlub2RlICpkaXIsIGNvbnN0IHN0cnVjdCBxc3RyICpuYW1lLFxcbi0tXFxuZnMvYWZzL2Rpci5jLTYwMi1cXHRzdHJ1Y3QgYWZzX3N1cGVyX2luZm8gKmFzID0gZGlyLVxcdTAwM2VpX3NiLVxcdTAwM2VzX2ZzX2luZm87XFxuZnMvYWZzL2Rpci5jOjYwMzpcXHRzdHJ1Y3QgYWZzX2xvb2t1cF9vbmVfY29va2llIGNvb2tpZSA9IHtcXG5mcy9hZnMvZGlyLmMtNjA0LVxcdFxcdC5jdHguYWN0b3IgPSBBRlNfTE9PS1VQX09ORSxcXG4tLVxcbmZzL2Fmcy9kaXIuYy02MzMtICovXFxuZnMvYWZzL2Rpci5jOjYzNDpzdGF0aWMgYm9vbCBhZnNfbG9va3VwX2ZpbGxkaXIoc3RydWN0IGRpcl9jb250ZXh0ICpjdHgsIGNvbnN0IGNoYXIgKm5hbWUsXFxuZnMvYWZzL2Rpci5jLTYzNS1cXHRcXHRcXHQgICAgICBpbnQgbmxlbiwgdTY0IGlubywgdTMyIHVuaXF1aWZpZXIpXFxuZnMvYWZzL2Rpci5jLTYzNi17XFxuZnMvYWZzL2Rpci5jOjYzNzpcXHRzdHJ1Y3QgYWZzX2xvb2t1cF9jb29raWUgKmNvb2tpZSA9XFxuZnMvYWZzL2Rpci5jOjYzODpcXHRcXHRjb250YWluZXJfb2YoY3R4LCBzdHJ1Y3QgYWZzX2xvb2t1cF9jb29raWUsIGN0eCk7XFxuZnMvYWZzL2Rpci5jLTYzOS1cXG4tLVxcbmZzL2Fmcy9kaXIuYz03MjI9c3RhdGljIGNvbnN0IHN0cnVjdCBhZnNfb3BlcmF0aW9uX29wcyBhZnNfaW5saW5lX2J1bGtfc3RhdHVzX29wZXJhdGlvbiA9IHtcXG4tLVxcbmZzL2Fmcy9kaXIuYy03MjctXFxuZnMvYWZzL2Rpci5jOjcyODpzdGF0aWMgY29uc3Qgc3RydWN0IGFmc19vcGVyYXRpb25fb3BzIGFmc19sb29rdXBfZmV0Y2hfc3RhdHVzX29wZXJhdGlvbiA9IHtcXG5mcy9hZnMvZGlyLmMtNzI5LVxcdC5pc3N1ZV9hZnNfcnBjXFx0PSBhZnNfZnNfZmV0Y2hfc3RhdHVzLFxcbi0tXFxuZnMvYWZzL2Rpci5jPTc3MT1zdGF0aWMgc3RydWN0IGlub2RlICphZnNfZG9fbG9va3VwKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpXFxuZnMvYWZzL2Rpci5jLTc3Mi17XFxuZnMvYWZzL2Rpci5jOjc3MzpcXHRzdHJ1Y3QgYWZzX2xvb2t1cF9jb29raWUgKmNvb2tpZTtcXG5mcy9hZnMvZGlyLmMtNzc0LVxcdHN0cnVjdCBhZnNfdm5vZGVfcGFyYW0gKnZwO1xcbi0tXFxuZnMvYWZzL2Rpci5jLTc4NC1cXG5mcy9hZnMvZGlyLmM6Nzg1OlxcdGNvb2tpZSA9IGt6YWxsb2Nfb2JqKHN0cnVjdCBhZnNfbG9va3VwX2Nvb2tpZSk7XFxuZnMvYWZzL2Rpci5jLTc4Ni1cXHRpZiAoIWNvb2tpZSlcXG4tLVxcbmZzL2Fmcy9kaXIuYy04NzctXFx0XFx0b3AtXFx1MDAzZWZldGNoX3N0YXR1cy53aGljaCA9IDE7XFxuZnMvYWZzL2Rpci5jOjg3ODpcXHRcXHRvcC1cXHUwMDNlb3BzID0gXFx1MDAyNmFmc19sb29rdXBfZmV0Y2hfc3RhdHVzX29wZXJhdGlvbjtcXG5mcy9hZnMvZGlyLmMtODc5LVxcdFxcdGFmc19iZWdpbl92bm9kZV9vcGVyYXRpb24ob3ApO1xcbi0tXFxuZnMvYWZzL2Rpci5jLTkwNy0gKi9cXG5mcy9hZnMvZGlyLmM6OTA4OnN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICphZnNfbG9va3VwX2F0c3lzKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpXFxuZnMvYWZzL2Rpci5jLTkwOS17XFxuLS1cXG5mcy9hZnMvZGlyLmMtOTYxLSAqL1xcbmZzL2Fmcy9kaXIuYzo5NjI6c3RhdGljIHN0cnVjdCBkZW50cnkgKmFmc19sb29rdXAoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcXG5mcy9hZnMvZGlyLmMtOTYzLVxcdFxcdFxcdFxcdCB1bnNpZ25lZCBpbnQgZmxhZ3MpXFxuLS1cXG5mcy9hZnMvZGlyLmMtOTk3LVxcdCAgICBkZW50cnktXFx1MDAzZWRfbmFtZS5uYW1lW2RlbnRyeS1cXHUwMDNlZF9uYW1lLmxlbiAtIDFdID09ICdzJylcXG5mcy9hZnMvZGlyLmM6OTk4OlxcdFxcdHJldHVybiBhZnNfbG9va3VwX2F0c3lzKGRpciwgZGVudHJ5KTtcXG5mcy9hZnMvZGlyLmMtOTk5LVxcbi0tXFxuZnMvYWZzL2Rpci5jLTEwMTAtXFx0XFx0ZC1cXHUwMDNlZF9mc2RhdGEgPSBkZW50cnktXFx1MDAzZWRfZnNkYXRhO1xcbmZzL2Fmcy9kaXIuYzoxMDExOlxcdFxcdHRyYWNlX2Fmc19sb29rdXAoZHZub2RlLCBcXHUwMDI2ZC1cXHUwMDNlZF9uYW1lLCBcXHUwMDI2ZmlkKTtcXG5mcy9hZnMvZGlyLmMtMTAxMi1cXHR9IGVsc2Uge1xcbmZzL2Fmcy9kaXIuYzoxMDEzOlxcdFxcdHRyYWNlX2Fmc19sb29rdXAoZHZub2RlLCBcXHUwMDI2ZGVudHJ5LVxcdTAwM2VkX25hbWUsIFxcdTAwMjZmaWQpO1xcbmZzL2Fmcy9kaXIuYy0xMDE0LVxcdH1cXG4tLVxcbmZzL2Fmcy9keW5yb290LmMtMTUtXFxuZnMvYWZzL2R5bnJvb3QuYzoxNjpzdGF0aWMgc3RydWN0IGRlbnRyeSAqYWZzX2xvb2t1cF9hdGNlbGwoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgaW5vX3QgaW5vKTtcXG5mcy9hZnMvZHlucm9vdC5jLTE3LVxcbi0tXFxuZnMvYWZzL2R5bnJvb3QuYz05Mz1zdGF0aWMgc3RydWN0IGRlbnRyeSAqYWZzX2R5bnJvb3RfbG9va3VwX2NlbGwoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcXG4tLVxcbmZzL2Fmcy9keW5yb290LmMtMTEwLVxcbmZzL2Fmcy9keW5yb290LmM6MTExOlxcdGNlbGwgPSBhZnNfbG9va3VwX2NlbGwobmV0LCBuYW1lLCBsZW4sIE5VTEwsXFxuZnMvYWZzL2R5bnJvb3QuYy0xMTItXFx0XFx0XFx0ICAgICAgIEFGU19MT09LVVBfQ0VMTF9EWU5ST09ULFxcbi0tXFxuZnMvYWZzL2R5bnJvb3QuYz0xMzk9c3RhdGljIHN0cnVjdCBkZW50cnkgKmFmc19keW5yb290X2xvb2t1cChzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxcbi0tXFxuZnMvYWZzL2R5bnJvb3QuYy0xNTMtXFx0ICAgIG1lbWNtcChkZW50cnktXFx1MDAzZWRfbmFtZS5uYW1lLCBcXFwiQGNlbGxcXFwiLCA1KSA9PSAwKVxcbmZzL2Fmcy9keW5yb290LmM6MTU0OlxcdFxcdHJldHVybiBhZnNfbG9va3VwX2F0Y2VsbChkaXIsIGRlbnRyeSwgMik7XFxuZnMvYWZzL2R5bnJvb3QuYy0xNTUtXFxuLS1cXG5mcy9hZnMvZHlucm9vdC5jLTE1Ny1cXHQgICAgbWVtY21wKGRlbnRyeS1cXHUwMDNlZF9uYW1lLm5hbWUsIFxcXCIuQGNlbGxcXFwiLCA2KSA9PSAwKVxcbmZzL2Fmcy9keW5yb290LmM6MTU4OlxcdFxcdHJldHVybiBhZnNfbG9va3VwX2F0Y2VsbChkaXIsIGRlbnRyeSwgMyk7XFxuZnMvYWZzL2R5bnJvb3QuYy0xNTktXFxuLS1cXG5mcy9hZnMvZHlucm9vdC5jPTI0Mj1zdGF0aWMgY29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgYWZzX2F0Y2VsbF9pbm9kZV9vcGVyYXRpb25zID0ge1xcbi0tXFxuZnMvYWZzL2R5bnJvb3QuYy0yNDgtICovXFxuZnMvYWZzL2R5bnJvb3QuYzoyNDk6c3RhdGljIHN0cnVjdCBkZW50cnkgKmFmc19sb29rdXBfYXRjZWxsKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIGlub190IGlubylcXG5mcy9hZnMvZHlucm9vdC5jLTI1MC17XFxuLS1cXG5mcy9hZnMvaW50ZXJuYWwuaD0xMDYwPWV4dGVybiBzdHJ1Y3QgYWZzX2NlbGwgKmFmc19maW5kX2NlbGwoc3RydWN0IGFmc19uZXQgKiwgY29uc3QgY2hhciAqLCB1bnNpZ25lZCxcXG5mcy9hZnMvaW50ZXJuYWwuaC0xMDYxLVxcdFxcdFxcdFxcdCAgICAgIGVudW0gYWZzX2NlbGxfdHJhY2UpO1xcbmZzL2Fmcy9pbnRlcm5hbC5oOjEwNjI6ZW51bSBhZnNfbG9va3VwX2NlbGxfZm9yIHtcXG5mcy9hZnMvaW50ZXJuYWwuaC0xMDYzLVxcdEFGU19MT09LVVBfQ0VMTF9EWU5ST09ULFxcbi0tXFxuZnMvYWZzL2ludGVybmFsLmgtMTA2OS19O1xcbmZzL2Fmcy9pbnRlcm5hbC5oOjEwNzA6c3RydWN0IGFmc19jZWxsICphZnNfbG9va3VwX2NlbGwoc3RydWN0IGFmc19uZXQgKm5ldCxcXG5mcy9hZnMvaW50ZXJuYWwuaC0xMDcxLVxcdFxcdFxcdFxcdCBjb25zdCBjaGFyICpuYW1lLCB1bnNpZ25lZCBpbnQgbmFtZXN6LFxcbmZzL2Fmcy9pbnRlcm5hbC5oLTEwNzItXFx0XFx0XFx0XFx0IGNvbnN0IGNoYXIgKnZsbGlzdCxcXG5mcy9hZnMvaW50ZXJuYWwuaDoxMDczOlxcdFxcdFxcdFxcdCBlbnVtIGFmc19sb29rdXBfY2VsbF9mb3IgcmVhc29uLFxcbmZzL2Fmcy9pbnRlcm5hbC5oLTEwNzQtXFx0XFx0XFx0XFx0IGVudW0gYWZzX2NlbGxfdHJhY2UgdHJhY2UpO1xcbi0tXFxuZnMvYWZzL2ludGVybmFsLmg9MTU0MD1zdHJ1Y3QgYWZzX3NlcnZlciAqYWZzX2ZpbmRfc2VydmVyKGNvbnN0IHN0cnVjdCByeHJwY19wZWVyICpwZWVyKTtcXG5mcy9hZnMvaW50ZXJuYWwuaDoxNTQxOmV4dGVybiBzdHJ1Y3QgYWZzX3NlcnZlciAqYWZzX2xvb2t1cF9zZXJ2ZXIoc3RydWN0IGFmc19jZWxsICosIHN0cnVjdCBrZXkgKiwgY29uc3QgdXVpZF90ICosIHUzMik7XFxuZnMvYWZzL2ludGVybmFsLmgtMTU0Mi1leHRlcm4gc3RydWN0IGFmc19zZXJ2ZXIgKmFmc19nZXRfc2VydmVyKHN0cnVjdCBhZnNfc2VydmVyICosIGVudW0gYWZzX3NlcnZlcl90cmFjZSk7XFxuLS1cXG5mcy9hZnMvbW50cHQuYz03MT1zdGF0aWMgaW50IGFmc19tbnRwdF9zZXRfcGFyYW1zKHN0cnVjdCBmc19jb250ZXh0ICpmYywgc3RydWN0IGRlbnRyeSAqbW50cHQpXFxuLS1cXG5mcy9hZnMvbW50cHQuYy0xMDktXFxuZnMvYWZzL21udHB0LmM6MTEwOlxcdFxcdGNlbGwgPSBhZnNfbG9va3VwX2NlbGwoY3R4LVxcdTAwM2VuZXQsIHAsIHNpemUsIE5VTEwsXFxuZnMvYWZzL21udHB0LmMtMTExLVxcdFxcdFxcdFxcdCAgICAgICBBRlNfTE9PS1VQX0NFTExfTU9VTlRQT0lOVCxcXG4tLVxcbmZzL2Fmcy9wcm9jLmM9ODg9c3RhdGljIGludCBhZnNfcHJvY19jZWxsc193cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciAqYnVmLCBzaXplX3Qgc2l6ZSlcXG4tLVxcbmZzL2Fmcy9wcm9jLmMtMTI0LVxcbmZzL2Fmcy9wcm9jLmM6MTI1OlxcdFxcdGNlbGwgPSBhZnNfbG9va3VwX2NlbGwobmV0LCBuYW1lLCBzdHJsZW4obmFtZSksIGFyZ3MsXFxuZnMvYWZzL3Byb2MuYy0xMjYtXFx0XFx0XFx0XFx0ICAgICAgIEFGU19MT09LVVBfQ0VMTF9QUkVMT0FELFxcbi0tXFxuZnMvYWZzL3NlcnZlci5jPTE1Mj1zdGF0aWMgc3RydWN0IGFmc19hZGRyX2xpc3QgKmFmc192bF9sb29rdXBfYWRkcnMoc3RydWN0IGFmc19zZXJ2ZXIgKnNlcnZlcixcXG4tLVxcbmZzL2Fmcy9zZXJ2ZXIuYy0xNzctICovXFxuZnMvYWZzL3NlcnZlci5jOjE3ODpzdHJ1Y3QgYWZzX3NlcnZlciAqYWZzX2xvb2t1cF9zZXJ2ZXIoc3RydWN0IGFmc19jZWxsICpjZWxsLCBzdHJ1Y3Qga2V5ICprZXksXFxuZnMvYWZzL3NlcnZlci5jLTE3OS1cXHRcXHRcXHRcXHQgICAgIGNvbnN0IHV1aWRfdCAqdXVpZCwgdTMyIGFkZHJfdmVyc2lvbilcXG4tLVxcbmZzL2Fmcy9zZXJ2ZXJfbGlzdC5jPTI3PXN0cnVjdCBhZnNfc2VydmVyX2xpc3QgKmFmc19hbGxvY19zZXJ2ZXJfbGlzdChzdHJ1Y3QgYWZzX3ZvbHVtZSAqdm9sdW1lLFxcbi0tXFxuZnMvYWZzL3NlcnZlcl9saXN0LmMtODEtXFxuZnMvYWZzL3NlcnZlcl9saXN0LmM6ODI6XFx0XFx0c2VydmVyID0gYWZzX2xvb2t1cF9zZXJ2ZXIodm9sdW1lLVxcdTAwM2VjZWxsLCBrZXksIFxcdTAwMjZ2bGRiLVxcdTAwM2Vmc19zZXJ2ZXJbaV0sXFxuZnMvYWZzL3NlcnZlcl9saXN0LmMtODMtXFx0XFx0XFx0XFx0XFx0ICAgdmxkYi1cXHUwMDNlYWRkcl92ZXJzaW9uW2ldKTtcXG4tLVxcbmZzL2Fmcy9zdXBlci5jPTIyMz1zdGF0aWMgaW50IGFmc19wYXJzZV9zb3VyY2Uoc3RydWN0IGZzX2NvbnRleHQgKmZjLCBzdHJ1Y3QgZnNfcGFyYW1ldGVyICpwYXJhbSlcXG4tLVxcbmZzL2Fmcy9zdXBlci5jLTI5MS1cXHRpZiAoY2VsbG5hbWUpIHtcXG5mcy9hZnMvc3VwZXIuYzoyOTI6XFx0XFx0Y2VsbCA9IGFmc19sb29rdXBfY2VsbChjdHgtXFx1MDAzZW5ldCwgY2VsbG5hbWUsIGNlbGxuYW1lc3osXFxuZnMvYWZzL3N1cGVyLmMtMjkzLVxcdFxcdFxcdFxcdCAgICAgICBOVUxMLCBBRlNfTE9PS1VQX0NFTExfRElSRUNUX01PVU5ULFxcbi0tXFxuZnMvYWZzL3ZsX2FsaWFzLmM9MjUzPXN0YXRpYyBpbnQgeWZzX2NoZWNrX2Nhbm9uaWNhbF9jZWxsX25hbWUoc3RydWN0IGFmc19jZWxsICpjZWxsLCBzdHJ1Y3Qga2V5ICprZXkpXFxuLS1cXG5mcy9hZnMvdmxfYWxpYXMuYy0yNzEtXFx0ZWxzZVxcbmZzL2Fmcy92bF9hbGlhcy5jOjI3MjpcXHRcXHRtYXN0ZXIgPSBhZnNfbG9va3VwX2NlbGwoY2VsbC1cXHUwMDNlbmV0LCBjZWxsX25hbWUsIG5hbWVfbGVuLCBOVUxMLFxcbmZzL2Fmcy92bF9hbGlhcy5jLTI3My1cXHRcXHRcXHRcXHRcXHQgQUZTX0xPT0tVUF9DRUxMX0FMSUFTX0NIRUNLLFxcbi0tXFxuZnMvYWZzL3ZvbHVtZS5jPTc2PXN0YXRpYyBzdHJ1Y3QgYWZzX3ZvbHVtZSAqYWZzX2FsbG9jX3ZvbHVtZShzdHJ1Y3QgYWZzX2ZzX2NvbnRleHQgKnBhcmFtcyxcXG4tLVxcbmZzL2Fmcy92b2x1bWUuYy0xMzItICovXFxuZnMvYWZzL3ZvbHVtZS5jOjEzMzpzdGF0aWMgc3RydWN0IGFmc192b2x1bWUgKmFmc19sb29rdXBfdm9sdW1lKHN0cnVjdCBhZnNfZnNfY29udGV4dCAqcGFyYW1zLFxcbmZzL2Fmcy92b2x1bWUuYy0xMzQtXFx0XFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBhZnNfdmxkYl9lbnRyeSAqdmxkYilcXG4tLVxcbmZzL2Fmcy92b2x1bWUuYz0xOTg9c3RydWN0IGFmc192b2x1bWUgKmFmc19jcmVhdGVfdm9sdW1lKHN0cnVjdCBhZnNfZnNfY29udGV4dCAqcGFyYW1zKVxcbi0tXFxuZnMvYWZzL3ZvbHVtZS5jLTIyNi1cXG5mcy9hZnMvdm9sdW1lLmM6MjI3OlxcdHZvbHVtZSA9IGFmc19sb29rdXBfdm9sdW1lKHBhcmFtcywgdmxkYik7XFxuZnMvYWZzL3ZvbHVtZS5jLTIyOC1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjJUMDk6MzQ6MDkuNTM5NDA3OTQyWiIsIlNlcSI6MTE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNTYzMjk4MTcxNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSBpbW1lZGlhdGUgdGhvdWdodCBwcm9jZXNzLCBmb2N1c2luZyBvbiB0aGUgY29udGV4dCB5b3UgcHJvdmlkZWQ6XG5cbioqRGl2aW5nIGludG8gdGhlIEFGUyBGaWxlc3lzdGVtKipcblxuT2theSwgc28gd2UncmUgdGFsa2luZyBhYm91dCBBRlMuIE15IG1pbmQgaW1tZWRpYXRlbHkgZmxhZ3MgYGFmc19sb29rdXBgIGFzIGEgZGVudHJ5IG9wZXJhdGlvbiDigJMgdGhhdCdzIGZ1bmRhbWVudGFsLiBUaGF0IG1lYW5zIGl0J3MgYSBjcml0aWNhbCBwaWVjZSBvZiBob3cgdGhlIGZpbGVzeXN0ZW0gaGFuZGxlcyBkaXJlY3RvcnkgZW50cnkgbG9va3Vwcy4gTm93LCB0byB1bmRlcnN0YW5kIHRoZSBicm9hZGVyIGltcGxpY2F0aW9ucywgZXNwZWNpYWxseSBob3cgQUZTIGVuc3VyZXMgY29uc2lzdGVuY3kgYW5kIGNhY2hpbmcsIEkgbmVlZCB0byBkaWcgZGVlcGVyLiBNeSBpbnN0aW5jdCBpcyB0byBjaGVjayBvdXQgYGFmc19kX3JldmFsaWRhdGVgLiBUaGF0IGZ1bmN0aW9uIGlzIHByb2JhYmx5IHdoZXJlIGEgbG90IG9mIHRoZSBtYWdpYyBoYXBwZW5zIGluIHRlcm1zIG9mIGNoZWNraW5nIHRoZSB2YWxpZGl0eSBvZiBjYWNoZWQgZGVudHJpZXMuIExldCdzIHNlZSB3aGF0J3MgZ29pbmcgb24gaW4gdGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU3MDExLCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjJUMDk6MzQ6MjUuMTcyMzk1NTM5WiIsIlNlcSI6MTE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDc0MzA1MDQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImFmc19kX3JldmFsaWRhdGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvYWZzL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9hZnMvZGlyLmM9MjU9c3RhdGljIGludCBhZnNfcmVhZGRpcihzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IGRpcl9jb250ZXh0ICpjdHgpO1xcbmZzL2Fmcy9kaXIuYzoyNjpzdGF0aWMgaW50IGFmc19kX3JldmFsaWRhdGUoc3RydWN0IGlub2RlICpkaXIsIGNvbnN0IHN0cnVjdCBxc3RyICpuYW1lLFxcbmZzL2Fmcy9kaXIuYy0yNy1cXHRcXHRcXHQgICAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bnNpZ25lZCBpbnQgZmxhZ3MpO1xcbi0tXFxuZnMvYWZzL2Rpci5jPTc4PWNvbnN0IHN0cnVjdCBkZW50cnlfb3BlcmF0aW9ucyBhZnNfZnNfZGVudHJ5X29wZXJhdGlvbnMgPSB7XFxuZnMvYWZzL2Rpci5jOjc5OlxcdC5kX3JldmFsaWRhdGVcXHQ9IGFmc19kX3JldmFsaWRhdGUsXFxuZnMvYWZzL2Rpci5jLTgwLVxcdC5kX2RlbGV0ZVxcdD0gYWZzX2RfZGVsZXRlLFxcbi0tXFxuZnMvYWZzL2Rpci5jPTk2Mj1zdGF0aWMgc3RydWN0IGRlbnRyeSAqYWZzX2xvb2t1cChzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxcbi0tXFxuZnMvYWZzL2Rpci5jLTEwMjEtICovXFxuZnMvYWZzL2Rpci5jOjEwMjI6c3RhdGljIGludCBhZnNfZF9yZXZhbGlkYXRlX3JjdShzdHJ1Y3QgYWZzX3Zub2RlICpkdm5vZGUsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSlcXG5mcy9hZnMvZGlyLmMtMTAyMy17XFxuLS1cXG5mcy9hZnMvZGlyLmMtMTA1NC0gKi9cXG5mcy9hZnMvZGlyLmM6MTA1NTpzdGF0aWMgaW50IGFmc19kX3JldmFsaWRhdGUoc3RydWN0IGlub2RlICpwYXJlbnRfZGlyLCBjb25zdCBzdHJ1Y3QgcXN0ciAqbmFtZSxcXG5mcy9hZnMvZGlyLmMtMTA1Ni1cXHRcXHRcXHQgICAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bnNpZ25lZCBpbnQgZmxhZ3MpXFxuLS1cXG5mcy9hZnMvZGlyLmMtMTA2Ni1cXHRpZiAoZmxhZ3MgXFx1MDAyNiBMT09LVVBfUkNVKVxcbmZzL2Fmcy9kaXIuYzoxMDY3OlxcdFxcdHJldHVybiBhZnNfZF9yZXZhbGlkYXRlX3JjdShkaXIsIGRlbnRyeSk7XFxuZnMvYWZzL2Rpci5jLTEwNjgtXFxuLS1cXG5mcy9hZnMvZGlyLmMtMTExOS1cXHRcXHRpZiAoaXNfYmFkX2lub2RlKGlub2RlKSkge1xcbmZzL2Fmcy9kaXIuYzoxMTIwOlxcdFxcdFxcdHByaW50ayhcXFwia0FGUzogYWZzX2RfcmV2YWxpZGF0ZTogJXBkMiBoYXMgYmFkIGlub2RlXFxcXG5cXFwiLFxcbmZzL2Fmcy9kaXIuYy0xMTIxLVxcdFxcdFxcdCAgICAgICBkZW50cnkpO1xcbi0tXFxuZnMvYWZzL2Rpci5jPTIwNzA9c3RhdGljIGludCBhZnNfcmVuYW1lKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKm9sZF9kaXIsXFxuLS1cXG5mcy9hZnMvZGlyLmMtMjE4My1cXHQvKiBUaGlzIGJpdCBpcyBwb3RlbnRpYWxseSBuYXN0eSBhcyB0aGVyZSdzIGEgcG90ZW50aWFsIHJhY2Ugd2l0aFxcbmZzL2Fmcy9kaXIuYzoyMTg0OlxcdCAqIGFmc19kX3JldmFsaWRhdGV7LF9yY3V9KCkuICBXZSBoYXZlIHRvIGNoYW5nZSBkX2ZzZGF0YSBvbiB0aGUgZGVudHJ5XFxuZnMvYWZzL2Rpci5jLTIxODUtXFx0ICogdG8gcmVmbGVjdCBpdCdzIG5ldyBwYXJlbnQncyBuZXcgZGF0YV92ZXJzaW9uIGFmdGVyIHRoZSBvcCwgYnV0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIyVDA5OjM0OjI1LjY0NjcwNzY1N1oiLCJTZXEiOjExNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTAwMjQzMzQxMzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGlzIGZyb20gYW4gZXhwZXJ0IHBlcnNwZWN0aXZlOlxuXG4qKkRpdmluZyBpbnRvIEFGUyBGaWxlc3lzdGVtIEludGVybmFscyoqXG5cbk9rYXksIHNvIHdlJ3JlIHRhbGtpbmcgYWJvdXQgYGFmc19kX3JldmFsaWRhdGVgLCB0aGF0J3MgYSBkZW50cnkgb3BlcmF0aW9uLCBnb3QgaXQuIE15IG1pbmQgaW1tZWRpYXRlbHkgc3RhcnRzIHRvIG1hcCB0aGlzIHRvIHRoZSBvdmVyYWxsIGxpZmVjeWNsZSBvZiBhIGZpbGUgd2l0aGluIHRoZSBBRlMgZmlsZXN5c3RlbSwgcGFydGljdWxhcmx5IGFyb3VuZCBob3cgaXQgbWFpbnRhaW5zIGNvbnNpc3RlbmN5LiBLbm93aW5nIGl0J3MgYSBkZW50cnkgb3BlcmF0aW9uIHRlbGxzIG1lIGl0J3MgZGVlcGx5IGludm9sdmVkIGluIHRoZSBsb29rdXAgYW5kIGNhY2hpbmcgbWVjaGFuaXNtcy4gTm93LCB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IGFuZCBob3cgdGhpcyBmaXRzLCBJJ20gZ29pbmcgdG8gcXVpY2tseSBjaGVjayBgYWZzX2FsbG9jX2lub2RlYC4gVGhhdCdzIHdoZXJlIHdlIGdldCB0aGUgZnVuZGFtZW50YWwgaW5vZGUgc3RydWN0dXJlcyBhbGxvY2F0ZWQuIEkgd2FudCB0byBzZWUgaG93IHRoZXNlIHR3byBwaWVjZXMgb2YgY29kZSBpbnRlcmFjdCwgYW5kIGhvdyB0aGUgZGVudHJ5IG9wZXJhdGlvbiB0aWVzIGludG8gdGhvc2UuIEFyZSB0aGVyZSBhbnkgaGludHMgYWJvdXQgZGF0YSB2YWxpZGF0aW9uIG9yIHRoZSBjYWNoaW5nL2ludmFsaWRhdGluZyBzdHJhdGVnaWVzIGhlcmU/IEkgZXhwZWN0IHRoYXQgYGFmc19kX3JldmFsaWRhdGVgIHdpbGwgYmUgY2FsbGVkIGR1cmluZyB0aGUgbG9va3VwIG9wZXJhdGlvbiBhbmQgYWxzbyB3aGVuIHRoZSBrZXJuZWwgc3VzcGVjdHMgdGhlIGZpbGUgbWV0YWRhdGEgbWF5IGhhdmUgY2hhbmdlZC4gVGhlIGlub2RlIGFsbG9jYXRpb24gZnVuY3Rpb24gc2hvdWxkIHByb3ZpZGUgdGhhdCBiYXNlIHN0cnVjdHVyZSB0aGF0IGBhZnNfZF9yZXZhbGlkYXRlYCBsaWtlbHkgZGVwZW5kcyB1cG9uLiBMZXQncyBzZWUgaG93IHRoZXkgZml0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo1NzkwMCwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIyVDA5OjM0OjM1LjY3MTA0NTA2NVoiLCJTZXEiOjExOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI3MDU3NDE1MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhZnNfYWxsb2NfaW5vZGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvYWZzL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9hZnMvaW50ZXJuYWwuaD02NzA9ZW51bSBhZnNfbG9ja19zdGF0ZSB7XFxuLS1cXG5mcy9hZnMvaW50ZXJuYWwuaC02ODMtICpcXG5mcy9hZnMvaW50ZXJuYWwuaDo2ODQ6ICogTm90ZSB0aGF0IGFmc19hbGxvY19pbm9kZSgpICptdXN0KiByZXNldCBhbnl0aGluZyB0aGF0IGNvdWxkIGluY29ycmVjdGx5XFxuZnMvYWZzL2ludGVybmFsLmgtNjg1LSAqIGxlYWsgZnJvbSBvbmUgaW5vZGUgdG8gYW5vdGhlci5cXG4tLVxcbmZzL2Fmcy9zdXBlci5jPTMzPXN0YXRpYyB2b2lkIGFmc19raWxsX3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpO1xcbmZzL2Fmcy9zdXBlci5jOjM0OnN0YXRpYyBzdHJ1Y3QgaW5vZGUgKmFmc19hbGxvY19pbm9kZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKTtcXG5mcy9hZnMvc3VwZXIuYy0zNS1zdGF0aWMgdm9pZCBhZnNfZGVzdHJveV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKTtcXG4tLVxcbmZzL2Fmcy9zdXBlci5jPTU1PXN0YXRpYyBjb25zdCBzdHJ1Y3Qgc3VwZXJfb3BlcmF0aW9ucyBhZnNfc3VwZXJfb3BzID0ge1xcbmZzL2Fmcy9zdXBlci5jLTU2LVxcdC5zdGF0ZnNcXHRcXHQ9IGFmc19zdGF0ZnMsXFxuZnMvYWZzL3N1cGVyLmM6NTc6XFx0LmFsbG9jX2lub2RlXFx0PSBhZnNfYWxsb2NfaW5vZGUsXFxuZnMvYWZzL3N1cGVyLmMtNTgtXFx0LndyaXRlX2lub2RlXFx0PSBuZXRmc191bnBpbl93cml0ZWJhY2ssXFxuLS1cXG5mcy9hZnMvc3VwZXIuYz02MjI9c3RhdGljIGludCBhZnNfaW5pdF9mc19jb250ZXh0KHN0cnVjdCBmc19jb250ZXh0ICpmYylcXG4tLVxcbmZzL2Fmcy9zdXBlci5jLTY0Ni0gKiBJbml0aWFsaXNlIGFuIGlub2RlIGNhY2hlIHNsYWIgZWxlbWVudCBwcmlvciB0byBhbnkgdXNlLiAgTm90ZSB0aGF0XFxuZnMvYWZzL3N1cGVyLmM6NjQ3OiAqIGFmc19hbGxvY19pbm9kZSgpICptdXN0KiByZXNldCBhbnl0aGluZyB0aGF0IGNvdWxkIGluY29ycmVjdGx5IGxlYWsgZnJvbSBvbmVcXG5mcy9hZnMvc3VwZXIuYy02NDgtICogaW5vZGUgdG8gYW5vdGhlci5cXG4tLVxcbmZzL2Fmcy9zdXBlci5jPTY1MD1zdGF0aWMgdm9pZCBhZnNfaV9pbml0X29uY2Uodm9pZCAqX3Zub2RlKVxcbi0tXFxuZnMvYWZzL3N1cGVyLmMtNjY5LSAqL1xcbmZzL2Fmcy9zdXBlci5jOjY3MDpzdGF0aWMgc3RydWN0IGlub2RlICphZnNfYWxsb2NfaW5vZGUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcXG5mcy9hZnMvc3VwZXIuYy02NzEte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yMlQwOTozNDozNS45NDE2MjU2ODlaIiwiU2VxIjoxMTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE0MTAzODA0ODY1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipJbm9kZSBBbGxvY2F0aW9uIGFuZCBFdmljdGlvbiBpbiBBRlM6IEEgUXVpY2sgRGlhZ25vc3RpYyoqXG5cbk9rYXksIHNvIHdlJ3JlIHRhbGtpbmcgQUZTIGlub2RlIG1hbmFnZW1lbnQgaGVyZSwgYW5kIHRoZSBmaXJzdCB0aGluZyB0aGF0IGp1bXBzIG91dCBpcyB0aGUgY29udGV4dDogYGFmc19hbGxvY19pbm9kZWAgaXMgYSAqc3VwZXIqIG9wZXJhdGlvbi4gUmlnaHQsIGdvdCBpdC4gVGhhdCBpbW1lZGlhdGVseSBmb2N1c2VzIG15IGF0dGVudGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiBpdCBiZWluZyBhIHN1cGVyIG9wZXJhdGlvbi4gV2hhdCdzIHRoZSBhbGxvY2F0aW9uIHN0cmF0ZWd5PyBJcyBpdCBvcHRpbWl6ZWQgZm9yIHZvbHVtZSBsYXlvdXQ/IERvZXMgaXQgYWNjb3VudCBmb3IgQUZTJ3MgdW5pcXVlIGRpc3RyaWJ1dGVkIG5hdHVyZT9cblxuTm93LCBnaXZlbiB0aGF0IGNvbnRleHQsIHRoZSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byBjaGVjayBgYWZzX2V2aWN0X2lub2RlYC4gVGhhdCdzIHRoZSBjbGVhbnVwIHNpZGUgb2YgdGhpbmdzLiBJJ20gd29uZGVyaW5nIGlmIHRoZXJlJ3MgYW55IG9idmlvdXMgbGlua2FnZSBiZXR3ZWVuIGFsbG9jYXRpb24gYW5kIGV2aWN0aW9uLiBBcmUgdGhlcmUgYW55IHBvdGVudGlhbCBpbmVmZmljaWVuY2llcyBvciByYWNlcyBpbiB0aGUgbGlmZWN5Y2xlIG1hbmFnZW1lbnQgdGhhdCBtYXkgYmUgYXBwYXJlbnQ/IE15IGltbWVkaWF0ZSB0aG91Z2h0cyBhcmUgdG93YXJkcyBob3cgd2UgaGFuZGxlIGRpc3RyaWJ1dGVkIGxvY2tzLCBjYWNoZSBjb2hlcmVuY3ksIGFuZCB0aGUgaW1wYWN0cyB0aGlzIG1pZ2h0IGhhdmUgb24gdm9sdW1lIG1ldGFkYXRhLiBHaXZlbiBteSBleHBlcmllbmNlLCBJJ20gYWxyZWFkeSBhbnRpY2lwYXRpbmcgYXJlYXMgZm9yIGludmVzdGlnYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU4Njk1LCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjJUMDk6MzQ6NTAuMDQ1NDMzODY0WiIsIlNlcSI6MTIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDM4NDI5Nzk5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImFmc19ldmljdF9pbm9kZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9hZnMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2Fmcy9pbm9kZS5jPTY0Mj1pbnQgYWZzX2Ryb3BfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSlcXG4tLVxcbmZzL2Fmcy9pbm9kZS5jLTY1NC0gKi9cXG5mcy9hZnMvaW5vZGUuYzo2NTU6dm9pZCBhZnNfZXZpY3RfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSlcXG5mcy9hZnMvaW5vZGUuYy02NTYte1xcbi0tXFxuZnMvYWZzL2ludGVybmFsLmg9MTI2Mz1leHRlcm4gaW50IGFmc19zZXRhdHRyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgZGVudHJ5ICosIHN0cnVjdCBpYXR0ciAqKTtcXG5mcy9hZnMvaW50ZXJuYWwuaDoxMjY0OmV4dGVybiB2b2lkIGFmc19ldmljdF9pbm9kZShzdHJ1Y3QgaW5vZGUgKik7XFxuZnMvYWZzL2ludGVybmFsLmgtMTI2NS1leHRlcm4gaW50IGFmc19kcm9wX2lub2RlKHN0cnVjdCBpbm9kZSAqKTtcXG4tLVxcbmZzL2Fmcy9zdXBlci5jPTU1PXN0YXRpYyBjb25zdCBzdHJ1Y3Qgc3VwZXJfb3BlcmF0aW9ucyBhZnNfc3VwZXJfb3BzID0ge1xcbi0tXFxuZnMvYWZzL3N1cGVyLmMtNjEtXFx0LmZyZWVfaW5vZGVcXHQ9IGFmc19mcmVlX2lub2RlLFxcbmZzL2Fmcy9zdXBlci5jOjYyOlxcdC5ldmljdF9pbm9kZVxcdD0gYWZzX2V2aWN0X2lub2RlLFxcbmZzL2Fmcy9zdXBlci5jLTYzLVxcdC5zaG93X2Rldm5hbWVcXHQ9IGFmc19zaG93X2Rldm5hbWUsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIyVDA5OjM0OjUwLjQ4Mzg2OTY3M1oiLCJTZXEiOjEyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzM3MjQ2NDI4NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSBpbW1lZGlhdGUgdGhvdWdodCBwcm9jZXNzLCBiYXNlZCBvbiB0aGUgcHJvdmlkZWQgaW5wdXQsIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipBbmFseXppbmcgYGFmc19ldmljdF9pbm9kZWAgYW5kIENvbnNpZGVyaW5nIHRoZSBJbXBsaWNhdGlvbnMqKlxuXG5Pa2F5LCBzbyBgYWZzX2V2aWN0X2lub2RlYCBpcyBmbGFnZ2VkIGFzIGEgc3VwZXIgb3BlcmF0aW9uLiBUaGF0J3MgYSBrZXkgcGllY2Ugb2YgaW5mb3JtYXRpb24uIFNpbmNlIEknbSB3b3JraW5nIHdpdGggQUZTLCB0aGF0IGltcGxpZXMgaXQncyBhIGNyaXRpY2FsIGZ1bmN0aW9uIGZvciBtYW5hZ2luZyBpbm9kZXMgd2l0aGluIHRoZSBBRlMgZmlsZSBzeXN0ZW0uIEEgXCJzdXBlciBvcGVyYXRpb25cIiBzdWdnZXN0cyBpdCBsaWtlbHkgaGFuZGxlcyBhc3BlY3RzIGxpa2UgZnJlZWluZyB1cCByZXNvdXJjZXMsIHBvdGVudGlhbGx5IHdyaXRpbmcgYmFjayBkaXJ0eSBkYXRhLCBhbmQgZ2VuZXJhbGx5IGNsZWFuaW5nIHVwIHRoZSBpbm9kZSdzIHByZXNlbmNlIGluIHRoZSBzeXN0ZW0gd2hlbiBpdCdzIGJlaW5nIGV2aWN0ZWQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyByZWxhdGlvbnNoaXAgdG8gb3RoZXIgY29yZSBBRlMgb3BlcmF0aW9ucy5cblxuR2l2ZW4gdGhhdCBjb250ZXh0LCBsZXQgbWUgc2hpZnQgZ2VhcnMgYW5kIGNoZWNrIGhvdyBgYWZzX3Jvb3RfaWdldGAgY29tZXMgaW50byBwbGF5LiBVbmRlcnN0YW5kaW5nIGhvdyB0aGUgcm9vdCBpbm9kZSBpcyBoYW5kbGVkLCBlc3BlY2lhbGx5IGluIHJlbGF0aW9uIHRvIHRoZSBldmljdGlvbiBwcm9jZXNzLCBpcyBpbXBvcnRhbnQuIEkgbmVlZCB0byBzZWUgaWYgdGhlcmUncyBhIGNvbm5lY3Rpb24gdGhlcmU6IGRvZXMgYGFmc19ldmljdF9pbm9kZWAgaW50ZXJhY3Qgd2l0aCB0aGUgcm9vdCBpbm9kZSBkaWZmZXJlbnRseSwgb3IgaXMgdGhlIHByb2Nlc3MgY29uc2lzdGVudCBhY3Jvc3MgYWxsIGlub2Rlcz9cblxuXG4iLCJJbnB1dFRva2VucyI6NTkyNzIsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yMlQwOTozNDo1My44NTYzMzc3NTlaIiwiU2VxIjoxMjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3OTU3MDk3OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhZnNfcm9vdF9pZ2V0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL2Fmcy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvYWZzL2lub2RlLmM9NTI4PXN0YXRpYyBpbnQgYWZzX2lnZXQ1X3NldF9yb290KHN0cnVjdCBpbm9kZSAqaW5vZGUsIHZvaWQgKm9wYXF1ZSlcXG4tLVxcbmZzL2Fmcy9pbm9kZS5jLTU0NS0gKi9cXG5mcy9hZnMvaW5vZGUuYzo1NDY6c3RydWN0IGlub2RlICphZnNfcm9vdF9pZ2V0KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHN0cnVjdCBrZXkgKmtleSlcXG5mcy9hZnMvaW5vZGUuYy01NDcte1xcbi0tXFxuZnMvYWZzL2ludGVybmFsLmg9MTI1OT1leHRlcm4gc3RydWN0IGlub2RlICphZnNfaWdldChzdHJ1Y3QgYWZzX29wZXJhdGlvbiAqLCBzdHJ1Y3QgYWZzX3Zub2RlX3BhcmFtICopO1xcbmZzL2Fmcy9pbnRlcm5hbC5oOjEyNjA6ZXh0ZXJuIHN0cnVjdCBpbm9kZSAqYWZzX3Jvb3RfaWdldChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKiwgc3RydWN0IGtleSAqKTtcXG5mcy9hZnMvaW50ZXJuYWwuaC0xMjYxLWV4dGVybiBpbnQgYWZzX2dldGF0dHIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIGNvbnN0IHN0cnVjdCBwYXRoICosXFxuLS1cXG5mcy9hZnMvc3VwZXIuYz00NDg9c3RhdGljIGludCBhZnNfZmlsbF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzdHJ1Y3QgYWZzX2ZzX2NvbnRleHQgKmN0eClcXG4tLVxcbmZzL2Fmcy9zdXBlci5jLTQ3My1cXHRcXHRhZnNfYWN0aXZhdGVfdm9sdW1lKGFzLVxcdTAwM2V2b2x1bWUpO1xcbmZzL2Fmcy9zdXBlci5jOjQ3NDpcXHRcXHRpbm9kZSA9IGFmc19yb290X2lnZXQoc2IsIGN0eC1cXHUwMDNla2V5KTtcXG5mcy9hZnMvc3VwZXIuYy00NzUtXFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yMlQwOTozNDo1My45MzU5MTQ2NDdaIiwiU2VxIjoxMjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjk5MzY5OTkwNjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aGUgZXhwZXJ0OlxuXG4qKlRyYWNpbmcgdGhlIEFGUyBGaWxlc3lzdGVtIEluaXRpYWxpemF0aW9uKipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byBob3cgQUZTIGZpbGVzeXN0ZW1zIGFyZSBtb3VudGVkIGluIHRoZSBrZXJuZWwuIGBhZnNfcm9vdF9pZ2V0YCBpcyB0aGUga2V5IGZ1bmN0aW9uIGZvciBnZXR0aW5nIHRoZSByb290IGlub2RlLCB3aGljaCBtYWtlcyBzZW5zZS4gSSBzZWUgdGhhdCBpdCdzIHJlYWNoYWJsZSB0aHJvdWdoIGBhZnNfZmlsbF9zdXBlcmAsIHRoZSBmdW5jdGlvbiB0aGF0IGFjdHVhbGx5IGZpbGxzIHRoZSBzdXBlcmJsb2NrIGR1cmluZyBtb3VudCB0aW1lLiBUaGF0J3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBOb3csIHRvIHVuZGVyc3RhbmQgaG93IHRoZSB2b2x1bWUgc2VydmVyIGluZm9ybWF0aW9uIGlzIHBvcHVsYXRlZCwgbXkgbmV4dCBzdG9wIGlzIHRvIGV4YW1pbmUgYGFmc19leHRyYWN0X3Zsc2VydmVyX2xpc3RgLiBJIG5lZWQgdG8gZmlndXJlIG91dCBob3cgdGhlIHNlcnZlciBsaXN0IGdldHMgYnVpbHQgYW5kIHBhc3NlZCB0byB0aGUgZmlsZXN5c3RlbSwgc28gSSBjYW4gdW5kZXJzdGFuZCBpdHMgZnVuZGFtZW50YWwgY29ubmVjdGl2aXR5LlxuXG5cbiIsIklucHV0VG9rZW5zIjo1OTg3OSwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIyVDA5OjM1OjAzLjg3MjkxNjg0N1oiLCJTZXEiOjEyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5ODgwNjY3NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhZnNfZXh0cmFjdF92bHNlcnZlcl9saXN0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL2Fmcy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvYWZzL2FkZHJfbGlzdC5jPTI1MD1zdHJ1Y3QgYWZzX3Zsc2VydmVyX2xpc3QgKmFmc19kbnNfcXVlcnkoc3RydWN0IGFmc19jZWxsICpjZWxsLCB0aW1lNjRfdCAqX2V4cGlyeSlcXG4tLVxcbmZzL2Fmcy9hZGRyX2xpc3QuYy0yNjgtXFx0aWYgKHJldCBcXHUwMDNlIDEgXFx1MDAyNlxcdTAwMjYgcmVzdWx0WzBdID09IDApXFxuZnMvYWZzL2FkZHJfbGlzdC5jOjI2OTpcXHRcXHR2bGxpc3QgPSBhZnNfZXh0cmFjdF92bHNlcnZlcl9saXN0KGNlbGwsIHJlc3VsdCwgcmV0KTtcXG5mcy9hZnMvYWRkcl9saXN0LmMtMjcwLVxcdGVsc2VcXG4tLVxcbmZzL2Fmcy9pbnRlcm5hbC5oPTE2ODI9ZXh0ZXJuIHZvaWQgYWZzX3B1dF92bHNlcnZlcmxpc3Qoc3RydWN0IGFmc19uZXQgKiwgc3RydWN0IGFmc192bHNlcnZlcl9saXN0ICopO1xcbmZzL2Fmcy9pbnRlcm5hbC5oOjE2ODM6ZXh0ZXJuIHN0cnVjdCBhZnNfdmxzZXJ2ZXJfbGlzdCAqYWZzX2V4dHJhY3RfdmxzZXJ2ZXJfbGlzdChzdHJ1Y3QgYWZzX2NlbGwgKixcXG5mcy9hZnMvaW50ZXJuYWwuaC0xNjg0LVxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgIGNvbnN0IHZvaWQgKiwgc2l6ZV90KTtcXG4tLVxcbmZzL2Fmcy92bF9saXN0LmM9ODk9c3RhdGljIHN0cnVjdCBhZnNfYWRkcl9saXN0ICphZnNfZXh0cmFjdF92bF9hZGRycyhzdHJ1Y3QgYWZzX25ldCAqbmV0LFxcbi0tXFxuZnMvYWZzL3ZsX2xpc3QuYy0xNTktICovXFxuZnMvYWZzL3ZsX2xpc3QuYzoxNjA6c3RydWN0IGFmc192bHNlcnZlcl9saXN0ICphZnNfZXh0cmFjdF92bHNlcnZlcl9saXN0KHN0cnVjdCBhZnNfY2VsbCAqY2VsbCxcXG5mcy9hZnMvdmxfbGlzdC5jLTE2MS1cXHRcXHRcXHRcXHRcXHRcXHQgICAgY29uc3Qgdm9pZCAqYnVmZmVyLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yMlQwOTozNTowNC4wNzE3MzA4MTJaIiwiU2VxIjoxMjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUzMzM0NTY2NDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOlxuXG4qKkFuYWx5emluZyBBRlMgU2VydmVyIEludGVyYWN0aW9ucyoqXG5cblJpZ2h0LCBzbyBgYWZzX2V4dHJhY3RfdmxzZXJ2ZXJfbGlzdGAgaXMgYWNjZXNzaWJsZSB0aHJvdWdoIHRoZSBgYWZzX2Ruc19xdWVyeWAgZnVuY3Rpb24uIFRoYXQncyBhIGZ1bmRhbWVudGFsIGxpbmsgaW4gdGhlIEFGUyBhcmNoaXRlY3R1cmUuIEtub3dpbmcgdGhhdCwgbGV0J3Mgc2hpZnQgZ2VhcnMgYW5kIGV4YW1pbmUgYW5vdGhlciBjcnVjaWFsIGZ1bmN0aW9uLCBgYWZzX2NyZWF0ZV92b2x1bWVgLiBUaGlzIGNvbm5lY3Rpb24gaXMgaW1wb3J0YW50LCBJIGNhbiBzZWUgaG93IGNyZWF0aW5nIHZvbHVtZXMgaXMgbGlua2VkIHRvIEROUyBxdWVyaWVzIGZvciBzZXJ2ZXJzIGFuZCBleHRyYWN0aW5nIHRoZWlyIGxpc3RzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIEROUyByZXNvbHV0aW9uIGZlZWRzIGludG8gdm9sdW1lIGNyZWF0aW9uOyB3aGF0IHNlcnZlciBpbmZvcm1hdGlvbiBmcm9tIHRoYXQgbGlzdCBkb2VzIGBhZnNfY3JlYXRlX3ZvbHVtZWAgYWN0dWFsbHkgY29uc3VtZT8gQXJlIHRoZXJlIHBvdGVudGlhbCBwZXJmb3JtYW5jZSBib3R0bGVuZWNrcyBvciBzZWN1cml0eSBpbXBsaWNhdGlvbnMgaW4gdGhpcyBpbnRlcmFjdGlvbj8gQXJlIHRoZXJlIGVycm9yIGhhbmRsaW5nIHBvc3NpYmlsaXRpZXMgdGhhdCBuZWVkIHRvIGJlIHRlc3RlZD8gSSdtIGFscmVhZHkgZm9ybXVsYXRpbmcgcXVlc3Rpb25zIGFib3V0IHRoZSBwb3RlbnRpYWwgZmFpbHVyZSBzY2VuYXJpb3MgYW5kIGhvdyB0aGV5IG1pZ2h0IHJlbGF0ZSB0byB0aGUgRE5TIGxvb2t1cC4gVGhlIGludGVyZGVwZW5kZW5jaWVzIGFyZSB0aGUga2V5LlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MDQ2MywiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIyVDA5OjM1OjA5LjQwNTE5MzE0OFoiLCJTZXEiOjEyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyNTYzNjI4NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhZnNfY3JlYXRlX3ZvbHVtZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9hZnMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2Fmcy9pbnRlcm5hbC5oPTE2ODM9ZXh0ZXJuIHN0cnVjdCBhZnNfdmxzZXJ2ZXJfbGlzdCAqYWZzX2V4dHJhY3RfdmxzZXJ2ZXJfbGlzdChzdHJ1Y3QgYWZzX2NlbGwgKixcXG4tLVxcbmZzL2Fmcy9pbnRlcm5hbC5oLTE2ODgtICovXFxuZnMvYWZzL2ludGVybmFsLmg6MTY4OTpleHRlcm4gc3RydWN0IGFmc192b2x1bWUgKmFmc19jcmVhdGVfdm9sdW1lKHN0cnVjdCBhZnNfZnNfY29udGV4dCAqKTtcXG5mcy9hZnMvaW50ZXJuYWwuaC0xNjkwLWV4dGVybiBpbnQgYWZzX2FjdGl2YXRlX3ZvbHVtZShzdHJ1Y3QgYWZzX3ZvbHVtZSAqKTtcXG4tLVxcbmZzL2Fmcy9zdXBlci5jPTM1NT1zdGF0aWMgaW50IGFmc192YWxpZGF0ZV9mYyhzdHJ1Y3QgZnNfY29udGV4dCAqZmMpXFxuLS1cXG5mcy9hZnMvc3VwZXIuYy00MDItXFxuZnMvYWZzL3N1cGVyLmM6NDAzOlxcdFxcdHZvbHVtZSA9IGFmc19jcmVhdGVfdm9sdW1lKGN0eCk7XFxuZnMvYWZzL3N1cGVyLmMtNDA0LVxcdFxcdGlmIChJU19FUlIodm9sdW1lKSlcXG4tLVxcbmZzL2Fmcy92bF9hbGlhcy5jPTE3PXN0YXRpYyBzdHJ1Y3QgYWZzX3ZvbHVtZSAqYWZzX3NhbXBsZV92b2x1bWUoc3RydWN0IGFmc19jZWxsICpjZWxsLCBzdHJ1Y3Qga2V5ICprZXksXFxuLS1cXG5mcy9hZnMvdmxfYWxpYXMuYy0yOS1cXG5mcy9hZnMvdmxfYWxpYXMuYzozMDpcXHR2b2x1bWUgPSBhZnNfY3JlYXRlX3ZvbHVtZShcXHUwMDI2ZmMpO1xcbmZzL2Fmcy92bF9hbGlhcy5jLTMxLVxcdF9sZWF2ZShcXFwiID0gJXBcXFwiLCB2b2x1bWUpO1xcbi0tXFxuZnMvYWZzL3ZvbHVtZS5jPTE1ND1zdGF0aWMgc3RydWN0IGFmc192bGRiX2VudHJ5ICphZnNfdmxfbG9va3VwX3ZsZGIoc3RydWN0IGFmc19jZWxsICpjZWxsLFxcbi0tXFxuZnMvYWZzL3ZvbHVtZS5jLTE5Ny0gKi9cXG5mcy9hZnMvdm9sdW1lLmM6MTk4OnN0cnVjdCBhZnNfdm9sdW1lICphZnNfY3JlYXRlX3ZvbHVtZShzdHJ1Y3QgYWZzX2ZzX2NvbnRleHQgKnBhcmFtcylcXG5mcy9hZnMvdm9sdW1lLmMtMTk5LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjJUMDk6MzU6MDkuNTMwODM4NTM1WiIsIlNlcSI6MTI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5MDkyMzg1MjcxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlJlZmluaW5nIHRoZSBGb2N1cyBmb3IgQW5hbHl6aW5nIEFGUyBWb2x1bWUgQ3JlYXRpb24qKlxuXG5Pa2F5LCBzbyBgYWZzX2NyZWF0ZV92b2x1bWVgIGlzIHJlYWNoYWJsZSB0aHJvdWdoIGBhZnNfdmFsaWRhdGVfZmNgIOKAkyB0aGF0J3MgdGhlIGVudHJ5IHBvaW50LiBMZXQncyBzZWUuLi4gaW5pdGlhbGx5IEkgd2FzIGxvb2tpbmcgYXQgYSBicm9hZCBsaXN0IG9mIHN5bWJvbHMgcmVsYXRlZCB0byBBRlMgb3BlcmF0aW9ucywgaW5jbHVkaW5nIHRoaW5ncyBsaWtlIGBhZnNfYnJlYWtfY2FsbGJhY2tzYCwgYGFmc19sb29rdXBfY2VsbGAsIGBhZnNfcmVhZGRpcmAsIGBhZnNfbG9va3VwYCwgYGFmc19kX3JldmFsaWRhdGVgLCBgYWZzX2R5bnJvb3RfcmVhZGRpcmAsIGBhZnNfcHV0X29wZXJhdGlvbmAsIGBhZnNfYWxsb2NfaW5vZGVgLCBgYWZzX2V2aWN0X2lub2RlYCwgYGFmc19yb290X2lnZXRgLCBgYWZzX2V4dHJhY3RfdmxzZXJ2ZXJfbGlzdGAsIGFuZCwgb2YgY291cnNlLCBgYWZzX2NyZWF0ZV92b2x1bWVgIGl0c2VsZi4gIEkgbmVlZCB0byBuYXJyb3cgdGhpcyBkb3duIGZvciBhIG1vcmUgZWZmZWN0aXZlIGFuYWx5c2lzLlxuXG5MZXQncyBjdXQgb3V0IHRoZSBtb3JlIGdlbmVyaWMgb25lcyBmb3Igbm93LCBmb2N1c2luZyBvbiBmdW5jdGlvbnMgdGhhdCBtaWdodCBkaXJlY3RseSBpbmZsdWVuY2Ugb3IgaW50ZXJhY3Qgc2lnbmlmaWNhbnRseSB3aXRoIHZvbHVtZSBjcmVhdGlvbi4gSSBjYW4gYWx3YXlzIGJyb2FkZW4gdGhlIHNjb3BlIGxhdGVyLiBUaGF0IGxlYXZlcyBtZSB3aXRoOiBgYWZzX2JyZWFrX2NhbGxiYWNrc2AsIGBhZnNfbG9va3VwX2NlbGxgLCBgYWZzX3JlYWRkaXJgLCBgYWZzX2xvb2t1cGAsIGBhZnNfZF9yZXZhbGlkYXRlYCwgYGFmc19keW5yb290X3JlYWRkaXJgLCBgYWZzX3B1dF9vcGVyYXRpb25gLCBgYWZzX2V4dHJhY3RfdmxzZXJ2ZXJfbGlzdGAsIGFuZCBgYWZzX2NyZWF0ZV92b2x1bWVgLlxuXG5XYWl0IGEgbWludXRlLCBgYWZzX2FsbG9jX2lub2RlYCBhbmQgYGFmc19ldmljdF9pbm9kZWAgYXJlIG1vZGlmaWVkISBUaGF0J3MgYSBrZXkgZGV0YWlsISBTcGVjaWZpY2FsbHksIGBhZnNfYWxsb2NfaW5vZGVgIG5vdyBpbml0aWFsaXplcyBgdm5vZGUtXHUwMDNlbG9ja193b3JrYCBhbmQgYGFmc19ldmljdF9pbm9kZWAgZmx1c2hlcyBpdC4gVGhpcyBpcyBhIGNsZWFyLCBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IG5lZWRzIHRvIGJlIGV4cGxvcmVkLiBMZXQncyBtYWtlIHN1cmUgdGhhdCdzIGtlcHQgaW4gbWluZC4gQWgsIGFuZCBgYWZzX3Jvb3RfaWdldGAgaXMgbW9kaWZpZWQgdG9vLCB0byBubyBsb25nZXIgY2FsbCBgYWZzX3NldF9uZXRmc19jb250ZXh0YC4gIE9uIHRoZSBvdGhlciBoYW5kLCAgYGFmc19pbm9kZV9pbml0X2Zyb21fc3RhdHVzYCAqaXMqIG1vZGlmaWVkIHRvIGNhbGwgYGFmc19zZXRfbmV0ZnNfY29udGV4dGAuICBUaGF0IGFjdHVhbGx5IHNvdW5kcyBtb3JlIHJlbGV2YW50LCBzbyBsZXQncyB1c2UgdGhhdCBhcyB0aGUgZm9jdXMgc3ltYm9sIGluc3RlYWQgb2YgYGFmc19yb290X2lnZXRgLlxuXG5TaG9vdCwgaXQncyBzdGF0aWMhIFdlbGwsIGl0J3MgY2FsbGVkIGJ5IGBhZnNfaWdldGAgYW5kIGBhZnNfZmV0Y2hfc3RhdHVzX3N1Y2Nlc3NgIGluc3RlYWQuIE11Y2ggYmV0dGVyIC0gSSBjYW4gdXNlIGBhZnNfaWdldGAgYXMgdGhlIGZvY3VzIHN5bWJvbCBpbnN0ZWFkLiBUaGF0IHNob3VsZCBnaXZlIGEgbW9yZSB1c2VmdWwgcGljdHVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NjExNTQsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MDcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjJUMDk6MzU6MTguNjIzMjI2ODg2WiIsIlNlcSI6MTI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA1ODUzNjY4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImFmc19pZ2V0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL2Fmcy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvYWZzL2Rpci5jPTY2MT1zdGF0aWMgdm9pZCBhZnNfZG9fbG9va3VwX3N1Y2Nlc3Moc3RydWN0IGFmc19vcGVyYXRpb24gKm9wKVxcbi0tXFxuZnMvYWZzL2Rpci5jLTcwMS1cXHRcXHR9IGVsc2UgaWYgKHZwLVxcdTAwM2VzY2Iuc3RhdHVzLmFib3J0X2NvZGUgPT0gMCkge1xcbmZzL2Fmcy9kaXIuYzo3MDI6XFx0XFx0XFx0aW5vZGUgPSBhZnNfaWdldChvcCwgdnApO1xcbmZzL2Fmcy9kaXIuYy03MDMtXFx0XFx0XFx0aWYgKCFJU19FUlIoaW5vZGUpKSB7XFxuLS1cXG5mcy9hZnMvZGlyLmM9MTIzND1zdGF0aWMgdm9pZCBhZnNfdm5vZGVfbmV3X2lub2RlKHN0cnVjdCBhZnNfb3BlcmF0aW9uICpvcClcXG4tLVxcbmZzL2Fmcy9kaXIuYy0xMjQ0LVxcbmZzL2Fmcy9kaXIuYzoxMjQ1OlxcdGlub2RlID0gYWZzX2lnZXQob3AsIHZwKTtcXG5mcy9hZnMvZGlyLmMtMTI0Ni1cXHRpZiAoSVNfRVJSKGlub2RlKSkge1xcbi0tXFxuZnMvYWZzL2R5bnJvb3QuYz0xNj1zdGF0aWMgc3RydWN0IGRlbnRyeSAqYWZzX2xvb2t1cF9hdGNlbGwoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgaW5vX3QgaW5vKTtcXG4tLVxcbmZzL2Fmcy9keW5yb290LmMtMjAtICovXFxuZnMvYWZzL2R5bnJvb3QuYzoyMTpzdGF0aWMgaW50IGFmc19pZ2V0NV9wc2V1ZG9fdGVzdChzdHJ1Y3QgaW5vZGUgKmlub2RlLCB2b2lkICpvcGFxdWUpXFxuZnMvYWZzL2R5bnJvb3QuYy0yMi17XFxuLS1cXG5mcy9hZnMvZHlucm9vdC5jLTMwLSAqL1xcbmZzL2Fmcy9keW5yb290LmM6MzE6c3RhdGljIGludCBhZnNfaWdldDVfcHNldWRvX3NldChzdHJ1Y3QgaW5vZGUgKmlub2RlLCB2b2lkICpvcGFxdWUpXFxuZnMvYWZzL2R5bnJvb3QuYy0zMi17XFxuLS1cXG5mcy9hZnMvZHlucm9vdC5jLTQ2LSAqL1xcbmZzL2Fmcy9keW5yb290LmM6NDc6c3RhdGljIHN0cnVjdCBpbm9kZSAqYWZzX2lnZXRfcHNldWRvX2RpcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBpbm9fdCBpbm8pXFxuZnMvYWZzL2R5bnJvb3QuYy00OC17XFxuLS1cXG5mcy9hZnMvZHlucm9vdC5jLTU1LVxcdGlub2RlID0gaWdldDVfbG9ja2VkKHNiLCBmaWQudm5vZGUsXFxuZnMvYWZzL2R5bnJvb3QuYzo1NjpcXHRcXHRcXHQgICAgIGFmc19pZ2V0NV9wc2V1ZG9fdGVzdCwgYWZzX2lnZXQ1X3BzZXVkb19zZXQsIFxcdTAwMjZmaWQpO1xcbmZzL2Fmcy9keW5yb290LmMtNTctXFx0aWYgKCFpbm9kZSkge1xcbi0tXFxuZnMvYWZzL2R5bnJvb3QuYz05Mz1zdGF0aWMgc3RydWN0IGRlbnRyeSAqYWZzX2R5bnJvb3RfbG9va3VwX2NlbGwoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcXG4tLVxcbmZzL2Fmcy9keW5yb290LmMtMTE4LVxcbmZzL2Fmcy9keW5yb290LmM6MTE5OlxcdGlub2RlID0gYWZzX2lnZXRfcHNldWRvX2RpcihkaXItXFx1MDAzZWlfc2IsIGNlbGwtXFx1MDAzZWR5bnJvb3RfaW5vICogMiArIGRvdHRlZCk7XFxuZnMvYWZzL2R5bnJvb3QuYy0xMjAtXFx0aWYgKElTX0VSUihpbm9kZSkpIHtcXG4tLVxcbmZzL2Fmcy9keW5yb290LmM9MjQ5PXN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICphZnNfbG9va3VwX2F0Y2VsbChzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBpbm9fdCBpbm8pXFxuLS1cXG5mcy9hZnMvZHlucm9vdC5jLTI1NS1cXHRpbm9kZSA9IGlnZXQ1X2xvY2tlZChkaXItXFx1MDAzZWlfc2IsIGZpZC52bm9kZSxcXG5mcy9hZnMvZHlucm9vdC5jOjI1NjpcXHRcXHRcXHQgICAgIGFmc19pZ2V0NV9wc2V1ZG9fdGVzdCwgYWZzX2lnZXQ1X3BzZXVkb19zZXQsIFxcdTAwMjZmaWQpO1xcbmZzL2Fmcy9keW5yb290LmMtMjU3LVxcdGlmICghaW5vZGUpXFxuLS1cXG5mcy9hZnMvZHlucm9vdC5jPTM2OT1zdHJ1Y3QgaW5vZGUgKmFmc19keW5yb290X2lnZXRfcm9vdChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxcbi0tXFxuZnMvYWZzL2R5bnJvb3QuYy0zNzktXFx0aW5vZGUgPSBpZ2V0NV9sb2NrZWQoc2IsIGZpZC52bm9kZSxcXG5mcy9hZnMvZHlucm9vdC5jOjM4MDpcXHRcXHRcXHQgICAgIGFmc19pZ2V0NV9wc2V1ZG9fdGVzdCwgYWZzX2lnZXQ1X3BzZXVkb19zZXQsIFxcdTAwMjZmaWQpO1xcbmZzL2Fmcy9keW5yb290LmMtMzgxLVxcdGlmICghaW5vZGUpXFxuLS1cXG5mcy9hZnMvaW5vZGUuYz00MDE9aW50IGFmc19pbG9va3VwNV90ZXN0X2J5X2ZpZChzdHJ1Y3QgaW5vZGUgKmlub2RlLCB2b2lkICpvcGFxdWUpXFxuLS1cXG5mcy9hZnMvaW5vZGUuYy00MTMtICovXFxuZnMvYWZzL2lub2RlLmM6NDE0OnN0YXRpYyBpbnQgYWZzX2lnZXQ1X3Rlc3Qoc3RydWN0IGlub2RlICppbm9kZSwgdm9pZCAqb3BhcXVlKVxcbmZzL2Fmcy9pbm9kZS5jLTQxNS17XFxuLS1cXG5mcy9hZnMvaW5vZGUuYy00MjQtICovXFxuZnMvYWZzL2lub2RlLmM6NDI1OnN0YXRpYyBpbnQgYWZzX2lnZXQ1X3NldChzdHJ1Y3QgaW5vZGUgKmlub2RlLCB2b2lkICpvcGFxdWUpXFxuZnMvYWZzL2lub2RlLmMtNDI2LXtcXG4tLVxcbmZzL2Fmcy9pbm9kZS5jPTQ0NT1zdGF0aWMgdm9pZCBhZnNfZ2V0X2lub2RlX2NhY2hlKHN0cnVjdCBhZnNfdm5vZGUgKnZub2RlKVxcbi0tXFxuZnMvYWZzL2lub2RlLmMtNDgxLSAqL1xcbmZzL2Fmcy9pbm9kZS5jOjQ4MjpzdHJ1Y3QgaW5vZGUgKmFmc19pZ2V0KHN0cnVjdCBhZnNfb3BlcmF0aW9uICpvcCwgc3RydWN0IGFmc192bm9kZV9wYXJhbSAqdnApXFxuZnMvYWZzL2lub2RlLmMtNDgzLXtcXG4tLVxcbmZzL2Fmcy9pbm9kZS5jLTQ5MS1cXG5mcy9hZnMvaW5vZGUuYzo0OTI6XFx0aW5vZGUgPSBpZ2V0NV9sb2NrZWQoc2IsIHZwLVxcdTAwM2VmaWQudm5vZGUsIGFmc19pZ2V0NV90ZXN0LCBhZnNfaWdldDVfc2V0LCB2cCk7XFxuZnMvYWZzL2lub2RlLmMtNDkzLVxcdGlmICghaW5vZGUpIHtcXG4tLVxcbmZzL2Fmcy9pbm9kZS5jLTUyNy1cXG5mcy9hZnMvaW5vZGUuYzo1Mjg6c3RhdGljIGludCBhZnNfaWdldDVfc2V0X3Jvb3Qoc3RydWN0IGlub2RlICppbm9kZSwgdm9pZCAqb3BhcXVlKVxcbmZzL2Fmcy9pbm9kZS5jLTUyOS17XFxuLS1cXG5mcy9hZnMvaW5vZGUuYz01NDY9c3RydWN0IGlub2RlICphZnNfcm9vdF9pZ2V0KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHN0cnVjdCBrZXkgKmtleSlcXG4tLVxcbmZzL2Fmcy9pbm9kZS5jLTU1NS1cXG5mcy9hZnMvaW5vZGUuYzo1NTY6XFx0aW5vZGUgPSBpZ2V0NV9sb2NrZWQoc2IsIDEsIE5VTEwsIGFmc19pZ2V0NV9zZXRfcm9vdCwgTlVMTCk7XFxuZnMvYWZzL2lub2RlLmMtNTU3LVxcdGlmICghaW5vZGUpIHtcXG4tLVxcbmZzL2Fmcy9pbnRlcm5hbC5oPTEyNTg9ZXh0ZXJuIGludCBhZnNfaWxvb2t1cDVfdGVzdF9ieV9maWQoc3RydWN0IGlub2RlICosIHZvaWQgKik7XFxuZnMvYWZzL2ludGVybmFsLmg6MTI1OTpleHRlcm4gc3RydWN0IGlub2RlICphZnNfaWdldChzdHJ1Y3QgYWZzX29wZXJhdGlvbiAqLCBzdHJ1Y3QgYWZzX3Zub2RlX3BhcmFtICopO1xcbmZzL2Fmcy9pbnRlcm5hbC5oLTEyNjAtZXh0ZXJuIHN0cnVjdCBpbm9kZSAqYWZzX3Jvb3RfaWdldChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKiwgc3RydWN0IGtleSAqKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjJUMDk6MzU6MTguNzI5MDg5MTk0WiIsIlNlcSI6MTI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5MTk1MTQ5MjQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIEFGUyBGaWxlc3lzdGVtIGZvciBGdXp6aW5nKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHNjYW4gcmV2ZWFsZWQgYSBoYW5kZnVsIG9mIGdsb2JhbGx5IGRlZmluZWQgc3ltYm9scyBpbiB0aGUgQUZTIGNvZGU6IGBhZnNfaWdldGAsIGBhZnNfcHV0X29wZXJhdGlvbmAsIGBhZnNfZXh0cmFjdF92bHNlcnZlcl9saXN0YCwgYW5kIGBhZnNfY3JlYXRlX3ZvbHVtZWAuIEkgdGhlbiBjcm9zcy1yZWZlcmVuY2VkIHRoZXNlIHdpdGggc3VwZXIgb3BlcmF0aW9ucyB0cmlnZ2VyZWQgYnkgVkZTIGxpa2UgYGFmc19hbGxvY19pbm9kZWAgYW5kIGBhZnNfZXZpY3RfaW5vZGVgLiBUaGlzIGdhdmUgbWUgYSBwcmVsaW1pbmFyeSBsaXN0IG9mIGZvY3VzIGFyZWFzLlxuXG5OZXh0LCBJIGNvbXBpbGVkIGEgbW9yZSBjb21wcmVoZW5zaXZlIGxpc3Qgb2Ygc3ltYm9scyBsaWtlbHkgaW1wYWN0ZWQgYnkgdGhlIHBhdGNoOiBgYWZzX2JyZWFrX2NhbGxiYWNrc2AsIGBhZnNfbG9va3VwX2NlbGxgLCBgYWZzX3JlYWRkaXJgLCBgYWZzX2xvb2t1cGAsIGBhZnNfZF9yZXZhbGlkYXRlYCwgYGFmc19keW5yb290X3JlYWRkaXJgLCBgYWZzX3B1dF9vcGVyYXRpb25gLCBgYWZzX2lnZXRgLCBgYWZzX2V4dHJhY3RfdmxzZXJ2ZXJfbGlzdGAsIGFuZCBgYWZzX2NyZWF0ZV92b2x1bWVgLiBUaGlzIGxpc3QgcG9pbnRzIGRpcmVjdGx5IHRvIGNoYW5nZXMgaW4gdm9sdW1lIGxvb2t1cCB3aXRoIFJDVSBsb2NrcywgY2VsbCBhbGxvY2F0aW9uIGFuZCBkZXN0cnVjdGlvbiwgY2FsbGJhY2sgaGFuZGxpbmcsIGRpcmVjdG9yeSBpdGVyYXRpb24gYW5kIGxvb2t1cCwgZHluYW1pYyByb290IHJlYWRpbmcsIG9wZXJhdGlvbiBwdXR0aW5nLCBpbm9kZSBpbml0aWFsaXphdGlvbi9ldmljdGlvbiwgVkwgc2VydmVyIGV4dHJhY3Rpb24sIGFuZCB2b2x1bWUgaW5zZXJ0aW9uLiBBIHNpZ25pZmljYW50IG51bWJlciBvZiBjb3JlIEFGUyBmdW5jdGlvbnMgYXJlIHRvdWNoZWQsIHN1Z2dlc3RpbmcgYSBicm9hZCBzY29wZSBvZiBjaGFuZ2VzLlxuXG5BbmFseXppbmcgdGhlIGNvbmZpZ3VyYXRpb24sIGBBRlNfRlNgIGlzLCBvZiBjb3Vyc2UsIHRoZSBrZXkgZW5hYmxlci4gSG93ZXZlciwgSSBkb3VibGUtY2hlY2tlZCB0aGUgZGVwZW5kZW5jaWVzLiBgTkVUYCwgYEtFWVNgLCBhbmQgYFJYUlBDYCBhcmUgYWxzbyByZXF1aXJlZCBmb3IgQUZTIGZ1bmN0aW9uYWxpdHksIGJ1dCB0aGV5IGFyZSBlaXRoZXIgZW5hYmxlZCBieSBkZWZhdWx0IG9yIHNlbGVjdGVkIGJ5IGBBRlNfRlNgLCB3aGljaCBzaW1wbGlmaWVzIHRoaW5ncy4gTm8gYWRkaXRpb25hbCBjb25maWd1cmF0aW9ucyBhcHBlYXIgbmVjZXNzYXJ5LlxuXG5CYXNlZCBvbiB0aGlzIGFzc2Vzc21lbnQsIHRoZSBmdW5jdGlvbmFsIGNoYW5nZXMgc3BhbiByZWFjaGFibGUgY29yZSBsb2dpYyB3aXRoaW4gQUZTLiBUaGUgQUZTIGZpbGVzeXN0ZW0gaXMgbm93IGNsZWFybHkgYSB2aWFibGUgY2FuZGlkYXRlIGZvciBmdXp6aW5nLCBhbmQgSSBiZWxpZXZlIHN5emthbGxlciBzaG91bGQgYmUgc3VjY2Vzc2Z1bCBpbiBleHBvc2luZyBidWdzIG9yIHZ1bG5lcmFiaWxpdGllcy4gVGhlcmVmb3JlLCBJIGJlbGlldmUgaXQncyB3b3J0aCBmdXp6aW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MzY2NCwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU0MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yMlQwOTozNToyNy45MjQyNDE3MjNaIiwiU2VxIjoxMzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzc2NDQ4MzYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEFGU19GU1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9hZnMvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9hZnMvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbmZzL2Fmcy9LY29uZmlnOjI6Y29uZmlnIEFGU19GU1xcbmZzL2Fmcy9LY29uZmlnLTMtXFx0dHJpc3RhdGUgXFxcIkFuZHJldyBGaWxlIFN5c3RlbSBzdXBwb3J0IChBRlMpXFxcIlxcbi0tXFxuZnMvYWZzL0tjb25maWc9MTc9Y29uZmlnIEFGU19ERUJVR1xcbi0tXFxuZnMvYWZzL0tjb25maWctMjYtXFxuZnMvYWZzL0tjb25maWc6Mjc6Y29uZmlnIEFGU19GU0NBQ0hFXFxuZnMvYWZzL0tjb25maWctMjgtXFx0Ym9vbCBcXFwiUHJvdmlkZSBBRlMgY2xpZW50IGNhY2hpbmcgc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjJUMDk6MzU6MjguMDYxODk0MTI5WiIsIlNlcSI6MTMxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMjIwMTIxNjQ1NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGaW5hbCBBRlNfRlMgQ2hlY2sqKlxuXG5Pa2F5LCBJJ20gY29uZmlkZW50IHRoYXQgYEFGU19GU2AgaXMgYSBzdWl0YWJsZSBzdGFydGluZyBwb2ludCBmb3IgdGhlIGNvZGUgY2hhbmdlcy4gTm93LCBpdCdzIHRpbWUgZm9yIG9uZSBsYXN0LCB2ZXJ5IHRob3JvdWdoIHJldmlldyBvZiB0aGUgY3J1Y2lhbCBmb2N1cyBzeW1ib2xzIHRoYXQgaGF2ZSBiZWVuIG1vZGlmaWVkIGJ5IHRoaXMgcGF0Y2guIExldCdzIG1ha2Ugc3VyZSB3ZSBoYXZlbid0IG1pc3NlZCBhbnl0aGluZyBjcnVjaWFsLiBJJ20gZm9jdXNpbmcgb246XG5cbiogICBgYWZzX2JyZWFrX2NhbGxiYWNrc2A6ICBNYWtpbmcgc3VyZSB0aGUgY2FsbGJhY2sgaGFuZGxpbmcgaXMgY29ycmVjdCwgYXMgdGhpcyBpcyBhIGZyZXF1ZW50IHNvdXJjZSBvZiBzdWJ0bGUgaXNzdWVzLlxuKiAgIGBhZnNfbG9va3VwX2NlbGxgOiBBIGNsb3NlIGNoZWNrIG9uIHRoZSBjZWxsIG1hbmFnZW1lbnQgbG9naWMsIGNyaXRpY2FsIHRvIGNvcnJlY3Qgb3BlcmF0aW9uLlxuKiAgIGBhZnNfcmVhZGRpcmAsIGBhZnNfbG9va3VwYCwgYGFmc19kX3JldmFsaWRhdGVgLCBhbmQgYGFmc19keW5yb290X3JlYWRkaXJgOiBJJ20gZ29pbmcgdGhyb3VnaCBlYWNoIG9mIHRoZXNlIGRpcmVjdG9yeSBvcGVyYXRpb25zIHdpdGggYSBmaW5lLXRvb3RoIGNvbWIuIEFueSBwcm9ibGVtcyBoZXJlIHdpbGwgY2F1c2Ugd2lkZXNwcmVhZCBpc3N1ZXMuXG4qICAgYGFmc19wdXRfb3BlcmF0aW9uYDogVGhlIG9wZXJhdGlvbiBtYW5hZ2VtZW50IGlzIHZpdGFsIGZvciBjbGVhbiByZXNvdXJjZSB1c2FnZS5cbiogICBgYWZzX2lnZXRgOiBUaGUgaW5vZGUgbWFuYWdlbWVudCBuZWVkcyBjYXJlZnVsIHJldmlldyBmb3IgcG90ZW50aWFsIGlub2RlIGxlYWtzIG9yIGNvcnJ1cHRpb24uXG4qICAgYGFmc19leHRyYWN0X3Zsc2VydmVyX2xpc3RgOiBJdCdzIGVzc2VudGlhbCB0byBlbnN1cmUgdGhlIFZMIHNlcnZlciBsaXN0IGV4dHJhY3Rpb24gaXMgYWNjdXJhdGUgYW5kIHJvYnVzdC5cbiogICBgYWZzX2NyZWF0ZV92b2x1bWVgOiBNYWtpbmcgY2VydGFpbiB0aGlzIGlzIHNvbGlkLCBhbmQgdGhhdCB2b2x1bWUgbWFuYWdlbWVudCBpcyBoYW5kbGVkIHByb3Blcmx5LlxuXG5CYXNpY2FsbHksIEknbSB2ZXJpZnlpbmcgdGhhdCB3ZSd2ZSBjb3ZlcmVkIHRoZSBjb3JlIGFyZWFzIHRoZSBwYXRjaCB0b3VjaGVzOiB0aGUgY2FsbGJhY2sgaGFuZGxpbmcsIGNlbGwgbWFuYWdlbWVudCwgZGlyZWN0b3J5IG9wZXJhdGlvbnMsIG92ZXJhbGwgb3BlcmF0aW9uIG1hbmFnZW1lbnQsIGlub2RlIG1hbmFnZW1lbnQsIFZMIHNlcnZlciBsaXN0IGV4dHJhY3Rpb24sIGFuZCB2b2x1bWUgbWFuYWdlbWVudC4gVGFraW5nIGEgZ29vZCBsb29rIGF0IGVhY2ggb2YgdGhlc2Ugc3ltYm9scywgSSdtIGZlZWxpbmcgZ29vZCBhYm91dCB0aGUgb3ZlcmFsbCBwaWN0dXJlLiBMb29rcyBzb2xpZC5cblxuXG4iLCJJbnB1dFRva2VucyI6NjQ3NzMsIk91dHB1dFRva2VucyI6MTgyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjE0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIyVDA5OjM1OjQwLjI2MzExNDE5M1oiLCJTZXEiOjEzMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjU2MTcxOTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkFGU19GU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImFmc19icmVha19jYWxsYmFja3NcIixcbiAgICBcImFmc19sb29rdXBfY2VsbFwiLFxuICAgIFwiYWZzX3JlYWRkaXJcIixcbiAgICBcImFmc19sb29rdXBcIixcbiAgICBcImFmc19kX3JldmFsaWRhdGVcIixcbiAgICBcImFmc19keW5yb290X3JlYWRkaXJcIixcbiAgICBcImFmc19wdXRfb3BlcmF0aW9uXCIsXG4gICAgXCJhZnNfaWdldFwiLFxuICAgIFwiYWZzX2V4dHJhY3RfdmxzZXJ2ZXJfbGlzdFwiLFxuICAgIFwiYWZzX2NyZWF0ZV92b2x1bWVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIEFGUyBmaWxlc3lzdGVtLCBtb2RpZnlpbmcgY2VsbCBhbGxvY2F0aW9uL2Rlc3RydWN0aW9uLCBjYWxsYmFjayBoYW5kbGluZywgZGlyZWN0b3J5IGl0ZXJhdGlvbiBhbmQgbG9va3VwLCBkeW5hbWljIHJvb3QgcmVhZGluZywgb3BlcmF0aW9uIG1hbmFnZW1lbnQsIGlub2RlIGluaXRpYWxpemF0aW9uL2V2aWN0aW9uLCBWTCBzZXJ2ZXIgbGlzdCBleHRyYWN0aW9uLCBhbmQgdm9sdW1lIGluc2VydGlvbi4gVGhlc2UgYXJlIHJlYWNoYWJsZSBjb3JlIEFGUyBsb2dpYyBwYXRocyB0aGF0IGNhbiBiZSBmdXp6ZWQgdmlhIGZpbGVzeXN0ZW0gb3BlcmF0aW9ucyBhbmQgbmV0d29yayBpbnRlcmFjdGlvbnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQUZTX0ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYWZzX2JyZWFrX2NhbGxiYWNrc1wiLFxuICAgIFwiYWZzX2xvb2t1cF9jZWxsXCIsXG4gICAgXCJhZnNfcmVhZGRpclwiLFxuICAgIFwiYWZzX2xvb2t1cFwiLFxuICAgIFwiYWZzX2RfcmV2YWxpZGF0ZVwiLFxuICAgIFwiYWZzX2R5bnJvb3RfcmVhZGRpclwiLFxuICAgIFwiYWZzX3B1dF9vcGVyYXRpb25cIixcbiAgICBcImFmc19pZ2V0XCIsXG4gICAgXCJhZnNfZXh0cmFjdF92bHNlcnZlcl9saXN0XCIsXG4gICAgXCJhZnNfY3JlYXRlX3ZvbHVtZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUgQUZTIGZpbGVzeXN0ZW0sIG1vZGlmeWluZyBjZWxsIGFsbG9jYXRpb24vZGVzdHJ1Y3Rpb24sIGNhbGxiYWNrIGhhbmRsaW5nLCBkaXJlY3RvcnkgaXRlcmF0aW9uIGFuZCBsb29rdXAsIGR5bmFtaWMgcm9vdCByZWFkaW5nLCBvcGVyYXRpb24gbWFuYWdlbWVudCwgaW5vZGUgaW5pdGlhbGl6YXRpb24vZXZpY3Rpb24sIFZMIHNlcnZlciBsaXN0IGV4dHJhY3Rpb24sIGFuZCB2b2x1bWUgaW5zZXJ0aW9uLiBUaGVzZSBhcmUgcmVhY2hhYmxlIGNvcmUgQUZTIGxvZ2ljIHBhdGhzIHRoYXQgY2FuIGJlIGZ1enplZCB2aWEgZmlsZXN5c3RlbSBvcGVyYXRpb25zIGFuZCBuZXR3b3JrIGludGVyYWN0aW9ucy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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:nil,}