Name: series-workflow4nr6j Phase: Succeeded StartedAt: 2026-06-26 20:13:59 +0000 UTC FinishedAt: 2026-06-26 22:46:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4nr6j[0] Phase: Succeeded StartedAt: 2026-06-26 20:13:59 +0000 UTC FinishedAt: 2026-06-26 20:24:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4nr6j[0].run-triage Phase: Succeeded StartedAt: 2026-06-26 20:13:59 +0000 UTC FinishedAt: 2026-06-26 20:24:19 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "189ce3c81f8188fb737d59a8a8784f074e830238", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "COMPACTION" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "189ce3c81f8188fb737d59a8a8784f074e830238", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "COMPACTION" ], "series_id": "216ebe58-31a8-43cd-82f6-6478e1894eff" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "__alloc_pages_direct_compact", "try_to_compact_pages", "compact_zone_order", "suitable_migration_source", "fast_find_migrateblock" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDIwOjIxPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0NPTVBBQ1RJT04mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtfX2FsbG9jX3BhZ2VzX2RpcmVjdF9jb21wYWN0JiMzNDssCiAgICAmIzM0O3RyeV90b19jb21wYWN0X3BhZ2VzJiMzNDssCiAgICAmIzM0O2NvbXBhY3Rfem9uZV9vcmRlciYjMzQ7LAogICAgJiMzNDtzdWl0YWJsZV9taWdyYXRpb25fc291cmNlJiMzNDssCiAgICAmIzM0O2Zhc3RfZmluZF9taWdyYXRlYmxvY2smIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgbWVtb3J5IGNvbXBhY3Rpb24gYW5kIGFsbG9jYXRpb24gbG9naWMsIHNwZWNpZmljYWxseSBob3cgZGlyZWN0IGNvbXBhY3Rpb24gYW5kIHJlY2xhaW0gaGFuZGxlIHBhZ2UgY2FwdHVyZSBhbmQgY29tcGFjdGlvbiBvcmRlcnMuIEl0IHByb21vdGVzIHRoZSBjb21wYWN0aW9uIG9yZGVyIHRvIGBwYWdlYmxvY2tfb3JkZXJgIGZvciBjZXJ0YWluIGFsbG9jYXRpb25zIHRvIHByZXZlbnQgZnJhZ21lbnRhdGlvbi4gVGhpcyBpcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljIHRoYXQgaXMgcmVhY2hhYmxlIGR1cmluZyBoaWdoLW9yZGVyIG1lbW9yeSBhbGxvY2F0aW9ucyBhbmQgbWVtb3J5IHByZXNzdXJlLiBJdCBpcyBmdW5jdGlvbmFsIGFuZCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDIwOjIxPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgMTZiYmM0ZTk5ZTFhZDZlYzcxMGMwOTk4MWRkMGQwMjZkMzJmYmExNVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgSnVuIDI2IDIwOjIxOjUyIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvY29tcGFjdGlvbi5oIGIvaW5jbHVkZS9saW51eC9jb21wYWN0aW9uLmhcbmluZGV4IGYyOWVmMDY1MzU0NmVkLi42NmEyZjcwZTllMDE5ZCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvY29tcGFjdGlvbi5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2NvbXBhY3Rpb24uaFxuQEAgLTU4LDYgJiM0Mzs1OCw3IEBAIGVudW0gY29tcGFjdF9yZXN1bHQge1xuIH07XG4gXG4gc3RydWN0IGFsbG9jX2NvbnRleHQ7IC8qIGluIG1tL2ludGVybmFsLmggKi9cbiYjNDM7c3RydWN0IGNhcHR1cmVfY29udHJvbDsgLyogaW4gbW0vaW50ZXJuYWwuaCAqL1xuIFxuIC8qXG4gICogTnVtYmVyIG9mIGZyZWUgb3JkZXItMCBwYWdlcyB0aGF0IHNob3VsZCBiZSBhdmFpbGFibGUgYWJvdmUgZ2l2ZW4gd2F0ZXJtYXJrXG5AQCAtOTIsNyAmIzQzOzkzLDcgQEAgZXh0ZXJuIGludCBmcmFnbWVudGF0aW9uX2luZGV4KHN0cnVjdCB6b25lICp6b25lLCB1bnNpZ25lZCBpbnQgb3JkZXIpO1xuIGV4dGVybiBlbnVtIGNvbXBhY3RfcmVzdWx0IHRyeV90b19jb21wYWN0X3BhZ2VzKGdmcF90IGdmcF9tYXNrLFxuIFx0XHR1bnNpZ25lZCBpbnQgb3JkZXIsIHVuc2lnbmVkIGludCBhbGxvY19mbGFncyxcbiBcdFx0Y29uc3Qgc3RydWN0IGFsbG9jX2NvbnRleHQgKmFjLCBlbnVtIGNvbXBhY3RfcHJpb3JpdHkgcHJpbyxcbi1cdFx0c3RydWN0IHBhZ2UgKipwYWdlKTtcbiYjNDM7XHRcdHN0cnVjdCBjYXB0dXJlX2NvbnRyb2wgKmNhcGMpO1xuIGV4dGVybiB2b2lkIHJlc2V0X2lzb2xhdGlvbl9zdWl0YWJsZShwZ19kYXRhX3QgKnBnZGF0KTtcbiBleHRlcm4gYm9vbCBjb21wYWN0aW9uX3N1aXRhYmxlKHN0cnVjdCB6b25lICp6b25lLCBpbnQgb3JkZXIsXG4gXHRcdFx0XHR1bnNpZ25lZCBsb25nIHdhdGVybWFyaywgaW50IGhpZ2hlc3Rfem9uZWlkeCk7XG5kaWZmIC0tZ2l0IGEvbW0vY29tcGFjdGlvbi5jIGIvbW0vY29tcGFjdGlvbi5jXG5pbmRleCBmMDg3NjVhZGUwMTRjZS4uYzI3MDFiZjFkMDRlZDcgMTAwNjQ0XG4tLS0gYS9tbS9jb21wYWN0aW9uLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL2NvbXBhY3Rpb24uY1xuQEAgLTEzODEsMTIgJiM0MzsxMzgxLDMzIEBAIHN0YXRpYyBib29sIHN1aXRhYmxlX21pZ3JhdGlvbl9zb3VyY2Uoc3RydWN0IGNvbXBhY3RfY29udHJvbCAqY2MsXG4gXHRpZiAocGFnZWJsb2NrX3NraXBfcGVyc2lzdGVudChwYWdlKSlcbiBcdFx0cmV0dXJuIGZhbHNlO1xuIFxuLVx0aWYgKChjYy1cdTAwM2Vtb2RlICE9IE1JR1JBVEVfQVNZTkMpIHx8ICFjYy1cdTAwM2VkaXJlY3RfY29tcGFjdGlvbilcbiYjNDM7XHQvKlxuJiM0MztcdCAqIEJhY2tncm91bmQgY29tcGFjdGlvbiBwcm9kdWNlcyBibG9ja3MgZm9yIHRoZSB6b25lIGF0XG4mIzQzO1x0ICogbGFyZ2UsIHdpdGggbm8gcGFydGljdWxhciBhbGxvY2F0aW9uIGNvbnRleHQuIEFsbG93IGFsbFxuJiM0MztcdCAqIGJsb2NrIHR5cGVzLCBpbmNsdWRpbmcgQ01BLlxuJiM0MztcdCAqL1xuJiM0MztcdGlmICghY2MtXHUwMDNlZGlyZWN0X2NvbXBhY3Rpb24pXG4gXHRcdHJldHVybiB0cnVlO1xuIFxuIFx0YmxvY2tfbXQgPSBnZXRfcGFnZWJsb2NrX21pZ3JhdGV0eXBlKHBhZ2UpO1xuIFxuLVx0aWYgKGNjLVx1MDAzZW1pZ3JhdGV0eXBlID09IE1JR1JBVEVfTU9WQUJMRSlcbiYjNDM7XHQvKlxuJiM0MztcdCAqIENNQSBwYWdlcyBjYW4gb25seSBiZSB0YWtlbiBieSBBTExPQ19DTUEgcmVxdWVzdHMuIEZvciBhbnlib2R5XG4mIzQzO1x0ICogZWxzZSwgdmFjYXRpbmcgYSBDTUEgYmxvY2sgY29uc3VtZXMgZnJlZSBwYWdlcyB0aGUgY2FsbGVyXG4mIzQzO1x0ICogY291bGQgaGF2ZSB1c2VkLCBhbmQgcHJvZHVjZXMgZnJlZSBwYWdlcyBpdCBjYW5ub3QuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKGlzX21pZ3JhdGVfY21hKGJsb2NrX210KSBcdTAwMjZcdTAwMjYgIShjYy1cdTAwM2VhbGxvY19mbGFncyBcdTAwMjYgQUxMT0NfQ01BKSlcbiYjNDM7XHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XG4mIzQzO1x0aWYgKGNjLVx1MDAzZW1vZGUgIT0gTUlHUkFURV9BU1lOQylcbiYjNDM7XHRcdHJldHVybiB0cnVlO1xuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFByZXZlbnQgc21hbGwgdW5tb3ZhYmxlL3JlY2xhaW1hYmxlIHJlcXVlc3RzIGZyb20gcG9sbHV0aW5nXG4mIzQzO1x0ICogbW92YWJsZSBibG9ja3MgdGhyb3VnaCBmYWxsYmFja3MuIFdob2xlLWJsb2NrIHByb2R1Y3Rpb24gaXNcbiYjNDM7XHQgKiBleGVtcHQgYXMgdGhlIGFsbG9jYXRvciBjbGFpbXMgYW5kIGNvbnZlcnRzIHRoZXNlLlxuJiM0MztcdCAqL1xuJiM0MztcdGlmIChjYy1cdTAwM2VtaWdyYXRldHlwZSA9PSBNSUdSQVRFX01PVkFCTEUgfHwgY2MtXHUwMDNlb3JkZXIgXHUwMDNlPSBwYWdlYmxvY2tfb3JkZXIpXG4gXHRcdHJldHVybiBpc19taWdyYXRlX21vdmFibGUoYmxvY2tfbXQpO1xuIFx0ZWxzZVxuIFx0XHRyZXR1cm4gYmxvY2tfbXQgPT0gY2MtXHUwMDNlbWlncmF0ZXR5cGU7XG5AQCAtMTk3NCwxMiAmIzQzOzE5OTUsMTIgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgZmFzdF9maW5kX21pZ3JhdGVibG9jayhzdHJ1Y3QgY29tcGFjdF9jb250cm9sICpjYylcbiBcdFx0cmV0dXJuIHBmbjtcbiBcbiBcdC8qXG4tXHQgKiBPbmx5IGFsbG93IGtjb21wYWN0ZCBhbmQgZGlyZWN0IHJlcXVlc3RzIGZvciBtb3ZhYmxlIHBhZ2VzIHRvXG4tXHQgKiBxdWlja2x5IGNsZWFyIG91dCBhIE1PVkFCTEUgcGFnZWJsb2NrIGZvciBhbGxvY2F0aW9uLiBUaGlzXG4tXHQgKiByZWR1Y2VzIHRoZSByaXNrIHRoYXQgYSBsYXJnZSBtb3ZhYmxlIHBhZ2VibG9jayBpcyBmcmVlZCBmb3Jcbi1cdCAqIGFuIHVubW92YWJsZS9yZWNsYWltYWJsZSBzbWFsbCBhbGxvY2F0aW9uLlxuJiM0MztcdCAqIFByZXZlbnQgc21hbGwgdW5tb3ZhYmxlL3JlY2xhaW1hYmxlIHJlcXVlc3RzIGZyb20gcG9sbHV0aW5nXG4mIzQzO1x0ICogbW92YWJsZSBibG9ja3MgdGhyb3VnaCBmYWxsYmFja3MuIFdob2xlLWJsb2NrIHByb2R1Y3Rpb24gaXNcbiYjNDM7XHQgKiBleGVtcHQgYXMgdGhlIGFsbG9jYXRvciBjbGFpbXMgYW5kIGNvbnZlcnRzIHRoZXNlLlxuIFx0ICovXG4tXHRpZiAoY2MtXHUwMDNlZGlyZWN0X2NvbXBhY3Rpb24gXHUwMDI2XHUwMDI2IGNjLVx1MDAzZW1pZ3JhdGV0eXBlICE9IE1JR1JBVEVfTU9WQUJMRSlcbiYjNDM7XHRpZiAoY2MtXHUwMDNlZGlyZWN0X2NvbXBhY3Rpb24gXHUwMDI2XHUwMDI2IGNjLVx1MDAzZW1pZ3JhdGV0eXBlICE9IE1JR1JBVEVfTU9WQUJMRSBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgY2MtXHUwMDNlb3JkZXIgXHUwMDNjIHBhZ2VibG9ja19vcmRlcilcbiBcdFx0cmV0dXJuIHBmbjtcbiBcbiBcdC8qXG5AQCAtMjc3MCw3ICYjNDM7Mjc5MSw3IEBAIGNvbXBhY3Rfem9uZShzdHJ1Y3QgY29tcGFjdF9jb250cm9sICpjYywgc3RydWN0IGNhcHR1cmVfY29udHJvbCAqY2FwYylcbiBzdGF0aWMgZW51bSBjb21wYWN0X3Jlc3VsdCBjb21wYWN0X3pvbmVfb3JkZXIoc3RydWN0IHpvbmUgKnpvbmUsIGludCBvcmRlcixcbiBcdFx0Z2ZwX3QgZ2ZwX21hc2ssIGVudW0gY29tcGFjdF9wcmlvcml0eSBwcmlvLFxuIFx0XHR1bnNpZ25lZCBpbnQgYWxsb2NfZmxhZ3MsIGludCBoaWdoZXN0X3pvbmVpZHgsXG4tXHRcdHN0cnVjdCBwYWdlICoqY2FwdHVyZSlcbiYjNDM7XHRcdHN0cnVjdCBjYXB0dXJlX2NvbnRyb2wgKmNhcGMpXG4ge1xuIFx0ZW51bSBjb21wYWN0X3Jlc3VsdCByZXQ7XG4gXHRzdHJ1Y3QgY29tcGFjdF9jb250cm9sIGNjID0ge1xuQEAgLTI3ODcsMzUgJiM0MzsyODA4LDIyIEBAIHN0YXRpYyBlbnVtIGNvbXBhY3RfcmVzdWx0IGNvbXBhY3Rfem9uZV9vcmRlcihzdHJ1Y3Qgem9uZSAqem9uZSwgaW50IG9yZGVyLFxuIFx0XHQuaWdub3JlX3NraXBfaGludCA9IChwcmlvID09IE1JTl9DT01QQUNUX1BSSU9SSVRZKSxcbiBcdFx0Lmlnbm9yZV9ibG9ja19zdWl0YWJsZSA9IChwcmlvID09IE1JTl9DT01QQUNUX1BSSU9SSVRZKVxuIFx0fTtcbi1cdHN0cnVjdCBjYXB0dXJlX2NvbnRyb2wgY2FwYyA9IHtcbi1cdFx0LmNjID0gXHUwMDI2Y2MsXG4tXHRcdC5wYWdlID0gTlVMTCxcbi1cdH07XG4gXG4tXHQvKlxuLVx0ICogTWFrZSBzdXJlIHRoZSBzdHJ1Y3RzIGFyZSByZWFsbHkgaW5pdGlhbGl6ZWQgYmVmb3JlIHdlIGV4cG9zZSB0aGVcbi1cdCAqIGNhcHR1cmUgY29udHJvbCwgaW4gY2FzZSB3ZSBhcmUgaW50ZXJydXB0ZWQgYW5kIHRoZSBpbnRlcnJ1cHQgaGFuZGxlclxuLVx0ICogZnJlZXMgYSBwYWdlLlxuLVx0ICovXG4mIzQzO1x0LyogU2VlIHRoZSBjb21tZW50IGluIF9fYWxsb2NfcGFnZXNfZGlyZWN0X2NvbXBhY3QoKSAqL1xuIFx0YmFycmllcigpO1xuLVx0V1JJVEVfT05DRShjdXJyZW50LVx1MDAzZWNhcHR1cmVfY29udHJvbCwgXHUwMDI2Y2FwYyk7XG4mIzQzO1x0V1JJVEVfT05DRShjYXBjLVx1MDAzZWNjLCBcdTAwMjZjYyk7XG4gXG4tXHRyZXQgPSBjb21wYWN0X3pvbmUoXHUwMDI2Y2MsIFx1MDAyNmNhcGMpO1xuJiM0MztcdHJldCA9IGNvbXBhY3Rfem9uZShcdTAwMjZjYywgY2FwYyk7XG4mIzQzO1xuJiM0MztcdFdSSVRFX09OQ0UoY2FwYy1cdTAwM2VjYywgTlVMTCk7XG4gXG4tXHQvKlxuLVx0ICogTWFrZSBzdXJlIHdlIGhpZGUgY2FwdHVyZSBjb250cm9sIGZpcnN0IGJlZm9yZSB3ZSByZWFkIHRoZSBjYXB0dXJlZFxuLVx0ICogcGFnZSBwb2ludGVyLCBvdGhlcndpc2UgYW4gaW50ZXJydXB0IGNvdWxkIGZyZWUgYW5kIGNhcHR1cmUgYSBwYWdlXG4tXHQgKiBhbmQgd2Ugd291bGQgbGVhayBpdC5cbi1cdCAqL1xuLVx0V1JJVEVfT05DRShjdXJyZW50LVx1MDAzZWNhcHR1cmVfY29udHJvbCwgTlVMTCk7XG4tXHQqY2FwdHVyZSA9IFJFQURfT05DRShjYXBjLnBhZ2UpO1xuIFx0LypcbiBcdCAqIFRlY2huaWNhbGx5LCBpdCBpcyBhbHNvIHBvc3NpYmxlIHRoYXQgY29tcGFjdGlvbiBpcyBza2lwcGVkIGJ1dFxuIFx0ICogdGhlIHBhZ2UgaXMgc3RpbGwgY2FwdHVyZWQgb3V0IG9mIGx1Y2soSVJRIGNhbWUgYW5kIGZyZWVkIHRoZSBwYWdlKS5cbiBcdCAqIFJldHVybmluZyBDT01QQUNUX1NVQ0NFU1MgaW4gc3VjaCBjYXNlcyBoZWxwcyBpbiBwcm9wZXJseSBhY2NvdW50aW5nXG4gXHQgKiB0aGUgQ09NUEFDVFtTVEFMTHxGQUlMXSB3aGVuIGNvbXBhY3Rpb24gaXMgc2tpcHBlZC5cbiBcdCAqL1xuLVx0aWYgKCpjYXB0dXJlKVxuJiM0MztcdGlmIChjYXBjLVx1MDAzZXBhZ2UpXG4gXHRcdHJldCA9IENPTVBBQ1RfU1VDQ0VTUztcbiBcbiBcdHJldHVybiByZXQ7XG5AQCAtMjgyOCwxMyAmIzQzOzI4MzYsMTMgQEAgc3RhdGljIGVudW0gY29tcGFjdF9yZXN1bHQgY29tcGFjdF96b25lX29yZGVyKHN0cnVjdCB6b25lICp6b25lLCBpbnQgb3JkZXIsXG4gICogQGFsbG9jX2ZsYWdzOiBUaGUgYWxsb2NhdGlvbiBmbGFncyBvZiB0aGUgY3VycmVudCBhbGxvY2F0aW9uXG4gICogQGFjOiBUaGUgY29udGV4dCBvZiBjdXJyZW50IGFsbG9jYXRpb25cbiAgKiBAcHJpbzogRGV0ZXJtaW5lcyBob3cgaGFyZCBkaXJlY3QgY29tcGFjdGlvbiBzaG91bGQgdHJ5IHRvIHN1Y2NlZWRcbi0gKiBAY2FwdHVyZTogUG9pbnRlciB0byBmcmVlIHBhZ2UgY3JlYXRlZCBieSBjb21wYWN0aW9uIHdpbGwgYmUgc3RvcmVkIGhlcmVcbiYjNDM7ICogQGNhcGM6IFRoZSBjb250ZXh0IGZvciBjYXB0dXJpbmcgcGFnZXMgZHVyaW5nIGZyZWVpbmdcbiAgKlxuICAqIFRoaXMgaXMgdGhlIG1haW4gZW50cnkgcG9pbnQgZm9yIGRpcmVjdCBwYWdlIGNvbXBhY3Rpb24uXG4gICovXG4gZW51bSBjb21wYWN0X3Jlc3VsdCB0cnlfdG9fY29tcGFjdF9wYWdlcyhnZnBfdCBnZnBfbWFzaywgdW5zaWduZWQgaW50IG9yZGVyLFxuIFx0XHR1bnNpZ25lZCBpbnQgYWxsb2NfZmxhZ3MsIGNvbnN0IHN0cnVjdCBhbGxvY19jb250ZXh0ICphYyxcbi1cdFx0ZW51bSBjb21wYWN0X3ByaW9yaXR5IHByaW8sIHN0cnVjdCBwYWdlICoqY2FwdHVyZSlcbiYjNDM7XHRcdGVudW0gY29tcGFjdF9wcmlvcml0eSBwcmlvLCBzdHJ1Y3QgY2FwdHVyZV9jb250cm9sICpjYXBjKVxuIHtcbiBcdHN0cnVjdCB6b25lcmVmICp6O1xuIFx0c3RydWN0IHpvbmUgKnpvbmU7XG5AQCAtMjg2Miw3ICYjNDM7Mjg3MCw3IEBAIGVudW0gY29tcGFjdF9yZXN1bHQgdHJ5X3RvX2NvbXBhY3RfcGFnZXMoZ2ZwX3QgZ2ZwX21hc2ssIHVuc2lnbmVkIGludCBvcmRlcixcbiBcdFx0fVxuIFxuIFx0XHRzdGF0dXMgPSBjb21wYWN0X3pvbmVfb3JkZXIoem9uZSwgb3JkZXIsIGdmcF9tYXNrLCBwcmlvLFxuLVx0XHRcdFx0YWxsb2NfZmxhZ3MsIGFjLVx1MDAzZWhpZ2hlc3Rfem9uZWlkeCwgY2FwdHVyZSk7XG4mIzQzO1x0XHRcdFx0YWxsb2NfZmxhZ3MsIGFjLVx1MDAzZWhpZ2hlc3Rfem9uZWlkeCwgY2FwYyk7XG4gXHRcdHJjID0gbWF4KHN0YXR1cywgcmMpO1xuIFxuIFx0XHQvKiBUaGUgYWxsb2NhdGlvbiBzaG91bGQgc3VjY2VlZCwgc3RvcCBjb21wYWN0aW5nICovXG5kaWZmIC0tZ2l0IGEvbW0vaW50ZXJuYWwuaCBiL21tL2ludGVybmFsLmhcbmluZGV4IDE4MWU3OWYxZDZhMjA3Li4xZjYzNmNmYzg1OWExYSAxMDA2NDRcbi0tLSBhL21tL2ludGVybmFsLmhcbiYjNDM7JiM0MzsmIzQzOyBiL21tL2ludGVybmFsLmhcbkBAIC0xMDYwLDYgJiM0MzsxMDYwLDEzIEBAIHN0cnVjdCBjb21wYWN0X2NvbnRyb2wge1xuICAqL1xuIHN0cnVjdCBjYXB0dXJlX2NvbnRyb2wge1xuIFx0c3RydWN0IGNvbXBhY3RfY29udHJvbCAqY2M7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBBbGxvY2F0aW9uIHJlcXVlc3Qgb3JkZXIuIE1heSBkaWZmZXIgZnJvbSB0aGUgY29tcGFjdGlvblxuJiM0MztcdCAqIG9yZGVyOiBkZWZyYWdfbW9kZSBwcm9tb3RlcyBzdWItYmxvY2sgYWxsb2NhdGlvbnMgdG9cbiYjNDM7XHQgKiBwYWdlYmxvY2stb3JkZXIgY29tcGFjdGlvbjsgY2FwdHVyZSBzdGlsbCBtYXRjaGVzIGF0IHRoZVxuJiM0MztcdCAqIG9yaWdpbmFsIGFsbG9jYXRpb24gb3JkZXIgc28gcHJlcF9uZXdfcGFnZSgpIGlzIGNvbnNpc3RlbnQuXG4mIzQzO1x0ICovXG4mIzQzO1x0aW50IG9yZGVyO1xuIFx0c3RydWN0IHBhZ2UgKnBhZ2U7XG4gfTtcbiBcbmRpZmYgLS1naXQgYS9tbS9wYWdlX2FsbG9jLmMgYi9tbS9wYWdlX2FsbG9jLmNcbmluZGV4IGVlOTAyYTQ2OGMyZjViLi41NzVhOTlhNGM3MjM4NCAxMDA2NDRcbi0tLSBhL21tL3BhZ2VfYWxsb2MuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vcGFnZV9hbGxvYy5jXG5AQCAtNzE4LDcgJiM0Mzs3MTgsNyBAQCBzdGF0aWMgaW5saW5lIHN0cnVjdCBjYXB0dXJlX2NvbnRyb2wgKnRhc2tfY2FwYyhzdHJ1Y3Qgem9uZSAqem9uZSlcbiB7XG4gXHRzdHJ1Y3QgY2FwdHVyZV9jb250cm9sICpjYXBjID0gY3VycmVudC1cdTAwM2VjYXB0dXJlX2NvbnRyb2w7XG4gXG4tXHRyZXR1cm4gdW5saWtlbHkoY2FwYykgXHUwMDI2XHUwMDI2XG4mIzQzO1x0cmV0dXJuIHVubGlrZWx5KGNhcGMgXHUwMDI2XHUwMDI2IGNhcGMtXHUwMDNlY2MpIFx1MDAyNlx1MDAyNlxuIFx0XHQhKGN1cnJlbnQtXHUwMDNlZmxhZ3MgXHUwMDI2IFBGX0tUSFJFQUQpIFx1MDAyNlx1MDAyNlxuIFx0XHQhY2FwYy1cdTAwM2VwYWdlIFx1MDAyNlx1MDAyNlxuIFx0XHRjYXBjLVx1MDAzZWNjLVx1MDAzZXpvbmUgPT0gem9uZSA/IGNhcGMgOiBOVUxMO1xuQEAgLTcyOCw3ICYjNDM7NzI4LDcgQEAgc3RhdGljIGlubGluZSBib29sXG4gY29tcGFjdGlvbl9jYXB0dXJlKHN0cnVjdCBjYXB0dXJlX2NvbnRyb2wgKmNhcGMsIHN0cnVjdCBwYWdlICpwYWdlLFxuIFx0XHQgICBpbnQgb3JkZXIsIGludCBtaWdyYXRldHlwZSlcbiB7XG4tXHRpZiAoIWNhcGMgfHwgb3JkZXIgIT0gY2FwYy1cdTAwM2VjYy1cdTAwM2VvcmRlcilcbiYjNDM7XHRpZiAoIWNhcGMgfHwgb3JkZXIgIT0gY2FwYy1cdTAwM2VvcmRlcilcbiBcdFx0cmV0dXJuIGZhbHNlO1xuIFxuIFx0LyogRG8gbm90IGFjY2lkZW50YWxseSBwb2xsdXRlIENNQSBvciBpc29sYXRlZCByZWdpb25zKi9cbkBAIC03NDgsNyAmIzQzOzc0OCw3IEBAIGNvbXBhY3Rpb25fY2FwdHVyZShzdHJ1Y3QgY2FwdHVyZV9jb250cm9sICpjYXBjLCBzdHJ1Y3QgcGFnZSAqcGFnZSxcbiBcdFx0cmV0dXJuIGZhbHNlO1xuIFxuIFx0aWYgKG1pZ3JhdGV0eXBlICE9IGNhcGMtXHUwMDNlY2MtXHUwMDNlbWlncmF0ZXR5cGUpXG4tXHRcdHRyYWNlX21tX3BhZ2VfYWxsb2NfZXh0ZnJhZyhwYWdlLCBjYXBjLVx1MDAzZWNjLVx1MDAzZW9yZGVyLCBvcmRlcixcbiYjNDM7XHRcdHRyYWNlX21tX3BhZ2VfYWxsb2NfZXh0ZnJhZyhwYWdlLCBjYXBjLVx1MDAzZW9yZGVyLCBvcmRlcixcbiBcdFx0XHRcdFx0ICAgIGNhcGMtXHUwMDNlY2MtXHUwMDNlbWlncmF0ZXR5cGUsIG1pZ3JhdGV0eXBlKTtcbiBcbiBcdGNhcGMtXHUwMDNlcGFnZSA9IHBhZ2U7XG5AQCAtNDE0NiwyMSAmIzQzOzQxNDYsNTkgQEAgX19hbGxvY19wYWdlc19kaXJlY3RfY29tcGFjdChnZnBfdCBnZnBfbWFzaywgdW5zaWduZWQgaW50IG9yZGVyLFxuIFx0c3RydWN0IHBhZ2UgKnBhZ2UgPSBOVUxMO1xuIFx0dW5zaWduZWQgbG9uZyBwZmxhZ3M7XG4gXHR1bnNpZ25lZCBpbnQgbm9yZWNsYWltX2ZsYWc7XG4mIzQzO1x0c3RydWN0IGNhcHR1cmVfY29udHJvbCBjYXBjID0ge1xuJiM0MztcdFx0Lm9yZGVyID0gb3JkZXIsXG4mIzQzO1x0XHQucGFnZSA9IE5VTEwsXG4mIzQzO1x0fTtcbiYjNDM7XHRpbnQgY29tcGFjdF9vcmRlciA9IG9yZGVyO1xuIFxuLVx0aWYgKCFvcmRlcilcbiYjNDM7XHQvKlxuJiM0MztcdCAqIElmIGZhbGxiYWNrcyBhcmUgbm90IHBlcm1pdHRlZCAoZGVmcmFnX21vZGUpLCB3ZSBlaXRoZXJcbiYjNDM7XHQgKiBuZWVkIHRvIHJlY2xhaW0gc3BhY2UgaW4gYSBibG9jayBvZiBtYXRjaGluZyB0eXBlLCBvciBjbGVhclxuJiM0MztcdCAqIG91dCBhbiBlbnRpcmUgYmxvY2sgdG8gYWxsb3cgX19ybXF1ZXVlX2NsYWltKCkgdG8gY29udmVydC5cbiYjNDM7XHQgKlxuJiM0MztcdCAqIFJlY2xhaW0gYnkgaXRzZWxmIGlzIHByaW1hcmlseSBmcmVlaW5nIHNwYWNlIGluIG1vdmFibGVcbiYjNDM7XHQgKiBibG9ja3MsIHNpbmNlIHRoYXQmIzM5O3Mgd2hlcmUgdGhlIExSVSBwYWdlcyBsaXZlLiBTbyB0aGlzXG4mIzQzO1x0ICogd29ya3MgZm9yIG1vdmFibGUgcmVxdWVzdHMsIGJ1dCBub3QgZm9yIG90aGVycy5cbiYjNDM7XHQgKlxuJiM0MztcdCAqIEZvciB0aG9zZSwgcHJvbW90ZSB0aGUgb3JkZXIgdG8gaGVscCBtYWtlIGJsb2NrcywgaW5zdGVhZFxuJiM0MztcdCAqIG9mIHNwaW5uaW5nIGluIHJlY2xhaW0gYWxvbmUgdW5wcm9kdWN0aXZlbHkuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKChhbGxvY19mbGFncyBcdTAwMjYgQUxMT0NfTk9GUkFHTUVOVCkgXHUwMDI2XHUwMDI2IGFjLVx1MDAzZW1pZ3JhdGV0eXBlICE9IE1JR1JBVEVfTU9WQUJMRSlcbiYjNDM7XHRcdGNvbXBhY3Rfb3JkZXIgPSBtYXgob3JkZXIsIHBhZ2VibG9ja19vcmRlcik7XG4mIzQzO1xuJiM0MztcdGlmICghY29tcGFjdF9vcmRlcilcbiBcdFx0cmV0dXJuIE5VTEw7XG4gXG4mIzQzO1x0LypcbiYjNDM7XHQgKiBNYWtlIHN1cmUgdGhlIHN0cnVjdHMgYXJlIHJlYWxseSBpbml0aWFsaXplZCBiZWZvcmUgd2UgZXhwb3NlIHRoZVxuJiM0MztcdCAqIGNhcHR1cmUgY29udHJvbCwgaW4gY2FzZSB3ZSBhcmUgaW50ZXJydXB0ZWQgYW5kIHRoZSBpbnRlcnJ1cHQgaGFuZGxlclxuJiM0MztcdCAqIGZyZWVzIGEgcGFnZS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRiYXJyaWVyKCk7XG4mIzQzO1x0V1JJVEVfT05DRShjdXJyZW50LVx1MDAzZWNhcHR1cmVfY29udHJvbCwgXHUwMDI2Y2FwYyk7XG4mIzQzO1xuIFx0cHNpX21lbXN0YWxsX2VudGVyKFx1MDAyNnBmbGFncyk7XG4gXHRkZWxheWFjY3RfY29tcGFjdF9zdGFydCgpO1xuJiM0MztcdGZzX3JlY2xhaW1fYWNxdWlyZShnZnBfbWFzayk7XG4gXHRub3JlY2xhaW1fZmxhZyA9IG1lbWFsbG9jX25vcmVjbGFpbV9zYXZlKCk7XG4gXG4tXHQqY29tcGFjdF9yZXN1bHQgPSB0cnlfdG9fY29tcGFjdF9wYWdlcyhnZnBfbWFzaywgb3JkZXIsIGFsbG9jX2ZsYWdzLCBhYyxcbi1cdFx0XHRcdFx0XHRcdFx0cHJpbywgXHUwMDI2cGFnZSk7XG4mIzQzO1x0KmNvbXBhY3RfcmVzdWx0ID0gdHJ5X3RvX2NvbXBhY3RfcGFnZXMoZ2ZwX21hc2ssIGNvbXBhY3Rfb3JkZXIsXG4mIzQzO1x0XHRcdFx0XHQgICAgICAgYWxsb2NfZmxhZ3MsIGFjLCBwcmlvLCBcdTAwMjZjYXBjKTtcbiBcbiBcdG1lbWFsbG9jX25vcmVjbGFpbV9yZXN0b3JlKG5vcmVjbGFpbV9mbGFnKTtcbiYjNDM7XHRmc19yZWNsYWltX3JlbGVhc2UoZ2ZwX21hc2spO1xuIFx0cHNpX21lbXN0YWxsX2xlYXZlKFx1MDAyNnBmbGFncyk7XG4gXHRkZWxheWFjY3RfY29tcGFjdF9lbmQoKTtcbiBcbiYjNDM7XHQvKlxuJiM0MztcdCAqIE1ha2Ugc3VyZSB3ZSBoaWRlIGNhcHR1cmUgY29udHJvbCBmaXJzdCBiZWZvcmUgd2UgcmVhZCB0aGUgY2FwdHVyZWRcbiYjNDM7XHQgKiBwYWdlIHBvaW50ZXIsIG90aGVyd2lzZSBhbiBpbnRlcnJ1cHQgY291bGQgZnJlZSBhbmQgY2FwdHVyZSBhIHBhZ2VcbiYjNDM7XHQgKiBhbmQgd2Ugd291bGQgbGVhayBpdC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRXUklURV9PTkNFKGN1cnJlbnQtXHUwMDNlY2FwdHVyZV9jb250cm9sLCBOVUxMKTtcbiYjNDM7XHRwYWdlID0gUkVBRF9PTkNFKGNhcGMucGFnZSk7XG4mIzQzO1xuIFx0aWYgKCpjb21wYWN0X3Jlc3VsdCA9PSBDT01QQUNUX1NLSVBQRUQgfHxcbiBcdCAgICAqY29tcGFjdF9yZXN1bHQgPT0gQ09NUEFDVF9ERUZFUlJFRClcbiBcdFx0cmV0dXJuIE5VTEw7XG5AQCAtNDE4Miw3ICYjNDM7NDIyMCw3IEBAIF9fYWxsb2NfcGFnZXNfZGlyZWN0X2NvbXBhY3QoZ2ZwX3QgZ2ZwX21hc2ssIHVuc2lnbmVkIGludCBvcmRlcixcbiBcdFx0c3RydWN0IHpvbmUgKnpvbmUgPSBwYWdlX3pvbmUocGFnZSk7XG4gXG4gXHRcdHpvbmUtXHUwMDNlY29tcGFjdF9ibG9ja3NraXBfZmx1c2ggPSBmYWxzZTtcbi1cdFx0Y29tcGFjdGlvbl9kZWZlcl9yZXNldCh6b25lLCBvcmRlciwgdHJ1ZSk7XG4mIzQzO1x0XHRjb21wYWN0aW9uX2RlZmVyX3Jlc2V0KHpvbmUsIGNvbXBhY3Rfb3JkZXIsIHRydWUpO1xuIFx0XHRjb3VudF92bV9ldmVudChDT01QQUNUU1VDQ0VTUyk7XG4gXHRcdHJldHVybiBwYWdlO1xuIFx0fVxuQEAgLTQ0MjIsOSAmIzQzOzQ0NjAsMTQgQEAgX19hbGxvY19wYWdlc19kaXJlY3RfcmVjbGFpbShnZnBfdCBnZnBfbWFzaywgdW5zaWduZWQgaW50IG9yZGVyLFxuIFx0c3RydWN0IHBhZ2UgKnBhZ2UgPSBOVUxMO1xuIFx0dW5zaWduZWQgbG9uZyBwZmxhZ3M7XG4gXHRib29sIGRyYWluZWQgPSBmYWxzZTtcbiYjNDM7XHRpbnQgcmVjbGFpbV9vcmRlciA9IG9yZGVyO1xuJiM0MztcbiYjNDM7XHQvKiBNYXRjaCB0aGUgc2xvd3BhdGggY29tcGFjdGlvbiBwcm9tb3Rpb24gaW4gX19hbGxvY19wYWdlc19kaXJlY3RfY29tcGFjdCAqL1xuJiM0MztcdGlmICgoYWxsb2NfZmxhZ3MgXHUwMDI2IEFMTE9DX05PRlJBR01FTlQpIFx1MDAyNlx1MDAyNiBhYy1cdTAwM2VtaWdyYXRldHlwZSAhPSBNSUdSQVRFX01PVkFCTEUpXG4mIzQzO1x0XHRyZWNsYWltX29yZGVyID0gbWF4KG9yZGVyLCBwYWdlYmxvY2tfb3JkZXIpO1xuIFxuIFx0cHNpX21lbXN0YWxsX2VudGVyKFx1MDAyNnBmbGFncyk7XG4tXHQqZGlkX3NvbWVfcHJvZ3Jlc3MgPSBfX3BlcmZvcm1fcmVjbGFpbShnZnBfbWFzaywgb3JkZXIsIGFjKTtcbiYjNDM7XHQqZGlkX3NvbWVfcHJvZ3Jlc3MgPSBfX3BlcmZvcm1fcmVjbGFpbShnZnBfbWFzaywgcmVjbGFpbV9vcmRlciwgYWMpO1xuIFx0aWYgKHVubGlrZWx5KCEoKmRpZF9zb21lX3Byb2dyZXNzKSkpXG4gXHRcdGdvdG8gb3V0O1xuIFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDIwOjIxPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0NPTVBBQ1RJT04mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtfX2FsbG9jX3BhZ2VzX2RpcmVjdF9jb21wYWN0JiMzNDssCiAgICAmIzM0O3RyeV90b19jb21wYWN0X3BhZ2VzJiMzNDssCiAgICAmIzM0O2NvbXBhY3Rfem9uZV9vcmRlciYjMzQ7LAogICAgJiMzNDtzdWl0YWJsZV9taWdyYXRpb25fc291cmNlJiMzNDssCiAgICAmIzM0O2Zhc3RfZmluZF9taWdyYXRlYmxvY2smIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgbWVtb3J5IGNvbXBhY3Rpb24gYW5kIGFsbG9jYXRpb24gbG9naWMsIHNwZWNpZmljYWxseSBob3cgZGlyZWN0IGNvbXBhY3Rpb24gYW5kIHJlY2xhaW0gaGFuZGxlIHBhZ2UgY2FwdHVyZSBhbmQgY29tcGFjdGlvbiBvcmRlcnMuIEl0IHByb21vdGVzIHRoZSBjb21wYWN0aW9uIG9yZGVyIHRvIGBwYWdlYmxvY2tfb3JkZXJgIGZvciBjZXJ0YWluIGFsbG9jYXRpb25zIHRvIHByZXZlbnQgZnJhZ21lbnRhdGlvbi4gVGhpcyBpcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljIHRoYXQgaXMgcmVhY2hhYmxlIGR1cmluZyBoaWdoLW9yZGVyIG1lbW9yeSBhbGxvY2F0aW9ucyBhbmQgbWVtb3J5IHByZXNzdXJlLiBJdCBpcyBmdW5jdGlvbmFsIGFuZCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdAogICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksCiAgIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAxNmJiYzRlOTllMWFkNmVjNzEwYzA5OTgxZGQwZDAyNmQzMmZiYTE1CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIEZyaSBKdW4gMjYgMjA6MjE6NTIgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2NvbXBhY3Rpb24uaCBiL2luY2x1ZGUvbGludXgvY29tcGFjdGlvbi5oCmluZGV4IGYyOWVmMDY1MzU0NmVkLi42NmEyZjcwZTllMDE5ZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9jb21wYWN0aW9uLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9jb21wYWN0aW9uLmgKQEAgLTU4LDYgJiM0Mzs1OCw3IEBAIGVudW0gY29tcGFjdF9yZXN1bHQgewogfTsKIAogc3RydWN0IGFsbG9jX2NvbnRleHQ7IC8qIGluIG1tL2ludGVybmFsLmggKi8KJiM0MztzdHJ1Y3QgY2FwdHVyZV9jb250cm9sOyAvKiBpbiBtbS9pbnRlcm5hbC5oICovCiAKIC8qCiAgKiBOdW1iZXIgb2YgZnJlZSBvcmRlci0wIHBhZ2VzIHRoYXQgc2hvdWxkIGJlIGF2YWlsYWJsZSBhYm92ZSBnaXZlbiB3YXRlcm1hcmsKQEAgLTkyLDcgJiM0Mzs5Myw3IEBAIGV4dGVybiBpbnQgZnJhZ21lbnRhdGlvbl9pbmRleChzdHJ1Y3Qgem9uZSAqem9uZSwgdW5zaWduZWQgaW50IG9yZGVyKTsKIGV4dGVybiBlbnVtIGNvbXBhY3RfcmVzdWx0IHRyeV90b19jb21wYWN0X3BhZ2VzKGdmcF90IGdmcF9tYXNrLAogCQl1bnNpZ25lZCBpbnQgb3JkZXIsIHVuc2lnbmVkIGludCBhbGxvY19mbGFncywKIAkJY29uc3Qgc3RydWN0IGFsbG9jX2NvbnRleHQgKmFjLCBlbnVtIGNvbXBhY3RfcHJpb3JpdHkgcHJpbywKLQkJc3RydWN0IHBhZ2UgKipwYWdlKTsKJiM0MzsJCXN0cnVjdCBjYXB0dXJlX2NvbnRyb2wgKmNhcGMpOwogZXh0ZXJuIHZvaWQgcmVzZXRfaXNvbGF0aW9uX3N1aXRhYmxlKHBnX2RhdGFfdCAqcGdkYXQpOwogZXh0ZXJuIGJvb2wgY29tcGFjdGlvbl9zdWl0YWJsZShzdHJ1Y3Qgem9uZSAqem9uZSwgaW50IG9yZGVyLAogCQkJCXVuc2lnbmVkIGxvbmcgd2F0ZXJtYXJrLCBpbnQgaGlnaGVzdF96b25laWR4KTsKZGlmZiAtLWdpdCBhL21tL2NvbXBhY3Rpb24uYyBiL21tL2NvbXBhY3Rpb24uYwppbmRleCBmMDg3NjVhZGUwMTRjZS4uYzI3MDFiZjFkMDRlZDcgMTAwNjQ0Ci0tLSBhL21tL2NvbXBhY3Rpb24uYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9jb21wYWN0aW9uLmMKQEAgLTEzODEsMTIgJiM0MzsxMzgxLDMzIEBAIHN0YXRpYyBib29sIHN1aXRhYmxlX21pZ3JhdGlvbl9zb3VyY2Uoc3RydWN0IGNvbXBhY3RfY29udHJvbCAqY2MsCiAJaWYgKHBhZ2VibG9ja19za2lwX3BlcnNpc3RlbnQocGFnZSkpCiAJCXJldHVybiBmYWxzZTsKIAotCWlmICgoY2MtJmd0O21vZGUgIT0gTUlHUkFURV9BU1lOQykgfHwgIWNjLSZndDtkaXJlY3RfY29tcGFjdGlvbikKJiM0MzsJLyoKJiM0MzsJICogQmFja2dyb3VuZCBjb21wYWN0aW9uIHByb2R1Y2VzIGJsb2NrcyBmb3IgdGhlIHpvbmUgYXQKJiM0MzsJICogbGFyZ2UsIHdpdGggbm8gcGFydGljdWxhciBhbGxvY2F0aW9uIGNvbnRleHQuIEFsbG93IGFsbAomIzQzOwkgKiBibG9jayB0eXBlcywgaW5jbHVkaW5nIENNQS4KJiM0MzsJICovCiYjNDM7CWlmICghY2MtJmd0O2RpcmVjdF9jb21wYWN0aW9uKQogCQlyZXR1cm4gdHJ1ZTsKIAogCWJsb2NrX210ID0gZ2V0X3BhZ2VibG9ja19taWdyYXRldHlwZShwYWdlKTsKIAotCWlmIChjYy0mZ3Q7bWlncmF0ZXR5cGUgPT0gTUlHUkFURV9NT1ZBQkxFKQomIzQzOwkvKgomIzQzOwkgKiBDTUEgcGFnZXMgY2FuIG9ubHkgYmUgdGFrZW4gYnkgQUxMT0NfQ01BIHJlcXVlc3RzLiBGb3IgYW55Ym9keQomIzQzOwkgKiBlbHNlLCB2YWNhdGluZyBhIENNQSBibG9jayBjb25zdW1lcyBmcmVlIHBhZ2VzIHRoZSBjYWxsZXIKJiM0MzsJICogY291bGQgaGF2ZSB1c2VkLCBhbmQgcHJvZHVjZXMgZnJlZSBwYWdlcyBpdCBjYW5ub3QuCiYjNDM7CSAqLwomIzQzOwlpZiAoaXNfbWlncmF0ZV9jbWEoYmxvY2tfbXQpICZhbXA7JmFtcDsgIShjYy0mZ3Q7YWxsb2NfZmxhZ3MgJmFtcDsgQUxMT0NfQ01BKSkKJiM0MzsJCXJldHVybiBmYWxzZTsKJiM0MzsKJiM0MzsJaWYgKGNjLSZndDttb2RlICE9IE1JR1JBVEVfQVNZTkMpCiYjNDM7CQlyZXR1cm4gdHJ1ZTsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogUHJldmVudCBzbWFsbCB1bm1vdmFibGUvcmVjbGFpbWFibGUgcmVxdWVzdHMgZnJvbSBwb2xsdXRpbmcKJiM0MzsJICogbW92YWJsZSBibG9ja3MgdGhyb3VnaCBmYWxsYmFja3MuIFdob2xlLWJsb2NrIHByb2R1Y3Rpb24gaXMKJiM0MzsJICogZXhlbXB0IGFzIHRoZSBhbGxvY2F0b3IgY2xhaW1zIGFuZCBjb252ZXJ0cyB0aGVzZS4KJiM0MzsJICovCiYjNDM7CWlmIChjYy0mZ3Q7bWlncmF0ZXR5cGUgPT0gTUlHUkFURV9NT1ZBQkxFIHx8IGNjLSZndDtvcmRlciAmZ3Q7PSBwYWdlYmxvY2tfb3JkZXIpCiAJCXJldHVybiBpc19taWdyYXRlX21vdmFibGUoYmxvY2tfbXQpOwogCWVsc2UKIAkJcmV0dXJuIGJsb2NrX210ID09IGNjLSZndDttaWdyYXRldHlwZTsKQEAgLTE5NzQsMTIgJiM0MzsxOTk1LDEyIEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIGZhc3RfZmluZF9taWdyYXRlYmxvY2soc3RydWN0IGNvbXBhY3RfY29udHJvbCAqY2MpCiAJCXJldHVybiBwZm47CiAKIAkvKgotCSAqIE9ubHkgYWxsb3cga2NvbXBhY3RkIGFuZCBkaXJlY3QgcmVxdWVzdHMgZm9yIG1vdmFibGUgcGFnZXMgdG8KLQkgKiBxdWlja2x5IGNsZWFyIG91dCBhIE1PVkFCTEUgcGFnZWJsb2NrIGZvciBhbGxvY2F0aW9uLiBUaGlzCi0JICogcmVkdWNlcyB0aGUgcmlzayB0aGF0IGEgbGFyZ2UgbW92YWJsZSBwYWdlYmxvY2sgaXMgZnJlZWQgZm9yCi0JICogYW4gdW5tb3ZhYmxlL3JlY2xhaW1hYmxlIHNtYWxsIGFsbG9jYXRpb24uCiYjNDM7CSAqIFByZXZlbnQgc21hbGwgdW5tb3ZhYmxlL3JlY2xhaW1hYmxlIHJlcXVlc3RzIGZyb20gcG9sbHV0aW5nCiYjNDM7CSAqIG1vdmFibGUgYmxvY2tzIHRocm91Z2ggZmFsbGJhY2tzLiBXaG9sZS1ibG9jayBwcm9kdWN0aW9uIGlzCiYjNDM7CSAqIGV4ZW1wdCBhcyB0aGUgYWxsb2NhdG9yIGNsYWltcyBhbmQgY29udmVydHMgdGhlc2UuCiAJICovCi0JaWYgKGNjLSZndDtkaXJlY3RfY29tcGFjdGlvbiAmYW1wOyZhbXA7IGNjLSZndDttaWdyYXRldHlwZSAhPSBNSUdSQVRFX01PVkFCTEUpCiYjNDM7CWlmIChjYy0mZ3Q7ZGlyZWN0X2NvbXBhY3Rpb24gJmFtcDsmYW1wOyBjYy0mZ3Q7bWlncmF0ZXR5cGUgIT0gTUlHUkFURV9NT1ZBQkxFICZhbXA7JmFtcDsKJiM0MzsJICAgIGNjLSZndDtvcmRlciAmbHQ7IHBhZ2VibG9ja19vcmRlcikKIAkJcmV0dXJuIHBmbjsKIAogCS8qCkBAIC0yNzcwLDcgJiM0MzsyNzkxLDcgQEAgY29tcGFjdF96b25lKHN0cnVjdCBjb21wYWN0X2NvbnRyb2wgKmNjLCBzdHJ1Y3QgY2FwdHVyZV9jb250cm9sICpjYXBjKQogc3RhdGljIGVudW0gY29tcGFjdF9yZXN1bHQgY29tcGFjdF96b25lX29yZGVyKHN0cnVjdCB6b25lICp6b25lLCBpbnQgb3JkZXIsCiAJCWdmcF90IGdmcF9tYXNrLCBlbnVtIGNvbXBhY3RfcHJpb3JpdHkgcHJpbywKIAkJdW5zaWduZWQgaW50IGFsbG9jX2ZsYWdzLCBpbnQgaGlnaGVzdF96b25laWR4LAotCQlzdHJ1Y3QgcGFnZSAqKmNhcHR1cmUpCiYjNDM7CQlzdHJ1Y3QgY2FwdHVyZV9jb250cm9sICpjYXBjKQogewogCWVudW0gY29tcGFjdF9yZXN1bHQgcmV0OwogCXN0cnVjdCBjb21wYWN0X2NvbnRyb2wgY2MgPSB7CkBAIC0yNzg3LDM1ICYjNDM7MjgwOCwyMiBAQCBzdGF0aWMgZW51bSBjb21wYWN0X3Jlc3VsdCBjb21wYWN0X3pvbmVfb3JkZXIoc3RydWN0IHpvbmUgKnpvbmUsIGludCBvcmRlciwKIAkJLmlnbm9yZV9za2lwX2hpbnQgPSAocHJpbyA9PSBNSU5fQ09NUEFDVF9QUklPUklUWSksCiAJCS5pZ25vcmVfYmxvY2tfc3VpdGFibGUgPSAocHJpbyA9PSBNSU5fQ09NUEFDVF9QUklPUklUWSkKIAl9OwotCXN0cnVjdCBjYXB0dXJlX2NvbnRyb2wgY2FwYyA9IHsKLQkJLmNjID0gJmFtcDtjYywKLQkJLnBhZ2UgPSBOVUxMLAotCX07CiAKLQkvKgotCSAqIE1ha2Ugc3VyZSB0aGUgc3RydWN0cyBhcmUgcmVhbGx5IGluaXRpYWxpemVkIGJlZm9yZSB3ZSBleHBvc2UgdGhlCi0JICogY2FwdHVyZSBjb250cm9sLCBpbiBjYXNlIHdlIGFyZSBpbnRlcnJ1cHRlZCBhbmQgdGhlIGludGVycnVwdCBoYW5kbGVyCi0JICogZnJlZXMgYSBwYWdlLgotCSAqLwomIzQzOwkvKiBTZWUgdGhlIGNvbW1lbnQgaW4gX19hbGxvY19wYWdlc19kaXJlY3RfY29tcGFjdCgpICovCiAJYmFycmllcigpOwotCVdSSVRFX09OQ0UoY3VycmVudC0mZ3Q7Y2FwdHVyZV9jb250cm9sLCAmYW1wO2NhcGMpOwomIzQzOwlXUklURV9PTkNFKGNhcGMtJmd0O2NjLCAmYW1wO2NjKTsKIAotCXJldCA9IGNvbXBhY3Rfem9uZSgmYW1wO2NjLCAmYW1wO2NhcGMpOwomIzQzOwlyZXQgPSBjb21wYWN0X3pvbmUoJmFtcDtjYywgY2FwYyk7CiYjNDM7CiYjNDM7CVdSSVRFX09OQ0UoY2FwYy0mZ3Q7Y2MsIE5VTEwpOwogCi0JLyoKLQkgKiBNYWtlIHN1cmUgd2UgaGlkZSBjYXB0dXJlIGNvbnRyb2wgZmlyc3QgYmVmb3JlIHdlIHJlYWQgdGhlIGNhcHR1cmVkCi0JICogcGFnZSBwb2ludGVyLCBvdGhlcndpc2UgYW4gaW50ZXJydXB0IGNvdWxkIGZyZWUgYW5kIGNhcHR1cmUgYSBwYWdlCi0JICogYW5kIHdlIHdvdWxkIGxlYWsgaXQuCi0JICovCi0JV1JJVEVfT05DRShjdXJyZW50LSZndDtjYXB0dXJlX2NvbnRyb2wsIE5VTEwpOwotCSpjYXB0dXJlID0gUkVBRF9PTkNFKGNhcGMucGFnZSk7CiAJLyoKIAkgKiBUZWNobmljYWxseSwgaXQgaXMgYWxzbyBwb3NzaWJsZSB0aGF0IGNvbXBhY3Rpb24gaXMgc2tpcHBlZCBidXQKIAkgKiB0aGUgcGFnZSBpcyBzdGlsbCBjYXB0dXJlZCBvdXQgb2YgbHVjayhJUlEgY2FtZSBhbmQgZnJlZWQgdGhlIHBhZ2UpLgogCSAqIFJldHVybmluZyBDT01QQUNUX1NVQ0NFU1MgaW4gc3VjaCBjYXNlcyBoZWxwcyBpbiBwcm9wZXJseSBhY2NvdW50aW5nCiAJICogdGhlIENPTVBBQ1RbU1RBTEx8RkFJTF0gd2hlbiBjb21wYWN0aW9uIGlzIHNraXBwZWQuCiAJICovCi0JaWYgKCpjYXB0dXJlKQomIzQzOwlpZiAoY2FwYy0mZ3Q7cGFnZSkKIAkJcmV0ID0gQ09NUEFDVF9TVUNDRVNTOwogCiAJcmV0dXJuIHJldDsKQEAgLTI4MjgsMTMgJiM0MzsyODM2LDEzIEBAIHN0YXRpYyBlbnVtIGNvbXBhY3RfcmVzdWx0IGNvbXBhY3Rfem9uZV9vcmRlcihzdHJ1Y3Qgem9uZSAqem9uZSwgaW50IG9yZGVyLAogICogQGFsbG9jX2ZsYWdzOiBUaGUgYWxsb2NhdGlvbiBmbGFncyBvZiB0aGUgY3VycmVudCBhbGxvY2F0aW9uCiAgKiBAYWM6IFRoZSBjb250ZXh0IG9mIGN1cnJlbnQgYWxsb2NhdGlvbgogICogQHByaW86IERldGVybWluZXMgaG93IGhhcmQgZGlyZWN0IGNvbXBhY3Rpb24gc2hvdWxkIHRyeSB0byBzdWNjZWVkCi0gKiBAY2FwdHVyZTogUG9pbnRlciB0byBmcmVlIHBhZ2UgY3JlYXRlZCBieSBjb21wYWN0aW9uIHdpbGwgYmUgc3RvcmVkIGhlcmUKJiM0MzsgKiBAY2FwYzogVGhlIGNvbnRleHQgZm9yIGNhcHR1cmluZyBwYWdlcyBkdXJpbmcgZnJlZWluZwogICoKICAqIFRoaXMgaXMgdGhlIG1haW4gZW50cnkgcG9pbnQgZm9yIGRpcmVjdCBwYWdlIGNvbXBhY3Rpb24uCiAgKi8KIGVudW0gY29tcGFjdF9yZXN1bHQgdHJ5X3RvX2NvbXBhY3RfcGFnZXMoZ2ZwX3QgZ2ZwX21hc2ssIHVuc2lnbmVkIGludCBvcmRlciwKIAkJdW5zaWduZWQgaW50IGFsbG9jX2ZsYWdzLCBjb25zdCBzdHJ1Y3QgYWxsb2NfY29udGV4dCAqYWMsCi0JCWVudW0gY29tcGFjdF9wcmlvcml0eSBwcmlvLCBzdHJ1Y3QgcGFnZSAqKmNhcHR1cmUpCiYjNDM7CQllbnVtIGNvbXBhY3RfcHJpb3JpdHkgcHJpbywgc3RydWN0IGNhcHR1cmVfY29udHJvbCAqY2FwYykKIHsKIAlzdHJ1Y3Qgem9uZXJlZiAqejsKIAlzdHJ1Y3Qgem9uZSAqem9uZTsKQEAgLTI4NjIsNyAmIzQzOzI4NzAsNyBAQCBlbnVtIGNvbXBhY3RfcmVzdWx0IHRyeV90b19jb21wYWN0X3BhZ2VzKGdmcF90IGdmcF9tYXNrLCB1bnNpZ25lZCBpbnQgb3JkZXIsCiAJCX0KIAogCQlzdGF0dXMgPSBjb21wYWN0X3pvbmVfb3JkZXIoem9uZSwgb3JkZXIsIGdmcF9tYXNrLCBwcmlvLAotCQkJCWFsbG9jX2ZsYWdzLCBhYy0mZ3Q7aGlnaGVzdF96b25laWR4LCBjYXB0dXJlKTsKJiM0MzsJCQkJYWxsb2NfZmxhZ3MsIGFjLSZndDtoaWdoZXN0X3pvbmVpZHgsIGNhcGMpOwogCQlyYyA9IG1heChzdGF0dXMsIHJjKTsKIAogCQkvKiBUaGUgYWxsb2NhdGlvbiBzaG91bGQgc3VjY2VlZCwgc3RvcCBjb21wYWN0aW5nICovCmRpZmYgLS1naXQgYS9tbS9pbnRlcm5hbC5oIGIvbW0vaW50ZXJuYWwuaAppbmRleCAxODFlNzlmMWQ2YTIwNy4uMWY2MzZjZmM4NTlhMWEgMTAwNjQ0Ci0tLSBhL21tL2ludGVybmFsLmgKJiM0MzsmIzQzOyYjNDM7IGIvbW0vaW50ZXJuYWwuaApAQCAtMTA2MCw2ICYjNDM7MTA2MCwxMyBAQCBzdHJ1Y3QgY29tcGFjdF9jb250cm9sIHsKICAqLwogc3RydWN0IGNhcHR1cmVfY29udHJvbCB7CiAJc3RydWN0IGNvbXBhY3RfY29udHJvbCAqY2M7CiYjNDM7CS8qCiYjNDM7CSAqIEFsbG9jYXRpb24gcmVxdWVzdCBvcmRlci4gTWF5IGRpZmZlciBmcm9tIHRoZSBjb21wYWN0aW9uCiYjNDM7CSAqIG9yZGVyOiBkZWZyYWdfbW9kZSBwcm9tb3RlcyBzdWItYmxvY2sgYWxsb2NhdGlvbnMgdG8KJiM0MzsJICogcGFnZWJsb2NrLW9yZGVyIGNvbXBhY3Rpb247IGNhcHR1cmUgc3RpbGwgbWF0Y2hlcyBhdCB0aGUKJiM0MzsJICogb3JpZ2luYWwgYWxsb2NhdGlvbiBvcmRlciBzbyBwcmVwX25ld19wYWdlKCkgaXMgY29uc2lzdGVudC4KJiM0MzsJICovCiYjNDM7CWludCBvcmRlcjsKIAlzdHJ1Y3QgcGFnZSAqcGFnZTsKIH07CiAKZGlmZiAtLWdpdCBhL21tL3BhZ2VfYWxsb2MuYyBiL21tL3BhZ2VfYWxsb2MuYwppbmRleCBlZTkwMmE0NjhjMmY1Yi4uNTc1YTk5YTRjNzIzODQgMTAwNjQ0Ci0tLSBhL21tL3BhZ2VfYWxsb2MuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9wYWdlX2FsbG9jLmMKQEAgLTcxOCw3ICYjNDM7NzE4LDcgQEAgc3RhdGljIGlubGluZSBzdHJ1Y3QgY2FwdHVyZV9jb250cm9sICp0YXNrX2NhcGMoc3RydWN0IHpvbmUgKnpvbmUpCiB7CiAJc3RydWN0IGNhcHR1cmVfY29udHJvbCAqY2FwYyA9IGN1cnJlbnQtJmd0O2NhcHR1cmVfY29udHJvbDsKIAotCXJldHVybiB1bmxpa2VseShjYXBjKSAmYW1wOyZhbXA7CiYjNDM7CXJldHVybiB1bmxpa2VseShjYXBjICZhbXA7JmFtcDsgY2FwYy0mZ3Q7Y2MpICZhbXA7JmFtcDsKIAkJIShjdXJyZW50LSZndDtmbGFncyAmYW1wOyBQRl9LVEhSRUFEKSAmYW1wOyZhbXA7CiAJCSFjYXBjLSZndDtwYWdlICZhbXA7JmFtcDsKIAkJY2FwYy0mZ3Q7Y2MtJmd0O3pvbmUgPT0gem9uZSA/IGNhcGMgOiBOVUxMOwpAQCAtNzI4LDcgJiM0Mzs3MjgsNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wKIGNvbXBhY3Rpb25fY2FwdHVyZShzdHJ1Y3QgY2FwdHVyZV9jb250cm9sICpjYXBjLCBzdHJ1Y3QgcGFnZSAqcGFnZSwKIAkJICAgaW50IG9yZGVyLCBpbnQgbWlncmF0ZXR5cGUpCiB7Ci0JaWYgKCFjYXBjIHx8IG9yZGVyICE9IGNhcGMtJmd0O2NjLSZndDtvcmRlcikKJiM0MzsJaWYgKCFjYXBjIHx8IG9yZGVyICE9IGNhcGMtJmd0O29yZGVyKQogCQlyZXR1cm4gZmFsc2U7CiAKIAkvKiBEbyBub3QgYWNjaWRlbnRhbGx5IHBvbGx1dGUgQ01BIG9yIGlzb2xhdGVkIHJlZ2lvbnMqLwpAQCAtNzQ4LDcgJiM0Mzs3NDgsNyBAQCBjb21wYWN0aW9uX2NhcHR1cmUoc3RydWN0IGNhcHR1cmVfY29udHJvbCAqY2FwYywgc3RydWN0IHBhZ2UgKnBhZ2UsCiAJCXJldHVybiBmYWxzZTsKIAogCWlmIChtaWdyYXRldHlwZSAhPSBjYXBjLSZndDtjYy0mZ3Q7bWlncmF0ZXR5cGUpCi0JCXRyYWNlX21tX3BhZ2VfYWxsb2NfZXh0ZnJhZyhwYWdlLCBjYXBjLSZndDtjYy0mZ3Q7b3JkZXIsIG9yZGVyLAomIzQzOwkJdHJhY2VfbW1fcGFnZV9hbGxvY19leHRmcmFnKHBhZ2UsIGNhcGMtJmd0O29yZGVyLCBvcmRlciwKIAkJCQkJICAgIGNhcGMtJmd0O2NjLSZndDttaWdyYXRldHlwZSwgbWlncmF0ZXR5cGUpOwogCiAJY2FwYy0mZ3Q7cGFnZSA9IHBhZ2U7CkBAIC00MTQ2LDIxICYjNDM7NDE0Niw1OSBAQCBfX2FsbG9jX3BhZ2VzX2RpcmVjdF9jb21wYWN0KGdmcF90IGdmcF9tYXNrLCB1bnNpZ25lZCBpbnQgb3JkZXIsCiAJc3RydWN0IHBhZ2UgKnBhZ2UgPSBOVUxMOwogCXVuc2lnbmVkIGxvbmcgcGZsYWdzOwogCXVuc2lnbmVkIGludCBub3JlY2xhaW1fZmxhZzsKJiM0MzsJc3RydWN0IGNhcHR1cmVfY29udHJvbCBjYXBjID0gewomIzQzOwkJLm9yZGVyID0gb3JkZXIsCiYjNDM7CQkucGFnZSA9IE5VTEwsCiYjNDM7CX07CiYjNDM7CWludCBjb21wYWN0X29yZGVyID0gb3JkZXI7CiAKLQlpZiAoIW9yZGVyKQomIzQzOwkvKgomIzQzOwkgKiBJZiBmYWxsYmFja3MgYXJlIG5vdCBwZXJtaXR0ZWQgKGRlZnJhZ19tb2RlKSwgd2UgZWl0aGVyCiYjNDM7CSAqIG5lZWQgdG8gcmVjbGFpbSBzcGFjZSBpbiBhIGJsb2NrIG9mIG1hdGNoaW5nIHR5cGUsIG9yIGNsZWFyCiYjNDM7CSAqIG91dCBhbiBlbnRpcmUgYmxvY2sgdG8gYWxsb3cgX19ybXF1ZXVlX2NsYWltKCkgdG8gY29udmVydC4KJiM0MzsJICoKJiM0MzsJICogUmVjbGFpbSBieSBpdHNlbGYgaXMgcHJpbWFyaWx5IGZyZWVpbmcgc3BhY2UgaW4gbW92YWJsZQomIzQzOwkgKiBibG9ja3MsIHNpbmNlIHRoYXQmIzM5O3Mgd2hlcmUgdGhlIExSVSBwYWdlcyBsaXZlLiBTbyB0aGlzCiYjNDM7CSAqIHdvcmtzIGZvciBtb3ZhYmxlIHJlcXVlc3RzLCBidXQgbm90IGZvciBvdGhlcnMuCiYjNDM7CSAqCiYjNDM7CSAqIEZvciB0aG9zZSwgcHJvbW90ZSB0aGUgb3JkZXIgdG8gaGVscCBtYWtlIGJsb2NrcywgaW5zdGVhZAomIzQzOwkgKiBvZiBzcGlubmluZyBpbiByZWNsYWltIGFsb25lIHVucHJvZHVjdGl2ZWx5LgomIzQzOwkgKi8KJiM0MzsJaWYgKChhbGxvY19mbGFncyAmYW1wOyBBTExPQ19OT0ZSQUdNRU5UKSAmYW1wOyZhbXA7IGFjLSZndDttaWdyYXRldHlwZSAhPSBNSUdSQVRFX01PVkFCTEUpCiYjNDM7CQljb21wYWN0X29yZGVyID0gbWF4KG9yZGVyLCBwYWdlYmxvY2tfb3JkZXIpOwomIzQzOwomIzQzOwlpZiAoIWNvbXBhY3Rfb3JkZXIpCiAJCXJldHVybiBOVUxMOwogCiYjNDM7CS8qCiYjNDM7CSAqIE1ha2Ugc3VyZSB0aGUgc3RydWN0cyBhcmUgcmVhbGx5IGluaXRpYWxpemVkIGJlZm9yZSB3ZSBleHBvc2UgdGhlCiYjNDM7CSAqIGNhcHR1cmUgY29udHJvbCwgaW4gY2FzZSB3ZSBhcmUgaW50ZXJydXB0ZWQgYW5kIHRoZSBpbnRlcnJ1cHQgaGFuZGxlcgomIzQzOwkgKiBmcmVlcyBhIHBhZ2UuCiYjNDM7CSAqLwomIzQzOwliYXJyaWVyKCk7CiYjNDM7CVdSSVRFX09OQ0UoY3VycmVudC0mZ3Q7Y2FwdHVyZV9jb250cm9sLCAmYW1wO2NhcGMpOwomIzQzOwogCXBzaV9tZW1zdGFsbF9lbnRlcigmYW1wO3BmbGFncyk7CiAJZGVsYXlhY2N0X2NvbXBhY3Rfc3RhcnQoKTsKJiM0MzsJZnNfcmVjbGFpbV9hY3F1aXJlKGdmcF9tYXNrKTsKIAlub3JlY2xhaW1fZmxhZyA9IG1lbWFsbG9jX25vcmVjbGFpbV9zYXZlKCk7CiAKLQkqY29tcGFjdF9yZXN1bHQgPSB0cnlfdG9fY29tcGFjdF9wYWdlcyhnZnBfbWFzaywgb3JkZXIsIGFsbG9jX2ZsYWdzLCBhYywKLQkJCQkJCQkJcHJpbywgJmFtcDtwYWdlKTsKJiM0MzsJKmNvbXBhY3RfcmVzdWx0ID0gdHJ5X3RvX2NvbXBhY3RfcGFnZXMoZ2ZwX21hc2ssIGNvbXBhY3Rfb3JkZXIsCiYjNDM7CQkJCQkgICAgICAgYWxsb2NfZmxhZ3MsIGFjLCBwcmlvLCAmYW1wO2NhcGMpOwogCiAJbWVtYWxsb2Nfbm9yZWNsYWltX3Jlc3RvcmUobm9yZWNsYWltX2ZsYWcpOwomIzQzOwlmc19yZWNsYWltX3JlbGVhc2UoZ2ZwX21hc2spOwogCXBzaV9tZW1zdGFsbF9sZWF2ZSgmYW1wO3BmbGFncyk7CiAJZGVsYXlhY2N0X2NvbXBhY3RfZW5kKCk7CiAKJiM0MzsJLyoKJiM0MzsJICogTWFrZSBzdXJlIHdlIGhpZGUgY2FwdHVyZSBjb250cm9sIGZpcnN0IGJlZm9yZSB3ZSByZWFkIHRoZSBjYXB0dXJlZAomIzQzOwkgKiBwYWdlIHBvaW50ZXIsIG90aGVyd2lzZSBhbiBpbnRlcnJ1cHQgY291bGQgZnJlZSBhbmQgY2FwdHVyZSBhIHBhZ2UKJiM0MzsJICogYW5kIHdlIHdvdWxkIGxlYWsgaXQuCiYjNDM7CSAqLwomIzQzOwlXUklURV9PTkNFKGN1cnJlbnQtJmd0O2NhcHR1cmVfY29udHJvbCwgTlVMTCk7CiYjNDM7CXBhZ2UgPSBSRUFEX09OQ0UoY2FwYy5wYWdlKTsKJiM0MzsKIAlpZiAoKmNvbXBhY3RfcmVzdWx0ID09IENPTVBBQ1RfU0tJUFBFRCB8fAogCSAgICAqY29tcGFjdF9yZXN1bHQgPT0gQ09NUEFDVF9ERUZFUlJFRCkKIAkJcmV0dXJuIE5VTEw7CkBAIC00MTgyLDcgJiM0Mzs0MjIwLDcgQEAgX19hbGxvY19wYWdlc19kaXJlY3RfY29tcGFjdChnZnBfdCBnZnBfbWFzaywgdW5zaWduZWQgaW50IG9yZGVyLAogCQlzdHJ1Y3Qgem9uZSAqem9uZSA9IHBhZ2Vfem9uZShwYWdlKTsKIAogCQl6b25lLSZndDtjb21wYWN0X2Jsb2Nrc2tpcF9mbHVzaCA9IGZhbHNlOwotCQljb21wYWN0aW9uX2RlZmVyX3Jlc2V0KHpvbmUsIG9yZGVyLCB0cnVlKTsKJiM0MzsJCWNvbXBhY3Rpb25fZGVmZXJfcmVzZXQoem9uZSwgY29tcGFjdF9vcmRlciwgdHJ1ZSk7CiAJCWNvdW50X3ZtX2V2ZW50KENPTVBBQ1RTVUNDRVNTKTsKIAkJcmV0dXJuIHBhZ2U7CiAJfQpAQCAtNDQyMiw5ICYjNDM7NDQ2MCwxNCBAQCBfX2FsbG9jX3BhZ2VzX2RpcmVjdF9yZWNsYWltKGdmcF90IGdmcF9tYXNrLCB1bnNpZ25lZCBpbnQgb3JkZXIsCiAJc3RydWN0IHBhZ2UgKnBhZ2UgPSBOVUxMOwogCXVuc2lnbmVkIGxvbmcgcGZsYWdzOwogCWJvb2wgZHJhaW5lZCA9IGZhbHNlOwomIzQzOwlpbnQgcmVjbGFpbV9vcmRlciA9IG9yZGVyOwomIzQzOwomIzQzOwkvKiBNYXRjaCB0aGUgc2xvd3BhdGggY29tcGFjdGlvbiBwcm9tb3Rpb24gaW4gX19hbGxvY19wYWdlc19kaXJlY3RfY29tcGFjdCAqLwomIzQzOwlpZiAoKGFsbG9jX2ZsYWdzICZhbXA7IEFMTE9DX05PRlJBR01FTlQpICZhbXA7JmFtcDsgYWMtJmd0O21pZ3JhdGV0eXBlICE9IE1JR1JBVEVfTU9WQUJMRSkKJiM0MzsJCXJlY2xhaW1fb3JkZXIgPSBtYXgob3JkZXIsIHBhZ2VibG9ja19vcmRlcik7CiAKIAlwc2lfbWVtc3RhbGxfZW50ZXIoJmFtcDtwZmxhZ3MpOwotCSpkaWRfc29tZV9wcm9ncmVzcyA9IF9fcGVyZm9ybV9yZWNsYWltKGdmcF9tYXNrLCBvcmRlciwgYWMpOwomIzQzOwkqZGlkX3NvbWVfcHJvZ3Jlc3MgPSBfX3BlcmZvcm1fcmVjbGFpbShnZnBfbWFzaywgcmVjbGFpbV9vcmRlciwgYWMpOwogCWlmICh1bmxpa2VseSghKCpkaWRfc29tZV9wcm9ncmVzcykpKQogCQlnb3RvIG91dDsKIAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNiAyMDoyMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MzE0CgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogMzY0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgTWVtb3J5IENvbXBhY3Rpb24gUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7dmUgZ290IHRoaXMgcGF0Y2ggaGVyZSB0aGF04oCZcyB0aW5rZXJpbmcgd2l0aCBtZW1vcnkgY29tcGFjdGlvbiBhbmQgYWxsb2NhdGlvbiwgc3BlY2lmaWNhbGx5IHdpdGggaG93IHdlIGhhbmRsZSBjb21wYWN0aW9uIG9yZGVycyBhbmQgcGFnZSBjYXB0dXJlIGluIGB0cnlfdG9fY29tcGFjdF9wYWdlc2AgYW5kIGBfX2FsbG9jX3BhZ2VzX2RpcmVjdF9jb21wYWN0YC4gSXQgc2VlbXMgbGlrZSB0aGUgY29yZSBsb2dpYyBpcyBiZWluZyB0d2Vha2VkLiBUaGlzIGlzIGRlZmluaXRlbHkgd29ydGggYSBjbG9zZXIgbG9vaywgZ2l2ZW4gdGhhdCB0aGlzIHRvdWNoZXMgdXBvbiBgcGFnZWJsb2NrX29yZGVyYCB3aGVuIGBBTExPQ19OT0ZSQUdNRU5UYCBpcyBzZXQgYW5kIHRoZSBtaWdyYXRpb24gdHlwZSBpc27igJl0IGBNSUdSQVRFX01PVkFCTEVgLiBUaGUgcGF0Y2ggYWxzbyBzZWVtcyB0byBiZSBhZmZlY3RpbmcgYHN1aXRhYmxlX21pZ3JhdGlvbl9zb3VyY2VgIGFuZCBgZmFzdF9maW5kX21pZ3JhdGVibG9ja2AsIHdoaWNoIGFyZSBjcnVjaWFsIHdpdGhpbiB0aGUgY29tcGFjdGlvbiBmcmFtZXdvcmsuCgpHaXZlbiB0aGF0IHRoaXMgaXMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBjb2RlLCBpdCYjMzk7cyBkZWZpbml0ZWx5IGhpZ2gtdmFsdWUgZm9yIGZ1enppbmcuIFdlIG5lZWQgdG8gaWRlbnRpZnkgdGhlIGtleSBmdW5jdGlvbnMgdG8gZm9jdXMgb3VyIGVmZm9ydHMuCgpCYXNlZCBvbiB0aGUgY29kZSBjaGFuZ2VzLCBpdCBsb29rcyBsaWtlIHdlJiMzOTtyZSB6ZXJvaW5nIGluIG9uOiBgc3VpdGFibGVfbWlncmF0aW9uX3NvdXJjZWAsIGBmYXN0X2ZpbmRfbWlncmF0ZWJsb2NrYCwgYGNvbXBhY3Rfem9uZV9vcmRlcmAsIGB0cnlfdG9fY29tcGFjdF9wYWdlc2AsIGBjb21wYWN0aW9uX2NhcHR1cmVgLCBgX19hbGxvY19wYWdlc19kaXJlY3RfY29tcGFjdGAsIGFuZCBgX19hbGxvY19wYWdlc19kaXJlY3RfcmVjbGFpbWAuCgpgX19hbGxvY19wYWdlc19kaXJlY3RfY29tcGFjdGAgYW5kIGBfX2FsbG9jX3BhZ2VzX2RpcmVjdF9yZWNsYWltYCBhcmUgcGFydCBvZiB0aGUgcGFnZSBhbGxvY2F0b3Igc2xvdyBwYXRoLCBhcyBleHBlY3RlZC4gYHRyeV90b19jb21wYWN0X3BhZ2VzYCBpcyB0aGUgZGlyZWN0IGNvbXBhY3Rpb24gZW50cnkgcG9pbnQsIHdoaWNoIG1ha2VzIGl0IGEgY3JpdGljYWwgYXJlYS4gYGNvbXBhY3Rfem9uZV9vcmRlcmAgaXMgYSBzdGF0aWMgZnVuY3Rpb24sIGFuZCBzbyBhcmUgYHN1aXRhYmxlX21pZ3JhdGlvbl9zb3VyY2VgIGFuZCBgZmFzdF9maW5kX21pZ3JhdGVibG9ja2AuCgpJIHNob3VsZCBjaGVjayBpZiB0aGVyZSBhcmUgYW55IHNwZWNpZmljIGtlcm5lbCBjb25maWd1cmF0aW9ucyByZWxldmFudCB0byBjb21wYWN0aW9uLCBsaWtlIGBDT05GSUdfQ09NUEFDVElPTmAuIExldCYjMzk7cyBncmVwIGZvciB0aGF0IGFuZCBhbHNvIGZvciBgdHJ5X3RvX2NvbXBhY3RfcGFnZXNgIHRvIGdldCBhIGJyb2FkZXIgdmlldyBvZiBob3cgdGhlc2UgY2hhbmdlcyBhcmUgdGllZCBpbnRvIHRoZSByZXN0IG9mIHRoZSBzeXN0ZW0uIFRoaXMgd2lsbCBnaXZlIG1lIGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgaG93IHRoZSBjb2RlIG1pZ2h0IGJlaGF2ZSBpbiBkaWZmZXJlbnQgc2NlbmFyaW9zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDIwOjIyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3RyeV90b19jb21wYWN0X3BhZ2VzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvY29tcGFjdGlvbi5oPTExPWVudW0gY29tcGFjdF9wcmlvcml0eSB7XG4tLVxuaW5jbHVkZS9saW51eC9jb21wYWN0aW9uLmgtMjAtXG5pbmNsdWRlL2xpbnV4L2NvbXBhY3Rpb24uaDoyMTovKiBSZXR1cm4gdmFsdWVzIGZvciBjb21wYWN0X3pvbmUoKSBhbmQgdHJ5X3RvX2NvbXBhY3RfcGFnZXMoKSAqL1xuaW5jbHVkZS9saW51eC9jb21wYWN0aW9uLmgtMjItLyogV2hlbiBhZGRpbmcgbmV3IHN0YXRlcywgcGxlYXNlIGFkanVzdCBpbmNsdWRlL3RyYWNlL2V2ZW50cy9jb21wYWN0aW9uLmggKi9cbi0tXG5pbmNsdWRlL2xpbnV4L2NvbXBhY3Rpb24uaD05Mj1leHRlcm4gaW50IGZyYWdtZW50YXRpb25faW5kZXgoc3RydWN0IHpvbmUgKnpvbmUsIHVuc2lnbmVkIGludCBvcmRlcik7XG5pbmNsdWRlL2xpbnV4L2NvbXBhY3Rpb24uaDo5MzpleHRlcm4gZW51bSBjb21wYWN0X3Jlc3VsdCB0cnlfdG9fY29tcGFjdF9wYWdlcyhnZnBfdCBnZnBfbWFzayxcbmluY2x1ZGUvbGludXgvY29tcGFjdGlvbi5oLTk0LVx0XHR1bnNpZ25lZCBpbnQgb3JkZXIsIHVuc2lnbmVkIGludCBhbGxvY19mbGFncyxcbi0tXG5pbmNsdWRlL3RyYWNlL2V2ZW50cy9jb21wYWN0aW9uLmg9MTMxPVRSQUNFX0VWRU5UKG1tX2NvbXBhY3Rpb25fZW5kLFxuLS1cbmluY2x1ZGUvdHJhY2UvZXZlbnRzL2NvbXBhY3Rpb24uaC0xNjQtXG5pbmNsdWRlL3RyYWNlL2V2ZW50cy9jb21wYWN0aW9uLmg6MTY1OlRSQUNFX0VWRU5UKG1tX2NvbXBhY3Rpb25fdHJ5X3RvX2NvbXBhY3RfcGFnZXMsXG5pbmNsdWRlL3RyYWNlL2V2ZW50cy9jb21wYWN0aW9uLmgtMTY2LVxuLS1cbm1tL2NvbXBhY3Rpb24uYz0yNzkxPXN0YXRpYyBlbnVtIGNvbXBhY3RfcmVzdWx0IGNvbXBhY3Rfem9uZV9vcmRlcihzdHJ1Y3Qgem9uZSAqem9uZSwgaW50IG9yZGVyLFxuLS1cbm1tL2NvbXBhY3Rpb24uYy0yODMyLS8qKlxubW0vY29tcGFjdGlvbi5jOjI4MzM6ICogdHJ5X3RvX2NvbXBhY3RfcGFnZXMgLSBEaXJlY3QgY29tcGFjdCB0byBzYXRpc2Z5IGEgaGlnaC1vcmRlciBhbGxvY2F0aW9uXG5tbS9jb21wYWN0aW9uLmMtMjgzNC0gKiBAZ2ZwX21hc2s6IFRoZSBHRlAgbWFzayBvZiB0aGUgY3VycmVudCBhbGxvY2F0aW9uXG4tLVxubW0vY29tcGFjdGlvbi5jLTI4NDItICovXG5tbS9jb21wYWN0aW9uLmM6Mjg0MzplbnVtIGNvbXBhY3RfcmVzdWx0IHRyeV90b19jb21wYWN0X3BhZ2VzKGdmcF90IGdmcF9tYXNrLCB1bnNpZ25lZCBpbnQgb3JkZXIsXG5tbS9jb21wYWN0aW9uLmMtMjg0NC1cdFx0dW5zaWduZWQgaW50IGFsbG9jX2ZsYWdzLCBjb25zdCBzdHJ1Y3QgYWxsb2NfY29udGV4dCAqYWMsXG4tLVxubW0vY29tcGFjdGlvbi5jLTI4NTMtXG5tbS9jb21wYWN0aW9uLmM6Mjg1NDpcdHRyYWNlX21tX2NvbXBhY3Rpb25fdHJ5X3RvX2NvbXBhY3RfcGFnZXMob3JkZXIsIGdmcF9tYXNrLCBwcmlvKTtcbm1tL2NvbXBhY3Rpb24uYy0yODU1LVxuLS1cbm1tL3BhZ2VfYWxsb2MuYz00MTQyPV9fYWxsb2NfcGFnZXNfZGlyZWN0X2NvbXBhY3QoZ2ZwX3QgZ2ZwX21hc2ssIHVuc2lnbmVkIGludCBvcmRlcixcbi0tXG5tbS9wYWdlX2FsbG9jLmMtNDE4NS1cbm1tL3BhZ2VfYWxsb2MuYzo0MTg2Olx0KmNvbXBhY3RfcmVzdWx0ID0gdHJ5X3RvX2NvbXBhY3RfcGFnZXMoZ2ZwX21hc2ssIGNvbXBhY3Rfb3JkZXIsXG5tbS9wYWdlX2FsbG9jLmMtNDE4Ny1cdFx0XHRcdFx0ICAgICAgIGFsbG9jX2ZsYWdzLCBhYywgcHJpbywgXHUwMDI2Y2FwYyk7XG4tLVxubW0vdm1zY2FuLmM9NTk5OD1zdGF0aWMgYm9vbCBpbl9yZWNsYWltX2NvbXBhY3Rpb24oc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG4tLVxubW0vdm1zY2FuLmMtNjAxMS0gKiB0cnVlIGlmIG1vcmUgcGFnZXMgc2hvdWxkIGJlIHJlY2xhaW1lZCBzdWNoIHRoYXQgd2hlbiB0aGUgcGFnZSBhbGxvY2F0b3Jcbm1tL3Ztc2Nhbi5jOjYwMTI6ICogY2FsbHMgdHJ5X3RvX2NvbXBhY3RfcGFnZXMoKSB0aGF0IGl0IHdpbGwgaGF2ZSBlbm91Z2ggZnJlZSBwYWdlcyB0byBzdWNjZWVkLlxubW0vdm1zY2FuLmMtNjAxMy0gKiBJdCB3aWxsIGdpdmUgdXAgZWFybGllciB0aGFuIHRoYXQgaWYgdGhlcmUgaXMgZGlmZmljdWx0eSByZWNsYWltaW5nIHBhZ2VzLlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDIwOjIyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY5MTAKCQkJCQkJCW91dHB1dDogMjYKCQkJCQkJCXRob3VnaHRzOiAzNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgQ29tcGFjdGlvbiBhbmQgQWxsb2NhdGlvbiBDb2RlIERlcGVuZGVuY2llcyoqCgpBbHJpZ2h0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW50ZXJhY3Rpb24gYmV0d2VlbiBjb21wYWN0aW9uIGFuZCBhbGxvY2F0aW9uLiBCYXNlZCBvbiB0aGUgZmlsZSBwYXRocywgSSYjMzk7bSBkaXZpbmcgaW50byBgbW0vY29tcGFjdGlvbi5jYCBhbmQgYG1tL3BhZ2VfYWxsb2MuY2AuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBiZWZvcmUgSSBnZXQgdG9vIGRlZXAgaW50byB0aGUgd2VlZHMsIEkgc2hvdWxkIHF1aWNrbHkgdmVyaWZ5IGlmIGNvbXBhY3Rpb24gaXMgY29uZGl0aW9uYWxseSBjb21waWxlZC4gSSYjMzk7bGwgbmVlZCB0byBjb25maXJtIGlmIGBDT05GSUdfQ09NUEFDVElPTmAgaXMgZW5hYmxlZCBvciByZXF1aXJlZCB0byB1bmRlcnN0YW5kIHRoZSBjb2RlIHBhdGggcHJvcGVybHksIHBhcnRpY3VsYXJseSBob3cgaXQgYWZmZWN0cyB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgc2NoZW1lLiBJJiMzOTtsbCBzZWFyY2ggZm9yIHRoZSBwcmVwcm9jZXNzb3IgZGlyZWN0aXZlcyByZWxhdGVkIHRvIHRoYXQgY29uZmlnIG9wdGlvbiB0byBnZXQgYSBoYW5kbGUgb24gdGhlIGJ1aWxkIGNvbmZpZ3VyYXRpb24uIFRoYXQgd2lsbCBwcm92aWRlIGNydWNpYWwgY29udGV4dCBiZWZvcmUgZ29pbmcgYW55IGZ1cnRoZXIgd2l0aCB0aGUgYW5hbHlzaXMgb2YgdGhvc2UgZmlsZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjYgMjA6MjI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Q09ORklHX0NPTVBBQ1RJT04mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vY29tcGFjdGlvbi5jLTI4LVxubW0vY29tcGFjdGlvbi5jOjI5OiNpZmRlZiBDT05GSUdfQ09NUEFDVElPTlxubW0vY29tcGFjdGlvbi5jLTMwLS8qXG4tLVxubW0vY29tcGFjdGlvbi5jPTU5PXN0YXRpYyBpbmxpbmUgYm9vbCBpc192aWFfY29tcGFjdF9tZW1vcnkoaW50IG9yZGVyKSB7IHJldHVybiBmYWxzZTsgfVxuLS1cbm1tL2NvbXBhY3Rpb24uYy02MS1cbm1tL2NvbXBhY3Rpb24uYzo2MjojaWYgZGVmaW5lZCBDT05GSUdfQ09NUEFDVElPTiB8fCBkZWZpbmVkIENPTkZJR19DTUFcbm1tL2NvbXBhY3Rpb24uYy02My1cbi0tXG5tbS9jb21wYWN0aW9uLmM9OTE9c3RhdGljIHVuc2lnbmVkIGxvbmcgcmVsZWFzZV9mcmVlX2xpc3Qoc3RydWN0IGxpc3RfaGVhZCAqZnJlZXBhZ2VzKVxuLS1cbm1tL2NvbXBhY3Rpb24uYy0xMTUtXG5tbS9jb21wYWN0aW9uLmM6MTE2OiNpZmRlZiBDT05GSUdfQ09NUEFDVElPTlxubW0vY29tcGFjdGlvbi5jLTExNy1cbi0tXG5tbS9jb21wYWN0aW9uLmM9NDkwPXN0YXRpYyBib29sIHRlc3RfYW5kX3NldF9za2lwKHN0cnVjdCBjb21wYWN0X2NvbnRyb2wgKmNjLCBzdHJ1Y3QgcGFnZSAqcGFnZSlcbi0tXG5tbS9jb21wYWN0aW9uLmMtNDkzLX1cbm1tL2NvbXBhY3Rpb24uYzo0OTQ6I2VuZGlmIC8qIENPTkZJR19DT01QQUNUSU9OICovXG5tbS9jb21wYWN0aW9uLmMtNDk1LVxuLS1cbm1tL2NvbXBhY3Rpb24uYz0xMzM3PWlzb2xhdGVfbWlncmF0ZXBhZ2VzX3JhbmdlKHN0cnVjdCBjb21wYWN0X2NvbnRyb2wgKmNjLCB1bnNpZ25lZCBsb25nIHN0YXJ0X3Bmbixcbi0tXG5tbS9jb21wYWN0aW9uLmMtMTM3Mi1cbm1tL2NvbXBhY3Rpb24uYzoxMzczOiNlbmRpZiAvKiBDT05GSUdfQ09NUEFDVElPTiB8fCBDT05GSUdfQ01BICovXG5tbS9jb21wYWN0aW9uLmM6MTM3NDojaWZkZWYgQ09ORklHX0NPTVBBQ1RJT05cbm1tL2NvbXBhY3Rpb24uYy0xMzc1LVxuLS1cbm1tL2NvbXBhY3Rpb24uYz0zMzYxPXN1YnN5c19pbml0Y2FsbChrY29tcGFjdGRfaW5pdClcbm1tL2NvbXBhY3Rpb24uYy0zMzYyLVxubW0vY29tcGFjdGlvbi5jOjMzNjM6I2VuZGlmIC8qIENPTkZJR19DT01QQUNUSU9OICovXG4tLVxubW0vaW50ZXJuYWwuaD05OTk9c3RhdGljIGlubGluZSB2b2lkIHNwYXJzZV9pbml0X3N1YnNlY3Rpb25fbWFwKHVuc2lnbmVkIGxvbmcgcGZuLFxuLS1cbm1tL2ludGVybmFsLmgtMTAwNC1cbm1tL2ludGVybmFsLmg6MTAwNTojaWYgZGVmaW5lZCBDT05GSUdfQ09NUEFDVElPTiB8fCBkZWZpbmVkIENPTkZJR19DTUFcbm1tL2ludGVybmFsLmgtMTAwNi1cbi0tXG5tbS9pbnRlcm5hbC5oPTEwODE9dm9pZCBpbml0X2NtYV9yZXNlcnZlZF9wYWdlYmxvY2soc3RydWN0IHBhZ2UgKnBhZ2UpO1xubW0vaW50ZXJuYWwuaC0xMDgyLVxubW0vaW50ZXJuYWwuaDoxMDgzOiNlbmRpZiAvKiBDT05GSUdfQ09NUEFDVElPTiB8fCBDT05GSUdfQ01BICovXG5tbS9pbnRlcm5hbC5oLTEwODQtXG4tLVxubW0vbW1faW5pdC5jPTEzMzM9c3RhdGljIHZvaWQgX19pbml0IGNhbGN1bGF0ZV9ub2RlX3RvdGFscGFnZXMoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCxcbi0tXG5tbS9tbV9pbml0LmMtMTM3NS1cbm1tL21tX2luaXQuYzoxMzc2OiNpZmRlZiBDT05GSUdfQ09NUEFDVElPTlxubW0vbW1faW5pdC5jLTEzNzctc3RhdGljIHZvaWQgcGdkYXRfaW5pdF9rY29tcGFjdGQoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdClcbi0tXG5tbS9vb21fa2lsbC5jPTQ1Nj1zdGF0aWMgdm9pZCBkdW1wX2hlYWRlcihzdHJ1Y3Qgb29tX2NvbnRyb2wgKm9jKVxuLS1cbm1tL29vbV9raWxsLmMtNDYwLVx0XHRcdGN1cnJlbnQtXHUwMDNlc2lnbmFsLVx1MDAzZW9vbV9zY29yZV9hZGopO1xubW0vb29tX2tpbGwuYzo0NjE6XHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX0NPTVBBQ1RJT04pIFx1MDAyNlx1MDAyNiBvYy1cdTAwM2VvcmRlcilcbm1tL29vbV9raWxsLmMtNDYyLVx0XHRwcl93YXJuKFwmIzM0O0NPTVBBQ1RJT04gaXMgZGlzYWJsZWQhISFcXG5cJiMzNDspO1xuLS1cbm1tL3BhZ2VfYWxsb2MuYz03MTA9c3RhdGljIGlubGluZSB2b2lkIHNldF9idWRkeV9vcmRlcihzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgaW50IG9yZGVyKVxuLS1cbm1tL3BhZ2VfYWxsb2MuYy03MTUtXG5tbS9wYWdlX2FsbG9jLmM6NzE2OiNpZmRlZiBDT05GSUdfQ09NUEFDVElPTlxubW0vcGFnZV9hbGxvYy5jLTcxNy1zdGF0aWMgaW5saW5lIHN0cnVjdCBjYXB0dXJlX2NvbnRyb2wgKnRhc2tfY2FwYyhzdHJ1Y3Qgem9uZSAqem9uZSlcbi0tXG5tbS9wYWdlX2FsbG9jLmM9NzY1PWNvbXBhY3Rpb25fY2FwdHVyZShzdHJ1Y3QgY2FwdHVyZV9jb250cm9sICpjYXBjLCBzdHJ1Y3QgcGFnZSAqcGFnZSxcbi0tXG5tbS9wYWdlX2FsbG9jLmMtNzY5LX1cbm1tL3BhZ2VfYWxsb2MuYzo3NzA6I2VuZGlmIC8qIENPTkZJR19DT01QQUNUSU9OICovXG5tbS9wYWdlX2FsbG9jLmMtNzcxLVxuLS1cbm1tL3BhZ2VfYWxsb2MuYz00MDQ3PV9fYWxsb2NfcGFnZXNfbWF5X29vbShnZnBfdCBnZnBfbWFzaywgdW5zaWduZWQgaW50IG9yZGVyLFxuLS1cbm1tL3BhZ2VfYWxsb2MuYy00MTM4LVxubW0vcGFnZV9hbGxvYy5jOjQxMzk6I2lmZGVmIENPTkZJR19DT01QQUNUSU9OXG5tbS9wYWdlX2FsbG9jLmMtNDE0MC0vKiBUcnkgbWVtb3J5IGNvbXBhY3Rpb24gZm9yIGhpZ2gtb3JkZXIgYWxsb2NhdGlvbnMgYmVmb3JlIHJlY2xhaW0gKi9cbi0tXG5tbS9wYWdlX2FsbG9jLmM9NDMxNz1zaG91bGRfY29tcGFjdF9yZXRyeShnZnBfdCBnZnBfbWFzaywgc3RydWN0IGFsbG9jX2NvbnRleHQgKmFjLCBpbnQgb3JkZXIsXG4tLVxubW0vcGFnZV9hbGxvYy5jLTQzNDItfVxubW0vcGFnZV9hbGxvYy5jOjQzNDM6I2VuZGlmIC8qIENPTkZJR19DT01QQUNUSU9OICovXG5tbS9wYWdlX2FsbG9jLmMtNDM0NC1cbi0tXG5tbS92bXNjYW4uYz02MzMxPXN0YXRpYyB2b2lkIHNocmlua196b25lcyhzdHJ1Y3Qgem9uZWxpc3QgKnpvbmVsaXN0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbi0tXG5tbS92bXNjYW4uYy02MzcxLVx0XHRcdCAqL1xubW0vdm1zY2FuLmM6NjM3MjpcdFx0XHRpZiAoSVNfRU5BQkxFRChDT05GSUdfQ09NUEFDVElPTikgXHUwMDI2XHUwMDI2XG5tbS92bXNjYW4uYy02MzczLVx0XHRcdCAgICBzYy1cdTAwM2VvcmRlciBcdTAwM2UgUEFHRV9BTExPQ19DT1NUTFlfT1JERVIgXHUwMDI2XHUwMDI2XG4tLVxubW0vdm1zdGF0LmM9MTA0Mj12b2lkIG1lbW1hcF9wYWdlc19hZGQobG9uZyBkZWx0YSlcbi0tXG5tbS92bXN0YXQuYy0xMDQ2LVxubW0vdm1zdGF0LmM6MTA0NzojaWZkZWYgQ09ORklHX0NPTVBBQ1RJT05cbm1tL3Ztc3RhdC5jLTEwNDgtXG4tLVxubW0vdm1zdGF0LmM9MTE4Nz1jb25zdCBjaGFyICogY29uc3Qgdm1zdGF0X3RleHRbXSA9IHtcbi0tXG5tbS92bXN0YXQuYy0xMzcwLSNlbmRpZlxubW0vdm1zdGF0LmM6MTM3MTojaWZkZWYgQ09ORklHX0NPTVBBQ1RJT05cbm1tL3Ztc3RhdC5jLTEzNzItXHRbSShDT01QQUNUTUlHUkFURV9TQ0FOTkVEKV1cdFx0PSBcJiMzNDtjb21wYWN0X21pZ3JhdGVfc2Nhbm5lZFwmIzM0Oyxcbi0tXG5tbS92bXN0YXQuYy0xNDk2LVxubW0vdm1zdGF0LmM6MTQ5NzojaWYgKGRlZmluZWQoQ09ORklHX0RFQlVHX0ZTKSBcdTAwMjZcdTAwMjYgZGVmaW5lZChDT05GSUdfQ09NUEFDVElPTikpIHx8IFxcXG5tbS92bXN0YXQuYy0xNDk4LSAgICAgZGVmaW5lZChDT05GSUdfUFJPQ19GUylcbi0tXG5tbS92bXN0YXQuYz0yMjY4PXZvaWQgX19pbml0IGluaXRfbW1faW50ZXJuYWxzKHZvaWQpXG4tLVxubW0vdm1zdGF0LmMtMjMwMS1cbm1tL3Ztc3RhdC5jOjIzMDI6I2lmIGRlZmluZWQoQ09ORklHX0RFQlVHX0ZTKSBcdTAwMjZcdTAwMjYgZGVmaW5lZChDT05GSUdfQ09NUEFDVElPTilcbm1tL3Ztc3RhdC5jLTIzMDMtXG4tLVxubW0venNtYWxsb2MuYz0xOTk9c3RydWN0IHpzX3Bvb2wge1xuLS1cbm1tL3pzbWFsbG9jLmMtMjEzLSNlbmRpZlxubW0venNtYWxsb2MuYzoyMTQ6I2lmZGVmIENPTkZJR19DT01QQUNUSU9OXG5tbS96c21hbGxvYy5jLTIxNS1cdHN0cnVjdCB3b3JrX3N0cnVjdCBmcmVlX3dvcms7XG4tLVxubW0venNtYWxsb2MuYz0zNjA9c3RhdGljIGJvb2wgWnNIdWdlUGFnZShzdHJ1Y3QgenNwYWdlICp6c3BhZ2UpXG4tLVxubW0venNtYWxsb2MuYy0zNjQtXG5tbS96c21hbGxvYy5jOjM2NTojaWZkZWYgQ09ORklHX0NPTVBBQ1RJT05cbm1tL3pzbWFsbG9jLmMtMzY2LXN0YXRpYyB2b2lkIGtpY2tfZGVmZXJyZWRfZnJlZShzdHJ1Y3QgenNfcG9vbCAqcG9vbCk7XG4tLVxubW0venNtYWxsb2MuYz05MzE9c3RhdGljIHN0cnVjdCB6c3BhZ2UgKmFsbG9jX3pzcGFnZShzdHJ1Y3QgenNfcG9vbCAqcG9vbCxcbi0tXG5tbS96c21hbGxvYy5jLTk0MS1cbm1tL3pzbWFsbG9jLmM6OTQyOlx0aWYgKCFJU19FTkFCTEVEKENPTkZJR19DT01QQUNUSU9OKSlcbm1tL3pzbWFsbG9jLmMtOTQzLVx0XHRnZnAgXHUwMDI2PSB+X19HRlBfTU9WQUJMRTtcbi0tXG5tbS96c21hbGxvYy5jPTE1OTQ9c3RhdGljIGludCBwdXRiYWNrX3pzcGFnZShzdHJ1Y3Qgc2l6ZV9jbGFzcyAqY2xhc3MsIHN0cnVjdCB6c3BhZ2UgKnpzcGFnZSlcbi0tXG5tbS96c21hbGxvYy5jLTE2MDMtXG5tbS96c21hbGxvYy5jOjE2MDQ6I2lmZGVmIENPTkZJR19DT01QQUNUSU9OXG5tbS96c21hbGxvYy5jLTE2MDUtLypcbi0tXG5tbS96c21hbGxvYy5jPTE2MDk9c3RhdGljIHZvaWQgbG9ja196c3BhZ2Uoc3RydWN0IHpzcGFnZSAqenNwYWdlKVxuLS1cbm1tL3pzbWFsbG9jLmMtMTY0NS19XG5tbS96c21hbGxvYy5jOjE2NDY6I2VuZGlmIC8qIENPTkZJR19DT01QQUNUSU9OICovXG5tbS96c21hbGxvYy5jLTE2NDctXG5tbS96c21hbGxvYy5jOjE2NDg6I2lmZGVmIENPTkZJR19DT01QQUNUSU9OXG5tbS96c21hbGxvYy5jLTE2NDktXG4tLVxubW0venNtYWxsb2MuYz0yMjM3PXN0YXRpYyBpbnQgX19pbml0IHpzX2luaXQodm9pZClcbi0tXG5tbS96c21hbGxvYy5jLTIyNDQtXG5tbS96c21hbGxvYy5jOjIyNDU6I2lmZGVmIENPTkZJR19DT01QQUNUSU9OXG5tbS96c21hbGxvYy5jLTIyNDYtXHRyYyA9IHNldF9tb3ZhYmxlX29wcyhcdTAwMjZ6c21hbGxvY19tb3BzLCBQR1RZX3pzbWFsbG9jKTtcbi0tXG5tbS96c21hbGxvYy5jPTIyNTY9c3RhdGljIHZvaWQgX19leGl0IHpzX2V4aXQodm9pZClcbm1tL3pzbWFsbG9jLmMtMjI1Ny17XG5tbS96c21hbGxvYy5jOjIyNTg6I2lmZGVmIENPTkZJR19DT01QQUNUSU9OXG5tbS96c21hbGxvYy5jLTIyNTktXHRzZXRfbW92YWJsZV9vcHMoTlVMTCwgUEdUWV96c21hbGxvYyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjYgMjA6MjI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTQyNgoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDIwMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEtlcm5lbCYjMzk7cyBNZW1vcnkgQ29tcGFjdGlvbiBJbXBsZW1lbnRhdGlvbioqCgpPa2F5LCBzbyB0aGUgcHJpbWFyeSBjb25maWd1cmF0aW9uIG9wdGlvbiBkcml2aW5nIHRoaXMgc2VlbXMgdG8gYmUgYENPTkZJR19DT01QQUNUSU9OYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIGNoYW5nZXMgaW1wYWN0IHRoZSBzeXN0ZW0uIEl0IGxvb2tzIGxpa2UgYF9fYWxsb2NfcGFnZXNfZGlyZWN0X2NvbXBhY3RgIGlzIGNvbmRpdGlvbmFsbHkgY29tcGlsZWQgYmFzZWQgb24gYENPTkZJR19DT01QQUNUSU9OYCwgd2hpY2ggaXMgYSBrZXkgcGllY2Ugb2YgaW5mb3JtYXRpb24uIEkgc2hvdWxkIGxvb2sgZm9yIGFueSBvdGhlciByZWxhdGVkIGNvbmZpZ3VyYXRpb24gb3B0aW9ucywganVzdCBpbiBjYXNlLgoKQWxyaWdodCwgbGV0JiMzOTtzIGJyZWFrIGRvd24gdGhlIGNvZGUgbW9kaWZpY2F0aW9ucy4gVGhlIHBhdGNoIHRhcmdldHMgYG1tL2NvbXBhY3Rpb24uY2AgYW5kIGBtbS9wYWdlX2FsbG9jLmNgLCBzbyB0aG9zZSBhcmUgdGhlIGFyZWFzIG9mIGludGVyZXN0LiBJbiBgbW0vY29tcGFjdGlvbi5jYCwgSSBzZWUgZnVuY3Rpb25zIGxpa2UgYHN1aXRhYmxlX21pZ3JhdGlvbl9zb3VyY2VgLCBgZmFzdF9maW5kX21pZ3JhdGVibG9ja2AsIGBjb21wYWN0X3pvbmVfb3JkZXJgLCBhbmQgYHRyeV90b19jb21wYWN0X3BhZ2VzYC4gVGhhdCYjMzk7cyB0aGUgZXhwZWN0ZWQgY29yZSBjb21wYWN0aW9uIGxvZ2ljLgoKTm93LCBpbiBgbW0vcGFnZV9hbGxvYy5jYCwgSSYjMzk7bSBzZWVpbmcgYGNvbXBhY3Rpb25fY2FwdHVyZWAsIGBfX2FsbG9jX3BhZ2VzX2RpcmVjdF9jb21wYWN0YCwgYW5kIGBfX2FsbG9jX3BhZ2VzX2RpcmVjdF9yZWNsYWltYC4gSG1tLCB3YWl0IGEgc2Vjb25kLi4uIGBfX2FsbG9jX3BhZ2VzX2RpcmVjdF9yZWNsYWltYCBpc24mIzM5O3QgZ3VhcmRlZCBieSBhbiBgI2lmZGVmIENPTkZJR19DT01QQUNUSU9OYCBwcmVwcm9jZXNzb3IgZGlyZWN0aXZlLCB3aGljaCBpcyBpbnRlcmVzdGluZy4gSSYjMzk7bGwgbmVlZCB0byBjaGVjayB0aGUgY29kZSBhcm91bmQgbGluZSA0NDYwIGluIGBtbS9wYWdlX2FsbG9jLmNgIHRvIHVuZGVyc3RhbmQgdGhlIGV4YWN0IGNvbnRleHQgdGhlcmUuIFRoaXMgaW1wbGllcyB0aGF0IGV2ZW4gd2l0aG91dCBhY3RpdmUgY29tcGFjdGlvbiwgc29tZSBkaXJlY3QgcmVjbGFpbSBmdW5jdGlvbmFsaXR5IG1pZ2h0IHN0aWxsIGJlIGludGVyYWN0aW5nIHdpdGggdGhlIHJlbGF0ZWQgY29kZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNiAyMDoyMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL3BhZ2VfYWxsb2MuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDQ0NTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7NDQ1MDpcdFxuNDQ1MTpcdFx0cmV0dXJuIHByb2dyZXNzO1xuNDQ1MjpcdH1cbjQ0NTM6XHRcbjQ0NTQ6XHQvKiBUaGUgcmVhbGx5IHNsb3cgYWxsb2NhdG9yIHBhdGggd2hlcmUgd2UgZW50ZXIgZGlyZWN0IHJlY2xhaW0gKi9cbjQ0NTU6XHRzdGF0aWMgaW5saW5lIHN0cnVjdCBwYWdlICpcbjQ0NTY6XHRfX2FsbG9jX3BhZ2VzX2RpcmVjdF9yZWNsYWltKGdmcF90IGdmcF9tYXNrLCB1bnNpZ25lZCBpbnQgb3JkZXIsXG40NDU3Olx0XHRcdHVuc2lnbmVkIGludCBhbGxvY19mbGFncywgY29uc3Qgc3RydWN0IGFsbG9jX2NvbnRleHQgKmFjLFxuNDQ1ODpcdFx0XHR1bnNpZ25lZCBsb25nICpkaWRfc29tZV9wcm9ncmVzcylcbjQ0NTk6XHR7XG40NDYwOlx0XHRzdHJ1Y3QgcGFnZSAqcGFnZSA9IE5VTEw7XG40NDYxOlx0XHR1bnNpZ25lZCBsb25nIHBmbGFncztcbjQ0NjI6XHRcdGJvb2wgZHJhaW5lZCA9IGZhbHNlO1xuNDQ2MzpcdFx0aW50IHJlY2xhaW1fb3JkZXIgPSBvcmRlcjtcbjQ0NjQ6XHRcbjQ0NjU6XHRcdC8qIE1hdGNoIHRoZSBzbG93cGF0aCBjb21wYWN0aW9uIHByb21vdGlvbiBpbiBfX2FsbG9jX3BhZ2VzX2RpcmVjdF9jb21wYWN0ICovXG40NDY2Olx0XHRpZiAoKGFsbG9jX2ZsYWdzIFx1MDAyNiBBTExPQ19OT0ZSQUdNRU5UKSBcdTAwMjZcdTAwMjYgYWMtXHUwMDNlbWlncmF0ZXR5cGUgIT0gTUlHUkFURV9NT1ZBQkxFKVxuNDQ2NzpcdFx0XHRyZWNsYWltX29yZGVyID0gbWF4KG9yZGVyLCBwYWdlYmxvY2tfb3JkZXIpO1xuNDQ2ODpcdFxuNDQ2OTpcdFx0cHNpX21lbXN0YWxsX2VudGVyKFx1MDAyNnBmbGFncyk7XG40NDcwOlx0XHQqZGlkX3NvbWVfcHJvZ3Jlc3MgPSBfX3BlcmZvcm1fcmVjbGFpbShnZnBfbWFzaywgcmVjbGFpbV9vcmRlciwgYWMpO1xuNDQ3MTpcdFx0aWYgKHVubGlrZWx5KCEoKmRpZF9zb21lX3Byb2dyZXNzKSkpXG40NDcyOlx0XHRcdGdvdG8gb3V0O1xuNDQ3MzpcdFxuNDQ3NDpcdHJldHJ5OlxuNDQ3NTpcdFx0cGFnZSA9IGdldF9wYWdlX2Zyb21fZnJlZWxpc3QoZ2ZwX21hc2ssIG9yZGVyLCBhbGxvY19mbGFncywgYWMpO1xuNDQ3NjpcdFxuNDQ3NzpcdFx0LypcbjQ0Nzg6XHRcdCAqIElmIGFuIGFsbG9jYXRpb24gZmFpbGVkIGFmdGVyIGRpcmVjdCByZWNsYWltLCBpdCBjb3VsZCBiZSBiZWNhdXNlXG40NDc5Olx0XHQgKiBwYWdlcyBhcmUgcGlubmVkIG9uIHRoZSBwZXItY3B1IGxpc3RzIG9yIGluIGhpZ2ggYWxsb2MgcmVzZXJ2ZXMuXG40NDgwOlx0XHQgKiBTaHJpbmsgdGhlbSBhbmQgdHJ5IGFnYWluXG40NDgxOlx0XHQgKi9cbjQ0ODI6XHRcdGlmICghcGFnZSBcdTAwMjZcdTAwMjYgIWRyYWluZWQpIHtcbjQ0ODM6XHRcdFx0dW5yZXNlcnZlX2hpZ2hhdG9taWNfcGFnZWJsb2NrKGFjLCBmYWxzZSk7XG40NDg0Olx0XHRcdGRyYWluX2FsbF9wYWdlcyhOVUxMKTtcbjQ0ODU6XHRcdFx0ZHJhaW5lZCA9IHRydWU7XG40NDg2Olx0XHRcdGdvdG8gcmV0cnk7XG40NDg3Olx0XHR9XG40NDg4Olx0b3V0OlxuNDQ4OTpcdFx0cHNpX21lbXN0YWxsX2xlYXZlKFx1MDAyNnBmbGFncyk7XG40NDkwOlx0XG40NDkxOlx0XHRyZXR1cm4gcGFnZTtcbjQ0OTI6XHR9XG40NDkzOlx0XG40NDk0Olx0c3RhdGljIHZvaWQgd2FrZV9hbGxfa3N3YXBkcyh1bnNpZ25lZCBpbnQgb3JkZXIsIGdmcF90IGdmcF9tYXNrLFxuNDQ5NTpcdFx0XHRcdCAgICAgY29uc3Qgc3RydWN0IGFsbG9jX2NvbnRleHQgKmFjKVxuNDQ5NjpcdHtcbjQ0OTc6XHRcdHN0cnVjdCB6b25lcmVmICp6O1xuNDQ5ODpcdFx0c3RydWN0IHpvbmUgKnpvbmU7XG40NDk5Olx0XHRwZ19kYXRhX3QgKmxhc3RfcGdkYXQgPSBOVUxMO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDIwOjIyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwNzIwCgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogNTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzOgoKKipEaXZpbmcgaW50byB0aGUgTWVtb3J5IEFsbG9jYXRpb24gQ29kZSoqCgpBbHJpZ2h0LCBzbyBgX19hbGxvY19wYWdlc19kaXJlY3RfcmVjbGFpbWAgaXMgZGVmaW5pdGVseSBpbiB0aGUgYnVpbGQsIG5vIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIHRoZXJlLiBUaGF0JiMzOTtzIGdvb2QgdG8ga25vdy4gTm93LCBgX19hbGxvY19wYWdlc19kaXJlY3RfY29tcGFjdGAuLi4gYWgsIHRoYXQmIzM5O3MgdHVja2VkIGJlaGluZCBhIGAjaWZkZWYgQ09ORklHX0NPTVBBQ1RJT05gLiBNYWtlcyBzZW5zZS4gU28sIGl0cyBwcmVzZW5jZSBpbiB0aGUga2VybmVsIGltYWdlIGRlcGVuZHMgb24gdGhhdCBjb25maWd1cmF0aW9uIG9wdGlvbiBiZWluZyBlbmFibGVkLiBUaW1lIHRvIGRpZyBpbiBhIGJpdCBmdXJ0aGVyLiBMZXQgbWUganVtcCBvdmVyIHRvIGBtbS9wYWdlX2FsbG9jLmNgIGFuZCB0YWtlIGEgbG9vayBhcm91bmQgbGluZSA0MTQ2LiBUaGF0JiMzOTtzIGEgcmVhc29uYWJsZSBwbGFjZSB0byBzdGFydCwgZ2l2ZW4gdGhlIGZ1bmN0aW9uIG5hbWVzLiBIb3BlZnVsbHksIEkgY2FuIHNlZSBob3cgdGhlc2UgdHdvIGZ1bmN0aW9ucyBhcmUgY2FsbGVkIGFuZCBob3cgdGhleSBpbnRlcmFjdC4gTGV0JiMzOTtzIHNlZSB3aGF0IHdlIGZpbmQgdGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDIwOjIyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vcGFnZV9hbGxvYy5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNDEzMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDs0MTMwOlx0XHRyZXR1cm4gcGFnZTtcbjQxMzE6XHR9XG40MTMyOlx0XG40MTMzOlx0LypcbjQxMzQ6XHQgKiBNYXhpbXVtIG51bWJlciBvZiBjb21wYWN0aW9uIHJldHJpZXMgd2l0aCBhIHByb2dyZXNzIGJlZm9yZSBPT01cbjQxMzU6XHQgKiBraWxsZXIgaXMgY29uc2lkZXIgYXMgdGhlIG9ubHkgd2F5IHRvIG1vdmUgZm9yd2FyZC5cbjQxMzY6XHQgKi9cbjQxMzc6XHQjZGVmaW5lIE1BWF9DT01QQUNUX1JFVFJJRVMgMTZcbjQxMzg6XHRcbjQxMzk6XHQjaWZkZWYgQ09ORklHX0NPTVBBQ1RJT05cbjQxNDA6XHQvKiBUcnkgbWVtb3J5IGNvbXBhY3Rpb24gZm9yIGhpZ2gtb3JkZXIgYWxsb2NhdGlvbnMgYmVmb3JlIHJlY2xhaW0gKi9cbjQxNDE6XHRzdGF0aWMgc3RydWN0IHBhZ2UgKlxuNDE0MjpcdF9fYWxsb2NfcGFnZXNfZGlyZWN0X2NvbXBhY3QoZ2ZwX3QgZ2ZwX21hc2ssIHVuc2lnbmVkIGludCBvcmRlcixcbjQxNDM6XHRcdFx0dW5zaWduZWQgaW50IGFsbG9jX2ZsYWdzLCBjb25zdCBzdHJ1Y3QgYWxsb2NfY29udGV4dCAqYWMsXG40MTQ0Olx0XHRcdGVudW0gY29tcGFjdF9wcmlvcml0eSBwcmlvLCBlbnVtIGNvbXBhY3RfcmVzdWx0ICpjb21wYWN0X3Jlc3VsdClcbjQxNDU6XHR7XG40MTQ2Olx0XHRzdHJ1Y3QgcGFnZSAqcGFnZSA9IE5VTEw7XG40MTQ3Olx0XHR1bnNpZ25lZCBsb25nIHBmbGFncztcbjQxNDg6XHRcdHVuc2lnbmVkIGludCBub3JlY2xhaW1fZmxhZztcbjQxNDk6XHRcdHN0cnVjdCBjYXB0dXJlX2NvbnRyb2wgY2FwYyA9IHtcbjQxNTA6XHRcdFx0Lm9yZGVyID0gb3JkZXIsXG40MTUxOlx0XHRcdC5wYWdlID0gTlVMTCxcbjQxNTI6XHRcdH07XG40MTUzOlx0XHRpbnQgY29tcGFjdF9vcmRlciA9IG9yZGVyO1xuNDE1NDpcdFxuNDE1NTpcdFx0LypcbjQxNTY6XHRcdCAqIElmIGZhbGxiYWNrcyBhcmUgbm90IHBlcm1pdHRlZCAoZGVmcmFnX21vZGUpLCB3ZSBlaXRoZXJcbjQxNTc6XHRcdCAqIG5lZWQgdG8gcmVjbGFpbSBzcGFjZSBpbiBhIGJsb2NrIG9mIG1hdGNoaW5nIHR5cGUsIG9yIGNsZWFyXG40MTU4Olx0XHQgKiBvdXQgYW4gZW50aXJlIGJsb2NrIHRvIGFsbG93IF9fcm1xdWV1ZV9jbGFpbSgpIHRvIGNvbnZlcnQuXG40MTU5Olx0XHQgKlxuNDE2MDpcdFx0ICogUmVjbGFpbSBieSBpdHNlbGYgaXMgcHJpbWFyaWx5IGZyZWVpbmcgc3BhY2UgaW4gbW92YWJsZVxuNDE2MTpcdFx0ICogYmxvY2tzLCBzaW5jZSB0aGF0JiMzOTtzIHdoZXJlIHRoZSBMUlUgcGFnZXMgbGl2ZS4gU28gdGhpc1xuNDE2MjpcdFx0ICogd29ya3MgZm9yIG1vdmFibGUgcmVxdWVzdHMsIGJ1dCBub3QgZm9yIG90aGVycy5cbjQxNjM6XHRcdCAqXG40MTY0Olx0XHQgKiBGb3IgdGhvc2UsIHByb21vdGUgdGhlIG9yZGVyIHRvIGhlbHAgbWFrZSBibG9ja3MsIGluc3RlYWRcbjQxNjU6XHRcdCAqIG9mIHNwaW5uaW5nIGluIHJlY2xhaW0gYWxvbmUgdW5wcm9kdWN0aXZlbHkuXG40MTY2Olx0XHQgKi9cbjQxNjc6XHRcdGlmICgoYWxsb2NfZmxhZ3MgXHUwMDI2IEFMTE9DX05PRlJBR01FTlQpIFx1MDAyNlx1MDAyNiBhYy1cdTAwM2VtaWdyYXRldHlwZSAhPSBNSUdSQVRFX01PVkFCTEUpXG40MTY4Olx0XHRcdGNvbXBhY3Rfb3JkZXIgPSBtYXgob3JkZXIsIHBhZ2VibG9ja19vcmRlcik7XG40MTY5Olx0XG40MTcwOlx0XHRpZiAoIWNvbXBhY3Rfb3JkZXIpXG40MTcxOlx0XHRcdHJldHVybiBOVUxMO1xuNDE3MjpcdFxuNDE3MzpcdFx0LypcbjQxNzQ6XHRcdCAqIE1ha2Ugc3VyZSB0aGUgc3RydWN0cyBhcmUgcmVhbGx5IGluaXRpYWxpemVkIGJlZm9yZSB3ZSBleHBvc2UgdGhlXG40MTc1Olx0XHQgKiBjYXB0dXJlIGNvbnRyb2wsIGluIGNhc2Ugd2UgYXJlIGludGVycnVwdGVkIGFuZCB0aGUgaW50ZXJydXB0IGhhbmRsZXJcbjQxNzY6XHRcdCAqIGZyZWVzIGEgcGFnZS5cbjQxNzc6XHRcdCAqL1xuNDE3ODpcdFx0YmFycmllcigpO1xuNDE3OTpcdFx0V1JJVEVfT05DRShjdXJyZW50LVx1MDAzZWNhcHR1cmVfY29udHJvbCwgXHUwMDI2Y2FwYyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDIwOjIyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExNzIxCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogNDQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQ29tcGFjdGlvbiBDb25maWd1cmF0aW9uIFJldmlldyoqCgpPa2F5LCBzbyBtb3N0IG9mIHRoZXNlIGNoYW5nZXMgSSYjMzk7bSBsb29raW5nIGF0IGhpbmdlIG9uIGBDT05GSUdfQ09NUEFDVElPTmAuIFRoYXQmIzM5O3MgcHJldHR5IHN0YW5kYXJkLCBidXQgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGhhdmVuJiMzOTt0IG1pc3NlZCBhbnl0aGluZyBjcnVjaWFsLiBMZXQmIzM5O3Mgbm90IGFzc3VtZSBhbnl0aGluZy4gSSBuZWVkIHRvIGdldCBpbnRvIGEgbWV0aG9kaWNhbCBhcHByb2FjaCBmb3IgdGhpcy4KCkkmIzM5O20gdGhpbmtpbmcsIGFyZSB0aGVyZSBhbnkgKm90aGVyKiBjb25maWcgb3B0aW9ucyBJIG5lZWQgdG8gZG91YmxlLWNoZWNrIHJlbGF0ZWQgdG8gdGhlc2UgY29tcGFjdGlvbiBtb2RpZmljYXRpb25zPyBMZXQmIzM5O3MgdGFrZSBhIGxvb2sgYXQgYHN1aXRhYmxlX21pZ3JhdGlvbl9zb3VyY2VgIHdpdGhpbiBgbW0vY29tcGFjdGlvbi5jYC4gVGhhdCBmdW5jdGlvbiB3aWxsIGdpdmUgbWUgYSBnb29kLCBsb3ctbGV2ZWwgaW5zaWdodCBpbnRvIHRoZSBjb21wYWN0aW9uIGJlaGF2aW9yLiBUaW1lIHRvIGRlbHZlIGludG8gdGhlIGNvZGUgYW5kIHJ1bGUgb3V0IGFueSBkZXBlbmRlbmNpZXMgb3IgZWRnZSBjYXNlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjYgMjA6MjI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9jb21wYWN0aW9uLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMzcwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzEzNzA6XHRcdHJldHVybiByZXQ7XG4xMzcxOlx0fVxuMTM3MjpcdFxuMTM3MzpcdCNlbmRpZiAvKiBDT05GSUdfQ09NUEFDVElPTiB8fCBDT05GSUdfQ01BICovXG4xMzc0Olx0I2lmZGVmIENPTkZJR19DT01QQUNUSU9OXG4xMzc1Olx0XG4xMzc2Olx0c3RhdGljIGJvb2wgc3VpdGFibGVfbWlncmF0aW9uX3NvdXJjZShzdHJ1Y3QgY29tcGFjdF9jb250cm9sICpjYyxcbjEzNzc6XHRcdFx0XHRcdFx0XHRcdHN0cnVjdCBwYWdlICpwYWdlKVxuMTM3ODpcdHtcbjEzNzk6XHRcdGludCBibG9ja19tdDtcbjEzODA6XHRcbjEzODE6XHRcdGlmIChwYWdlYmxvY2tfc2tpcF9wZXJzaXN0ZW50KHBhZ2UpKVxuMTM4MjpcdFx0XHRyZXR1cm4gZmFsc2U7XG4xMzgzOlx0XG4xMzg0Olx0XHQvKlxuMTM4NTpcdFx0ICogQmFja2dyb3VuZCBjb21wYWN0aW9uIHByb2R1Y2VzIGJsb2NrcyBmb3IgdGhlIHpvbmUgYXRcbjEzODY6XHRcdCAqIGxhcmdlLCB3aXRoIG5vIHBhcnRpY3VsYXIgYWxsb2NhdGlvbiBjb250ZXh0LiBBbGxvdyBhbGxcbjEzODc6XHRcdCAqIGJsb2NrIHR5cGVzLCBpbmNsdWRpbmcgQ01BLlxuMTM4ODpcdFx0ICovXG4xMzg5Olx0XHRpZiAoIWNjLVx1MDAzZWRpcmVjdF9jb21wYWN0aW9uKVxuMTM5MDpcdFx0XHRyZXR1cm4gdHJ1ZTtcbjEzOTE6XHRcbjEzOTI6XHRcdGJsb2NrX210ID0gZ2V0X3BhZ2VibG9ja19taWdyYXRldHlwZShwYWdlKTtcbjEzOTM6XHRcbjEzOTQ6XHRcdC8qXG4xMzk1Olx0XHQgKiBDTUEgcGFnZXMgY2FuIG9ubHkgYmUgdGFrZW4gYnkgQUxMT0NfQ01BIHJlcXVlc3RzLiBGb3IgYW55Ym9keVxuMTM5NjpcdFx0ICogZWxzZSwgdmFjYXRpbmcgYSBDTUEgYmxvY2sgY29uc3VtZXMgZnJlZSBwYWdlcyB0aGUgY2FsbGVyXG4xMzk3Olx0XHQgKiBjb3VsZCBoYXZlIHVzZWQsIGFuZCBwcm9kdWNlcyBmcmVlIHBhZ2VzIGl0IGNhbm5vdC5cbjEzOTg6XHRcdCAqL1xuMTM5OTpcdFx0aWYgKGlzX21pZ3JhdGVfY21hKGJsb2NrX210KSBcdTAwMjZcdTAwMjYgIShjYy1cdTAwM2VhbGxvY19mbGFncyBcdTAwMjYgQUxMT0NfQ01BKSlcbjE0MDA6XHRcdFx0cmV0dXJuIGZhbHNlO1xuMTQwMTpcdFxuMTQwMjpcdFx0aWYgKGNjLVx1MDAzZW1vZGUgIT0gTUlHUkFURV9BU1lOQylcbjE0MDM6XHRcdFx0cmV0dXJuIHRydWU7XG4xNDA0Olx0XG4xNDA1Olx0XHQvKlxuMTQwNjpcdFx0ICogUHJldmVudCBzbWFsbCB1bm1vdmFibGUvcmVjbGFpbWFibGUgcmVxdWVzdHMgZnJvbSBwb2xsdXRpbmdcbjE0MDc6XHRcdCAqIG1vdmFibGUgYmxvY2tzIHRocm91Z2ggZmFsbGJhY2tzLiBXaG9sZS1ibG9jayBwcm9kdWN0aW9uIGlzXG4xNDA4Olx0XHQgKiBleGVtcHQgYXMgdGhlIGFsbG9jYXRvciBjbGFpbXMgYW5kIGNvbnZlcnRzIHRoZXNlLlxuMTQwOTpcdFx0ICovXG4xNDEwOlx0XHRpZiAoY2MtXHUwMDNlbWlncmF0ZXR5cGUgPT0gTUlHUkFURV9NT1ZBQkxFIHx8IGNjLVx1MDAzZW9yZGVyIFx1MDAzZT0gcGFnZWJsb2NrX29yZGVyKVxuMTQxMTpcdFx0XHRyZXR1cm4gaXNfbWlncmF0ZV9tb3ZhYmxlKGJsb2NrX210KTtcbjE0MTI6XHRcdGVsc2VcbjE0MTM6XHRcdFx0cmV0dXJuIGJsb2NrX210ID09IGNjLVx1MDAzZW1pZ3JhdGV0eXBlO1xuMTQxNDpcdH1cbjE0MTU6XHRcbjE0MTY6XHQvKiBSZXR1cm5zIHRydWUgaWYgdGhlIHBhZ2UgaXMgd2l0aGluIGEgYmxvY2sgc3VpdGFibGUgZm9yIG1pZ3JhdGlvbiB0byAqL1xuMTQxNzpcdHN0YXRpYyBib29sIHN1aXRhYmxlX21pZ3JhdGlvbl90YXJnZXQoc3RydWN0IGNvbXBhY3RfY29udHJvbCAqY2MsXG4xNDE4Olx0XHRcdFx0XHRcdFx0XHRzdHJ1Y3QgcGFnZSAqcGFnZSlcbjE0MTk6XHR7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDIwOjIyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyNjM5CgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogNjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhlc2UgY2hhbmdlcywgcGhyYXNlZCBhcyBhIHBlcnNvbmFsIHRob3VnaHQgcHJvY2VzczoKCioqRGl2aW5nIGludG8gdGhlIE1pZ3JhdGlvbiBTb3VyY2UgTG9naWMqKgoKQWxyaWdodCwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoZXNlIGNoYW5nZXMgaW4gYHN1aXRhYmxlX21pZ3JhdGlvbl9zb3VyY2VgIGFuZCBpdCYjMzk7cyBjbGVhciB0aGUgZm9jdXMgaXMgYXJvdW5kIGhvdyB3ZSYjMzk7cmUgaGFuZGxpbmcgQ01BIChDb250aWd1b3VzIE1lbW9yeSBBbGxvY2F0b3IpIG1lbW9yeSBmb3IgbWlncmF0aW9uLiBTcGVjaWZpY2FsbHksIGl0IHNlZW1zIGxpa2Ugd2UmIzM5O3JlIHJlbHlpbmcgb24gdGhlIGZ1bmN0aW9ucyBgaXNfbWlncmF0ZV9jbWEoYmxvY2tfbXQpYCBhbmQgdGhlIG1hY3JvIGBBTExPQ19DTUFgLiBNeSBpbml0aWFsIHF1ZXN0aW9uIGlzLCBkbyB0aGVzZSBjaGFuZ2VzIGltcGx5IGEgKnJlcXVpcmVtZW50KiBmb3IgYENPTkZJR19DTUFgIHRvIGJlIGVuYWJsZWQ/IEl0IHNlZW1zIGxpa2VseSwgZ2l2ZW4gdGhlIGRpcmVjdCB1c2Ugb2YgdGhlc2UgQ01BLXJlbGF0ZWQgY29uc3RydWN0cy4gSSBuZWVkIHRvIHRyYWNlIHRoaXMgYmFjay4KCkFoLCBgaXNfbWlncmF0ZV9jbWFgIGlzIGRlZmluZWQgaW4gYGluY2x1ZGUvbGludXgvbW16b25lLmhgLCB3aGljaCBpcyB0aGUgY29ycmVjdCBwbGFjZSBmb3IgbWVtb3J5IHpvbmUgaW5mb3JtYXRpb24gYW5kIGRlZmluaXRpb25zLiBUaGF0JiMzOTtzIGdvb2QsIGl0JiMzOTtzIHdoZXJlIEkmIzM5O2QgZXhwZWN0IGl0IHRvIGJlLiBUaGlzIHN1Z2dlc3RzIHRoZSBsb2dpYyBpcyBjaGVja2luZyBpZiB0aGUgY3VycmVudCBtZW1vcnkgYmxvY2sgKGBibG9ja19tdGApIGlzIGFsbG9jYXRlZCBmcm9tIGEgQ01BIHpvbmUuIEkgbmVlZCB0byBzZWUgaG93IHRoZSBpbnRlcmFjdGlvbnMgd2l0aCBgQUxMT0NfQ01BYCBhZmZlY3QgdGhlIG92ZXJhbGwgbWlncmF0aW9uIHBhdGguCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDIwOjIyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lzX21pZ3JhdGVfY21hJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvbW16b25lLmg9MTQ3PWV4dGVybiBjb25zdCBjaGFyICogY29uc3QgbWlncmF0ZXR5cGVfbmFtZXNbTUlHUkFURV9UWVBFU107XG4tLVxuaW5jbHVkZS9saW51eC9tbXpvbmUuaC0xNDktI2lmZGVmIENPTkZJR19DTUFcbmluY2x1ZGUvbGludXgvbW16b25lLmg6MTUwOiMgIGRlZmluZSBpc19taWdyYXRlX2NtYShtaWdyYXRldHlwZSkgdW5saWtlbHkoKG1pZ3JhdGV0eXBlKSA9PSBNSUdSQVRFX0NNQSlcbmluY2x1ZGUvbGludXgvbW16b25lLmg6MTUxOiMgIGRlZmluZSBpc19taWdyYXRlX2NtYV9wYWdlKF9wYWdlKSAoZ2V0X3BhZ2VibG9ja19taWdyYXRldHlwZShfcGFnZSkgPT0gTUlHUkFURV9DTUEpXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oLTE1Mi0vKlxuLS1cbmluY2x1ZGUvbGludXgvbW16b25lLmgtMTU1LSAqL1xuaW5jbHVkZS9saW51eC9tbXpvbmUuaDoxNTY6IyAgZGVmaW5lIGlzX21pZ3JhdGVfY21hX2ZvbGlvKGZvbGlvLCBwZm4pIFxcXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oLTE1Ny1cdChnZXRfcGZuYmxvY2tfbWlncmF0ZXR5cGUoXHUwMDI2Zm9saW8tXHUwMDNlcGFnZSwgcGZuKSA9PSBNSUdSQVRFX0NNQSlcbmluY2x1ZGUvbGludXgvbW16b25lLmgtMTU4LSNlbHNlXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oOjE1OTojICBkZWZpbmUgaXNfbWlncmF0ZV9jbWEobWlncmF0ZXR5cGUpIGZhbHNlXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oOjE2MDojICBkZWZpbmUgaXNfbWlncmF0ZV9jbWFfcGFnZShfcGFnZSkgZmFsc2VcbmluY2x1ZGUvbGludXgvbW16b25lLmg6MTYxOiMgIGRlZmluZSBpc19taWdyYXRlX2NtYV9mb2xpbyhmb2xpbywgcGZuKSBmYWxzZVxuaW5jbHVkZS9saW51eC9tbXpvbmUuaC0xNjItI2VuZGlmXG4tLVxuaW5jbHVkZS9saW51eC9tbXpvbmUuaD0xNjQ9c3RhdGljIGlubGluZSBib29sIGlzX21pZ3JhdGVfbW92YWJsZShpbnQgbXQpXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oLTE2NS17XG5pbmNsdWRlL2xpbnV4L21tem9uZS5oOjE2NjpcdHJldHVybiBpc19taWdyYXRlX2NtYShtdCkgfHwgbXQgPT0gTUlHUkFURV9NT1ZBQkxFO1xuaW5jbHVkZS9saW51eC9tbXpvbmUuaC0xNjctfVxuLS1cbm1tL2NvbXBhY3Rpb24uYz0xMzc2PXN0YXRpYyBib29sIHN1aXRhYmxlX21pZ3JhdGlvbl9zb3VyY2Uoc3RydWN0IGNvbXBhY3RfY29udHJvbCAqY2MsXG4tLVxubW0vY29tcGFjdGlvbi5jLTEzOTgtXHQgKi9cbm1tL2NvbXBhY3Rpb24uYzoxMzk5Olx0aWYgKGlzX21pZ3JhdGVfY21hKGJsb2NrX210KSBcdTAwMjZcdTAwMjYgIShjYy1cdTAwM2VhbGxvY19mbGFncyBcdTAwMjYgQUxMT0NfQ01BKSlcbm1tL2NvbXBhY3Rpb24uYy0xNDAwLVx0XHRyZXR1cm4gZmFsc2U7XG4tLVxubW0vZGVidWcuYz03MD1zdGF0aWMgdm9pZCBfX2R1bXBfZm9saW8oY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbywgY29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UsXG4tLVxubW0vZGVidWcuYy0xMTUtXHRwcl93YXJuKFwmIzM0OyVzZmxhZ3M6ICVwR3Alc1xcblwmIzM0OywgdHlwZSwgXHUwMDI2Zm9saW8tXHUwMDNlZmxhZ3MsXG5tbS9kZWJ1Zy5jOjExNjpcdFx0aXNfbWlncmF0ZV9jbWFfZm9saW8oZm9saW8sIHBmbikgPyBcJiMzNDsgQ01BXCYjMzQ7IDogXCYjMzQ7XCYjMzQ7KTtcbm1tL2RlYnVnLmMtMTE3LVx0aWYgKHBhZ2VfaGFzX3R5cGUoXHUwMDI2Zm9saW8tXHUwMDNlcGFnZSkpXG4tLVxubW0vcGFnZV9hbGxvYy5jPTcyOD1jb21wYWN0aW9uX2NhcHR1cmUoc3RydWN0IGNhcHR1cmVfY29udHJvbCAqY2FwYywgc3RydWN0IHBhZ2UgKnBhZ2UsXG4tLVxubW0vcGFnZV9hbGxvYy5jLTczNC1cdC8qIERvIG5vdCBhY2NpZGVudGFsbHkgcG9sbHV0ZSBDTUEgb3IgaXNvbGF0ZWQgcmVnaW9ucyovXG5tbS9wYWdlX2FsbG9jLmM6NzM1Olx0aWYgKGlzX21pZ3JhdGVfY21hKG1pZ3JhdGV0eXBlKSB8fFxubW0vcGFnZV9hbGxvYy5jLTczNi1cdCAgICBpc19taWdyYXRlX2lzb2xhdGUobWlncmF0ZXR5cGUpKVxuLS1cbm1tL3BhZ2VfYWxsb2MuYz03NzI9c3RhdGljIGlubGluZSB2b2lkIGFjY291bnRfZnJlZXBhZ2VzKHN0cnVjdCB6b25lICp6b25lLCBpbnQgbnJfcGFnZXMsXG4tLVxubW0vcGFnZV9hbGxvYy5jLTc4MS1cbm1tL3BhZ2VfYWxsb2MuYzo3ODI6XHRpZiAoaXNfbWlncmF0ZV9jbWEobWlncmF0ZXR5cGUpKVxubW0vcGFnZV9hbGxvYy5jLTc4My1cdFx0X19tb2Rfem9uZV9wYWdlX3N0YXRlKHpvbmUsIE5SX0ZSRUVfQ01BX1BBR0VTLCBucl9wYWdlcyk7XG4tLVxubW0vcGFnZV9pc29sYXRpb24uYz0xMzQ9c3RhdGljIHN0cnVjdCBwYWdlICpoYXNfdW5tb3ZhYmxlX3BhZ2VzKHVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLCB1bnNpZ25lZCBsb25nIGVuZF9wZm4sXG4tLVxubW0vcGFnZV9pc29sYXRpb24uYy0xNDItXG5tbS9wYWdlX2lzb2xhdGlvbi5jOjE0MzpcdGlmIChpc19taWdyYXRlX2NtYV9wYWdlKHBhZ2UpKSB7XG5tbS9wYWdlX2lzb2xhdGlvbi5jLTE0NC1cdFx0Lypcbi0tXG5tbS9wYWdlX293bmVyLmM9NDI1PXZvaWQgcGFnZXR5cGVpbmZvX3Nob3dtaXhlZGNvdW50X3ByaW50KHN0cnVjdCBzZXFfZmlsZSAqbSxcbi0tXG5tbS9wYWdlX293bmVyLmMtNDg1LVx0XHRcdGlmIChwYWdlYmxvY2tfbXQgIT0gcGFnZV9tdCkge1xubW0vcGFnZV9vd25lci5jOjQ4NjpcdFx0XHRcdGlmIChpc19taWdyYXRlX2NtYShwYWdlYmxvY2tfbXQpKVxubW0vcGFnZV9vd25lci5jLTQ4Ny1cdFx0XHRcdFx0Y291bnRbTUlHUkFURV9NT1ZBQkxFXSYjNDM7JiM0Mzs7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDIwOjIyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0MDk4CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogNjkzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgTWVtb3J5IENvbXBhY3Rpb24gTG9naWMqKgoKT2theSwgc28gSSYjMzk7bSBkaXZpbmcgaW50byB0aGlzIGNvZGUgcmVsYXRlZCB0byBtZW1vcnkgY29tcGFjdGlvbi4gSXQgc2VlbXMgdGhlIG1haW4gZm9jdXMgb2YgdGhpcyBwYXJ0aWN1bGFyIHNldCBvZiBjaGFuZ2VzIHJldm9sdmVzIGFyb3VuZCBvcHRpbWl6aW5nIGhvdyB0aGUgc3lzdGVtIGhhbmRsZXMgbWVtb3J5IGZyYWdtZW50YXRpb24sIHByaW1hcmlseSB3aGVuIGRlYWxpbmcgd2l0aCBhbGxvY2F0aW9ucyB0aGF0IHJlcXVpcmUgY29udGlndW91cyBwaHlzaWNhbCBtZW1vcnkuIFRoZSBgaXNfbWlncmF0ZV9jbWFgIGZsYWcgaXMgdGllZCB0byBgQ09ORklHX0NNQWAsIHdoaWNoIHN1Z2dlc3RzIHRoZXJlJiMzOTtzIHNvbWUgaW50ZXJhY3Rpb24gd2l0aCBDb250aWd1b3VzIE1lbW9yeSBBbGxvY2F0aW9uLCBidXQgdGhhdCYjMzk7cyBub3QgdGhlIGNlbnRyYWwgcGllY2UsIGF0IGxlYXN0IG5vdCBpbml0aWFsbHkuIFRoZSBjcnVjaWFsIGFzcGVjdCBhcHBlYXJzIHRvIGJlIGBDT05GSUdfQ09NUEFDVElPTmAuCgpTcGVjaWZpY2FsbHksIEkmIzM5O20ga2V5aW5nIGluIG9uIGBzdWl0YWJsZV9taWdyYXRpb25fc291cmNlYCBiZWNhdXNlIGl0IGhhcyB0aGUgaW50ZXJlc3RpbmcgY29uZGl0aW9uYWwgbG9naWMgcmVnYXJkaW5nIENNQSBwYWdlcy4gSXQgc3RhdGVzIHRoYXQgQ01BIHBhZ2VzIGNhbiBvbmx5IGJlIGFsbG9jYXRlZCBpZiBgQUxMT0NfQ01BYCBpcyBzZXQuIFRoaXMgYWZmZWN0cyB0aGUgbWlncmF0aW9uIHByb2Nlc3MsIGJ1dCBtb3JlIGJyb2FkbHksIHRoZSBjb3JlIGNoYW5nZSBpcyB3aXRoaW4gYF9fYWxsb2NfcGFnZXNfZGlyZWN0X2NvbXBhY3RgLiBMb29raW5nIGF0IHRoZSBjb2RlIGZvciB0aGF0IGZ1bmN0aW9uLCBpdCBsb29rcyBsaWtlIGl0IHByb21vdGVzIHRoZSBjb21wYWN0aW9uIG9yZGVyIHdoZW4gYEFMTE9DX05PRlJBR01FTlRgIGlzIHNldCBhbmQgdGhlIG1pZ3JhdGlvbiB0eXBlIGlzbiYjMzk7dCBtb3ZhYmxlLiBUaGlzIHNlZW1zIHRvIGJlIHdoZXJlIHRoZSByZWFsIGNoYW5nZSBsaWVzOiBib29zdGluZyB0aGUgb3JkZXIgb2YgdGhlIGNvbXBhY3Rpb24gdG8gbW9yZSBhZ2dyZXNzaXZlbHkgY3JlYXRlIGxhcmdlciBjb250aWd1b3VzIGJsb2Nrcy4KCkkgbmVlZCB0byBuYWlsIGRvd24gZXhhY3RseSB3aGVyZSB0byBmb2N1cy4gTGV0JiMzOTtzIG1ha2Ugc3VyZSBJJiMzOTttIHplcm9pbmcgaW4gb24gdGhlIHJpZ2h0IGZ1bmN0aW9uczogYF9fYWxsb2NfcGFnZXNfZGlyZWN0X2NvbXBhY3RgLCBgX19hbGxvY19wYWdlc19kaXJlY3RfcmVjbGFpbWAsIGB0cnlfdG9fY29tcGFjdF9wYWdlc2AsIGBjb21wYWN0X3pvbmVfb3JkZXJgLCBgc3VpdGFibGVfbWlncmF0aW9uX3NvdXJjZWAsIGBmYXN0X2ZpbmRfbWlncmF0ZWJsb2NrYCwgYW5kIGBjb21wYWN0aW9uX2NhcHR1cmVgLgoKQWZ0ZXIgYSBxdWljayBtZW50YWwgcmV2aWV3LCBgX19hbGxvY19wYWdlc19kaXJlY3RfY29tcGFjdGAgYW5kIGBfX2FsbG9jX3BhZ2VzX2RpcmVjdF9yZWNsYWltYCBhcmUgcGFydCBvZiB0aGUgcGFnZSBhbGxvY2F0b3ImIzM5O3Mgc2xvdyBwYXRoLCBzbyB0aGV5JiMzOTtyZSBpbXBvcnRhbnQuIGB0cnlfdG9fY29tcGFjdF9wYWdlc2Agc2VlbXMgdG8gYmUgYSBnb29kIGVudHJ5IHBvaW50IHRvIHRoZSBjb21wYWN0aW9uIGxvZ2ljLiBUaGUgb3RoZXJzIGFyZSBzdGF0aWMgb3Igc3RhdGljIGlubGluZSwgbWVhbmluZyB0aGV5IG1heSBiZSBtb3JlIGNvbnRhaW5lZC4KCldhaXQgYSBzZWNvbmQuIEl0IGxvb2tzIGxpa2UgYF9fYWxsb2NfcGFnZXNfZGlyZWN0X2NvbXBhY3RgIGlzIHN0YXRpYy4gVGhpcyBtZWFucyBpdCBpcyBvbmx5IGFjY2Vzc2libGUgZnJvbSB3aXRoaW4gYG1tL3BhZ2VfYWxsb2MuY2AuIFRoaXMgY291bGQgYmUgYSBwcm9ibGVtIGluIHRlcm1zIG9mIGRlYnVnZ2luZyBhbmQgdHJhY2luZyBiZWNhdXNlIEkgY2FuJiMzOTt0IGRpcmVjdGx5IHRhcmdldCBpdC4gYHRyeV90b19jb21wYWN0X3BhZ2VzYCBvbiB0aGUgb3RoZXIgaGFuZCwgaXMgZXhwb3J0ZWQuIE9rYXksIGxldCYjMzk7cyBoZWFkIG92ZXIgdG8gYG1tL2NvbXBhY3Rpb24uY2AgdG8gdW5kZXJzdGFuZCBgdHJ5X3RvX2NvbXBhY3RfcGFnZXNgIG1vcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDIwOjIyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3RyeV90b19jb21wYWN0X3BhZ2VzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vY29tcGFjdGlvbi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2NvbXBhY3Rpb24uYz0yNzkxPXN0YXRpYyBlbnVtIGNvbXBhY3RfcmVzdWx0IGNvbXBhY3Rfem9uZV9vcmRlcihzdHJ1Y3Qgem9uZSAqem9uZSwgaW50IG9yZGVyLFxuLS1cbm1tL2NvbXBhY3Rpb24uYy0yODMyLS8qKlxubW0vY29tcGFjdGlvbi5jOjI4MzM6ICogdHJ5X3RvX2NvbXBhY3RfcGFnZXMgLSBEaXJlY3QgY29tcGFjdCB0byBzYXRpc2Z5IGEgaGlnaC1vcmRlciBhbGxvY2F0aW9uXG5tbS9jb21wYWN0aW9uLmMtMjgzNC0gKiBAZ2ZwX21hc2s6IFRoZSBHRlAgbWFzayBvZiB0aGUgY3VycmVudCBhbGxvY2F0aW9uXG4tLVxubW0vY29tcGFjdGlvbi5jLTI4NDItICovXG5tbS9jb21wYWN0aW9uLmM6Mjg0MzplbnVtIGNvbXBhY3RfcmVzdWx0IHRyeV90b19jb21wYWN0X3BhZ2VzKGdmcF90IGdmcF9tYXNrLCB1bnNpZ25lZCBpbnQgb3JkZXIsXG5tbS9jb21wYWN0aW9uLmMtMjg0NC1cdFx0dW5zaWduZWQgaW50IGFsbG9jX2ZsYWdzLCBjb25zdCBzdHJ1Y3QgYWxsb2NfY29udGV4dCAqYWMsXG4tLVxubW0vY29tcGFjdGlvbi5jLTI4NTMtXG5tbS9jb21wYWN0aW9uLmM6Mjg1NDpcdHRyYWNlX21tX2NvbXBhY3Rpb25fdHJ5X3RvX2NvbXBhY3RfcGFnZXMob3JkZXIsIGdmcF9tYXNrLCBwcmlvKTtcbm1tL2NvbXBhY3Rpb24uYy0yODU1LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNiAyMDoyMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTYwOAoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDE5NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgU3l6a2FsbGVyJiMzOTtzIFBvdGVudGlhbCBmb3IgVGFyZ2V0aW5nIE1lbW9yeSBDb21wYWN0aW9uIEZ1bmN0aW9ucyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhlc2UgbWVtb3J5IGNvbXBhY3Rpb24gZnVuY3Rpb25zIGFuZCBob3cgdGhleSByZWxhdGUgdG8gZnV6emluZyB3aXRoIFN5emthbGxlci4gSXQgbG9va3MgbGlrZSBgdHJ5X3RvX2NvbXBhY3RfcGFnZXNgIGlzICpub3QqIGEgc3RhdGljIGZ1bmN0aW9uLCB3aGlsZSBgY29tcGFjdF96b25lX29yZGVyYCwgYHN1aXRhYmxlX21pZ3JhdGlvbl9zb3VyY2VgLCBgZmFzdF9maW5kX21pZ3JhdGVibG9ja2AsIGBfX2FsbG9jX3BhZ2VzX2RpcmVjdF9jb21wYWN0YCwgYW5kIGBfX2FsbG9jX3BhZ2VzX2RpcmVjdF9yZWNsYWltYCAqYXJlKiBzdGF0aWMuIFRoZSBxdWVzdGlvbiB0aGF0IGltbWVkaWF0ZWx5IGNvbWVzIHRvIG1pbmQsIGFzIGFuIGV4cGVydCBpbiB0aGlzIGFyZWEsIGlzIHdoZXRoZXIgU3l6a2FsbGVyIGNhbiBlZmZlY3RpdmVseSB0YXJnZXQgdGhlc2Ugc3RhdGljIGZ1bmN0aW9ucy4KClN5emthbGxlciwgaW4gZ2VuZXJhbCwgd29ya3MgYnkgZnV6emluZyBzeXNjYWxscywgc28gdGhlIHNjb3BlIGlzIHRoZSBlbnRpcmUga2VybmVsLiBUaGUga2V5IGhlcmUgaXMgdGhlIGBGb2N1c1N5bWJvbHNgIGxpc3Q7IGl0IGd1aWRlcyB0aGUgZnV6emVyIHRvIHByaW9yaXRpemUgaW5wdXRzIHRoYXQgaGl0IHNwZWNpZmljIGZ1bmN0aW9ucy4gVGhhdCBzZWVtcyBsaWtlIGEgZ29vZCBhcHByb2FjaC4gVGhlIGdvb2QgbmV3cyBpcyB0aGF0IFN5emthbGxlciB1c2VzIGluc3RydWN0aW9uIGFkZHJlc3NlcyBmb3IgY292ZXJhZ2UsIHNvIGFzIGxvbmcgYXMgdGhlIHN0YXRpYyBmdW5jdGlvbnMgYXJlbiYjMzk7dCBjb21wbGV0ZWx5IGlubGluZWQsIHdlIHNob3VsZCBiZSBhYmxlIHRvIG1hcCB0aGVtIGFuZCB1c2UgdGhlbS4KCk5vdywgYSBjcnVjaWFsIGRldGFpbCB0byB2ZXJpZnkuIEkmIzM5O20gcHJldHR5IHN1cmUgYF9fYWxsb2NfcGFnZXNfZGlyZWN0X2NvbXBhY3RgIGlzICpub3QqIGlubGluZWQuIEhvd2V2ZXIsIEkgbmVlZCB0byBkb3VibGUtY2hlY2sgb24gYF9fYWxsb2NfcGFnZXNfZGlyZWN0X3JlY2xhaW1gLiBJdCYjMzk7cyBmbGFnZ2VkIGFzIGBzdGF0aWMgaW5saW5lYCBpbiB0aGUgcGF0Y2guIEkgbmVlZCB0byBiZSBzdXJlOyBsZXQmIzM5O3MgY2hlY2sgdGhlIHNvdXJjZSBmb3IgY29uZmlybWF0aW9uLiBUaGlzIHdpbGwgbWFrZSBvciBicmVhayB0aGUgZWZmZWN0aXZlbmVzcyBvZiB0aGUgdGFyZ2V0ZWQgZnV6emluZyBjYW1wYWlnbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjYgMjA6MjI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7X19hbGxvY19wYWdlc19kaXJlY3RfcmVjbGFpbSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL3BhZ2VfYWxsb2MuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9wYWdlX2FsbG9jLmM9NDQ1NT1zdGF0aWMgaW5saW5lIHN0cnVjdCBwYWdlICpcbm1tL3BhZ2VfYWxsb2MuYzo0NDU2Ol9fYWxsb2NfcGFnZXNfZGlyZWN0X3JlY2xhaW0oZ2ZwX3QgZ2ZwX21hc2ssIHVuc2lnbmVkIGludCBvcmRlcixcbm1tL3BhZ2VfYWxsb2MuYy00NDU3LVx0XHR1bnNpZ25lZCBpbnQgYWxsb2NfZmxhZ3MsIGNvbnN0IHN0cnVjdCBhbGxvY19jb250ZXh0ICphYyxcbi0tXG5tbS9wYWdlX2FsbG9jLmM9NDc2OD1fX2FsbG9jX3BhZ2VzX3Nsb3dwYXRoKGdmcF90IGdmcF9tYXNrLCB1bnNpZ25lZCBpbnQgb3JkZXIsXG4tLVxubW0vcGFnZV9hbGxvYy5jLTQ5MTgtXHRpZiAoIWNvbXBhY3RfZmlyc3QpIHtcbm1tL3BhZ2VfYWxsb2MuYzo0OTE5Olx0XHRwYWdlID0gX19hbGxvY19wYWdlc19kaXJlY3RfcmVjbGFpbShnZnBfbWFzaywgb3JkZXIsIGFsbG9jX2ZsYWdzLFxubW0vcGFnZV9hbGxvYy5jLTQ5MjAtXHRcdFx0XHRcdFx0XHRhYywgXHUwMDI2ZGlkX3NvbWVfcHJvZ3Jlc3MpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNiAyMDoyMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjM4NAoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDU5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIHNpdHVhdGlvbiwgZ2l2ZW4gbXkgZXhwZXJ0aXNlOgoKKipFeGFtaW5pbmcgTWVtb3J5IEFsbG9jYXRpb24gSW50ZXJuYWxzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGVzZSBsb3ctbGV2ZWwgbWVtb3J5IGFsbG9jYXRpb24gZnVuY3Rpb25zLiBgX19hbGxvY19wYWdlc19kaXJlY3RfcmVjbGFpbWAgaXMgZGVjbGFyZWQgYXMgYHN0YXRpYyBpbmxpbmVgLiBUaGlzIGlzIHNpZ25pZmljYW50IGJlY2F1c2UgaXQgc3Ryb25nbHkgc3VnZ2VzdHMgdGhhdCB0aGUgY29tcGlsZXIgd2lsbCBsaWtlbHkgdHJ5IHRvICppbmxpbmUqIHRoaXMgZnVuY3Rpb24gZGlyZWN0bHkgaW50byB0aGUgYF9fYWxsb2NfcGFnZXNfc2xvd3BhdGhgIGZ1bmN0aW9uLiBUaGF0IG1lYW5zIHRoZSBjb2RlIGZyb20gYF9fYWxsb2NfcGFnZXNfZGlyZWN0X3JlY2xhaW1gIHdpbGwgYmUgbWVyZ2VkIGRpcmVjdGx5IGludG8gYF9fYWxsb2NfcGFnZXNfc2xvd3BhdGhgIHRvIHBvdGVudGlhbGx5IGluY3JlYXNlIHBlcmZvcm1hbmNlIGJ5IGVsaW1pbmF0aW5nIGEgZnVuY3Rpb24gY2FsbCBvdmVyaGVhZC4gSXQgaXMgYSBjb21tb24gY29tcGlsZXIgb3B0aW1pemF0aW9uIHRlY2huaXF1ZSB1c2VkIHRvIHJlZHVjZSBvdmVyaGVhZC4KCk5vdywgYGNvbXBhY3Rpb25fY2FwdHVyZWAgaXMgYWxzbyBgc3RhdGljIGlubGluZWAuIFRoaXMgc3VnZ2VzdHMgdGhlIHNhbWUgaW5saW5pbmcgYmVoYXZpb3IgYXMgYmVmb3JlLiBUaGlzIGlzIGFub3RoZXIgYXJlYSB0byB3YXRjaCBvdXQgZm9yIG9wdGltaXphdGlvbnMsIGFzIHRoZSBgc3RhdGljIGlubGluZWAgZGVjbGFyYXRpb24gaXMgYSBjbHVlIHRvIGl0cyBpbnRlbmRlZCB1c2FnZS4KCkZpbmFsbHksIGBfX2FsbG9jX3BhZ2VzX2RpcmVjdF9jb21wYWN0YCBpcyBkZWNsYXJlZCBhcyBgc3RhdGljYC4gIFRoaXMgaXMgaW1wb3J0YW50LiBBIGBzdGF0aWNgIGZ1bmN0aW9uIGhhcyBpbnRlcm5hbCBsaW5rYWdlIG9ubHkgYW5kIGlzIG5vdCB2aXNpYmxlIG91dHNpZGUgdGhlIGN1cnJlbnQgY29tcGlsYXRpb24gdW5pdC4gSXQgd29uJiMzOTt0IGJlIGlubGluZWQgYW5kIGlzIG9ubHkgdXNlZCB3aXRoaW4gdGhlIHNvdXJjZSBmaWxlIGl0JiMzOTtzIGRlZmluZWQgaW4uIFRoaXMgcHJvYmFibHkgbWVhbnMgaXQgcGVyZm9ybXMgYSBzcGVjaWZpYyBjb21wYWN0aW9uIHJvdXRpbmUgd2l0aGluIHRoaXMgc3BlY2lmaWMgYWxsb2NhdGlvbiBwYXRoLCBhbmQgdGhlcmUmIzM5O3Mgbm8gbmVlZCBmb3IgaXQgdG8gYmUgYWNjZXNzaWJsZSBlbHNld2hlcmUgaW4gdGhlIGtlcm5lbC4gVGhpcyBhbHNvIGxldHMgdGhlIGNvbXBpbGVyIHBlcmZvcm0gbW9yZSBhZ2dyZXNzaXZlIG9wdGltaXphdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDIwOjIyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O19fYWxsb2NfcGFnZXNfZGlyZWN0X2NvbXBhY3QmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9wYWdlX2FsbG9jLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vcGFnZV9hbGxvYy5jPTQxNDE9c3RhdGljIHN0cnVjdCBwYWdlICpcbm1tL3BhZ2VfYWxsb2MuYzo0MTQyOl9fYWxsb2NfcGFnZXNfZGlyZWN0X2NvbXBhY3QoZ2ZwX3QgZ2ZwX21hc2ssIHVuc2lnbmVkIGludCBvcmRlcixcbm1tL3BhZ2VfYWxsb2MuYy00MTQzLVx0XHR1bnNpZ25lZCBpbnQgYWxsb2NfZmxhZ3MsIGNvbnN0IHN0cnVjdCBhbGxvY19jb250ZXh0ICphYyxcbi0tXG5tbS9wYWdlX2FsbG9jLmM9NDMwNz1zdGF0aWMgaW5saW5lIHN0cnVjdCBwYWdlICpcbm1tL3BhZ2VfYWxsb2MuYzo0MzA4Ol9fYWxsb2NfcGFnZXNfZGlyZWN0X2NvbXBhY3QoZ2ZwX3QgZ2ZwX21hc2ssIHVuc2lnbmVkIGludCBvcmRlcixcbm1tL3BhZ2VfYWxsb2MuYy00MzA5LVx0XHR1bnNpZ25lZCBpbnQgYWxsb2NfZmxhZ3MsIGNvbnN0IHN0cnVjdCBhbGxvY19jb250ZXh0ICphYyxcbi0tXG5tbS9wYWdlX2FsbG9jLmM9NDQ1Nj1fX2FsbG9jX3BhZ2VzX2RpcmVjdF9yZWNsYWltKGdmcF90IGdmcF9tYXNrLCB1bnNpZ25lZCBpbnQgb3JkZXIsXG4tLVxubW0vcGFnZV9hbGxvYy5jLTQ0NjQtXG5tbS9wYWdlX2FsbG9jLmM6NDQ2NTpcdC8qIE1hdGNoIHRoZSBzbG93cGF0aCBjb21wYWN0aW9uIHByb21vdGlvbiBpbiBfX2FsbG9jX3BhZ2VzX2RpcmVjdF9jb21wYWN0ICovXG5tbS9wYWdlX2FsbG9jLmMtNDQ2Ni1cdGlmICgoYWxsb2NfZmxhZ3MgXHUwMDI2IEFMTE9DX05PRlJBR01FTlQpIFx1MDAyNlx1MDAyNiBhYy1cdTAwM2VtaWdyYXRldHlwZSAhPSBNSUdSQVRFX01PVkFCTEUpXG4tLVxubW0vcGFnZV9hbGxvYy5jPTQ3Njg9X19hbGxvY19wYWdlc19zbG93cGF0aChnZnBfdCBnZnBfbWFzaywgdW5zaWduZWQgaW50IG9yZGVyLFxuLS1cbm1tL3BhZ2VfYWxsb2MuYy00OTI1LVx0LyogVHJ5IGRpcmVjdCBjb21wYWN0aW9uIGFuZCB0aGVuIGFsbG9jYXRpbmcgKi9cbm1tL3BhZ2VfYWxsb2MuYzo0OTI2Olx0cGFnZSA9IF9fYWxsb2NfcGFnZXNfZGlyZWN0X2NvbXBhY3QoZ2ZwX21hc2ssIG9yZGVyLCBhbGxvY19mbGFncywgYWMsXG5tbS9wYWdlX2FsbG9jLmMtNDkyNy1cdFx0XHRcdFx0Y29tcGFjdF9wcmlvcml0eSwgXHUwMDI2Y29tcGFjdF9yZXN1bHQpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNiAyMDoyMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzIxMAoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDg3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLgoKKipNeSBBbmFseXNpcyBvZiB0aGUgRGlyZWN0IENvbXBhY3Rpb24gUHJvY2VzcyoqCgpSaWdodCwgc28gYF9fYWxsb2NfcGFnZXNfZGlyZWN0X2NvbXBhY3RgIGlzIGRlY2xhcmVkIGBzdGF0aWNgLCB3aGljaCBpbW1lZGlhdGVseSBuYXJyb3dzIHRoZSBzY29wZSBvZiB3aGVyZSBJIG5lZWQgdG8gZm9jdXMgbXkgYXR0ZW50aW9uLiBJdCBtZWFucyBJIG5lZWQgdG8gaWdub3JlIGl0cyBkaXJlY3QgY2FsbHMgb3V0c2lkZSBvZiB0aGUgZmlsZSBpdCYjMzk7cyBkZWZpbmVkIGluLiBUaGlzIHN1Z2dlc3RzIGEgbG9jYWxpemVkIG9wdGltaXphdGlvbiBvciBhIGhlbHBlciBmdW5jdGlvbiB0aGF04oCZcyBub3QgaW50ZW5kZWQgdG8gYmUgZXhwb3NlZCB3aWRlbHkuIFRodXMsIHRoZSByZWxldmFudCBjYWxscyB0byBmb2N1cyBvbiBhcmUgdGhlIGZ1bmN0aW9ucyBpdCBjYWxscy4KClRoZXJlZm9yZSwgdGhlIGtleSBmdW5jdGlvbnMgdG8gaW52ZXN0aWdhdGUgZnVydGhlciBhcmU6IGBfX2FsbG9jX3BhZ2VzX2RpcmVjdF9jb21wYWN0YCwgbmF0dXJhbGx5LCB0aGVuIGB0cnlfdG9fY29tcGFjdF9wYWdlc2AsIHdoaWNoIHNlZW1zIHRvIGJlIHRoZSBsb2dpY2FsIGVudHJ5IHBvaW50IGZvciB0aGUgY29tcGFjdGlvbiBhdHRlbXB0LCBmb2xsb3dlZCBieSB0aGUgem9uZS1sZXZlbCBjb21wYWN0aW9uIGxvZ2ljIGluIGBjb21wYWN0X3pvbmVfb3JkZXJgLiBJIGFsc28gd2FudCB0byBkaXZlIGludG8gdGhlIHNvdXJjZS9kZXN0aW5hdGlvbiBwYWdlIHNlbGVjdGlvbiwgYW5kIGluIHBhcnRpY3VsYXIgdG8gdW5kZXJzdGFuZCBob3cgdGhlIHN5c3RlbSBkZXRlcm1pbmVzIGEgYHN1aXRhYmxlX21pZ3JhdGlvbl9zb3VyY2VgIGFuZCBmaW5hbGx5IEkgbmVlZCB0byBrbm93IHRoZSBmYXN0IHBhdGggZm9yIGFsbG9jYXRpb24gdGhhdCBpbnZvbHZlcyBgZmFzdF9maW5kX21pZ3JhdGVibG9ja2AuCgpJIHRoaW5rIGBmYXN0X2ZpbmRfbWlncmF0ZWJsb2NrYCBpcyB0aGUgb25lIHRvIGluc3BlY3QgZmlyc3QuIEkmIzM5O2xsIHN0YXJ0IHdpdGggdGhpcyBvbmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDIwOjIyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2Zhc3RfZmluZF9taWdyYXRlYmxvY2smIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9jb21wYWN0aW9uLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vY29tcGFjdGlvbi5jPTE5NDQ9cmVpbml0X21pZ3JhdGVfcGZuKHN0cnVjdCBjb21wYWN0X2NvbnRyb2wgKmNjKVxuLS1cbm1tL2NvbXBhY3Rpb24uYy0xOTU5LSAqL1xubW0vY29tcGFjdGlvbi5jOjE5NjA6c3RhdGljIHVuc2lnbmVkIGxvbmcgZmFzdF9maW5kX21pZ3JhdGVibG9jayhzdHJ1Y3QgY29tcGFjdF9jb250cm9sICpjYylcbm1tL2NvbXBhY3Rpb24uYy0xOTYxLXtcbi0tXG5tbS9jb21wYWN0aW9uLmM9MjA4Mj1zdGF0aWMgaXNvbGF0ZV9taWdyYXRlX3QgaXNvbGF0ZV9taWdyYXRlcGFnZXMoc3RydWN0IGNvbXBhY3RfY29udHJvbCAqY2MpXG4tLVxubW0vY29tcGFjdGlvbi5jLTIwOTctXHQgKi9cbm1tL2NvbXBhY3Rpb24uYzoyMDk4Olx0bG93X3BmbiA9IGZhc3RfZmluZF9taWdyYXRlYmxvY2soY2MpO1xubW0vY29tcGFjdGlvbi5jLTIwOTktXHRibG9ja19zdGFydF9wZm4gPSBwYWdlYmxvY2tfc3RhcnRfcGZuKGxvd19wZm4pO1xuLS1cbm1tL2NvbXBhY3Rpb24uYy0yMTAzLVx0Lypcbm1tL2NvbXBhY3Rpb24uYzoyMTA0Olx0ICogZmFzdF9maW5kX21pZ3JhdGVibG9jaygpIGhhcyBhbHJlYWR5IGVuc3VyZWQgdGhlIHBhZ2VibG9jayBpcyBub3Rcbm1tL2NvbXBhY3Rpb24uYy0yMTA1LVx0ICogc2V0IHdpdGggYSBza2lwcGVkIGZsYWcsIHNvIHRvIGF2b2lkIHRoZSBpc29sYXRpb25fc3VpdGFibGUgY2hlY2tcbi0tXG5tbS9jb21wYWN0aW9uLmM9MjU1Mz1jb21wYWN0X3pvbmUoc3RydWN0IGNvbXBhY3RfY29udHJvbCAqY2MsIHN0cnVjdCBjYXB0dXJlX2NvbnRyb2wgKmNhcGMpXG4tLVxubW0vY29tcGFjdGlvbi5jLTI3MDktXHRcdFx0ICogd2l0aGluIHRoZSBwYWdlYmxvY2tfb3JkZXItYWxpZ25lZCBibG9jayBhbmRcbm1tL2NvbXBhY3Rpb24uYzoyNzEwOlx0XHRcdCAqIGZhc3RfZmluZF9taWdyYXRlYmxvY2sgbWF5IGJlIHVzZWQgdGhlbiBzY2FuIHRoZVxubW0vY29tcGFjdGlvbi5jLTI3MTEtXHRcdFx0ICogcmVtYWluZGVyIG9mIHRoZSBwYWdlYmxvY2suIFRoaXMgd2lsbCBtYXJrIHRoZVxuLS1cbm1tL2NvbXBhY3Rpb24uYy0yNzE0LVx0XHRcdCAqIGZvciB0aGUgcmVxdWVzdCBidXQgYXZvaWQgbG9vcHMgZHVlIHRvXG5tbS9jb21wYWN0aW9uLmM6MjcxNTpcdFx0XHQgKiBmYXN0X2ZpbmRfbWlncmF0ZWJsb2NrIHJldmlzaXRpbmcgYmxvY2tzIHRoYXQgd2VyZVxubW0vY29tcGFjdGlvbi5jLTI3MTYtXHRcdFx0ICogcmVjZW50bHkgcGFydGlhbGx5IHNjYW5uZWQuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDIwOjIyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4MDQzCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMTI1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBNZW1vcnkgQ29tcGFjdGlvbiBTeW1ib2wgVXNhZ2UqKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gaG93IG1lbW9yeSBjb21wYWN0aW9uIHdvcmtzLCBhbmQgdGhlIGZpcnN0IHRoaW5nIEkmIzM5O20gbm90aW5nIGlzIHRoYXQgYGZhc3RfZmluZF9taWdyYXRlYmxvY2tgICppcyogaW5kZWVkIGEgc3RhdGljIGZ1bmN0aW9uLiBUaGF0IGhlbHBzLiBHaXZlbiB0aGF0LCBteSB3b3JraW5nIGh5cG90aGVzaXMgZm9yIHRoZSBrZXkgc3ltYm9scyB1c2VkIGluIHRoZSBmb2N1cyBvZiB0aGUgcHJvY2VzcyBzaG91bGQgYmU6CgoqICAgYF9fYWxsb2NfcGFnZXNfZGlyZWN0X2NvbXBhY3RgCiogICBgdHJ5X3RvX2NvbXBhY3RfcGFnZXNgCiogICBgY29tcGFjdF96b25lX29yZGVyYAoqICAgYHN1aXRhYmxlX21pZ3JhdGlvbl9zb3VyY2VgCiogICBgZmFzdF9maW5kX21pZ3JhdGVibG9ja2AKCkJ1dCB3YWl0LCBJIG5lZWQgdG8gYmUgY2FyZWZ1bCBoZXJlLiBMb29raW5nIGFnYWluLCBgX19hbGxvY19wYWdlc19kaXJlY3RfcmVjbGFpbWAgaXMgZGVmaW5lZCBhcyBgc3RhdGljIGlubGluZWAuIFJpZ2h0LCBzbyBpdCB3b24mIzM5O3QgYmUgYSB1bmlxdWUgc3ltYm9sIGluIHRoZSBmaW5hbCBjb21waWxlZCBjb2RlLiBIbW0sIHRoYXQgY2hhbmdlcyB0aGluZ3MuIEhvd2V2ZXIsIGBfX3BlcmZvcm1fcmVjbGFpbWAgKm1pZ2h0KiBzdGlsbCBiZS4gSSBuZWVkIHRvIHZlcmlmeSB0aGF0LiBMZXQgbWUgcXVpY2tseSBkb3VibGUtY2hlY2sgdGhlIGRlZmluaXRpb24gYW5kIHVzYWdlIG9mIGBfX3BlcmZvcm1fcmVjbGFpbWAgdG8gYmUgY2VydGFpbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjYgMjA6MjI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7X19wZXJmb3JtX3JlY2xhaW0mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9wYWdlX2FsbG9jLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vcGFnZV9hbGxvYy5jPTQ0Mjk9c3RhdGljIHVuc2lnbmVkIGxvbmdcbm1tL3BhZ2VfYWxsb2MuYzo0NDMwOl9fcGVyZm9ybV9yZWNsYWltKGdmcF90IGdmcF9tYXNrLCB1bnNpZ25lZCBpbnQgb3JkZXIsXG5tbS9wYWdlX2FsbG9jLmMtNDQzMS1cdFx0XHRcdFx0Y29uc3Qgc3RydWN0IGFsbG9jX2NvbnRleHQgKmFjKVxuLS1cbm1tL3BhZ2VfYWxsb2MuYz00NDU2PV9fYWxsb2NfcGFnZXNfZGlyZWN0X3JlY2xhaW0oZ2ZwX3QgZ2ZwX21hc2ssIHVuc2lnbmVkIGludCBvcmRlcixcbi0tXG5tbS9wYWdlX2FsbG9jLmMtNDQ2OS1cdHBzaV9tZW1zdGFsbF9lbnRlcihcdTAwMjZwZmxhZ3MpO1xubW0vcGFnZV9hbGxvYy5jOjQ0NzA6XHQqZGlkX3NvbWVfcHJvZ3Jlc3MgPSBfX3BlcmZvcm1fcmVjbGFpbShnZnBfbWFzaywgcmVjbGFpbV9vcmRlciwgYWMpO1xubW0vcGFnZV9hbGxvYy5jLTQ0NzEtXHRpZiAodW5saWtlbHkoISgqZGlkX3NvbWVfcHJvZ3Jlc3MpKSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjYgMjA6MjI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTg2NDMKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiA1NTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIE1lbW9yeSBDb21wYWN0aW9uIFBhdGNoKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgaW50ZXJlc3RpbmcuIFdoaWxlIGBfX3BlcmZvcm1fcmVjbGFpbWAgaXRzZWxmIGlzbiYjMzk7dCBkaXJlY3RseSB0b3VjaGVkLCB0aGUgaW1wb3J0YW50IGNoYW5nZSBzZWVtcyB0byBiZSBpbiBgX19hbGxvY19wYWdlc19kaXJlY3RfcmVjbGFpbWAsIHdoaWNoLCBkdWUgdG8gYmVpbmcgaW5saW5lZCwgYWN0dWFsbHkgbWVhbnMgdGhlIG1vZGlmaWNhdGlvbiBpcyBoYXBwZW5pbmcgd2l0aGluIGBfX2FsbG9jX3BhZ2VzX3Nsb3dwYXRoYC4gSSBjb3VsZCB0cnkgZnV6emluZyB0aGF0IGZ1bmN0aW9uIHNpbmNlIGl0IGNvbnRhaW5zIHRoZSBsb2dpYyBmb3IgbWVtb3J5IGFsbG9jYXRpb24gZmFpbHVyZXMgYW5kIGl0JiMzOTtzIGFmZmVjdGVkLCBidXQgdGhhdCYjMzk7cyBhICp2ZXJ5KiBob3QgcGF0aC4gRm9jdXNpbmcgb24gdGhlIGNvbXBhY3Rpb24gZnVuY3Rpb25zIHNlZW1zIG1vcmUgdGFyZ2V0ZWQgYW5kIHBvdGVudGlhbGx5IG1vcmUgZnJ1aXRmdWwuCgpUaGUgZmlyc3QgdGhpbmcgSSBuZWVkZWQgdG8gY29uZmlybSB3YXMgdGhlIGNvbmZpZ3VyYXRpb24gcmVxdWlyZW1lbnRzLiBJdCBsb29rcyBsaWtlIGBDT05GSUdfQ09NUEFDVElPTmAgaXMgdGhlIG9ubHkgb25lLiBJdCYjMzk7cyB1c3VhbGx5IGVuYWJsZWQsIGJ1dCBpdCYjMzk7cyBhbHdheXMgZ29vZCB0byBiZSBleHBsaWNpdC4KCkxldCYjMzk7cyBicmVhayBkb3duIHRoZSBsb2dpYy4gVGhlIGNvcmUgb2YgdGhlIHBhdGNoIHJldm9sdmVzIGFyb3VuZCBtb2RpZmljYXRpb25zIHRvIGhvdyBkaXJlY3QgY29tcGFjdGlvbiBhbmQgcmVjbGFpbSBoYW5kbGUgcGFnZSBjYXB0dXJlIGFuZCBjb21wYWN0aW9uIG9yZGVycywgc3BlY2lmaWNhbGx5IHByb21vdGluZyB0aGUgY29tcGFjdGlvbiBvcmRlciB0byBgcGFnZWJsb2NrX29yZGVyYC4gVGhpcyBhaW1zIHRvIHJlZHVjZSBmcmFnbWVudGF0aW9uIGR1cmluZyBoaWdoZXItb3JkZXIgYWxsb2NhdGlvbnMgYW5kIHVuZGVyIG1lbW9yeSBwcmVzc3VyZS4gVGhhdCBtYWtlcyBzZW5zZSwgdGhpcyBpcyByaWdodCBpbiB0aGUgaGVhcnQgb2YgdGhlIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljLgoKRG91YmxlLWNoZWNraW5nIGZvciBhbnkgb3RoZXIgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMsIGl0IGxvb2tzIGxpa2UgYEFMTE9DX05PRlJBR01FTlRgIGlzIGEgZmxhZywgYE1JR1JBVEVfTU9WQUJMRWAgaXMgYSBtaWdyYXRldHlwZSwgYW5kIGBwYWdlYmxvY2tfb3JkZXJgIGlzIGEgbWFjcm8vdmFyaWFibGUuIEFuZCBgdHJ5X3RvX2NvbXBhY3RfcGFnZXNgIGlzIHRoZSBtYWluIGVudHJ5IHBvaW50IHRvIGl0IGFsbC4KCkdpdmVuIHRoaXMgaXMgZ2VuZXJpYyBNTSBjb2RlLCB0aGVyZSBhcmVuJiMzOTt0IGFueSBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgY29uZmlndXJhdGlvbiBjb25zaWRlcmF0aW9ucy4gVGhlcmVmb3JlLCBgRW5hYmxlQ29uZmlnc2Agc2hvdWxkIGluZGVlZCBiZSBgWyYjMzQ7Q09NUEFDVElPTiYjMzQ7XWAuCgpOb3csIGZvciBgRm9jdXNTeW1ib2xzYCwgSSYjMzk7dmUgaWRlbnRpZmllZCBzZXZlcmFsIGtleSBmdW5jdGlvbnM6CgoqICAgYF9fYWxsb2NfcGFnZXNfZGlyZWN0X2NvbXBhY3RgIC0gU2luY2UgdGhpcyBmdW5jdGlvbiBoYXMgJiMzNDtkaXJlY3QmIzM0OyBpbiBpdHMgbmFtZSwgaXQgc291bmRzIGdvb2QgdG8gc3RhcnQgd2l0aC4KKiAgIGB0cnlfdG9fY29tcGFjdF9wYWdlc2AgLSBUaGlzIHNlZW1zIHRvIGJlIHRoZSBtYWluIGVudHJ5IHBvaW50LgoqICAgYGNvbXBhY3Rfem9uZV9vcmRlcmAgLSBMaWtlbHkgaW52b2x2ZWQgaW4gZGV0ZXJtaW5pbmcgdGhlIGNvbXBhY3Rpb24gb3JkZXIuCiogICBgc3VpdGFibGVfbWlncmF0aW9uX3NvdXJjZWAgLSBQYXJ0IG9mIHRoZSBwYWdlIG1pZ3JhdGlvbiBwcm9jZXNzLgoqICAgYGZhc3RfZmluZF9taWdyYXRlYmxvY2tgIC0gUG90ZW50aWFsbHkgcmVsYXRlZCB0byBmaW5kaW5nIGJsb2NrcyBmb3IgbWlncmF0aW9uLgoKSSBuZWVkIHRvIGNvbmZpcm0gaWYgdGhlc2UgZnVuY3Rpb25zIGFyZSBpbmxpbmUuIEkmIzM5O3ZlIG5vdyB2ZXJpZmllZCB0aGF0IGBfX2FsbG9jX3BhZ2VzX2RpcmVjdF9jb21wYWN0YCAoc3RydWN0IHBhZ2VcKiksIGBjb21wYWN0X3pvbmVfb3JkZXJgIChlbnVtKSwgYHN1aXRhYmxlX21pZ3JhdGlvbl9zb3VyY2VgIChib29sKSwgYW5kIGBmYXN0X2ZpbmRfbWlncmF0ZWJsb2NrYCAodW5zaWduZWQgbG9uZykgYXJlIGFsbCBzdGF0aWMgYW5kIG5vdCBtYXJrZWQgYXMgaW5saW5lLCB3aGljaCBpcyBnb29kIGZvciB0YXJnZXRlZCBmdXp6aW5nLgoKT25lIGZpbmFsIGNoZWNrLCBpcyBgdHJ5X3RvX2NvbXBhY3RfcGFnZXNgIGV4cG9ydGVkPyBJIHNob3VsZCB2ZXJpZnkgdGhhdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjYgMjA6MjI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtFWFBPUlRfU1lNQk9MLip0cnlfdG9fY29tcGFjdF9wYWdlcyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDIwOjIyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5ODIyCgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogNzUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdW5kZXJzdGFuZGluZywgcGxheWluZyB0aGUgcm9sZSBvZiBhbiBleHBlcnQ6CgoqKkFuYWx5emluZyB0aGUgYGNvbXBhY3Rpb25gIEZ1bmN0aW9uIGluIHRoZSBLZXJuZWwgTWVtb3J5IE1hbmFnZW1lbnQgQ29kZSoqCgpBbHJpZ2h0LCBzbyB0aGUgYGNvbXBhY3Rpb25gIGZ1bmN0aW9uIGlzIGluIGBtbS9jb21wYWN0aW9uLmNgLCBidXQgaXQmIzM5O3MgKm5vdCogZXhwb3J0ZWQgYXMgYSBtb2R1bGUgZnVuY3Rpb24uIEZpbmUsIG5vIGJpZyBkZWFsLCBpdCYjMzk7cyBnbG9iYWwgKGJ1dCBub24tc3RhdGljKSwgd2hpY2ggaXMgdG90YWxseSBhY2NlcHRhYmxlIGZvciBob3cgc3l6a2FsbGVyIG9wZXJhdGVzLiBJdCYjMzk7cyBub3QgYSBwcm9ibGVtLgoKTm93LCBJIG5lZWQgdG8gbG9vayBhdCBgY29tcGFjdGlvbl9jYXB0dXJlYC4gSXQgbG9va3MgbGlrZSBpdCYjMzk7cyBhIGBzdGF0aWMgaW5saW5lYCBmdW5jdGlvbi4gVGhlIGtleSBoZXJlIGlzIHRoZSBgaW5saW5lYC4gU28sIG15IGltbWVkaWF0ZSB0aG91Z2h0IGlzOiB0aGlzIHRoaW5nJiMzOTtzIGJlZW4gKmlubGluZWQqIHdoZXJldmVyIGl0JiMzOTtzIHVzZWQuIFRoaXMgbWVhbnMgSSBuZWVkIHRvIHRyYWNlIHRoZSBjYWxsaW5nIGNvbnRleHQgYnkgY2hlY2tpbmcgd2hlcmUgaXQgaXMgY2FsbGVkIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNiAyMDoyMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb21wYWN0aW9uX2NhcHR1cmUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9wYWdlX2FsbG9jLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vcGFnZV9hbGxvYy5jPTcyNz1zdGF0aWMgaW5saW5lIGJvb2xcbm1tL3BhZ2VfYWxsb2MuYzo3Mjg6Y29tcGFjdGlvbl9jYXB0dXJlKHN0cnVjdCBjYXB0dXJlX2NvbnRyb2wgKmNhcGMsIHN0cnVjdCBwYWdlICpwYWdlLFxubW0vcGFnZV9hbGxvYy5jLTcyOS1cdFx0ICAgaW50IG9yZGVyLCBpbnQgbWlncmF0ZXR5cGUpXG4tLVxubW0vcGFnZV9hbGxvYy5jPTc2ND1zdGF0aWMgaW5saW5lIGJvb2xcbm1tL3BhZ2VfYWxsb2MuYzo3NjU6Y29tcGFjdGlvbl9jYXB0dXJlKHN0cnVjdCBjYXB0dXJlX2NvbnRyb2wgKmNhcGMsIHN0cnVjdCBwYWdlICpwYWdlLFxubW0vcGFnZV9hbGxvYy5jLTc2Ni1cdFx0ICAgaW50IG9yZGVyLCBpbnQgbWlncmF0ZXR5cGUpXG4tLVxubW0vcGFnZV9hbGxvYy5jPTkzNj1zdGF0aWMgaW5saW5lIHZvaWQgX19mcmVlX29uZV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlLFxuLS1cbm1tL3BhZ2VfYWxsb2MuYy05NTgtXG5tbS9wYWdlX2FsbG9jLmM6OTU5Olx0XHRpZiAoY29tcGFjdGlvbl9jYXB0dXJlKGNhcGMsIHBhZ2UsIG9yZGVyLCBtaWdyYXRldHlwZSkpIHtcbm1tL3BhZ2VfYWxsb2MuYy05NjAtXHRcdFx0YWNjb3VudF9mcmVlcGFnZXMoem9uZSwgLSgxIFx1MDAzY1x1MDAzYyBvcmRlciksIG1pZ3JhdGV0eXBlKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjYgMjA6MjM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjAzNjMKCQkJCQkJCW91dHB1dDogMTUwCgkJCQkJCQl0aG91Z2h0czogNDQzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBNZW1vcnkgQ29tcGFjdGlvbiBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBiZWVuIGRpZ2dpbmcgaW50byB0aGlzIHBhdGNoLiBUaGUga2V5IHRoaW5nIEkmIzM5O20gc2VlaW5nIGlzIHRoYXQgaXQmIzM5O3MgYWxsIGFib3V0IG1lbW9yeSBjb21wYWN0aW9uIGFuZCBhbGxvY2F0aW9uLCBhbmQgaG93IHRoZXkgaW50ZXJhY3QuIFNwZWNpZmljYWxseSwgaXQmIzM5O3MgbWFraW5nIHNvbWUgY2hhbmdlcyB0byBkaXJlY3QgY29tcGFjdGlvbiBhbmQgcmVjbGFpbSwgZm9jdXNpbmcgb24gaG93IHRoZXkgaGFuZGxlIHBhZ2UgY2FwdHVyZSBhbmQgY29tcGFjdGlvbiBvcmRlcnMuIFRoZSBnb2FsIHNlZW1zIHRvIGJlIHRvIGltcHJvdmUgbWVtb3J5IG1hbmFnZW1lbnQgYnkgcHJvbW90aW5nIHRoZSBjb21wYWN0aW9uIG9yZGVyIHRvIGBwYWdlYmxvY2tfb3JkZXJgIHVuZGVyIGNlcnRhaW4gYWxsb2NhdGlvbiBzY2VuYXJpb3MgdG8gcmVkdWNlIGZyYWdtZW50YXRpb24uCgpUaGUgaW1wb3J0YW50IHRoaW5nIGlzIHRoYXQgYF9fZnJlZV9vbmVfcGFnZWAgaXMgYmVpbmcgY2FsbGVkLCB3aGljaCBpcyBhIGhvdCBwYXRoLCBhbmQgd2UgZG9uJiMzOTt0IHdhbnQgdG8gaW5jbHVkZSB0aGlzIGluIGBGb2N1c1N5bWJvbHNgLgoKU28sIHRoZSBjcml0aWNhbCBmdW5jdGlvbnMgdG8gZm9jdXMgb24gYXJlOgoKKiAgIGBfX2FsbG9jX3BhZ2VzX2RpcmVjdF9jb21wYWN0YAoqICAgYHRyeV90b19jb21wYWN0X3BhZ2VzYAoqICAgYGNvbXBhY3Rfem9uZV9vcmRlcmAKKiAgIGBzdWl0YWJsZV9taWdyYXRpb25fc291cmNlYAoqICAgYGZhc3RfZmluZF9taWdyYXRlYmxvY2tgCgpJIHdlbnQgYmFjayBhbmQgY2hlY2tlZCBpZiBhbnkgb3RoZXIgZnVuY3Rpb25zIHdlcmUgbW9kaWZpZWQuIEkgZm91bmQgYHRhc2tfY2FwY2AgYnV0IHNpbmNlIHRoYXQmIzM5O3MgaW5saW5lIGl0JiMzOTtzIG5vdCBhIG1ham9yIGNvbmNlcm4uCgpUaGlua2luZyBpdCB0aHJvdWdoLCB0aGUgcGF0Y2ggaXMgdG91Y2hpbmcgY29yZSBtZW1vcnkgbWFuYWdlbWVudCDigJMgZGlyZWN0IGNvbXBhY3Rpb24sIHJlY2xhaW0sIGFsbG9jYXRpb24g4oCTIGFuZCB0aGF0JiMzOTtzIGV4YWN0bHkgdGhlIGtpbmQgb2YgdGhpbmcgd2Ugd2FudCB0byBmdXp6LiBUaGUgc2NlbmFyaW9zIGl0IHRhcmdldHMgYXJlIHRob3NlIHRoYXQgaW52b2x2ZSBoaWdoZXItb3JkZXIgbWVtb3J5IGFsbG9jYXRpb25zIGFuZCBtZW1vcnkgcHJlc3N1cmUuIEl0IHNlZW1zIGZ1bmN0aW9uYWwgYW5kIGRlZmluaXRlbHkgd29ydGh5IG9mIGZ1enppbmcuCgpUaGUgcmVsZXZhbnQgY29uZmlnIGlzIGBDT01QQUNUSU9OYCwgYW5kIHRoZXJlJiMzOTtzIGFuIG9wdGlvbmFsIGRlcGVuZGVuY2Ugb24gYENPTkZJR19DTUFgIHdpdGhpbiBgc3VpdGFibGVfbWlncmF0aW9uX3NvdXJjZWAsIGJ1dCBgQ09NUEFDVElPTmAgaXMgdGhlIHByaW1hcnkgb25lLCBzbyB0aGF0JiMzOTtzIHdoYXQgSSYjMzk7bGwgbGlzdC4KCkkgdGhpbmsgSSYjMzk7dmUgZ290IGEgc29saWQgZ3Jhc3Agb24gdGhpcyBub3cuIEkmIzM5O2xsIG1vdmUgb24gdG8gYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjYgMjA6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0NPTVBBQ1RJT04mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtfX2FsbG9jX3BhZ2VzX2RpcmVjdF9jb21wYWN0JiMzNDssCiAgICAmIzM0O3RyeV90b19jb21wYWN0X3BhZ2VzJiMzNDssCiAgICAmIzM0O2NvbXBhY3Rfem9uZV9vcmRlciYjMzQ7LAogICAgJiMzNDtzdWl0YWJsZV9taWdyYXRpb25fc291cmNlJiMzNDssCiAgICAmIzM0O2Zhc3RfZmluZF9taWdyYXRlYmxvY2smIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgbWVtb3J5IGNvbXBhY3Rpb24gYW5kIGFsbG9jYXRpb24gbG9naWMsIHNwZWNpZmljYWxseSBob3cgZGlyZWN0IGNvbXBhY3Rpb24gYW5kIHJlY2xhaW0gaGFuZGxlIHBhZ2UgY2FwdHVyZSBhbmQgY29tcGFjdGlvbiBvcmRlcnMuIEl0IHByb21vdGVzIHRoZSBjb21wYWN0aW9uIG9yZGVyIHRvIGBwYWdlYmxvY2tfb3JkZXJgIGZvciBjZXJ0YWluIGFsbG9jYXRpb25zIHRvIHByZXZlbnQgZnJhZ21lbnRhdGlvbi4gVGhpcyBpcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljIHRoYXQgaXMgcmVhY2hhYmxlIGR1cmluZyBoaWdoLW9yZGVyIG1lbW9yeSBhbGxvY2F0aW9ucyBhbmQgbWVtb3J5IHByZXNzdXJlLiBJdCBpcyBmdW5jdGlvbmFsIGFuZCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtDT01QQUNUSU9OJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7X19hbGxvY19wYWdlc19kaXJlY3RfY29tcGFjdCYjMzQ7LAogICAgJiMzNDt0cnlfdG9fY29tcGFjdF9wYWdlcyYjMzQ7LAogICAgJiMzNDtjb21wYWN0X3pvbmVfb3JkZXImIzM0OywKICAgICYjMzQ7c3VpdGFibGVfbWlncmF0aW9uX3NvdXJjZSYjMzQ7LAogICAgJiMzNDtmYXN0X2ZpbmRfbWlncmF0ZWJsb2NrJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIG1lbW9yeSBjb21wYWN0aW9uIGFuZCBhbGxvY2F0aW9uIGxvZ2ljLCBzcGVjaWZpY2FsbHkgaG93IGRpcmVjdCBjb21wYWN0aW9uIGFuZCByZWNsYWltIGhhbmRsZSBwYWdlIGNhcHR1cmUgYW5kIGNvbXBhY3Rpb24gb3JkZXJzLiBJdCBwcm9tb3RlcyB0aGUgY29tcGFjdGlvbiBvcmRlciB0byBgcGFnZWJsb2NrX29yZGVyYCBmb3IgY2VydGFpbiBhbGxvY2F0aW9ucyB0byBwcmV2ZW50IGZyYWdtZW50YXRpb24uIFRoaXMgaXMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYyB0aGF0IGlzIHJlYWNoYWJsZSBkdXJpbmcgaGlnaC1vcmRlciBtZW1vcnkgYWxsb2NhdGlvbnMgYW5kIG1lbW9yeSBwcmVzc3VyZS4gSXQgaXMgZnVuY3Rpb25hbCBhbmQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI2VDIwOjIxOjUzLjYwOTEyMTU1M1oiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc2MzA2NTkwNjQwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkNPTVBBQ1RJT05cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJfX2FsbG9jX3BhZ2VzX2RpcmVjdF9jb21wYWN0XCIsXG4gICAgXCJ0cnlfdG9fY29tcGFjdF9wYWdlc1wiLFxuICAgIFwiY29tcGFjdF96b25lX29yZGVyXCIsXG4gICAgXCJzdWl0YWJsZV9taWdyYXRpb25fc291cmNlXCIsXG4gICAgXCJmYXN0X2ZpbmRfbWlncmF0ZWJsb2NrXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgbWVtb3J5IGNvbXBhY3Rpb24gYW5kIGFsbG9jYXRpb24gbG9naWMsIHNwZWNpZmljYWxseSBob3cgZGlyZWN0IGNvbXBhY3Rpb24gYW5kIHJlY2xhaW0gaGFuZGxlIHBhZ2UgY2FwdHVyZSBhbmQgY29tcGFjdGlvbiBvcmRlcnMuIEl0IHByb21vdGVzIHRoZSBjb21wYWN0aW9uIG9yZGVyIHRvIGBwYWdlYmxvY2tfb3JkZXJgIGZvciBjZXJ0YWluIGFsbG9jYXRpb25zIHRvIHByZXZlbnQgZnJhZ21lbnRhdGlvbi4gVGhpcyBpcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljIHRoYXQgaXMgcmVhY2hhYmxlIGR1cmluZyBoaWdoLW9yZGVyIG1lbW9yeSBhbGxvY2F0aW9ucyBhbmQgbWVtb3J5IHByZXNzdXJlLiBJdCBpcyBmdW5jdGlvbmFsIGFuZCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNlQyMDoyMTo1My42MDkxMjc1NzNaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0MDc1ODg4NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDE2YmJjNGU5OWUxYWQ2ZWM3MTBjMDk5ODFkZDBkMDI2ZDMyZmJhMTVcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIEZyaSBKdW4gMjYgMjA6MjE6NTIgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9jb21wYWN0aW9uLmggYi9pbmNsdWRlL2xpbnV4L2NvbXBhY3Rpb24uaFxcbmluZGV4IGYyOWVmMDY1MzU0NmVkLi42NmEyZjcwZTllMDE5ZCAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L2NvbXBhY3Rpb24uaFxcbisrKyBiL2luY2x1ZGUvbGludXgvY29tcGFjdGlvbi5oXFxuQEAgLTU4LDYgKzU4LDcgQEAgZW51bSBjb21wYWN0X3Jlc3VsdCB7XFxuIH07XFxuIFxcbiBzdHJ1Y3QgYWxsb2NfY29udGV4dDsgLyogaW4gbW0vaW50ZXJuYWwuaCAqL1xcbitzdHJ1Y3QgY2FwdHVyZV9jb250cm9sOyAvKiBpbiBtbS9pbnRlcm5hbC5oICovXFxuIFxcbiAvKlxcbiAgKiBOdW1iZXIgb2YgZnJlZSBvcmRlci0wIHBhZ2VzIHRoYXQgc2hvdWxkIGJlIGF2YWlsYWJsZSBhYm92ZSBnaXZlbiB3YXRlcm1hcmtcXG5AQCAtOTIsNyArOTMsNyBAQCBleHRlcm4gaW50IGZyYWdtZW50YXRpb25faW5kZXgoc3RydWN0IHpvbmUgKnpvbmUsIHVuc2lnbmVkIGludCBvcmRlcik7XFxuIGV4dGVybiBlbnVtIGNvbXBhY3RfcmVzdWx0IHRyeV90b19jb21wYWN0X3BhZ2VzKGdmcF90IGdmcF9tYXNrLFxcbiBcXHRcXHR1bnNpZ25lZCBpbnQgb3JkZXIsIHVuc2lnbmVkIGludCBhbGxvY19mbGFncyxcXG4gXFx0XFx0Y29uc3Qgc3RydWN0IGFsbG9jX2NvbnRleHQgKmFjLCBlbnVtIGNvbXBhY3RfcHJpb3JpdHkgcHJpbyxcXG4tXFx0XFx0c3RydWN0IHBhZ2UgKipwYWdlKTtcXG4rXFx0XFx0c3RydWN0IGNhcHR1cmVfY29udHJvbCAqY2FwYyk7XFxuIGV4dGVybiB2b2lkIHJlc2V0X2lzb2xhdGlvbl9zdWl0YWJsZShwZ19kYXRhX3QgKnBnZGF0KTtcXG4gZXh0ZXJuIGJvb2wgY29tcGFjdGlvbl9zdWl0YWJsZShzdHJ1Y3Qgem9uZSAqem9uZSwgaW50IG9yZGVyLFxcbiBcXHRcXHRcXHRcXHR1bnNpZ25lZCBsb25nIHdhdGVybWFyaywgaW50IGhpZ2hlc3Rfem9uZWlkeCk7XFxuZGlmZiAtLWdpdCBhL21tL2NvbXBhY3Rpb24uYyBiL21tL2NvbXBhY3Rpb24uY1xcbmluZGV4IGYwODc2NWFkZTAxNGNlLi5jMjcwMWJmMWQwNGVkNyAxMDA2NDRcXG4tLS0gYS9tbS9jb21wYWN0aW9uLmNcXG4rKysgYi9tbS9jb21wYWN0aW9uLmNcXG5AQCAtMTM4MSwxMiArMTM4MSwzMyBAQCBzdGF0aWMgYm9vbCBzdWl0YWJsZV9taWdyYXRpb25fc291cmNlKHN0cnVjdCBjb21wYWN0X2NvbnRyb2wgKmNjLFxcbiBcXHRpZiAocGFnZWJsb2NrX3NraXBfcGVyc2lzdGVudChwYWdlKSlcXG4gXFx0XFx0cmV0dXJuIGZhbHNlO1xcbiBcXG4tXFx0aWYgKChjYy1cXHUwMDNlbW9kZSAhPSBNSUdSQVRFX0FTWU5DKSB8fCAhY2MtXFx1MDAzZWRpcmVjdF9jb21wYWN0aW9uKVxcbitcXHQvKlxcbitcXHQgKiBCYWNrZ3JvdW5kIGNvbXBhY3Rpb24gcHJvZHVjZXMgYmxvY2tzIGZvciB0aGUgem9uZSBhdFxcbitcXHQgKiBsYXJnZSwgd2l0aCBubyBwYXJ0aWN1bGFyIGFsbG9jYXRpb24gY29udGV4dC4gQWxsb3cgYWxsXFxuK1xcdCAqIGJsb2NrIHR5cGVzLCBpbmNsdWRpbmcgQ01BLlxcbitcXHQgKi9cXG4rXFx0aWYgKCFjYy1cXHUwMDNlZGlyZWN0X2NvbXBhY3Rpb24pXFxuIFxcdFxcdHJldHVybiB0cnVlO1xcbiBcXG4gXFx0YmxvY2tfbXQgPSBnZXRfcGFnZWJsb2NrX21pZ3JhdGV0eXBlKHBhZ2UpO1xcbiBcXG4tXFx0aWYgKGNjLVxcdTAwM2VtaWdyYXRldHlwZSA9PSBNSUdSQVRFX01PVkFCTEUpXFxuK1xcdC8qXFxuK1xcdCAqIENNQSBwYWdlcyBjYW4gb25seSBiZSB0YWtlbiBieSBBTExPQ19DTUEgcmVxdWVzdHMuIEZvciBhbnlib2R5XFxuK1xcdCAqIGVsc2UsIHZhY2F0aW5nIGEgQ01BIGJsb2NrIGNvbnN1bWVzIGZyZWUgcGFnZXMgdGhlIGNhbGxlclxcbitcXHQgKiBjb3VsZCBoYXZlIHVzZWQsIGFuZCBwcm9kdWNlcyBmcmVlIHBhZ2VzIGl0IGNhbm5vdC5cXG4rXFx0ICovXFxuK1xcdGlmIChpc19taWdyYXRlX2NtYShibG9ja19tdCkgXFx1MDAyNlxcdTAwMjYgIShjYy1cXHUwMDNlYWxsb2NfZmxhZ3MgXFx1MDAyNiBBTExPQ19DTUEpKVxcbitcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcbitcXHRpZiAoY2MtXFx1MDAzZW1vZGUgIT0gTUlHUkFURV9BU1lOQylcXG4rXFx0XFx0cmV0dXJuIHRydWU7XFxuK1xcbitcXHQvKlxcbitcXHQgKiBQcmV2ZW50IHNtYWxsIHVubW92YWJsZS9yZWNsYWltYWJsZSByZXF1ZXN0cyBmcm9tIHBvbGx1dGluZ1xcbitcXHQgKiBtb3ZhYmxlIGJsb2NrcyB0aHJvdWdoIGZhbGxiYWNrcy4gV2hvbGUtYmxvY2sgcHJvZHVjdGlvbiBpc1xcbitcXHQgKiBleGVtcHQgYXMgdGhlIGFsbG9jYXRvciBjbGFpbXMgYW5kIGNvbnZlcnRzIHRoZXNlLlxcbitcXHQgKi9cXG4rXFx0aWYgKGNjLVxcdTAwM2VtaWdyYXRldHlwZSA9PSBNSUdSQVRFX01PVkFCTEUgfHwgY2MtXFx1MDAzZW9yZGVyIFxcdTAwM2U9IHBhZ2VibG9ja19vcmRlcilcXG4gXFx0XFx0cmV0dXJuIGlzX21pZ3JhdGVfbW92YWJsZShibG9ja19tdCk7XFxuIFxcdGVsc2VcXG4gXFx0XFx0cmV0dXJuIGJsb2NrX210ID09IGNjLVxcdTAwM2VtaWdyYXRldHlwZTtcXG5AQCAtMTk3NCwxMiArMTk5NSwxMiBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBmYXN0X2ZpbmRfbWlncmF0ZWJsb2NrKHN0cnVjdCBjb21wYWN0X2NvbnRyb2wgKmNjKVxcbiBcXHRcXHRyZXR1cm4gcGZuO1xcbiBcXG4gXFx0LypcXG4tXFx0ICogT25seSBhbGxvdyBrY29tcGFjdGQgYW5kIGRpcmVjdCByZXF1ZXN0cyBmb3IgbW92YWJsZSBwYWdlcyB0b1xcbi1cXHQgKiBxdWlja2x5IGNsZWFyIG91dCBhIE1PVkFCTEUgcGFnZWJsb2NrIGZvciBhbGxvY2F0aW9uLiBUaGlzXFxuLVxcdCAqIHJlZHVjZXMgdGhlIHJpc2sgdGhhdCBhIGxhcmdlIG1vdmFibGUgcGFnZWJsb2NrIGlzIGZyZWVkIGZvclxcbi1cXHQgKiBhbiB1bm1vdmFibGUvcmVjbGFpbWFibGUgc21hbGwgYWxsb2NhdGlvbi5cXG4rXFx0ICogUHJldmVudCBzbWFsbCB1bm1vdmFibGUvcmVjbGFpbWFibGUgcmVxdWVzdHMgZnJvbSBwb2xsdXRpbmdcXG4rXFx0ICogbW92YWJsZSBibG9ja3MgdGhyb3VnaCBmYWxsYmFja3MuIFdob2xlLWJsb2NrIHByb2R1Y3Rpb24gaXNcXG4rXFx0ICogZXhlbXB0IGFzIHRoZSBhbGxvY2F0b3IgY2xhaW1zIGFuZCBjb252ZXJ0cyB0aGVzZS5cXG4gXFx0ICovXFxuLVxcdGlmIChjYy1cXHUwMDNlZGlyZWN0X2NvbXBhY3Rpb24gXFx1MDAyNlxcdTAwMjYgY2MtXFx1MDAzZW1pZ3JhdGV0eXBlICE9IE1JR1JBVEVfTU9WQUJMRSlcXG4rXFx0aWYgKGNjLVxcdTAwM2VkaXJlY3RfY29tcGFjdGlvbiBcXHUwMDI2XFx1MDAyNiBjYy1cXHUwMDNlbWlncmF0ZXR5cGUgIT0gTUlHUkFURV9NT1ZBQkxFIFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICBjYy1cXHUwMDNlb3JkZXIgXFx1MDAzYyBwYWdlYmxvY2tfb3JkZXIpXFxuIFxcdFxcdHJldHVybiBwZm47XFxuIFxcbiBcXHQvKlxcbkBAIC0yNzcwLDcgKzI3OTEsNyBAQCBjb21wYWN0X3pvbmUoc3RydWN0IGNvbXBhY3RfY29udHJvbCAqY2MsIHN0cnVjdCBjYXB0dXJlX2NvbnRyb2wgKmNhcGMpXFxuIHN0YXRpYyBlbnVtIGNvbXBhY3RfcmVzdWx0IGNvbXBhY3Rfem9uZV9vcmRlcihzdHJ1Y3Qgem9uZSAqem9uZSwgaW50IG9yZGVyLFxcbiBcXHRcXHRnZnBfdCBnZnBfbWFzaywgZW51bSBjb21wYWN0X3ByaW9yaXR5IHByaW8sXFxuIFxcdFxcdHVuc2lnbmVkIGludCBhbGxvY19mbGFncywgaW50IGhpZ2hlc3Rfem9uZWlkeCxcXG4tXFx0XFx0c3RydWN0IHBhZ2UgKipjYXB0dXJlKVxcbitcXHRcXHRzdHJ1Y3QgY2FwdHVyZV9jb250cm9sICpjYXBjKVxcbiB7XFxuIFxcdGVudW0gY29tcGFjdF9yZXN1bHQgcmV0O1xcbiBcXHRzdHJ1Y3QgY29tcGFjdF9jb250cm9sIGNjID0ge1xcbkBAIC0yNzg3LDM1ICsyODA4LDIyIEBAIHN0YXRpYyBlbnVtIGNvbXBhY3RfcmVzdWx0IGNvbXBhY3Rfem9uZV9vcmRlcihzdHJ1Y3Qgem9uZSAqem9uZSwgaW50IG9yZGVyLFxcbiBcXHRcXHQuaWdub3JlX3NraXBfaGludCA9IChwcmlvID09IE1JTl9DT01QQUNUX1BSSU9SSVRZKSxcXG4gXFx0XFx0Lmlnbm9yZV9ibG9ja19zdWl0YWJsZSA9IChwcmlvID09IE1JTl9DT01QQUNUX1BSSU9SSVRZKVxcbiBcXHR9O1xcbi1cXHRzdHJ1Y3QgY2FwdHVyZV9jb250cm9sIGNhcGMgPSB7XFxuLVxcdFxcdC5jYyA9IFxcdTAwMjZjYyxcXG4tXFx0XFx0LnBhZ2UgPSBOVUxMLFxcbi1cXHR9O1xcbiBcXG4tXFx0LypcXG4tXFx0ICogTWFrZSBzdXJlIHRoZSBzdHJ1Y3RzIGFyZSByZWFsbHkgaW5pdGlhbGl6ZWQgYmVmb3JlIHdlIGV4cG9zZSB0aGVcXG4tXFx0ICogY2FwdHVyZSBjb250cm9sLCBpbiBjYXNlIHdlIGFyZSBpbnRlcnJ1cHRlZCBhbmQgdGhlIGludGVycnVwdCBoYW5kbGVyXFxuLVxcdCAqIGZyZWVzIGEgcGFnZS5cXG4tXFx0ICovXFxuK1xcdC8qIFNlZSB0aGUgY29tbWVudCBpbiBfX2FsbG9jX3BhZ2VzX2RpcmVjdF9jb21wYWN0KCkgKi9cXG4gXFx0YmFycmllcigpO1xcbi1cXHRXUklURV9PTkNFKGN1cnJlbnQtXFx1MDAzZWNhcHR1cmVfY29udHJvbCwgXFx1MDAyNmNhcGMpO1xcbitcXHRXUklURV9PTkNFKGNhcGMtXFx1MDAzZWNjLCBcXHUwMDI2Y2MpO1xcbiBcXG4tXFx0cmV0ID0gY29tcGFjdF96b25lKFxcdTAwMjZjYywgXFx1MDAyNmNhcGMpO1xcbitcXHRyZXQgPSBjb21wYWN0X3pvbmUoXFx1MDAyNmNjLCBjYXBjKTtcXG4rXFxuK1xcdFdSSVRFX09OQ0UoY2FwYy1cXHUwMDNlY2MsIE5VTEwpO1xcbiBcXG4tXFx0LypcXG4tXFx0ICogTWFrZSBzdXJlIHdlIGhpZGUgY2FwdHVyZSBjb250cm9sIGZpcnN0IGJlZm9yZSB3ZSByZWFkIHRoZSBjYXB0dXJlZFxcbi1cXHQgKiBwYWdlIHBvaW50ZXIsIG90aGVyd2lzZSBhbiBpbnRlcnJ1cHQgY291bGQgZnJlZSBhbmQgY2FwdHVyZSBhIHBhZ2VcXG4tXFx0ICogYW5kIHdlIHdvdWxkIGxlYWsgaXQuXFxuLVxcdCAqL1xcbi1cXHRXUklURV9PTkNFKGN1cnJlbnQtXFx1MDAzZWNhcHR1cmVfY29udHJvbCwgTlVMTCk7XFxuLVxcdCpjYXB0dXJlID0gUkVBRF9PTkNFKGNhcGMucGFnZSk7XFxuIFxcdC8qXFxuIFxcdCAqIFRlY2huaWNhbGx5LCBpdCBpcyBhbHNvIHBvc3NpYmxlIHRoYXQgY29tcGFjdGlvbiBpcyBza2lwcGVkIGJ1dFxcbiBcXHQgKiB0aGUgcGFnZSBpcyBzdGlsbCBjYXB0dXJlZCBvdXQgb2YgbHVjayhJUlEgY2FtZSBhbmQgZnJlZWQgdGhlIHBhZ2UpLlxcbiBcXHQgKiBSZXR1cm5pbmcgQ09NUEFDVF9TVUNDRVNTIGluIHN1Y2ggY2FzZXMgaGVscHMgaW4gcHJvcGVybHkgYWNjb3VudGluZ1xcbiBcXHQgKiB0aGUgQ09NUEFDVFtTVEFMTHxGQUlMXSB3aGVuIGNvbXBhY3Rpb24gaXMgc2tpcHBlZC5cXG4gXFx0ICovXFxuLVxcdGlmICgqY2FwdHVyZSlcXG4rXFx0aWYgKGNhcGMtXFx1MDAzZXBhZ2UpXFxuIFxcdFxcdHJldCA9IENPTVBBQ1RfU1VDQ0VTUztcXG4gXFxuIFxcdHJldHVybiByZXQ7XFxuQEAgLTI4MjgsMTMgKzI4MzYsMTMgQEAgc3RhdGljIGVudW0gY29tcGFjdF9yZXN1bHQgY29tcGFjdF96b25lX29yZGVyKHN0cnVjdCB6b25lICp6b25lLCBpbnQgb3JkZXIsXFxuICAqIEBhbGxvY19mbGFnczogVGhlIGFsbG9jYXRpb24gZmxhZ3Mgb2YgdGhlIGN1cnJlbnQgYWxsb2NhdGlvblxcbiAgKiBAYWM6IFRoZSBjb250ZXh0IG9mIGN1cnJlbnQgYWxsb2NhdGlvblxcbiAgKiBAcHJpbzogRGV0ZXJtaW5lcyBob3cgaGFyZCBkaXJlY3QgY29tcGFjdGlvbiBzaG91bGQgdHJ5IHRvIHN1Y2NlZWRcXG4tICogQGNhcHR1cmU6IFBvaW50ZXIgdG8gZnJlZSBwYWdlIGNyZWF0ZWQgYnkgY29tcGFjdGlvbiB3aWxsIGJlIHN0b3JlZCBoZXJlXFxuKyAqIEBjYXBjOiBUaGUgY29udGV4dCBmb3IgY2FwdHVyaW5nIHBhZ2VzIGR1cmluZyBmcmVlaW5nXFxuICAqXFxuICAqIFRoaXMgaXMgdGhlIG1haW4gZW50cnkgcG9pbnQgZm9yIGRpcmVjdCBwYWdlIGNvbXBhY3Rpb24uXFxuICAqL1xcbiBlbnVtIGNvbXBhY3RfcmVzdWx0IHRyeV90b19jb21wYWN0X3BhZ2VzKGdmcF90IGdmcF9tYXNrLCB1bnNpZ25lZCBpbnQgb3JkZXIsXFxuIFxcdFxcdHVuc2lnbmVkIGludCBhbGxvY19mbGFncywgY29uc3Qgc3RydWN0IGFsbG9jX2NvbnRleHQgKmFjLFxcbi1cXHRcXHRlbnVtIGNvbXBhY3RfcHJpb3JpdHkgcHJpbywgc3RydWN0IHBhZ2UgKipjYXB0dXJlKVxcbitcXHRcXHRlbnVtIGNvbXBhY3RfcHJpb3JpdHkgcHJpbywgc3RydWN0IGNhcHR1cmVfY29udHJvbCAqY2FwYylcXG4ge1xcbiBcXHRzdHJ1Y3Qgem9uZXJlZiAqejtcXG4gXFx0c3RydWN0IHpvbmUgKnpvbmU7XFxuQEAgLTI4NjIsNyArMjg3MCw3IEBAIGVudW0gY29tcGFjdF9yZXN1bHQgdHJ5X3RvX2NvbXBhY3RfcGFnZXMoZ2ZwX3QgZ2ZwX21hc2ssIHVuc2lnbmVkIGludCBvcmRlcixcXG4gXFx0XFx0fVxcbiBcXG4gXFx0XFx0c3RhdHVzID0gY29tcGFjdF96b25lX29yZGVyKHpvbmUsIG9yZGVyLCBnZnBfbWFzaywgcHJpbyxcXG4tXFx0XFx0XFx0XFx0YWxsb2NfZmxhZ3MsIGFjLVxcdTAwM2VoaWdoZXN0X3pvbmVpZHgsIGNhcHR1cmUpO1xcbitcXHRcXHRcXHRcXHRhbGxvY19mbGFncywgYWMtXFx1MDAzZWhpZ2hlc3Rfem9uZWlkeCwgY2FwYyk7XFxuIFxcdFxcdHJjID0gbWF4KHN0YXR1cywgcmMpO1xcbiBcXG4gXFx0XFx0LyogVGhlIGFsbG9jYXRpb24gc2hvdWxkIHN1Y2NlZWQsIHN0b3AgY29tcGFjdGluZyAqL1xcbmRpZmYgLS1naXQgYS9tbS9pbnRlcm5hbC5oIGIvbW0vaW50ZXJuYWwuaFxcbmluZGV4IDE4MWU3OWYxZDZhMjA3Li4xZjYzNmNmYzg1OWExYSAxMDA2NDRcXG4tLS0gYS9tbS9pbnRlcm5hbC5oXFxuKysrIGIvbW0vaW50ZXJuYWwuaFxcbkBAIC0xMDYwLDYgKzEwNjAsMTMgQEAgc3RydWN0IGNvbXBhY3RfY29udHJvbCB7XFxuICAqL1xcbiBzdHJ1Y3QgY2FwdHVyZV9jb250cm9sIHtcXG4gXFx0c3RydWN0IGNvbXBhY3RfY29udHJvbCAqY2M7XFxuK1xcdC8qXFxuK1xcdCAqIEFsbG9jYXRpb24gcmVxdWVzdCBvcmRlci4gTWF5IGRpZmZlciBmcm9tIHRoZSBjb21wYWN0aW9uXFxuK1xcdCAqIG9yZGVyOiBkZWZyYWdfbW9kZSBwcm9tb3RlcyBzdWItYmxvY2sgYWxsb2NhdGlvbnMgdG9cXG4rXFx0ICogcGFnZWJsb2NrLW9yZGVyIGNvbXBhY3Rpb247IGNhcHR1cmUgc3RpbGwgbWF0Y2hlcyBhdCB0aGVcXG4rXFx0ICogb3JpZ2luYWwgYWxsb2NhdGlvbiBvcmRlciBzbyBwcmVwX25ld19wYWdlKCkgaXMgY29uc2lzdGVudC5cXG4rXFx0ICovXFxuK1xcdGludCBvcmRlcjtcXG4gXFx0c3RydWN0IHBhZ2UgKnBhZ2U7XFxuIH07XFxuIFxcbmRpZmYgLS1naXQgYS9tbS9wYWdlX2FsbG9jLmMgYi9tbS9wYWdlX2FsbG9jLmNcXG5pbmRleCBlZTkwMmE0NjhjMmY1Yi4uNTc1YTk5YTRjNzIzODQgMTAwNjQ0XFxuLS0tIGEvbW0vcGFnZV9hbGxvYy5jXFxuKysrIGIvbW0vcGFnZV9hbGxvYy5jXFxuQEAgLTcxOCw3ICs3MTgsNyBAQCBzdGF0aWMgaW5saW5lIHN0cnVjdCBjYXB0dXJlX2NvbnRyb2wgKnRhc2tfY2FwYyhzdHJ1Y3Qgem9uZSAqem9uZSlcXG4ge1xcbiBcXHRzdHJ1Y3QgY2FwdHVyZV9jb250cm9sICpjYXBjID0gY3VycmVudC1cXHUwMDNlY2FwdHVyZV9jb250cm9sO1xcbiBcXG4tXFx0cmV0dXJuIHVubGlrZWx5KGNhcGMpIFxcdTAwMjZcXHUwMDI2XFxuK1xcdHJldHVybiB1bmxpa2VseShjYXBjIFxcdTAwMjZcXHUwMDI2IGNhcGMtXFx1MDAzZWNjKSBcXHUwMDI2XFx1MDAyNlxcbiBcXHRcXHQhKGN1cnJlbnQtXFx1MDAzZWZsYWdzIFxcdTAwMjYgUEZfS1RIUkVBRCkgXFx1MDAyNlxcdTAwMjZcXG4gXFx0XFx0IWNhcGMtXFx1MDAzZXBhZ2UgXFx1MDAyNlxcdTAwMjZcXG4gXFx0XFx0Y2FwYy1cXHUwMDNlY2MtXFx1MDAzZXpvbmUgPT0gem9uZSA/IGNhcGMgOiBOVUxMO1xcbkBAIC03MjgsNyArNzI4LDcgQEAgc3RhdGljIGlubGluZSBib29sXFxuIGNvbXBhY3Rpb25fY2FwdHVyZShzdHJ1Y3QgY2FwdHVyZV9jb250cm9sICpjYXBjLCBzdHJ1Y3QgcGFnZSAqcGFnZSxcXG4gXFx0XFx0ICAgaW50IG9yZGVyLCBpbnQgbWlncmF0ZXR5cGUpXFxuIHtcXG4tXFx0aWYgKCFjYXBjIHx8IG9yZGVyICE9IGNhcGMtXFx1MDAzZWNjLVxcdTAwM2VvcmRlcilcXG4rXFx0aWYgKCFjYXBjIHx8IG9yZGVyICE9IGNhcGMtXFx1MDAzZW9yZGVyKVxcbiBcXHRcXHRyZXR1cm4gZmFsc2U7XFxuIFxcbiBcXHQvKiBEbyBub3QgYWNjaWRlbnRhbGx5IHBvbGx1dGUgQ01BIG9yIGlzb2xhdGVkIHJlZ2lvbnMqL1xcbkBAIC03NDgsNyArNzQ4LDcgQEAgY29tcGFjdGlvbl9jYXB0dXJlKHN0cnVjdCBjYXB0dXJlX2NvbnRyb2wgKmNhcGMsIHN0cnVjdCBwYWdlICpwYWdlLFxcbiBcXHRcXHRyZXR1cm4gZmFsc2U7XFxuIFxcbiBcXHRpZiAobWlncmF0ZXR5cGUgIT0gY2FwYy1cXHUwMDNlY2MtXFx1MDAzZW1pZ3JhdGV0eXBlKVxcbi1cXHRcXHR0cmFjZV9tbV9wYWdlX2FsbG9jX2V4dGZyYWcocGFnZSwgY2FwYy1cXHUwMDNlY2MtXFx1MDAzZW9yZGVyLCBvcmRlcixcXG4rXFx0XFx0dHJhY2VfbW1fcGFnZV9hbGxvY19leHRmcmFnKHBhZ2UsIGNhcGMtXFx1MDAzZW9yZGVyLCBvcmRlcixcXG4gXFx0XFx0XFx0XFx0XFx0ICAgIGNhcGMtXFx1MDAzZWNjLVxcdTAwM2VtaWdyYXRldHlwZSwgbWlncmF0ZXR5cGUpO1xcbiBcXG4gXFx0Y2FwYy1cXHUwMDNlcGFnZSA9IHBhZ2U7XFxuQEAgLTQxNDYsMjEgKzQxNDYsNTkgQEAgX19hbGxvY19wYWdlc19kaXJlY3RfY29tcGFjdChnZnBfdCBnZnBfbWFzaywgdW5zaWduZWQgaW50IG9yZGVyLFxcbiBcXHRzdHJ1Y3QgcGFnZSAqcGFnZSA9IE5VTEw7XFxuIFxcdHVuc2lnbmVkIGxvbmcgcGZsYWdzO1xcbiBcXHR1bnNpZ25lZCBpbnQgbm9yZWNsYWltX2ZsYWc7XFxuK1xcdHN0cnVjdCBjYXB0dXJlX2NvbnRyb2wgY2FwYyA9IHtcXG4rXFx0XFx0Lm9yZGVyID0gb3JkZXIsXFxuK1xcdFxcdC5wYWdlID0gTlVMTCxcXG4rXFx0fTtcXG4rXFx0aW50IGNvbXBhY3Rfb3JkZXIgPSBvcmRlcjtcXG4gXFxuLVxcdGlmICghb3JkZXIpXFxuK1xcdC8qXFxuK1xcdCAqIElmIGZhbGxiYWNrcyBhcmUgbm90IHBlcm1pdHRlZCAoZGVmcmFnX21vZGUpLCB3ZSBlaXRoZXJcXG4rXFx0ICogbmVlZCB0byByZWNsYWltIHNwYWNlIGluIGEgYmxvY2sgb2YgbWF0Y2hpbmcgdHlwZSwgb3IgY2xlYXJcXG4rXFx0ICogb3V0IGFuIGVudGlyZSBibG9jayB0byBhbGxvdyBfX3JtcXVldWVfY2xhaW0oKSB0byBjb252ZXJ0LlxcbitcXHQgKlxcbitcXHQgKiBSZWNsYWltIGJ5IGl0c2VsZiBpcyBwcmltYXJpbHkgZnJlZWluZyBzcGFjZSBpbiBtb3ZhYmxlXFxuK1xcdCAqIGJsb2Nrcywgc2luY2UgdGhhdCdzIHdoZXJlIHRoZSBMUlUgcGFnZXMgbGl2ZS4gU28gdGhpc1xcbitcXHQgKiB3b3JrcyBmb3IgbW92YWJsZSByZXF1ZXN0cywgYnV0IG5vdCBmb3Igb3RoZXJzLlxcbitcXHQgKlxcbitcXHQgKiBGb3IgdGhvc2UsIHByb21vdGUgdGhlIG9yZGVyIHRvIGhlbHAgbWFrZSBibG9ja3MsIGluc3RlYWRcXG4rXFx0ICogb2Ygc3Bpbm5pbmcgaW4gcmVjbGFpbSBhbG9uZSB1bnByb2R1Y3RpdmVseS5cXG4rXFx0ICovXFxuK1xcdGlmICgoYWxsb2NfZmxhZ3MgXFx1MDAyNiBBTExPQ19OT0ZSQUdNRU5UKSBcXHUwMDI2XFx1MDAyNiBhYy1cXHUwMDNlbWlncmF0ZXR5cGUgIT0gTUlHUkFURV9NT1ZBQkxFKVxcbitcXHRcXHRjb21wYWN0X29yZGVyID0gbWF4KG9yZGVyLCBwYWdlYmxvY2tfb3JkZXIpO1xcbitcXG4rXFx0aWYgKCFjb21wYWN0X29yZGVyKVxcbiBcXHRcXHRyZXR1cm4gTlVMTDtcXG4gXFxuK1xcdC8qXFxuK1xcdCAqIE1ha2Ugc3VyZSB0aGUgc3RydWN0cyBhcmUgcmVhbGx5IGluaXRpYWxpemVkIGJlZm9yZSB3ZSBleHBvc2UgdGhlXFxuK1xcdCAqIGNhcHR1cmUgY29udHJvbCwgaW4gY2FzZSB3ZSBhcmUgaW50ZXJydXB0ZWQgYW5kIHRoZSBpbnRlcnJ1cHQgaGFuZGxlclxcbitcXHQgKiBmcmVlcyBhIHBhZ2UuXFxuK1xcdCAqL1xcbitcXHRiYXJyaWVyKCk7XFxuK1xcdFdSSVRFX09OQ0UoY3VycmVudC1cXHUwMDNlY2FwdHVyZV9jb250cm9sLCBcXHUwMDI2Y2FwYyk7XFxuK1xcbiBcXHRwc2lfbWVtc3RhbGxfZW50ZXIoXFx1MDAyNnBmbGFncyk7XFxuIFxcdGRlbGF5YWNjdF9jb21wYWN0X3N0YXJ0KCk7XFxuK1xcdGZzX3JlY2xhaW1fYWNxdWlyZShnZnBfbWFzayk7XFxuIFxcdG5vcmVjbGFpbV9mbGFnID0gbWVtYWxsb2Nfbm9yZWNsYWltX3NhdmUoKTtcXG4gXFxuLVxcdCpjb21wYWN0X3Jlc3VsdCA9IHRyeV90b19jb21wYWN0X3BhZ2VzKGdmcF9tYXNrLCBvcmRlciwgYWxsb2NfZmxhZ3MsIGFjLFxcbi1cXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRwcmlvLCBcXHUwMDI2cGFnZSk7XFxuK1xcdCpjb21wYWN0X3Jlc3VsdCA9IHRyeV90b19jb21wYWN0X3BhZ2VzKGdmcF9tYXNrLCBjb21wYWN0X29yZGVyLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgICAgYWxsb2NfZmxhZ3MsIGFjLCBwcmlvLCBcXHUwMDI2Y2FwYyk7XFxuIFxcbiBcXHRtZW1hbGxvY19ub3JlY2xhaW1fcmVzdG9yZShub3JlY2xhaW1fZmxhZyk7XFxuK1xcdGZzX3JlY2xhaW1fcmVsZWFzZShnZnBfbWFzayk7XFxuIFxcdHBzaV9tZW1zdGFsbF9sZWF2ZShcXHUwMDI2cGZsYWdzKTtcXG4gXFx0ZGVsYXlhY2N0X2NvbXBhY3RfZW5kKCk7XFxuIFxcbitcXHQvKlxcbitcXHQgKiBNYWtlIHN1cmUgd2UgaGlkZSBjYXB0dXJlIGNvbnRyb2wgZmlyc3QgYmVmb3JlIHdlIHJlYWQgdGhlIGNhcHR1cmVkXFxuK1xcdCAqIHBhZ2UgcG9pbnRlciwgb3RoZXJ3aXNlIGFuIGludGVycnVwdCBjb3VsZCBmcmVlIGFuZCBjYXB0dXJlIGEgcGFnZVxcbitcXHQgKiBhbmQgd2Ugd291bGQgbGVhayBpdC5cXG4rXFx0ICovXFxuK1xcdFdSSVRFX09OQ0UoY3VycmVudC1cXHUwMDNlY2FwdHVyZV9jb250cm9sLCBOVUxMKTtcXG4rXFx0cGFnZSA9IFJFQURfT05DRShjYXBjLnBhZ2UpO1xcbitcXG4gXFx0aWYgKCpjb21wYWN0X3Jlc3VsdCA9PSBDT01QQUNUX1NLSVBQRUQgfHxcXG4gXFx0ICAgICpjb21wYWN0X3Jlc3VsdCA9PSBDT01QQUNUX0RFRkVSUkVEKVxcbiBcXHRcXHRyZXR1cm4gTlVMTDtcXG5AQCAtNDE4Miw3ICs0MjIwLDcgQEAgX19hbGxvY19wYWdlc19kaXJlY3RfY29tcGFjdChnZnBfdCBnZnBfbWFzaywgdW5zaWduZWQgaW50IG9yZGVyLFxcbiBcXHRcXHRzdHJ1Y3Qgem9uZSAqem9uZSA9IHBhZ2Vfem9uZShwYWdlKTtcXG4gXFxuIFxcdFxcdHpvbmUtXFx1MDAzZWNvbXBhY3RfYmxvY2tza2lwX2ZsdXNoID0gZmFsc2U7XFxuLVxcdFxcdGNvbXBhY3Rpb25fZGVmZXJfcmVzZXQoem9uZSwgb3JkZXIsIHRydWUpO1xcbitcXHRcXHRjb21wYWN0aW9uX2RlZmVyX3Jlc2V0KHpvbmUsIGNvbXBhY3Rfb3JkZXIsIHRydWUpO1xcbiBcXHRcXHRjb3VudF92bV9ldmVudChDT01QQUNUU1VDQ0VTUyk7XFxuIFxcdFxcdHJldHVybiBwYWdlO1xcbiBcXHR9XFxuQEAgLTQ0MjIsOSArNDQ2MCwxNCBAQCBfX2FsbG9jX3BhZ2VzX2RpcmVjdF9yZWNsYWltKGdmcF90IGdmcF9tYXNrLCB1bnNpZ25lZCBpbnQgb3JkZXIsXFxuIFxcdHN0cnVjdCBwYWdlICpwYWdlID0gTlVMTDtcXG4gXFx0dW5zaWduZWQgbG9uZyBwZmxhZ3M7XFxuIFxcdGJvb2wgZHJhaW5lZCA9IGZhbHNlO1xcbitcXHRpbnQgcmVjbGFpbV9vcmRlciA9IG9yZGVyO1xcbitcXG4rXFx0LyogTWF0Y2ggdGhlIHNsb3dwYXRoIGNvbXBhY3Rpb24gcHJvbW90aW9uIGluIF9fYWxsb2NfcGFnZXNfZGlyZWN0X2NvbXBhY3QgKi9cXG4rXFx0aWYgKChhbGxvY19mbGFncyBcXHUwMDI2IEFMTE9DX05PRlJBR01FTlQpIFxcdTAwMjZcXHUwMDI2IGFjLVxcdTAwM2VtaWdyYXRldHlwZSAhPSBNSUdSQVRFX01PVkFCTEUpXFxuK1xcdFxcdHJlY2xhaW1fb3JkZXIgPSBtYXgob3JkZXIsIHBhZ2VibG9ja19vcmRlcik7XFxuIFxcbiBcXHRwc2lfbWVtc3RhbGxfZW50ZXIoXFx1MDAyNnBmbGFncyk7XFxuLVxcdCpkaWRfc29tZV9wcm9ncmVzcyA9IF9fcGVyZm9ybV9yZWNsYWltKGdmcF9tYXNrLCBvcmRlciwgYWMpO1xcbitcXHQqZGlkX3NvbWVfcHJvZ3Jlc3MgPSBfX3BlcmZvcm1fcmVjbGFpbShnZnBfbWFzaywgcmVjbGFpbV9vcmRlciwgYWMpO1xcbiBcXHRpZiAodW5saWtlbHkoISgqZGlkX3NvbWVfcHJvZ3Jlc3MpKSlcXG4gXFx0XFx0Z290byBvdXQ7XFxuIFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNlQyMDoyMTo1NC4wNTA0NTQ0NzlaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc1ODY1MjQ5Mzc0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkNPTVBBQ1RJT05cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJfX2FsbG9jX3BhZ2VzX2RpcmVjdF9jb21wYWN0XCIsXG4gICAgXCJ0cnlfdG9fY29tcGFjdF9wYWdlc1wiLFxuICAgIFwiY29tcGFjdF96b25lX29yZGVyXCIsXG4gICAgXCJzdWl0YWJsZV9taWdyYXRpb25fc291cmNlXCIsXG4gICAgXCJmYXN0X2ZpbmRfbWlncmF0ZWJsb2NrXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgbWVtb3J5IGNvbXBhY3Rpb24gYW5kIGFsbG9jYXRpb24gbG9naWMsIHNwZWNpZmljYWxseSBob3cgZGlyZWN0IGNvbXBhY3Rpb24gYW5kIHJlY2xhaW0gaGFuZGxlIHBhZ2UgY2FwdHVyZSBhbmQgY29tcGFjdGlvbiBvcmRlcnMuIEl0IHByb21vdGVzIHRoZSBjb21wYWN0aW9uIG9yZGVyIHRvIGBwYWdlYmxvY2tfb3JkZXJgIGZvciBjZXJ0YWluIGFsbG9jYXRpb25zIHRvIHByZXZlbnQgZnJhZ21lbnRhdGlvbi4gVGhpcyBpcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljIHRoYXQgaXMgcmVhY2hhYmxlIGR1cmluZyBoaWdoLW9yZGVyIG1lbW9yeSBhbGxvY2F0aW9ucyBhbmQgbWVtb3J5IHByZXNzdXJlLiBJdCBpcyBmdW5jdGlvbmFsIGFuZCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG5ldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0XG4gICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksXG4gICBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDE2YmJjNGU5OWUxYWQ2ZWM3MTBjMDk5ODFkZDBkMDI2ZDMyZmJhMTVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEp1biAyNiAyMDoyMTo1MiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvY29tcGFjdGlvbi5oIGIvaW5jbHVkZS9saW51eC9jb21wYWN0aW9uLmhcbmluZGV4IGYyOWVmMDY1MzU0NmVkLi42NmEyZjcwZTllMDE5ZCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvY29tcGFjdGlvbi5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L2NvbXBhY3Rpb24uaFxuQEAgLTU4LDYgKzU4LDcgQEAgZW51bSBjb21wYWN0X3Jlc3VsdCB7XG4gfTtcbiBcbiBzdHJ1Y3QgYWxsb2NfY29udGV4dDsgLyogaW4gbW0vaW50ZXJuYWwuaCAqL1xuK3N0cnVjdCBjYXB0dXJlX2NvbnRyb2w7IC8qIGluIG1tL2ludGVybmFsLmggKi9cbiBcbiAvKlxuICAqIE51bWJlciBvZiBmcmVlIG9yZGVyLTAgcGFnZXMgdGhhdCBzaG91bGQgYmUgYXZhaWxhYmxlIGFib3ZlIGdpdmVuIHdhdGVybWFya1xuQEAgLTkyLDcgKzkzLDcgQEAgZXh0ZXJuIGludCBmcmFnbWVudGF0aW9uX2luZGV4KHN0cnVjdCB6b25lICp6b25lLCB1bnNpZ25lZCBpbnQgb3JkZXIpO1xuIGV4dGVybiBlbnVtIGNvbXBhY3RfcmVzdWx0IHRyeV90b19jb21wYWN0X3BhZ2VzKGdmcF90IGdmcF9tYXNrLFxuIFx0XHR1bnNpZ25lZCBpbnQgb3JkZXIsIHVuc2lnbmVkIGludCBhbGxvY19mbGFncyxcbiBcdFx0Y29uc3Qgc3RydWN0IGFsbG9jX2NvbnRleHQgKmFjLCBlbnVtIGNvbXBhY3RfcHJpb3JpdHkgcHJpbyxcbi1cdFx0c3RydWN0IHBhZ2UgKipwYWdlKTtcbitcdFx0c3RydWN0IGNhcHR1cmVfY29udHJvbCAqY2FwYyk7XG4gZXh0ZXJuIHZvaWQgcmVzZXRfaXNvbGF0aW9uX3N1aXRhYmxlKHBnX2RhdGFfdCAqcGdkYXQpO1xuIGV4dGVybiBib29sIGNvbXBhY3Rpb25fc3VpdGFibGUoc3RydWN0IHpvbmUgKnpvbmUsIGludCBvcmRlcixcbiBcdFx0XHRcdHVuc2lnbmVkIGxvbmcgd2F0ZXJtYXJrLCBpbnQgaGlnaGVzdF96b25laWR4KTtcbmRpZmYgLS1naXQgYS9tbS9jb21wYWN0aW9uLmMgYi9tbS9jb21wYWN0aW9uLmNcbmluZGV4IGYwODc2NWFkZTAxNGNlLi5jMjcwMWJmMWQwNGVkNyAxMDA2NDRcbi0tLSBhL21tL2NvbXBhY3Rpb24uY1xuKysrIGIvbW0vY29tcGFjdGlvbi5jXG5AQCAtMTM4MSwxMiArMTM4MSwzMyBAQCBzdGF0aWMgYm9vbCBzdWl0YWJsZV9taWdyYXRpb25fc291cmNlKHN0cnVjdCBjb21wYWN0X2NvbnRyb2wgKmNjLFxuIFx0aWYgKHBhZ2VibG9ja19za2lwX3BlcnNpc3RlbnQocGFnZSkpXG4gXHRcdHJldHVybiBmYWxzZTtcbiBcbi1cdGlmICgoY2MtXHUwMDNlbW9kZSAhPSBNSUdSQVRFX0FTWU5DKSB8fCAhY2MtXHUwMDNlZGlyZWN0X2NvbXBhY3Rpb24pXG4rXHQvKlxuK1x0ICogQmFja2dyb3VuZCBjb21wYWN0aW9uIHByb2R1Y2VzIGJsb2NrcyBmb3IgdGhlIHpvbmUgYXRcbitcdCAqIGxhcmdlLCB3aXRoIG5vIHBhcnRpY3VsYXIgYWxsb2NhdGlvbiBjb250ZXh0LiBBbGxvdyBhbGxcbitcdCAqIGJsb2NrIHR5cGVzLCBpbmNsdWRpbmcgQ01BLlxuK1x0ICovXG4rXHRpZiAoIWNjLVx1MDAzZWRpcmVjdF9jb21wYWN0aW9uKVxuIFx0XHRyZXR1cm4gdHJ1ZTtcbiBcbiBcdGJsb2NrX210ID0gZ2V0X3BhZ2VibG9ja19taWdyYXRldHlwZShwYWdlKTtcbiBcbi1cdGlmIChjYy1cdTAwM2VtaWdyYXRldHlwZSA9PSBNSUdSQVRFX01PVkFCTEUpXG4rXHQvKlxuK1x0ICogQ01BIHBhZ2VzIGNhbiBvbmx5IGJlIHRha2VuIGJ5IEFMTE9DX0NNQSByZXF1ZXN0cy4gRm9yIGFueWJvZHlcbitcdCAqIGVsc2UsIHZhY2F0aW5nIGEgQ01BIGJsb2NrIGNvbnN1bWVzIGZyZWUgcGFnZXMgdGhlIGNhbGxlclxuK1x0ICogY291bGQgaGF2ZSB1c2VkLCBhbmQgcHJvZHVjZXMgZnJlZSBwYWdlcyBpdCBjYW5ub3QuXG4rXHQgKi9cbitcdGlmIChpc19taWdyYXRlX2NtYShibG9ja19tdCkgXHUwMDI2XHUwMDI2ICEoY2MtXHUwMDNlYWxsb2NfZmxhZ3MgXHUwMDI2IEFMTE9DX0NNQSkpXG4rXHRcdHJldHVybiBmYWxzZTtcbitcbitcdGlmIChjYy1cdTAwM2Vtb2RlICE9IE1JR1JBVEVfQVNZTkMpXG4rXHRcdHJldHVybiB0cnVlO1xuK1xuK1x0LypcbitcdCAqIFByZXZlbnQgc21hbGwgdW5tb3ZhYmxlL3JlY2xhaW1hYmxlIHJlcXVlc3RzIGZyb20gcG9sbHV0aW5nXG4rXHQgKiBtb3ZhYmxlIGJsb2NrcyB0aHJvdWdoIGZhbGxiYWNrcy4gV2hvbGUtYmxvY2sgcHJvZHVjdGlvbiBpc1xuK1x0ICogZXhlbXB0IGFzIHRoZSBhbGxvY2F0b3IgY2xhaW1zIGFuZCBjb252ZXJ0cyB0aGVzZS5cbitcdCAqL1xuK1x0aWYgKGNjLVx1MDAzZW1pZ3JhdGV0eXBlID09IE1JR1JBVEVfTU9WQUJMRSB8fCBjYy1cdTAwM2VvcmRlciBcdTAwM2U9IHBhZ2VibG9ja19vcmRlcilcbiBcdFx0cmV0dXJuIGlzX21pZ3JhdGVfbW92YWJsZShibG9ja19tdCk7XG4gXHRlbHNlXG4gXHRcdHJldHVybiBibG9ja19tdCA9PSBjYy1cdTAwM2VtaWdyYXRldHlwZTtcbkBAIC0xOTc0LDEyICsxOTk1LDEyIEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIGZhc3RfZmluZF9taWdyYXRlYmxvY2soc3RydWN0IGNvbXBhY3RfY29udHJvbCAqY2MpXG4gXHRcdHJldHVybiBwZm47XG4gXG4gXHQvKlxuLVx0ICogT25seSBhbGxvdyBrY29tcGFjdGQgYW5kIGRpcmVjdCByZXF1ZXN0cyBmb3IgbW92YWJsZSBwYWdlcyB0b1xuLVx0ICogcXVpY2tseSBjbGVhciBvdXQgYSBNT1ZBQkxFIHBhZ2VibG9jayBmb3IgYWxsb2NhdGlvbi4gVGhpc1xuLVx0ICogcmVkdWNlcyB0aGUgcmlzayB0aGF0IGEgbGFyZ2UgbW92YWJsZSBwYWdlYmxvY2sgaXMgZnJlZWQgZm9yXG4tXHQgKiBhbiB1bm1vdmFibGUvcmVjbGFpbWFibGUgc21hbGwgYWxsb2NhdGlvbi5cbitcdCAqIFByZXZlbnQgc21hbGwgdW5tb3ZhYmxlL3JlY2xhaW1hYmxlIHJlcXVlc3RzIGZyb20gcG9sbHV0aW5nXG4rXHQgKiBtb3ZhYmxlIGJsb2NrcyB0aHJvdWdoIGZhbGxiYWNrcy4gV2hvbGUtYmxvY2sgcHJvZHVjdGlvbiBpc1xuK1x0ICogZXhlbXB0IGFzIHRoZSBhbGxvY2F0b3IgY2xhaW1zIGFuZCBjb252ZXJ0cyB0aGVzZS5cbiBcdCAqL1xuLVx0aWYgKGNjLVx1MDAzZWRpcmVjdF9jb21wYWN0aW9uIFx1MDAyNlx1MDAyNiBjYy1cdTAwM2VtaWdyYXRldHlwZSAhPSBNSUdSQVRFX01PVkFCTEUpXG4rXHRpZiAoY2MtXHUwMDNlZGlyZWN0X2NvbXBhY3Rpb24gXHUwMDI2XHUwMDI2IGNjLVx1MDAzZW1pZ3JhdGV0eXBlICE9IE1JR1JBVEVfTU9WQUJMRSBcdTAwMjZcdTAwMjZcbitcdCAgICBjYy1cdTAwM2VvcmRlciBcdTAwM2MgcGFnZWJsb2NrX29yZGVyKVxuIFx0XHRyZXR1cm4gcGZuO1xuIFxuIFx0LypcbkBAIC0yNzcwLDcgKzI3OTEsNyBAQCBjb21wYWN0X3pvbmUoc3RydWN0IGNvbXBhY3RfY29udHJvbCAqY2MsIHN0cnVjdCBjYXB0dXJlX2NvbnRyb2wgKmNhcGMpXG4gc3RhdGljIGVudW0gY29tcGFjdF9yZXN1bHQgY29tcGFjdF96b25lX29yZGVyKHN0cnVjdCB6b25lICp6b25lLCBpbnQgb3JkZXIsXG4gXHRcdGdmcF90IGdmcF9tYXNrLCBlbnVtIGNvbXBhY3RfcHJpb3JpdHkgcHJpbyxcbiBcdFx0dW5zaWduZWQgaW50IGFsbG9jX2ZsYWdzLCBpbnQgaGlnaGVzdF96b25laWR4LFxuLVx0XHRzdHJ1Y3QgcGFnZSAqKmNhcHR1cmUpXG4rXHRcdHN0cnVjdCBjYXB0dXJlX2NvbnRyb2wgKmNhcGMpXG4ge1xuIFx0ZW51bSBjb21wYWN0X3Jlc3VsdCByZXQ7XG4gXHRzdHJ1Y3QgY29tcGFjdF9jb250cm9sIGNjID0ge1xuQEAgLTI3ODcsMzUgKzI4MDgsMjIgQEAgc3RhdGljIGVudW0gY29tcGFjdF9yZXN1bHQgY29tcGFjdF96b25lX29yZGVyKHN0cnVjdCB6b25lICp6b25lLCBpbnQgb3JkZXIsXG4gXHRcdC5pZ25vcmVfc2tpcF9oaW50ID0gKHByaW8gPT0gTUlOX0NPTVBBQ1RfUFJJT1JJVFkpLFxuIFx0XHQuaWdub3JlX2Jsb2NrX3N1aXRhYmxlID0gKHByaW8gPT0gTUlOX0NPTVBBQ1RfUFJJT1JJVFkpXG4gXHR9O1xuLVx0c3RydWN0IGNhcHR1cmVfY29udHJvbCBjYXBjID0ge1xuLVx0XHQuY2MgPSBcdTAwMjZjYyxcbi1cdFx0LnBhZ2UgPSBOVUxMLFxuLVx0fTtcbiBcbi1cdC8qXG4tXHQgKiBNYWtlIHN1cmUgdGhlIHN0cnVjdHMgYXJlIHJlYWxseSBpbml0aWFsaXplZCBiZWZvcmUgd2UgZXhwb3NlIHRoZVxuLVx0ICogY2FwdHVyZSBjb250cm9sLCBpbiBjYXNlIHdlIGFyZSBpbnRlcnJ1cHRlZCBhbmQgdGhlIGludGVycnVwdCBoYW5kbGVyXG4tXHQgKiBmcmVlcyBhIHBhZ2UuXG4tXHQgKi9cbitcdC8qIFNlZSB0aGUgY29tbWVudCBpbiBfX2FsbG9jX3BhZ2VzX2RpcmVjdF9jb21wYWN0KCkgKi9cbiBcdGJhcnJpZXIoKTtcbi1cdFdSSVRFX09OQ0UoY3VycmVudC1cdTAwM2VjYXB0dXJlX2NvbnRyb2wsIFx1MDAyNmNhcGMpO1xuK1x0V1JJVEVfT05DRShjYXBjLVx1MDAzZWNjLCBcdTAwMjZjYyk7XG4gXG4tXHRyZXQgPSBjb21wYWN0X3pvbmUoXHUwMDI2Y2MsIFx1MDAyNmNhcGMpO1xuK1x0cmV0ID0gY29tcGFjdF96b25lKFx1MDAyNmNjLCBjYXBjKTtcbitcbitcdFdSSVRFX09OQ0UoY2FwYy1cdTAwM2VjYywgTlVMTCk7XG4gXG4tXHQvKlxuLVx0ICogTWFrZSBzdXJlIHdlIGhpZGUgY2FwdHVyZSBjb250cm9sIGZpcnN0IGJlZm9yZSB3ZSByZWFkIHRoZSBjYXB0dXJlZFxuLVx0ICogcGFnZSBwb2ludGVyLCBvdGhlcndpc2UgYW4gaW50ZXJydXB0IGNvdWxkIGZyZWUgYW5kIGNhcHR1cmUgYSBwYWdlXG4tXHQgKiBhbmQgd2Ugd291bGQgbGVhayBpdC5cbi1cdCAqL1xuLVx0V1JJVEVfT05DRShjdXJyZW50LVx1MDAzZWNhcHR1cmVfY29udHJvbCwgTlVMTCk7XG4tXHQqY2FwdHVyZSA9IFJFQURfT05DRShjYXBjLnBhZ2UpO1xuIFx0LypcbiBcdCAqIFRlY2huaWNhbGx5LCBpdCBpcyBhbHNvIHBvc3NpYmxlIHRoYXQgY29tcGFjdGlvbiBpcyBza2lwcGVkIGJ1dFxuIFx0ICogdGhlIHBhZ2UgaXMgc3RpbGwgY2FwdHVyZWQgb3V0IG9mIGx1Y2soSVJRIGNhbWUgYW5kIGZyZWVkIHRoZSBwYWdlKS5cbiBcdCAqIFJldHVybmluZyBDT01QQUNUX1NVQ0NFU1MgaW4gc3VjaCBjYXNlcyBoZWxwcyBpbiBwcm9wZXJseSBhY2NvdW50aW5nXG4gXHQgKiB0aGUgQ09NUEFDVFtTVEFMTHxGQUlMXSB3aGVuIGNvbXBhY3Rpb24gaXMgc2tpcHBlZC5cbiBcdCAqL1xuLVx0aWYgKCpjYXB0dXJlKVxuK1x0aWYgKGNhcGMtXHUwMDNlcGFnZSlcbiBcdFx0cmV0ID0gQ09NUEFDVF9TVUNDRVNTO1xuIFxuIFx0cmV0dXJuIHJldDtcbkBAIC0yODI4LDEzICsyODM2LDEzIEBAIHN0YXRpYyBlbnVtIGNvbXBhY3RfcmVzdWx0IGNvbXBhY3Rfem9uZV9vcmRlcihzdHJ1Y3Qgem9uZSAqem9uZSwgaW50IG9yZGVyLFxuICAqIEBhbGxvY19mbGFnczogVGhlIGFsbG9jYXRpb24gZmxhZ3Mgb2YgdGhlIGN1cnJlbnQgYWxsb2NhdGlvblxuICAqIEBhYzogVGhlIGNvbnRleHQgb2YgY3VycmVudCBhbGxvY2F0aW9uXG4gICogQHByaW86IERldGVybWluZXMgaG93IGhhcmQgZGlyZWN0IGNvbXBhY3Rpb24gc2hvdWxkIHRyeSB0byBzdWNjZWVkXG4tICogQGNhcHR1cmU6IFBvaW50ZXIgdG8gZnJlZSBwYWdlIGNyZWF0ZWQgYnkgY29tcGFjdGlvbiB3aWxsIGJlIHN0b3JlZCBoZXJlXG4rICogQGNhcGM6IFRoZSBjb250ZXh0IGZvciBjYXB0dXJpbmcgcGFnZXMgZHVyaW5nIGZyZWVpbmdcbiAgKlxuICAqIFRoaXMgaXMgdGhlIG1haW4gZW50cnkgcG9pbnQgZm9yIGRpcmVjdCBwYWdlIGNvbXBhY3Rpb24uXG4gICovXG4gZW51bSBjb21wYWN0X3Jlc3VsdCB0cnlfdG9fY29tcGFjdF9wYWdlcyhnZnBfdCBnZnBfbWFzaywgdW5zaWduZWQgaW50IG9yZGVyLFxuIFx0XHR1bnNpZ25lZCBpbnQgYWxsb2NfZmxhZ3MsIGNvbnN0IHN0cnVjdCBhbGxvY19jb250ZXh0ICphYyxcbi1cdFx0ZW51bSBjb21wYWN0X3ByaW9yaXR5IHByaW8sIHN0cnVjdCBwYWdlICoqY2FwdHVyZSlcbitcdFx0ZW51bSBjb21wYWN0X3ByaW9yaXR5IHByaW8sIHN0cnVjdCBjYXB0dXJlX2NvbnRyb2wgKmNhcGMpXG4ge1xuIFx0c3RydWN0IHpvbmVyZWYgKno7XG4gXHRzdHJ1Y3Qgem9uZSAqem9uZTtcbkBAIC0yODYyLDcgKzI4NzAsNyBAQCBlbnVtIGNvbXBhY3RfcmVzdWx0IHRyeV90b19jb21wYWN0X3BhZ2VzKGdmcF90IGdmcF9tYXNrLCB1bnNpZ25lZCBpbnQgb3JkZXIsXG4gXHRcdH1cbiBcbiBcdFx0c3RhdHVzID0gY29tcGFjdF96b25lX29yZGVyKHpvbmUsIG9yZGVyLCBnZnBfbWFzaywgcHJpbyxcbi1cdFx0XHRcdGFsbG9jX2ZsYWdzLCBhYy1cdTAwM2VoaWdoZXN0X3pvbmVpZHgsIGNhcHR1cmUpO1xuK1x0XHRcdFx0YWxsb2NfZmxhZ3MsIGFjLVx1MDAzZWhpZ2hlc3Rfem9uZWlkeCwgY2FwYyk7XG4gXHRcdHJjID0gbWF4KHN0YXR1cywgcmMpO1xuIFxuIFx0XHQvKiBUaGUgYWxsb2NhdGlvbiBzaG91bGQgc3VjY2VlZCwgc3RvcCBjb21wYWN0aW5nICovXG5kaWZmIC0tZ2l0IGEvbW0vaW50ZXJuYWwuaCBiL21tL2ludGVybmFsLmhcbmluZGV4IDE4MWU3OWYxZDZhMjA3Li4xZjYzNmNmYzg1OWExYSAxMDA2NDRcbi0tLSBhL21tL2ludGVybmFsLmhcbisrKyBiL21tL2ludGVybmFsLmhcbkBAIC0xMDYwLDYgKzEwNjAsMTMgQEAgc3RydWN0IGNvbXBhY3RfY29udHJvbCB7XG4gICovXG4gc3RydWN0IGNhcHR1cmVfY29udHJvbCB7XG4gXHRzdHJ1Y3QgY29tcGFjdF9jb250cm9sICpjYztcbitcdC8qXG4rXHQgKiBBbGxvY2F0aW9uIHJlcXVlc3Qgb3JkZXIuIE1heSBkaWZmZXIgZnJvbSB0aGUgY29tcGFjdGlvblxuK1x0ICogb3JkZXI6IGRlZnJhZ19tb2RlIHByb21vdGVzIHN1Yi1ibG9jayBhbGxvY2F0aW9ucyB0b1xuK1x0ICogcGFnZWJsb2NrLW9yZGVyIGNvbXBhY3Rpb247IGNhcHR1cmUgc3RpbGwgbWF0Y2hlcyBhdCB0aGVcbitcdCAqIG9yaWdpbmFsIGFsbG9jYXRpb24gb3JkZXIgc28gcHJlcF9uZXdfcGFnZSgpIGlzIGNvbnNpc3RlbnQuXG4rXHQgKi9cbitcdGludCBvcmRlcjtcbiBcdHN0cnVjdCBwYWdlICpwYWdlO1xuIH07XG4gXG5kaWZmIC0tZ2l0IGEvbW0vcGFnZV9hbGxvYy5jIGIvbW0vcGFnZV9hbGxvYy5jXG5pbmRleCBlZTkwMmE0NjhjMmY1Yi4uNTc1YTk5YTRjNzIzODQgMTAwNjQ0XG4tLS0gYS9tbS9wYWdlX2FsbG9jLmNcbisrKyBiL21tL3BhZ2VfYWxsb2MuY1xuQEAgLTcxOCw3ICs3MTgsNyBAQCBzdGF0aWMgaW5saW5lIHN0cnVjdCBjYXB0dXJlX2NvbnRyb2wgKnRhc2tfY2FwYyhzdHJ1Y3Qgem9uZSAqem9uZSlcbiB7XG4gXHRzdHJ1Y3QgY2FwdHVyZV9jb250cm9sICpjYXBjID0gY3VycmVudC1cdTAwM2VjYXB0dXJlX2NvbnRyb2w7XG4gXG4tXHRyZXR1cm4gdW5saWtlbHkoY2FwYykgXHUwMDI2XHUwMDI2XG4rXHRyZXR1cm4gdW5saWtlbHkoY2FwYyBcdTAwMjZcdTAwMjYgY2FwYy1cdTAwM2VjYykgXHUwMDI2XHUwMDI2XG4gXHRcdCEoY3VycmVudC1cdTAwM2VmbGFncyBcdTAwMjYgUEZfS1RIUkVBRCkgXHUwMDI2XHUwMDI2XG4gXHRcdCFjYXBjLVx1MDAzZXBhZ2UgXHUwMDI2XHUwMDI2XG4gXHRcdGNhcGMtXHUwMDNlY2MtXHUwMDNlem9uZSA9PSB6b25lID8gY2FwYyA6IE5VTEw7XG5AQCAtNzI4LDcgKzcyOCw3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbFxuIGNvbXBhY3Rpb25fY2FwdHVyZShzdHJ1Y3QgY2FwdHVyZV9jb250cm9sICpjYXBjLCBzdHJ1Y3QgcGFnZSAqcGFnZSxcbiBcdFx0ICAgaW50IG9yZGVyLCBpbnQgbWlncmF0ZXR5cGUpXG4ge1xuLVx0aWYgKCFjYXBjIHx8IG9yZGVyICE9IGNhcGMtXHUwMDNlY2MtXHUwMDNlb3JkZXIpXG4rXHRpZiAoIWNhcGMgfHwgb3JkZXIgIT0gY2FwYy1cdTAwM2VvcmRlcilcbiBcdFx0cmV0dXJuIGZhbHNlO1xuIFxuIFx0LyogRG8gbm90IGFjY2lkZW50YWxseSBwb2xsdXRlIENNQSBvciBpc29sYXRlZCByZWdpb25zKi9cbkBAIC03NDgsNyArNzQ4LDcgQEAgY29tcGFjdGlvbl9jYXB0dXJlKHN0cnVjdCBjYXB0dXJlX2NvbnRyb2wgKmNhcGMsIHN0cnVjdCBwYWdlICpwYWdlLFxuIFx0XHRyZXR1cm4gZmFsc2U7XG4gXG4gXHRpZiAobWlncmF0ZXR5cGUgIT0gY2FwYy1cdTAwM2VjYy1cdTAwM2VtaWdyYXRldHlwZSlcbi1cdFx0dHJhY2VfbW1fcGFnZV9hbGxvY19leHRmcmFnKHBhZ2UsIGNhcGMtXHUwMDNlY2MtXHUwMDNlb3JkZXIsIG9yZGVyLFxuK1x0XHR0cmFjZV9tbV9wYWdlX2FsbG9jX2V4dGZyYWcocGFnZSwgY2FwYy1cdTAwM2VvcmRlciwgb3JkZXIsXG4gXHRcdFx0XHRcdCAgICBjYXBjLVx1MDAzZWNjLVx1MDAzZW1pZ3JhdGV0eXBlLCBtaWdyYXRldHlwZSk7XG4gXG4gXHRjYXBjLVx1MDAzZXBhZ2UgPSBwYWdlO1xuQEAgLTQxNDYsMjEgKzQxNDYsNTkgQEAgX19hbGxvY19wYWdlc19kaXJlY3RfY29tcGFjdChnZnBfdCBnZnBfbWFzaywgdW5zaWduZWQgaW50IG9yZGVyLFxuIFx0c3RydWN0IHBhZ2UgKnBhZ2UgPSBOVUxMO1xuIFx0dW5zaWduZWQgbG9uZyBwZmxhZ3M7XG4gXHR1bnNpZ25lZCBpbnQgbm9yZWNsYWltX2ZsYWc7XG4rXHRzdHJ1Y3QgY2FwdHVyZV9jb250cm9sIGNhcGMgPSB7XG4rXHRcdC5vcmRlciA9IG9yZGVyLFxuK1x0XHQucGFnZSA9IE5VTEwsXG4rXHR9O1xuK1x0aW50IGNvbXBhY3Rfb3JkZXIgPSBvcmRlcjtcbiBcbi1cdGlmICghb3JkZXIpXG4rXHQvKlxuK1x0ICogSWYgZmFsbGJhY2tzIGFyZSBub3QgcGVybWl0dGVkIChkZWZyYWdfbW9kZSksIHdlIGVpdGhlclxuK1x0ICogbmVlZCB0byByZWNsYWltIHNwYWNlIGluIGEgYmxvY2sgb2YgbWF0Y2hpbmcgdHlwZSwgb3IgY2xlYXJcbitcdCAqIG91dCBhbiBlbnRpcmUgYmxvY2sgdG8gYWxsb3cgX19ybXF1ZXVlX2NsYWltKCkgdG8gY29udmVydC5cbitcdCAqXG4rXHQgKiBSZWNsYWltIGJ5IGl0c2VsZiBpcyBwcmltYXJpbHkgZnJlZWluZyBzcGFjZSBpbiBtb3ZhYmxlXG4rXHQgKiBibG9ja3MsIHNpbmNlIHRoYXQncyB3aGVyZSB0aGUgTFJVIHBhZ2VzIGxpdmUuIFNvIHRoaXNcbitcdCAqIHdvcmtzIGZvciBtb3ZhYmxlIHJlcXVlc3RzLCBidXQgbm90IGZvciBvdGhlcnMuXG4rXHQgKlxuK1x0ICogRm9yIHRob3NlLCBwcm9tb3RlIHRoZSBvcmRlciB0byBoZWxwIG1ha2UgYmxvY2tzLCBpbnN0ZWFkXG4rXHQgKiBvZiBzcGlubmluZyBpbiByZWNsYWltIGFsb25lIHVucHJvZHVjdGl2ZWx5LlxuK1x0ICovXG4rXHRpZiAoKGFsbG9jX2ZsYWdzIFx1MDAyNiBBTExPQ19OT0ZSQUdNRU5UKSBcdTAwMjZcdTAwMjYgYWMtXHUwMDNlbWlncmF0ZXR5cGUgIT0gTUlHUkFURV9NT1ZBQkxFKVxuK1x0XHRjb21wYWN0X29yZGVyID0gbWF4KG9yZGVyLCBwYWdlYmxvY2tfb3JkZXIpO1xuK1xuK1x0aWYgKCFjb21wYWN0X29yZGVyKVxuIFx0XHRyZXR1cm4gTlVMTDtcbiBcbitcdC8qXG4rXHQgKiBNYWtlIHN1cmUgdGhlIHN0cnVjdHMgYXJlIHJlYWxseSBpbml0aWFsaXplZCBiZWZvcmUgd2UgZXhwb3NlIHRoZVxuK1x0ICogY2FwdHVyZSBjb250cm9sLCBpbiBjYXNlIHdlIGFyZSBpbnRlcnJ1cHRlZCBhbmQgdGhlIGludGVycnVwdCBoYW5kbGVyXG4rXHQgKiBmcmVlcyBhIHBhZ2UuXG4rXHQgKi9cbitcdGJhcnJpZXIoKTtcbitcdFdSSVRFX09OQ0UoY3VycmVudC1cdTAwM2VjYXB0dXJlX2NvbnRyb2wsIFx1MDAyNmNhcGMpO1xuK1xuIFx0cHNpX21lbXN0YWxsX2VudGVyKFx1MDAyNnBmbGFncyk7XG4gXHRkZWxheWFjY3RfY29tcGFjdF9zdGFydCgpO1xuK1x0ZnNfcmVjbGFpbV9hY3F1aXJlKGdmcF9tYXNrKTtcbiBcdG5vcmVjbGFpbV9mbGFnID0gbWVtYWxsb2Nfbm9yZWNsYWltX3NhdmUoKTtcbiBcbi1cdCpjb21wYWN0X3Jlc3VsdCA9IHRyeV90b19jb21wYWN0X3BhZ2VzKGdmcF9tYXNrLCBvcmRlciwgYWxsb2NfZmxhZ3MsIGFjLFxuLVx0XHRcdFx0XHRcdFx0XHRwcmlvLCBcdTAwMjZwYWdlKTtcbitcdCpjb21wYWN0X3Jlc3VsdCA9IHRyeV90b19jb21wYWN0X3BhZ2VzKGdmcF9tYXNrLCBjb21wYWN0X29yZGVyLFxuK1x0XHRcdFx0XHQgICAgICAgYWxsb2NfZmxhZ3MsIGFjLCBwcmlvLCBcdTAwMjZjYXBjKTtcbiBcbiBcdG1lbWFsbG9jX25vcmVjbGFpbV9yZXN0b3JlKG5vcmVjbGFpbV9mbGFnKTtcbitcdGZzX3JlY2xhaW1fcmVsZWFzZShnZnBfbWFzayk7XG4gXHRwc2lfbWVtc3RhbGxfbGVhdmUoXHUwMDI2cGZsYWdzKTtcbiBcdGRlbGF5YWNjdF9jb21wYWN0X2VuZCgpO1xuIFxuK1x0LypcbitcdCAqIE1ha2Ugc3VyZSB3ZSBoaWRlIGNhcHR1cmUgY29udHJvbCBmaXJzdCBiZWZvcmUgd2UgcmVhZCB0aGUgY2FwdHVyZWRcbitcdCAqIHBhZ2UgcG9pbnRlciwgb3RoZXJ3aXNlIGFuIGludGVycnVwdCBjb3VsZCBmcmVlIGFuZCBjYXB0dXJlIGEgcGFnZVxuK1x0ICogYW5kIHdlIHdvdWxkIGxlYWsgaXQuXG4rXHQgKi9cbitcdFdSSVRFX09OQ0UoY3VycmVudC1cdTAwM2VjYXB0dXJlX2NvbnRyb2wsIE5VTEwpO1xuK1x0cGFnZSA9IFJFQURfT05DRShjYXBjLnBhZ2UpO1xuK1xuIFx0aWYgKCpjb21wYWN0X3Jlc3VsdCA9PSBDT01QQUNUX1NLSVBQRUQgfHxcbiBcdCAgICAqY29tcGFjdF9yZXN1bHQgPT0gQ09NUEFDVF9ERUZFUlJFRClcbiBcdFx0cmV0dXJuIE5VTEw7XG5AQCAtNDE4Miw3ICs0MjIwLDcgQEAgX19hbGxvY19wYWdlc19kaXJlY3RfY29tcGFjdChnZnBfdCBnZnBfbWFzaywgdW5zaWduZWQgaW50IG9yZGVyLFxuIFx0XHRzdHJ1Y3Qgem9uZSAqem9uZSA9IHBhZ2Vfem9uZShwYWdlKTtcbiBcbiBcdFx0em9uZS1cdTAwM2Vjb21wYWN0X2Jsb2Nrc2tpcF9mbHVzaCA9IGZhbHNlO1xuLVx0XHRjb21wYWN0aW9uX2RlZmVyX3Jlc2V0KHpvbmUsIG9yZGVyLCB0cnVlKTtcbitcdFx0Y29tcGFjdGlvbl9kZWZlcl9yZXNldCh6b25lLCBjb21wYWN0X29yZGVyLCB0cnVlKTtcbiBcdFx0Y291bnRfdm1fZXZlbnQoQ09NUEFDVFNVQ0NFU1MpO1xuIFx0XHRyZXR1cm4gcGFnZTtcbiBcdH1cbkBAIC00NDIyLDkgKzQ0NjAsMTQgQEAgX19hbGxvY19wYWdlc19kaXJlY3RfcmVjbGFpbShnZnBfdCBnZnBfbWFzaywgdW5zaWduZWQgaW50IG9yZGVyLFxuIFx0c3RydWN0IHBhZ2UgKnBhZ2UgPSBOVUxMO1xuIFx0dW5zaWduZWQgbG9uZyBwZmxhZ3M7XG4gXHRib29sIGRyYWluZWQgPSBmYWxzZTtcbitcdGludCByZWNsYWltX29yZGVyID0gb3JkZXI7XG4rXG4rXHQvKiBNYXRjaCB0aGUgc2xvd3BhdGggY29tcGFjdGlvbiBwcm9tb3Rpb24gaW4gX19hbGxvY19wYWdlc19kaXJlY3RfY29tcGFjdCAqL1xuK1x0aWYgKChhbGxvY19mbGFncyBcdTAwMjYgQUxMT0NfTk9GUkFHTUVOVCkgXHUwMDI2XHUwMDI2IGFjLVx1MDAzZW1pZ3JhdGV0eXBlICE9IE1JR1JBVEVfTU9WQUJMRSlcbitcdFx0cmVjbGFpbV9vcmRlciA9IG1heChvcmRlciwgcGFnZWJsb2NrX29yZGVyKTtcbiBcbiBcdHBzaV9tZW1zdGFsbF9lbnRlcihcdTAwMjZwZmxhZ3MpO1xuLVx0KmRpZF9zb21lX3Byb2dyZXNzID0gX19wZXJmb3JtX3JlY2xhaW0oZ2ZwX21hc2ssIG9yZGVyLCBhYyk7XG4rXHQqZGlkX3NvbWVfcHJvZ3Jlc3MgPSBfX3BlcmZvcm1fcmVjbGFpbShnZnBfbWFzaywgcmVjbGFpbV9vcmRlciwgYWMpO1xuIFx0aWYgKHVubGlrZWx5KCEoKmRpZF9zb21lX3Byb2dyZXNzKSkpXG4gXHRcdGdvdG8gb3V0O1xuIFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjZUMjA6MjE6NTQuMDUwNDU1OTY5WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjI0OTk1OTY3MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIE1lbW9yeSBDb21wYWN0aW9uIFBhdGNoKipcblxuT2theSwgc28gSSd2ZSBnb3QgdGhpcyBwYXRjaCBoZXJlIHRoYXTigJlzIHRpbmtlcmluZyB3aXRoIG1lbW9yeSBjb21wYWN0aW9uIGFuZCBhbGxvY2F0aW9uLCBzcGVjaWZpY2FsbHkgd2l0aCBob3cgd2UgaGFuZGxlIGNvbXBhY3Rpb24gb3JkZXJzIGFuZCBwYWdlIGNhcHR1cmUgaW4gYHRyeV90b19jb21wYWN0X3BhZ2VzYCBhbmQgYF9fYWxsb2NfcGFnZXNfZGlyZWN0X2NvbXBhY3RgLiBJdCBzZWVtcyBsaWtlIHRoZSBjb3JlIGxvZ2ljIGlzIGJlaW5nIHR3ZWFrZWQuIFRoaXMgaXMgZGVmaW5pdGVseSB3b3J0aCBhIGNsb3NlciBsb29rLCBnaXZlbiB0aGF0IHRoaXMgdG91Y2hlcyB1cG9uIGBwYWdlYmxvY2tfb3JkZXJgIHdoZW4gYEFMTE9DX05PRlJBR01FTlRgIGlzIHNldCBhbmQgdGhlIG1pZ3JhdGlvbiB0eXBlIGlzbuKAmXQgYE1JR1JBVEVfTU9WQUJMRWAuIFRoZSBwYXRjaCBhbHNvIHNlZW1zIHRvIGJlIGFmZmVjdGluZyBgc3VpdGFibGVfbWlncmF0aW9uX3NvdXJjZWAgYW5kIGBmYXN0X2ZpbmRfbWlncmF0ZWJsb2NrYCwgd2hpY2ggYXJlIGNydWNpYWwgd2l0aGluIHRoZSBjb21wYWN0aW9uIGZyYW1ld29yay5cblxuR2l2ZW4gdGhhdCB0aGlzIGlzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgY29kZSwgaXQncyBkZWZpbml0ZWx5IGhpZ2gtdmFsdWUgZm9yIGZ1enppbmcuIFdlIG5lZWQgdG8gaWRlbnRpZnkgdGhlIGtleSBmdW5jdGlvbnMgdG8gZm9jdXMgb3VyIGVmZm9ydHMuXG5cbkJhc2VkIG9uIHRoZSBjb2RlIGNoYW5nZXMsIGl0IGxvb2tzIGxpa2Ugd2UncmUgemVyb2luZyBpbiBvbjogYHN1aXRhYmxlX21pZ3JhdGlvbl9zb3VyY2VgLCBgZmFzdF9maW5kX21pZ3JhdGVibG9ja2AsIGBjb21wYWN0X3pvbmVfb3JkZXJgLCBgdHJ5X3RvX2NvbXBhY3RfcGFnZXNgLCBgY29tcGFjdGlvbl9jYXB0dXJlYCwgYF9fYWxsb2NfcGFnZXNfZGlyZWN0X2NvbXBhY3RgLCBhbmQgYF9fYWxsb2NfcGFnZXNfZGlyZWN0X3JlY2xhaW1gLlxuXG5gX19hbGxvY19wYWdlc19kaXJlY3RfY29tcGFjdGAgYW5kIGBfX2FsbG9jX3BhZ2VzX2RpcmVjdF9yZWNsYWltYCBhcmUgcGFydCBvZiB0aGUgcGFnZSBhbGxvY2F0b3Igc2xvdyBwYXRoLCBhcyBleHBlY3RlZC4gYHRyeV90b19jb21wYWN0X3BhZ2VzYCBpcyB0aGUgZGlyZWN0IGNvbXBhY3Rpb24gZW50cnkgcG9pbnQsIHdoaWNoIG1ha2VzIGl0IGEgY3JpdGljYWwgYXJlYS4gYGNvbXBhY3Rfem9uZV9vcmRlcmAgaXMgYSBzdGF0aWMgZnVuY3Rpb24sIGFuZCBzbyBhcmUgYHN1aXRhYmxlX21pZ3JhdGlvbl9zb3VyY2VgIGFuZCBgZmFzdF9maW5kX21pZ3JhdGVibG9ja2AuXG5cbkkgc2hvdWxkIGNoZWNrIGlmIHRoZXJlIGFyZSBhbnkgc3BlY2lmaWMga2VybmVsIGNvbmZpZ3VyYXRpb25zIHJlbGV2YW50IHRvIGNvbXBhY3Rpb24sIGxpa2UgYENPTkZJR19DT01QQUNUSU9OYC4gTGV0J3MgZ3JlcCBmb3IgdGhhdCBhbmQgYWxzbyBmb3IgYHRyeV90b19jb21wYWN0X3BhZ2VzYCB0byBnZXQgYSBicm9hZGVyIHZpZXcgb2YgaG93IHRoZXNlIGNoYW5nZXMgYXJlIHRpZWQgaW50byB0aGUgcmVzdCBvZiB0aGUgc3lzdGVtLiBUaGlzIHdpbGwgZ2l2ZSBtZSBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGUgY29kZSBtaWdodCBiZWhhdmUgaW4gZGlmZmVyZW50IHNjZW5hcmlvcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NTMxNCwiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM2NCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI2VDIwOjIyOjAwLjMwMDQxNzI2MVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNjE4NDE3NDE5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInRyeV90b19jb21wYWN0X3BhZ2VzXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvY29tcGFjdGlvbi5oPTExPWVudW0gY29tcGFjdF9wcmlvcml0eSB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2NvbXBhY3Rpb24uaC0yMC1cXG5pbmNsdWRlL2xpbnV4L2NvbXBhY3Rpb24uaDoyMTovKiBSZXR1cm4gdmFsdWVzIGZvciBjb21wYWN0X3pvbmUoKSBhbmQgdHJ5X3RvX2NvbXBhY3RfcGFnZXMoKSAqL1xcbmluY2x1ZGUvbGludXgvY29tcGFjdGlvbi5oLTIyLS8qIFdoZW4gYWRkaW5nIG5ldyBzdGF0ZXMsIHBsZWFzZSBhZGp1c3QgaW5jbHVkZS90cmFjZS9ldmVudHMvY29tcGFjdGlvbi5oICovXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2NvbXBhY3Rpb24uaD05Mj1leHRlcm4gaW50IGZyYWdtZW50YXRpb25faW5kZXgoc3RydWN0IHpvbmUgKnpvbmUsIHVuc2lnbmVkIGludCBvcmRlcik7XFxuaW5jbHVkZS9saW51eC9jb21wYWN0aW9uLmg6OTM6ZXh0ZXJuIGVudW0gY29tcGFjdF9yZXN1bHQgdHJ5X3RvX2NvbXBhY3RfcGFnZXMoZ2ZwX3QgZ2ZwX21hc2ssXFxuaW5jbHVkZS9saW51eC9jb21wYWN0aW9uLmgtOTQtXFx0XFx0dW5zaWduZWQgaW50IG9yZGVyLCB1bnNpZ25lZCBpbnQgYWxsb2NfZmxhZ3MsXFxuLS1cXG5pbmNsdWRlL3RyYWNlL2V2ZW50cy9jb21wYWN0aW9uLmg9MTMxPVRSQUNFX0VWRU5UKG1tX2NvbXBhY3Rpb25fZW5kLFxcbi0tXFxuaW5jbHVkZS90cmFjZS9ldmVudHMvY29tcGFjdGlvbi5oLTE2NC1cXG5pbmNsdWRlL3RyYWNlL2V2ZW50cy9jb21wYWN0aW9uLmg6MTY1OlRSQUNFX0VWRU5UKG1tX2NvbXBhY3Rpb25fdHJ5X3RvX2NvbXBhY3RfcGFnZXMsXFxuaW5jbHVkZS90cmFjZS9ldmVudHMvY29tcGFjdGlvbi5oLTE2Ni1cXG4tLVxcbm1tL2NvbXBhY3Rpb24uYz0yNzkxPXN0YXRpYyBlbnVtIGNvbXBhY3RfcmVzdWx0IGNvbXBhY3Rfem9uZV9vcmRlcihzdHJ1Y3Qgem9uZSAqem9uZSwgaW50IG9yZGVyLFxcbi0tXFxubW0vY29tcGFjdGlvbi5jLTI4MzItLyoqXFxubW0vY29tcGFjdGlvbi5jOjI4MzM6ICogdHJ5X3RvX2NvbXBhY3RfcGFnZXMgLSBEaXJlY3QgY29tcGFjdCB0byBzYXRpc2Z5IGEgaGlnaC1vcmRlciBhbGxvY2F0aW9uXFxubW0vY29tcGFjdGlvbi5jLTI4MzQtICogQGdmcF9tYXNrOiBUaGUgR0ZQIG1hc2sgb2YgdGhlIGN1cnJlbnQgYWxsb2NhdGlvblxcbi0tXFxubW0vY29tcGFjdGlvbi5jLTI4NDItICovXFxubW0vY29tcGFjdGlvbi5jOjI4NDM6ZW51bSBjb21wYWN0X3Jlc3VsdCB0cnlfdG9fY29tcGFjdF9wYWdlcyhnZnBfdCBnZnBfbWFzaywgdW5zaWduZWQgaW50IG9yZGVyLFxcbm1tL2NvbXBhY3Rpb24uYy0yODQ0LVxcdFxcdHVuc2lnbmVkIGludCBhbGxvY19mbGFncywgY29uc3Qgc3RydWN0IGFsbG9jX2NvbnRleHQgKmFjLFxcbi0tXFxubW0vY29tcGFjdGlvbi5jLTI4NTMtXFxubW0vY29tcGFjdGlvbi5jOjI4NTQ6XFx0dHJhY2VfbW1fY29tcGFjdGlvbl90cnlfdG9fY29tcGFjdF9wYWdlcyhvcmRlciwgZ2ZwX21hc2ssIHByaW8pO1xcbm1tL2NvbXBhY3Rpb24uYy0yODU1LVxcbi0tXFxubW0vcGFnZV9hbGxvYy5jPTQxNDI9X19hbGxvY19wYWdlc19kaXJlY3RfY29tcGFjdChnZnBfdCBnZnBfbWFzaywgdW5zaWduZWQgaW50IG9yZGVyLFxcbi0tXFxubW0vcGFnZV9hbGxvYy5jLTQxODUtXFxubW0vcGFnZV9hbGxvYy5jOjQxODY6XFx0KmNvbXBhY3RfcmVzdWx0ID0gdHJ5X3RvX2NvbXBhY3RfcGFnZXMoZ2ZwX21hc2ssIGNvbXBhY3Rfb3JkZXIsXFxubW0vcGFnZV9hbGxvYy5jLTQxODctXFx0XFx0XFx0XFx0XFx0ICAgICAgIGFsbG9jX2ZsYWdzLCBhYywgcHJpbywgXFx1MDAyNmNhcGMpO1xcbi0tXFxubW0vdm1zY2FuLmM9NTk5OD1zdGF0aWMgYm9vbCBpbl9yZWNsYWltX2NvbXBhY3Rpb24oc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxuLS1cXG5tbS92bXNjYW4uYy02MDExLSAqIHRydWUgaWYgbW9yZSBwYWdlcyBzaG91bGQgYmUgcmVjbGFpbWVkIHN1Y2ggdGhhdCB3aGVuIHRoZSBwYWdlIGFsbG9jYXRvclxcbm1tL3Ztc2Nhbi5jOjYwMTI6ICogY2FsbHMgdHJ5X3RvX2NvbXBhY3RfcGFnZXMoKSB0aGF0IGl0IHdpbGwgaGF2ZSBlbm91Z2ggZnJlZSBwYWdlcyB0byBzdWNjZWVkLlxcbm1tL3Ztc2Nhbi5jLTYwMTMtICogSXQgd2lsbCBnaXZlIHVwIGVhcmxpZXIgdGhhbiB0aGF0IGlmIHRoZXJlIGlzIGRpZmZpY3VsdHkgcmVjbGFpbWluZyBwYWdlcy5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjZUMjA6MjI6MDMuOTE4ODM5NDZaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjQ2MTE0NTk1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgQ29tcGFjdGlvbiBhbmQgQWxsb2NhdGlvbiBDb2RlIERlcGVuZGVuY2llcyoqXG5cbkFscmlnaHQsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbnRlcmFjdGlvbiBiZXR3ZWVuIGNvbXBhY3Rpb24gYW5kIGFsbG9jYXRpb24uIEJhc2VkIG9uIHRoZSBmaWxlIHBhdGhzLCBJJ20gZGl2aW5nIGludG8gYG1tL2NvbXBhY3Rpb24uY2AgYW5kIGBtbS9wYWdlX2FsbG9jLmNgLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgYmVmb3JlIEkgZ2V0IHRvbyBkZWVwIGludG8gdGhlIHdlZWRzLCBJIHNob3VsZCBxdWlja2x5IHZlcmlmeSBpZiBjb21wYWN0aW9uIGlzIGNvbmRpdGlvbmFsbHkgY29tcGlsZWQuIEknbGwgbmVlZCB0byBjb25maXJtIGlmIGBDT05GSUdfQ09NUEFDVElPTmAgaXMgZW5hYmxlZCBvciByZXF1aXJlZCB0byB1bmRlcnN0YW5kIHRoZSBjb2RlIHBhdGggcHJvcGVybHksIHBhcnRpY3VsYXJseSBob3cgaXQgYWZmZWN0cyB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgc2NoZW1lLiBJJ2xsIHNlYXJjaCBmb3IgdGhlIHByZXByb2Nlc3NvciBkaXJlY3RpdmVzIHJlbGF0ZWQgdG8gdGhhdCBjb25maWcgb3B0aW9uIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUgYnVpbGQgY29uZmlndXJhdGlvbi4gVGhhdCB3aWxsIHByb3ZpZGUgY3J1Y2lhbCBjb250ZXh0IGJlZm9yZSBnb2luZyBhbnkgZnVydGhlciB3aXRoIHRoZSBhbmFseXNpcyBvZiB0aG9zZSBmaWxlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NjkxMCwiT3V0cHV0VG9rZW5zIjoyNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI2VDIwOjIyOjA3LjE2NDk1NjA4NVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMjEzMDE2NjIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiQ09ORklHX0NPTVBBQ1RJT05cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2NvbXBhY3Rpb24uYy0yOC1cXG5tbS9jb21wYWN0aW9uLmM6Mjk6I2lmZGVmIENPTkZJR19DT01QQUNUSU9OXFxubW0vY29tcGFjdGlvbi5jLTMwLS8qXFxuLS1cXG5tbS9jb21wYWN0aW9uLmM9NTk9c3RhdGljIGlubGluZSBib29sIGlzX3ZpYV9jb21wYWN0X21lbW9yeShpbnQgb3JkZXIpIHsgcmV0dXJuIGZhbHNlOyB9XFxuLS1cXG5tbS9jb21wYWN0aW9uLmMtNjEtXFxubW0vY29tcGFjdGlvbi5jOjYyOiNpZiBkZWZpbmVkIENPTkZJR19DT01QQUNUSU9OIHx8IGRlZmluZWQgQ09ORklHX0NNQVxcbm1tL2NvbXBhY3Rpb24uYy02My1cXG4tLVxcbm1tL2NvbXBhY3Rpb24uYz05MT1zdGF0aWMgdW5zaWduZWQgbG9uZyByZWxlYXNlX2ZyZWVfbGlzdChzdHJ1Y3QgbGlzdF9oZWFkICpmcmVlcGFnZXMpXFxuLS1cXG5tbS9jb21wYWN0aW9uLmMtMTE1LVxcbm1tL2NvbXBhY3Rpb24uYzoxMTY6I2lmZGVmIENPTkZJR19DT01QQUNUSU9OXFxubW0vY29tcGFjdGlvbi5jLTExNy1cXG4tLVxcbm1tL2NvbXBhY3Rpb24uYz00OTA9c3RhdGljIGJvb2wgdGVzdF9hbmRfc2V0X3NraXAoc3RydWN0IGNvbXBhY3RfY29udHJvbCAqY2MsIHN0cnVjdCBwYWdlICpwYWdlKVxcbi0tXFxubW0vY29tcGFjdGlvbi5jLTQ5My19XFxubW0vY29tcGFjdGlvbi5jOjQ5NDojZW5kaWYgLyogQ09ORklHX0NPTVBBQ1RJT04gKi9cXG5tbS9jb21wYWN0aW9uLmMtNDk1LVxcbi0tXFxubW0vY29tcGFjdGlvbi5jPTEzMzc9aXNvbGF0ZV9taWdyYXRlcGFnZXNfcmFuZ2Uoc3RydWN0IGNvbXBhY3RfY29udHJvbCAqY2MsIHVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLFxcbi0tXFxubW0vY29tcGFjdGlvbi5jLTEzNzItXFxubW0vY29tcGFjdGlvbi5jOjEzNzM6I2VuZGlmIC8qIENPTkZJR19DT01QQUNUSU9OIHx8IENPTkZJR19DTUEgKi9cXG5tbS9jb21wYWN0aW9uLmM6MTM3NDojaWZkZWYgQ09ORklHX0NPTVBBQ1RJT05cXG5tbS9jb21wYWN0aW9uLmMtMTM3NS1cXG4tLVxcbm1tL2NvbXBhY3Rpb24uYz0zMzYxPXN1YnN5c19pbml0Y2FsbChrY29tcGFjdGRfaW5pdClcXG5tbS9jb21wYWN0aW9uLmMtMzM2Mi1cXG5tbS9jb21wYWN0aW9uLmM6MzM2MzojZW5kaWYgLyogQ09ORklHX0NPTVBBQ1RJT04gKi9cXG4tLVxcbm1tL2ludGVybmFsLmg9OTk5PXN0YXRpYyBpbmxpbmUgdm9pZCBzcGFyc2VfaW5pdF9zdWJzZWN0aW9uX21hcCh1bnNpZ25lZCBsb25nIHBmbixcXG4tLVxcbm1tL2ludGVybmFsLmgtMTAwNC1cXG5tbS9pbnRlcm5hbC5oOjEwMDU6I2lmIGRlZmluZWQgQ09ORklHX0NPTVBBQ1RJT04gfHwgZGVmaW5lZCBDT05GSUdfQ01BXFxubW0vaW50ZXJuYWwuaC0xMDA2LVxcbi0tXFxubW0vaW50ZXJuYWwuaD0xMDgxPXZvaWQgaW5pdF9jbWFfcmVzZXJ2ZWRfcGFnZWJsb2NrKHN0cnVjdCBwYWdlICpwYWdlKTtcXG5tbS9pbnRlcm5hbC5oLTEwODItXFxubW0vaW50ZXJuYWwuaDoxMDgzOiNlbmRpZiAvKiBDT05GSUdfQ09NUEFDVElPTiB8fCBDT05GSUdfQ01BICovXFxubW0vaW50ZXJuYWwuaC0xMDg0LVxcbi0tXFxubW0vbW1faW5pdC5jPTEzMzM9c3RhdGljIHZvaWQgX19pbml0IGNhbGN1bGF0ZV9ub2RlX3RvdGFscGFnZXMoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCxcXG4tLVxcbm1tL21tX2luaXQuYy0xMzc1LVxcbm1tL21tX2luaXQuYzoxMzc2OiNpZmRlZiBDT05GSUdfQ09NUEFDVElPTlxcbm1tL21tX2luaXQuYy0xMzc3LXN0YXRpYyB2b2lkIHBnZGF0X2luaXRfa2NvbXBhY3RkKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQpXFxuLS1cXG5tbS9vb21fa2lsbC5jPTQ1Nj1zdGF0aWMgdm9pZCBkdW1wX2hlYWRlcihzdHJ1Y3Qgb29tX2NvbnRyb2wgKm9jKVxcbi0tXFxubW0vb29tX2tpbGwuYy00NjAtXFx0XFx0XFx0Y3VycmVudC1cXHUwMDNlc2lnbmFsLVxcdTAwM2Vvb21fc2NvcmVfYWRqKTtcXG5tbS9vb21fa2lsbC5jOjQ2MTpcXHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX0NPTVBBQ1RJT04pIFxcdTAwMjZcXHUwMDI2IG9jLVxcdTAwM2VvcmRlcilcXG5tbS9vb21fa2lsbC5jLTQ2Mi1cXHRcXHRwcl93YXJuKFxcXCJDT01QQUNUSU9OIGlzIGRpc2FibGVkISEhXFxcXG5cXFwiKTtcXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYz03MTA9c3RhdGljIGlubGluZSB2b2lkIHNldF9idWRkeV9vcmRlcihzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgaW50IG9yZGVyKVxcbi0tXFxubW0vcGFnZV9hbGxvYy5jLTcxNS1cXG5tbS9wYWdlX2FsbG9jLmM6NzE2OiNpZmRlZiBDT05GSUdfQ09NUEFDVElPTlxcbm1tL3BhZ2VfYWxsb2MuYy03MTctc3RhdGljIGlubGluZSBzdHJ1Y3QgY2FwdHVyZV9jb250cm9sICp0YXNrX2NhcGMoc3RydWN0IHpvbmUgKnpvbmUpXFxuLS1cXG5tbS9wYWdlX2FsbG9jLmM9NzY1PWNvbXBhY3Rpb25fY2FwdHVyZShzdHJ1Y3QgY2FwdHVyZV9jb250cm9sICpjYXBjLCBzdHJ1Y3QgcGFnZSAqcGFnZSxcXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYy03NjktfVxcbm1tL3BhZ2VfYWxsb2MuYzo3NzA6I2VuZGlmIC8qIENPTkZJR19DT01QQUNUSU9OICovXFxubW0vcGFnZV9hbGxvYy5jLTc3MS1cXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYz00MDQ3PV9fYWxsb2NfcGFnZXNfbWF5X29vbShnZnBfdCBnZnBfbWFzaywgdW5zaWduZWQgaW50IG9yZGVyLFxcbi0tXFxubW0vcGFnZV9hbGxvYy5jLTQxMzgtXFxubW0vcGFnZV9hbGxvYy5jOjQxMzk6I2lmZGVmIENPTkZJR19DT01QQUNUSU9OXFxubW0vcGFnZV9hbGxvYy5jLTQxNDAtLyogVHJ5IG1lbW9yeSBjb21wYWN0aW9uIGZvciBoaWdoLW9yZGVyIGFsbG9jYXRpb25zIGJlZm9yZSByZWNsYWltICovXFxuLS1cXG5tbS9wYWdlX2FsbG9jLmM9NDMxNz1zaG91bGRfY29tcGFjdF9yZXRyeShnZnBfdCBnZnBfbWFzaywgc3RydWN0IGFsbG9jX2NvbnRleHQgKmFjLCBpbnQgb3JkZXIsXFxuLS1cXG5tbS9wYWdlX2FsbG9jLmMtNDM0Mi19XFxubW0vcGFnZV9hbGxvYy5jOjQzNDM6I2VuZGlmIC8qIENPTkZJR19DT01QQUNUSU9OICovXFxubW0vcGFnZV9hbGxvYy5jLTQzNDQtXFxuLS1cXG5tbS92bXNjYW4uYz02MzMxPXN0YXRpYyB2b2lkIHNocmlua196b25lcyhzdHJ1Y3Qgem9uZWxpc3QgKnpvbmVsaXN0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTYzNzEtXFx0XFx0XFx0ICovXFxubW0vdm1zY2FuLmM6NjM3MjpcXHRcXHRcXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfQ09NUEFDVElPTikgXFx1MDAyNlxcdTAwMjZcXG5tbS92bXNjYW4uYy02MzczLVxcdFxcdFxcdCAgICBzYy1cXHUwMDNlb3JkZXIgXFx1MDAzZSBQQUdFX0FMTE9DX0NPU1RMWV9PUkRFUiBcXHUwMDI2XFx1MDAyNlxcbi0tXFxubW0vdm1zdGF0LmM9MTA0Mj12b2lkIG1lbW1hcF9wYWdlc19hZGQobG9uZyBkZWx0YSlcXG4tLVxcbm1tL3Ztc3RhdC5jLTEwNDYtXFxubW0vdm1zdGF0LmM6MTA0NzojaWZkZWYgQ09ORklHX0NPTVBBQ1RJT05cXG5tbS92bXN0YXQuYy0xMDQ4LVxcbi0tXFxubW0vdm1zdGF0LmM9MTE4Nz1jb25zdCBjaGFyICogY29uc3Qgdm1zdGF0X3RleHRbXSA9IHtcXG4tLVxcbm1tL3Ztc3RhdC5jLTEzNzAtI2VuZGlmXFxubW0vdm1zdGF0LmM6MTM3MTojaWZkZWYgQ09ORklHX0NPTVBBQ1RJT05cXG5tbS92bXN0YXQuYy0xMzcyLVxcdFtJKENPTVBBQ1RNSUdSQVRFX1NDQU5ORUQpXVxcdFxcdD0gXFxcImNvbXBhY3RfbWlncmF0ZV9zY2FubmVkXFxcIixcXG4tLVxcbm1tL3Ztc3RhdC5jLTE0OTYtXFxubW0vdm1zdGF0LmM6MTQ5NzojaWYgKGRlZmluZWQoQ09ORklHX0RFQlVHX0ZTKSBcXHUwMDI2XFx1MDAyNiBkZWZpbmVkKENPTkZJR19DT01QQUNUSU9OKSkgfHwgXFxcXFxcbm1tL3Ztc3RhdC5jLTE0OTgtICAgICBkZWZpbmVkKENPTkZJR19QUk9DX0ZTKVxcbi0tXFxubW0vdm1zdGF0LmM9MjI2OD12b2lkIF9faW5pdCBpbml0X21tX2ludGVybmFscyh2b2lkKVxcbi0tXFxubW0vdm1zdGF0LmMtMjMwMS1cXG5tbS92bXN0YXQuYzoyMzAyOiNpZiBkZWZpbmVkKENPTkZJR19ERUJVR19GUykgXFx1MDAyNlxcdTAwMjYgZGVmaW5lZChDT05GSUdfQ09NUEFDVElPTilcXG5tbS92bXN0YXQuYy0yMzAzLVxcbi0tXFxubW0venNtYWxsb2MuYz0xOTk9c3RydWN0IHpzX3Bvb2wge1xcbi0tXFxubW0venNtYWxsb2MuYy0yMTMtI2VuZGlmXFxubW0venNtYWxsb2MuYzoyMTQ6I2lmZGVmIENPTkZJR19DT01QQUNUSU9OXFxubW0venNtYWxsb2MuYy0yMTUtXFx0c3RydWN0IHdvcmtfc3RydWN0IGZyZWVfd29yaztcXG4tLVxcbm1tL3pzbWFsbG9jLmM9MzYwPXN0YXRpYyBib29sIFpzSHVnZVBhZ2Uoc3RydWN0IHpzcGFnZSAqenNwYWdlKVxcbi0tXFxubW0venNtYWxsb2MuYy0zNjQtXFxubW0venNtYWxsb2MuYzozNjU6I2lmZGVmIENPTkZJR19DT01QQUNUSU9OXFxubW0venNtYWxsb2MuYy0zNjYtc3RhdGljIHZvaWQga2lja19kZWZlcnJlZF9mcmVlKHN0cnVjdCB6c19wb29sICpwb29sKTtcXG4tLVxcbm1tL3pzbWFsbG9jLmM9OTMxPXN0YXRpYyBzdHJ1Y3QgenNwYWdlICphbGxvY196c3BhZ2Uoc3RydWN0IHpzX3Bvb2wgKnBvb2wsXFxuLS1cXG5tbS96c21hbGxvYy5jLTk0MS1cXG5tbS96c21hbGxvYy5jOjk0MjpcXHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX0NPTVBBQ1RJT04pKVxcbm1tL3pzbWFsbG9jLmMtOTQzLVxcdFxcdGdmcCBcXHUwMDI2PSB+X19HRlBfTU9WQUJMRTtcXG4tLVxcbm1tL3pzbWFsbG9jLmM9MTU5ND1zdGF0aWMgaW50IHB1dGJhY2tfenNwYWdlKHN0cnVjdCBzaXplX2NsYXNzICpjbGFzcywgc3RydWN0IHpzcGFnZSAqenNwYWdlKVxcbi0tXFxubW0venNtYWxsb2MuYy0xNjAzLVxcbm1tL3pzbWFsbG9jLmM6MTYwNDojaWZkZWYgQ09ORklHX0NPTVBBQ1RJT05cXG5tbS96c21hbGxvYy5jLTE2MDUtLypcXG4tLVxcbm1tL3pzbWFsbG9jLmM9MTYwOT1zdGF0aWMgdm9pZCBsb2NrX3pzcGFnZShzdHJ1Y3QgenNwYWdlICp6c3BhZ2UpXFxuLS1cXG5tbS96c21hbGxvYy5jLTE2NDUtfVxcbm1tL3pzbWFsbG9jLmM6MTY0NjojZW5kaWYgLyogQ09ORklHX0NPTVBBQ1RJT04gKi9cXG5tbS96c21hbGxvYy5jLTE2NDctXFxubW0venNtYWxsb2MuYzoxNjQ4OiNpZmRlZiBDT05GSUdfQ09NUEFDVElPTlxcbm1tL3pzbWFsbG9jLmMtMTY0OS1cXG4tLVxcbm1tL3pzbWFsbG9jLmM9MjIzNz1zdGF0aWMgaW50IF9faW5pdCB6c19pbml0KHZvaWQpXFxuLS1cXG5tbS96c21hbGxvYy5jLTIyNDQtXFxubW0venNtYWxsb2MuYzoyMjQ1OiNpZmRlZiBDT05GSUdfQ09NUEFDVElPTlxcbm1tL3pzbWFsbG9jLmMtMjI0Ni1cXHRyYyA9IHNldF9tb3ZhYmxlX29wcyhcXHUwMDI2enNtYWxsb2NfbW9wcywgUEdUWV96c21hbGxvYyk7XFxuLS1cXG5tbS96c21hbGxvYy5jPTIyNTY9c3RhdGljIHZvaWQgX19leGl0IHpzX2V4aXQodm9pZClcXG5tbS96c21hbGxvYy5jLTIyNTcte1xcbm1tL3pzbWFsbG9jLmM6MjI1ODojaWZkZWYgQ09ORklHX0NPTVBBQ1RJT05cXG5tbS96c21hbGxvYy5jLTIyNTktXFx0c2V0X21vdmFibGVfb3BzKE5VTEwsIFBHVFlfenNtYWxsb2MpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNlQyMDoyMjowNy40ODYyNjI4NDdaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NzUzMjU1OTg5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgS2VybmVsJ3MgTWVtb3J5IENvbXBhY3Rpb24gSW1wbGVtZW50YXRpb24qKlxuXG5Pa2F5LCBzbyB0aGUgcHJpbWFyeSBjb25maWd1cmF0aW9uIG9wdGlvbiBkcml2aW5nIHRoaXMgc2VlbXMgdG8gYmUgYENPTkZJR19DT01QQUNUSU9OYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIGNoYW5nZXMgaW1wYWN0IHRoZSBzeXN0ZW0uIEl0IGxvb2tzIGxpa2UgYF9fYWxsb2NfcGFnZXNfZGlyZWN0X2NvbXBhY3RgIGlzIGNvbmRpdGlvbmFsbHkgY29tcGlsZWQgYmFzZWQgb24gYENPTkZJR19DT01QQUNUSU9OYCwgd2hpY2ggaXMgYSBrZXkgcGllY2Ugb2YgaW5mb3JtYXRpb24uIEkgc2hvdWxkIGxvb2sgZm9yIGFueSBvdGhlciByZWxhdGVkIGNvbmZpZ3VyYXRpb24gb3B0aW9ucywganVzdCBpbiBjYXNlLlxuXG5BbHJpZ2h0LCBsZXQncyBicmVhayBkb3duIHRoZSBjb2RlIG1vZGlmaWNhdGlvbnMuIFRoZSBwYXRjaCB0YXJnZXRzIGBtbS9jb21wYWN0aW9uLmNgIGFuZCBgbW0vcGFnZV9hbGxvYy5jYCwgc28gdGhvc2UgYXJlIHRoZSBhcmVhcyBvZiBpbnRlcmVzdC4gSW4gYG1tL2NvbXBhY3Rpb24uY2AsIEkgc2VlIGZ1bmN0aW9ucyBsaWtlIGBzdWl0YWJsZV9taWdyYXRpb25fc291cmNlYCwgYGZhc3RfZmluZF9taWdyYXRlYmxvY2tgLCBgY29tcGFjdF96b25lX29yZGVyYCwgYW5kIGB0cnlfdG9fY29tcGFjdF9wYWdlc2AuIFRoYXQncyB0aGUgZXhwZWN0ZWQgY29yZSBjb21wYWN0aW9uIGxvZ2ljLlxuXG5Ob3csIGluIGBtbS9wYWdlX2FsbG9jLmNgLCBJJ20gc2VlaW5nIGBjb21wYWN0aW9uX2NhcHR1cmVgLCBgX19hbGxvY19wYWdlc19kaXJlY3RfY29tcGFjdGAsIGFuZCBgX19hbGxvY19wYWdlc19kaXJlY3RfcmVjbGFpbWAuIEhtbSwgd2FpdCBhIHNlY29uZC4uLiBgX19hbGxvY19wYWdlc19kaXJlY3RfcmVjbGFpbWAgaXNuJ3QgZ3VhcmRlZCBieSBhbiBgI2lmZGVmIENPTkZJR19DT01QQUNUSU9OYCBwcmVwcm9jZXNzb3IgZGlyZWN0aXZlLCB3aGljaCBpcyBpbnRlcmVzdGluZy4gSSdsbCBuZWVkIHRvIGNoZWNrIHRoZSBjb2RlIGFyb3VuZCBsaW5lIDQ0NjAgaW4gYG1tL3BhZ2VfYWxsb2MuY2AgdG8gdW5kZXJzdGFuZCB0aGUgZXhhY3QgY29udGV4dCB0aGVyZS4gVGhpcyBpbXBsaWVzIHRoYXQgZXZlbiB3aXRob3V0IGFjdGl2ZSBjb21wYWN0aW9uLCBzb21lIGRpcmVjdCByZWNsYWltIGZ1bmN0aW9uYWxpdHkgbWlnaHQgc3RpbGwgYmUgaW50ZXJhY3Rpbmcgd2l0aCB0aGUgcmVsYXRlZCBjb2RlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5NDI2LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI2VDIwOjIyOjEyLjIzOTUyMDU0NloiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzNzM5MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9wYWdlX2FsbG9jLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNDQ1MCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiNDQ1MDpcXHRcXG40NDUxOlxcdFxcdHJldHVybiBwcm9ncmVzcztcXG40NDUyOlxcdH1cXG40NDUzOlxcdFxcbjQ0NTQ6XFx0LyogVGhlIHJlYWxseSBzbG93IGFsbG9jYXRvciBwYXRoIHdoZXJlIHdlIGVudGVyIGRpcmVjdCByZWNsYWltICovXFxuNDQ1NTpcXHRzdGF0aWMgaW5saW5lIHN0cnVjdCBwYWdlICpcXG40NDU2OlxcdF9fYWxsb2NfcGFnZXNfZGlyZWN0X3JlY2xhaW0oZ2ZwX3QgZ2ZwX21hc2ssIHVuc2lnbmVkIGludCBvcmRlcixcXG40NDU3OlxcdFxcdFxcdHVuc2lnbmVkIGludCBhbGxvY19mbGFncywgY29uc3Qgc3RydWN0IGFsbG9jX2NvbnRleHQgKmFjLFxcbjQ0NTg6XFx0XFx0XFx0dW5zaWduZWQgbG9uZyAqZGlkX3NvbWVfcHJvZ3Jlc3MpXFxuNDQ1OTpcXHR7XFxuNDQ2MDpcXHRcXHRzdHJ1Y3QgcGFnZSAqcGFnZSA9IE5VTEw7XFxuNDQ2MTpcXHRcXHR1bnNpZ25lZCBsb25nIHBmbGFncztcXG40NDYyOlxcdFxcdGJvb2wgZHJhaW5lZCA9IGZhbHNlO1xcbjQ0NjM6XFx0XFx0aW50IHJlY2xhaW1fb3JkZXIgPSBvcmRlcjtcXG40NDY0OlxcdFxcbjQ0NjU6XFx0XFx0LyogTWF0Y2ggdGhlIHNsb3dwYXRoIGNvbXBhY3Rpb24gcHJvbW90aW9uIGluIF9fYWxsb2NfcGFnZXNfZGlyZWN0X2NvbXBhY3QgKi9cXG40NDY2OlxcdFxcdGlmICgoYWxsb2NfZmxhZ3MgXFx1MDAyNiBBTExPQ19OT0ZSQUdNRU5UKSBcXHUwMDI2XFx1MDAyNiBhYy1cXHUwMDNlbWlncmF0ZXR5cGUgIT0gTUlHUkFURV9NT1ZBQkxFKVxcbjQ0Njc6XFx0XFx0XFx0cmVjbGFpbV9vcmRlciA9IG1heChvcmRlciwgcGFnZWJsb2NrX29yZGVyKTtcXG40NDY4OlxcdFxcbjQ0Njk6XFx0XFx0cHNpX21lbXN0YWxsX2VudGVyKFxcdTAwMjZwZmxhZ3MpO1xcbjQ0NzA6XFx0XFx0KmRpZF9zb21lX3Byb2dyZXNzID0gX19wZXJmb3JtX3JlY2xhaW0oZ2ZwX21hc2ssIHJlY2xhaW1fb3JkZXIsIGFjKTtcXG40NDcxOlxcdFxcdGlmICh1bmxpa2VseSghKCpkaWRfc29tZV9wcm9ncmVzcykpKVxcbjQ0NzI6XFx0XFx0XFx0Z290byBvdXQ7XFxuNDQ3MzpcXHRcXG40NDc0OlxcdHJldHJ5OlxcbjQ0NzU6XFx0XFx0cGFnZSA9IGdldF9wYWdlX2Zyb21fZnJlZWxpc3QoZ2ZwX21hc2ssIG9yZGVyLCBhbGxvY19mbGFncywgYWMpO1xcbjQ0NzY6XFx0XFxuNDQ3NzpcXHRcXHQvKlxcbjQ0Nzg6XFx0XFx0ICogSWYgYW4gYWxsb2NhdGlvbiBmYWlsZWQgYWZ0ZXIgZGlyZWN0IHJlY2xhaW0sIGl0IGNvdWxkIGJlIGJlY2F1c2VcXG40NDc5OlxcdFxcdCAqIHBhZ2VzIGFyZSBwaW5uZWQgb24gdGhlIHBlci1jcHUgbGlzdHMgb3IgaW4gaGlnaCBhbGxvYyByZXNlcnZlcy5cXG40NDgwOlxcdFxcdCAqIFNocmluayB0aGVtIGFuZCB0cnkgYWdhaW5cXG40NDgxOlxcdFxcdCAqL1xcbjQ0ODI6XFx0XFx0aWYgKCFwYWdlIFxcdTAwMjZcXHUwMDI2ICFkcmFpbmVkKSB7XFxuNDQ4MzpcXHRcXHRcXHR1bnJlc2VydmVfaGlnaGF0b21pY19wYWdlYmxvY2soYWMsIGZhbHNlKTtcXG40NDg0OlxcdFxcdFxcdGRyYWluX2FsbF9wYWdlcyhOVUxMKTtcXG40NDg1OlxcdFxcdFxcdGRyYWluZWQgPSB0cnVlO1xcbjQ0ODY6XFx0XFx0XFx0Z290byByZXRyeTtcXG40NDg3OlxcdFxcdH1cXG40NDg4OlxcdG91dDpcXG40NDg5OlxcdFxcdHBzaV9tZW1zdGFsbF9sZWF2ZShcXHUwMDI2cGZsYWdzKTtcXG40NDkwOlxcdFxcbjQ0OTE6XFx0XFx0cmV0dXJuIHBhZ2U7XFxuNDQ5MjpcXHR9XFxuNDQ5MzpcXHRcXG40NDk0OlxcdHN0YXRpYyB2b2lkIHdha2VfYWxsX2tzd2FwZHModW5zaWduZWQgaW50IG9yZGVyLCBnZnBfdCBnZnBfbWFzayxcXG40NDk1OlxcdFxcdFxcdFxcdCAgICAgY29uc3Qgc3RydWN0IGFsbG9jX2NvbnRleHQgKmFjKVxcbjQ0OTY6XFx0e1xcbjQ0OTc6XFx0XFx0c3RydWN0IHpvbmVyZWYgKno7XFxuNDQ5ODpcXHRcXHRzdHJ1Y3Qgem9uZSAqem9uZTtcXG40NDk5OlxcdFxcdHBnX2RhdGFfdCAqbGFzdF9wZ2RhdCA9IE5VTEw7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI2VDIwOjIyOjEyLjIzOTc1OTA5NVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMwMzA5MDQyNjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gdGhlIE1lbW9yeSBBbGxvY2F0aW9uIENvZGUqKlxuXG5BbHJpZ2h0LCBzbyBgX19hbGxvY19wYWdlc19kaXJlY3RfcmVjbGFpbWAgaXMgZGVmaW5pdGVseSBpbiB0aGUgYnVpbGQsIG5vIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIHRoZXJlLiBUaGF0J3MgZ29vZCB0byBrbm93LiBOb3csIGBfX2FsbG9jX3BhZ2VzX2RpcmVjdF9jb21wYWN0YC4uLiBhaCwgdGhhdCdzIHR1Y2tlZCBiZWhpbmQgYSBgI2lmZGVmIENPTkZJR19DT01QQUNUSU9OYC4gTWFrZXMgc2Vuc2UuIFNvLCBpdHMgcHJlc2VuY2UgaW4gdGhlIGtlcm5lbCBpbWFnZSBkZXBlbmRzIG9uIHRoYXQgY29uZmlndXJhdGlvbiBvcHRpb24gYmVpbmcgZW5hYmxlZC4gVGltZSB0byBkaWcgaW4gYSBiaXQgZnVydGhlci4gTGV0IG1lIGp1bXAgb3ZlciB0byBgbW0vcGFnZV9hbGxvYy5jYCBhbmQgdGFrZSBhIGxvb2sgYXJvdW5kIGxpbmUgNDE0Ni4gVGhhdCdzIGEgcmVhc29uYWJsZSBwbGFjZSB0byBzdGFydCwgZ2l2ZW4gdGhlIGZ1bmN0aW9uIG5hbWVzLiBIb3BlZnVsbHksIEkgY2FuIHNlZSBob3cgdGhlc2UgdHdvIGZ1bmN0aW9ucyBhcmUgY2FsbGVkIGFuZCBob3cgdGhleSBpbnRlcmFjdC4gTGV0J3Mgc2VlIHdoYXQgd2UgZmluZCB0aGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA3MjAsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1OSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI2VDIwOjIyOjE1LjI3MDY2NTE5M1oiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMzc1MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vcGFnZV9hbGxvYy5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDQxMzAsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjQxMzA6XFx0XFx0cmV0dXJuIHBhZ2U7XFxuNDEzMTpcXHR9XFxuNDEzMjpcXHRcXG40MTMzOlxcdC8qXFxuNDEzNDpcXHQgKiBNYXhpbXVtIG51bWJlciBvZiBjb21wYWN0aW9uIHJldHJpZXMgd2l0aCBhIHByb2dyZXNzIGJlZm9yZSBPT01cXG40MTM1OlxcdCAqIGtpbGxlciBpcyBjb25zaWRlciBhcyB0aGUgb25seSB3YXkgdG8gbW92ZSBmb3J3YXJkLlxcbjQxMzY6XFx0ICovXFxuNDEzNzpcXHQjZGVmaW5lIE1BWF9DT01QQUNUX1JFVFJJRVMgMTZcXG40MTM4OlxcdFxcbjQxMzk6XFx0I2lmZGVmIENPTkZJR19DT01QQUNUSU9OXFxuNDE0MDpcXHQvKiBUcnkgbWVtb3J5IGNvbXBhY3Rpb24gZm9yIGhpZ2gtb3JkZXIgYWxsb2NhdGlvbnMgYmVmb3JlIHJlY2xhaW0gKi9cXG40MTQxOlxcdHN0YXRpYyBzdHJ1Y3QgcGFnZSAqXFxuNDE0MjpcXHRfX2FsbG9jX3BhZ2VzX2RpcmVjdF9jb21wYWN0KGdmcF90IGdmcF9tYXNrLCB1bnNpZ25lZCBpbnQgb3JkZXIsXFxuNDE0MzpcXHRcXHRcXHR1bnNpZ25lZCBpbnQgYWxsb2NfZmxhZ3MsIGNvbnN0IHN0cnVjdCBhbGxvY19jb250ZXh0ICphYyxcXG40MTQ0OlxcdFxcdFxcdGVudW0gY29tcGFjdF9wcmlvcml0eSBwcmlvLCBlbnVtIGNvbXBhY3RfcmVzdWx0ICpjb21wYWN0X3Jlc3VsdClcXG40MTQ1OlxcdHtcXG40MTQ2OlxcdFxcdHN0cnVjdCBwYWdlICpwYWdlID0gTlVMTDtcXG40MTQ3OlxcdFxcdHVuc2lnbmVkIGxvbmcgcGZsYWdzO1xcbjQxNDg6XFx0XFx0dW5zaWduZWQgaW50IG5vcmVjbGFpbV9mbGFnO1xcbjQxNDk6XFx0XFx0c3RydWN0IGNhcHR1cmVfY29udHJvbCBjYXBjID0ge1xcbjQxNTA6XFx0XFx0XFx0Lm9yZGVyID0gb3JkZXIsXFxuNDE1MTpcXHRcXHRcXHQucGFnZSA9IE5VTEwsXFxuNDE1MjpcXHRcXHR9O1xcbjQxNTM6XFx0XFx0aW50IGNvbXBhY3Rfb3JkZXIgPSBvcmRlcjtcXG40MTU0OlxcdFxcbjQxNTU6XFx0XFx0LypcXG40MTU2OlxcdFxcdCAqIElmIGZhbGxiYWNrcyBhcmUgbm90IHBlcm1pdHRlZCAoZGVmcmFnX21vZGUpLCB3ZSBlaXRoZXJcXG40MTU3OlxcdFxcdCAqIG5lZWQgdG8gcmVjbGFpbSBzcGFjZSBpbiBhIGJsb2NrIG9mIG1hdGNoaW5nIHR5cGUsIG9yIGNsZWFyXFxuNDE1ODpcXHRcXHQgKiBvdXQgYW4gZW50aXJlIGJsb2NrIHRvIGFsbG93IF9fcm1xdWV1ZV9jbGFpbSgpIHRvIGNvbnZlcnQuXFxuNDE1OTpcXHRcXHQgKlxcbjQxNjA6XFx0XFx0ICogUmVjbGFpbSBieSBpdHNlbGYgaXMgcHJpbWFyaWx5IGZyZWVpbmcgc3BhY2UgaW4gbW92YWJsZVxcbjQxNjE6XFx0XFx0ICogYmxvY2tzLCBzaW5jZSB0aGF0J3Mgd2hlcmUgdGhlIExSVSBwYWdlcyBsaXZlLiBTbyB0aGlzXFxuNDE2MjpcXHRcXHQgKiB3b3JrcyBmb3IgbW92YWJsZSByZXF1ZXN0cywgYnV0IG5vdCBmb3Igb3RoZXJzLlxcbjQxNjM6XFx0XFx0ICpcXG40MTY0OlxcdFxcdCAqIEZvciB0aG9zZSwgcHJvbW90ZSB0aGUgb3JkZXIgdG8gaGVscCBtYWtlIGJsb2NrcywgaW5zdGVhZFxcbjQxNjU6XFx0XFx0ICogb2Ygc3Bpbm5pbmcgaW4gcmVjbGFpbSBhbG9uZSB1bnByb2R1Y3RpdmVseS5cXG40MTY2OlxcdFxcdCAqL1xcbjQxNjc6XFx0XFx0aWYgKChhbGxvY19mbGFncyBcXHUwMDI2IEFMTE9DX05PRlJBR01FTlQpIFxcdTAwMjZcXHUwMDI2IGFjLVxcdTAwM2VtaWdyYXRldHlwZSAhPSBNSUdSQVRFX01PVkFCTEUpXFxuNDE2ODpcXHRcXHRcXHRjb21wYWN0X29yZGVyID0gbWF4KG9yZGVyLCBwYWdlYmxvY2tfb3JkZXIpO1xcbjQxNjk6XFx0XFxuNDE3MDpcXHRcXHRpZiAoIWNvbXBhY3Rfb3JkZXIpXFxuNDE3MTpcXHRcXHRcXHRyZXR1cm4gTlVMTDtcXG40MTcyOlxcdFxcbjQxNzM6XFx0XFx0LypcXG40MTc0OlxcdFxcdCAqIE1ha2Ugc3VyZSB0aGUgc3RydWN0cyBhcmUgcmVhbGx5IGluaXRpYWxpemVkIGJlZm9yZSB3ZSBleHBvc2UgdGhlXFxuNDE3NTpcXHRcXHQgKiBjYXB0dXJlIGNvbnRyb2wsIGluIGNhc2Ugd2UgYXJlIGludGVycnVwdGVkIGFuZCB0aGUgaW50ZXJydXB0IGhhbmRsZXJcXG40MTc2OlxcdFxcdCAqIGZyZWVzIGEgcGFnZS5cXG40MTc3OlxcdFxcdCAqL1xcbjQxNzg6XFx0XFx0YmFycmllcigpO1xcbjQxNzk6XFx0XFx0V1JJVEVfT05DRShjdXJyZW50LVxcdTAwM2VjYXB0dXJlX2NvbnRyb2wsIFxcdTAwMjZjYXBjKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjZUMjA6MjI6MTUuMjcxMDA0NjQzWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI5MzA1MjAyODUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQ29tcGFjdGlvbiBDb25maWd1cmF0aW9uIFJldmlldyoqXG5cbk9rYXksIHNvIG1vc3Qgb2YgdGhlc2UgY2hhbmdlcyBJJ20gbG9va2luZyBhdCBoaW5nZSBvbiBgQ09ORklHX0NPTVBBQ1RJT05gLiBUaGF0J3MgcHJldHR5IHN0YW5kYXJkLCBidXQgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGhhdmVuJ3QgbWlzc2VkIGFueXRoaW5nIGNydWNpYWwuIExldCdzIG5vdCBhc3N1bWUgYW55dGhpbmcuIEkgbmVlZCB0byBnZXQgaW50byBhIG1ldGhvZGljYWwgYXBwcm9hY2ggZm9yIHRoaXMuXG5cbkknbSB0aGlua2luZywgYXJlIHRoZXJlIGFueSAqb3RoZXIqIGNvbmZpZyBvcHRpb25zIEkgbmVlZCB0byBkb3VibGUtY2hlY2sgcmVsYXRlZCB0byB0aGVzZSBjb21wYWN0aW9uIG1vZGlmaWNhdGlvbnM/IExldCdzIHRha2UgYSBsb29rIGF0IGBzdWl0YWJsZV9taWdyYXRpb25fc291cmNlYCB3aXRoaW4gYG1tL2NvbXBhY3Rpb24uY2AuIFRoYXQgZnVuY3Rpb24gd2lsbCBnaXZlIG1lIGEgZ29vZCwgbG93LWxldmVsIGluc2lnaHQgaW50byB0aGUgY29tcGFjdGlvbiBiZWhhdmlvci4gVGltZSB0byBkZWx2ZSBpbnRvIHRoZSBjb2RlIGFuZCBydWxlIG91dCBhbnkgZGVwZW5kZW5jaWVzIG9yIGVkZ2UgY2FzZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExNzIxLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yNlQyMDoyMjoxOC4yMDE1MjY3NDdaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjE3MzQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL2NvbXBhY3Rpb24uY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMzcwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMzcwOlxcdFxcdHJldHVybiByZXQ7XFxuMTM3MTpcXHR9XFxuMTM3MjpcXHRcXG4xMzczOlxcdCNlbmRpZiAvKiBDT05GSUdfQ09NUEFDVElPTiB8fCBDT05GSUdfQ01BICovXFxuMTM3NDpcXHQjaWZkZWYgQ09ORklHX0NPTVBBQ1RJT05cXG4xMzc1OlxcdFxcbjEzNzY6XFx0c3RhdGljIGJvb2wgc3VpdGFibGVfbWlncmF0aW9uX3NvdXJjZShzdHJ1Y3QgY29tcGFjdF9jb250cm9sICpjYyxcXG4xMzc3OlxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdHN0cnVjdCBwYWdlICpwYWdlKVxcbjEzNzg6XFx0e1xcbjEzNzk6XFx0XFx0aW50IGJsb2NrX210O1xcbjEzODA6XFx0XFxuMTM4MTpcXHRcXHRpZiAocGFnZWJsb2NrX3NraXBfcGVyc2lzdGVudChwYWdlKSlcXG4xMzgyOlxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4xMzgzOlxcdFxcbjEzODQ6XFx0XFx0LypcXG4xMzg1OlxcdFxcdCAqIEJhY2tncm91bmQgY29tcGFjdGlvbiBwcm9kdWNlcyBibG9ja3MgZm9yIHRoZSB6b25lIGF0XFxuMTM4NjpcXHRcXHQgKiBsYXJnZSwgd2l0aCBubyBwYXJ0aWN1bGFyIGFsbG9jYXRpb24gY29udGV4dC4gQWxsb3cgYWxsXFxuMTM4NzpcXHRcXHQgKiBibG9jayB0eXBlcywgaW5jbHVkaW5nIENNQS5cXG4xMzg4OlxcdFxcdCAqL1xcbjEzODk6XFx0XFx0aWYgKCFjYy1cXHUwMDNlZGlyZWN0X2NvbXBhY3Rpb24pXFxuMTM5MDpcXHRcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4xMzkxOlxcdFxcbjEzOTI6XFx0XFx0YmxvY2tfbXQgPSBnZXRfcGFnZWJsb2NrX21pZ3JhdGV0eXBlKHBhZ2UpO1xcbjEzOTM6XFx0XFxuMTM5NDpcXHRcXHQvKlxcbjEzOTU6XFx0XFx0ICogQ01BIHBhZ2VzIGNhbiBvbmx5IGJlIHRha2VuIGJ5IEFMTE9DX0NNQSByZXF1ZXN0cy4gRm9yIGFueWJvZHlcXG4xMzk2OlxcdFxcdCAqIGVsc2UsIHZhY2F0aW5nIGEgQ01BIGJsb2NrIGNvbnN1bWVzIGZyZWUgcGFnZXMgdGhlIGNhbGxlclxcbjEzOTc6XFx0XFx0ICogY291bGQgaGF2ZSB1c2VkLCBhbmQgcHJvZHVjZXMgZnJlZSBwYWdlcyBpdCBjYW5ub3QuXFxuMTM5ODpcXHRcXHQgKi9cXG4xMzk5OlxcdFxcdGlmIChpc19taWdyYXRlX2NtYShibG9ja19tdCkgXFx1MDAyNlxcdTAwMjYgIShjYy1cXHUwMDNlYWxsb2NfZmxhZ3MgXFx1MDAyNiBBTExPQ19DTUEpKVxcbjE0MDA6XFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbjE0MDE6XFx0XFxuMTQwMjpcXHRcXHRpZiAoY2MtXFx1MDAzZW1vZGUgIT0gTUlHUkFURV9BU1lOQylcXG4xNDAzOlxcdFxcdFxcdHJldHVybiB0cnVlO1xcbjE0MDQ6XFx0XFxuMTQwNTpcXHRcXHQvKlxcbjE0MDY6XFx0XFx0ICogUHJldmVudCBzbWFsbCB1bm1vdmFibGUvcmVjbGFpbWFibGUgcmVxdWVzdHMgZnJvbSBwb2xsdXRpbmdcXG4xNDA3OlxcdFxcdCAqIG1vdmFibGUgYmxvY2tzIHRocm91Z2ggZmFsbGJhY2tzLiBXaG9sZS1ibG9jayBwcm9kdWN0aW9uIGlzXFxuMTQwODpcXHRcXHQgKiBleGVtcHQgYXMgdGhlIGFsbG9jYXRvciBjbGFpbXMgYW5kIGNvbnZlcnRzIHRoZXNlLlxcbjE0MDk6XFx0XFx0ICovXFxuMTQxMDpcXHRcXHRpZiAoY2MtXFx1MDAzZW1pZ3JhdGV0eXBlID09IE1JR1JBVEVfTU9WQUJMRSB8fCBjYy1cXHUwMDNlb3JkZXIgXFx1MDAzZT0gcGFnZWJsb2NrX29yZGVyKVxcbjE0MTE6XFx0XFx0XFx0cmV0dXJuIGlzX21pZ3JhdGVfbW92YWJsZShibG9ja19tdCk7XFxuMTQxMjpcXHRcXHRlbHNlXFxuMTQxMzpcXHRcXHRcXHRyZXR1cm4gYmxvY2tfbXQgPT0gY2MtXFx1MDAzZW1pZ3JhdGV0eXBlO1xcbjE0MTQ6XFx0fVxcbjE0MTU6XFx0XFxuMTQxNjpcXHQvKiBSZXR1cm5zIHRydWUgaWYgdGhlIHBhZ2UgaXMgd2l0aGluIGEgYmxvY2sgc3VpdGFibGUgZm9yIG1pZ3JhdGlvbiB0byAqL1xcbjE0MTc6XFx0c3RhdGljIGJvb2wgc3VpdGFibGVfbWlncmF0aW9uX3RhcmdldChzdHJ1Y3QgY29tcGFjdF9jb250cm9sICpjYyxcXG4xNDE4OlxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdHN0cnVjdCBwYWdlICpwYWdlKVxcbjE0MTk6XFx0e1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNlQyMDoyMjoxOC4yMDE3NDU1NThaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzk2OTE4Mzk5MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoZXNlIGNoYW5nZXMsIHBocmFzZWQgYXMgYSBwZXJzb25hbCB0aG91Z2h0IHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gdGhlIE1pZ3JhdGlvbiBTb3VyY2UgTG9naWMqKlxuXG5BbHJpZ2h0LCBzbyBJJ20gbG9va2luZyBhdCB0aGVzZSBjaGFuZ2VzIGluIGBzdWl0YWJsZV9taWdyYXRpb25fc291cmNlYCBhbmQgaXQncyBjbGVhciB0aGUgZm9jdXMgaXMgYXJvdW5kIGhvdyB3ZSdyZSBoYW5kbGluZyBDTUEgKENvbnRpZ3VvdXMgTWVtb3J5IEFsbG9jYXRvcikgbWVtb3J5IGZvciBtaWdyYXRpb24uIFNwZWNpZmljYWxseSwgaXQgc2VlbXMgbGlrZSB3ZSdyZSByZWx5aW5nIG9uIHRoZSBmdW5jdGlvbnMgYGlzX21pZ3JhdGVfY21hKGJsb2NrX210KWAgYW5kIHRoZSBtYWNybyBgQUxMT0NfQ01BYC4gTXkgaW5pdGlhbCBxdWVzdGlvbiBpcywgZG8gdGhlc2UgY2hhbmdlcyBpbXBseSBhICpyZXF1aXJlbWVudCogZm9yIGBDT05GSUdfQ01BYCB0byBiZSBlbmFibGVkPyBJdCBzZWVtcyBsaWtlbHksIGdpdmVuIHRoZSBkaXJlY3QgdXNlIG9mIHRoZXNlIENNQS1yZWxhdGVkIGNvbnN0cnVjdHMuIEkgbmVlZCB0byB0cmFjZSB0aGlzIGJhY2suXG5cbkFoLCBgaXNfbWlncmF0ZV9jbWFgIGlzIGRlZmluZWQgaW4gYGluY2x1ZGUvbGludXgvbW16b25lLmhgLCB3aGljaCBpcyB0aGUgY29ycmVjdCBwbGFjZSBmb3IgbWVtb3J5IHpvbmUgaW5mb3JtYXRpb24gYW5kIGRlZmluaXRpb25zLiBUaGF0J3MgZ29vZCwgaXQncyB3aGVyZSBJJ2QgZXhwZWN0IGl0IHRvIGJlLiBUaGlzIHN1Z2dlc3RzIHRoZSBsb2dpYyBpcyBjaGVja2luZyBpZiB0aGUgY3VycmVudCBtZW1vcnkgYmxvY2sgKGBibG9ja19tdGApIGlzIGFsbG9jYXRlZCBmcm9tIGEgQ01BIHpvbmUuIEkgbmVlZCB0byBzZWUgaG93IHRoZSBpbnRlcmFjdGlvbnMgd2l0aCBgQUxMT0NfQ01BYCBhZmZlY3QgdGhlIG92ZXJhbGwgbWlncmF0aW9uIHBhdGguXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyNjM5LCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yNlQyMDoyMjoyMi4xNzA5MzEzNTlaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3OTk5MjE4OTMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaXNfbWlncmF0ZV9jbWFcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9tbXpvbmUuaD0xNDc9ZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBtaWdyYXRldHlwZV9uYW1lc1tNSUdSQVRFX1RZUEVTXTtcXG4tLVxcbmluY2x1ZGUvbGludXgvbW16b25lLmgtMTQ5LSNpZmRlZiBDT05GSUdfQ01BXFxuaW5jbHVkZS9saW51eC9tbXpvbmUuaDoxNTA6IyAgZGVmaW5lIGlzX21pZ3JhdGVfY21hKG1pZ3JhdGV0eXBlKSB1bmxpa2VseSgobWlncmF0ZXR5cGUpID09IE1JR1JBVEVfQ01BKVxcbmluY2x1ZGUvbGludXgvbW16b25lLmg6MTUxOiMgIGRlZmluZSBpc19taWdyYXRlX2NtYV9wYWdlKF9wYWdlKSAoZ2V0X3BhZ2VibG9ja19taWdyYXRldHlwZShfcGFnZSkgPT0gTUlHUkFURV9DTUEpXFxuaW5jbHVkZS9saW51eC9tbXpvbmUuaC0xNTItLypcXG4tLVxcbmluY2x1ZGUvbGludXgvbW16b25lLmgtMTU1LSAqL1xcbmluY2x1ZGUvbGludXgvbW16b25lLmg6MTU2OiMgIGRlZmluZSBpc19taWdyYXRlX2NtYV9mb2xpbyhmb2xpbywgcGZuKSBcXFxcXFxuaW5jbHVkZS9saW51eC9tbXpvbmUuaC0xNTctXFx0KGdldF9wZm5ibG9ja19taWdyYXRldHlwZShcXHUwMDI2Zm9saW8tXFx1MDAzZXBhZ2UsIHBmbikgPT0gTUlHUkFURV9DTUEpXFxuaW5jbHVkZS9saW51eC9tbXpvbmUuaC0xNTgtI2Vsc2VcXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oOjE1OTojICBkZWZpbmUgaXNfbWlncmF0ZV9jbWEobWlncmF0ZXR5cGUpIGZhbHNlXFxuaW5jbHVkZS9saW51eC9tbXpvbmUuaDoxNjA6IyAgZGVmaW5lIGlzX21pZ3JhdGVfY21hX3BhZ2UoX3BhZ2UpIGZhbHNlXFxuaW5jbHVkZS9saW51eC9tbXpvbmUuaDoxNjE6IyAgZGVmaW5lIGlzX21pZ3JhdGVfY21hX2ZvbGlvKGZvbGlvLCBwZm4pIGZhbHNlXFxuaW5jbHVkZS9saW51eC9tbXpvbmUuaC0xNjItI2VuZGlmXFxuLS1cXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oPTE2ND1zdGF0aWMgaW5saW5lIGJvb2wgaXNfbWlncmF0ZV9tb3ZhYmxlKGludCBtdClcXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oLTE2NS17XFxuaW5jbHVkZS9saW51eC9tbXpvbmUuaDoxNjY6XFx0cmV0dXJuIGlzX21pZ3JhdGVfY21hKG10KSB8fCBtdCA9PSBNSUdSQVRFX01PVkFCTEU7XFxuaW5jbHVkZS9saW51eC9tbXpvbmUuaC0xNjctfVxcbi0tXFxubW0vY29tcGFjdGlvbi5jPTEzNzY9c3RhdGljIGJvb2wgc3VpdGFibGVfbWlncmF0aW9uX3NvdXJjZShzdHJ1Y3QgY29tcGFjdF9jb250cm9sICpjYyxcXG4tLVxcbm1tL2NvbXBhY3Rpb24uYy0xMzk4LVxcdCAqL1xcbm1tL2NvbXBhY3Rpb24uYzoxMzk5OlxcdGlmIChpc19taWdyYXRlX2NtYShibG9ja19tdCkgXFx1MDAyNlxcdTAwMjYgIShjYy1cXHUwMDNlYWxsb2NfZmxhZ3MgXFx1MDAyNiBBTExPQ19DTUEpKVxcbm1tL2NvbXBhY3Rpb24uYy0xNDAwLVxcdFxcdHJldHVybiBmYWxzZTtcXG4tLVxcbm1tL2RlYnVnLmM9NzA9c3RhdGljIHZvaWQgX19kdW1wX2ZvbGlvKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8sIGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlLFxcbi0tXFxubW0vZGVidWcuYy0xMTUtXFx0cHJfd2FybihcXFwiJXNmbGFnczogJXBHcCVzXFxcXG5cXFwiLCB0eXBlLCBcXHUwMDI2Zm9saW8tXFx1MDAzZWZsYWdzLFxcbm1tL2RlYnVnLmM6MTE2OlxcdFxcdGlzX21pZ3JhdGVfY21hX2ZvbGlvKGZvbGlvLCBwZm4pID8gXFxcIiBDTUFcXFwiIDogXFxcIlxcXCIpO1xcbm1tL2RlYnVnLmMtMTE3LVxcdGlmIChwYWdlX2hhc190eXBlKFxcdTAwMjZmb2xpby1cXHUwMDNlcGFnZSkpXFxuLS1cXG5tbS9wYWdlX2FsbG9jLmM9NzI4PWNvbXBhY3Rpb25fY2FwdHVyZShzdHJ1Y3QgY2FwdHVyZV9jb250cm9sICpjYXBjLCBzdHJ1Y3QgcGFnZSAqcGFnZSxcXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYy03MzQtXFx0LyogRG8gbm90IGFjY2lkZW50YWxseSBwb2xsdXRlIENNQSBvciBpc29sYXRlZCByZWdpb25zKi9cXG5tbS9wYWdlX2FsbG9jLmM6NzM1OlxcdGlmIChpc19taWdyYXRlX2NtYShtaWdyYXRldHlwZSkgfHxcXG5tbS9wYWdlX2FsbG9jLmMtNzM2LVxcdCAgICBpc19taWdyYXRlX2lzb2xhdGUobWlncmF0ZXR5cGUpKVxcbi0tXFxubW0vcGFnZV9hbGxvYy5jPTc3Mj1zdGF0aWMgaW5saW5lIHZvaWQgYWNjb3VudF9mcmVlcGFnZXMoc3RydWN0IHpvbmUgKnpvbmUsIGludCBucl9wYWdlcyxcXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYy03ODEtXFxubW0vcGFnZV9hbGxvYy5jOjc4MjpcXHRpZiAoaXNfbWlncmF0ZV9jbWEobWlncmF0ZXR5cGUpKVxcbm1tL3BhZ2VfYWxsb2MuYy03ODMtXFx0XFx0X19tb2Rfem9uZV9wYWdlX3N0YXRlKHpvbmUsIE5SX0ZSRUVfQ01BX1BBR0VTLCBucl9wYWdlcyk7XFxuLS1cXG5tbS9wYWdlX2lzb2xhdGlvbi5jPTEzND1zdGF0aWMgc3RydWN0IHBhZ2UgKmhhc191bm1vdmFibGVfcGFnZXModW5zaWduZWQgbG9uZyBzdGFydF9wZm4sIHVuc2lnbmVkIGxvbmcgZW5kX3BmbixcXG4tLVxcbm1tL3BhZ2VfaXNvbGF0aW9uLmMtMTQyLVxcbm1tL3BhZ2VfaXNvbGF0aW9uLmM6MTQzOlxcdGlmIChpc19taWdyYXRlX2NtYV9wYWdlKHBhZ2UpKSB7XFxubW0vcGFnZV9pc29sYXRpb24uYy0xNDQtXFx0XFx0LypcXG4tLVxcbm1tL3BhZ2Vfb3duZXIuYz00MjU9dm9pZCBwYWdldHlwZWluZm9fc2hvd21peGVkY291bnRfcHJpbnQoc3RydWN0IHNlcV9maWxlICptLFxcbi0tXFxubW0vcGFnZV9vd25lci5jLTQ4NS1cXHRcXHRcXHRpZiAocGFnZWJsb2NrX210ICE9IHBhZ2VfbXQpIHtcXG5tbS9wYWdlX293bmVyLmM6NDg2OlxcdFxcdFxcdFxcdGlmIChpc19taWdyYXRlX2NtYShwYWdlYmxvY2tfbXQpKVxcbm1tL3BhZ2Vfb3duZXIuYy00ODctXFx0XFx0XFx0XFx0XFx0Y291bnRbTUlHUkFURV9NT1ZBQkxFXSsrO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNlQyMDoyMjoyMy45NzA4NTcwMzJaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODUyNDY2ODUzMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIE1lbW9yeSBDb21wYWN0aW9uIExvZ2ljKipcblxuT2theSwgc28gSSdtIGRpdmluZyBpbnRvIHRoaXMgY29kZSByZWxhdGVkIHRvIG1lbW9yeSBjb21wYWN0aW9uLiBJdCBzZWVtcyB0aGUgbWFpbiBmb2N1cyBvZiB0aGlzIHBhcnRpY3VsYXIgc2V0IG9mIGNoYW5nZXMgcmV2b2x2ZXMgYXJvdW5kIG9wdGltaXppbmcgaG93IHRoZSBzeXN0ZW0gaGFuZGxlcyBtZW1vcnkgZnJhZ21lbnRhdGlvbiwgcHJpbWFyaWx5IHdoZW4gZGVhbGluZyB3aXRoIGFsbG9jYXRpb25zIHRoYXQgcmVxdWlyZSBjb250aWd1b3VzIHBoeXNpY2FsIG1lbW9yeS4gVGhlIGBpc19taWdyYXRlX2NtYWAgZmxhZyBpcyB0aWVkIHRvIGBDT05GSUdfQ01BYCwgd2hpY2ggc3VnZ2VzdHMgdGhlcmUncyBzb21lIGludGVyYWN0aW9uIHdpdGggQ29udGlndW91cyBNZW1vcnkgQWxsb2NhdGlvbiwgYnV0IHRoYXQncyBub3QgdGhlIGNlbnRyYWwgcGllY2UsIGF0IGxlYXN0IG5vdCBpbml0aWFsbHkuIFRoZSBjcnVjaWFsIGFzcGVjdCBhcHBlYXJzIHRvIGJlIGBDT05GSUdfQ09NUEFDVElPTmAuXG5cblNwZWNpZmljYWxseSwgSSdtIGtleWluZyBpbiBvbiBgc3VpdGFibGVfbWlncmF0aW9uX3NvdXJjZWAgYmVjYXVzZSBpdCBoYXMgdGhlIGludGVyZXN0aW5nIGNvbmRpdGlvbmFsIGxvZ2ljIHJlZ2FyZGluZyBDTUEgcGFnZXMuIEl0IHN0YXRlcyB0aGF0IENNQSBwYWdlcyBjYW4gb25seSBiZSBhbGxvY2F0ZWQgaWYgYEFMTE9DX0NNQWAgaXMgc2V0LiBUaGlzIGFmZmVjdHMgdGhlIG1pZ3JhdGlvbiBwcm9jZXNzLCBidXQgbW9yZSBicm9hZGx5LCB0aGUgY29yZSBjaGFuZ2UgaXMgd2l0aGluIGBfX2FsbG9jX3BhZ2VzX2RpcmVjdF9jb21wYWN0YC4gTG9va2luZyBhdCB0aGUgY29kZSBmb3IgdGhhdCBmdW5jdGlvbiwgaXQgbG9va3MgbGlrZSBpdCBwcm9tb3RlcyB0aGUgY29tcGFjdGlvbiBvcmRlciB3aGVuIGBBTExPQ19OT0ZSQUdNRU5UYCBpcyBzZXQgYW5kIHRoZSBtaWdyYXRpb24gdHlwZSBpc24ndCBtb3ZhYmxlLiBUaGlzIHNlZW1zIHRvIGJlIHdoZXJlIHRoZSByZWFsIGNoYW5nZSBsaWVzOiBib29zdGluZyB0aGUgb3JkZXIgb2YgdGhlIGNvbXBhY3Rpb24gdG8gbW9yZSBhZ2dyZXNzaXZlbHkgY3JlYXRlIGxhcmdlciBjb250aWd1b3VzIGJsb2Nrcy5cblxuSSBuZWVkIHRvIG5haWwgZG93biBleGFjdGx5IHdoZXJlIHRvIGZvY3VzLiBMZXQncyBtYWtlIHN1cmUgSSdtIHplcm9pbmcgaW4gb24gdGhlIHJpZ2h0IGZ1bmN0aW9uczogYF9fYWxsb2NfcGFnZXNfZGlyZWN0X2NvbXBhY3RgLCBgX19hbGxvY19wYWdlc19kaXJlY3RfcmVjbGFpbWAsIGB0cnlfdG9fY29tcGFjdF9wYWdlc2AsIGBjb21wYWN0X3pvbmVfb3JkZXJgLCBgc3VpdGFibGVfbWlncmF0aW9uX3NvdXJjZWAsIGBmYXN0X2ZpbmRfbWlncmF0ZWJsb2NrYCwgYW5kIGBjb21wYWN0aW9uX2NhcHR1cmVgLlxuXG5BZnRlciBhIHF1aWNrIG1lbnRhbCByZXZpZXcsIGBfX2FsbG9jX3BhZ2VzX2RpcmVjdF9jb21wYWN0YCBhbmQgYF9fYWxsb2NfcGFnZXNfZGlyZWN0X3JlY2xhaW1gIGFyZSBwYXJ0IG9mIHRoZSBwYWdlIGFsbG9jYXRvcidzIHNsb3cgcGF0aCwgc28gdGhleSdyZSBpbXBvcnRhbnQuIGB0cnlfdG9fY29tcGFjdF9wYWdlc2Agc2VlbXMgdG8gYmUgYSBnb29kIGVudHJ5IHBvaW50IHRvIHRoZSBjb21wYWN0aW9uIGxvZ2ljLiBUaGUgb3RoZXJzIGFyZSBzdGF0aWMgb3Igc3RhdGljIGlubGluZSwgbWVhbmluZyB0aGV5IG1heSBiZSBtb3JlIGNvbnRhaW5lZC5cblxuV2FpdCBhIHNlY29uZC4gSXQgbG9va3MgbGlrZSBgX19hbGxvY19wYWdlc19kaXJlY3RfY29tcGFjdGAgaXMgc3RhdGljLiBUaGlzIG1lYW5zIGl0IGlzIG9ubHkgYWNjZXNzaWJsZSBmcm9tIHdpdGhpbiBgbW0vcGFnZV9hbGxvYy5jYC4gVGhpcyBjb3VsZCBiZSBhIHByb2JsZW0gaW4gdGVybXMgb2YgZGVidWdnaW5nIGFuZCB0cmFjaW5nIGJlY2F1c2UgSSBjYW4ndCBkaXJlY3RseSB0YXJnZXQgaXQuIGB0cnlfdG9fY29tcGFjdF9wYWdlc2Agb24gdGhlIG90aGVyIGhhbmQsIGlzIGV4cG9ydGVkLiBPa2F5LCBsZXQncyBoZWFkIG92ZXIgdG8gYG1tL2NvbXBhY3Rpb24uY2AgdG8gdW5kZXJzdGFuZCBgdHJ5X3RvX2NvbXBhY3RfcGFnZXNgIG1vcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0MDk4LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjkzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI2VDIwOjIyOjMyLjQ5NTUyNzc2NloiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjE0OTU0MTE4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInRyeV90b19jb21wYWN0X3BhZ2VzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL2NvbXBhY3Rpb24uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9jb21wYWN0aW9uLmM9Mjc5MT1zdGF0aWMgZW51bSBjb21wYWN0X3Jlc3VsdCBjb21wYWN0X3pvbmVfb3JkZXIoc3RydWN0IHpvbmUgKnpvbmUsIGludCBvcmRlcixcXG4tLVxcbm1tL2NvbXBhY3Rpb24uYy0yODMyLS8qKlxcbm1tL2NvbXBhY3Rpb24uYzoyODMzOiAqIHRyeV90b19jb21wYWN0X3BhZ2VzIC0gRGlyZWN0IGNvbXBhY3QgdG8gc2F0aXNmeSBhIGhpZ2gtb3JkZXIgYWxsb2NhdGlvblxcbm1tL2NvbXBhY3Rpb24uYy0yODM0LSAqIEBnZnBfbWFzazogVGhlIEdGUCBtYXNrIG9mIHRoZSBjdXJyZW50IGFsbG9jYXRpb25cXG4tLVxcbm1tL2NvbXBhY3Rpb24uYy0yODQyLSAqL1xcbm1tL2NvbXBhY3Rpb24uYzoyODQzOmVudW0gY29tcGFjdF9yZXN1bHQgdHJ5X3RvX2NvbXBhY3RfcGFnZXMoZ2ZwX3QgZ2ZwX21hc2ssIHVuc2lnbmVkIGludCBvcmRlcixcXG5tbS9jb21wYWN0aW9uLmMtMjg0NC1cXHRcXHR1bnNpZ25lZCBpbnQgYWxsb2NfZmxhZ3MsIGNvbnN0IHN0cnVjdCBhbGxvY19jb250ZXh0ICphYyxcXG4tLVxcbm1tL2NvbXBhY3Rpb24uYy0yODUzLVxcbm1tL2NvbXBhY3Rpb24uYzoyODU0OlxcdHRyYWNlX21tX2NvbXBhY3Rpb25fdHJ5X3RvX2NvbXBhY3RfcGFnZXMob3JkZXIsIGdmcF9tYXNrLCBwcmlvKTtcXG5tbS9jb21wYWN0aW9uLmMtMjg1NS1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjZUMjA6MjI6MzIuNzEwNDg3MTMzWiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ4ODA3MDU2NDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIFN5emthbGxlcidzIFBvdGVudGlhbCBmb3IgVGFyZ2V0aW5nIE1lbW9yeSBDb21wYWN0aW9uIEZ1bmN0aW9ucyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoZXNlIG1lbW9yeSBjb21wYWN0aW9uIGZ1bmN0aW9ucyBhbmQgaG93IHRoZXkgcmVsYXRlIHRvIGZ1enppbmcgd2l0aCBTeXprYWxsZXIuIEl0IGxvb2tzIGxpa2UgYHRyeV90b19jb21wYWN0X3BhZ2VzYCBpcyAqbm90KiBhIHN0YXRpYyBmdW5jdGlvbiwgd2hpbGUgYGNvbXBhY3Rfem9uZV9vcmRlcmAsIGBzdWl0YWJsZV9taWdyYXRpb25fc291cmNlYCwgYGZhc3RfZmluZF9taWdyYXRlYmxvY2tgLCBgX19hbGxvY19wYWdlc19kaXJlY3RfY29tcGFjdGAsIGFuZCBgX19hbGxvY19wYWdlc19kaXJlY3RfcmVjbGFpbWAgKmFyZSogc3RhdGljLiBUaGUgcXVlc3Rpb24gdGhhdCBpbW1lZGlhdGVseSBjb21lcyB0byBtaW5kLCBhcyBhbiBleHBlcnQgaW4gdGhpcyBhcmVhLCBpcyB3aGV0aGVyIFN5emthbGxlciBjYW4gZWZmZWN0aXZlbHkgdGFyZ2V0IHRoZXNlIHN0YXRpYyBmdW5jdGlvbnMuXG5cblN5emthbGxlciwgaW4gZ2VuZXJhbCwgd29ya3MgYnkgZnV6emluZyBzeXNjYWxscywgc28gdGhlIHNjb3BlIGlzIHRoZSBlbnRpcmUga2VybmVsLiBUaGUga2V5IGhlcmUgaXMgdGhlIGBGb2N1c1N5bWJvbHNgIGxpc3Q7IGl0IGd1aWRlcyB0aGUgZnV6emVyIHRvIHByaW9yaXRpemUgaW5wdXRzIHRoYXQgaGl0IHNwZWNpZmljIGZ1bmN0aW9ucy4gVGhhdCBzZWVtcyBsaWtlIGEgZ29vZCBhcHByb2FjaC4gVGhlIGdvb2QgbmV3cyBpcyB0aGF0IFN5emthbGxlciB1c2VzIGluc3RydWN0aW9uIGFkZHJlc3NlcyBmb3IgY292ZXJhZ2UsIHNvIGFzIGxvbmcgYXMgdGhlIHN0YXRpYyBmdW5jdGlvbnMgYXJlbid0IGNvbXBsZXRlbHkgaW5saW5lZCwgd2Ugc2hvdWxkIGJlIGFibGUgdG8gbWFwIHRoZW0gYW5kIHVzZSB0aGVtLlxuXG5Ob3csIGEgY3J1Y2lhbCBkZXRhaWwgdG8gdmVyaWZ5LiBJJ20gcHJldHR5IHN1cmUgYF9fYWxsb2NfcGFnZXNfZGlyZWN0X2NvbXBhY3RgIGlzICpub3QqIGlubGluZWQuIEhvd2V2ZXIsIEkgbmVlZCB0byBkb3VibGUtY2hlY2sgb24gYF9fYWxsb2NfcGFnZXNfZGlyZWN0X3JlY2xhaW1gLiBJdCdzIGZsYWdnZWQgYXMgYHN0YXRpYyBpbmxpbmVgIGluIHRoZSBwYXRjaC4gSSBuZWVkIHRvIGJlIHN1cmU7IGxldCdzIGNoZWNrIHRoZSBzb3VyY2UgZm9yIGNvbmZpcm1hdGlvbi4gVGhpcyB3aWxsIG1ha2Ugb3IgYnJlYWsgdGhlIGVmZmVjdGl2ZW5lc3Mgb2YgdGhlIHRhcmdldGVkIGZ1enppbmcgY2FtcGFpZ24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1NjA4LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTk1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI2VDIwOjIyOjM3LjU5MTE5NTY0N1oiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE1NzAyNDMzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl9fYWxsb2NfcGFnZXNfZGlyZWN0X3JlY2xhaW1cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vcGFnZV9hbGxvYy5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3BhZ2VfYWxsb2MuYz00NDU1PXN0YXRpYyBpbmxpbmUgc3RydWN0IHBhZ2UgKlxcbm1tL3BhZ2VfYWxsb2MuYzo0NDU2Ol9fYWxsb2NfcGFnZXNfZGlyZWN0X3JlY2xhaW0oZ2ZwX3QgZ2ZwX21hc2ssIHVuc2lnbmVkIGludCBvcmRlcixcXG5tbS9wYWdlX2FsbG9jLmMtNDQ1Ny1cXHRcXHR1bnNpZ25lZCBpbnQgYWxsb2NfZmxhZ3MsIGNvbnN0IHN0cnVjdCBhbGxvY19jb250ZXh0ICphYyxcXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYz00NzY4PV9fYWxsb2NfcGFnZXNfc2xvd3BhdGgoZ2ZwX3QgZ2ZwX21hc2ssIHVuc2lnbmVkIGludCBvcmRlcixcXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYy00OTE4LVxcdGlmICghY29tcGFjdF9maXJzdCkge1xcbm1tL3BhZ2VfYWxsb2MuYzo0OTE5OlxcdFxcdHBhZ2UgPSBfX2FsbG9jX3BhZ2VzX2RpcmVjdF9yZWNsYWltKGdmcF9tYXNrLCBvcmRlciwgYWxsb2NfZmxhZ3MsXFxubW0vcGFnZV9hbGxvYy5jLTQ5MjAtXFx0XFx0XFx0XFx0XFx0XFx0XFx0YWMsIFxcdTAwMjZkaWRfc29tZV9wcm9ncmVzcyk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI2VDIwOjIyOjM3LjcwNjkwMjE0WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM4NTYzOTg3MzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBzaXR1YXRpb24sIGdpdmVuIG15IGV4cGVydGlzZTpcblxuKipFeGFtaW5pbmcgTWVtb3J5IEFsbG9jYXRpb24gSW50ZXJuYWxzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhlc2UgbG93LWxldmVsIG1lbW9yeSBhbGxvY2F0aW9uIGZ1bmN0aW9ucy4gYF9fYWxsb2NfcGFnZXNfZGlyZWN0X3JlY2xhaW1gIGlzIGRlY2xhcmVkIGFzIGBzdGF0aWMgaW5saW5lYC4gVGhpcyBpcyBzaWduaWZpY2FudCBiZWNhdXNlIGl0IHN0cm9uZ2x5IHN1Z2dlc3RzIHRoYXQgdGhlIGNvbXBpbGVyIHdpbGwgbGlrZWx5IHRyeSB0byAqaW5saW5lKiB0aGlzIGZ1bmN0aW9uIGRpcmVjdGx5IGludG8gdGhlIGBfX2FsbG9jX3BhZ2VzX3Nsb3dwYXRoYCBmdW5jdGlvbi4gVGhhdCBtZWFucyB0aGUgY29kZSBmcm9tIGBfX2FsbG9jX3BhZ2VzX2RpcmVjdF9yZWNsYWltYCB3aWxsIGJlIG1lcmdlZCBkaXJlY3RseSBpbnRvIGBfX2FsbG9jX3BhZ2VzX3Nsb3dwYXRoYCB0byBwb3RlbnRpYWxseSBpbmNyZWFzZSBwZXJmb3JtYW5jZSBieSBlbGltaW5hdGluZyBhIGZ1bmN0aW9uIGNhbGwgb3ZlcmhlYWQuIEl0IGlzIGEgY29tbW9uIGNvbXBpbGVyIG9wdGltaXphdGlvbiB0ZWNobmlxdWUgdXNlZCB0byByZWR1Y2Ugb3ZlcmhlYWQuXG5cbk5vdywgYGNvbXBhY3Rpb25fY2FwdHVyZWAgaXMgYWxzbyBgc3RhdGljIGlubGluZWAuIFRoaXMgc3VnZ2VzdHMgdGhlIHNhbWUgaW5saW5pbmcgYmVoYXZpb3IgYXMgYmVmb3JlLiBUaGlzIGlzIGFub3RoZXIgYXJlYSB0byB3YXRjaCBvdXQgZm9yIG9wdGltaXphdGlvbnMsIGFzIHRoZSBgc3RhdGljIGlubGluZWAgZGVjbGFyYXRpb24gaXMgYSBjbHVlIHRvIGl0cyBpbnRlbmRlZCB1c2FnZS5cblxuRmluYWxseSwgYF9fYWxsb2NfcGFnZXNfZGlyZWN0X2NvbXBhY3RgIGlzIGRlY2xhcmVkIGFzIGBzdGF0aWNgLiAgVGhpcyBpcyBpbXBvcnRhbnQuIEEgYHN0YXRpY2AgZnVuY3Rpb24gaGFzIGludGVybmFsIGxpbmthZ2Ugb25seSBhbmQgaXMgbm90IHZpc2libGUgb3V0c2lkZSB0aGUgY3VycmVudCBjb21waWxhdGlvbiB1bml0LiBJdCB3b24ndCBiZSBpbmxpbmVkIGFuZCBpcyBvbmx5IHVzZWQgd2l0aGluIHRoZSBzb3VyY2UgZmlsZSBpdCdzIGRlZmluZWQgaW4uIFRoaXMgcHJvYmFibHkgbWVhbnMgaXQgcGVyZm9ybXMgYSBzcGVjaWZpYyBjb21wYWN0aW9uIHJvdXRpbmUgd2l0aGluIHRoaXMgc3BlY2lmaWMgYWxsb2NhdGlvbiBwYXRoLCBhbmQgdGhlcmUncyBubyBuZWVkIGZvciBpdCB0byBiZSBhY2Nlc3NpYmxlIGVsc2V3aGVyZSBpbiB0aGUga2VybmVsLiBUaGlzIGFsc28gbGV0cyB0aGUgY29tcGlsZXIgcGVyZm9ybSBtb3JlIGFnZ3Jlc3NpdmUgb3B0aW1pemF0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTYzODQsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yNlQyMDoyMjo0MS41NjMzMDI1MThaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExMDM4NjI0NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJfX2FsbG9jX3BhZ2VzX2RpcmVjdF9jb21wYWN0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL3BhZ2VfYWxsb2MuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9wYWdlX2FsbG9jLmM9NDE0MT1zdGF0aWMgc3RydWN0IHBhZ2UgKlxcbm1tL3BhZ2VfYWxsb2MuYzo0MTQyOl9fYWxsb2NfcGFnZXNfZGlyZWN0X2NvbXBhY3QoZ2ZwX3QgZ2ZwX21hc2ssIHVuc2lnbmVkIGludCBvcmRlcixcXG5tbS9wYWdlX2FsbG9jLmMtNDE0My1cXHRcXHR1bnNpZ25lZCBpbnQgYWxsb2NfZmxhZ3MsIGNvbnN0IHN0cnVjdCBhbGxvY19jb250ZXh0ICphYyxcXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYz00MzA3PXN0YXRpYyBpbmxpbmUgc3RydWN0IHBhZ2UgKlxcbm1tL3BhZ2VfYWxsb2MuYzo0MzA4Ol9fYWxsb2NfcGFnZXNfZGlyZWN0X2NvbXBhY3QoZ2ZwX3QgZ2ZwX21hc2ssIHVuc2lnbmVkIGludCBvcmRlcixcXG5tbS9wYWdlX2FsbG9jLmMtNDMwOS1cXHRcXHR1bnNpZ25lZCBpbnQgYWxsb2NfZmxhZ3MsIGNvbnN0IHN0cnVjdCBhbGxvY19jb250ZXh0ICphYyxcXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYz00NDU2PV9fYWxsb2NfcGFnZXNfZGlyZWN0X3JlY2xhaW0oZ2ZwX3QgZ2ZwX21hc2ssIHVuc2lnbmVkIGludCBvcmRlcixcXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYy00NDY0LVxcbm1tL3BhZ2VfYWxsb2MuYzo0NDY1OlxcdC8qIE1hdGNoIHRoZSBzbG93cGF0aCBjb21wYWN0aW9uIHByb21vdGlvbiBpbiBfX2FsbG9jX3BhZ2VzX2RpcmVjdF9jb21wYWN0ICovXFxubW0vcGFnZV9hbGxvYy5jLTQ0NjYtXFx0aWYgKChhbGxvY19mbGFncyBcXHUwMDI2IEFMTE9DX05PRlJBR01FTlQpIFxcdTAwMjZcXHUwMDI2IGFjLVxcdTAwM2VtaWdyYXRldHlwZSAhPSBNSUdSQVRFX01PVkFCTEUpXFxuLS1cXG5tbS9wYWdlX2FsbG9jLmM9NDc2OD1fX2FsbG9jX3BhZ2VzX3Nsb3dwYXRoKGdmcF90IGdmcF9tYXNrLCB1bnNpZ25lZCBpbnQgb3JkZXIsXFxuLS1cXG5tbS9wYWdlX2FsbG9jLmMtNDkyNS1cXHQvKiBUcnkgZGlyZWN0IGNvbXBhY3Rpb24gYW5kIHRoZW4gYWxsb2NhdGluZyAqL1xcbm1tL3BhZ2VfYWxsb2MuYzo0OTI2OlxcdHBhZ2UgPSBfX2FsbG9jX3BhZ2VzX2RpcmVjdF9jb21wYWN0KGdmcF9tYXNrLCBvcmRlciwgYWxsb2NfZmxhZ3MsIGFjLFxcbm1tL3BhZ2VfYWxsb2MuYy00OTI3LVxcdFxcdFxcdFxcdFxcdGNvbXBhY3RfcHJpb3JpdHksIFxcdTAwMjZjb21wYWN0X3Jlc3VsdCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI2VDIwOjIyOjQxLjY3MzY5MDU1MloiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NjgwNjE4NzQyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uXG5cbioqTXkgQW5hbHlzaXMgb2YgdGhlIERpcmVjdCBDb21wYWN0aW9uIFByb2Nlc3MqKlxuXG5SaWdodCwgc28gYF9fYWxsb2NfcGFnZXNfZGlyZWN0X2NvbXBhY3RgIGlzIGRlY2xhcmVkIGBzdGF0aWNgLCB3aGljaCBpbW1lZGlhdGVseSBuYXJyb3dzIHRoZSBzY29wZSBvZiB3aGVyZSBJIG5lZWQgdG8gZm9jdXMgbXkgYXR0ZW50aW9uLiBJdCBtZWFucyBJIG5lZWQgdG8gaWdub3JlIGl0cyBkaXJlY3QgY2FsbHMgb3V0c2lkZSBvZiB0aGUgZmlsZSBpdCdzIGRlZmluZWQgaW4uIFRoaXMgc3VnZ2VzdHMgYSBsb2NhbGl6ZWQgb3B0aW1pemF0aW9uIG9yIGEgaGVscGVyIGZ1bmN0aW9uIHRoYXTigJlzIG5vdCBpbnRlbmRlZCB0byBiZSBleHBvc2VkIHdpZGVseS4gVGh1cywgdGhlIHJlbGV2YW50IGNhbGxzIHRvIGZvY3VzIG9uIGFyZSB0aGUgZnVuY3Rpb25zIGl0IGNhbGxzLlxuXG5UaGVyZWZvcmUsIHRoZSBrZXkgZnVuY3Rpb25zIHRvIGludmVzdGlnYXRlIGZ1cnRoZXIgYXJlOiBgX19hbGxvY19wYWdlc19kaXJlY3RfY29tcGFjdGAsIG5hdHVyYWxseSwgdGhlbiBgdHJ5X3RvX2NvbXBhY3RfcGFnZXNgLCB3aGljaCBzZWVtcyB0byBiZSB0aGUgbG9naWNhbCBlbnRyeSBwb2ludCBmb3IgdGhlIGNvbXBhY3Rpb24gYXR0ZW1wdCwgZm9sbG93ZWQgYnkgdGhlIHpvbmUtbGV2ZWwgY29tcGFjdGlvbiBsb2dpYyBpbiBgY29tcGFjdF96b25lX29yZGVyYC4gSSBhbHNvIHdhbnQgdG8gZGl2ZSBpbnRvIHRoZSBzb3VyY2UvZGVzdGluYXRpb24gcGFnZSBzZWxlY3Rpb24sIGFuZCBpbiBwYXJ0aWN1bGFyIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBzeXN0ZW0gZGV0ZXJtaW5lcyBhIGBzdWl0YWJsZV9taWdyYXRpb25fc291cmNlYCBhbmQgZmluYWxseSBJIG5lZWQgdG8ga25vdyB0aGUgZmFzdCBwYXRoIGZvciBhbGxvY2F0aW9uIHRoYXQgaW52b2x2ZXMgYGZhc3RfZmluZF9taWdyYXRlYmxvY2tgLlxuXG5JIHRoaW5rIGBmYXN0X2ZpbmRfbWlncmF0ZWJsb2NrYCBpcyB0aGUgb25lIHRvIGluc3BlY3QgZmlyc3QuIEknbGwgc3RhcnQgd2l0aCB0aGlzIG9uZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTcyMTAsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yNlQyMDoyMjo0Ni4zNTQzMTE4NTRaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgyNDAxNjQ0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImZhc3RfZmluZF9taWdyYXRlYmxvY2tcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vY29tcGFjdGlvbi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2NvbXBhY3Rpb24uYz0xOTQ0PXJlaW5pdF9taWdyYXRlX3BmbihzdHJ1Y3QgY29tcGFjdF9jb250cm9sICpjYylcXG4tLVxcbm1tL2NvbXBhY3Rpb24uYy0xOTU5LSAqL1xcbm1tL2NvbXBhY3Rpb24uYzoxOTYwOnN0YXRpYyB1bnNpZ25lZCBsb25nIGZhc3RfZmluZF9taWdyYXRlYmxvY2soc3RydWN0IGNvbXBhY3RfY29udHJvbCAqY2MpXFxubW0vY29tcGFjdGlvbi5jLTE5NjEte1xcbi0tXFxubW0vY29tcGFjdGlvbi5jPTIwODI9c3RhdGljIGlzb2xhdGVfbWlncmF0ZV90IGlzb2xhdGVfbWlncmF0ZXBhZ2VzKHN0cnVjdCBjb21wYWN0X2NvbnRyb2wgKmNjKVxcbi0tXFxubW0vY29tcGFjdGlvbi5jLTIwOTctXFx0ICovXFxubW0vY29tcGFjdGlvbi5jOjIwOTg6XFx0bG93X3BmbiA9IGZhc3RfZmluZF9taWdyYXRlYmxvY2soY2MpO1xcbm1tL2NvbXBhY3Rpb24uYy0yMDk5LVxcdGJsb2NrX3N0YXJ0X3BmbiA9IHBhZ2VibG9ja19zdGFydF9wZm4obG93X3Bmbik7XFxuLS1cXG5tbS9jb21wYWN0aW9uLmMtMjEwMy1cXHQvKlxcbm1tL2NvbXBhY3Rpb24uYzoyMTA0OlxcdCAqIGZhc3RfZmluZF9taWdyYXRlYmxvY2soKSBoYXMgYWxyZWFkeSBlbnN1cmVkIHRoZSBwYWdlYmxvY2sgaXMgbm90XFxubW0vY29tcGFjdGlvbi5jLTIxMDUtXFx0ICogc2V0IHdpdGggYSBza2lwcGVkIGZsYWcsIHNvIHRvIGF2b2lkIHRoZSBpc29sYXRpb25fc3VpdGFibGUgY2hlY2tcXG4tLVxcbm1tL2NvbXBhY3Rpb24uYz0yNTUzPWNvbXBhY3Rfem9uZShzdHJ1Y3QgY29tcGFjdF9jb250cm9sICpjYywgc3RydWN0IGNhcHR1cmVfY29udHJvbCAqY2FwYylcXG4tLVxcbm1tL2NvbXBhY3Rpb24uYy0yNzA5LVxcdFxcdFxcdCAqIHdpdGhpbiB0aGUgcGFnZWJsb2NrX29yZGVyLWFsaWduZWQgYmxvY2sgYW5kXFxubW0vY29tcGFjdGlvbi5jOjI3MTA6XFx0XFx0XFx0ICogZmFzdF9maW5kX21pZ3JhdGVibG9jayBtYXkgYmUgdXNlZCB0aGVuIHNjYW4gdGhlXFxubW0vY29tcGFjdGlvbi5jLTI3MTEtXFx0XFx0XFx0ICogcmVtYWluZGVyIG9mIHRoZSBwYWdlYmxvY2suIFRoaXMgd2lsbCBtYXJrIHRoZVxcbi0tXFxubW0vY29tcGFjdGlvbi5jLTI3MTQtXFx0XFx0XFx0ICogZm9yIHRoZSByZXF1ZXN0IGJ1dCBhdm9pZCBsb29wcyBkdWUgdG9cXG5tbS9jb21wYWN0aW9uLmM6MjcxNTpcXHRcXHRcXHQgKiBmYXN0X2ZpbmRfbWlncmF0ZWJsb2NrIHJldmlzaXRpbmcgYmxvY2tzIHRoYXQgd2VyZVxcbm1tL2NvbXBhY3Rpb24uYy0yNzE2LVxcdFxcdFxcdCAqIHJlY2VudGx5IHBhcnRpYWxseSBzY2FubmVkLlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNlQyMDoyMjo0Ni40MzY3MjE2OThaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzU2ODMzMjg2NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgTWVtb3J5IENvbXBhY3Rpb24gU3ltYm9sIFVzYWdlKipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byBob3cgbWVtb3J5IGNvbXBhY3Rpb24gd29ya3MsIGFuZCB0aGUgZmlyc3QgdGhpbmcgSSdtIG5vdGluZyBpcyB0aGF0IGBmYXN0X2ZpbmRfbWlncmF0ZWJsb2NrYCAqaXMqIGluZGVlZCBhIHN0YXRpYyBmdW5jdGlvbi4gVGhhdCBoZWxwcy4gR2l2ZW4gdGhhdCwgbXkgd29ya2luZyBoeXBvdGhlc2lzIGZvciB0aGUga2V5IHN5bWJvbHMgdXNlZCBpbiB0aGUgZm9jdXMgb2YgdGhlIHByb2Nlc3Mgc2hvdWxkIGJlOlxuXG4qICAgYF9fYWxsb2NfcGFnZXNfZGlyZWN0X2NvbXBhY3RgXG4qICAgYHRyeV90b19jb21wYWN0X3BhZ2VzYFxuKiAgIGBjb21wYWN0X3pvbmVfb3JkZXJgXG4qICAgYHN1aXRhYmxlX21pZ3JhdGlvbl9zb3VyY2VgXG4qICAgYGZhc3RfZmluZF9taWdyYXRlYmxvY2tgXG5cbkJ1dCB3YWl0LCBJIG5lZWQgdG8gYmUgY2FyZWZ1bCBoZXJlLiBMb29raW5nIGFnYWluLCBgX19hbGxvY19wYWdlc19kaXJlY3RfcmVjbGFpbWAgaXMgZGVmaW5lZCBhcyBgc3RhdGljIGlubGluZWAuIFJpZ2h0LCBzbyBpdCB3b24ndCBiZSBhIHVuaXF1ZSBzeW1ib2wgaW4gdGhlIGZpbmFsIGNvbXBpbGVkIGNvZGUuIEhtbSwgdGhhdCBjaGFuZ2VzIHRoaW5ncy4gSG93ZXZlciwgYF9fcGVyZm9ybV9yZWNsYWltYCAqbWlnaHQqIHN0aWxsIGJlLiBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQuIExldCBtZSBxdWlja2x5IGRvdWJsZS1jaGVjayB0aGUgZGVmaW5pdGlvbiBhbmQgdXNhZ2Ugb2YgYF9fcGVyZm9ybV9yZWNsYWltYCB0byBiZSBjZXJ0YWluLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODA0MywiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yNlQyMDoyMjo1MC4wMDUwNTY4MDRaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExMDYyMjA1NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJfX3BlcmZvcm1fcmVjbGFpbVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9wYWdlX2FsbG9jLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vcGFnZV9hbGxvYy5jPTQ0Mjk9c3RhdGljIHVuc2lnbmVkIGxvbmdcXG5tbS9wYWdlX2FsbG9jLmM6NDQzMDpfX3BlcmZvcm1fcmVjbGFpbShnZnBfdCBnZnBfbWFzaywgdW5zaWduZWQgaW50IG9yZGVyLFxcbm1tL3BhZ2VfYWxsb2MuYy00NDMxLVxcdFxcdFxcdFxcdFxcdGNvbnN0IHN0cnVjdCBhbGxvY19jb250ZXh0ICphYylcXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYz00NDU2PV9fYWxsb2NfcGFnZXNfZGlyZWN0X3JlY2xhaW0oZ2ZwX3QgZ2ZwX21hc2ssIHVuc2lnbmVkIGludCBvcmRlcixcXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYy00NDY5LVxcdHBzaV9tZW1zdGFsbF9lbnRlcihcXHUwMDI2cGZsYWdzKTtcXG5tbS9wYWdlX2FsbG9jLmM6NDQ3MDpcXHQqZGlkX3NvbWVfcHJvZ3Jlc3MgPSBfX3BlcmZvcm1fcmVjbGFpbShnZnBfbWFzaywgcmVjbGFpbV9vcmRlciwgYWMpO1xcbm1tL3BhZ2VfYWxsb2MuYy00NDcxLVxcdGlmICh1bmxpa2VseSghKCpkaWRfc29tZV9wcm9ncmVzcykpKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNlQyMDoyMjo1MC4xMTU2ODI3N1oiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4NDgwNDA3MzMzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBNZW1vcnkgQ29tcGFjdGlvbiBQYXRjaCoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgaW50ZXJlc3RpbmcuIFdoaWxlIGBfX3BlcmZvcm1fcmVjbGFpbWAgaXRzZWxmIGlzbid0IGRpcmVjdGx5IHRvdWNoZWQsIHRoZSBpbXBvcnRhbnQgY2hhbmdlIHNlZW1zIHRvIGJlIGluIGBfX2FsbG9jX3BhZ2VzX2RpcmVjdF9yZWNsYWltYCwgd2hpY2gsIGR1ZSB0byBiZWluZyBpbmxpbmVkLCBhY3R1YWxseSBtZWFucyB0aGUgbW9kaWZpY2F0aW9uIGlzIGhhcHBlbmluZyB3aXRoaW4gYF9fYWxsb2NfcGFnZXNfc2xvd3BhdGhgLiBJIGNvdWxkIHRyeSBmdXp6aW5nIHRoYXQgZnVuY3Rpb24gc2luY2UgaXQgY29udGFpbnMgdGhlIGxvZ2ljIGZvciBtZW1vcnkgYWxsb2NhdGlvbiBmYWlsdXJlcyBhbmQgaXQncyBhZmZlY3RlZCwgYnV0IHRoYXQncyBhICp2ZXJ5KiBob3QgcGF0aC4gRm9jdXNpbmcgb24gdGhlIGNvbXBhY3Rpb24gZnVuY3Rpb25zIHNlZW1zIG1vcmUgdGFyZ2V0ZWQgYW5kIHBvdGVudGlhbGx5IG1vcmUgZnJ1aXRmdWwuXG5cblRoZSBmaXJzdCB0aGluZyBJIG5lZWRlZCB0byBjb25maXJtIHdhcyB0aGUgY29uZmlndXJhdGlvbiByZXF1aXJlbWVudHMuIEl0IGxvb2tzIGxpa2UgYENPTkZJR19DT01QQUNUSU9OYCBpcyB0aGUgb25seSBvbmUuIEl0J3MgdXN1YWxseSBlbmFibGVkLCBidXQgaXQncyBhbHdheXMgZ29vZCB0byBiZSBleHBsaWNpdC5cblxuTGV0J3MgYnJlYWsgZG93biB0aGUgbG9naWMuIFRoZSBjb3JlIG9mIHRoZSBwYXRjaCByZXZvbHZlcyBhcm91bmQgbW9kaWZpY2F0aW9ucyB0byBob3cgZGlyZWN0IGNvbXBhY3Rpb24gYW5kIHJlY2xhaW0gaGFuZGxlIHBhZ2UgY2FwdHVyZSBhbmQgY29tcGFjdGlvbiBvcmRlcnMsIHNwZWNpZmljYWxseSBwcm9tb3RpbmcgdGhlIGNvbXBhY3Rpb24gb3JkZXIgdG8gYHBhZ2VibG9ja19vcmRlcmAuIFRoaXMgYWltcyB0byByZWR1Y2UgZnJhZ21lbnRhdGlvbiBkdXJpbmcgaGlnaGVyLW9yZGVyIGFsbG9jYXRpb25zIGFuZCB1bmRlciBtZW1vcnkgcHJlc3N1cmUuIFRoYXQgbWFrZXMgc2Vuc2UsIHRoaXMgaXMgcmlnaHQgaW4gdGhlIGhlYXJ0IG9mIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYy5cblxuRG91YmxlLWNoZWNraW5nIGZvciBhbnkgb3RoZXIgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMsIGl0IGxvb2tzIGxpa2UgYEFMTE9DX05PRlJBR01FTlRgIGlzIGEgZmxhZywgYE1JR1JBVEVfTU9WQUJMRWAgaXMgYSBtaWdyYXRldHlwZSwgYW5kIGBwYWdlYmxvY2tfb3JkZXJgIGlzIGEgbWFjcm8vdmFyaWFibGUuIEFuZCBgdHJ5X3RvX2NvbXBhY3RfcGFnZXNgIGlzIHRoZSBtYWluIGVudHJ5IHBvaW50IHRvIGl0IGFsbC5cblxuR2l2ZW4gdGhpcyBpcyBnZW5lcmljIE1NIGNvZGUsIHRoZXJlIGFyZW4ndCBhbnkgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIGNvbmZpZ3VyYXRpb24gY29uc2lkZXJhdGlvbnMuIFRoZXJlZm9yZSwgYEVuYWJsZUNvbmZpZ3NgIHNob3VsZCBpbmRlZWQgYmUgYFtcIkNPTVBBQ1RJT05cIl1gLlxuXG5Ob3csIGZvciBgRm9jdXNTeW1ib2xzYCwgSSd2ZSBpZGVudGlmaWVkIHNldmVyYWwga2V5IGZ1bmN0aW9uczpcblxuKiAgIGBfX2FsbG9jX3BhZ2VzX2RpcmVjdF9jb21wYWN0YCAtIFNpbmNlIHRoaXMgZnVuY3Rpb24gaGFzIFwiZGlyZWN0XCIgaW4gaXRzIG5hbWUsIGl0IHNvdW5kcyBnb29kIHRvIHN0YXJ0IHdpdGguXG4qICAgYHRyeV90b19jb21wYWN0X3BhZ2VzYCAtIFRoaXMgc2VlbXMgdG8gYmUgdGhlIG1haW4gZW50cnkgcG9pbnQuXG4qICAgYGNvbXBhY3Rfem9uZV9vcmRlcmAgLSBMaWtlbHkgaW52b2x2ZWQgaW4gZGV0ZXJtaW5pbmcgdGhlIGNvbXBhY3Rpb24gb3JkZXIuXG4qICAgYHN1aXRhYmxlX21pZ3JhdGlvbl9zb3VyY2VgIC0gUGFydCBvZiB0aGUgcGFnZSBtaWdyYXRpb24gcHJvY2Vzcy5cbiogICBgZmFzdF9maW5kX21pZ3JhdGVibG9ja2AgLSBQb3RlbnRpYWxseSByZWxhdGVkIHRvIGZpbmRpbmcgYmxvY2tzIGZvciBtaWdyYXRpb24uXG5cbkkgbmVlZCB0byBjb25maXJtIGlmIHRoZXNlIGZ1bmN0aW9ucyBhcmUgaW5saW5lLiBJJ3ZlIG5vdyB2ZXJpZmllZCB0aGF0IGBfX2FsbG9jX3BhZ2VzX2RpcmVjdF9jb21wYWN0YCAoc3RydWN0IHBhZ2VcXCopLCBgY29tcGFjdF96b25lX29yZGVyYCAoZW51bSksIGBzdWl0YWJsZV9taWdyYXRpb25fc291cmNlYCAoYm9vbCksIGFuZCBgZmFzdF9maW5kX21pZ3JhdGVibG9ja2AgKHVuc2lnbmVkIGxvbmcpIGFyZSBhbGwgc3RhdGljIGFuZCBub3QgbWFya2VkIGFzIGlubGluZSwgd2hpY2ggaXMgZ29vZCBmb3IgdGFyZ2V0ZWQgZnV6emluZy5cblxuT25lIGZpbmFsIGNoZWNrLCBpcyBgdHJ5X3RvX2NvbXBhY3RfcGFnZXNgIGV4cG9ydGVkPyBJIHNob3VsZCB2ZXJpZnkgdGhhdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTg2NDMsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjZUMjA6MjI6NTguNTk2MDkxNzQzWiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MjMzODQ1MywiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiRVhQT1JUX1NZTUJPTC4qdHJ5X3RvX2NvbXBhY3RfcGFnZXNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNlQyMDoyMjo1OC42Njg0Mzg1OTZaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzg4NzY2OTY1MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHVuZGVyc3RhbmRpbmcsIHBsYXlpbmcgdGhlIHJvbGUgb2YgYW4gZXhwZXJ0OlxuXG4qKkFuYWx5emluZyB0aGUgYGNvbXBhY3Rpb25gIEZ1bmN0aW9uIGluIHRoZSBLZXJuZWwgTWVtb3J5IE1hbmFnZW1lbnQgQ29kZSoqXG5cbkFscmlnaHQsIHNvIHRoZSBgY29tcGFjdGlvbmAgZnVuY3Rpb24gaXMgaW4gYG1tL2NvbXBhY3Rpb24uY2AsIGJ1dCBpdCdzICpub3QqIGV4cG9ydGVkIGFzIGEgbW9kdWxlIGZ1bmN0aW9uLiBGaW5lLCBubyBiaWcgZGVhbCwgaXQncyBnbG9iYWwgKGJ1dCBub24tc3RhdGljKSwgd2hpY2ggaXMgdG90YWxseSBhY2NlcHRhYmxlIGZvciBob3cgc3l6a2FsbGVyIG9wZXJhdGVzLiBJdCdzIG5vdCBhIHByb2JsZW0uXG5cbk5vdywgSSBuZWVkIHRvIGxvb2sgYXQgYGNvbXBhY3Rpb25fY2FwdHVyZWAuIEl0IGxvb2tzIGxpa2UgaXQncyBhIGBzdGF0aWMgaW5saW5lYCBmdW5jdGlvbi4gVGhlIGtleSBoZXJlIGlzIHRoZSBgaW5saW5lYC4gU28sIG15IGltbWVkaWF0ZSB0aG91Z2h0IGlzOiB0aGlzIHRoaW5nJ3MgYmVlbiAqaW5saW5lZCogd2hlcmV2ZXIgaXQncyB1c2VkLiBUaGlzIG1lYW5zIEkgbmVlZCB0byB0cmFjZSB0aGUgY2FsbGluZyBjb250ZXh0IGJ5IGNoZWNraW5nIHdoZXJlIGl0IGlzIGNhbGxlZCFcblxuXG4iLCJJbnB1dFRva2VucyI6MTk4MjIsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yNlQyMDoyMzowMi41NTYxMTAzMzlaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU0NDc1NzEzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbXBhY3Rpb25fY2FwdHVyZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9wYWdlX2FsbG9jLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vcGFnZV9hbGxvYy5jPTcyNz1zdGF0aWMgaW5saW5lIGJvb2xcXG5tbS9wYWdlX2FsbG9jLmM6NzI4OmNvbXBhY3Rpb25fY2FwdHVyZShzdHJ1Y3QgY2FwdHVyZV9jb250cm9sICpjYXBjLCBzdHJ1Y3QgcGFnZSAqcGFnZSxcXG5tbS9wYWdlX2FsbG9jLmMtNzI5LVxcdFxcdCAgIGludCBvcmRlciwgaW50IG1pZ3JhdGV0eXBlKVxcbi0tXFxubW0vcGFnZV9hbGxvYy5jPTc2ND1zdGF0aWMgaW5saW5lIGJvb2xcXG5tbS9wYWdlX2FsbG9jLmM6NzY1OmNvbXBhY3Rpb25fY2FwdHVyZShzdHJ1Y3QgY2FwdHVyZV9jb250cm9sICpjYXBjLCBzdHJ1Y3QgcGFnZSAqcGFnZSxcXG5tbS9wYWdlX2FsbG9jLmMtNzY2LVxcdFxcdCAgIGludCBvcmRlciwgaW50IG1pZ3JhdGV0eXBlKVxcbi0tXFxubW0vcGFnZV9hbGxvYy5jPTkzNj1zdGF0aWMgaW5saW5lIHZvaWQgX19mcmVlX29uZV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlLFxcbi0tXFxubW0vcGFnZV9hbGxvYy5jLTk1OC1cXG5tbS9wYWdlX2FsbG9jLmM6OTU5OlxcdFxcdGlmIChjb21wYWN0aW9uX2NhcHR1cmUoY2FwYywgcGFnZSwgb3JkZXIsIG1pZ3JhdGV0eXBlKSkge1xcbm1tL3BhZ2VfYWxsb2MuYy05NjAtXFx0XFx0XFx0YWNjb3VudF9mcmVlcGFnZXMoem9uZSwgLSgxIFxcdTAwM2NcXHUwMDNjIG9yZGVyKSwgbWlncmF0ZXR5cGUpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNlQyMDoyMzowMi42MTA1OTAyNzJaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzIzNDM2NTIxOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgTWVtb3J5IENvbXBhY3Rpb24gUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGJlZW4gZGlnZ2luZyBpbnRvIHRoaXMgcGF0Y2guIFRoZSBrZXkgdGhpbmcgSSdtIHNlZWluZyBpcyB0aGF0IGl0J3MgYWxsIGFib3V0IG1lbW9yeSBjb21wYWN0aW9uIGFuZCBhbGxvY2F0aW9uLCBhbmQgaG93IHRoZXkgaW50ZXJhY3QuIFNwZWNpZmljYWxseSwgaXQncyBtYWtpbmcgc29tZSBjaGFuZ2VzIHRvIGRpcmVjdCBjb21wYWN0aW9uIGFuZCByZWNsYWltLCBmb2N1c2luZyBvbiBob3cgdGhleSBoYW5kbGUgcGFnZSBjYXB0dXJlIGFuZCBjb21wYWN0aW9uIG9yZGVycy4gVGhlIGdvYWwgc2VlbXMgdG8gYmUgdG8gaW1wcm92ZSBtZW1vcnkgbWFuYWdlbWVudCBieSBwcm9tb3RpbmcgdGhlIGNvbXBhY3Rpb24gb3JkZXIgdG8gYHBhZ2VibG9ja19vcmRlcmAgdW5kZXIgY2VydGFpbiBhbGxvY2F0aW9uIHNjZW5hcmlvcyB0byByZWR1Y2UgZnJhZ21lbnRhdGlvbi5cblxuVGhlIGltcG9ydGFudCB0aGluZyBpcyB0aGF0IGBfX2ZyZWVfb25lX3BhZ2VgIGlzIGJlaW5nIGNhbGxlZCwgd2hpY2ggaXMgYSBob3QgcGF0aCwgYW5kIHdlIGRvbid0IHdhbnQgdG8gaW5jbHVkZSB0aGlzIGluIGBGb2N1c1N5bWJvbHNgLlxuXG5TbywgdGhlIGNyaXRpY2FsIGZ1bmN0aW9ucyB0byBmb2N1cyBvbiBhcmU6XG5cbiogICBgX19hbGxvY19wYWdlc19kaXJlY3RfY29tcGFjdGBcbiogICBgdHJ5X3RvX2NvbXBhY3RfcGFnZXNgXG4qICAgYGNvbXBhY3Rfem9uZV9vcmRlcmBcbiogICBgc3VpdGFibGVfbWlncmF0aW9uX3NvdXJjZWBcbiogICBgZmFzdF9maW5kX21pZ3JhdGVibG9ja2BcblxuSSB3ZW50IGJhY2sgYW5kIGNoZWNrZWQgaWYgYW55IG90aGVyIGZ1bmN0aW9ucyB3ZXJlIG1vZGlmaWVkLiBJIGZvdW5kIGB0YXNrX2NhcGNgIGJ1dCBzaW5jZSB0aGF0J3MgaW5saW5lIGl0J3Mgbm90IGEgbWFqb3IgY29uY2Vybi5cblxuVGhpbmtpbmcgaXQgdGhyb3VnaCwgdGhlIHBhdGNoIGlzIHRvdWNoaW5nIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQg4oCTIGRpcmVjdCBjb21wYWN0aW9uLCByZWNsYWltLCBhbGxvY2F0aW9uIOKAkyBhbmQgdGhhdCdzIGV4YWN0bHkgdGhlIGtpbmQgb2YgdGhpbmcgd2Ugd2FudCB0byBmdXp6LiBUaGUgc2NlbmFyaW9zIGl0IHRhcmdldHMgYXJlIHRob3NlIHRoYXQgaW52b2x2ZSBoaWdoZXItb3JkZXIgbWVtb3J5IGFsbG9jYXRpb25zIGFuZCBtZW1vcnkgcHJlc3N1cmUuIEl0IHNlZW1zIGZ1bmN0aW9uYWwgYW5kIGRlZmluaXRlbHkgd29ydGh5IG9mIGZ1enppbmcuXG5cblRoZSByZWxldmFudCBjb25maWcgaXMgYENPTVBBQ1RJT05gLCBhbmQgdGhlcmUncyBhbiBvcHRpb25hbCBkZXBlbmRlbmNlIG9uIGBDT05GSUdfQ01BYCB3aXRoaW4gYHN1aXRhYmxlX21pZ3JhdGlvbl9zb3VyY2VgLCBidXQgYENPTVBBQ1RJT05gIGlzIHRoZSBwcmltYXJ5IG9uZSwgc28gdGhhdCdzIHdoYXQgSSdsbCBsaXN0LlxuXG5JIHRoaW5rIEkndmUgZ290IGEgc29saWQgZ3Jhc3Agb24gdGhpcyBub3cuIEknbGwgbW92ZSBvbiB0byBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDM2MywiT3V0cHV0VG9rZW5zIjoxNTAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NDMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjZUMjA6MjM6MDkuODQ0OTU4Mzk5WiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzA3NDI0NTMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkNPTVBBQ1RJT05cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJfX2FsbG9jX3BhZ2VzX2RpcmVjdF9jb21wYWN0XCIsXG4gICAgXCJ0cnlfdG9fY29tcGFjdF9wYWdlc1wiLFxuICAgIFwiY29tcGFjdF96b25lX29yZGVyXCIsXG4gICAgXCJzdWl0YWJsZV9taWdyYXRpb25fc291cmNlXCIsXG4gICAgXCJmYXN0X2ZpbmRfbWlncmF0ZWJsb2NrXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgbWVtb3J5IGNvbXBhY3Rpb24gYW5kIGFsbG9jYXRpb24gbG9naWMsIHNwZWNpZmljYWxseSBob3cgZGlyZWN0IGNvbXBhY3Rpb24gYW5kIHJlY2xhaW0gaGFuZGxlIHBhZ2UgY2FwdHVyZSBhbmQgY29tcGFjdGlvbiBvcmRlcnMuIEl0IHByb21vdGVzIHRoZSBjb21wYWN0aW9uIG9yZGVyIHRvIGBwYWdlYmxvY2tfb3JkZXJgIGZvciBjZXJ0YWluIGFsbG9jYXRpb25zIHRvIHByZXZlbnQgZnJhZ21lbnRhdGlvbi4gVGhpcyBpcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljIHRoYXQgaXMgcmVhY2hhYmxlIGR1cmluZyBoaWdoLW9yZGVyIG1lbW9yeSBhbGxvY2F0aW9ucyBhbmQgbWVtb3J5IHByZXNzdXJlLiBJdCBpcyBmdW5jdGlvbmFsIGFuZCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkNPTVBBQ1RJT05cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJfX2FsbG9jX3BhZ2VzX2RpcmVjdF9jb21wYWN0XCIsXG4gICAgXCJ0cnlfdG9fY29tcGFjdF9wYWdlc1wiLFxuICAgIFwiY29tcGFjdF96b25lX29yZGVyXCIsXG4gICAgXCJzdWl0YWJsZV9taWdyYXRpb25fc291cmNlXCIsXG4gICAgXCJmYXN0X2ZpbmRfbWlncmF0ZWJsb2NrXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgbWVtb3J5IGNvbXBhY3Rpb24gYW5kIGFsbG9jYXRpb24gbG9naWMsIHNwZWNpZmljYWxseSBob3cgZGlyZWN0IGNvbXBhY3Rpb24gYW5kIHJlY2xhaW0gaGFuZGxlIHBhZ2UgY2FwdHVyZSBhbmQgY29tcGFjdGlvbiBvcmRlcnMuIEl0IHByb21vdGVzIHRoZSBjb21wYWN0aW9uIG9yZGVyIHRvIGBwYWdlYmxvY2tfb3JkZXJgIGZvciBjZXJ0YWluIGFsbG9jYXRpb25zIHRvIHByZXZlbnQgZnJhZ21lbnRhdGlvbi4gVGhpcyBpcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljIHRoYXQgaXMgcmVhY2hhYmxlIGR1cmluZyBoaWdoLW9yZGVyIG1lbW9yeSBhbGxvY2F0aW9ucyBhbmQgbWVtb3J5IHByZXNzdXJlLiBJdCBpcyBmdW5jdGlvbmFsIGFuZCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow4nr6j[0].run-triage(0) Phase: Succeeded StartedAt: 2026-06-26 20:13:59 +0000 UTC FinishedAt: 2026-06-26 20:23:11 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "189ce3c81f8188fb737d59a8a8784f074e830238", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "COMPACTION" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "189ce3c81f8188fb737d59a8a8784f074e830238", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "COMPACTION" ], "series_id": "216ebe58-31a8-43cd-82f6-6478e1894eff" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "__alloc_pages_direct_compact", "try_to_compact_pages", "compact_zone_order", "suitable_migration_source", "fast_find_migrateblock" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDIwOjIxPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0NPTVBBQ1RJT04mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtfX2FsbG9jX3BhZ2VzX2RpcmVjdF9jb21wYWN0JiMzNDssCiAgICAmIzM0O3RyeV90b19jb21wYWN0X3BhZ2VzJiMzNDssCiAgICAmIzM0O2NvbXBhY3Rfem9uZV9vcmRlciYjMzQ7LAogICAgJiMzNDtzdWl0YWJsZV9taWdyYXRpb25fc291cmNlJiMzNDssCiAgICAmIzM0O2Zhc3RfZmluZF9taWdyYXRlYmxvY2smIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgbWVtb3J5IGNvbXBhY3Rpb24gYW5kIGFsbG9jYXRpb24gbG9naWMsIHNwZWNpZmljYWxseSBob3cgZGlyZWN0IGNvbXBhY3Rpb24gYW5kIHJlY2xhaW0gaGFuZGxlIHBhZ2UgY2FwdHVyZSBhbmQgY29tcGFjdGlvbiBvcmRlcnMuIEl0IHByb21vdGVzIHRoZSBjb21wYWN0aW9uIG9yZGVyIHRvIGBwYWdlYmxvY2tfb3JkZXJgIGZvciBjZXJ0YWluIGFsbG9jYXRpb25zIHRvIHByZXZlbnQgZnJhZ21lbnRhdGlvbi4gVGhpcyBpcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljIHRoYXQgaXMgcmVhY2hhYmxlIGR1cmluZyBoaWdoLW9yZGVyIG1lbW9yeSBhbGxvY2F0aW9ucyBhbmQgbWVtb3J5IHByZXNzdXJlLiBJdCBpcyBmdW5jdGlvbmFsIGFuZCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDIwOjIxPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgMTZiYmM0ZTk5ZTFhZDZlYzcxMGMwOTk4MWRkMGQwMjZkMzJmYmExNVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgSnVuIDI2IDIwOjIxOjUyIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvY29tcGFjdGlvbi5oIGIvaW5jbHVkZS9saW51eC9jb21wYWN0aW9uLmhcbmluZGV4IGYyOWVmMDY1MzU0NmVkLi42NmEyZjcwZTllMDE5ZCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvY29tcGFjdGlvbi5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2NvbXBhY3Rpb24uaFxuQEAgLTU4LDYgJiM0Mzs1OCw3IEBAIGVudW0gY29tcGFjdF9yZXN1bHQge1xuIH07XG4gXG4gc3RydWN0IGFsbG9jX2NvbnRleHQ7IC8qIGluIG1tL2ludGVybmFsLmggKi9cbiYjNDM7c3RydWN0IGNhcHR1cmVfY29udHJvbDsgLyogaW4gbW0vaW50ZXJuYWwuaCAqL1xuIFxuIC8qXG4gICogTnVtYmVyIG9mIGZyZWUgb3JkZXItMCBwYWdlcyB0aGF0IHNob3VsZCBiZSBhdmFpbGFibGUgYWJvdmUgZ2l2ZW4gd2F0ZXJtYXJrXG5AQCAtOTIsNyAmIzQzOzkzLDcgQEAgZXh0ZXJuIGludCBmcmFnbWVudGF0aW9uX2luZGV4KHN0cnVjdCB6b25lICp6b25lLCB1bnNpZ25lZCBpbnQgb3JkZXIpO1xuIGV4dGVybiBlbnVtIGNvbXBhY3RfcmVzdWx0IHRyeV90b19jb21wYWN0X3BhZ2VzKGdmcF90IGdmcF9tYXNrLFxuIFx0XHR1bnNpZ25lZCBpbnQgb3JkZXIsIHVuc2lnbmVkIGludCBhbGxvY19mbGFncyxcbiBcdFx0Y29uc3Qgc3RydWN0IGFsbG9jX2NvbnRleHQgKmFjLCBlbnVtIGNvbXBhY3RfcHJpb3JpdHkgcHJpbyxcbi1cdFx0c3RydWN0IHBhZ2UgKipwYWdlKTtcbiYjNDM7XHRcdHN0cnVjdCBjYXB0dXJlX2NvbnRyb2wgKmNhcGMpO1xuIGV4dGVybiB2b2lkIHJlc2V0X2lzb2xhdGlvbl9zdWl0YWJsZShwZ19kYXRhX3QgKnBnZGF0KTtcbiBleHRlcm4gYm9vbCBjb21wYWN0aW9uX3N1aXRhYmxlKHN0cnVjdCB6b25lICp6b25lLCBpbnQgb3JkZXIsXG4gXHRcdFx0XHR1bnNpZ25lZCBsb25nIHdhdGVybWFyaywgaW50IGhpZ2hlc3Rfem9uZWlkeCk7XG5kaWZmIC0tZ2l0IGEvbW0vY29tcGFjdGlvbi5jIGIvbW0vY29tcGFjdGlvbi5jXG5pbmRleCBmMDg3NjVhZGUwMTRjZS4uYzI3MDFiZjFkMDRlZDcgMTAwNjQ0XG4tLS0gYS9tbS9jb21wYWN0aW9uLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL2NvbXBhY3Rpb24uY1xuQEAgLTEzODEsMTIgJiM0MzsxMzgxLDMzIEBAIHN0YXRpYyBib29sIHN1aXRhYmxlX21pZ3JhdGlvbl9zb3VyY2Uoc3RydWN0IGNvbXBhY3RfY29udHJvbCAqY2MsXG4gXHRpZiAocGFnZWJsb2NrX3NraXBfcGVyc2lzdGVudChwYWdlKSlcbiBcdFx0cmV0dXJuIGZhbHNlO1xuIFxuLVx0aWYgKChjYy1cdTAwM2Vtb2RlICE9IE1JR1JBVEVfQVNZTkMpIHx8ICFjYy1cdTAwM2VkaXJlY3RfY29tcGFjdGlvbilcbiYjNDM7XHQvKlxuJiM0MztcdCAqIEJhY2tncm91bmQgY29tcGFjdGlvbiBwcm9kdWNlcyBibG9ja3MgZm9yIHRoZSB6b25lIGF0XG4mIzQzO1x0ICogbGFyZ2UsIHdpdGggbm8gcGFydGljdWxhciBhbGxvY2F0aW9uIGNvbnRleHQuIEFsbG93IGFsbFxuJiM0MztcdCAqIGJsb2NrIHR5cGVzLCBpbmNsdWRpbmcgQ01BLlxuJiM0MztcdCAqL1xuJiM0MztcdGlmICghY2MtXHUwMDNlZGlyZWN0X2NvbXBhY3Rpb24pXG4gXHRcdHJldHVybiB0cnVlO1xuIFxuIFx0YmxvY2tfbXQgPSBnZXRfcGFnZWJsb2NrX21pZ3JhdGV0eXBlKHBhZ2UpO1xuIFxuLVx0aWYgKGNjLVx1MDAzZW1pZ3JhdGV0eXBlID09IE1JR1JBVEVfTU9WQUJMRSlcbiYjNDM7XHQvKlxuJiM0MztcdCAqIENNQSBwYWdlcyBjYW4gb25seSBiZSB0YWtlbiBieSBBTExPQ19DTUEgcmVxdWVzdHMuIEZvciBhbnlib2R5XG4mIzQzO1x0ICogZWxzZSwgdmFjYXRpbmcgYSBDTUEgYmxvY2sgY29uc3VtZXMgZnJlZSBwYWdlcyB0aGUgY2FsbGVyXG4mIzQzO1x0ICogY291bGQgaGF2ZSB1c2VkLCBhbmQgcHJvZHVjZXMgZnJlZSBwYWdlcyBpdCBjYW5ub3QuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKGlzX21pZ3JhdGVfY21hKGJsb2NrX210KSBcdTAwMjZcdTAwMjYgIShjYy1cdTAwM2VhbGxvY19mbGFncyBcdTAwMjYgQUxMT0NfQ01BKSlcbiYjNDM7XHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XG4mIzQzO1x0aWYgKGNjLVx1MDAzZW1vZGUgIT0gTUlHUkFURV9BU1lOQylcbiYjNDM7XHRcdHJldHVybiB0cnVlO1xuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFByZXZlbnQgc21hbGwgdW5tb3ZhYmxlL3JlY2xhaW1hYmxlIHJlcXVlc3RzIGZyb20gcG9sbHV0aW5nXG4mIzQzO1x0ICogbW92YWJsZSBibG9ja3MgdGhyb3VnaCBmYWxsYmFja3MuIFdob2xlLWJsb2NrIHByb2R1Y3Rpb24gaXNcbiYjNDM7XHQgKiBleGVtcHQgYXMgdGhlIGFsbG9jYXRvciBjbGFpbXMgYW5kIGNvbnZlcnRzIHRoZXNlLlxuJiM0MztcdCAqL1xuJiM0MztcdGlmIChjYy1cdTAwM2VtaWdyYXRldHlwZSA9PSBNSUdSQVRFX01PVkFCTEUgfHwgY2MtXHUwMDNlb3JkZXIgXHUwMDNlPSBwYWdlYmxvY2tfb3JkZXIpXG4gXHRcdHJldHVybiBpc19taWdyYXRlX21vdmFibGUoYmxvY2tfbXQpO1xuIFx0ZWxzZVxuIFx0XHRyZXR1cm4gYmxvY2tfbXQgPT0gY2MtXHUwMDNlbWlncmF0ZXR5cGU7XG5AQCAtMTk3NCwxMiAmIzQzOzE5OTUsMTIgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgZmFzdF9maW5kX21pZ3JhdGVibG9jayhzdHJ1Y3QgY29tcGFjdF9jb250cm9sICpjYylcbiBcdFx0cmV0dXJuIHBmbjtcbiBcbiBcdC8qXG4tXHQgKiBPbmx5IGFsbG93IGtjb21wYWN0ZCBhbmQgZGlyZWN0IHJlcXVlc3RzIGZvciBtb3ZhYmxlIHBhZ2VzIHRvXG4tXHQgKiBxdWlja2x5IGNsZWFyIG91dCBhIE1PVkFCTEUgcGFnZWJsb2NrIGZvciBhbGxvY2F0aW9uLiBUaGlzXG4tXHQgKiByZWR1Y2VzIHRoZSByaXNrIHRoYXQgYSBsYXJnZSBtb3ZhYmxlIHBhZ2VibG9jayBpcyBmcmVlZCBmb3Jcbi1cdCAqIGFuIHVubW92YWJsZS9yZWNsYWltYWJsZSBzbWFsbCBhbGxvY2F0aW9uLlxuJiM0MztcdCAqIFByZXZlbnQgc21hbGwgdW5tb3ZhYmxlL3JlY2xhaW1hYmxlIHJlcXVlc3RzIGZyb20gcG9sbHV0aW5nXG4mIzQzO1x0ICogbW92YWJsZSBibG9ja3MgdGhyb3VnaCBmYWxsYmFja3MuIFdob2xlLWJsb2NrIHByb2R1Y3Rpb24gaXNcbiYjNDM7XHQgKiBleGVtcHQgYXMgdGhlIGFsbG9jYXRvciBjbGFpbXMgYW5kIGNvbnZlcnRzIHRoZXNlLlxuIFx0ICovXG4tXHRpZiAoY2MtXHUwMDNlZGlyZWN0X2NvbXBhY3Rpb24gXHUwMDI2XHUwMDI2IGNjLVx1MDAzZW1pZ3JhdGV0eXBlICE9IE1JR1JBVEVfTU9WQUJMRSlcbiYjNDM7XHRpZiAoY2MtXHUwMDNlZGlyZWN0X2NvbXBhY3Rpb24gXHUwMDI2XHUwMDI2IGNjLVx1MDAzZW1pZ3JhdGV0eXBlICE9IE1JR1JBVEVfTU9WQUJMRSBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgY2MtXHUwMDNlb3JkZXIgXHUwMDNjIHBhZ2VibG9ja19vcmRlcilcbiBcdFx0cmV0dXJuIHBmbjtcbiBcbiBcdC8qXG5AQCAtMjc3MCw3ICYjNDM7Mjc5MSw3IEBAIGNvbXBhY3Rfem9uZShzdHJ1Y3QgY29tcGFjdF9jb250cm9sICpjYywgc3RydWN0IGNhcHR1cmVfY29udHJvbCAqY2FwYylcbiBzdGF0aWMgZW51bSBjb21wYWN0X3Jlc3VsdCBjb21wYWN0X3pvbmVfb3JkZXIoc3RydWN0IHpvbmUgKnpvbmUsIGludCBvcmRlcixcbiBcdFx0Z2ZwX3QgZ2ZwX21hc2ssIGVudW0gY29tcGFjdF9wcmlvcml0eSBwcmlvLFxuIFx0XHR1bnNpZ25lZCBpbnQgYWxsb2NfZmxhZ3MsIGludCBoaWdoZXN0X3pvbmVpZHgsXG4tXHRcdHN0cnVjdCBwYWdlICoqY2FwdHVyZSlcbiYjNDM7XHRcdHN0cnVjdCBjYXB0dXJlX2NvbnRyb2wgKmNhcGMpXG4ge1xuIFx0ZW51bSBjb21wYWN0X3Jlc3VsdCByZXQ7XG4gXHRzdHJ1Y3QgY29tcGFjdF9jb250cm9sIGNjID0ge1xuQEAgLTI3ODcsMzUgJiM0MzsyODA4LDIyIEBAIHN0YXRpYyBlbnVtIGNvbXBhY3RfcmVzdWx0IGNvbXBhY3Rfem9uZV9vcmRlcihzdHJ1Y3Qgem9uZSAqem9uZSwgaW50IG9yZGVyLFxuIFx0XHQuaWdub3JlX3NraXBfaGludCA9IChwcmlvID09IE1JTl9DT01QQUNUX1BSSU9SSVRZKSxcbiBcdFx0Lmlnbm9yZV9ibG9ja19zdWl0YWJsZSA9IChwcmlvID09IE1JTl9DT01QQUNUX1BSSU9SSVRZKVxuIFx0fTtcbi1cdHN0cnVjdCBjYXB0dXJlX2NvbnRyb2wgY2FwYyA9IHtcbi1cdFx0LmNjID0gXHUwMDI2Y2MsXG4tXHRcdC5wYWdlID0gTlVMTCxcbi1cdH07XG4gXG4tXHQvKlxuLVx0ICogTWFrZSBzdXJlIHRoZSBzdHJ1Y3RzIGFyZSByZWFsbHkgaW5pdGlhbGl6ZWQgYmVmb3JlIHdlIGV4cG9zZSB0aGVcbi1cdCAqIGNhcHR1cmUgY29udHJvbCwgaW4gY2FzZSB3ZSBhcmUgaW50ZXJydXB0ZWQgYW5kIHRoZSBpbnRlcnJ1cHQgaGFuZGxlclxuLVx0ICogZnJlZXMgYSBwYWdlLlxuLVx0ICovXG4mIzQzO1x0LyogU2VlIHRoZSBjb21tZW50IGluIF9fYWxsb2NfcGFnZXNfZGlyZWN0X2NvbXBhY3QoKSAqL1xuIFx0YmFycmllcigpO1xuLVx0V1JJVEVfT05DRShjdXJyZW50LVx1MDAzZWNhcHR1cmVfY29udHJvbCwgXHUwMDI2Y2FwYyk7XG4mIzQzO1x0V1JJVEVfT05DRShjYXBjLVx1MDAzZWNjLCBcdTAwMjZjYyk7XG4gXG4tXHRyZXQgPSBjb21wYWN0X3pvbmUoXHUwMDI2Y2MsIFx1MDAyNmNhcGMpO1xuJiM0MztcdHJldCA9IGNvbXBhY3Rfem9uZShcdTAwMjZjYywgY2FwYyk7XG4mIzQzO1xuJiM0MztcdFdSSVRFX09OQ0UoY2FwYy1cdTAwM2VjYywgTlVMTCk7XG4gXG4tXHQvKlxuLVx0ICogTWFrZSBzdXJlIHdlIGhpZGUgY2FwdHVyZSBjb250cm9sIGZpcnN0IGJlZm9yZSB3ZSByZWFkIHRoZSBjYXB0dXJlZFxuLVx0ICogcGFnZSBwb2ludGVyLCBvdGhlcndpc2UgYW4gaW50ZXJydXB0IGNvdWxkIGZyZWUgYW5kIGNhcHR1cmUgYSBwYWdlXG4tXHQgKiBhbmQgd2Ugd291bGQgbGVhayBpdC5cbi1cdCAqL1xuLVx0V1JJVEVfT05DRShjdXJyZW50LVx1MDAzZWNhcHR1cmVfY29udHJvbCwgTlVMTCk7XG4tXHQqY2FwdHVyZSA9IFJFQURfT05DRShjYXBjLnBhZ2UpO1xuIFx0LypcbiBcdCAqIFRlY2huaWNhbGx5LCBpdCBpcyBhbHNvIHBvc3NpYmxlIHRoYXQgY29tcGFjdGlvbiBpcyBza2lwcGVkIGJ1dFxuIFx0ICogdGhlIHBhZ2UgaXMgc3RpbGwgY2FwdHVyZWQgb3V0IG9mIGx1Y2soSVJRIGNhbWUgYW5kIGZyZWVkIHRoZSBwYWdlKS5cbiBcdCAqIFJldHVybmluZyBDT01QQUNUX1NVQ0NFU1MgaW4gc3VjaCBjYXNlcyBoZWxwcyBpbiBwcm9wZXJseSBhY2NvdW50aW5nXG4gXHQgKiB0aGUgQ09NUEFDVFtTVEFMTHxGQUlMXSB3aGVuIGNvbXBhY3Rpb24gaXMgc2tpcHBlZC5cbiBcdCAqL1xuLVx0aWYgKCpjYXB0dXJlKVxuJiM0MztcdGlmIChjYXBjLVx1MDAzZXBhZ2UpXG4gXHRcdHJldCA9IENPTVBBQ1RfU1VDQ0VTUztcbiBcbiBcdHJldHVybiByZXQ7XG5AQCAtMjgyOCwxMyAmIzQzOzI4MzYsMTMgQEAgc3RhdGljIGVudW0gY29tcGFjdF9yZXN1bHQgY29tcGFjdF96b25lX29yZGVyKHN0cnVjdCB6b25lICp6b25lLCBpbnQgb3JkZXIsXG4gICogQGFsbG9jX2ZsYWdzOiBUaGUgYWxsb2NhdGlvbiBmbGFncyBvZiB0aGUgY3VycmVudCBhbGxvY2F0aW9uXG4gICogQGFjOiBUaGUgY29udGV4dCBvZiBjdXJyZW50IGFsbG9jYXRpb25cbiAgKiBAcHJpbzogRGV0ZXJtaW5lcyBob3cgaGFyZCBkaXJlY3QgY29tcGFjdGlvbiBzaG91bGQgdHJ5IHRvIHN1Y2NlZWRcbi0gKiBAY2FwdHVyZTogUG9pbnRlciB0byBmcmVlIHBhZ2UgY3JlYXRlZCBieSBjb21wYWN0aW9uIHdpbGwgYmUgc3RvcmVkIGhlcmVcbiYjNDM7ICogQGNhcGM6IFRoZSBjb250ZXh0IGZvciBjYXB0dXJpbmcgcGFnZXMgZHVyaW5nIGZyZWVpbmdcbiAgKlxuICAqIFRoaXMgaXMgdGhlIG1haW4gZW50cnkgcG9pbnQgZm9yIGRpcmVjdCBwYWdlIGNvbXBhY3Rpb24uXG4gICovXG4gZW51bSBjb21wYWN0X3Jlc3VsdCB0cnlfdG9fY29tcGFjdF9wYWdlcyhnZnBfdCBnZnBfbWFzaywgdW5zaWduZWQgaW50IG9yZGVyLFxuIFx0XHR1bnNpZ25lZCBpbnQgYWxsb2NfZmxhZ3MsIGNvbnN0IHN0cnVjdCBhbGxvY19jb250ZXh0ICphYyxcbi1cdFx0ZW51bSBjb21wYWN0X3ByaW9yaXR5IHByaW8sIHN0cnVjdCBwYWdlICoqY2FwdHVyZSlcbiYjNDM7XHRcdGVudW0gY29tcGFjdF9wcmlvcml0eSBwcmlvLCBzdHJ1Y3QgY2FwdHVyZV9jb250cm9sICpjYXBjKVxuIHtcbiBcdHN0cnVjdCB6b25lcmVmICp6O1xuIFx0c3RydWN0IHpvbmUgKnpvbmU7XG5AQCAtMjg2Miw3ICYjNDM7Mjg3MCw3IEBAIGVudW0gY29tcGFjdF9yZXN1bHQgdHJ5X3RvX2NvbXBhY3RfcGFnZXMoZ2ZwX3QgZ2ZwX21hc2ssIHVuc2lnbmVkIGludCBvcmRlcixcbiBcdFx0fVxuIFxuIFx0XHRzdGF0dXMgPSBjb21wYWN0X3pvbmVfb3JkZXIoem9uZSwgb3JkZXIsIGdmcF9tYXNrLCBwcmlvLFxuLVx0XHRcdFx0YWxsb2NfZmxhZ3MsIGFjLVx1MDAzZWhpZ2hlc3Rfem9uZWlkeCwgY2FwdHVyZSk7XG4mIzQzO1x0XHRcdFx0YWxsb2NfZmxhZ3MsIGFjLVx1MDAzZWhpZ2hlc3Rfem9uZWlkeCwgY2FwYyk7XG4gXHRcdHJjID0gbWF4KHN0YXR1cywgcmMpO1xuIFxuIFx0XHQvKiBUaGUgYWxsb2NhdGlvbiBzaG91bGQgc3VjY2VlZCwgc3RvcCBjb21wYWN0aW5nICovXG5kaWZmIC0tZ2l0IGEvbW0vaW50ZXJuYWwuaCBiL21tL2ludGVybmFsLmhcbmluZGV4IDE4MWU3OWYxZDZhMjA3Li4xZjYzNmNmYzg1OWExYSAxMDA2NDRcbi0tLSBhL21tL2ludGVybmFsLmhcbiYjNDM7JiM0MzsmIzQzOyBiL21tL2ludGVybmFsLmhcbkBAIC0xMDYwLDYgJiM0MzsxMDYwLDEzIEBAIHN0cnVjdCBjb21wYWN0X2NvbnRyb2wge1xuICAqL1xuIHN0cnVjdCBjYXB0dXJlX2NvbnRyb2wge1xuIFx0c3RydWN0IGNvbXBhY3RfY29udHJvbCAqY2M7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBBbGxvY2F0aW9uIHJlcXVlc3Qgb3JkZXIuIE1heSBkaWZmZXIgZnJvbSB0aGUgY29tcGFjdGlvblxuJiM0MztcdCAqIG9yZGVyOiBkZWZyYWdfbW9kZSBwcm9tb3RlcyBzdWItYmxvY2sgYWxsb2NhdGlvbnMgdG9cbiYjNDM7XHQgKiBwYWdlYmxvY2stb3JkZXIgY29tcGFjdGlvbjsgY2FwdHVyZSBzdGlsbCBtYXRjaGVzIGF0IHRoZVxuJiM0MztcdCAqIG9yaWdpbmFsIGFsbG9jYXRpb24gb3JkZXIgc28gcHJlcF9uZXdfcGFnZSgpIGlzIGNvbnNpc3RlbnQuXG4mIzQzO1x0ICovXG4mIzQzO1x0aW50IG9yZGVyO1xuIFx0c3RydWN0IHBhZ2UgKnBhZ2U7XG4gfTtcbiBcbmRpZmYgLS1naXQgYS9tbS9wYWdlX2FsbG9jLmMgYi9tbS9wYWdlX2FsbG9jLmNcbmluZGV4IGVlOTAyYTQ2OGMyZjViLi41NzVhOTlhNGM3MjM4NCAxMDA2NDRcbi0tLSBhL21tL3BhZ2VfYWxsb2MuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vcGFnZV9hbGxvYy5jXG5AQCAtNzE4LDcgJiM0Mzs3MTgsNyBAQCBzdGF0aWMgaW5saW5lIHN0cnVjdCBjYXB0dXJlX2NvbnRyb2wgKnRhc2tfY2FwYyhzdHJ1Y3Qgem9uZSAqem9uZSlcbiB7XG4gXHRzdHJ1Y3QgY2FwdHVyZV9jb250cm9sICpjYXBjID0gY3VycmVudC1cdTAwM2VjYXB0dXJlX2NvbnRyb2w7XG4gXG4tXHRyZXR1cm4gdW5saWtlbHkoY2FwYykgXHUwMDI2XHUwMDI2XG4mIzQzO1x0cmV0dXJuIHVubGlrZWx5KGNhcGMgXHUwMDI2XHUwMDI2IGNhcGMtXHUwMDNlY2MpIFx1MDAyNlx1MDAyNlxuIFx0XHQhKGN1cnJlbnQtXHUwMDNlZmxhZ3MgXHUwMDI2IFBGX0tUSFJFQUQpIFx1MDAyNlx1MDAyNlxuIFx0XHQhY2FwYy1cdTAwM2VwYWdlIFx1MDAyNlx1MDAyNlxuIFx0XHRjYXBjLVx1MDAzZWNjLVx1MDAzZXpvbmUgPT0gem9uZSA/IGNhcGMgOiBOVUxMO1xuQEAgLTcyOCw3ICYjNDM7NzI4LDcgQEAgc3RhdGljIGlubGluZSBib29sXG4gY29tcGFjdGlvbl9jYXB0dXJlKHN0cnVjdCBjYXB0dXJlX2NvbnRyb2wgKmNhcGMsIHN0cnVjdCBwYWdlICpwYWdlLFxuIFx0XHQgICBpbnQgb3JkZXIsIGludCBtaWdyYXRldHlwZSlcbiB7XG4tXHRpZiAoIWNhcGMgfHwgb3JkZXIgIT0gY2FwYy1cdTAwM2VjYy1cdTAwM2VvcmRlcilcbiYjNDM7XHRpZiAoIWNhcGMgfHwgb3JkZXIgIT0gY2FwYy1cdTAwM2VvcmRlcilcbiBcdFx0cmV0dXJuIGZhbHNlO1xuIFxuIFx0LyogRG8gbm90IGFjY2lkZW50YWxseSBwb2xsdXRlIENNQSBvciBpc29sYXRlZCByZWdpb25zKi9cbkBAIC03NDgsNyAmIzQzOzc0OCw3IEBAIGNvbXBhY3Rpb25fY2FwdHVyZShzdHJ1Y3QgY2FwdHVyZV9jb250cm9sICpjYXBjLCBzdHJ1Y3QgcGFnZSAqcGFnZSxcbiBcdFx0cmV0dXJuIGZhbHNlO1xuIFxuIFx0aWYgKG1pZ3JhdGV0eXBlICE9IGNhcGMtXHUwMDNlY2MtXHUwMDNlbWlncmF0ZXR5cGUpXG4tXHRcdHRyYWNlX21tX3BhZ2VfYWxsb2NfZXh0ZnJhZyhwYWdlLCBjYXBjLVx1MDAzZWNjLVx1MDAzZW9yZGVyLCBvcmRlcixcbiYjNDM7XHRcdHRyYWNlX21tX3BhZ2VfYWxsb2NfZXh0ZnJhZyhwYWdlLCBjYXBjLVx1MDAzZW9yZGVyLCBvcmRlcixcbiBcdFx0XHRcdFx0ICAgIGNhcGMtXHUwMDNlY2MtXHUwMDNlbWlncmF0ZXR5cGUsIG1pZ3JhdGV0eXBlKTtcbiBcbiBcdGNhcGMtXHUwMDNlcGFnZSA9IHBhZ2U7XG5AQCAtNDE0NiwyMSAmIzQzOzQxNDYsNTkgQEAgX19hbGxvY19wYWdlc19kaXJlY3RfY29tcGFjdChnZnBfdCBnZnBfbWFzaywgdW5zaWduZWQgaW50IG9yZGVyLFxuIFx0c3RydWN0IHBhZ2UgKnBhZ2UgPSBOVUxMO1xuIFx0dW5zaWduZWQgbG9uZyBwZmxhZ3M7XG4gXHR1bnNpZ25lZCBpbnQgbm9yZWNsYWltX2ZsYWc7XG4mIzQzO1x0c3RydWN0IGNhcHR1cmVfY29udHJvbCBjYXBjID0ge1xuJiM0MztcdFx0Lm9yZGVyID0gb3JkZXIsXG4mIzQzO1x0XHQucGFnZSA9IE5VTEwsXG4mIzQzO1x0fTtcbiYjNDM7XHRpbnQgY29tcGFjdF9vcmRlciA9IG9yZGVyO1xuIFxuLVx0aWYgKCFvcmRlcilcbiYjNDM7XHQvKlxuJiM0MztcdCAqIElmIGZhbGxiYWNrcyBhcmUgbm90IHBlcm1pdHRlZCAoZGVmcmFnX21vZGUpLCB3ZSBlaXRoZXJcbiYjNDM7XHQgKiBuZWVkIHRvIHJlY2xhaW0gc3BhY2UgaW4gYSBibG9jayBvZiBtYXRjaGluZyB0eXBlLCBvciBjbGVhclxuJiM0MztcdCAqIG91dCBhbiBlbnRpcmUgYmxvY2sgdG8gYWxsb3cgX19ybXF1ZXVlX2NsYWltKCkgdG8gY29udmVydC5cbiYjNDM7XHQgKlxuJiM0MztcdCAqIFJlY2xhaW0gYnkgaXRzZWxmIGlzIHByaW1hcmlseSBmcmVlaW5nIHNwYWNlIGluIG1vdmFibGVcbiYjNDM7XHQgKiBibG9ja3MsIHNpbmNlIHRoYXQmIzM5O3Mgd2hlcmUgdGhlIExSVSBwYWdlcyBsaXZlLiBTbyB0aGlzXG4mIzQzO1x0ICogd29ya3MgZm9yIG1vdmFibGUgcmVxdWVzdHMsIGJ1dCBub3QgZm9yIG90aGVycy5cbiYjNDM7XHQgKlxuJiM0MztcdCAqIEZvciB0aG9zZSwgcHJvbW90ZSB0aGUgb3JkZXIgdG8gaGVscCBtYWtlIGJsb2NrcywgaW5zdGVhZFxuJiM0MztcdCAqIG9mIHNwaW5uaW5nIGluIHJlY2xhaW0gYWxvbmUgdW5wcm9kdWN0aXZlbHkuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKChhbGxvY19mbGFncyBcdTAwMjYgQUxMT0NfTk9GUkFHTUVOVCkgXHUwMDI2XHUwMDI2IGFjLVx1MDAzZW1pZ3JhdGV0eXBlICE9IE1JR1JBVEVfTU9WQUJMRSlcbiYjNDM7XHRcdGNvbXBhY3Rfb3JkZXIgPSBtYXgob3JkZXIsIHBhZ2VibG9ja19vcmRlcik7XG4mIzQzO1xuJiM0MztcdGlmICghY29tcGFjdF9vcmRlcilcbiBcdFx0cmV0dXJuIE5VTEw7XG4gXG4mIzQzO1x0LypcbiYjNDM7XHQgKiBNYWtlIHN1cmUgdGhlIHN0cnVjdHMgYXJlIHJlYWxseSBpbml0aWFsaXplZCBiZWZvcmUgd2UgZXhwb3NlIHRoZVxuJiM0MztcdCAqIGNhcHR1cmUgY29udHJvbCwgaW4gY2FzZSB3ZSBhcmUgaW50ZXJydXB0ZWQgYW5kIHRoZSBpbnRlcnJ1cHQgaGFuZGxlclxuJiM0MztcdCAqIGZyZWVzIGEgcGFnZS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRiYXJyaWVyKCk7XG4mIzQzO1x0V1JJVEVfT05DRShjdXJyZW50LVx1MDAzZWNhcHR1cmVfY29udHJvbCwgXHUwMDI2Y2FwYyk7XG4mIzQzO1xuIFx0cHNpX21lbXN0YWxsX2VudGVyKFx1MDAyNnBmbGFncyk7XG4gXHRkZWxheWFjY3RfY29tcGFjdF9zdGFydCgpO1xuJiM0MztcdGZzX3JlY2xhaW1fYWNxdWlyZShnZnBfbWFzayk7XG4gXHRub3JlY2xhaW1fZmxhZyA9IG1lbWFsbG9jX25vcmVjbGFpbV9zYXZlKCk7XG4gXG4tXHQqY29tcGFjdF9yZXN1bHQgPSB0cnlfdG9fY29tcGFjdF9wYWdlcyhnZnBfbWFzaywgb3JkZXIsIGFsbG9jX2ZsYWdzLCBhYyxcbi1cdFx0XHRcdFx0XHRcdFx0cHJpbywgXHUwMDI2cGFnZSk7XG4mIzQzO1x0KmNvbXBhY3RfcmVzdWx0ID0gdHJ5X3RvX2NvbXBhY3RfcGFnZXMoZ2ZwX21hc2ssIGNvbXBhY3Rfb3JkZXIsXG4mIzQzO1x0XHRcdFx0XHQgICAgICAgYWxsb2NfZmxhZ3MsIGFjLCBwcmlvLCBcdTAwMjZjYXBjKTtcbiBcbiBcdG1lbWFsbG9jX25vcmVjbGFpbV9yZXN0b3JlKG5vcmVjbGFpbV9mbGFnKTtcbiYjNDM7XHRmc19yZWNsYWltX3JlbGVhc2UoZ2ZwX21hc2spO1xuIFx0cHNpX21lbXN0YWxsX2xlYXZlKFx1MDAyNnBmbGFncyk7XG4gXHRkZWxheWFjY3RfY29tcGFjdF9lbmQoKTtcbiBcbiYjNDM7XHQvKlxuJiM0MztcdCAqIE1ha2Ugc3VyZSB3ZSBoaWRlIGNhcHR1cmUgY29udHJvbCBmaXJzdCBiZWZvcmUgd2UgcmVhZCB0aGUgY2FwdHVyZWRcbiYjNDM7XHQgKiBwYWdlIHBvaW50ZXIsIG90aGVyd2lzZSBhbiBpbnRlcnJ1cHQgY291bGQgZnJlZSBhbmQgY2FwdHVyZSBhIHBhZ2VcbiYjNDM7XHQgKiBhbmQgd2Ugd291bGQgbGVhayBpdC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRXUklURV9PTkNFKGN1cnJlbnQtXHUwMDNlY2FwdHVyZV9jb250cm9sLCBOVUxMKTtcbiYjNDM7XHRwYWdlID0gUkVBRF9PTkNFKGNhcGMucGFnZSk7XG4mIzQzO1xuIFx0aWYgKCpjb21wYWN0X3Jlc3VsdCA9PSBDT01QQUNUX1NLSVBQRUQgfHxcbiBcdCAgICAqY29tcGFjdF9yZXN1bHQgPT0gQ09NUEFDVF9ERUZFUlJFRClcbiBcdFx0cmV0dXJuIE5VTEw7XG5AQCAtNDE4Miw3ICYjNDM7NDIyMCw3IEBAIF9fYWxsb2NfcGFnZXNfZGlyZWN0X2NvbXBhY3QoZ2ZwX3QgZ2ZwX21hc2ssIHVuc2lnbmVkIGludCBvcmRlcixcbiBcdFx0c3RydWN0IHpvbmUgKnpvbmUgPSBwYWdlX3pvbmUocGFnZSk7XG4gXG4gXHRcdHpvbmUtXHUwMDNlY29tcGFjdF9ibG9ja3NraXBfZmx1c2ggPSBmYWxzZTtcbi1cdFx0Y29tcGFjdGlvbl9kZWZlcl9yZXNldCh6b25lLCBvcmRlciwgdHJ1ZSk7XG4mIzQzO1x0XHRjb21wYWN0aW9uX2RlZmVyX3Jlc2V0KHpvbmUsIGNvbXBhY3Rfb3JkZXIsIHRydWUpO1xuIFx0XHRjb3VudF92bV9ldmVudChDT01QQUNUU1VDQ0VTUyk7XG4gXHRcdHJldHVybiBwYWdlO1xuIFx0fVxuQEAgLTQ0MjIsOSAmIzQzOzQ0NjAsMTQgQEAgX19hbGxvY19wYWdlc19kaXJlY3RfcmVjbGFpbShnZnBfdCBnZnBfbWFzaywgdW5zaWduZWQgaW50IG9yZGVyLFxuIFx0c3RydWN0IHBhZ2UgKnBhZ2UgPSBOVUxMO1xuIFx0dW5zaWduZWQgbG9uZyBwZmxhZ3M7XG4gXHRib29sIGRyYWluZWQgPSBmYWxzZTtcbiYjNDM7XHRpbnQgcmVjbGFpbV9vcmRlciA9IG9yZGVyO1xuJiM0MztcbiYjNDM7XHQvKiBNYXRjaCB0aGUgc2xvd3BhdGggY29tcGFjdGlvbiBwcm9tb3Rpb24gaW4gX19hbGxvY19wYWdlc19kaXJlY3RfY29tcGFjdCAqL1xuJiM0MztcdGlmICgoYWxsb2NfZmxhZ3MgXHUwMDI2IEFMTE9DX05PRlJBR01FTlQpIFx1MDAyNlx1MDAyNiBhYy1cdTAwM2VtaWdyYXRldHlwZSAhPSBNSUdSQVRFX01PVkFCTEUpXG4mIzQzO1x0XHRyZWNsYWltX29yZGVyID0gbWF4KG9yZGVyLCBwYWdlYmxvY2tfb3JkZXIpO1xuIFxuIFx0cHNpX21lbXN0YWxsX2VudGVyKFx1MDAyNnBmbGFncyk7XG4tXHQqZGlkX3NvbWVfcHJvZ3Jlc3MgPSBfX3BlcmZvcm1fcmVjbGFpbShnZnBfbWFzaywgb3JkZXIsIGFjKTtcbiYjNDM7XHQqZGlkX3NvbWVfcHJvZ3Jlc3MgPSBfX3BlcmZvcm1fcmVjbGFpbShnZnBfbWFzaywgcmVjbGFpbV9vcmRlciwgYWMpO1xuIFx0aWYgKHVubGlrZWx5KCEoKmRpZF9zb21lX3Byb2dyZXNzKSkpXG4gXHRcdGdvdG8gb3V0O1xuIFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDIwOjIxPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0NPTVBBQ1RJT04mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtfX2FsbG9jX3BhZ2VzX2RpcmVjdF9jb21wYWN0JiMzNDssCiAgICAmIzM0O3RyeV90b19jb21wYWN0X3BhZ2VzJiMzNDssCiAgICAmIzM0O2NvbXBhY3Rfem9uZV9vcmRlciYjMzQ7LAogICAgJiMzNDtzdWl0YWJsZV9taWdyYXRpb25fc291cmNlJiMzNDssCiAgICAmIzM0O2Zhc3RfZmluZF9taWdyYXRlYmxvY2smIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgbWVtb3J5IGNvbXBhY3Rpb24gYW5kIGFsbG9jYXRpb24gbG9naWMsIHNwZWNpZmljYWxseSBob3cgZGlyZWN0IGNvbXBhY3Rpb24gYW5kIHJlY2xhaW0gaGFuZGxlIHBhZ2UgY2FwdHVyZSBhbmQgY29tcGFjdGlvbiBvcmRlcnMuIEl0IHByb21vdGVzIHRoZSBjb21wYWN0aW9uIG9yZGVyIHRvIGBwYWdlYmxvY2tfb3JkZXJgIGZvciBjZXJ0YWluIGFsbG9jYXRpb25zIHRvIHByZXZlbnQgZnJhZ21lbnRhdGlvbi4gVGhpcyBpcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljIHRoYXQgaXMgcmVhY2hhYmxlIGR1cmluZyBoaWdoLW9yZGVyIG1lbW9yeSBhbGxvY2F0aW9ucyBhbmQgbWVtb3J5IHByZXNzdXJlLiBJdCBpcyBmdW5jdGlvbmFsIGFuZCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdAogICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksCiAgIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAxNmJiYzRlOTllMWFkNmVjNzEwYzA5OTgxZGQwZDAyNmQzMmZiYTE1CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIEZyaSBKdW4gMjYgMjA6MjE6NTIgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2NvbXBhY3Rpb24uaCBiL2luY2x1ZGUvbGludXgvY29tcGFjdGlvbi5oCmluZGV4IGYyOWVmMDY1MzU0NmVkLi42NmEyZjcwZTllMDE5ZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9jb21wYWN0aW9uLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9jb21wYWN0aW9uLmgKQEAgLTU4LDYgJiM0Mzs1OCw3IEBAIGVudW0gY29tcGFjdF9yZXN1bHQgewogfTsKIAogc3RydWN0IGFsbG9jX2NvbnRleHQ7IC8qIGluIG1tL2ludGVybmFsLmggKi8KJiM0MztzdHJ1Y3QgY2FwdHVyZV9jb250cm9sOyAvKiBpbiBtbS9pbnRlcm5hbC5oICovCiAKIC8qCiAgKiBOdW1iZXIgb2YgZnJlZSBvcmRlci0wIHBhZ2VzIHRoYXQgc2hvdWxkIGJlIGF2YWlsYWJsZSBhYm92ZSBnaXZlbiB3YXRlcm1hcmsKQEAgLTkyLDcgJiM0Mzs5Myw3IEBAIGV4dGVybiBpbnQgZnJhZ21lbnRhdGlvbl9pbmRleChzdHJ1Y3Qgem9uZSAqem9uZSwgdW5zaWduZWQgaW50IG9yZGVyKTsKIGV4dGVybiBlbnVtIGNvbXBhY3RfcmVzdWx0IHRyeV90b19jb21wYWN0X3BhZ2VzKGdmcF90IGdmcF9tYXNrLAogCQl1bnNpZ25lZCBpbnQgb3JkZXIsIHVuc2lnbmVkIGludCBhbGxvY19mbGFncywKIAkJY29uc3Qgc3RydWN0IGFsbG9jX2NvbnRleHQgKmFjLCBlbnVtIGNvbXBhY3RfcHJpb3JpdHkgcHJpbywKLQkJc3RydWN0IHBhZ2UgKipwYWdlKTsKJiM0MzsJCXN0cnVjdCBjYXB0dXJlX2NvbnRyb2wgKmNhcGMpOwogZXh0ZXJuIHZvaWQgcmVzZXRfaXNvbGF0aW9uX3N1aXRhYmxlKHBnX2RhdGFfdCAqcGdkYXQpOwogZXh0ZXJuIGJvb2wgY29tcGFjdGlvbl9zdWl0YWJsZShzdHJ1Y3Qgem9uZSAqem9uZSwgaW50IG9yZGVyLAogCQkJCXVuc2lnbmVkIGxvbmcgd2F0ZXJtYXJrLCBpbnQgaGlnaGVzdF96b25laWR4KTsKZGlmZiAtLWdpdCBhL21tL2NvbXBhY3Rpb24uYyBiL21tL2NvbXBhY3Rpb24uYwppbmRleCBmMDg3NjVhZGUwMTRjZS4uYzI3MDFiZjFkMDRlZDcgMTAwNjQ0Ci0tLSBhL21tL2NvbXBhY3Rpb24uYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9jb21wYWN0aW9uLmMKQEAgLTEzODEsMTIgJiM0MzsxMzgxLDMzIEBAIHN0YXRpYyBib29sIHN1aXRhYmxlX21pZ3JhdGlvbl9zb3VyY2Uoc3RydWN0IGNvbXBhY3RfY29udHJvbCAqY2MsCiAJaWYgKHBhZ2VibG9ja19za2lwX3BlcnNpc3RlbnQocGFnZSkpCiAJCXJldHVybiBmYWxzZTsKIAotCWlmICgoY2MtJmd0O21vZGUgIT0gTUlHUkFURV9BU1lOQykgfHwgIWNjLSZndDtkaXJlY3RfY29tcGFjdGlvbikKJiM0MzsJLyoKJiM0MzsJICogQmFja2dyb3VuZCBjb21wYWN0aW9uIHByb2R1Y2VzIGJsb2NrcyBmb3IgdGhlIHpvbmUgYXQKJiM0MzsJICogbGFyZ2UsIHdpdGggbm8gcGFydGljdWxhciBhbGxvY2F0aW9uIGNvbnRleHQuIEFsbG93IGFsbAomIzQzOwkgKiBibG9jayB0eXBlcywgaW5jbHVkaW5nIENNQS4KJiM0MzsJICovCiYjNDM7CWlmICghY2MtJmd0O2RpcmVjdF9jb21wYWN0aW9uKQogCQlyZXR1cm4gdHJ1ZTsKIAogCWJsb2NrX210ID0gZ2V0X3BhZ2VibG9ja19taWdyYXRldHlwZShwYWdlKTsKIAotCWlmIChjYy0mZ3Q7bWlncmF0ZXR5cGUgPT0gTUlHUkFURV9NT1ZBQkxFKQomIzQzOwkvKgomIzQzOwkgKiBDTUEgcGFnZXMgY2FuIG9ubHkgYmUgdGFrZW4gYnkgQUxMT0NfQ01BIHJlcXVlc3RzLiBGb3IgYW55Ym9keQomIzQzOwkgKiBlbHNlLCB2YWNhdGluZyBhIENNQSBibG9jayBjb25zdW1lcyBmcmVlIHBhZ2VzIHRoZSBjYWxsZXIKJiM0MzsJICogY291bGQgaGF2ZSB1c2VkLCBhbmQgcHJvZHVjZXMgZnJlZSBwYWdlcyBpdCBjYW5ub3QuCiYjNDM7CSAqLwomIzQzOwlpZiAoaXNfbWlncmF0ZV9jbWEoYmxvY2tfbXQpICZhbXA7JmFtcDsgIShjYy0mZ3Q7YWxsb2NfZmxhZ3MgJmFtcDsgQUxMT0NfQ01BKSkKJiM0MzsJCXJldHVybiBmYWxzZTsKJiM0MzsKJiM0MzsJaWYgKGNjLSZndDttb2RlICE9IE1JR1JBVEVfQVNZTkMpCiYjNDM7CQlyZXR1cm4gdHJ1ZTsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogUHJldmVudCBzbWFsbCB1bm1vdmFibGUvcmVjbGFpbWFibGUgcmVxdWVzdHMgZnJvbSBwb2xsdXRpbmcKJiM0MzsJICogbW92YWJsZSBibG9ja3MgdGhyb3VnaCBmYWxsYmFja3MuIFdob2xlLWJsb2NrIHByb2R1Y3Rpb24gaXMKJiM0MzsJICogZXhlbXB0IGFzIHRoZSBhbGxvY2F0b3IgY2xhaW1zIGFuZCBjb252ZXJ0cyB0aGVzZS4KJiM0MzsJICovCiYjNDM7CWlmIChjYy0mZ3Q7bWlncmF0ZXR5cGUgPT0gTUlHUkFURV9NT1ZBQkxFIHx8IGNjLSZndDtvcmRlciAmZ3Q7PSBwYWdlYmxvY2tfb3JkZXIpCiAJCXJldHVybiBpc19taWdyYXRlX21vdmFibGUoYmxvY2tfbXQpOwogCWVsc2UKIAkJcmV0dXJuIGJsb2NrX210ID09IGNjLSZndDttaWdyYXRldHlwZTsKQEAgLTE5NzQsMTIgJiM0MzsxOTk1LDEyIEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIGZhc3RfZmluZF9taWdyYXRlYmxvY2soc3RydWN0IGNvbXBhY3RfY29udHJvbCAqY2MpCiAJCXJldHVybiBwZm47CiAKIAkvKgotCSAqIE9ubHkgYWxsb3cga2NvbXBhY3RkIGFuZCBkaXJlY3QgcmVxdWVzdHMgZm9yIG1vdmFibGUgcGFnZXMgdG8KLQkgKiBxdWlja2x5IGNsZWFyIG91dCBhIE1PVkFCTEUgcGFnZWJsb2NrIGZvciBhbGxvY2F0aW9uLiBUaGlzCi0JICogcmVkdWNlcyB0aGUgcmlzayB0aGF0IGEgbGFyZ2UgbW92YWJsZSBwYWdlYmxvY2sgaXMgZnJlZWQgZm9yCi0JICogYW4gdW5tb3ZhYmxlL3JlY2xhaW1hYmxlIHNtYWxsIGFsbG9jYXRpb24uCiYjNDM7CSAqIFByZXZlbnQgc21hbGwgdW5tb3ZhYmxlL3JlY2xhaW1hYmxlIHJlcXVlc3RzIGZyb20gcG9sbHV0aW5nCiYjNDM7CSAqIG1vdmFibGUgYmxvY2tzIHRocm91Z2ggZmFsbGJhY2tzLiBXaG9sZS1ibG9jayBwcm9kdWN0aW9uIGlzCiYjNDM7CSAqIGV4ZW1wdCBhcyB0aGUgYWxsb2NhdG9yIGNsYWltcyBhbmQgY29udmVydHMgdGhlc2UuCiAJICovCi0JaWYgKGNjLSZndDtkaXJlY3RfY29tcGFjdGlvbiAmYW1wOyZhbXA7IGNjLSZndDttaWdyYXRldHlwZSAhPSBNSUdSQVRFX01PVkFCTEUpCiYjNDM7CWlmIChjYy0mZ3Q7ZGlyZWN0X2NvbXBhY3Rpb24gJmFtcDsmYW1wOyBjYy0mZ3Q7bWlncmF0ZXR5cGUgIT0gTUlHUkFURV9NT1ZBQkxFICZhbXA7JmFtcDsKJiM0MzsJICAgIGNjLSZndDtvcmRlciAmbHQ7IHBhZ2VibG9ja19vcmRlcikKIAkJcmV0dXJuIHBmbjsKIAogCS8qCkBAIC0yNzcwLDcgJiM0MzsyNzkxLDcgQEAgY29tcGFjdF96b25lKHN0cnVjdCBjb21wYWN0X2NvbnRyb2wgKmNjLCBzdHJ1Y3QgY2FwdHVyZV9jb250cm9sICpjYXBjKQogc3RhdGljIGVudW0gY29tcGFjdF9yZXN1bHQgY29tcGFjdF96b25lX29yZGVyKHN0cnVjdCB6b25lICp6b25lLCBpbnQgb3JkZXIsCiAJCWdmcF90IGdmcF9tYXNrLCBlbnVtIGNvbXBhY3RfcHJpb3JpdHkgcHJpbywKIAkJdW5zaWduZWQgaW50IGFsbG9jX2ZsYWdzLCBpbnQgaGlnaGVzdF96b25laWR4LAotCQlzdHJ1Y3QgcGFnZSAqKmNhcHR1cmUpCiYjNDM7CQlzdHJ1Y3QgY2FwdHVyZV9jb250cm9sICpjYXBjKQogewogCWVudW0gY29tcGFjdF9yZXN1bHQgcmV0OwogCXN0cnVjdCBjb21wYWN0X2NvbnRyb2wgY2MgPSB7CkBAIC0yNzg3LDM1ICYjNDM7MjgwOCwyMiBAQCBzdGF0aWMgZW51bSBjb21wYWN0X3Jlc3VsdCBjb21wYWN0X3pvbmVfb3JkZXIoc3RydWN0IHpvbmUgKnpvbmUsIGludCBvcmRlciwKIAkJLmlnbm9yZV9za2lwX2hpbnQgPSAocHJpbyA9PSBNSU5fQ09NUEFDVF9QUklPUklUWSksCiAJCS5pZ25vcmVfYmxvY2tfc3VpdGFibGUgPSAocHJpbyA9PSBNSU5fQ09NUEFDVF9QUklPUklUWSkKIAl9OwotCXN0cnVjdCBjYXB0dXJlX2NvbnRyb2wgY2FwYyA9IHsKLQkJLmNjID0gJmFtcDtjYywKLQkJLnBhZ2UgPSBOVUxMLAotCX07CiAKLQkvKgotCSAqIE1ha2Ugc3VyZSB0aGUgc3RydWN0cyBhcmUgcmVhbGx5IGluaXRpYWxpemVkIGJlZm9yZSB3ZSBleHBvc2UgdGhlCi0JICogY2FwdHVyZSBjb250cm9sLCBpbiBjYXNlIHdlIGFyZSBpbnRlcnJ1cHRlZCBhbmQgdGhlIGludGVycnVwdCBoYW5kbGVyCi0JICogZnJlZXMgYSBwYWdlLgotCSAqLwomIzQzOwkvKiBTZWUgdGhlIGNvbW1lbnQgaW4gX19hbGxvY19wYWdlc19kaXJlY3RfY29tcGFjdCgpICovCiAJYmFycmllcigpOwotCVdSSVRFX09OQ0UoY3VycmVudC0mZ3Q7Y2FwdHVyZV9jb250cm9sLCAmYW1wO2NhcGMpOwomIzQzOwlXUklURV9PTkNFKGNhcGMtJmd0O2NjLCAmYW1wO2NjKTsKIAotCXJldCA9IGNvbXBhY3Rfem9uZSgmYW1wO2NjLCAmYW1wO2NhcGMpOwomIzQzOwlyZXQgPSBjb21wYWN0X3pvbmUoJmFtcDtjYywgY2FwYyk7CiYjNDM7CiYjNDM7CVdSSVRFX09OQ0UoY2FwYy0mZ3Q7Y2MsIE5VTEwpOwogCi0JLyoKLQkgKiBNYWtlIHN1cmUgd2UgaGlkZSBjYXB0dXJlIGNvbnRyb2wgZmlyc3QgYmVmb3JlIHdlIHJlYWQgdGhlIGNhcHR1cmVkCi0JICogcGFnZSBwb2ludGVyLCBvdGhlcndpc2UgYW4gaW50ZXJydXB0IGNvdWxkIGZyZWUgYW5kIGNhcHR1cmUgYSBwYWdlCi0JICogYW5kIHdlIHdvdWxkIGxlYWsgaXQuCi0JICovCi0JV1JJVEVfT05DRShjdXJyZW50LSZndDtjYXB0dXJlX2NvbnRyb2wsIE5VTEwpOwotCSpjYXB0dXJlID0gUkVBRF9PTkNFKGNhcGMucGFnZSk7CiAJLyoKIAkgKiBUZWNobmljYWxseSwgaXQgaXMgYWxzbyBwb3NzaWJsZSB0aGF0IGNvbXBhY3Rpb24gaXMgc2tpcHBlZCBidXQKIAkgKiB0aGUgcGFnZSBpcyBzdGlsbCBjYXB0dXJlZCBvdXQgb2YgbHVjayhJUlEgY2FtZSBhbmQgZnJlZWQgdGhlIHBhZ2UpLgogCSAqIFJldHVybmluZyBDT01QQUNUX1NVQ0NFU1MgaW4gc3VjaCBjYXNlcyBoZWxwcyBpbiBwcm9wZXJseSBhY2NvdW50aW5nCiAJICogdGhlIENPTVBBQ1RbU1RBTEx8RkFJTF0gd2hlbiBjb21wYWN0aW9uIGlzIHNraXBwZWQuCiAJICovCi0JaWYgKCpjYXB0dXJlKQomIzQzOwlpZiAoY2FwYy0mZ3Q7cGFnZSkKIAkJcmV0ID0gQ09NUEFDVF9TVUNDRVNTOwogCiAJcmV0dXJuIHJldDsKQEAgLTI4MjgsMTMgJiM0MzsyODM2LDEzIEBAIHN0YXRpYyBlbnVtIGNvbXBhY3RfcmVzdWx0IGNvbXBhY3Rfem9uZV9vcmRlcihzdHJ1Y3Qgem9uZSAqem9uZSwgaW50IG9yZGVyLAogICogQGFsbG9jX2ZsYWdzOiBUaGUgYWxsb2NhdGlvbiBmbGFncyBvZiB0aGUgY3VycmVudCBhbGxvY2F0aW9uCiAgKiBAYWM6IFRoZSBjb250ZXh0IG9mIGN1cnJlbnQgYWxsb2NhdGlvbgogICogQHByaW86IERldGVybWluZXMgaG93IGhhcmQgZGlyZWN0IGNvbXBhY3Rpb24gc2hvdWxkIHRyeSB0byBzdWNjZWVkCi0gKiBAY2FwdHVyZTogUG9pbnRlciB0byBmcmVlIHBhZ2UgY3JlYXRlZCBieSBjb21wYWN0aW9uIHdpbGwgYmUgc3RvcmVkIGhlcmUKJiM0MzsgKiBAY2FwYzogVGhlIGNvbnRleHQgZm9yIGNhcHR1cmluZyBwYWdlcyBkdXJpbmcgZnJlZWluZwogICoKICAqIFRoaXMgaXMgdGhlIG1haW4gZW50cnkgcG9pbnQgZm9yIGRpcmVjdCBwYWdlIGNvbXBhY3Rpb24uCiAgKi8KIGVudW0gY29tcGFjdF9yZXN1bHQgdHJ5X3RvX2NvbXBhY3RfcGFnZXMoZ2ZwX3QgZ2ZwX21hc2ssIHVuc2lnbmVkIGludCBvcmRlciwKIAkJdW5zaWduZWQgaW50IGFsbG9jX2ZsYWdzLCBjb25zdCBzdHJ1Y3QgYWxsb2NfY29udGV4dCAqYWMsCi0JCWVudW0gY29tcGFjdF9wcmlvcml0eSBwcmlvLCBzdHJ1Y3QgcGFnZSAqKmNhcHR1cmUpCiYjNDM7CQllbnVtIGNvbXBhY3RfcHJpb3JpdHkgcHJpbywgc3RydWN0IGNhcHR1cmVfY29udHJvbCAqY2FwYykKIHsKIAlzdHJ1Y3Qgem9uZXJlZiAqejsKIAlzdHJ1Y3Qgem9uZSAqem9uZTsKQEAgLTI4NjIsNyAmIzQzOzI4NzAsNyBAQCBlbnVtIGNvbXBhY3RfcmVzdWx0IHRyeV90b19jb21wYWN0X3BhZ2VzKGdmcF90IGdmcF9tYXNrLCB1bnNpZ25lZCBpbnQgb3JkZXIsCiAJCX0KIAogCQlzdGF0dXMgPSBjb21wYWN0X3pvbmVfb3JkZXIoem9uZSwgb3JkZXIsIGdmcF9tYXNrLCBwcmlvLAotCQkJCWFsbG9jX2ZsYWdzLCBhYy0mZ3Q7aGlnaGVzdF96b25laWR4LCBjYXB0dXJlKTsKJiM0MzsJCQkJYWxsb2NfZmxhZ3MsIGFjLSZndDtoaWdoZXN0X3pvbmVpZHgsIGNhcGMpOwogCQlyYyA9IG1heChzdGF0dXMsIHJjKTsKIAogCQkvKiBUaGUgYWxsb2NhdGlvbiBzaG91bGQgc3VjY2VlZCwgc3RvcCBjb21wYWN0aW5nICovCmRpZmYgLS1naXQgYS9tbS9pbnRlcm5hbC5oIGIvbW0vaW50ZXJuYWwuaAppbmRleCAxODFlNzlmMWQ2YTIwNy4uMWY2MzZjZmM4NTlhMWEgMTAwNjQ0Ci0tLSBhL21tL2ludGVybmFsLmgKJiM0MzsmIzQzOyYjNDM7IGIvbW0vaW50ZXJuYWwuaApAQCAtMTA2MCw2ICYjNDM7MTA2MCwxMyBAQCBzdHJ1Y3QgY29tcGFjdF9jb250cm9sIHsKICAqLwogc3RydWN0IGNhcHR1cmVfY29udHJvbCB7CiAJc3RydWN0IGNvbXBhY3RfY29udHJvbCAqY2M7CiYjNDM7CS8qCiYjNDM7CSAqIEFsbG9jYXRpb24gcmVxdWVzdCBvcmRlci4gTWF5IGRpZmZlciBmcm9tIHRoZSBjb21wYWN0aW9uCiYjNDM7CSAqIG9yZGVyOiBkZWZyYWdfbW9kZSBwcm9tb3RlcyBzdWItYmxvY2sgYWxsb2NhdGlvbnMgdG8KJiM0MzsJICogcGFnZWJsb2NrLW9yZGVyIGNvbXBhY3Rpb247IGNhcHR1cmUgc3RpbGwgbWF0Y2hlcyBhdCB0aGUKJiM0MzsJICogb3JpZ2luYWwgYWxsb2NhdGlvbiBvcmRlciBzbyBwcmVwX25ld19wYWdlKCkgaXMgY29uc2lzdGVudC4KJiM0MzsJICovCiYjNDM7CWludCBvcmRlcjsKIAlzdHJ1Y3QgcGFnZSAqcGFnZTsKIH07CiAKZGlmZiAtLWdpdCBhL21tL3BhZ2VfYWxsb2MuYyBiL21tL3BhZ2VfYWxsb2MuYwppbmRleCBlZTkwMmE0NjhjMmY1Yi4uNTc1YTk5YTRjNzIzODQgMTAwNjQ0Ci0tLSBhL21tL3BhZ2VfYWxsb2MuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9wYWdlX2FsbG9jLmMKQEAgLTcxOCw3ICYjNDM7NzE4LDcgQEAgc3RhdGljIGlubGluZSBzdHJ1Y3QgY2FwdHVyZV9jb250cm9sICp0YXNrX2NhcGMoc3RydWN0IHpvbmUgKnpvbmUpCiB7CiAJc3RydWN0IGNhcHR1cmVfY29udHJvbCAqY2FwYyA9IGN1cnJlbnQtJmd0O2NhcHR1cmVfY29udHJvbDsKIAotCXJldHVybiB1bmxpa2VseShjYXBjKSAmYW1wOyZhbXA7CiYjNDM7CXJldHVybiB1bmxpa2VseShjYXBjICZhbXA7JmFtcDsgY2FwYy0mZ3Q7Y2MpICZhbXA7JmFtcDsKIAkJIShjdXJyZW50LSZndDtmbGFncyAmYW1wOyBQRl9LVEhSRUFEKSAmYW1wOyZhbXA7CiAJCSFjYXBjLSZndDtwYWdlICZhbXA7JmFtcDsKIAkJY2FwYy0mZ3Q7Y2MtJmd0O3pvbmUgPT0gem9uZSA/IGNhcGMgOiBOVUxMOwpAQCAtNzI4LDcgJiM0Mzs3MjgsNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wKIGNvbXBhY3Rpb25fY2FwdHVyZShzdHJ1Y3QgY2FwdHVyZV9jb250cm9sICpjYXBjLCBzdHJ1Y3QgcGFnZSAqcGFnZSwKIAkJICAgaW50IG9yZGVyLCBpbnQgbWlncmF0ZXR5cGUpCiB7Ci0JaWYgKCFjYXBjIHx8IG9yZGVyICE9IGNhcGMtJmd0O2NjLSZndDtvcmRlcikKJiM0MzsJaWYgKCFjYXBjIHx8IG9yZGVyICE9IGNhcGMtJmd0O29yZGVyKQogCQlyZXR1cm4gZmFsc2U7CiAKIAkvKiBEbyBub3QgYWNjaWRlbnRhbGx5IHBvbGx1dGUgQ01BIG9yIGlzb2xhdGVkIHJlZ2lvbnMqLwpAQCAtNzQ4LDcgJiM0Mzs3NDgsNyBAQCBjb21wYWN0aW9uX2NhcHR1cmUoc3RydWN0IGNhcHR1cmVfY29udHJvbCAqY2FwYywgc3RydWN0IHBhZ2UgKnBhZ2UsCiAJCXJldHVybiBmYWxzZTsKIAogCWlmIChtaWdyYXRldHlwZSAhPSBjYXBjLSZndDtjYy0mZ3Q7bWlncmF0ZXR5cGUpCi0JCXRyYWNlX21tX3BhZ2VfYWxsb2NfZXh0ZnJhZyhwYWdlLCBjYXBjLSZndDtjYy0mZ3Q7b3JkZXIsIG9yZGVyLAomIzQzOwkJdHJhY2VfbW1fcGFnZV9hbGxvY19leHRmcmFnKHBhZ2UsIGNhcGMtJmd0O29yZGVyLCBvcmRlciwKIAkJCQkJICAgIGNhcGMtJmd0O2NjLSZndDttaWdyYXRldHlwZSwgbWlncmF0ZXR5cGUpOwogCiAJY2FwYy0mZ3Q7cGFnZSA9IHBhZ2U7CkBAIC00MTQ2LDIxICYjNDM7NDE0Niw1OSBAQCBfX2FsbG9jX3BhZ2VzX2RpcmVjdF9jb21wYWN0KGdmcF90IGdmcF9tYXNrLCB1bnNpZ25lZCBpbnQgb3JkZXIsCiAJc3RydWN0IHBhZ2UgKnBhZ2UgPSBOVUxMOwogCXVuc2lnbmVkIGxvbmcgcGZsYWdzOwogCXVuc2lnbmVkIGludCBub3JlY2xhaW1fZmxhZzsKJiM0MzsJc3RydWN0IGNhcHR1cmVfY29udHJvbCBjYXBjID0gewomIzQzOwkJLm9yZGVyID0gb3JkZXIsCiYjNDM7CQkucGFnZSA9IE5VTEwsCiYjNDM7CX07CiYjNDM7CWludCBjb21wYWN0X29yZGVyID0gb3JkZXI7CiAKLQlpZiAoIW9yZGVyKQomIzQzOwkvKgomIzQzOwkgKiBJZiBmYWxsYmFja3MgYXJlIG5vdCBwZXJtaXR0ZWQgKGRlZnJhZ19tb2RlKSwgd2UgZWl0aGVyCiYjNDM7CSAqIG5lZWQgdG8gcmVjbGFpbSBzcGFjZSBpbiBhIGJsb2NrIG9mIG1hdGNoaW5nIHR5cGUsIG9yIGNsZWFyCiYjNDM7CSAqIG91dCBhbiBlbnRpcmUgYmxvY2sgdG8gYWxsb3cgX19ybXF1ZXVlX2NsYWltKCkgdG8gY29udmVydC4KJiM0MzsJICoKJiM0MzsJICogUmVjbGFpbSBieSBpdHNlbGYgaXMgcHJpbWFyaWx5IGZyZWVpbmcgc3BhY2UgaW4gbW92YWJsZQomIzQzOwkgKiBibG9ja3MsIHNpbmNlIHRoYXQmIzM5O3Mgd2hlcmUgdGhlIExSVSBwYWdlcyBsaXZlLiBTbyB0aGlzCiYjNDM7CSAqIHdvcmtzIGZvciBtb3ZhYmxlIHJlcXVlc3RzLCBidXQgbm90IGZvciBvdGhlcnMuCiYjNDM7CSAqCiYjNDM7CSAqIEZvciB0aG9zZSwgcHJvbW90ZSB0aGUgb3JkZXIgdG8gaGVscCBtYWtlIGJsb2NrcywgaW5zdGVhZAomIzQzOwkgKiBvZiBzcGlubmluZyBpbiByZWNsYWltIGFsb25lIHVucHJvZHVjdGl2ZWx5LgomIzQzOwkgKi8KJiM0MzsJaWYgKChhbGxvY19mbGFncyAmYW1wOyBBTExPQ19OT0ZSQUdNRU5UKSAmYW1wOyZhbXA7IGFjLSZndDttaWdyYXRldHlwZSAhPSBNSUdSQVRFX01PVkFCTEUpCiYjNDM7CQljb21wYWN0X29yZGVyID0gbWF4KG9yZGVyLCBwYWdlYmxvY2tfb3JkZXIpOwomIzQzOwomIzQzOwlpZiAoIWNvbXBhY3Rfb3JkZXIpCiAJCXJldHVybiBOVUxMOwogCiYjNDM7CS8qCiYjNDM7CSAqIE1ha2Ugc3VyZSB0aGUgc3RydWN0cyBhcmUgcmVhbGx5IGluaXRpYWxpemVkIGJlZm9yZSB3ZSBleHBvc2UgdGhlCiYjNDM7CSAqIGNhcHR1cmUgY29udHJvbCwgaW4gY2FzZSB3ZSBhcmUgaW50ZXJydXB0ZWQgYW5kIHRoZSBpbnRlcnJ1cHQgaGFuZGxlcgomIzQzOwkgKiBmcmVlcyBhIHBhZ2UuCiYjNDM7CSAqLwomIzQzOwliYXJyaWVyKCk7CiYjNDM7CVdSSVRFX09OQ0UoY3VycmVudC0mZ3Q7Y2FwdHVyZV9jb250cm9sLCAmYW1wO2NhcGMpOwomIzQzOwogCXBzaV9tZW1zdGFsbF9lbnRlcigmYW1wO3BmbGFncyk7CiAJZGVsYXlhY2N0X2NvbXBhY3Rfc3RhcnQoKTsKJiM0MzsJZnNfcmVjbGFpbV9hY3F1aXJlKGdmcF9tYXNrKTsKIAlub3JlY2xhaW1fZmxhZyA9IG1lbWFsbG9jX25vcmVjbGFpbV9zYXZlKCk7CiAKLQkqY29tcGFjdF9yZXN1bHQgPSB0cnlfdG9fY29tcGFjdF9wYWdlcyhnZnBfbWFzaywgb3JkZXIsIGFsbG9jX2ZsYWdzLCBhYywKLQkJCQkJCQkJcHJpbywgJmFtcDtwYWdlKTsKJiM0MzsJKmNvbXBhY3RfcmVzdWx0ID0gdHJ5X3RvX2NvbXBhY3RfcGFnZXMoZ2ZwX21hc2ssIGNvbXBhY3Rfb3JkZXIsCiYjNDM7CQkJCQkgICAgICAgYWxsb2NfZmxhZ3MsIGFjLCBwcmlvLCAmYW1wO2NhcGMpOwogCiAJbWVtYWxsb2Nfbm9yZWNsYWltX3Jlc3RvcmUobm9yZWNsYWltX2ZsYWcpOwomIzQzOwlmc19yZWNsYWltX3JlbGVhc2UoZ2ZwX21hc2spOwogCXBzaV9tZW1zdGFsbF9sZWF2ZSgmYW1wO3BmbGFncyk7CiAJZGVsYXlhY2N0X2NvbXBhY3RfZW5kKCk7CiAKJiM0MzsJLyoKJiM0MzsJICogTWFrZSBzdXJlIHdlIGhpZGUgY2FwdHVyZSBjb250cm9sIGZpcnN0IGJlZm9yZSB3ZSByZWFkIHRoZSBjYXB0dXJlZAomIzQzOwkgKiBwYWdlIHBvaW50ZXIsIG90aGVyd2lzZSBhbiBpbnRlcnJ1cHQgY291bGQgZnJlZSBhbmQgY2FwdHVyZSBhIHBhZ2UKJiM0MzsJICogYW5kIHdlIHdvdWxkIGxlYWsgaXQuCiYjNDM7CSAqLwomIzQzOwlXUklURV9PTkNFKGN1cnJlbnQtJmd0O2NhcHR1cmVfY29udHJvbCwgTlVMTCk7CiYjNDM7CXBhZ2UgPSBSRUFEX09OQ0UoY2FwYy5wYWdlKTsKJiM0MzsKIAlpZiAoKmNvbXBhY3RfcmVzdWx0ID09IENPTVBBQ1RfU0tJUFBFRCB8fAogCSAgICAqY29tcGFjdF9yZXN1bHQgPT0gQ09NUEFDVF9ERUZFUlJFRCkKIAkJcmV0dXJuIE5VTEw7CkBAIC00MTgyLDcgJiM0Mzs0MjIwLDcgQEAgX19hbGxvY19wYWdlc19kaXJlY3RfY29tcGFjdChnZnBfdCBnZnBfbWFzaywgdW5zaWduZWQgaW50IG9yZGVyLAogCQlzdHJ1Y3Qgem9uZSAqem9uZSA9IHBhZ2Vfem9uZShwYWdlKTsKIAogCQl6b25lLSZndDtjb21wYWN0X2Jsb2Nrc2tpcF9mbHVzaCA9IGZhbHNlOwotCQljb21wYWN0aW9uX2RlZmVyX3Jlc2V0KHpvbmUsIG9yZGVyLCB0cnVlKTsKJiM0MzsJCWNvbXBhY3Rpb25fZGVmZXJfcmVzZXQoem9uZSwgY29tcGFjdF9vcmRlciwgdHJ1ZSk7CiAJCWNvdW50X3ZtX2V2ZW50KENPTVBBQ1RTVUNDRVNTKTsKIAkJcmV0dXJuIHBhZ2U7CiAJfQpAQCAtNDQyMiw5ICYjNDM7NDQ2MCwxNCBAQCBfX2FsbG9jX3BhZ2VzX2RpcmVjdF9yZWNsYWltKGdmcF90IGdmcF9tYXNrLCB1bnNpZ25lZCBpbnQgb3JkZXIsCiAJc3RydWN0IHBhZ2UgKnBhZ2UgPSBOVUxMOwogCXVuc2lnbmVkIGxvbmcgcGZsYWdzOwogCWJvb2wgZHJhaW5lZCA9IGZhbHNlOwomIzQzOwlpbnQgcmVjbGFpbV9vcmRlciA9IG9yZGVyOwomIzQzOwomIzQzOwkvKiBNYXRjaCB0aGUgc2xvd3BhdGggY29tcGFjdGlvbiBwcm9tb3Rpb24gaW4gX19hbGxvY19wYWdlc19kaXJlY3RfY29tcGFjdCAqLwomIzQzOwlpZiAoKGFsbG9jX2ZsYWdzICZhbXA7IEFMTE9DX05PRlJBR01FTlQpICZhbXA7JmFtcDsgYWMtJmd0O21pZ3JhdGV0eXBlICE9IE1JR1JBVEVfTU9WQUJMRSkKJiM0MzsJCXJlY2xhaW1fb3JkZXIgPSBtYXgob3JkZXIsIHBhZ2VibG9ja19vcmRlcik7CiAKIAlwc2lfbWVtc3RhbGxfZW50ZXIoJmFtcDtwZmxhZ3MpOwotCSpkaWRfc29tZV9wcm9ncmVzcyA9IF9fcGVyZm9ybV9yZWNsYWltKGdmcF9tYXNrLCBvcmRlciwgYWMpOwomIzQzOwkqZGlkX3NvbWVfcHJvZ3Jlc3MgPSBfX3BlcmZvcm1fcmVjbGFpbShnZnBfbWFzaywgcmVjbGFpbV9vcmRlciwgYWMpOwogCWlmICh1bmxpa2VseSghKCpkaWRfc29tZV9wcm9ncmVzcykpKQogCQlnb3RvIG91dDsKIAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNiAyMDoyMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MzE0CgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogMzY0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgTWVtb3J5IENvbXBhY3Rpb24gUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7dmUgZ290IHRoaXMgcGF0Y2ggaGVyZSB0aGF04oCZcyB0aW5rZXJpbmcgd2l0aCBtZW1vcnkgY29tcGFjdGlvbiBhbmQgYWxsb2NhdGlvbiwgc3BlY2lmaWNhbGx5IHdpdGggaG93IHdlIGhhbmRsZSBjb21wYWN0aW9uIG9yZGVycyBhbmQgcGFnZSBjYXB0dXJlIGluIGB0cnlfdG9fY29tcGFjdF9wYWdlc2AgYW5kIGBfX2FsbG9jX3BhZ2VzX2RpcmVjdF9jb21wYWN0YC4gSXQgc2VlbXMgbGlrZSB0aGUgY29yZSBsb2dpYyBpcyBiZWluZyB0d2Vha2VkLiBUaGlzIGlzIGRlZmluaXRlbHkgd29ydGggYSBjbG9zZXIgbG9vaywgZ2l2ZW4gdGhhdCB0aGlzIHRvdWNoZXMgdXBvbiBgcGFnZWJsb2NrX29yZGVyYCB3aGVuIGBBTExPQ19OT0ZSQUdNRU5UYCBpcyBzZXQgYW5kIHRoZSBtaWdyYXRpb24gdHlwZSBpc27igJl0IGBNSUdSQVRFX01PVkFCTEVgLiBUaGUgcGF0Y2ggYWxzbyBzZWVtcyB0byBiZSBhZmZlY3RpbmcgYHN1aXRhYmxlX21pZ3JhdGlvbl9zb3VyY2VgIGFuZCBgZmFzdF9maW5kX21pZ3JhdGVibG9ja2AsIHdoaWNoIGFyZSBjcnVjaWFsIHdpdGhpbiB0aGUgY29tcGFjdGlvbiBmcmFtZXdvcmsuCgpHaXZlbiB0aGF0IHRoaXMgaXMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBjb2RlLCBpdCYjMzk7cyBkZWZpbml0ZWx5IGhpZ2gtdmFsdWUgZm9yIGZ1enppbmcuIFdlIG5lZWQgdG8gaWRlbnRpZnkgdGhlIGtleSBmdW5jdGlvbnMgdG8gZm9jdXMgb3VyIGVmZm9ydHMuCgpCYXNlZCBvbiB0aGUgY29kZSBjaGFuZ2VzLCBpdCBsb29rcyBsaWtlIHdlJiMzOTtyZSB6ZXJvaW5nIGluIG9uOiBgc3VpdGFibGVfbWlncmF0aW9uX3NvdXJjZWAsIGBmYXN0X2ZpbmRfbWlncmF0ZWJsb2NrYCwgYGNvbXBhY3Rfem9uZV9vcmRlcmAsIGB0cnlfdG9fY29tcGFjdF9wYWdlc2AsIGBjb21wYWN0aW9uX2NhcHR1cmVgLCBgX19hbGxvY19wYWdlc19kaXJlY3RfY29tcGFjdGAsIGFuZCBgX19hbGxvY19wYWdlc19kaXJlY3RfcmVjbGFpbWAuCgpgX19hbGxvY19wYWdlc19kaXJlY3RfY29tcGFjdGAgYW5kIGBfX2FsbG9jX3BhZ2VzX2RpcmVjdF9yZWNsYWltYCBhcmUgcGFydCBvZiB0aGUgcGFnZSBhbGxvY2F0b3Igc2xvdyBwYXRoLCBhcyBleHBlY3RlZC4gYHRyeV90b19jb21wYWN0X3BhZ2VzYCBpcyB0aGUgZGlyZWN0IGNvbXBhY3Rpb24gZW50cnkgcG9pbnQsIHdoaWNoIG1ha2VzIGl0IGEgY3JpdGljYWwgYXJlYS4gYGNvbXBhY3Rfem9uZV9vcmRlcmAgaXMgYSBzdGF0aWMgZnVuY3Rpb24sIGFuZCBzbyBhcmUgYHN1aXRhYmxlX21pZ3JhdGlvbl9zb3VyY2VgIGFuZCBgZmFzdF9maW5kX21pZ3JhdGVibG9ja2AuCgpJIHNob3VsZCBjaGVjayBpZiB0aGVyZSBhcmUgYW55IHNwZWNpZmljIGtlcm5lbCBjb25maWd1cmF0aW9ucyByZWxldmFudCB0byBjb21wYWN0aW9uLCBsaWtlIGBDT05GSUdfQ09NUEFDVElPTmAuIExldCYjMzk7cyBncmVwIGZvciB0aGF0IGFuZCBhbHNvIGZvciBgdHJ5X3RvX2NvbXBhY3RfcGFnZXNgIHRvIGdldCBhIGJyb2FkZXIgdmlldyBvZiBob3cgdGhlc2UgY2hhbmdlcyBhcmUgdGllZCBpbnRvIHRoZSByZXN0IG9mIHRoZSBzeXN0ZW0uIFRoaXMgd2lsbCBnaXZlIG1lIGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgaG93IHRoZSBjb2RlIG1pZ2h0IGJlaGF2ZSBpbiBkaWZmZXJlbnQgc2NlbmFyaW9zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDIwOjIyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3RyeV90b19jb21wYWN0X3BhZ2VzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvY29tcGFjdGlvbi5oPTExPWVudW0gY29tcGFjdF9wcmlvcml0eSB7XG4tLVxuaW5jbHVkZS9saW51eC9jb21wYWN0aW9uLmgtMjAtXG5pbmNsdWRlL2xpbnV4L2NvbXBhY3Rpb24uaDoyMTovKiBSZXR1cm4gdmFsdWVzIGZvciBjb21wYWN0X3pvbmUoKSBhbmQgdHJ5X3RvX2NvbXBhY3RfcGFnZXMoKSAqL1xuaW5jbHVkZS9saW51eC9jb21wYWN0aW9uLmgtMjItLyogV2hlbiBhZGRpbmcgbmV3IHN0YXRlcywgcGxlYXNlIGFkanVzdCBpbmNsdWRlL3RyYWNlL2V2ZW50cy9jb21wYWN0aW9uLmggKi9cbi0tXG5pbmNsdWRlL2xpbnV4L2NvbXBhY3Rpb24uaD05Mj1leHRlcm4gaW50IGZyYWdtZW50YXRpb25faW5kZXgoc3RydWN0IHpvbmUgKnpvbmUsIHVuc2lnbmVkIGludCBvcmRlcik7XG5pbmNsdWRlL2xpbnV4L2NvbXBhY3Rpb24uaDo5MzpleHRlcm4gZW51bSBjb21wYWN0X3Jlc3VsdCB0cnlfdG9fY29tcGFjdF9wYWdlcyhnZnBfdCBnZnBfbWFzayxcbmluY2x1ZGUvbGludXgvY29tcGFjdGlvbi5oLTk0LVx0XHR1bnNpZ25lZCBpbnQgb3JkZXIsIHVuc2lnbmVkIGludCBhbGxvY19mbGFncyxcbi0tXG5pbmNsdWRlL3RyYWNlL2V2ZW50cy9jb21wYWN0aW9uLmg9MTMxPVRSQUNFX0VWRU5UKG1tX2NvbXBhY3Rpb25fZW5kLFxuLS1cbmluY2x1ZGUvdHJhY2UvZXZlbnRzL2NvbXBhY3Rpb24uaC0xNjQtXG5pbmNsdWRlL3RyYWNlL2V2ZW50cy9jb21wYWN0aW9uLmg6MTY1OlRSQUNFX0VWRU5UKG1tX2NvbXBhY3Rpb25fdHJ5X3RvX2NvbXBhY3RfcGFnZXMsXG5pbmNsdWRlL3RyYWNlL2V2ZW50cy9jb21wYWN0aW9uLmgtMTY2LVxuLS1cbm1tL2NvbXBhY3Rpb24uYz0yNzkxPXN0YXRpYyBlbnVtIGNvbXBhY3RfcmVzdWx0IGNvbXBhY3Rfem9uZV9vcmRlcihzdHJ1Y3Qgem9uZSAqem9uZSwgaW50IG9yZGVyLFxuLS1cbm1tL2NvbXBhY3Rpb24uYy0yODMyLS8qKlxubW0vY29tcGFjdGlvbi5jOjI4MzM6ICogdHJ5X3RvX2NvbXBhY3RfcGFnZXMgLSBEaXJlY3QgY29tcGFjdCB0byBzYXRpc2Z5IGEgaGlnaC1vcmRlciBhbGxvY2F0aW9uXG5tbS9jb21wYWN0aW9uLmMtMjgzNC0gKiBAZ2ZwX21hc2s6IFRoZSBHRlAgbWFzayBvZiB0aGUgY3VycmVudCBhbGxvY2F0aW9uXG4tLVxubW0vY29tcGFjdGlvbi5jLTI4NDItICovXG5tbS9jb21wYWN0aW9uLmM6Mjg0MzplbnVtIGNvbXBhY3RfcmVzdWx0IHRyeV90b19jb21wYWN0X3BhZ2VzKGdmcF90IGdmcF9tYXNrLCB1bnNpZ25lZCBpbnQgb3JkZXIsXG5tbS9jb21wYWN0aW9uLmMtMjg0NC1cdFx0dW5zaWduZWQgaW50IGFsbG9jX2ZsYWdzLCBjb25zdCBzdHJ1Y3QgYWxsb2NfY29udGV4dCAqYWMsXG4tLVxubW0vY29tcGFjdGlvbi5jLTI4NTMtXG5tbS9jb21wYWN0aW9uLmM6Mjg1NDpcdHRyYWNlX21tX2NvbXBhY3Rpb25fdHJ5X3RvX2NvbXBhY3RfcGFnZXMob3JkZXIsIGdmcF9tYXNrLCBwcmlvKTtcbm1tL2NvbXBhY3Rpb24uYy0yODU1LVxuLS1cbm1tL3BhZ2VfYWxsb2MuYz00MTQyPV9fYWxsb2NfcGFnZXNfZGlyZWN0X2NvbXBhY3QoZ2ZwX3QgZ2ZwX21hc2ssIHVuc2lnbmVkIGludCBvcmRlcixcbi0tXG5tbS9wYWdlX2FsbG9jLmMtNDE4NS1cbm1tL3BhZ2VfYWxsb2MuYzo0MTg2Olx0KmNvbXBhY3RfcmVzdWx0ID0gdHJ5X3RvX2NvbXBhY3RfcGFnZXMoZ2ZwX21hc2ssIGNvbXBhY3Rfb3JkZXIsXG5tbS9wYWdlX2FsbG9jLmMtNDE4Ny1cdFx0XHRcdFx0ICAgICAgIGFsbG9jX2ZsYWdzLCBhYywgcHJpbywgXHUwMDI2Y2FwYyk7XG4tLVxubW0vdm1zY2FuLmM9NTk5OD1zdGF0aWMgYm9vbCBpbl9yZWNsYWltX2NvbXBhY3Rpb24oc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG4tLVxubW0vdm1zY2FuLmMtNjAxMS0gKiB0cnVlIGlmIG1vcmUgcGFnZXMgc2hvdWxkIGJlIHJlY2xhaW1lZCBzdWNoIHRoYXQgd2hlbiB0aGUgcGFnZSBhbGxvY2F0b3Jcbm1tL3Ztc2Nhbi5jOjYwMTI6ICogY2FsbHMgdHJ5X3RvX2NvbXBhY3RfcGFnZXMoKSB0aGF0IGl0IHdpbGwgaGF2ZSBlbm91Z2ggZnJlZSBwYWdlcyB0byBzdWNjZWVkLlxubW0vdm1zY2FuLmMtNjAxMy0gKiBJdCB3aWxsIGdpdmUgdXAgZWFybGllciB0aGFuIHRoYXQgaWYgdGhlcmUgaXMgZGlmZmljdWx0eSByZWNsYWltaW5nIHBhZ2VzLlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDIwOjIyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY5MTAKCQkJCQkJCW91dHB1dDogMjYKCQkJCQkJCXRob3VnaHRzOiAzNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgQ29tcGFjdGlvbiBhbmQgQWxsb2NhdGlvbiBDb2RlIERlcGVuZGVuY2llcyoqCgpBbHJpZ2h0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW50ZXJhY3Rpb24gYmV0d2VlbiBjb21wYWN0aW9uIGFuZCBhbGxvY2F0aW9uLiBCYXNlZCBvbiB0aGUgZmlsZSBwYXRocywgSSYjMzk7bSBkaXZpbmcgaW50byBgbW0vY29tcGFjdGlvbi5jYCBhbmQgYG1tL3BhZ2VfYWxsb2MuY2AuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBiZWZvcmUgSSBnZXQgdG9vIGRlZXAgaW50byB0aGUgd2VlZHMsIEkgc2hvdWxkIHF1aWNrbHkgdmVyaWZ5IGlmIGNvbXBhY3Rpb24gaXMgY29uZGl0aW9uYWxseSBjb21waWxlZC4gSSYjMzk7bGwgbmVlZCB0byBjb25maXJtIGlmIGBDT05GSUdfQ09NUEFDVElPTmAgaXMgZW5hYmxlZCBvciByZXF1aXJlZCB0byB1bmRlcnN0YW5kIHRoZSBjb2RlIHBhdGggcHJvcGVybHksIHBhcnRpY3VsYXJseSBob3cgaXQgYWZmZWN0cyB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgc2NoZW1lLiBJJiMzOTtsbCBzZWFyY2ggZm9yIHRoZSBwcmVwcm9jZXNzb3IgZGlyZWN0aXZlcyByZWxhdGVkIHRvIHRoYXQgY29uZmlnIG9wdGlvbiB0byBnZXQgYSBoYW5kbGUgb24gdGhlIGJ1aWxkIGNvbmZpZ3VyYXRpb24uIFRoYXQgd2lsbCBwcm92aWRlIGNydWNpYWwgY29udGV4dCBiZWZvcmUgZ29pbmcgYW55IGZ1cnRoZXIgd2l0aCB0aGUgYW5hbHlzaXMgb2YgdGhvc2UgZmlsZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjYgMjA6MjI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Q09ORklHX0NPTVBBQ1RJT04mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vY29tcGFjdGlvbi5jLTI4LVxubW0vY29tcGFjdGlvbi5jOjI5OiNpZmRlZiBDT05GSUdfQ09NUEFDVElPTlxubW0vY29tcGFjdGlvbi5jLTMwLS8qXG4tLVxubW0vY29tcGFjdGlvbi5jPTU5PXN0YXRpYyBpbmxpbmUgYm9vbCBpc192aWFfY29tcGFjdF9tZW1vcnkoaW50IG9yZGVyKSB7IHJldHVybiBmYWxzZTsgfVxuLS1cbm1tL2NvbXBhY3Rpb24uYy02MS1cbm1tL2NvbXBhY3Rpb24uYzo2MjojaWYgZGVmaW5lZCBDT05GSUdfQ09NUEFDVElPTiB8fCBkZWZpbmVkIENPTkZJR19DTUFcbm1tL2NvbXBhY3Rpb24uYy02My1cbi0tXG5tbS9jb21wYWN0aW9uLmM9OTE9c3RhdGljIHVuc2lnbmVkIGxvbmcgcmVsZWFzZV9mcmVlX2xpc3Qoc3RydWN0IGxpc3RfaGVhZCAqZnJlZXBhZ2VzKVxuLS1cbm1tL2NvbXBhY3Rpb24uYy0xMTUtXG5tbS9jb21wYWN0aW9uLmM6MTE2OiNpZmRlZiBDT05GSUdfQ09NUEFDVElPTlxubW0vY29tcGFjdGlvbi5jLTExNy1cbi0tXG5tbS9jb21wYWN0aW9uLmM9NDkwPXN0YXRpYyBib29sIHRlc3RfYW5kX3NldF9za2lwKHN0cnVjdCBjb21wYWN0X2NvbnRyb2wgKmNjLCBzdHJ1Y3QgcGFnZSAqcGFnZSlcbi0tXG5tbS9jb21wYWN0aW9uLmMtNDkzLX1cbm1tL2NvbXBhY3Rpb24uYzo0OTQ6I2VuZGlmIC8qIENPTkZJR19DT01QQUNUSU9OICovXG5tbS9jb21wYWN0aW9uLmMtNDk1LVxuLS1cbm1tL2NvbXBhY3Rpb24uYz0xMzM3PWlzb2xhdGVfbWlncmF0ZXBhZ2VzX3JhbmdlKHN0cnVjdCBjb21wYWN0X2NvbnRyb2wgKmNjLCB1bnNpZ25lZCBsb25nIHN0YXJ0X3Bmbixcbi0tXG5tbS9jb21wYWN0aW9uLmMtMTM3Mi1cbm1tL2NvbXBhY3Rpb24uYzoxMzczOiNlbmRpZiAvKiBDT05GSUdfQ09NUEFDVElPTiB8fCBDT05GSUdfQ01BICovXG5tbS9jb21wYWN0aW9uLmM6MTM3NDojaWZkZWYgQ09ORklHX0NPTVBBQ1RJT05cbm1tL2NvbXBhY3Rpb24uYy0xMzc1LVxuLS1cbm1tL2NvbXBhY3Rpb24uYz0zMzYxPXN1YnN5c19pbml0Y2FsbChrY29tcGFjdGRfaW5pdClcbm1tL2NvbXBhY3Rpb24uYy0zMzYyLVxubW0vY29tcGFjdGlvbi5jOjMzNjM6I2VuZGlmIC8qIENPTkZJR19DT01QQUNUSU9OICovXG4tLVxubW0vaW50ZXJuYWwuaD05OTk9c3RhdGljIGlubGluZSB2b2lkIHNwYXJzZV9pbml0X3N1YnNlY3Rpb25fbWFwKHVuc2lnbmVkIGxvbmcgcGZuLFxuLS1cbm1tL2ludGVybmFsLmgtMTAwNC1cbm1tL2ludGVybmFsLmg6MTAwNTojaWYgZGVmaW5lZCBDT05GSUdfQ09NUEFDVElPTiB8fCBkZWZpbmVkIENPTkZJR19DTUFcbm1tL2ludGVybmFsLmgtMTAwNi1cbi0tXG5tbS9pbnRlcm5hbC5oPTEwODE9dm9pZCBpbml0X2NtYV9yZXNlcnZlZF9wYWdlYmxvY2soc3RydWN0IHBhZ2UgKnBhZ2UpO1xubW0vaW50ZXJuYWwuaC0xMDgyLVxubW0vaW50ZXJuYWwuaDoxMDgzOiNlbmRpZiAvKiBDT05GSUdfQ09NUEFDVElPTiB8fCBDT05GSUdfQ01BICovXG5tbS9pbnRlcm5hbC5oLTEwODQtXG4tLVxubW0vbW1faW5pdC5jPTEzMzM9c3RhdGljIHZvaWQgX19pbml0IGNhbGN1bGF0ZV9ub2RlX3RvdGFscGFnZXMoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCxcbi0tXG5tbS9tbV9pbml0LmMtMTM3NS1cbm1tL21tX2luaXQuYzoxMzc2OiNpZmRlZiBDT05GSUdfQ09NUEFDVElPTlxubW0vbW1faW5pdC5jLTEzNzctc3RhdGljIHZvaWQgcGdkYXRfaW5pdF9rY29tcGFjdGQoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdClcbi0tXG5tbS9vb21fa2lsbC5jPTQ1Nj1zdGF0aWMgdm9pZCBkdW1wX2hlYWRlcihzdHJ1Y3Qgb29tX2NvbnRyb2wgKm9jKVxuLS1cbm1tL29vbV9raWxsLmMtNDYwLVx0XHRcdGN1cnJlbnQtXHUwMDNlc2lnbmFsLVx1MDAzZW9vbV9zY29yZV9hZGopO1xubW0vb29tX2tpbGwuYzo0NjE6XHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX0NPTVBBQ1RJT04pIFx1MDAyNlx1MDAyNiBvYy1cdTAwM2VvcmRlcilcbm1tL29vbV9raWxsLmMtNDYyLVx0XHRwcl93YXJuKFwmIzM0O0NPTVBBQ1RJT04gaXMgZGlzYWJsZWQhISFcXG5cJiMzNDspO1xuLS1cbm1tL3BhZ2VfYWxsb2MuYz03MTA9c3RhdGljIGlubGluZSB2b2lkIHNldF9idWRkeV9vcmRlcihzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgaW50IG9yZGVyKVxuLS1cbm1tL3BhZ2VfYWxsb2MuYy03MTUtXG5tbS9wYWdlX2FsbG9jLmM6NzE2OiNpZmRlZiBDT05GSUdfQ09NUEFDVElPTlxubW0vcGFnZV9hbGxvYy5jLTcxNy1zdGF0aWMgaW5saW5lIHN0cnVjdCBjYXB0dXJlX2NvbnRyb2wgKnRhc2tfY2FwYyhzdHJ1Y3Qgem9uZSAqem9uZSlcbi0tXG5tbS9wYWdlX2FsbG9jLmM9NzY1PWNvbXBhY3Rpb25fY2FwdHVyZShzdHJ1Y3QgY2FwdHVyZV9jb250cm9sICpjYXBjLCBzdHJ1Y3QgcGFnZSAqcGFnZSxcbi0tXG5tbS9wYWdlX2FsbG9jLmMtNzY5LX1cbm1tL3BhZ2VfYWxsb2MuYzo3NzA6I2VuZGlmIC8qIENPTkZJR19DT01QQUNUSU9OICovXG5tbS9wYWdlX2FsbG9jLmMtNzcxLVxuLS1cbm1tL3BhZ2VfYWxsb2MuYz00MDQ3PV9fYWxsb2NfcGFnZXNfbWF5X29vbShnZnBfdCBnZnBfbWFzaywgdW5zaWduZWQgaW50IG9yZGVyLFxuLS1cbm1tL3BhZ2VfYWxsb2MuYy00MTM4LVxubW0vcGFnZV9hbGxvYy5jOjQxMzk6I2lmZGVmIENPTkZJR19DT01QQUNUSU9OXG5tbS9wYWdlX2FsbG9jLmMtNDE0MC0vKiBUcnkgbWVtb3J5IGNvbXBhY3Rpb24gZm9yIGhpZ2gtb3JkZXIgYWxsb2NhdGlvbnMgYmVmb3JlIHJlY2xhaW0gKi9cbi0tXG5tbS9wYWdlX2FsbG9jLmM9NDMxNz1zaG91bGRfY29tcGFjdF9yZXRyeShnZnBfdCBnZnBfbWFzaywgc3RydWN0IGFsbG9jX2NvbnRleHQgKmFjLCBpbnQgb3JkZXIsXG4tLVxubW0vcGFnZV9hbGxvYy5jLTQzNDItfVxubW0vcGFnZV9hbGxvYy5jOjQzNDM6I2VuZGlmIC8qIENPTkZJR19DT01QQUNUSU9OICovXG5tbS9wYWdlX2FsbG9jLmMtNDM0NC1cbi0tXG5tbS92bXNjYW4uYz02MzMxPXN0YXRpYyB2b2lkIHNocmlua196b25lcyhzdHJ1Y3Qgem9uZWxpc3QgKnpvbmVsaXN0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbi0tXG5tbS92bXNjYW4uYy02MzcxLVx0XHRcdCAqL1xubW0vdm1zY2FuLmM6NjM3MjpcdFx0XHRpZiAoSVNfRU5BQkxFRChDT05GSUdfQ09NUEFDVElPTikgXHUwMDI2XHUwMDI2XG5tbS92bXNjYW4uYy02MzczLVx0XHRcdCAgICBzYy1cdTAwM2VvcmRlciBcdTAwM2UgUEFHRV9BTExPQ19DT1NUTFlfT1JERVIgXHUwMDI2XHUwMDI2XG4tLVxubW0vdm1zdGF0LmM9MTA0Mj12b2lkIG1lbW1hcF9wYWdlc19hZGQobG9uZyBkZWx0YSlcbi0tXG5tbS92bXN0YXQuYy0xMDQ2LVxubW0vdm1zdGF0LmM6MTA0NzojaWZkZWYgQ09ORklHX0NPTVBBQ1RJT05cbm1tL3Ztc3RhdC5jLTEwNDgtXG4tLVxubW0vdm1zdGF0LmM9MTE4Nz1jb25zdCBjaGFyICogY29uc3Qgdm1zdGF0X3RleHRbXSA9IHtcbi0tXG5tbS92bXN0YXQuYy0xMzcwLSNlbmRpZlxubW0vdm1zdGF0LmM6MTM3MTojaWZkZWYgQ09ORklHX0NPTVBBQ1RJT05cbm1tL3Ztc3RhdC5jLTEzNzItXHRbSShDT01QQUNUTUlHUkFURV9TQ0FOTkVEKV1cdFx0PSBcJiMzNDtjb21wYWN0X21pZ3JhdGVfc2Nhbm5lZFwmIzM0Oyxcbi0tXG5tbS92bXN0YXQuYy0xNDk2LVxubW0vdm1zdGF0LmM6MTQ5NzojaWYgKGRlZmluZWQoQ09ORklHX0RFQlVHX0ZTKSBcdTAwMjZcdTAwMjYgZGVmaW5lZChDT05GSUdfQ09NUEFDVElPTikpIHx8IFxcXG5tbS92bXN0YXQuYy0xNDk4LSAgICAgZGVmaW5lZChDT05GSUdfUFJPQ19GUylcbi0tXG5tbS92bXN0YXQuYz0yMjY4PXZvaWQgX19pbml0IGluaXRfbW1faW50ZXJuYWxzKHZvaWQpXG4tLVxubW0vdm1zdGF0LmMtMjMwMS1cbm1tL3Ztc3RhdC5jOjIzMDI6I2lmIGRlZmluZWQoQ09ORklHX0RFQlVHX0ZTKSBcdTAwMjZcdTAwMjYgZGVmaW5lZChDT05GSUdfQ09NUEFDVElPTilcbm1tL3Ztc3RhdC5jLTIzMDMtXG4tLVxubW0venNtYWxsb2MuYz0xOTk9c3RydWN0IHpzX3Bvb2wge1xuLS1cbm1tL3pzbWFsbG9jLmMtMjEzLSNlbmRpZlxubW0venNtYWxsb2MuYzoyMTQ6I2lmZGVmIENPTkZJR19DT01QQUNUSU9OXG5tbS96c21hbGxvYy5jLTIxNS1cdHN0cnVjdCB3b3JrX3N0cnVjdCBmcmVlX3dvcms7XG4tLVxubW0venNtYWxsb2MuYz0zNjA9c3RhdGljIGJvb2wgWnNIdWdlUGFnZShzdHJ1Y3QgenNwYWdlICp6c3BhZ2UpXG4tLVxubW0venNtYWxsb2MuYy0zNjQtXG5tbS96c21hbGxvYy5jOjM2NTojaWZkZWYgQ09ORklHX0NPTVBBQ1RJT05cbm1tL3pzbWFsbG9jLmMtMzY2LXN0YXRpYyB2b2lkIGtpY2tfZGVmZXJyZWRfZnJlZShzdHJ1Y3QgenNfcG9vbCAqcG9vbCk7XG4tLVxubW0venNtYWxsb2MuYz05MzE9c3RhdGljIHN0cnVjdCB6c3BhZ2UgKmFsbG9jX3pzcGFnZShzdHJ1Y3QgenNfcG9vbCAqcG9vbCxcbi0tXG5tbS96c21hbGxvYy5jLTk0MS1cbm1tL3pzbWFsbG9jLmM6OTQyOlx0aWYgKCFJU19FTkFCTEVEKENPTkZJR19DT01QQUNUSU9OKSlcbm1tL3pzbWFsbG9jLmMtOTQzLVx0XHRnZnAgXHUwMDI2PSB+X19HRlBfTU9WQUJMRTtcbi0tXG5tbS96c21hbGxvYy5jPTE1OTQ9c3RhdGljIGludCBwdXRiYWNrX3pzcGFnZShzdHJ1Y3Qgc2l6ZV9jbGFzcyAqY2xhc3MsIHN0cnVjdCB6c3BhZ2UgKnpzcGFnZSlcbi0tXG5tbS96c21hbGxvYy5jLTE2MDMtXG5tbS96c21hbGxvYy5jOjE2MDQ6I2lmZGVmIENPTkZJR19DT01QQUNUSU9OXG5tbS96c21hbGxvYy5jLTE2MDUtLypcbi0tXG5tbS96c21hbGxvYy5jPTE2MDk9c3RhdGljIHZvaWQgbG9ja196c3BhZ2Uoc3RydWN0IHpzcGFnZSAqenNwYWdlKVxuLS1cbm1tL3pzbWFsbG9jLmMtMTY0NS19XG5tbS96c21hbGxvYy5jOjE2NDY6I2VuZGlmIC8qIENPTkZJR19DT01QQUNUSU9OICovXG5tbS96c21hbGxvYy5jLTE2NDctXG5tbS96c21hbGxvYy5jOjE2NDg6I2lmZGVmIENPTkZJR19DT01QQUNUSU9OXG5tbS96c21hbGxvYy5jLTE2NDktXG4tLVxubW0venNtYWxsb2MuYz0yMjM3PXN0YXRpYyBpbnQgX19pbml0IHpzX2luaXQodm9pZClcbi0tXG5tbS96c21hbGxvYy5jLTIyNDQtXG5tbS96c21hbGxvYy5jOjIyNDU6I2lmZGVmIENPTkZJR19DT01QQUNUSU9OXG5tbS96c21hbGxvYy5jLTIyNDYtXHRyYyA9IHNldF9tb3ZhYmxlX29wcyhcdTAwMjZ6c21hbGxvY19tb3BzLCBQR1RZX3pzbWFsbG9jKTtcbi0tXG5tbS96c21hbGxvYy5jPTIyNTY9c3RhdGljIHZvaWQgX19leGl0IHpzX2V4aXQodm9pZClcbm1tL3pzbWFsbG9jLmMtMjI1Ny17XG5tbS96c21hbGxvYy5jOjIyNTg6I2lmZGVmIENPTkZJR19DT01QQUNUSU9OXG5tbS96c21hbGxvYy5jLTIyNTktXHRzZXRfbW92YWJsZV9vcHMoTlVMTCwgUEdUWV96c21hbGxvYyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjYgMjA6MjI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTQyNgoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDIwMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEtlcm5lbCYjMzk7cyBNZW1vcnkgQ29tcGFjdGlvbiBJbXBsZW1lbnRhdGlvbioqCgpPa2F5LCBzbyB0aGUgcHJpbWFyeSBjb25maWd1cmF0aW9uIG9wdGlvbiBkcml2aW5nIHRoaXMgc2VlbXMgdG8gYmUgYENPTkZJR19DT01QQUNUSU9OYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIGNoYW5nZXMgaW1wYWN0IHRoZSBzeXN0ZW0uIEl0IGxvb2tzIGxpa2UgYF9fYWxsb2NfcGFnZXNfZGlyZWN0X2NvbXBhY3RgIGlzIGNvbmRpdGlvbmFsbHkgY29tcGlsZWQgYmFzZWQgb24gYENPTkZJR19DT01QQUNUSU9OYCwgd2hpY2ggaXMgYSBrZXkgcGllY2Ugb2YgaW5mb3JtYXRpb24uIEkgc2hvdWxkIGxvb2sgZm9yIGFueSBvdGhlciByZWxhdGVkIGNvbmZpZ3VyYXRpb24gb3B0aW9ucywganVzdCBpbiBjYXNlLgoKQWxyaWdodCwgbGV0JiMzOTtzIGJyZWFrIGRvd24gdGhlIGNvZGUgbW9kaWZpY2F0aW9ucy4gVGhlIHBhdGNoIHRhcmdldHMgYG1tL2NvbXBhY3Rpb24uY2AgYW5kIGBtbS9wYWdlX2FsbG9jLmNgLCBzbyB0aG9zZSBhcmUgdGhlIGFyZWFzIG9mIGludGVyZXN0LiBJbiBgbW0vY29tcGFjdGlvbi5jYCwgSSBzZWUgZnVuY3Rpb25zIGxpa2UgYHN1aXRhYmxlX21pZ3JhdGlvbl9zb3VyY2VgLCBgZmFzdF9maW5kX21pZ3JhdGVibG9ja2AsIGBjb21wYWN0X3pvbmVfb3JkZXJgLCBhbmQgYHRyeV90b19jb21wYWN0X3BhZ2VzYC4gVGhhdCYjMzk7cyB0aGUgZXhwZWN0ZWQgY29yZSBjb21wYWN0aW9uIGxvZ2ljLgoKTm93LCBpbiBgbW0vcGFnZV9hbGxvYy5jYCwgSSYjMzk7bSBzZWVpbmcgYGNvbXBhY3Rpb25fY2FwdHVyZWAsIGBfX2FsbG9jX3BhZ2VzX2RpcmVjdF9jb21wYWN0YCwgYW5kIGBfX2FsbG9jX3BhZ2VzX2RpcmVjdF9yZWNsYWltYC4gSG1tLCB3YWl0IGEgc2Vjb25kLi4uIGBfX2FsbG9jX3BhZ2VzX2RpcmVjdF9yZWNsYWltYCBpc24mIzM5O3QgZ3VhcmRlZCBieSBhbiBgI2lmZGVmIENPTkZJR19DT01QQUNUSU9OYCBwcmVwcm9jZXNzb3IgZGlyZWN0aXZlLCB3aGljaCBpcyBpbnRlcmVzdGluZy4gSSYjMzk7bGwgbmVlZCB0byBjaGVjayB0aGUgY29kZSBhcm91bmQgbGluZSA0NDYwIGluIGBtbS9wYWdlX2FsbG9jLmNgIHRvIHVuZGVyc3RhbmQgdGhlIGV4YWN0IGNvbnRleHQgdGhlcmUuIFRoaXMgaW1wbGllcyB0aGF0IGV2ZW4gd2l0aG91dCBhY3RpdmUgY29tcGFjdGlvbiwgc29tZSBkaXJlY3QgcmVjbGFpbSBmdW5jdGlvbmFsaXR5IG1pZ2h0IHN0aWxsIGJlIGludGVyYWN0aW5nIHdpdGggdGhlIHJlbGF0ZWQgY29kZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNiAyMDoyMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL3BhZ2VfYWxsb2MuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDQ0NTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7NDQ1MDpcdFxuNDQ1MTpcdFx0cmV0dXJuIHByb2dyZXNzO1xuNDQ1MjpcdH1cbjQ0NTM6XHRcbjQ0NTQ6XHQvKiBUaGUgcmVhbGx5IHNsb3cgYWxsb2NhdG9yIHBhdGggd2hlcmUgd2UgZW50ZXIgZGlyZWN0IHJlY2xhaW0gKi9cbjQ0NTU6XHRzdGF0aWMgaW5saW5lIHN0cnVjdCBwYWdlICpcbjQ0NTY6XHRfX2FsbG9jX3BhZ2VzX2RpcmVjdF9yZWNsYWltKGdmcF90IGdmcF9tYXNrLCB1bnNpZ25lZCBpbnQgb3JkZXIsXG40NDU3Olx0XHRcdHVuc2lnbmVkIGludCBhbGxvY19mbGFncywgY29uc3Qgc3RydWN0IGFsbG9jX2NvbnRleHQgKmFjLFxuNDQ1ODpcdFx0XHR1bnNpZ25lZCBsb25nICpkaWRfc29tZV9wcm9ncmVzcylcbjQ0NTk6XHR7XG40NDYwOlx0XHRzdHJ1Y3QgcGFnZSAqcGFnZSA9IE5VTEw7XG40NDYxOlx0XHR1bnNpZ25lZCBsb25nIHBmbGFncztcbjQ0NjI6XHRcdGJvb2wgZHJhaW5lZCA9IGZhbHNlO1xuNDQ2MzpcdFx0aW50IHJlY2xhaW1fb3JkZXIgPSBvcmRlcjtcbjQ0NjQ6XHRcbjQ0NjU6XHRcdC8qIE1hdGNoIHRoZSBzbG93cGF0aCBjb21wYWN0aW9uIHByb21vdGlvbiBpbiBfX2FsbG9jX3BhZ2VzX2RpcmVjdF9jb21wYWN0ICovXG40NDY2Olx0XHRpZiAoKGFsbG9jX2ZsYWdzIFx1MDAyNiBBTExPQ19OT0ZSQUdNRU5UKSBcdTAwMjZcdTAwMjYgYWMtXHUwMDNlbWlncmF0ZXR5cGUgIT0gTUlHUkFURV9NT1ZBQkxFKVxuNDQ2NzpcdFx0XHRyZWNsYWltX29yZGVyID0gbWF4KG9yZGVyLCBwYWdlYmxvY2tfb3JkZXIpO1xuNDQ2ODpcdFxuNDQ2OTpcdFx0cHNpX21lbXN0YWxsX2VudGVyKFx1MDAyNnBmbGFncyk7XG40NDcwOlx0XHQqZGlkX3NvbWVfcHJvZ3Jlc3MgPSBfX3BlcmZvcm1fcmVjbGFpbShnZnBfbWFzaywgcmVjbGFpbV9vcmRlciwgYWMpO1xuNDQ3MTpcdFx0aWYgKHVubGlrZWx5KCEoKmRpZF9zb21lX3Byb2dyZXNzKSkpXG40NDcyOlx0XHRcdGdvdG8gb3V0O1xuNDQ3MzpcdFxuNDQ3NDpcdHJldHJ5OlxuNDQ3NTpcdFx0cGFnZSA9IGdldF9wYWdlX2Zyb21fZnJlZWxpc3QoZ2ZwX21hc2ssIG9yZGVyLCBhbGxvY19mbGFncywgYWMpO1xuNDQ3NjpcdFxuNDQ3NzpcdFx0LypcbjQ0Nzg6XHRcdCAqIElmIGFuIGFsbG9jYXRpb24gZmFpbGVkIGFmdGVyIGRpcmVjdCByZWNsYWltLCBpdCBjb3VsZCBiZSBiZWNhdXNlXG40NDc5Olx0XHQgKiBwYWdlcyBhcmUgcGlubmVkIG9uIHRoZSBwZXItY3B1IGxpc3RzIG9yIGluIGhpZ2ggYWxsb2MgcmVzZXJ2ZXMuXG40NDgwOlx0XHQgKiBTaHJpbmsgdGhlbSBhbmQgdHJ5IGFnYWluXG40NDgxOlx0XHQgKi9cbjQ0ODI6XHRcdGlmICghcGFnZSBcdTAwMjZcdTAwMjYgIWRyYWluZWQpIHtcbjQ0ODM6XHRcdFx0dW5yZXNlcnZlX2hpZ2hhdG9taWNfcGFnZWJsb2NrKGFjLCBmYWxzZSk7XG40NDg0Olx0XHRcdGRyYWluX2FsbF9wYWdlcyhOVUxMKTtcbjQ0ODU6XHRcdFx0ZHJhaW5lZCA9IHRydWU7XG40NDg2Olx0XHRcdGdvdG8gcmV0cnk7XG40NDg3Olx0XHR9XG40NDg4Olx0b3V0OlxuNDQ4OTpcdFx0cHNpX21lbXN0YWxsX2xlYXZlKFx1MDAyNnBmbGFncyk7XG40NDkwOlx0XG40NDkxOlx0XHRyZXR1cm4gcGFnZTtcbjQ0OTI6XHR9XG40NDkzOlx0XG40NDk0Olx0c3RhdGljIHZvaWQgd2FrZV9hbGxfa3N3YXBkcyh1bnNpZ25lZCBpbnQgb3JkZXIsIGdmcF90IGdmcF9tYXNrLFxuNDQ5NTpcdFx0XHRcdCAgICAgY29uc3Qgc3RydWN0IGFsbG9jX2NvbnRleHQgKmFjKVxuNDQ5NjpcdHtcbjQ0OTc6XHRcdHN0cnVjdCB6b25lcmVmICp6O1xuNDQ5ODpcdFx0c3RydWN0IHpvbmUgKnpvbmU7XG40NDk5Olx0XHRwZ19kYXRhX3QgKmxhc3RfcGdkYXQgPSBOVUxMO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDIwOjIyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwNzIwCgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogNTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzOgoKKipEaXZpbmcgaW50byB0aGUgTWVtb3J5IEFsbG9jYXRpb24gQ29kZSoqCgpBbHJpZ2h0LCBzbyBgX19hbGxvY19wYWdlc19kaXJlY3RfcmVjbGFpbWAgaXMgZGVmaW5pdGVseSBpbiB0aGUgYnVpbGQsIG5vIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIHRoZXJlLiBUaGF0JiMzOTtzIGdvb2QgdG8ga25vdy4gTm93LCBgX19hbGxvY19wYWdlc19kaXJlY3RfY29tcGFjdGAuLi4gYWgsIHRoYXQmIzM5O3MgdHVja2VkIGJlaGluZCBhIGAjaWZkZWYgQ09ORklHX0NPTVBBQ1RJT05gLiBNYWtlcyBzZW5zZS4gU28sIGl0cyBwcmVzZW5jZSBpbiB0aGUga2VybmVsIGltYWdlIGRlcGVuZHMgb24gdGhhdCBjb25maWd1cmF0aW9uIG9wdGlvbiBiZWluZyBlbmFibGVkLiBUaW1lIHRvIGRpZyBpbiBhIGJpdCBmdXJ0aGVyLiBMZXQgbWUganVtcCBvdmVyIHRvIGBtbS9wYWdlX2FsbG9jLmNgIGFuZCB0YWtlIGEgbG9vayBhcm91bmQgbGluZSA0MTQ2LiBUaGF0JiMzOTtzIGEgcmVhc29uYWJsZSBwbGFjZSB0byBzdGFydCwgZ2l2ZW4gdGhlIGZ1bmN0aW9uIG5hbWVzLiBIb3BlZnVsbHksIEkgY2FuIHNlZSBob3cgdGhlc2UgdHdvIGZ1bmN0aW9ucyBhcmUgY2FsbGVkIGFuZCBob3cgdGhleSBpbnRlcmFjdC4gTGV0JiMzOTtzIHNlZSB3aGF0IHdlIGZpbmQgdGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDIwOjIyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vcGFnZV9hbGxvYy5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNDEzMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDs0MTMwOlx0XHRyZXR1cm4gcGFnZTtcbjQxMzE6XHR9XG40MTMyOlx0XG40MTMzOlx0LypcbjQxMzQ6XHQgKiBNYXhpbXVtIG51bWJlciBvZiBjb21wYWN0aW9uIHJldHJpZXMgd2l0aCBhIHByb2dyZXNzIGJlZm9yZSBPT01cbjQxMzU6XHQgKiBraWxsZXIgaXMgY29uc2lkZXIgYXMgdGhlIG9ubHkgd2F5IHRvIG1vdmUgZm9yd2FyZC5cbjQxMzY6XHQgKi9cbjQxMzc6XHQjZGVmaW5lIE1BWF9DT01QQUNUX1JFVFJJRVMgMTZcbjQxMzg6XHRcbjQxMzk6XHQjaWZkZWYgQ09ORklHX0NPTVBBQ1RJT05cbjQxNDA6XHQvKiBUcnkgbWVtb3J5IGNvbXBhY3Rpb24gZm9yIGhpZ2gtb3JkZXIgYWxsb2NhdGlvbnMgYmVmb3JlIHJlY2xhaW0gKi9cbjQxNDE6XHRzdGF0aWMgc3RydWN0IHBhZ2UgKlxuNDE0MjpcdF9fYWxsb2NfcGFnZXNfZGlyZWN0X2NvbXBhY3QoZ2ZwX3QgZ2ZwX21hc2ssIHVuc2lnbmVkIGludCBvcmRlcixcbjQxNDM6XHRcdFx0dW5zaWduZWQgaW50IGFsbG9jX2ZsYWdzLCBjb25zdCBzdHJ1Y3QgYWxsb2NfY29udGV4dCAqYWMsXG40MTQ0Olx0XHRcdGVudW0gY29tcGFjdF9wcmlvcml0eSBwcmlvLCBlbnVtIGNvbXBhY3RfcmVzdWx0ICpjb21wYWN0X3Jlc3VsdClcbjQxNDU6XHR7XG40MTQ2Olx0XHRzdHJ1Y3QgcGFnZSAqcGFnZSA9IE5VTEw7XG40MTQ3Olx0XHR1bnNpZ25lZCBsb25nIHBmbGFncztcbjQxNDg6XHRcdHVuc2lnbmVkIGludCBub3JlY2xhaW1fZmxhZztcbjQxNDk6XHRcdHN0cnVjdCBjYXB0dXJlX2NvbnRyb2wgY2FwYyA9IHtcbjQxNTA6XHRcdFx0Lm9yZGVyID0gb3JkZXIsXG40MTUxOlx0XHRcdC5wYWdlID0gTlVMTCxcbjQxNTI6XHRcdH07XG40MTUzOlx0XHRpbnQgY29tcGFjdF9vcmRlciA9IG9yZGVyO1xuNDE1NDpcdFxuNDE1NTpcdFx0LypcbjQxNTY6XHRcdCAqIElmIGZhbGxiYWNrcyBhcmUgbm90IHBlcm1pdHRlZCAoZGVmcmFnX21vZGUpLCB3ZSBlaXRoZXJcbjQxNTc6XHRcdCAqIG5lZWQgdG8gcmVjbGFpbSBzcGFjZSBpbiBhIGJsb2NrIG9mIG1hdGNoaW5nIHR5cGUsIG9yIGNsZWFyXG40MTU4Olx0XHQgKiBvdXQgYW4gZW50aXJlIGJsb2NrIHRvIGFsbG93IF9fcm1xdWV1ZV9jbGFpbSgpIHRvIGNvbnZlcnQuXG40MTU5Olx0XHQgKlxuNDE2MDpcdFx0ICogUmVjbGFpbSBieSBpdHNlbGYgaXMgcHJpbWFyaWx5IGZyZWVpbmcgc3BhY2UgaW4gbW92YWJsZVxuNDE2MTpcdFx0ICogYmxvY2tzLCBzaW5jZSB0aGF0JiMzOTtzIHdoZXJlIHRoZSBMUlUgcGFnZXMgbGl2ZS4gU28gdGhpc1xuNDE2MjpcdFx0ICogd29ya3MgZm9yIG1vdmFibGUgcmVxdWVzdHMsIGJ1dCBub3QgZm9yIG90aGVycy5cbjQxNjM6XHRcdCAqXG40MTY0Olx0XHQgKiBGb3IgdGhvc2UsIHByb21vdGUgdGhlIG9yZGVyIHRvIGhlbHAgbWFrZSBibG9ja3MsIGluc3RlYWRcbjQxNjU6XHRcdCAqIG9mIHNwaW5uaW5nIGluIHJlY2xhaW0gYWxvbmUgdW5wcm9kdWN0aXZlbHkuXG40MTY2Olx0XHQgKi9cbjQxNjc6XHRcdGlmICgoYWxsb2NfZmxhZ3MgXHUwMDI2IEFMTE9DX05PRlJBR01FTlQpIFx1MDAyNlx1MDAyNiBhYy1cdTAwM2VtaWdyYXRldHlwZSAhPSBNSUdSQVRFX01PVkFCTEUpXG40MTY4Olx0XHRcdGNvbXBhY3Rfb3JkZXIgPSBtYXgob3JkZXIsIHBhZ2VibG9ja19vcmRlcik7XG40MTY5Olx0XG40MTcwOlx0XHRpZiAoIWNvbXBhY3Rfb3JkZXIpXG40MTcxOlx0XHRcdHJldHVybiBOVUxMO1xuNDE3MjpcdFxuNDE3MzpcdFx0LypcbjQxNzQ6XHRcdCAqIE1ha2Ugc3VyZSB0aGUgc3RydWN0cyBhcmUgcmVhbGx5IGluaXRpYWxpemVkIGJlZm9yZSB3ZSBleHBvc2UgdGhlXG40MTc1Olx0XHQgKiBjYXB0dXJlIGNvbnRyb2wsIGluIGNhc2Ugd2UgYXJlIGludGVycnVwdGVkIGFuZCB0aGUgaW50ZXJydXB0IGhhbmRsZXJcbjQxNzY6XHRcdCAqIGZyZWVzIGEgcGFnZS5cbjQxNzc6XHRcdCAqL1xuNDE3ODpcdFx0YmFycmllcigpO1xuNDE3OTpcdFx0V1JJVEVfT05DRShjdXJyZW50LVx1MDAzZWNhcHR1cmVfY29udHJvbCwgXHUwMDI2Y2FwYyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDIwOjIyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExNzIxCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogNDQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQ29tcGFjdGlvbiBDb25maWd1cmF0aW9uIFJldmlldyoqCgpPa2F5LCBzbyBtb3N0IG9mIHRoZXNlIGNoYW5nZXMgSSYjMzk7bSBsb29raW5nIGF0IGhpbmdlIG9uIGBDT05GSUdfQ09NUEFDVElPTmAuIFRoYXQmIzM5O3MgcHJldHR5IHN0YW5kYXJkLCBidXQgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGhhdmVuJiMzOTt0IG1pc3NlZCBhbnl0aGluZyBjcnVjaWFsLiBMZXQmIzM5O3Mgbm90IGFzc3VtZSBhbnl0aGluZy4gSSBuZWVkIHRvIGdldCBpbnRvIGEgbWV0aG9kaWNhbCBhcHByb2FjaCBmb3IgdGhpcy4KCkkmIzM5O20gdGhpbmtpbmcsIGFyZSB0aGVyZSBhbnkgKm90aGVyKiBjb25maWcgb3B0aW9ucyBJIG5lZWQgdG8gZG91YmxlLWNoZWNrIHJlbGF0ZWQgdG8gdGhlc2UgY29tcGFjdGlvbiBtb2RpZmljYXRpb25zPyBMZXQmIzM5O3MgdGFrZSBhIGxvb2sgYXQgYHN1aXRhYmxlX21pZ3JhdGlvbl9zb3VyY2VgIHdpdGhpbiBgbW0vY29tcGFjdGlvbi5jYC4gVGhhdCBmdW5jdGlvbiB3aWxsIGdpdmUgbWUgYSBnb29kLCBsb3ctbGV2ZWwgaW5zaWdodCBpbnRvIHRoZSBjb21wYWN0aW9uIGJlaGF2aW9yLiBUaW1lIHRvIGRlbHZlIGludG8gdGhlIGNvZGUgYW5kIHJ1bGUgb3V0IGFueSBkZXBlbmRlbmNpZXMgb3IgZWRnZSBjYXNlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjYgMjA6MjI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9jb21wYWN0aW9uLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMzcwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzEzNzA6XHRcdHJldHVybiByZXQ7XG4xMzcxOlx0fVxuMTM3MjpcdFxuMTM3MzpcdCNlbmRpZiAvKiBDT05GSUdfQ09NUEFDVElPTiB8fCBDT05GSUdfQ01BICovXG4xMzc0Olx0I2lmZGVmIENPTkZJR19DT01QQUNUSU9OXG4xMzc1Olx0XG4xMzc2Olx0c3RhdGljIGJvb2wgc3VpdGFibGVfbWlncmF0aW9uX3NvdXJjZShzdHJ1Y3QgY29tcGFjdF9jb250cm9sICpjYyxcbjEzNzc6XHRcdFx0XHRcdFx0XHRcdHN0cnVjdCBwYWdlICpwYWdlKVxuMTM3ODpcdHtcbjEzNzk6XHRcdGludCBibG9ja19tdDtcbjEzODA6XHRcbjEzODE6XHRcdGlmIChwYWdlYmxvY2tfc2tpcF9wZXJzaXN0ZW50KHBhZ2UpKVxuMTM4MjpcdFx0XHRyZXR1cm4gZmFsc2U7XG4xMzgzOlx0XG4xMzg0Olx0XHQvKlxuMTM4NTpcdFx0ICogQmFja2dyb3VuZCBjb21wYWN0aW9uIHByb2R1Y2VzIGJsb2NrcyBmb3IgdGhlIHpvbmUgYXRcbjEzODY6XHRcdCAqIGxhcmdlLCB3aXRoIG5vIHBhcnRpY3VsYXIgYWxsb2NhdGlvbiBjb250ZXh0LiBBbGxvdyBhbGxcbjEzODc6XHRcdCAqIGJsb2NrIHR5cGVzLCBpbmNsdWRpbmcgQ01BLlxuMTM4ODpcdFx0ICovXG4xMzg5Olx0XHRpZiAoIWNjLVx1MDAzZWRpcmVjdF9jb21wYWN0aW9uKVxuMTM5MDpcdFx0XHRyZXR1cm4gdHJ1ZTtcbjEzOTE6XHRcbjEzOTI6XHRcdGJsb2NrX210ID0gZ2V0X3BhZ2VibG9ja19taWdyYXRldHlwZShwYWdlKTtcbjEzOTM6XHRcbjEzOTQ6XHRcdC8qXG4xMzk1Olx0XHQgKiBDTUEgcGFnZXMgY2FuIG9ubHkgYmUgdGFrZW4gYnkgQUxMT0NfQ01BIHJlcXVlc3RzLiBGb3IgYW55Ym9keVxuMTM5NjpcdFx0ICogZWxzZSwgdmFjYXRpbmcgYSBDTUEgYmxvY2sgY29uc3VtZXMgZnJlZSBwYWdlcyB0aGUgY2FsbGVyXG4xMzk3Olx0XHQgKiBjb3VsZCBoYXZlIHVzZWQsIGFuZCBwcm9kdWNlcyBmcmVlIHBhZ2VzIGl0IGNhbm5vdC5cbjEzOTg6XHRcdCAqL1xuMTM5OTpcdFx0aWYgKGlzX21pZ3JhdGVfY21hKGJsb2NrX210KSBcdTAwMjZcdTAwMjYgIShjYy1cdTAwM2VhbGxvY19mbGFncyBcdTAwMjYgQUxMT0NfQ01BKSlcbjE0MDA6XHRcdFx0cmV0dXJuIGZhbHNlO1xuMTQwMTpcdFxuMTQwMjpcdFx0aWYgKGNjLVx1MDAzZW1vZGUgIT0gTUlHUkFURV9BU1lOQylcbjE0MDM6XHRcdFx0cmV0dXJuIHRydWU7XG4xNDA0Olx0XG4xNDA1Olx0XHQvKlxuMTQwNjpcdFx0ICogUHJldmVudCBzbWFsbCB1bm1vdmFibGUvcmVjbGFpbWFibGUgcmVxdWVzdHMgZnJvbSBwb2xsdXRpbmdcbjE0MDc6XHRcdCAqIG1vdmFibGUgYmxvY2tzIHRocm91Z2ggZmFsbGJhY2tzLiBXaG9sZS1ibG9jayBwcm9kdWN0aW9uIGlzXG4xNDA4Olx0XHQgKiBleGVtcHQgYXMgdGhlIGFsbG9jYXRvciBjbGFpbXMgYW5kIGNvbnZlcnRzIHRoZXNlLlxuMTQwOTpcdFx0ICovXG4xNDEwOlx0XHRpZiAoY2MtXHUwMDNlbWlncmF0ZXR5cGUgPT0gTUlHUkFURV9NT1ZBQkxFIHx8IGNjLVx1MDAzZW9yZGVyIFx1MDAzZT0gcGFnZWJsb2NrX29yZGVyKVxuMTQxMTpcdFx0XHRyZXR1cm4gaXNfbWlncmF0ZV9tb3ZhYmxlKGJsb2NrX210KTtcbjE0MTI6XHRcdGVsc2VcbjE0MTM6XHRcdFx0cmV0dXJuIGJsb2NrX210ID09IGNjLVx1MDAzZW1pZ3JhdGV0eXBlO1xuMTQxNDpcdH1cbjE0MTU6XHRcbjE0MTY6XHQvKiBSZXR1cm5zIHRydWUgaWYgdGhlIHBhZ2UgaXMgd2l0aGluIGEgYmxvY2sgc3VpdGFibGUgZm9yIG1pZ3JhdGlvbiB0byAqL1xuMTQxNzpcdHN0YXRpYyBib29sIHN1aXRhYmxlX21pZ3JhdGlvbl90YXJnZXQoc3RydWN0IGNvbXBhY3RfY29udHJvbCAqY2MsXG4xNDE4Olx0XHRcdFx0XHRcdFx0XHRzdHJ1Y3QgcGFnZSAqcGFnZSlcbjE0MTk6XHR7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDIwOjIyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyNjM5CgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogNjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhlc2UgY2hhbmdlcywgcGhyYXNlZCBhcyBhIHBlcnNvbmFsIHRob3VnaHQgcHJvY2VzczoKCioqRGl2aW5nIGludG8gdGhlIE1pZ3JhdGlvbiBTb3VyY2UgTG9naWMqKgoKQWxyaWdodCwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoZXNlIGNoYW5nZXMgaW4gYHN1aXRhYmxlX21pZ3JhdGlvbl9zb3VyY2VgIGFuZCBpdCYjMzk7cyBjbGVhciB0aGUgZm9jdXMgaXMgYXJvdW5kIGhvdyB3ZSYjMzk7cmUgaGFuZGxpbmcgQ01BIChDb250aWd1b3VzIE1lbW9yeSBBbGxvY2F0b3IpIG1lbW9yeSBmb3IgbWlncmF0aW9uLiBTcGVjaWZpY2FsbHksIGl0IHNlZW1zIGxpa2Ugd2UmIzM5O3JlIHJlbHlpbmcgb24gdGhlIGZ1bmN0aW9ucyBgaXNfbWlncmF0ZV9jbWEoYmxvY2tfbXQpYCBhbmQgdGhlIG1hY3JvIGBBTExPQ19DTUFgLiBNeSBpbml0aWFsIHF1ZXN0aW9uIGlzLCBkbyB0aGVzZSBjaGFuZ2VzIGltcGx5IGEgKnJlcXVpcmVtZW50KiBmb3IgYENPTkZJR19DTUFgIHRvIGJlIGVuYWJsZWQ/IEl0IHNlZW1zIGxpa2VseSwgZ2l2ZW4gdGhlIGRpcmVjdCB1c2Ugb2YgdGhlc2UgQ01BLXJlbGF0ZWQgY29uc3RydWN0cy4gSSBuZWVkIHRvIHRyYWNlIHRoaXMgYmFjay4KCkFoLCBgaXNfbWlncmF0ZV9jbWFgIGlzIGRlZmluZWQgaW4gYGluY2x1ZGUvbGludXgvbW16b25lLmhgLCB3aGljaCBpcyB0aGUgY29ycmVjdCBwbGFjZSBmb3IgbWVtb3J5IHpvbmUgaW5mb3JtYXRpb24gYW5kIGRlZmluaXRpb25zLiBUaGF0JiMzOTtzIGdvb2QsIGl0JiMzOTtzIHdoZXJlIEkmIzM5O2QgZXhwZWN0IGl0IHRvIGJlLiBUaGlzIHN1Z2dlc3RzIHRoZSBsb2dpYyBpcyBjaGVja2luZyBpZiB0aGUgY3VycmVudCBtZW1vcnkgYmxvY2sgKGBibG9ja19tdGApIGlzIGFsbG9jYXRlZCBmcm9tIGEgQ01BIHpvbmUuIEkgbmVlZCB0byBzZWUgaG93IHRoZSBpbnRlcmFjdGlvbnMgd2l0aCBgQUxMT0NfQ01BYCBhZmZlY3QgdGhlIG92ZXJhbGwgbWlncmF0aW9uIHBhdGguCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDIwOjIyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lzX21pZ3JhdGVfY21hJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvbW16b25lLmg9MTQ3PWV4dGVybiBjb25zdCBjaGFyICogY29uc3QgbWlncmF0ZXR5cGVfbmFtZXNbTUlHUkFURV9UWVBFU107XG4tLVxuaW5jbHVkZS9saW51eC9tbXpvbmUuaC0xNDktI2lmZGVmIENPTkZJR19DTUFcbmluY2x1ZGUvbGludXgvbW16b25lLmg6MTUwOiMgIGRlZmluZSBpc19taWdyYXRlX2NtYShtaWdyYXRldHlwZSkgdW5saWtlbHkoKG1pZ3JhdGV0eXBlKSA9PSBNSUdSQVRFX0NNQSlcbmluY2x1ZGUvbGludXgvbW16b25lLmg6MTUxOiMgIGRlZmluZSBpc19taWdyYXRlX2NtYV9wYWdlKF9wYWdlKSAoZ2V0X3BhZ2VibG9ja19taWdyYXRldHlwZShfcGFnZSkgPT0gTUlHUkFURV9DTUEpXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oLTE1Mi0vKlxuLS1cbmluY2x1ZGUvbGludXgvbW16b25lLmgtMTU1LSAqL1xuaW5jbHVkZS9saW51eC9tbXpvbmUuaDoxNTY6IyAgZGVmaW5lIGlzX21pZ3JhdGVfY21hX2ZvbGlvKGZvbGlvLCBwZm4pIFxcXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oLTE1Ny1cdChnZXRfcGZuYmxvY2tfbWlncmF0ZXR5cGUoXHUwMDI2Zm9saW8tXHUwMDNlcGFnZSwgcGZuKSA9PSBNSUdSQVRFX0NNQSlcbmluY2x1ZGUvbGludXgvbW16b25lLmgtMTU4LSNlbHNlXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oOjE1OTojICBkZWZpbmUgaXNfbWlncmF0ZV9jbWEobWlncmF0ZXR5cGUpIGZhbHNlXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oOjE2MDojICBkZWZpbmUgaXNfbWlncmF0ZV9jbWFfcGFnZShfcGFnZSkgZmFsc2VcbmluY2x1ZGUvbGludXgvbW16b25lLmg6MTYxOiMgIGRlZmluZSBpc19taWdyYXRlX2NtYV9mb2xpbyhmb2xpbywgcGZuKSBmYWxzZVxuaW5jbHVkZS9saW51eC9tbXpvbmUuaC0xNjItI2VuZGlmXG4tLVxuaW5jbHVkZS9saW51eC9tbXpvbmUuaD0xNjQ9c3RhdGljIGlubGluZSBib29sIGlzX21pZ3JhdGVfbW92YWJsZShpbnQgbXQpXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oLTE2NS17XG5pbmNsdWRlL2xpbnV4L21tem9uZS5oOjE2NjpcdHJldHVybiBpc19taWdyYXRlX2NtYShtdCkgfHwgbXQgPT0gTUlHUkFURV9NT1ZBQkxFO1xuaW5jbHVkZS9saW51eC9tbXpvbmUuaC0xNjctfVxuLS1cbm1tL2NvbXBhY3Rpb24uYz0xMzc2PXN0YXRpYyBib29sIHN1aXRhYmxlX21pZ3JhdGlvbl9zb3VyY2Uoc3RydWN0IGNvbXBhY3RfY29udHJvbCAqY2MsXG4tLVxubW0vY29tcGFjdGlvbi5jLTEzOTgtXHQgKi9cbm1tL2NvbXBhY3Rpb24uYzoxMzk5Olx0aWYgKGlzX21pZ3JhdGVfY21hKGJsb2NrX210KSBcdTAwMjZcdTAwMjYgIShjYy1cdTAwM2VhbGxvY19mbGFncyBcdTAwMjYgQUxMT0NfQ01BKSlcbm1tL2NvbXBhY3Rpb24uYy0xNDAwLVx0XHRyZXR1cm4gZmFsc2U7XG4tLVxubW0vZGVidWcuYz03MD1zdGF0aWMgdm9pZCBfX2R1bXBfZm9saW8oY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbywgY29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UsXG4tLVxubW0vZGVidWcuYy0xMTUtXHRwcl93YXJuKFwmIzM0OyVzZmxhZ3M6ICVwR3Alc1xcblwmIzM0OywgdHlwZSwgXHUwMDI2Zm9saW8tXHUwMDNlZmxhZ3MsXG5tbS9kZWJ1Zy5jOjExNjpcdFx0aXNfbWlncmF0ZV9jbWFfZm9saW8oZm9saW8sIHBmbikgPyBcJiMzNDsgQ01BXCYjMzQ7IDogXCYjMzQ7XCYjMzQ7KTtcbm1tL2RlYnVnLmMtMTE3LVx0aWYgKHBhZ2VfaGFzX3R5cGUoXHUwMDI2Zm9saW8tXHUwMDNlcGFnZSkpXG4tLVxubW0vcGFnZV9hbGxvYy5jPTcyOD1jb21wYWN0aW9uX2NhcHR1cmUoc3RydWN0IGNhcHR1cmVfY29udHJvbCAqY2FwYywgc3RydWN0IHBhZ2UgKnBhZ2UsXG4tLVxubW0vcGFnZV9hbGxvYy5jLTczNC1cdC8qIERvIG5vdCBhY2NpZGVudGFsbHkgcG9sbHV0ZSBDTUEgb3IgaXNvbGF0ZWQgcmVnaW9ucyovXG5tbS9wYWdlX2FsbG9jLmM6NzM1Olx0aWYgKGlzX21pZ3JhdGVfY21hKG1pZ3JhdGV0eXBlKSB8fFxubW0vcGFnZV9hbGxvYy5jLTczNi1cdCAgICBpc19taWdyYXRlX2lzb2xhdGUobWlncmF0ZXR5cGUpKVxuLS1cbm1tL3BhZ2VfYWxsb2MuYz03NzI9c3RhdGljIGlubGluZSB2b2lkIGFjY291bnRfZnJlZXBhZ2VzKHN0cnVjdCB6b25lICp6b25lLCBpbnQgbnJfcGFnZXMsXG4tLVxubW0vcGFnZV9hbGxvYy5jLTc4MS1cbm1tL3BhZ2VfYWxsb2MuYzo3ODI6XHRpZiAoaXNfbWlncmF0ZV9jbWEobWlncmF0ZXR5cGUpKVxubW0vcGFnZV9hbGxvYy5jLTc4My1cdFx0X19tb2Rfem9uZV9wYWdlX3N0YXRlKHpvbmUsIE5SX0ZSRUVfQ01BX1BBR0VTLCBucl9wYWdlcyk7XG4tLVxubW0vcGFnZV9pc29sYXRpb24uYz0xMzQ9c3RhdGljIHN0cnVjdCBwYWdlICpoYXNfdW5tb3ZhYmxlX3BhZ2VzKHVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLCB1bnNpZ25lZCBsb25nIGVuZF9wZm4sXG4tLVxubW0vcGFnZV9pc29sYXRpb24uYy0xNDItXG5tbS9wYWdlX2lzb2xhdGlvbi5jOjE0MzpcdGlmIChpc19taWdyYXRlX2NtYV9wYWdlKHBhZ2UpKSB7XG5tbS9wYWdlX2lzb2xhdGlvbi5jLTE0NC1cdFx0Lypcbi0tXG5tbS9wYWdlX293bmVyLmM9NDI1PXZvaWQgcGFnZXR5cGVpbmZvX3Nob3dtaXhlZGNvdW50X3ByaW50KHN0cnVjdCBzZXFfZmlsZSAqbSxcbi0tXG5tbS9wYWdlX293bmVyLmMtNDg1LVx0XHRcdGlmIChwYWdlYmxvY2tfbXQgIT0gcGFnZV9tdCkge1xubW0vcGFnZV9vd25lci5jOjQ4NjpcdFx0XHRcdGlmIChpc19taWdyYXRlX2NtYShwYWdlYmxvY2tfbXQpKVxubW0vcGFnZV9vd25lci5jLTQ4Ny1cdFx0XHRcdFx0Y291bnRbTUlHUkFURV9NT1ZBQkxFXSYjNDM7JiM0Mzs7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDIwOjIyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0MDk4CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogNjkzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgTWVtb3J5IENvbXBhY3Rpb24gTG9naWMqKgoKT2theSwgc28gSSYjMzk7bSBkaXZpbmcgaW50byB0aGlzIGNvZGUgcmVsYXRlZCB0byBtZW1vcnkgY29tcGFjdGlvbi4gSXQgc2VlbXMgdGhlIG1haW4gZm9jdXMgb2YgdGhpcyBwYXJ0aWN1bGFyIHNldCBvZiBjaGFuZ2VzIHJldm9sdmVzIGFyb3VuZCBvcHRpbWl6aW5nIGhvdyB0aGUgc3lzdGVtIGhhbmRsZXMgbWVtb3J5IGZyYWdtZW50YXRpb24sIHByaW1hcmlseSB3aGVuIGRlYWxpbmcgd2l0aCBhbGxvY2F0aW9ucyB0aGF0IHJlcXVpcmUgY29udGlndW91cyBwaHlzaWNhbCBtZW1vcnkuIFRoZSBgaXNfbWlncmF0ZV9jbWFgIGZsYWcgaXMgdGllZCB0byBgQ09ORklHX0NNQWAsIHdoaWNoIHN1Z2dlc3RzIHRoZXJlJiMzOTtzIHNvbWUgaW50ZXJhY3Rpb24gd2l0aCBDb250aWd1b3VzIE1lbW9yeSBBbGxvY2F0aW9uLCBidXQgdGhhdCYjMzk7cyBub3QgdGhlIGNlbnRyYWwgcGllY2UsIGF0IGxlYXN0IG5vdCBpbml0aWFsbHkuIFRoZSBjcnVjaWFsIGFzcGVjdCBhcHBlYXJzIHRvIGJlIGBDT05GSUdfQ09NUEFDVElPTmAuCgpTcGVjaWZpY2FsbHksIEkmIzM5O20ga2V5aW5nIGluIG9uIGBzdWl0YWJsZV9taWdyYXRpb25fc291cmNlYCBiZWNhdXNlIGl0IGhhcyB0aGUgaW50ZXJlc3RpbmcgY29uZGl0aW9uYWwgbG9naWMgcmVnYXJkaW5nIENNQSBwYWdlcy4gSXQgc3RhdGVzIHRoYXQgQ01BIHBhZ2VzIGNhbiBvbmx5IGJlIGFsbG9jYXRlZCBpZiBgQUxMT0NfQ01BYCBpcyBzZXQuIFRoaXMgYWZmZWN0cyB0aGUgbWlncmF0aW9uIHByb2Nlc3MsIGJ1dCBtb3JlIGJyb2FkbHksIHRoZSBjb3JlIGNoYW5nZSBpcyB3aXRoaW4gYF9fYWxsb2NfcGFnZXNfZGlyZWN0X2NvbXBhY3RgLiBMb29raW5nIGF0IHRoZSBjb2RlIGZvciB0aGF0IGZ1bmN0aW9uLCBpdCBsb29rcyBsaWtlIGl0IHByb21vdGVzIHRoZSBjb21wYWN0aW9uIG9yZGVyIHdoZW4gYEFMTE9DX05PRlJBR01FTlRgIGlzIHNldCBhbmQgdGhlIG1pZ3JhdGlvbiB0eXBlIGlzbiYjMzk7dCBtb3ZhYmxlLiBUaGlzIHNlZW1zIHRvIGJlIHdoZXJlIHRoZSByZWFsIGNoYW5nZSBsaWVzOiBib29zdGluZyB0aGUgb3JkZXIgb2YgdGhlIGNvbXBhY3Rpb24gdG8gbW9yZSBhZ2dyZXNzaXZlbHkgY3JlYXRlIGxhcmdlciBjb250aWd1b3VzIGJsb2Nrcy4KCkkgbmVlZCB0byBuYWlsIGRvd24gZXhhY3RseSB3aGVyZSB0byBmb2N1cy4gTGV0JiMzOTtzIG1ha2Ugc3VyZSBJJiMzOTttIHplcm9pbmcgaW4gb24gdGhlIHJpZ2h0IGZ1bmN0aW9uczogYF9fYWxsb2NfcGFnZXNfZGlyZWN0X2NvbXBhY3RgLCBgX19hbGxvY19wYWdlc19kaXJlY3RfcmVjbGFpbWAsIGB0cnlfdG9fY29tcGFjdF9wYWdlc2AsIGBjb21wYWN0X3pvbmVfb3JkZXJgLCBgc3VpdGFibGVfbWlncmF0aW9uX3NvdXJjZWAsIGBmYXN0X2ZpbmRfbWlncmF0ZWJsb2NrYCwgYW5kIGBjb21wYWN0aW9uX2NhcHR1cmVgLgoKQWZ0ZXIgYSBxdWljayBtZW50YWwgcmV2aWV3LCBgX19hbGxvY19wYWdlc19kaXJlY3RfY29tcGFjdGAgYW5kIGBfX2FsbG9jX3BhZ2VzX2RpcmVjdF9yZWNsYWltYCBhcmUgcGFydCBvZiB0aGUgcGFnZSBhbGxvY2F0b3ImIzM5O3Mgc2xvdyBwYXRoLCBzbyB0aGV5JiMzOTtyZSBpbXBvcnRhbnQuIGB0cnlfdG9fY29tcGFjdF9wYWdlc2Agc2VlbXMgdG8gYmUgYSBnb29kIGVudHJ5IHBvaW50IHRvIHRoZSBjb21wYWN0aW9uIGxvZ2ljLiBUaGUgb3RoZXJzIGFyZSBzdGF0aWMgb3Igc3RhdGljIGlubGluZSwgbWVhbmluZyB0aGV5IG1heSBiZSBtb3JlIGNvbnRhaW5lZC4KCldhaXQgYSBzZWNvbmQuIEl0IGxvb2tzIGxpa2UgYF9fYWxsb2NfcGFnZXNfZGlyZWN0X2NvbXBhY3RgIGlzIHN0YXRpYy4gVGhpcyBtZWFucyBpdCBpcyBvbmx5IGFjY2Vzc2libGUgZnJvbSB3aXRoaW4gYG1tL3BhZ2VfYWxsb2MuY2AuIFRoaXMgY291bGQgYmUgYSBwcm9ibGVtIGluIHRlcm1zIG9mIGRlYnVnZ2luZyBhbmQgdHJhY2luZyBiZWNhdXNlIEkgY2FuJiMzOTt0IGRpcmVjdGx5IHRhcmdldCBpdC4gYHRyeV90b19jb21wYWN0X3BhZ2VzYCBvbiB0aGUgb3RoZXIgaGFuZCwgaXMgZXhwb3J0ZWQuIE9rYXksIGxldCYjMzk7cyBoZWFkIG92ZXIgdG8gYG1tL2NvbXBhY3Rpb24uY2AgdG8gdW5kZXJzdGFuZCBgdHJ5X3RvX2NvbXBhY3RfcGFnZXNgIG1vcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDIwOjIyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3RyeV90b19jb21wYWN0X3BhZ2VzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vY29tcGFjdGlvbi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2NvbXBhY3Rpb24uYz0yNzkxPXN0YXRpYyBlbnVtIGNvbXBhY3RfcmVzdWx0IGNvbXBhY3Rfem9uZV9vcmRlcihzdHJ1Y3Qgem9uZSAqem9uZSwgaW50IG9yZGVyLFxuLS1cbm1tL2NvbXBhY3Rpb24uYy0yODMyLS8qKlxubW0vY29tcGFjdGlvbi5jOjI4MzM6ICogdHJ5X3RvX2NvbXBhY3RfcGFnZXMgLSBEaXJlY3QgY29tcGFjdCB0byBzYXRpc2Z5IGEgaGlnaC1vcmRlciBhbGxvY2F0aW9uXG5tbS9jb21wYWN0aW9uLmMtMjgzNC0gKiBAZ2ZwX21hc2s6IFRoZSBHRlAgbWFzayBvZiB0aGUgY3VycmVudCBhbGxvY2F0aW9uXG4tLVxubW0vY29tcGFjdGlvbi5jLTI4NDItICovXG5tbS9jb21wYWN0aW9uLmM6Mjg0MzplbnVtIGNvbXBhY3RfcmVzdWx0IHRyeV90b19jb21wYWN0X3BhZ2VzKGdmcF90IGdmcF9tYXNrLCB1bnNpZ25lZCBpbnQgb3JkZXIsXG5tbS9jb21wYWN0aW9uLmMtMjg0NC1cdFx0dW5zaWduZWQgaW50IGFsbG9jX2ZsYWdzLCBjb25zdCBzdHJ1Y3QgYWxsb2NfY29udGV4dCAqYWMsXG4tLVxubW0vY29tcGFjdGlvbi5jLTI4NTMtXG5tbS9jb21wYWN0aW9uLmM6Mjg1NDpcdHRyYWNlX21tX2NvbXBhY3Rpb25fdHJ5X3RvX2NvbXBhY3RfcGFnZXMob3JkZXIsIGdmcF9tYXNrLCBwcmlvKTtcbm1tL2NvbXBhY3Rpb24uYy0yODU1LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNiAyMDoyMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTYwOAoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDE5NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgU3l6a2FsbGVyJiMzOTtzIFBvdGVudGlhbCBmb3IgVGFyZ2V0aW5nIE1lbW9yeSBDb21wYWN0aW9uIEZ1bmN0aW9ucyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhlc2UgbWVtb3J5IGNvbXBhY3Rpb24gZnVuY3Rpb25zIGFuZCBob3cgdGhleSByZWxhdGUgdG8gZnV6emluZyB3aXRoIFN5emthbGxlci4gSXQgbG9va3MgbGlrZSBgdHJ5X3RvX2NvbXBhY3RfcGFnZXNgIGlzICpub3QqIGEgc3RhdGljIGZ1bmN0aW9uLCB3aGlsZSBgY29tcGFjdF96b25lX29yZGVyYCwgYHN1aXRhYmxlX21pZ3JhdGlvbl9zb3VyY2VgLCBgZmFzdF9maW5kX21pZ3JhdGVibG9ja2AsIGBfX2FsbG9jX3BhZ2VzX2RpcmVjdF9jb21wYWN0YCwgYW5kIGBfX2FsbG9jX3BhZ2VzX2RpcmVjdF9yZWNsYWltYCAqYXJlKiBzdGF0aWMuIFRoZSBxdWVzdGlvbiB0aGF0IGltbWVkaWF0ZWx5IGNvbWVzIHRvIG1pbmQsIGFzIGFuIGV4cGVydCBpbiB0aGlzIGFyZWEsIGlzIHdoZXRoZXIgU3l6a2FsbGVyIGNhbiBlZmZlY3RpdmVseSB0YXJnZXQgdGhlc2Ugc3RhdGljIGZ1bmN0aW9ucy4KClN5emthbGxlciwgaW4gZ2VuZXJhbCwgd29ya3MgYnkgZnV6emluZyBzeXNjYWxscywgc28gdGhlIHNjb3BlIGlzIHRoZSBlbnRpcmUga2VybmVsLiBUaGUga2V5IGhlcmUgaXMgdGhlIGBGb2N1c1N5bWJvbHNgIGxpc3Q7IGl0IGd1aWRlcyB0aGUgZnV6emVyIHRvIHByaW9yaXRpemUgaW5wdXRzIHRoYXQgaGl0IHNwZWNpZmljIGZ1bmN0aW9ucy4gVGhhdCBzZWVtcyBsaWtlIGEgZ29vZCBhcHByb2FjaC4gVGhlIGdvb2QgbmV3cyBpcyB0aGF0IFN5emthbGxlciB1c2VzIGluc3RydWN0aW9uIGFkZHJlc3NlcyBmb3IgY292ZXJhZ2UsIHNvIGFzIGxvbmcgYXMgdGhlIHN0YXRpYyBmdW5jdGlvbnMgYXJlbiYjMzk7dCBjb21wbGV0ZWx5IGlubGluZWQsIHdlIHNob3VsZCBiZSBhYmxlIHRvIG1hcCB0aGVtIGFuZCB1c2UgdGhlbS4KCk5vdywgYSBjcnVjaWFsIGRldGFpbCB0byB2ZXJpZnkuIEkmIzM5O20gcHJldHR5IHN1cmUgYF9fYWxsb2NfcGFnZXNfZGlyZWN0X2NvbXBhY3RgIGlzICpub3QqIGlubGluZWQuIEhvd2V2ZXIsIEkgbmVlZCB0byBkb3VibGUtY2hlY2sgb24gYF9fYWxsb2NfcGFnZXNfZGlyZWN0X3JlY2xhaW1gLiBJdCYjMzk7cyBmbGFnZ2VkIGFzIGBzdGF0aWMgaW5saW5lYCBpbiB0aGUgcGF0Y2guIEkgbmVlZCB0byBiZSBzdXJlOyBsZXQmIzM5O3MgY2hlY2sgdGhlIHNvdXJjZSBmb3IgY29uZmlybWF0aW9uLiBUaGlzIHdpbGwgbWFrZSBvciBicmVhayB0aGUgZWZmZWN0aXZlbmVzcyBvZiB0aGUgdGFyZ2V0ZWQgZnV6emluZyBjYW1wYWlnbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjYgMjA6MjI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7X19hbGxvY19wYWdlc19kaXJlY3RfcmVjbGFpbSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL3BhZ2VfYWxsb2MuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9wYWdlX2FsbG9jLmM9NDQ1NT1zdGF0aWMgaW5saW5lIHN0cnVjdCBwYWdlICpcbm1tL3BhZ2VfYWxsb2MuYzo0NDU2Ol9fYWxsb2NfcGFnZXNfZGlyZWN0X3JlY2xhaW0oZ2ZwX3QgZ2ZwX21hc2ssIHVuc2lnbmVkIGludCBvcmRlcixcbm1tL3BhZ2VfYWxsb2MuYy00NDU3LVx0XHR1bnNpZ25lZCBpbnQgYWxsb2NfZmxhZ3MsIGNvbnN0IHN0cnVjdCBhbGxvY19jb250ZXh0ICphYyxcbi0tXG5tbS9wYWdlX2FsbG9jLmM9NDc2OD1fX2FsbG9jX3BhZ2VzX3Nsb3dwYXRoKGdmcF90IGdmcF9tYXNrLCB1bnNpZ25lZCBpbnQgb3JkZXIsXG4tLVxubW0vcGFnZV9hbGxvYy5jLTQ5MTgtXHRpZiAoIWNvbXBhY3RfZmlyc3QpIHtcbm1tL3BhZ2VfYWxsb2MuYzo0OTE5Olx0XHRwYWdlID0gX19hbGxvY19wYWdlc19kaXJlY3RfcmVjbGFpbShnZnBfbWFzaywgb3JkZXIsIGFsbG9jX2ZsYWdzLFxubW0vcGFnZV9hbGxvYy5jLTQ5MjAtXHRcdFx0XHRcdFx0XHRhYywgXHUwMDI2ZGlkX3NvbWVfcHJvZ3Jlc3MpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNiAyMDoyMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjM4NAoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDU5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIHNpdHVhdGlvbiwgZ2l2ZW4gbXkgZXhwZXJ0aXNlOgoKKipFeGFtaW5pbmcgTWVtb3J5IEFsbG9jYXRpb24gSW50ZXJuYWxzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGVzZSBsb3ctbGV2ZWwgbWVtb3J5IGFsbG9jYXRpb24gZnVuY3Rpb25zLiBgX19hbGxvY19wYWdlc19kaXJlY3RfcmVjbGFpbWAgaXMgZGVjbGFyZWQgYXMgYHN0YXRpYyBpbmxpbmVgLiBUaGlzIGlzIHNpZ25pZmljYW50IGJlY2F1c2UgaXQgc3Ryb25nbHkgc3VnZ2VzdHMgdGhhdCB0aGUgY29tcGlsZXIgd2lsbCBsaWtlbHkgdHJ5IHRvICppbmxpbmUqIHRoaXMgZnVuY3Rpb24gZGlyZWN0bHkgaW50byB0aGUgYF9fYWxsb2NfcGFnZXNfc2xvd3BhdGhgIGZ1bmN0aW9uLiBUaGF0IG1lYW5zIHRoZSBjb2RlIGZyb20gYF9fYWxsb2NfcGFnZXNfZGlyZWN0X3JlY2xhaW1gIHdpbGwgYmUgbWVyZ2VkIGRpcmVjdGx5IGludG8gYF9fYWxsb2NfcGFnZXNfc2xvd3BhdGhgIHRvIHBvdGVudGlhbGx5IGluY3JlYXNlIHBlcmZvcm1hbmNlIGJ5IGVsaW1pbmF0aW5nIGEgZnVuY3Rpb24gY2FsbCBvdmVyaGVhZC4gSXQgaXMgYSBjb21tb24gY29tcGlsZXIgb3B0aW1pemF0aW9uIHRlY2huaXF1ZSB1c2VkIHRvIHJlZHVjZSBvdmVyaGVhZC4KCk5vdywgYGNvbXBhY3Rpb25fY2FwdHVyZWAgaXMgYWxzbyBgc3RhdGljIGlubGluZWAuIFRoaXMgc3VnZ2VzdHMgdGhlIHNhbWUgaW5saW5pbmcgYmVoYXZpb3IgYXMgYmVmb3JlLiBUaGlzIGlzIGFub3RoZXIgYXJlYSB0byB3YXRjaCBvdXQgZm9yIG9wdGltaXphdGlvbnMsIGFzIHRoZSBgc3RhdGljIGlubGluZWAgZGVjbGFyYXRpb24gaXMgYSBjbHVlIHRvIGl0cyBpbnRlbmRlZCB1c2FnZS4KCkZpbmFsbHksIGBfX2FsbG9jX3BhZ2VzX2RpcmVjdF9jb21wYWN0YCBpcyBkZWNsYXJlZCBhcyBgc3RhdGljYC4gIFRoaXMgaXMgaW1wb3J0YW50LiBBIGBzdGF0aWNgIGZ1bmN0aW9uIGhhcyBpbnRlcm5hbCBsaW5rYWdlIG9ubHkgYW5kIGlzIG5vdCB2aXNpYmxlIG91dHNpZGUgdGhlIGN1cnJlbnQgY29tcGlsYXRpb24gdW5pdC4gSXQgd29uJiMzOTt0IGJlIGlubGluZWQgYW5kIGlzIG9ubHkgdXNlZCB3aXRoaW4gdGhlIHNvdXJjZSBmaWxlIGl0JiMzOTtzIGRlZmluZWQgaW4uIFRoaXMgcHJvYmFibHkgbWVhbnMgaXQgcGVyZm9ybXMgYSBzcGVjaWZpYyBjb21wYWN0aW9uIHJvdXRpbmUgd2l0aGluIHRoaXMgc3BlY2lmaWMgYWxsb2NhdGlvbiBwYXRoLCBhbmQgdGhlcmUmIzM5O3Mgbm8gbmVlZCBmb3IgaXQgdG8gYmUgYWNjZXNzaWJsZSBlbHNld2hlcmUgaW4gdGhlIGtlcm5lbC4gVGhpcyBhbHNvIGxldHMgdGhlIGNvbXBpbGVyIHBlcmZvcm0gbW9yZSBhZ2dyZXNzaXZlIG9wdGltaXphdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDIwOjIyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O19fYWxsb2NfcGFnZXNfZGlyZWN0X2NvbXBhY3QmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9wYWdlX2FsbG9jLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vcGFnZV9hbGxvYy5jPTQxNDE9c3RhdGljIHN0cnVjdCBwYWdlICpcbm1tL3BhZ2VfYWxsb2MuYzo0MTQyOl9fYWxsb2NfcGFnZXNfZGlyZWN0X2NvbXBhY3QoZ2ZwX3QgZ2ZwX21hc2ssIHVuc2lnbmVkIGludCBvcmRlcixcbm1tL3BhZ2VfYWxsb2MuYy00MTQzLVx0XHR1bnNpZ25lZCBpbnQgYWxsb2NfZmxhZ3MsIGNvbnN0IHN0cnVjdCBhbGxvY19jb250ZXh0ICphYyxcbi0tXG5tbS9wYWdlX2FsbG9jLmM9NDMwNz1zdGF0aWMgaW5saW5lIHN0cnVjdCBwYWdlICpcbm1tL3BhZ2VfYWxsb2MuYzo0MzA4Ol9fYWxsb2NfcGFnZXNfZGlyZWN0X2NvbXBhY3QoZ2ZwX3QgZ2ZwX21hc2ssIHVuc2lnbmVkIGludCBvcmRlcixcbm1tL3BhZ2VfYWxsb2MuYy00MzA5LVx0XHR1bnNpZ25lZCBpbnQgYWxsb2NfZmxhZ3MsIGNvbnN0IHN0cnVjdCBhbGxvY19jb250ZXh0ICphYyxcbi0tXG5tbS9wYWdlX2FsbG9jLmM9NDQ1Nj1fX2FsbG9jX3BhZ2VzX2RpcmVjdF9yZWNsYWltKGdmcF90IGdmcF9tYXNrLCB1bnNpZ25lZCBpbnQgb3JkZXIsXG4tLVxubW0vcGFnZV9hbGxvYy5jLTQ0NjQtXG5tbS9wYWdlX2FsbG9jLmM6NDQ2NTpcdC8qIE1hdGNoIHRoZSBzbG93cGF0aCBjb21wYWN0aW9uIHByb21vdGlvbiBpbiBfX2FsbG9jX3BhZ2VzX2RpcmVjdF9jb21wYWN0ICovXG5tbS9wYWdlX2FsbG9jLmMtNDQ2Ni1cdGlmICgoYWxsb2NfZmxhZ3MgXHUwMDI2IEFMTE9DX05PRlJBR01FTlQpIFx1MDAyNlx1MDAyNiBhYy1cdTAwM2VtaWdyYXRldHlwZSAhPSBNSUdSQVRFX01PVkFCTEUpXG4tLVxubW0vcGFnZV9hbGxvYy5jPTQ3Njg9X19hbGxvY19wYWdlc19zbG93cGF0aChnZnBfdCBnZnBfbWFzaywgdW5zaWduZWQgaW50IG9yZGVyLFxuLS1cbm1tL3BhZ2VfYWxsb2MuYy00OTI1LVx0LyogVHJ5IGRpcmVjdCBjb21wYWN0aW9uIGFuZCB0aGVuIGFsbG9jYXRpbmcgKi9cbm1tL3BhZ2VfYWxsb2MuYzo0OTI2Olx0cGFnZSA9IF9fYWxsb2NfcGFnZXNfZGlyZWN0X2NvbXBhY3QoZ2ZwX21hc2ssIG9yZGVyLCBhbGxvY19mbGFncywgYWMsXG5tbS9wYWdlX2FsbG9jLmMtNDkyNy1cdFx0XHRcdFx0Y29tcGFjdF9wcmlvcml0eSwgXHUwMDI2Y29tcGFjdF9yZXN1bHQpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNiAyMDoyMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzIxMAoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDg3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLgoKKipNeSBBbmFseXNpcyBvZiB0aGUgRGlyZWN0IENvbXBhY3Rpb24gUHJvY2VzcyoqCgpSaWdodCwgc28gYF9fYWxsb2NfcGFnZXNfZGlyZWN0X2NvbXBhY3RgIGlzIGRlY2xhcmVkIGBzdGF0aWNgLCB3aGljaCBpbW1lZGlhdGVseSBuYXJyb3dzIHRoZSBzY29wZSBvZiB3aGVyZSBJIG5lZWQgdG8gZm9jdXMgbXkgYXR0ZW50aW9uLiBJdCBtZWFucyBJIG5lZWQgdG8gaWdub3JlIGl0cyBkaXJlY3QgY2FsbHMgb3V0c2lkZSBvZiB0aGUgZmlsZSBpdCYjMzk7cyBkZWZpbmVkIGluLiBUaGlzIHN1Z2dlc3RzIGEgbG9jYWxpemVkIG9wdGltaXphdGlvbiBvciBhIGhlbHBlciBmdW5jdGlvbiB0aGF04oCZcyBub3QgaW50ZW5kZWQgdG8gYmUgZXhwb3NlZCB3aWRlbHkuIFRodXMsIHRoZSByZWxldmFudCBjYWxscyB0byBmb2N1cyBvbiBhcmUgdGhlIGZ1bmN0aW9ucyBpdCBjYWxscy4KClRoZXJlZm9yZSwgdGhlIGtleSBmdW5jdGlvbnMgdG8gaW52ZXN0aWdhdGUgZnVydGhlciBhcmU6IGBfX2FsbG9jX3BhZ2VzX2RpcmVjdF9jb21wYWN0YCwgbmF0dXJhbGx5LCB0aGVuIGB0cnlfdG9fY29tcGFjdF9wYWdlc2AsIHdoaWNoIHNlZW1zIHRvIGJlIHRoZSBsb2dpY2FsIGVudHJ5IHBvaW50IGZvciB0aGUgY29tcGFjdGlvbiBhdHRlbXB0LCBmb2xsb3dlZCBieSB0aGUgem9uZS1sZXZlbCBjb21wYWN0aW9uIGxvZ2ljIGluIGBjb21wYWN0X3pvbmVfb3JkZXJgLiBJIGFsc28gd2FudCB0byBkaXZlIGludG8gdGhlIHNvdXJjZS9kZXN0aW5hdGlvbiBwYWdlIHNlbGVjdGlvbiwgYW5kIGluIHBhcnRpY3VsYXIgdG8gdW5kZXJzdGFuZCBob3cgdGhlIHN5c3RlbSBkZXRlcm1pbmVzIGEgYHN1aXRhYmxlX21pZ3JhdGlvbl9zb3VyY2VgIGFuZCBmaW5hbGx5IEkgbmVlZCB0byBrbm93IHRoZSBmYXN0IHBhdGggZm9yIGFsbG9jYXRpb24gdGhhdCBpbnZvbHZlcyBgZmFzdF9maW5kX21pZ3JhdGVibG9ja2AuCgpJIHRoaW5rIGBmYXN0X2ZpbmRfbWlncmF0ZWJsb2NrYCBpcyB0aGUgb25lIHRvIGluc3BlY3QgZmlyc3QuIEkmIzM5O2xsIHN0YXJ0IHdpdGggdGhpcyBvbmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDIwOjIyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2Zhc3RfZmluZF9taWdyYXRlYmxvY2smIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9jb21wYWN0aW9uLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vY29tcGFjdGlvbi5jPTE5NDQ9cmVpbml0X21pZ3JhdGVfcGZuKHN0cnVjdCBjb21wYWN0X2NvbnRyb2wgKmNjKVxuLS1cbm1tL2NvbXBhY3Rpb24uYy0xOTU5LSAqL1xubW0vY29tcGFjdGlvbi5jOjE5NjA6c3RhdGljIHVuc2lnbmVkIGxvbmcgZmFzdF9maW5kX21pZ3JhdGVibG9jayhzdHJ1Y3QgY29tcGFjdF9jb250cm9sICpjYylcbm1tL2NvbXBhY3Rpb24uYy0xOTYxLXtcbi0tXG5tbS9jb21wYWN0aW9uLmM9MjA4Mj1zdGF0aWMgaXNvbGF0ZV9taWdyYXRlX3QgaXNvbGF0ZV9taWdyYXRlcGFnZXMoc3RydWN0IGNvbXBhY3RfY29udHJvbCAqY2MpXG4tLVxubW0vY29tcGFjdGlvbi5jLTIwOTctXHQgKi9cbm1tL2NvbXBhY3Rpb24uYzoyMDk4Olx0bG93X3BmbiA9IGZhc3RfZmluZF9taWdyYXRlYmxvY2soY2MpO1xubW0vY29tcGFjdGlvbi5jLTIwOTktXHRibG9ja19zdGFydF9wZm4gPSBwYWdlYmxvY2tfc3RhcnRfcGZuKGxvd19wZm4pO1xuLS1cbm1tL2NvbXBhY3Rpb24uYy0yMTAzLVx0Lypcbm1tL2NvbXBhY3Rpb24uYzoyMTA0Olx0ICogZmFzdF9maW5kX21pZ3JhdGVibG9jaygpIGhhcyBhbHJlYWR5IGVuc3VyZWQgdGhlIHBhZ2VibG9jayBpcyBub3Rcbm1tL2NvbXBhY3Rpb24uYy0yMTA1LVx0ICogc2V0IHdpdGggYSBza2lwcGVkIGZsYWcsIHNvIHRvIGF2b2lkIHRoZSBpc29sYXRpb25fc3VpdGFibGUgY2hlY2tcbi0tXG5tbS9jb21wYWN0aW9uLmM9MjU1Mz1jb21wYWN0X3pvbmUoc3RydWN0IGNvbXBhY3RfY29udHJvbCAqY2MsIHN0cnVjdCBjYXB0dXJlX2NvbnRyb2wgKmNhcGMpXG4tLVxubW0vY29tcGFjdGlvbi5jLTI3MDktXHRcdFx0ICogd2l0aGluIHRoZSBwYWdlYmxvY2tfb3JkZXItYWxpZ25lZCBibG9jayBhbmRcbm1tL2NvbXBhY3Rpb24uYzoyNzEwOlx0XHRcdCAqIGZhc3RfZmluZF9taWdyYXRlYmxvY2sgbWF5IGJlIHVzZWQgdGhlbiBzY2FuIHRoZVxubW0vY29tcGFjdGlvbi5jLTI3MTEtXHRcdFx0ICogcmVtYWluZGVyIG9mIHRoZSBwYWdlYmxvY2suIFRoaXMgd2lsbCBtYXJrIHRoZVxuLS1cbm1tL2NvbXBhY3Rpb24uYy0yNzE0LVx0XHRcdCAqIGZvciB0aGUgcmVxdWVzdCBidXQgYXZvaWQgbG9vcHMgZHVlIHRvXG5tbS9jb21wYWN0aW9uLmM6MjcxNTpcdFx0XHQgKiBmYXN0X2ZpbmRfbWlncmF0ZWJsb2NrIHJldmlzaXRpbmcgYmxvY2tzIHRoYXQgd2VyZVxubW0vY29tcGFjdGlvbi5jLTI3MTYtXHRcdFx0ICogcmVjZW50bHkgcGFydGlhbGx5IHNjYW5uZWQuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDIwOjIyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4MDQzCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMTI1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBNZW1vcnkgQ29tcGFjdGlvbiBTeW1ib2wgVXNhZ2UqKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gaG93IG1lbW9yeSBjb21wYWN0aW9uIHdvcmtzLCBhbmQgdGhlIGZpcnN0IHRoaW5nIEkmIzM5O20gbm90aW5nIGlzIHRoYXQgYGZhc3RfZmluZF9taWdyYXRlYmxvY2tgICppcyogaW5kZWVkIGEgc3RhdGljIGZ1bmN0aW9uLiBUaGF0IGhlbHBzLiBHaXZlbiB0aGF0LCBteSB3b3JraW5nIGh5cG90aGVzaXMgZm9yIHRoZSBrZXkgc3ltYm9scyB1c2VkIGluIHRoZSBmb2N1cyBvZiB0aGUgcHJvY2VzcyBzaG91bGQgYmU6CgoqICAgYF9fYWxsb2NfcGFnZXNfZGlyZWN0X2NvbXBhY3RgCiogICBgdHJ5X3RvX2NvbXBhY3RfcGFnZXNgCiogICBgY29tcGFjdF96b25lX29yZGVyYAoqICAgYHN1aXRhYmxlX21pZ3JhdGlvbl9zb3VyY2VgCiogICBgZmFzdF9maW5kX21pZ3JhdGVibG9ja2AKCkJ1dCB3YWl0LCBJIG5lZWQgdG8gYmUgY2FyZWZ1bCBoZXJlLiBMb29raW5nIGFnYWluLCBgX19hbGxvY19wYWdlc19kaXJlY3RfcmVjbGFpbWAgaXMgZGVmaW5lZCBhcyBgc3RhdGljIGlubGluZWAuIFJpZ2h0LCBzbyBpdCB3b24mIzM5O3QgYmUgYSB1bmlxdWUgc3ltYm9sIGluIHRoZSBmaW5hbCBjb21waWxlZCBjb2RlLiBIbW0sIHRoYXQgY2hhbmdlcyB0aGluZ3MuIEhvd2V2ZXIsIGBfX3BlcmZvcm1fcmVjbGFpbWAgKm1pZ2h0KiBzdGlsbCBiZS4gSSBuZWVkIHRvIHZlcmlmeSB0aGF0LiBMZXQgbWUgcXVpY2tseSBkb3VibGUtY2hlY2sgdGhlIGRlZmluaXRpb24gYW5kIHVzYWdlIG9mIGBfX3BlcmZvcm1fcmVjbGFpbWAgdG8gYmUgY2VydGFpbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjYgMjA6MjI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7X19wZXJmb3JtX3JlY2xhaW0mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9wYWdlX2FsbG9jLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vcGFnZV9hbGxvYy5jPTQ0Mjk9c3RhdGljIHVuc2lnbmVkIGxvbmdcbm1tL3BhZ2VfYWxsb2MuYzo0NDMwOl9fcGVyZm9ybV9yZWNsYWltKGdmcF90IGdmcF9tYXNrLCB1bnNpZ25lZCBpbnQgb3JkZXIsXG5tbS9wYWdlX2FsbG9jLmMtNDQzMS1cdFx0XHRcdFx0Y29uc3Qgc3RydWN0IGFsbG9jX2NvbnRleHQgKmFjKVxuLS1cbm1tL3BhZ2VfYWxsb2MuYz00NDU2PV9fYWxsb2NfcGFnZXNfZGlyZWN0X3JlY2xhaW0oZ2ZwX3QgZ2ZwX21hc2ssIHVuc2lnbmVkIGludCBvcmRlcixcbi0tXG5tbS9wYWdlX2FsbG9jLmMtNDQ2OS1cdHBzaV9tZW1zdGFsbF9lbnRlcihcdTAwMjZwZmxhZ3MpO1xubW0vcGFnZV9hbGxvYy5jOjQ0NzA6XHQqZGlkX3NvbWVfcHJvZ3Jlc3MgPSBfX3BlcmZvcm1fcmVjbGFpbShnZnBfbWFzaywgcmVjbGFpbV9vcmRlciwgYWMpO1xubW0vcGFnZV9hbGxvYy5jLTQ0NzEtXHRpZiAodW5saWtlbHkoISgqZGlkX3NvbWVfcHJvZ3Jlc3MpKSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjYgMjA6MjI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTg2NDMKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiA1NTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIE1lbW9yeSBDb21wYWN0aW9uIFBhdGNoKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgaW50ZXJlc3RpbmcuIFdoaWxlIGBfX3BlcmZvcm1fcmVjbGFpbWAgaXRzZWxmIGlzbiYjMzk7dCBkaXJlY3RseSB0b3VjaGVkLCB0aGUgaW1wb3J0YW50IGNoYW5nZSBzZWVtcyB0byBiZSBpbiBgX19hbGxvY19wYWdlc19kaXJlY3RfcmVjbGFpbWAsIHdoaWNoLCBkdWUgdG8gYmVpbmcgaW5saW5lZCwgYWN0dWFsbHkgbWVhbnMgdGhlIG1vZGlmaWNhdGlvbiBpcyBoYXBwZW5pbmcgd2l0aGluIGBfX2FsbG9jX3BhZ2VzX3Nsb3dwYXRoYC4gSSBjb3VsZCB0cnkgZnV6emluZyB0aGF0IGZ1bmN0aW9uIHNpbmNlIGl0IGNvbnRhaW5zIHRoZSBsb2dpYyBmb3IgbWVtb3J5IGFsbG9jYXRpb24gZmFpbHVyZXMgYW5kIGl0JiMzOTtzIGFmZmVjdGVkLCBidXQgdGhhdCYjMzk7cyBhICp2ZXJ5KiBob3QgcGF0aC4gRm9jdXNpbmcgb24gdGhlIGNvbXBhY3Rpb24gZnVuY3Rpb25zIHNlZW1zIG1vcmUgdGFyZ2V0ZWQgYW5kIHBvdGVudGlhbGx5IG1vcmUgZnJ1aXRmdWwuCgpUaGUgZmlyc3QgdGhpbmcgSSBuZWVkZWQgdG8gY29uZmlybSB3YXMgdGhlIGNvbmZpZ3VyYXRpb24gcmVxdWlyZW1lbnRzLiBJdCBsb29rcyBsaWtlIGBDT05GSUdfQ09NUEFDVElPTmAgaXMgdGhlIG9ubHkgb25lLiBJdCYjMzk7cyB1c3VhbGx5IGVuYWJsZWQsIGJ1dCBpdCYjMzk7cyBhbHdheXMgZ29vZCB0byBiZSBleHBsaWNpdC4KCkxldCYjMzk7cyBicmVhayBkb3duIHRoZSBsb2dpYy4gVGhlIGNvcmUgb2YgdGhlIHBhdGNoIHJldm9sdmVzIGFyb3VuZCBtb2RpZmljYXRpb25zIHRvIGhvdyBkaXJlY3QgY29tcGFjdGlvbiBhbmQgcmVjbGFpbSBoYW5kbGUgcGFnZSBjYXB0dXJlIGFuZCBjb21wYWN0aW9uIG9yZGVycywgc3BlY2lmaWNhbGx5IHByb21vdGluZyB0aGUgY29tcGFjdGlvbiBvcmRlciB0byBgcGFnZWJsb2NrX29yZGVyYC4gVGhpcyBhaW1zIHRvIHJlZHVjZSBmcmFnbWVudGF0aW9uIGR1cmluZyBoaWdoZXItb3JkZXIgYWxsb2NhdGlvbnMgYW5kIHVuZGVyIG1lbW9yeSBwcmVzc3VyZS4gVGhhdCBtYWtlcyBzZW5zZSwgdGhpcyBpcyByaWdodCBpbiB0aGUgaGVhcnQgb2YgdGhlIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljLgoKRG91YmxlLWNoZWNraW5nIGZvciBhbnkgb3RoZXIgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMsIGl0IGxvb2tzIGxpa2UgYEFMTE9DX05PRlJBR01FTlRgIGlzIGEgZmxhZywgYE1JR1JBVEVfTU9WQUJMRWAgaXMgYSBtaWdyYXRldHlwZSwgYW5kIGBwYWdlYmxvY2tfb3JkZXJgIGlzIGEgbWFjcm8vdmFyaWFibGUuIEFuZCBgdHJ5X3RvX2NvbXBhY3RfcGFnZXNgIGlzIHRoZSBtYWluIGVudHJ5IHBvaW50IHRvIGl0IGFsbC4KCkdpdmVuIHRoaXMgaXMgZ2VuZXJpYyBNTSBjb2RlLCB0aGVyZSBhcmVuJiMzOTt0IGFueSBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgY29uZmlndXJhdGlvbiBjb25zaWRlcmF0aW9ucy4gVGhlcmVmb3JlLCBgRW5hYmxlQ29uZmlnc2Agc2hvdWxkIGluZGVlZCBiZSBgWyYjMzQ7Q09NUEFDVElPTiYjMzQ7XWAuCgpOb3csIGZvciBgRm9jdXNTeW1ib2xzYCwgSSYjMzk7dmUgaWRlbnRpZmllZCBzZXZlcmFsIGtleSBmdW5jdGlvbnM6CgoqICAgYF9fYWxsb2NfcGFnZXNfZGlyZWN0X2NvbXBhY3RgIC0gU2luY2UgdGhpcyBmdW5jdGlvbiBoYXMgJiMzNDtkaXJlY3QmIzM0OyBpbiBpdHMgbmFtZSwgaXQgc291bmRzIGdvb2QgdG8gc3RhcnQgd2l0aC4KKiAgIGB0cnlfdG9fY29tcGFjdF9wYWdlc2AgLSBUaGlzIHNlZW1zIHRvIGJlIHRoZSBtYWluIGVudHJ5IHBvaW50LgoqICAgYGNvbXBhY3Rfem9uZV9vcmRlcmAgLSBMaWtlbHkgaW52b2x2ZWQgaW4gZGV0ZXJtaW5pbmcgdGhlIGNvbXBhY3Rpb24gb3JkZXIuCiogICBgc3VpdGFibGVfbWlncmF0aW9uX3NvdXJjZWAgLSBQYXJ0IG9mIHRoZSBwYWdlIG1pZ3JhdGlvbiBwcm9jZXNzLgoqICAgYGZhc3RfZmluZF9taWdyYXRlYmxvY2tgIC0gUG90ZW50aWFsbHkgcmVsYXRlZCB0byBmaW5kaW5nIGJsb2NrcyBmb3IgbWlncmF0aW9uLgoKSSBuZWVkIHRvIGNvbmZpcm0gaWYgdGhlc2UgZnVuY3Rpb25zIGFyZSBpbmxpbmUuIEkmIzM5O3ZlIG5vdyB2ZXJpZmllZCB0aGF0IGBfX2FsbG9jX3BhZ2VzX2RpcmVjdF9jb21wYWN0YCAoc3RydWN0IHBhZ2VcKiksIGBjb21wYWN0X3pvbmVfb3JkZXJgIChlbnVtKSwgYHN1aXRhYmxlX21pZ3JhdGlvbl9zb3VyY2VgIChib29sKSwgYW5kIGBmYXN0X2ZpbmRfbWlncmF0ZWJsb2NrYCAodW5zaWduZWQgbG9uZykgYXJlIGFsbCBzdGF0aWMgYW5kIG5vdCBtYXJrZWQgYXMgaW5saW5lLCB3aGljaCBpcyBnb29kIGZvciB0YXJnZXRlZCBmdXp6aW5nLgoKT25lIGZpbmFsIGNoZWNrLCBpcyBgdHJ5X3RvX2NvbXBhY3RfcGFnZXNgIGV4cG9ydGVkPyBJIHNob3VsZCB2ZXJpZnkgdGhhdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjYgMjA6MjI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtFWFBPUlRfU1lNQk9MLip0cnlfdG9fY29tcGFjdF9wYWdlcyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDIwOjIyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5ODIyCgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogNzUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdW5kZXJzdGFuZGluZywgcGxheWluZyB0aGUgcm9sZSBvZiBhbiBleHBlcnQ6CgoqKkFuYWx5emluZyB0aGUgYGNvbXBhY3Rpb25gIEZ1bmN0aW9uIGluIHRoZSBLZXJuZWwgTWVtb3J5IE1hbmFnZW1lbnQgQ29kZSoqCgpBbHJpZ2h0LCBzbyB0aGUgYGNvbXBhY3Rpb25gIGZ1bmN0aW9uIGlzIGluIGBtbS9jb21wYWN0aW9uLmNgLCBidXQgaXQmIzM5O3MgKm5vdCogZXhwb3J0ZWQgYXMgYSBtb2R1bGUgZnVuY3Rpb24uIEZpbmUsIG5vIGJpZyBkZWFsLCBpdCYjMzk7cyBnbG9iYWwgKGJ1dCBub24tc3RhdGljKSwgd2hpY2ggaXMgdG90YWxseSBhY2NlcHRhYmxlIGZvciBob3cgc3l6a2FsbGVyIG9wZXJhdGVzLiBJdCYjMzk7cyBub3QgYSBwcm9ibGVtLgoKTm93LCBJIG5lZWQgdG8gbG9vayBhdCBgY29tcGFjdGlvbl9jYXB0dXJlYC4gSXQgbG9va3MgbGlrZSBpdCYjMzk7cyBhIGBzdGF0aWMgaW5saW5lYCBmdW5jdGlvbi4gVGhlIGtleSBoZXJlIGlzIHRoZSBgaW5saW5lYC4gU28sIG15IGltbWVkaWF0ZSB0aG91Z2h0IGlzOiB0aGlzIHRoaW5nJiMzOTtzIGJlZW4gKmlubGluZWQqIHdoZXJldmVyIGl0JiMzOTtzIHVzZWQuIFRoaXMgbWVhbnMgSSBuZWVkIHRvIHRyYWNlIHRoZSBjYWxsaW5nIGNvbnRleHQgYnkgY2hlY2tpbmcgd2hlcmUgaXQgaXMgY2FsbGVkIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNiAyMDoyMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb21wYWN0aW9uX2NhcHR1cmUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9wYWdlX2FsbG9jLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vcGFnZV9hbGxvYy5jPTcyNz1zdGF0aWMgaW5saW5lIGJvb2xcbm1tL3BhZ2VfYWxsb2MuYzo3Mjg6Y29tcGFjdGlvbl9jYXB0dXJlKHN0cnVjdCBjYXB0dXJlX2NvbnRyb2wgKmNhcGMsIHN0cnVjdCBwYWdlICpwYWdlLFxubW0vcGFnZV9hbGxvYy5jLTcyOS1cdFx0ICAgaW50IG9yZGVyLCBpbnQgbWlncmF0ZXR5cGUpXG4tLVxubW0vcGFnZV9hbGxvYy5jPTc2ND1zdGF0aWMgaW5saW5lIGJvb2xcbm1tL3BhZ2VfYWxsb2MuYzo3NjU6Y29tcGFjdGlvbl9jYXB0dXJlKHN0cnVjdCBjYXB0dXJlX2NvbnRyb2wgKmNhcGMsIHN0cnVjdCBwYWdlICpwYWdlLFxubW0vcGFnZV9hbGxvYy5jLTc2Ni1cdFx0ICAgaW50IG9yZGVyLCBpbnQgbWlncmF0ZXR5cGUpXG4tLVxubW0vcGFnZV9hbGxvYy5jPTkzNj1zdGF0aWMgaW5saW5lIHZvaWQgX19mcmVlX29uZV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlLFxuLS1cbm1tL3BhZ2VfYWxsb2MuYy05NTgtXG5tbS9wYWdlX2FsbG9jLmM6OTU5Olx0XHRpZiAoY29tcGFjdGlvbl9jYXB0dXJlKGNhcGMsIHBhZ2UsIG9yZGVyLCBtaWdyYXRldHlwZSkpIHtcbm1tL3BhZ2VfYWxsb2MuYy05NjAtXHRcdFx0YWNjb3VudF9mcmVlcGFnZXMoem9uZSwgLSgxIFx1MDAzY1x1MDAzYyBvcmRlciksIG1pZ3JhdGV0eXBlKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjYgMjA6MjM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjAzNjMKCQkJCQkJCW91dHB1dDogMTUwCgkJCQkJCQl0aG91Z2h0czogNDQzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBNZW1vcnkgQ29tcGFjdGlvbiBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBiZWVuIGRpZ2dpbmcgaW50byB0aGlzIHBhdGNoLiBUaGUga2V5IHRoaW5nIEkmIzM5O20gc2VlaW5nIGlzIHRoYXQgaXQmIzM5O3MgYWxsIGFib3V0IG1lbW9yeSBjb21wYWN0aW9uIGFuZCBhbGxvY2F0aW9uLCBhbmQgaG93IHRoZXkgaW50ZXJhY3QuIFNwZWNpZmljYWxseSwgaXQmIzM5O3MgbWFraW5nIHNvbWUgY2hhbmdlcyB0byBkaXJlY3QgY29tcGFjdGlvbiBhbmQgcmVjbGFpbSwgZm9jdXNpbmcgb24gaG93IHRoZXkgaGFuZGxlIHBhZ2UgY2FwdHVyZSBhbmQgY29tcGFjdGlvbiBvcmRlcnMuIFRoZSBnb2FsIHNlZW1zIHRvIGJlIHRvIGltcHJvdmUgbWVtb3J5IG1hbmFnZW1lbnQgYnkgcHJvbW90aW5nIHRoZSBjb21wYWN0aW9uIG9yZGVyIHRvIGBwYWdlYmxvY2tfb3JkZXJgIHVuZGVyIGNlcnRhaW4gYWxsb2NhdGlvbiBzY2VuYXJpb3MgdG8gcmVkdWNlIGZyYWdtZW50YXRpb24uCgpUaGUgaW1wb3J0YW50IHRoaW5nIGlzIHRoYXQgYF9fZnJlZV9vbmVfcGFnZWAgaXMgYmVpbmcgY2FsbGVkLCB3aGljaCBpcyBhIGhvdCBwYXRoLCBhbmQgd2UgZG9uJiMzOTt0IHdhbnQgdG8gaW5jbHVkZSB0aGlzIGluIGBGb2N1c1N5bWJvbHNgLgoKU28sIHRoZSBjcml0aWNhbCBmdW5jdGlvbnMgdG8gZm9jdXMgb24gYXJlOgoKKiAgIGBfX2FsbG9jX3BhZ2VzX2RpcmVjdF9jb21wYWN0YAoqICAgYHRyeV90b19jb21wYWN0X3BhZ2VzYAoqICAgYGNvbXBhY3Rfem9uZV9vcmRlcmAKKiAgIGBzdWl0YWJsZV9taWdyYXRpb25fc291cmNlYAoqICAgYGZhc3RfZmluZF9taWdyYXRlYmxvY2tgCgpJIHdlbnQgYmFjayBhbmQgY2hlY2tlZCBpZiBhbnkgb3RoZXIgZnVuY3Rpb25zIHdlcmUgbW9kaWZpZWQuIEkgZm91bmQgYHRhc2tfY2FwY2AgYnV0IHNpbmNlIHRoYXQmIzM5O3MgaW5saW5lIGl0JiMzOTtzIG5vdCBhIG1ham9yIGNvbmNlcm4uCgpUaGlua2luZyBpdCB0aHJvdWdoLCB0aGUgcGF0Y2ggaXMgdG91Y2hpbmcgY29yZSBtZW1vcnkgbWFuYWdlbWVudCDigJMgZGlyZWN0IGNvbXBhY3Rpb24sIHJlY2xhaW0sIGFsbG9jYXRpb24g4oCTIGFuZCB0aGF0JiMzOTtzIGV4YWN0bHkgdGhlIGtpbmQgb2YgdGhpbmcgd2Ugd2FudCB0byBmdXp6LiBUaGUgc2NlbmFyaW9zIGl0IHRhcmdldHMgYXJlIHRob3NlIHRoYXQgaW52b2x2ZSBoaWdoZXItb3JkZXIgbWVtb3J5IGFsbG9jYXRpb25zIGFuZCBtZW1vcnkgcHJlc3N1cmUuIEl0IHNlZW1zIGZ1bmN0aW9uYWwgYW5kIGRlZmluaXRlbHkgd29ydGh5IG9mIGZ1enppbmcuCgpUaGUgcmVsZXZhbnQgY29uZmlnIGlzIGBDT01QQUNUSU9OYCwgYW5kIHRoZXJlJiMzOTtzIGFuIG9wdGlvbmFsIGRlcGVuZGVuY2Ugb24gYENPTkZJR19DTUFgIHdpdGhpbiBgc3VpdGFibGVfbWlncmF0aW9uX3NvdXJjZWAsIGJ1dCBgQ09NUEFDVElPTmAgaXMgdGhlIHByaW1hcnkgb25lLCBzbyB0aGF0JiMzOTtzIHdoYXQgSSYjMzk7bGwgbGlzdC4KCkkgdGhpbmsgSSYjMzk7dmUgZ290IGEgc29saWQgZ3Jhc3Agb24gdGhpcyBub3cuIEkmIzM5O2xsIG1vdmUgb24gdG8gYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjYgMjA6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0NPTVBBQ1RJT04mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtfX2FsbG9jX3BhZ2VzX2RpcmVjdF9jb21wYWN0JiMzNDssCiAgICAmIzM0O3RyeV90b19jb21wYWN0X3BhZ2VzJiMzNDssCiAgICAmIzM0O2NvbXBhY3Rfem9uZV9vcmRlciYjMzQ7LAogICAgJiMzNDtzdWl0YWJsZV9taWdyYXRpb25fc291cmNlJiMzNDssCiAgICAmIzM0O2Zhc3RfZmluZF9taWdyYXRlYmxvY2smIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgbWVtb3J5IGNvbXBhY3Rpb24gYW5kIGFsbG9jYXRpb24gbG9naWMsIHNwZWNpZmljYWxseSBob3cgZGlyZWN0IGNvbXBhY3Rpb24gYW5kIHJlY2xhaW0gaGFuZGxlIHBhZ2UgY2FwdHVyZSBhbmQgY29tcGFjdGlvbiBvcmRlcnMuIEl0IHByb21vdGVzIHRoZSBjb21wYWN0aW9uIG9yZGVyIHRvIGBwYWdlYmxvY2tfb3JkZXJgIGZvciBjZXJ0YWluIGFsbG9jYXRpb25zIHRvIHByZXZlbnQgZnJhZ21lbnRhdGlvbi4gVGhpcyBpcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljIHRoYXQgaXMgcmVhY2hhYmxlIGR1cmluZyBoaWdoLW9yZGVyIG1lbW9yeSBhbGxvY2F0aW9ucyBhbmQgbWVtb3J5IHByZXNzdXJlLiBJdCBpcyBmdW5jdGlvbmFsIGFuZCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtDT01QQUNUSU9OJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7X19hbGxvY19wYWdlc19kaXJlY3RfY29tcGFjdCYjMzQ7LAogICAgJiMzNDt0cnlfdG9fY29tcGFjdF9wYWdlcyYjMzQ7LAogICAgJiMzNDtjb21wYWN0X3pvbmVfb3JkZXImIzM0OywKICAgICYjMzQ7c3VpdGFibGVfbWlncmF0aW9uX3NvdXJjZSYjMzQ7LAogICAgJiMzNDtmYXN0X2ZpbmRfbWlncmF0ZWJsb2NrJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIG1lbW9yeSBjb21wYWN0aW9uIGFuZCBhbGxvY2F0aW9uIGxvZ2ljLCBzcGVjaWZpY2FsbHkgaG93IGRpcmVjdCBjb21wYWN0aW9uIGFuZCByZWNsYWltIGhhbmRsZSBwYWdlIGNhcHR1cmUgYW5kIGNvbXBhY3Rpb24gb3JkZXJzLiBJdCBwcm9tb3RlcyB0aGUgY29tcGFjdGlvbiBvcmRlciB0byBgcGFnZWJsb2NrX29yZGVyYCBmb3IgY2VydGFpbiBhbGxvY2F0aW9ucyB0byBwcmV2ZW50IGZyYWdtZW50YXRpb24uIFRoaXMgaXMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYyB0aGF0IGlzIHJlYWNoYWJsZSBkdXJpbmcgaGlnaC1vcmRlciBtZW1vcnkgYWxsb2NhdGlvbnMgYW5kIG1lbW9yeSBwcmVzc3VyZS4gSXQgaXMgZnVuY3Rpb25hbCBhbmQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI2VDIwOjIxOjUzLjYwOTEyMTU1M1oiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc2MzA2NTkwNjQwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkNPTVBBQ1RJT05cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJfX2FsbG9jX3BhZ2VzX2RpcmVjdF9jb21wYWN0XCIsXG4gICAgXCJ0cnlfdG9fY29tcGFjdF9wYWdlc1wiLFxuICAgIFwiY29tcGFjdF96b25lX29yZGVyXCIsXG4gICAgXCJzdWl0YWJsZV9taWdyYXRpb25fc291cmNlXCIsXG4gICAgXCJmYXN0X2ZpbmRfbWlncmF0ZWJsb2NrXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgbWVtb3J5IGNvbXBhY3Rpb24gYW5kIGFsbG9jYXRpb24gbG9naWMsIHNwZWNpZmljYWxseSBob3cgZGlyZWN0IGNvbXBhY3Rpb24gYW5kIHJlY2xhaW0gaGFuZGxlIHBhZ2UgY2FwdHVyZSBhbmQgY29tcGFjdGlvbiBvcmRlcnMuIEl0IHByb21vdGVzIHRoZSBjb21wYWN0aW9uIG9yZGVyIHRvIGBwYWdlYmxvY2tfb3JkZXJgIGZvciBjZXJ0YWluIGFsbG9jYXRpb25zIHRvIHByZXZlbnQgZnJhZ21lbnRhdGlvbi4gVGhpcyBpcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljIHRoYXQgaXMgcmVhY2hhYmxlIGR1cmluZyBoaWdoLW9yZGVyIG1lbW9yeSBhbGxvY2F0aW9ucyBhbmQgbWVtb3J5IHByZXNzdXJlLiBJdCBpcyBmdW5jdGlvbmFsIGFuZCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNlQyMDoyMTo1My42MDkxMjc1NzNaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0MDc1ODg4NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDE2YmJjNGU5OWUxYWQ2ZWM3MTBjMDk5ODFkZDBkMDI2ZDMyZmJhMTVcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIEZyaSBKdW4gMjYgMjA6MjE6NTIgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9jb21wYWN0aW9uLmggYi9pbmNsdWRlL2xpbnV4L2NvbXBhY3Rpb24uaFxcbmluZGV4IGYyOWVmMDY1MzU0NmVkLi42NmEyZjcwZTllMDE5ZCAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L2NvbXBhY3Rpb24uaFxcbisrKyBiL2luY2x1ZGUvbGludXgvY29tcGFjdGlvbi5oXFxuQEAgLTU4LDYgKzU4LDcgQEAgZW51bSBjb21wYWN0X3Jlc3VsdCB7XFxuIH07XFxuIFxcbiBzdHJ1Y3QgYWxsb2NfY29udGV4dDsgLyogaW4gbW0vaW50ZXJuYWwuaCAqL1xcbitzdHJ1Y3QgY2FwdHVyZV9jb250cm9sOyAvKiBpbiBtbS9pbnRlcm5hbC5oICovXFxuIFxcbiAvKlxcbiAgKiBOdW1iZXIgb2YgZnJlZSBvcmRlci0wIHBhZ2VzIHRoYXQgc2hvdWxkIGJlIGF2YWlsYWJsZSBhYm92ZSBnaXZlbiB3YXRlcm1hcmtcXG5AQCAtOTIsNyArOTMsNyBAQCBleHRlcm4gaW50IGZyYWdtZW50YXRpb25faW5kZXgoc3RydWN0IHpvbmUgKnpvbmUsIHVuc2lnbmVkIGludCBvcmRlcik7XFxuIGV4dGVybiBlbnVtIGNvbXBhY3RfcmVzdWx0IHRyeV90b19jb21wYWN0X3BhZ2VzKGdmcF90IGdmcF9tYXNrLFxcbiBcXHRcXHR1bnNpZ25lZCBpbnQgb3JkZXIsIHVuc2lnbmVkIGludCBhbGxvY19mbGFncyxcXG4gXFx0XFx0Y29uc3Qgc3RydWN0IGFsbG9jX2NvbnRleHQgKmFjLCBlbnVtIGNvbXBhY3RfcHJpb3JpdHkgcHJpbyxcXG4tXFx0XFx0c3RydWN0IHBhZ2UgKipwYWdlKTtcXG4rXFx0XFx0c3RydWN0IGNhcHR1cmVfY29udHJvbCAqY2FwYyk7XFxuIGV4dGVybiB2b2lkIHJlc2V0X2lzb2xhdGlvbl9zdWl0YWJsZShwZ19kYXRhX3QgKnBnZGF0KTtcXG4gZXh0ZXJuIGJvb2wgY29tcGFjdGlvbl9zdWl0YWJsZShzdHJ1Y3Qgem9uZSAqem9uZSwgaW50IG9yZGVyLFxcbiBcXHRcXHRcXHRcXHR1bnNpZ25lZCBsb25nIHdhdGVybWFyaywgaW50IGhpZ2hlc3Rfem9uZWlkeCk7XFxuZGlmZiAtLWdpdCBhL21tL2NvbXBhY3Rpb24uYyBiL21tL2NvbXBhY3Rpb24uY1xcbmluZGV4IGYwODc2NWFkZTAxNGNlLi5jMjcwMWJmMWQwNGVkNyAxMDA2NDRcXG4tLS0gYS9tbS9jb21wYWN0aW9uLmNcXG4rKysgYi9tbS9jb21wYWN0aW9uLmNcXG5AQCAtMTM4MSwxMiArMTM4MSwzMyBAQCBzdGF0aWMgYm9vbCBzdWl0YWJsZV9taWdyYXRpb25fc291cmNlKHN0cnVjdCBjb21wYWN0X2NvbnRyb2wgKmNjLFxcbiBcXHRpZiAocGFnZWJsb2NrX3NraXBfcGVyc2lzdGVudChwYWdlKSlcXG4gXFx0XFx0cmV0dXJuIGZhbHNlO1xcbiBcXG4tXFx0aWYgKChjYy1cXHUwMDNlbW9kZSAhPSBNSUdSQVRFX0FTWU5DKSB8fCAhY2MtXFx1MDAzZWRpcmVjdF9jb21wYWN0aW9uKVxcbitcXHQvKlxcbitcXHQgKiBCYWNrZ3JvdW5kIGNvbXBhY3Rpb24gcHJvZHVjZXMgYmxvY2tzIGZvciB0aGUgem9uZSBhdFxcbitcXHQgKiBsYXJnZSwgd2l0aCBubyBwYXJ0aWN1bGFyIGFsbG9jYXRpb24gY29udGV4dC4gQWxsb3cgYWxsXFxuK1xcdCAqIGJsb2NrIHR5cGVzLCBpbmNsdWRpbmcgQ01BLlxcbitcXHQgKi9cXG4rXFx0aWYgKCFjYy1cXHUwMDNlZGlyZWN0X2NvbXBhY3Rpb24pXFxuIFxcdFxcdHJldHVybiB0cnVlO1xcbiBcXG4gXFx0YmxvY2tfbXQgPSBnZXRfcGFnZWJsb2NrX21pZ3JhdGV0eXBlKHBhZ2UpO1xcbiBcXG4tXFx0aWYgKGNjLVxcdTAwM2VtaWdyYXRldHlwZSA9PSBNSUdSQVRFX01PVkFCTEUpXFxuK1xcdC8qXFxuK1xcdCAqIENNQSBwYWdlcyBjYW4gb25seSBiZSB0YWtlbiBieSBBTExPQ19DTUEgcmVxdWVzdHMuIEZvciBhbnlib2R5XFxuK1xcdCAqIGVsc2UsIHZhY2F0aW5nIGEgQ01BIGJsb2NrIGNvbnN1bWVzIGZyZWUgcGFnZXMgdGhlIGNhbGxlclxcbitcXHQgKiBjb3VsZCBoYXZlIHVzZWQsIGFuZCBwcm9kdWNlcyBmcmVlIHBhZ2VzIGl0IGNhbm5vdC5cXG4rXFx0ICovXFxuK1xcdGlmIChpc19taWdyYXRlX2NtYShibG9ja19tdCkgXFx1MDAyNlxcdTAwMjYgIShjYy1cXHUwMDNlYWxsb2NfZmxhZ3MgXFx1MDAyNiBBTExPQ19DTUEpKVxcbitcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcbitcXHRpZiAoY2MtXFx1MDAzZW1vZGUgIT0gTUlHUkFURV9BU1lOQylcXG4rXFx0XFx0cmV0dXJuIHRydWU7XFxuK1xcbitcXHQvKlxcbitcXHQgKiBQcmV2ZW50IHNtYWxsIHVubW92YWJsZS9yZWNsYWltYWJsZSByZXF1ZXN0cyBmcm9tIHBvbGx1dGluZ1xcbitcXHQgKiBtb3ZhYmxlIGJsb2NrcyB0aHJvdWdoIGZhbGxiYWNrcy4gV2hvbGUtYmxvY2sgcHJvZHVjdGlvbiBpc1xcbitcXHQgKiBleGVtcHQgYXMgdGhlIGFsbG9jYXRvciBjbGFpbXMgYW5kIGNvbnZlcnRzIHRoZXNlLlxcbitcXHQgKi9cXG4rXFx0aWYgKGNjLVxcdTAwM2VtaWdyYXRldHlwZSA9PSBNSUdSQVRFX01PVkFCTEUgfHwgY2MtXFx1MDAzZW9yZGVyIFxcdTAwM2U9IHBhZ2VibG9ja19vcmRlcilcXG4gXFx0XFx0cmV0dXJuIGlzX21pZ3JhdGVfbW92YWJsZShibG9ja19tdCk7XFxuIFxcdGVsc2VcXG4gXFx0XFx0cmV0dXJuIGJsb2NrX210ID09IGNjLVxcdTAwM2VtaWdyYXRldHlwZTtcXG5AQCAtMTk3NCwxMiArMTk5NSwxMiBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBmYXN0X2ZpbmRfbWlncmF0ZWJsb2NrKHN0cnVjdCBjb21wYWN0X2NvbnRyb2wgKmNjKVxcbiBcXHRcXHRyZXR1cm4gcGZuO1xcbiBcXG4gXFx0LypcXG4tXFx0ICogT25seSBhbGxvdyBrY29tcGFjdGQgYW5kIGRpcmVjdCByZXF1ZXN0cyBmb3IgbW92YWJsZSBwYWdlcyB0b1xcbi1cXHQgKiBxdWlja2x5IGNsZWFyIG91dCBhIE1PVkFCTEUgcGFnZWJsb2NrIGZvciBhbGxvY2F0aW9uLiBUaGlzXFxuLVxcdCAqIHJlZHVjZXMgdGhlIHJpc2sgdGhhdCBhIGxhcmdlIG1vdmFibGUgcGFnZWJsb2NrIGlzIGZyZWVkIGZvclxcbi1cXHQgKiBhbiB1bm1vdmFibGUvcmVjbGFpbWFibGUgc21hbGwgYWxsb2NhdGlvbi5cXG4rXFx0ICogUHJldmVudCBzbWFsbCB1bm1vdmFibGUvcmVjbGFpbWFibGUgcmVxdWVzdHMgZnJvbSBwb2xsdXRpbmdcXG4rXFx0ICogbW92YWJsZSBibG9ja3MgdGhyb3VnaCBmYWxsYmFja3MuIFdob2xlLWJsb2NrIHByb2R1Y3Rpb24gaXNcXG4rXFx0ICogZXhlbXB0IGFzIHRoZSBhbGxvY2F0b3IgY2xhaW1zIGFuZCBjb252ZXJ0cyB0aGVzZS5cXG4gXFx0ICovXFxuLVxcdGlmIChjYy1cXHUwMDNlZGlyZWN0X2NvbXBhY3Rpb24gXFx1MDAyNlxcdTAwMjYgY2MtXFx1MDAzZW1pZ3JhdGV0eXBlICE9IE1JR1JBVEVfTU9WQUJMRSlcXG4rXFx0aWYgKGNjLVxcdTAwM2VkaXJlY3RfY29tcGFjdGlvbiBcXHUwMDI2XFx1MDAyNiBjYy1cXHUwMDNlbWlncmF0ZXR5cGUgIT0gTUlHUkFURV9NT1ZBQkxFIFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICBjYy1cXHUwMDNlb3JkZXIgXFx1MDAzYyBwYWdlYmxvY2tfb3JkZXIpXFxuIFxcdFxcdHJldHVybiBwZm47XFxuIFxcbiBcXHQvKlxcbkBAIC0yNzcwLDcgKzI3OTEsNyBAQCBjb21wYWN0X3pvbmUoc3RydWN0IGNvbXBhY3RfY29udHJvbCAqY2MsIHN0cnVjdCBjYXB0dXJlX2NvbnRyb2wgKmNhcGMpXFxuIHN0YXRpYyBlbnVtIGNvbXBhY3RfcmVzdWx0IGNvbXBhY3Rfem9uZV9vcmRlcihzdHJ1Y3Qgem9uZSAqem9uZSwgaW50IG9yZGVyLFxcbiBcXHRcXHRnZnBfdCBnZnBfbWFzaywgZW51bSBjb21wYWN0X3ByaW9yaXR5IHByaW8sXFxuIFxcdFxcdHVuc2lnbmVkIGludCBhbGxvY19mbGFncywgaW50IGhpZ2hlc3Rfem9uZWlkeCxcXG4tXFx0XFx0c3RydWN0IHBhZ2UgKipjYXB0dXJlKVxcbitcXHRcXHRzdHJ1Y3QgY2FwdHVyZV9jb250cm9sICpjYXBjKVxcbiB7XFxuIFxcdGVudW0gY29tcGFjdF9yZXN1bHQgcmV0O1xcbiBcXHRzdHJ1Y3QgY29tcGFjdF9jb250cm9sIGNjID0ge1xcbkBAIC0yNzg3LDM1ICsyODA4LDIyIEBAIHN0YXRpYyBlbnVtIGNvbXBhY3RfcmVzdWx0IGNvbXBhY3Rfem9uZV9vcmRlcihzdHJ1Y3Qgem9uZSAqem9uZSwgaW50IG9yZGVyLFxcbiBcXHRcXHQuaWdub3JlX3NraXBfaGludCA9IChwcmlvID09IE1JTl9DT01QQUNUX1BSSU9SSVRZKSxcXG4gXFx0XFx0Lmlnbm9yZV9ibG9ja19zdWl0YWJsZSA9IChwcmlvID09IE1JTl9DT01QQUNUX1BSSU9SSVRZKVxcbiBcXHR9O1xcbi1cXHRzdHJ1Y3QgY2FwdHVyZV9jb250cm9sIGNhcGMgPSB7XFxuLVxcdFxcdC5jYyA9IFxcdTAwMjZjYyxcXG4tXFx0XFx0LnBhZ2UgPSBOVUxMLFxcbi1cXHR9O1xcbiBcXG4tXFx0LypcXG4tXFx0ICogTWFrZSBzdXJlIHRoZSBzdHJ1Y3RzIGFyZSByZWFsbHkgaW5pdGlhbGl6ZWQgYmVmb3JlIHdlIGV4cG9zZSB0aGVcXG4tXFx0ICogY2FwdHVyZSBjb250cm9sLCBpbiBjYXNlIHdlIGFyZSBpbnRlcnJ1cHRlZCBhbmQgdGhlIGludGVycnVwdCBoYW5kbGVyXFxuLVxcdCAqIGZyZWVzIGEgcGFnZS5cXG4tXFx0ICovXFxuK1xcdC8qIFNlZSB0aGUgY29tbWVudCBpbiBfX2FsbG9jX3BhZ2VzX2RpcmVjdF9jb21wYWN0KCkgKi9cXG4gXFx0YmFycmllcigpO1xcbi1cXHRXUklURV9PTkNFKGN1cnJlbnQtXFx1MDAzZWNhcHR1cmVfY29udHJvbCwgXFx1MDAyNmNhcGMpO1xcbitcXHRXUklURV9PTkNFKGNhcGMtXFx1MDAzZWNjLCBcXHUwMDI2Y2MpO1xcbiBcXG4tXFx0cmV0ID0gY29tcGFjdF96b25lKFxcdTAwMjZjYywgXFx1MDAyNmNhcGMpO1xcbitcXHRyZXQgPSBjb21wYWN0X3pvbmUoXFx1MDAyNmNjLCBjYXBjKTtcXG4rXFxuK1xcdFdSSVRFX09OQ0UoY2FwYy1cXHUwMDNlY2MsIE5VTEwpO1xcbiBcXG4tXFx0LypcXG4tXFx0ICogTWFrZSBzdXJlIHdlIGhpZGUgY2FwdHVyZSBjb250cm9sIGZpcnN0IGJlZm9yZSB3ZSByZWFkIHRoZSBjYXB0dXJlZFxcbi1cXHQgKiBwYWdlIHBvaW50ZXIsIG90aGVyd2lzZSBhbiBpbnRlcnJ1cHQgY291bGQgZnJlZSBhbmQgY2FwdHVyZSBhIHBhZ2VcXG4tXFx0ICogYW5kIHdlIHdvdWxkIGxlYWsgaXQuXFxuLVxcdCAqL1xcbi1cXHRXUklURV9PTkNFKGN1cnJlbnQtXFx1MDAzZWNhcHR1cmVfY29udHJvbCwgTlVMTCk7XFxuLVxcdCpjYXB0dXJlID0gUkVBRF9PTkNFKGNhcGMucGFnZSk7XFxuIFxcdC8qXFxuIFxcdCAqIFRlY2huaWNhbGx5LCBpdCBpcyBhbHNvIHBvc3NpYmxlIHRoYXQgY29tcGFjdGlvbiBpcyBza2lwcGVkIGJ1dFxcbiBcXHQgKiB0aGUgcGFnZSBpcyBzdGlsbCBjYXB0dXJlZCBvdXQgb2YgbHVjayhJUlEgY2FtZSBhbmQgZnJlZWQgdGhlIHBhZ2UpLlxcbiBcXHQgKiBSZXR1cm5pbmcgQ09NUEFDVF9TVUNDRVNTIGluIHN1Y2ggY2FzZXMgaGVscHMgaW4gcHJvcGVybHkgYWNjb3VudGluZ1xcbiBcXHQgKiB0aGUgQ09NUEFDVFtTVEFMTHxGQUlMXSB3aGVuIGNvbXBhY3Rpb24gaXMgc2tpcHBlZC5cXG4gXFx0ICovXFxuLVxcdGlmICgqY2FwdHVyZSlcXG4rXFx0aWYgKGNhcGMtXFx1MDAzZXBhZ2UpXFxuIFxcdFxcdHJldCA9IENPTVBBQ1RfU1VDQ0VTUztcXG4gXFxuIFxcdHJldHVybiByZXQ7XFxuQEAgLTI4MjgsMTMgKzI4MzYsMTMgQEAgc3RhdGljIGVudW0gY29tcGFjdF9yZXN1bHQgY29tcGFjdF96b25lX29yZGVyKHN0cnVjdCB6b25lICp6b25lLCBpbnQgb3JkZXIsXFxuICAqIEBhbGxvY19mbGFnczogVGhlIGFsbG9jYXRpb24gZmxhZ3Mgb2YgdGhlIGN1cnJlbnQgYWxsb2NhdGlvblxcbiAgKiBAYWM6IFRoZSBjb250ZXh0IG9mIGN1cnJlbnQgYWxsb2NhdGlvblxcbiAgKiBAcHJpbzogRGV0ZXJtaW5lcyBob3cgaGFyZCBkaXJlY3QgY29tcGFjdGlvbiBzaG91bGQgdHJ5IHRvIHN1Y2NlZWRcXG4tICogQGNhcHR1cmU6IFBvaW50ZXIgdG8gZnJlZSBwYWdlIGNyZWF0ZWQgYnkgY29tcGFjdGlvbiB3aWxsIGJlIHN0b3JlZCBoZXJlXFxuKyAqIEBjYXBjOiBUaGUgY29udGV4dCBmb3IgY2FwdHVyaW5nIHBhZ2VzIGR1cmluZyBmcmVlaW5nXFxuICAqXFxuICAqIFRoaXMgaXMgdGhlIG1haW4gZW50cnkgcG9pbnQgZm9yIGRpcmVjdCBwYWdlIGNvbXBhY3Rpb24uXFxuICAqL1xcbiBlbnVtIGNvbXBhY3RfcmVzdWx0IHRyeV90b19jb21wYWN0X3BhZ2VzKGdmcF90IGdmcF9tYXNrLCB1bnNpZ25lZCBpbnQgb3JkZXIsXFxuIFxcdFxcdHVuc2lnbmVkIGludCBhbGxvY19mbGFncywgY29uc3Qgc3RydWN0IGFsbG9jX2NvbnRleHQgKmFjLFxcbi1cXHRcXHRlbnVtIGNvbXBhY3RfcHJpb3JpdHkgcHJpbywgc3RydWN0IHBhZ2UgKipjYXB0dXJlKVxcbitcXHRcXHRlbnVtIGNvbXBhY3RfcHJpb3JpdHkgcHJpbywgc3RydWN0IGNhcHR1cmVfY29udHJvbCAqY2FwYylcXG4ge1xcbiBcXHRzdHJ1Y3Qgem9uZXJlZiAqejtcXG4gXFx0c3RydWN0IHpvbmUgKnpvbmU7XFxuQEAgLTI4NjIsNyArMjg3MCw3IEBAIGVudW0gY29tcGFjdF9yZXN1bHQgdHJ5X3RvX2NvbXBhY3RfcGFnZXMoZ2ZwX3QgZ2ZwX21hc2ssIHVuc2lnbmVkIGludCBvcmRlcixcXG4gXFx0XFx0fVxcbiBcXG4gXFx0XFx0c3RhdHVzID0gY29tcGFjdF96b25lX29yZGVyKHpvbmUsIG9yZGVyLCBnZnBfbWFzaywgcHJpbyxcXG4tXFx0XFx0XFx0XFx0YWxsb2NfZmxhZ3MsIGFjLVxcdTAwM2VoaWdoZXN0X3pvbmVpZHgsIGNhcHR1cmUpO1xcbitcXHRcXHRcXHRcXHRhbGxvY19mbGFncywgYWMtXFx1MDAzZWhpZ2hlc3Rfem9uZWlkeCwgY2FwYyk7XFxuIFxcdFxcdHJjID0gbWF4KHN0YXR1cywgcmMpO1xcbiBcXG4gXFx0XFx0LyogVGhlIGFsbG9jYXRpb24gc2hvdWxkIHN1Y2NlZWQsIHN0b3AgY29tcGFjdGluZyAqL1xcbmRpZmYgLS1naXQgYS9tbS9pbnRlcm5hbC5oIGIvbW0vaW50ZXJuYWwuaFxcbmluZGV4IDE4MWU3OWYxZDZhMjA3Li4xZjYzNmNmYzg1OWExYSAxMDA2NDRcXG4tLS0gYS9tbS9pbnRlcm5hbC5oXFxuKysrIGIvbW0vaW50ZXJuYWwuaFxcbkBAIC0xMDYwLDYgKzEwNjAsMTMgQEAgc3RydWN0IGNvbXBhY3RfY29udHJvbCB7XFxuICAqL1xcbiBzdHJ1Y3QgY2FwdHVyZV9jb250cm9sIHtcXG4gXFx0c3RydWN0IGNvbXBhY3RfY29udHJvbCAqY2M7XFxuK1xcdC8qXFxuK1xcdCAqIEFsbG9jYXRpb24gcmVxdWVzdCBvcmRlci4gTWF5IGRpZmZlciBmcm9tIHRoZSBjb21wYWN0aW9uXFxuK1xcdCAqIG9yZGVyOiBkZWZyYWdfbW9kZSBwcm9tb3RlcyBzdWItYmxvY2sgYWxsb2NhdGlvbnMgdG9cXG4rXFx0ICogcGFnZWJsb2NrLW9yZGVyIGNvbXBhY3Rpb247IGNhcHR1cmUgc3RpbGwgbWF0Y2hlcyBhdCB0aGVcXG4rXFx0ICogb3JpZ2luYWwgYWxsb2NhdGlvbiBvcmRlciBzbyBwcmVwX25ld19wYWdlKCkgaXMgY29uc2lzdGVudC5cXG4rXFx0ICovXFxuK1xcdGludCBvcmRlcjtcXG4gXFx0c3RydWN0IHBhZ2UgKnBhZ2U7XFxuIH07XFxuIFxcbmRpZmYgLS1naXQgYS9tbS9wYWdlX2FsbG9jLmMgYi9tbS9wYWdlX2FsbG9jLmNcXG5pbmRleCBlZTkwMmE0NjhjMmY1Yi4uNTc1YTk5YTRjNzIzODQgMTAwNjQ0XFxuLS0tIGEvbW0vcGFnZV9hbGxvYy5jXFxuKysrIGIvbW0vcGFnZV9hbGxvYy5jXFxuQEAgLTcxOCw3ICs3MTgsNyBAQCBzdGF0aWMgaW5saW5lIHN0cnVjdCBjYXB0dXJlX2NvbnRyb2wgKnRhc2tfY2FwYyhzdHJ1Y3Qgem9uZSAqem9uZSlcXG4ge1xcbiBcXHRzdHJ1Y3QgY2FwdHVyZV9jb250cm9sICpjYXBjID0gY3VycmVudC1cXHUwMDNlY2FwdHVyZV9jb250cm9sO1xcbiBcXG4tXFx0cmV0dXJuIHVubGlrZWx5KGNhcGMpIFxcdTAwMjZcXHUwMDI2XFxuK1xcdHJldHVybiB1bmxpa2VseShjYXBjIFxcdTAwMjZcXHUwMDI2IGNhcGMtXFx1MDAzZWNjKSBcXHUwMDI2XFx1MDAyNlxcbiBcXHRcXHQhKGN1cnJlbnQtXFx1MDAzZWZsYWdzIFxcdTAwMjYgUEZfS1RIUkVBRCkgXFx1MDAyNlxcdTAwMjZcXG4gXFx0XFx0IWNhcGMtXFx1MDAzZXBhZ2UgXFx1MDAyNlxcdTAwMjZcXG4gXFx0XFx0Y2FwYy1cXHUwMDNlY2MtXFx1MDAzZXpvbmUgPT0gem9uZSA/IGNhcGMgOiBOVUxMO1xcbkBAIC03MjgsNyArNzI4LDcgQEAgc3RhdGljIGlubGluZSBib29sXFxuIGNvbXBhY3Rpb25fY2FwdHVyZShzdHJ1Y3QgY2FwdHVyZV9jb250cm9sICpjYXBjLCBzdHJ1Y3QgcGFnZSAqcGFnZSxcXG4gXFx0XFx0ICAgaW50IG9yZGVyLCBpbnQgbWlncmF0ZXR5cGUpXFxuIHtcXG4tXFx0aWYgKCFjYXBjIHx8IG9yZGVyICE9IGNhcGMtXFx1MDAzZWNjLVxcdTAwM2VvcmRlcilcXG4rXFx0aWYgKCFjYXBjIHx8IG9yZGVyICE9IGNhcGMtXFx1MDAzZW9yZGVyKVxcbiBcXHRcXHRyZXR1cm4gZmFsc2U7XFxuIFxcbiBcXHQvKiBEbyBub3QgYWNjaWRlbnRhbGx5IHBvbGx1dGUgQ01BIG9yIGlzb2xhdGVkIHJlZ2lvbnMqL1xcbkBAIC03NDgsNyArNzQ4LDcgQEAgY29tcGFjdGlvbl9jYXB0dXJlKHN0cnVjdCBjYXB0dXJlX2NvbnRyb2wgKmNhcGMsIHN0cnVjdCBwYWdlICpwYWdlLFxcbiBcXHRcXHRyZXR1cm4gZmFsc2U7XFxuIFxcbiBcXHRpZiAobWlncmF0ZXR5cGUgIT0gY2FwYy1cXHUwMDNlY2MtXFx1MDAzZW1pZ3JhdGV0eXBlKVxcbi1cXHRcXHR0cmFjZV9tbV9wYWdlX2FsbG9jX2V4dGZyYWcocGFnZSwgY2FwYy1cXHUwMDNlY2MtXFx1MDAzZW9yZGVyLCBvcmRlcixcXG4rXFx0XFx0dHJhY2VfbW1fcGFnZV9hbGxvY19leHRmcmFnKHBhZ2UsIGNhcGMtXFx1MDAzZW9yZGVyLCBvcmRlcixcXG4gXFx0XFx0XFx0XFx0XFx0ICAgIGNhcGMtXFx1MDAzZWNjLVxcdTAwM2VtaWdyYXRldHlwZSwgbWlncmF0ZXR5cGUpO1xcbiBcXG4gXFx0Y2FwYy1cXHUwMDNlcGFnZSA9IHBhZ2U7XFxuQEAgLTQxNDYsMjEgKzQxNDYsNTkgQEAgX19hbGxvY19wYWdlc19kaXJlY3RfY29tcGFjdChnZnBfdCBnZnBfbWFzaywgdW5zaWduZWQgaW50IG9yZGVyLFxcbiBcXHRzdHJ1Y3QgcGFnZSAqcGFnZSA9IE5VTEw7XFxuIFxcdHVuc2lnbmVkIGxvbmcgcGZsYWdzO1xcbiBcXHR1bnNpZ25lZCBpbnQgbm9yZWNsYWltX2ZsYWc7XFxuK1xcdHN0cnVjdCBjYXB0dXJlX2NvbnRyb2wgY2FwYyA9IHtcXG4rXFx0XFx0Lm9yZGVyID0gb3JkZXIsXFxuK1xcdFxcdC5wYWdlID0gTlVMTCxcXG4rXFx0fTtcXG4rXFx0aW50IGNvbXBhY3Rfb3JkZXIgPSBvcmRlcjtcXG4gXFxuLVxcdGlmICghb3JkZXIpXFxuK1xcdC8qXFxuK1xcdCAqIElmIGZhbGxiYWNrcyBhcmUgbm90IHBlcm1pdHRlZCAoZGVmcmFnX21vZGUpLCB3ZSBlaXRoZXJcXG4rXFx0ICogbmVlZCB0byByZWNsYWltIHNwYWNlIGluIGEgYmxvY2sgb2YgbWF0Y2hpbmcgdHlwZSwgb3IgY2xlYXJcXG4rXFx0ICogb3V0IGFuIGVudGlyZSBibG9jayB0byBhbGxvdyBfX3JtcXVldWVfY2xhaW0oKSB0byBjb252ZXJ0LlxcbitcXHQgKlxcbitcXHQgKiBSZWNsYWltIGJ5IGl0c2VsZiBpcyBwcmltYXJpbHkgZnJlZWluZyBzcGFjZSBpbiBtb3ZhYmxlXFxuK1xcdCAqIGJsb2Nrcywgc2luY2UgdGhhdCdzIHdoZXJlIHRoZSBMUlUgcGFnZXMgbGl2ZS4gU28gdGhpc1xcbitcXHQgKiB3b3JrcyBmb3IgbW92YWJsZSByZXF1ZXN0cywgYnV0IG5vdCBmb3Igb3RoZXJzLlxcbitcXHQgKlxcbitcXHQgKiBGb3IgdGhvc2UsIHByb21vdGUgdGhlIG9yZGVyIHRvIGhlbHAgbWFrZSBibG9ja3MsIGluc3RlYWRcXG4rXFx0ICogb2Ygc3Bpbm5pbmcgaW4gcmVjbGFpbSBhbG9uZSB1bnByb2R1Y3RpdmVseS5cXG4rXFx0ICovXFxuK1xcdGlmICgoYWxsb2NfZmxhZ3MgXFx1MDAyNiBBTExPQ19OT0ZSQUdNRU5UKSBcXHUwMDI2XFx1MDAyNiBhYy1cXHUwMDNlbWlncmF0ZXR5cGUgIT0gTUlHUkFURV9NT1ZBQkxFKVxcbitcXHRcXHRjb21wYWN0X29yZGVyID0gbWF4KG9yZGVyLCBwYWdlYmxvY2tfb3JkZXIpO1xcbitcXG4rXFx0aWYgKCFjb21wYWN0X29yZGVyKVxcbiBcXHRcXHRyZXR1cm4gTlVMTDtcXG4gXFxuK1xcdC8qXFxuK1xcdCAqIE1ha2Ugc3VyZSB0aGUgc3RydWN0cyBhcmUgcmVhbGx5IGluaXRpYWxpemVkIGJlZm9yZSB3ZSBleHBvc2UgdGhlXFxuK1xcdCAqIGNhcHR1cmUgY29udHJvbCwgaW4gY2FzZSB3ZSBhcmUgaW50ZXJydXB0ZWQgYW5kIHRoZSBpbnRlcnJ1cHQgaGFuZGxlclxcbitcXHQgKiBmcmVlcyBhIHBhZ2UuXFxuK1xcdCAqL1xcbitcXHRiYXJyaWVyKCk7XFxuK1xcdFdSSVRFX09OQ0UoY3VycmVudC1cXHUwMDNlY2FwdHVyZV9jb250cm9sLCBcXHUwMDI2Y2FwYyk7XFxuK1xcbiBcXHRwc2lfbWVtc3RhbGxfZW50ZXIoXFx1MDAyNnBmbGFncyk7XFxuIFxcdGRlbGF5YWNjdF9jb21wYWN0X3N0YXJ0KCk7XFxuK1xcdGZzX3JlY2xhaW1fYWNxdWlyZShnZnBfbWFzayk7XFxuIFxcdG5vcmVjbGFpbV9mbGFnID0gbWVtYWxsb2Nfbm9yZWNsYWltX3NhdmUoKTtcXG4gXFxuLVxcdCpjb21wYWN0X3Jlc3VsdCA9IHRyeV90b19jb21wYWN0X3BhZ2VzKGdmcF9tYXNrLCBvcmRlciwgYWxsb2NfZmxhZ3MsIGFjLFxcbi1cXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRwcmlvLCBcXHUwMDI2cGFnZSk7XFxuK1xcdCpjb21wYWN0X3Jlc3VsdCA9IHRyeV90b19jb21wYWN0X3BhZ2VzKGdmcF9tYXNrLCBjb21wYWN0X29yZGVyLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgICAgYWxsb2NfZmxhZ3MsIGFjLCBwcmlvLCBcXHUwMDI2Y2FwYyk7XFxuIFxcbiBcXHRtZW1hbGxvY19ub3JlY2xhaW1fcmVzdG9yZShub3JlY2xhaW1fZmxhZyk7XFxuK1xcdGZzX3JlY2xhaW1fcmVsZWFzZShnZnBfbWFzayk7XFxuIFxcdHBzaV9tZW1zdGFsbF9sZWF2ZShcXHUwMDI2cGZsYWdzKTtcXG4gXFx0ZGVsYXlhY2N0X2NvbXBhY3RfZW5kKCk7XFxuIFxcbitcXHQvKlxcbitcXHQgKiBNYWtlIHN1cmUgd2UgaGlkZSBjYXB0dXJlIGNvbnRyb2wgZmlyc3QgYmVmb3JlIHdlIHJlYWQgdGhlIGNhcHR1cmVkXFxuK1xcdCAqIHBhZ2UgcG9pbnRlciwgb3RoZXJ3aXNlIGFuIGludGVycnVwdCBjb3VsZCBmcmVlIGFuZCBjYXB0dXJlIGEgcGFnZVxcbitcXHQgKiBhbmQgd2Ugd291bGQgbGVhayBpdC5cXG4rXFx0ICovXFxuK1xcdFdSSVRFX09OQ0UoY3VycmVudC1cXHUwMDNlY2FwdHVyZV9jb250cm9sLCBOVUxMKTtcXG4rXFx0cGFnZSA9IFJFQURfT05DRShjYXBjLnBhZ2UpO1xcbitcXG4gXFx0aWYgKCpjb21wYWN0X3Jlc3VsdCA9PSBDT01QQUNUX1NLSVBQRUQgfHxcXG4gXFx0ICAgICpjb21wYWN0X3Jlc3VsdCA9PSBDT01QQUNUX0RFRkVSUkVEKVxcbiBcXHRcXHRyZXR1cm4gTlVMTDtcXG5AQCAtNDE4Miw3ICs0MjIwLDcgQEAgX19hbGxvY19wYWdlc19kaXJlY3RfY29tcGFjdChnZnBfdCBnZnBfbWFzaywgdW5zaWduZWQgaW50IG9yZGVyLFxcbiBcXHRcXHRzdHJ1Y3Qgem9uZSAqem9uZSA9IHBhZ2Vfem9uZShwYWdlKTtcXG4gXFxuIFxcdFxcdHpvbmUtXFx1MDAzZWNvbXBhY3RfYmxvY2tza2lwX2ZsdXNoID0gZmFsc2U7XFxuLVxcdFxcdGNvbXBhY3Rpb25fZGVmZXJfcmVzZXQoem9uZSwgb3JkZXIsIHRydWUpO1xcbitcXHRcXHRjb21wYWN0aW9uX2RlZmVyX3Jlc2V0KHpvbmUsIGNvbXBhY3Rfb3JkZXIsIHRydWUpO1xcbiBcXHRcXHRjb3VudF92bV9ldmVudChDT01QQUNUU1VDQ0VTUyk7XFxuIFxcdFxcdHJldHVybiBwYWdlO1xcbiBcXHR9XFxuQEAgLTQ0MjIsOSArNDQ2MCwxNCBAQCBfX2FsbG9jX3BhZ2VzX2RpcmVjdF9yZWNsYWltKGdmcF90IGdmcF9tYXNrLCB1bnNpZ25lZCBpbnQgb3JkZXIsXFxuIFxcdHN0cnVjdCBwYWdlICpwYWdlID0gTlVMTDtcXG4gXFx0dW5zaWduZWQgbG9uZyBwZmxhZ3M7XFxuIFxcdGJvb2wgZHJhaW5lZCA9IGZhbHNlO1xcbitcXHRpbnQgcmVjbGFpbV9vcmRlciA9IG9yZGVyO1xcbitcXG4rXFx0LyogTWF0Y2ggdGhlIHNsb3dwYXRoIGNvbXBhY3Rpb24gcHJvbW90aW9uIGluIF9fYWxsb2NfcGFnZXNfZGlyZWN0X2NvbXBhY3QgKi9cXG4rXFx0aWYgKChhbGxvY19mbGFncyBcXHUwMDI2IEFMTE9DX05PRlJBR01FTlQpIFxcdTAwMjZcXHUwMDI2IGFjLVxcdTAwM2VtaWdyYXRldHlwZSAhPSBNSUdSQVRFX01PVkFCTEUpXFxuK1xcdFxcdHJlY2xhaW1fb3JkZXIgPSBtYXgob3JkZXIsIHBhZ2VibG9ja19vcmRlcik7XFxuIFxcbiBcXHRwc2lfbWVtc3RhbGxfZW50ZXIoXFx1MDAyNnBmbGFncyk7XFxuLVxcdCpkaWRfc29tZV9wcm9ncmVzcyA9IF9fcGVyZm9ybV9yZWNsYWltKGdmcF9tYXNrLCBvcmRlciwgYWMpO1xcbitcXHQqZGlkX3NvbWVfcHJvZ3Jlc3MgPSBfX3BlcmZvcm1fcmVjbGFpbShnZnBfbWFzaywgcmVjbGFpbV9vcmRlciwgYWMpO1xcbiBcXHRpZiAodW5saWtlbHkoISgqZGlkX3NvbWVfcHJvZ3Jlc3MpKSlcXG4gXFx0XFx0Z290byBvdXQ7XFxuIFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNlQyMDoyMTo1NC4wNTA0NTQ0NzlaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc1ODY1MjQ5Mzc0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkNPTVBBQ1RJT05cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJfX2FsbG9jX3BhZ2VzX2RpcmVjdF9jb21wYWN0XCIsXG4gICAgXCJ0cnlfdG9fY29tcGFjdF9wYWdlc1wiLFxuICAgIFwiY29tcGFjdF96b25lX29yZGVyXCIsXG4gICAgXCJzdWl0YWJsZV9taWdyYXRpb25fc291cmNlXCIsXG4gICAgXCJmYXN0X2ZpbmRfbWlncmF0ZWJsb2NrXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgbWVtb3J5IGNvbXBhY3Rpb24gYW5kIGFsbG9jYXRpb24gbG9naWMsIHNwZWNpZmljYWxseSBob3cgZGlyZWN0IGNvbXBhY3Rpb24gYW5kIHJlY2xhaW0gaGFuZGxlIHBhZ2UgY2FwdHVyZSBhbmQgY29tcGFjdGlvbiBvcmRlcnMuIEl0IHByb21vdGVzIHRoZSBjb21wYWN0aW9uIG9yZGVyIHRvIGBwYWdlYmxvY2tfb3JkZXJgIGZvciBjZXJ0YWluIGFsbG9jYXRpb25zIHRvIHByZXZlbnQgZnJhZ21lbnRhdGlvbi4gVGhpcyBpcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljIHRoYXQgaXMgcmVhY2hhYmxlIGR1cmluZyBoaWdoLW9yZGVyIG1lbW9yeSBhbGxvY2F0aW9ucyBhbmQgbWVtb3J5IHByZXNzdXJlLiBJdCBpcyBmdW5jdGlvbmFsIGFuZCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG5ldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0XG4gICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksXG4gICBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDE2YmJjNGU5OWUxYWQ2ZWM3MTBjMDk5ODFkZDBkMDI2ZDMyZmJhMTVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEp1biAyNiAyMDoyMTo1MiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvY29tcGFjdGlvbi5oIGIvaW5jbHVkZS9saW51eC9jb21wYWN0aW9uLmhcbmluZGV4IGYyOWVmMDY1MzU0NmVkLi42NmEyZjcwZTllMDE5ZCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvY29tcGFjdGlvbi5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L2NvbXBhY3Rpb24uaFxuQEAgLTU4LDYgKzU4LDcgQEAgZW51bSBjb21wYWN0X3Jlc3VsdCB7XG4gfTtcbiBcbiBzdHJ1Y3QgYWxsb2NfY29udGV4dDsgLyogaW4gbW0vaW50ZXJuYWwuaCAqL1xuK3N0cnVjdCBjYXB0dXJlX2NvbnRyb2w7IC8qIGluIG1tL2ludGVybmFsLmggKi9cbiBcbiAvKlxuICAqIE51bWJlciBvZiBmcmVlIG9yZGVyLTAgcGFnZXMgdGhhdCBzaG91bGQgYmUgYXZhaWxhYmxlIGFib3ZlIGdpdmVuIHdhdGVybWFya1xuQEAgLTkyLDcgKzkzLDcgQEAgZXh0ZXJuIGludCBmcmFnbWVudGF0aW9uX2luZGV4KHN0cnVjdCB6b25lICp6b25lLCB1bnNpZ25lZCBpbnQgb3JkZXIpO1xuIGV4dGVybiBlbnVtIGNvbXBhY3RfcmVzdWx0IHRyeV90b19jb21wYWN0X3BhZ2VzKGdmcF90IGdmcF9tYXNrLFxuIFx0XHR1bnNpZ25lZCBpbnQgb3JkZXIsIHVuc2lnbmVkIGludCBhbGxvY19mbGFncyxcbiBcdFx0Y29uc3Qgc3RydWN0IGFsbG9jX2NvbnRleHQgKmFjLCBlbnVtIGNvbXBhY3RfcHJpb3JpdHkgcHJpbyxcbi1cdFx0c3RydWN0IHBhZ2UgKipwYWdlKTtcbitcdFx0c3RydWN0IGNhcHR1cmVfY29udHJvbCAqY2FwYyk7XG4gZXh0ZXJuIHZvaWQgcmVzZXRfaXNvbGF0aW9uX3N1aXRhYmxlKHBnX2RhdGFfdCAqcGdkYXQpO1xuIGV4dGVybiBib29sIGNvbXBhY3Rpb25fc3VpdGFibGUoc3RydWN0IHpvbmUgKnpvbmUsIGludCBvcmRlcixcbiBcdFx0XHRcdHVuc2lnbmVkIGxvbmcgd2F0ZXJtYXJrLCBpbnQgaGlnaGVzdF96b25laWR4KTtcbmRpZmYgLS1naXQgYS9tbS9jb21wYWN0aW9uLmMgYi9tbS9jb21wYWN0aW9uLmNcbmluZGV4IGYwODc2NWFkZTAxNGNlLi5jMjcwMWJmMWQwNGVkNyAxMDA2NDRcbi0tLSBhL21tL2NvbXBhY3Rpb24uY1xuKysrIGIvbW0vY29tcGFjdGlvbi5jXG5AQCAtMTM4MSwxMiArMTM4MSwzMyBAQCBzdGF0aWMgYm9vbCBzdWl0YWJsZV9taWdyYXRpb25fc291cmNlKHN0cnVjdCBjb21wYWN0X2NvbnRyb2wgKmNjLFxuIFx0aWYgKHBhZ2VibG9ja19za2lwX3BlcnNpc3RlbnQocGFnZSkpXG4gXHRcdHJldHVybiBmYWxzZTtcbiBcbi1cdGlmICgoY2MtXHUwMDNlbW9kZSAhPSBNSUdSQVRFX0FTWU5DKSB8fCAhY2MtXHUwMDNlZGlyZWN0X2NvbXBhY3Rpb24pXG4rXHQvKlxuK1x0ICogQmFja2dyb3VuZCBjb21wYWN0aW9uIHByb2R1Y2VzIGJsb2NrcyBmb3IgdGhlIHpvbmUgYXRcbitcdCAqIGxhcmdlLCB3aXRoIG5vIHBhcnRpY3VsYXIgYWxsb2NhdGlvbiBjb250ZXh0LiBBbGxvdyBhbGxcbitcdCAqIGJsb2NrIHR5cGVzLCBpbmNsdWRpbmcgQ01BLlxuK1x0ICovXG4rXHRpZiAoIWNjLVx1MDAzZWRpcmVjdF9jb21wYWN0aW9uKVxuIFx0XHRyZXR1cm4gdHJ1ZTtcbiBcbiBcdGJsb2NrX210ID0gZ2V0X3BhZ2VibG9ja19taWdyYXRldHlwZShwYWdlKTtcbiBcbi1cdGlmIChjYy1cdTAwM2VtaWdyYXRldHlwZSA9PSBNSUdSQVRFX01PVkFCTEUpXG4rXHQvKlxuK1x0ICogQ01BIHBhZ2VzIGNhbiBvbmx5IGJlIHRha2VuIGJ5IEFMTE9DX0NNQSByZXF1ZXN0cy4gRm9yIGFueWJvZHlcbitcdCAqIGVsc2UsIHZhY2F0aW5nIGEgQ01BIGJsb2NrIGNvbnN1bWVzIGZyZWUgcGFnZXMgdGhlIGNhbGxlclxuK1x0ICogY291bGQgaGF2ZSB1c2VkLCBhbmQgcHJvZHVjZXMgZnJlZSBwYWdlcyBpdCBjYW5ub3QuXG4rXHQgKi9cbitcdGlmIChpc19taWdyYXRlX2NtYShibG9ja19tdCkgXHUwMDI2XHUwMDI2ICEoY2MtXHUwMDNlYWxsb2NfZmxhZ3MgXHUwMDI2IEFMTE9DX0NNQSkpXG4rXHRcdHJldHVybiBmYWxzZTtcbitcbitcdGlmIChjYy1cdTAwM2Vtb2RlICE9IE1JR1JBVEVfQVNZTkMpXG4rXHRcdHJldHVybiB0cnVlO1xuK1xuK1x0LypcbitcdCAqIFByZXZlbnQgc21hbGwgdW5tb3ZhYmxlL3JlY2xhaW1hYmxlIHJlcXVlc3RzIGZyb20gcG9sbHV0aW5nXG4rXHQgKiBtb3ZhYmxlIGJsb2NrcyB0aHJvdWdoIGZhbGxiYWNrcy4gV2hvbGUtYmxvY2sgcHJvZHVjdGlvbiBpc1xuK1x0ICogZXhlbXB0IGFzIHRoZSBhbGxvY2F0b3IgY2xhaW1zIGFuZCBjb252ZXJ0cyB0aGVzZS5cbitcdCAqL1xuK1x0aWYgKGNjLVx1MDAzZW1pZ3JhdGV0eXBlID09IE1JR1JBVEVfTU9WQUJMRSB8fCBjYy1cdTAwM2VvcmRlciBcdTAwM2U9IHBhZ2VibG9ja19vcmRlcilcbiBcdFx0cmV0dXJuIGlzX21pZ3JhdGVfbW92YWJsZShibG9ja19tdCk7XG4gXHRlbHNlXG4gXHRcdHJldHVybiBibG9ja19tdCA9PSBjYy1cdTAwM2VtaWdyYXRldHlwZTtcbkBAIC0xOTc0LDEyICsxOTk1LDEyIEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIGZhc3RfZmluZF9taWdyYXRlYmxvY2soc3RydWN0IGNvbXBhY3RfY29udHJvbCAqY2MpXG4gXHRcdHJldHVybiBwZm47XG4gXG4gXHQvKlxuLVx0ICogT25seSBhbGxvdyBrY29tcGFjdGQgYW5kIGRpcmVjdCByZXF1ZXN0cyBmb3IgbW92YWJsZSBwYWdlcyB0b1xuLVx0ICogcXVpY2tseSBjbGVhciBvdXQgYSBNT1ZBQkxFIHBhZ2VibG9jayBmb3IgYWxsb2NhdGlvbi4gVGhpc1xuLVx0ICogcmVkdWNlcyB0aGUgcmlzayB0aGF0IGEgbGFyZ2UgbW92YWJsZSBwYWdlYmxvY2sgaXMgZnJlZWQgZm9yXG4tXHQgKiBhbiB1bm1vdmFibGUvcmVjbGFpbWFibGUgc21hbGwgYWxsb2NhdGlvbi5cbitcdCAqIFByZXZlbnQgc21hbGwgdW5tb3ZhYmxlL3JlY2xhaW1hYmxlIHJlcXVlc3RzIGZyb20gcG9sbHV0aW5nXG4rXHQgKiBtb3ZhYmxlIGJsb2NrcyB0aHJvdWdoIGZhbGxiYWNrcy4gV2hvbGUtYmxvY2sgcHJvZHVjdGlvbiBpc1xuK1x0ICogZXhlbXB0IGFzIHRoZSBhbGxvY2F0b3IgY2xhaW1zIGFuZCBjb252ZXJ0cyB0aGVzZS5cbiBcdCAqL1xuLVx0aWYgKGNjLVx1MDAzZWRpcmVjdF9jb21wYWN0aW9uIFx1MDAyNlx1MDAyNiBjYy1cdTAwM2VtaWdyYXRldHlwZSAhPSBNSUdSQVRFX01PVkFCTEUpXG4rXHRpZiAoY2MtXHUwMDNlZGlyZWN0X2NvbXBhY3Rpb24gXHUwMDI2XHUwMDI2IGNjLVx1MDAzZW1pZ3JhdGV0eXBlICE9IE1JR1JBVEVfTU9WQUJMRSBcdTAwMjZcdTAwMjZcbitcdCAgICBjYy1cdTAwM2VvcmRlciBcdTAwM2MgcGFnZWJsb2NrX29yZGVyKVxuIFx0XHRyZXR1cm4gcGZuO1xuIFxuIFx0LypcbkBAIC0yNzcwLDcgKzI3OTEsNyBAQCBjb21wYWN0X3pvbmUoc3RydWN0IGNvbXBhY3RfY29udHJvbCAqY2MsIHN0cnVjdCBjYXB0dXJlX2NvbnRyb2wgKmNhcGMpXG4gc3RhdGljIGVudW0gY29tcGFjdF9yZXN1bHQgY29tcGFjdF96b25lX29yZGVyKHN0cnVjdCB6b25lICp6b25lLCBpbnQgb3JkZXIsXG4gXHRcdGdmcF90IGdmcF9tYXNrLCBlbnVtIGNvbXBhY3RfcHJpb3JpdHkgcHJpbyxcbiBcdFx0dW5zaWduZWQgaW50IGFsbG9jX2ZsYWdzLCBpbnQgaGlnaGVzdF96b25laWR4LFxuLVx0XHRzdHJ1Y3QgcGFnZSAqKmNhcHR1cmUpXG4rXHRcdHN0cnVjdCBjYXB0dXJlX2NvbnRyb2wgKmNhcGMpXG4ge1xuIFx0ZW51bSBjb21wYWN0X3Jlc3VsdCByZXQ7XG4gXHRzdHJ1Y3QgY29tcGFjdF9jb250cm9sIGNjID0ge1xuQEAgLTI3ODcsMzUgKzI4MDgsMjIgQEAgc3RhdGljIGVudW0gY29tcGFjdF9yZXN1bHQgY29tcGFjdF96b25lX29yZGVyKHN0cnVjdCB6b25lICp6b25lLCBpbnQgb3JkZXIsXG4gXHRcdC5pZ25vcmVfc2tpcF9oaW50ID0gKHByaW8gPT0gTUlOX0NPTVBBQ1RfUFJJT1JJVFkpLFxuIFx0XHQuaWdub3JlX2Jsb2NrX3N1aXRhYmxlID0gKHByaW8gPT0gTUlOX0NPTVBBQ1RfUFJJT1JJVFkpXG4gXHR9O1xuLVx0c3RydWN0IGNhcHR1cmVfY29udHJvbCBjYXBjID0ge1xuLVx0XHQuY2MgPSBcdTAwMjZjYyxcbi1cdFx0LnBhZ2UgPSBOVUxMLFxuLVx0fTtcbiBcbi1cdC8qXG4tXHQgKiBNYWtlIHN1cmUgdGhlIHN0cnVjdHMgYXJlIHJlYWxseSBpbml0aWFsaXplZCBiZWZvcmUgd2UgZXhwb3NlIHRoZVxuLVx0ICogY2FwdHVyZSBjb250cm9sLCBpbiBjYXNlIHdlIGFyZSBpbnRlcnJ1cHRlZCBhbmQgdGhlIGludGVycnVwdCBoYW5kbGVyXG4tXHQgKiBmcmVlcyBhIHBhZ2UuXG4tXHQgKi9cbitcdC8qIFNlZSB0aGUgY29tbWVudCBpbiBfX2FsbG9jX3BhZ2VzX2RpcmVjdF9jb21wYWN0KCkgKi9cbiBcdGJhcnJpZXIoKTtcbi1cdFdSSVRFX09OQ0UoY3VycmVudC1cdTAwM2VjYXB0dXJlX2NvbnRyb2wsIFx1MDAyNmNhcGMpO1xuK1x0V1JJVEVfT05DRShjYXBjLVx1MDAzZWNjLCBcdTAwMjZjYyk7XG4gXG4tXHRyZXQgPSBjb21wYWN0X3pvbmUoXHUwMDI2Y2MsIFx1MDAyNmNhcGMpO1xuK1x0cmV0ID0gY29tcGFjdF96b25lKFx1MDAyNmNjLCBjYXBjKTtcbitcbitcdFdSSVRFX09OQ0UoY2FwYy1cdTAwM2VjYywgTlVMTCk7XG4gXG4tXHQvKlxuLVx0ICogTWFrZSBzdXJlIHdlIGhpZGUgY2FwdHVyZSBjb250cm9sIGZpcnN0IGJlZm9yZSB3ZSByZWFkIHRoZSBjYXB0dXJlZFxuLVx0ICogcGFnZSBwb2ludGVyLCBvdGhlcndpc2UgYW4gaW50ZXJydXB0IGNvdWxkIGZyZWUgYW5kIGNhcHR1cmUgYSBwYWdlXG4tXHQgKiBhbmQgd2Ugd291bGQgbGVhayBpdC5cbi1cdCAqL1xuLVx0V1JJVEVfT05DRShjdXJyZW50LVx1MDAzZWNhcHR1cmVfY29udHJvbCwgTlVMTCk7XG4tXHQqY2FwdHVyZSA9IFJFQURfT05DRShjYXBjLnBhZ2UpO1xuIFx0LypcbiBcdCAqIFRlY2huaWNhbGx5LCBpdCBpcyBhbHNvIHBvc3NpYmxlIHRoYXQgY29tcGFjdGlvbiBpcyBza2lwcGVkIGJ1dFxuIFx0ICogdGhlIHBhZ2UgaXMgc3RpbGwgY2FwdHVyZWQgb3V0IG9mIGx1Y2soSVJRIGNhbWUgYW5kIGZyZWVkIHRoZSBwYWdlKS5cbiBcdCAqIFJldHVybmluZyBDT01QQUNUX1NVQ0NFU1MgaW4gc3VjaCBjYXNlcyBoZWxwcyBpbiBwcm9wZXJseSBhY2NvdW50aW5nXG4gXHQgKiB0aGUgQ09NUEFDVFtTVEFMTHxGQUlMXSB3aGVuIGNvbXBhY3Rpb24gaXMgc2tpcHBlZC5cbiBcdCAqL1xuLVx0aWYgKCpjYXB0dXJlKVxuK1x0aWYgKGNhcGMtXHUwMDNlcGFnZSlcbiBcdFx0cmV0ID0gQ09NUEFDVF9TVUNDRVNTO1xuIFxuIFx0cmV0dXJuIHJldDtcbkBAIC0yODI4LDEzICsyODM2LDEzIEBAIHN0YXRpYyBlbnVtIGNvbXBhY3RfcmVzdWx0IGNvbXBhY3Rfem9uZV9vcmRlcihzdHJ1Y3Qgem9uZSAqem9uZSwgaW50IG9yZGVyLFxuICAqIEBhbGxvY19mbGFnczogVGhlIGFsbG9jYXRpb24gZmxhZ3Mgb2YgdGhlIGN1cnJlbnQgYWxsb2NhdGlvblxuICAqIEBhYzogVGhlIGNvbnRleHQgb2YgY3VycmVudCBhbGxvY2F0aW9uXG4gICogQHByaW86IERldGVybWluZXMgaG93IGhhcmQgZGlyZWN0IGNvbXBhY3Rpb24gc2hvdWxkIHRyeSB0byBzdWNjZWVkXG4tICogQGNhcHR1cmU6IFBvaW50ZXIgdG8gZnJlZSBwYWdlIGNyZWF0ZWQgYnkgY29tcGFjdGlvbiB3aWxsIGJlIHN0b3JlZCBoZXJlXG4rICogQGNhcGM6IFRoZSBjb250ZXh0IGZvciBjYXB0dXJpbmcgcGFnZXMgZHVyaW5nIGZyZWVpbmdcbiAgKlxuICAqIFRoaXMgaXMgdGhlIG1haW4gZW50cnkgcG9pbnQgZm9yIGRpcmVjdCBwYWdlIGNvbXBhY3Rpb24uXG4gICovXG4gZW51bSBjb21wYWN0X3Jlc3VsdCB0cnlfdG9fY29tcGFjdF9wYWdlcyhnZnBfdCBnZnBfbWFzaywgdW5zaWduZWQgaW50IG9yZGVyLFxuIFx0XHR1bnNpZ25lZCBpbnQgYWxsb2NfZmxhZ3MsIGNvbnN0IHN0cnVjdCBhbGxvY19jb250ZXh0ICphYyxcbi1cdFx0ZW51bSBjb21wYWN0X3ByaW9yaXR5IHByaW8sIHN0cnVjdCBwYWdlICoqY2FwdHVyZSlcbitcdFx0ZW51bSBjb21wYWN0X3ByaW9yaXR5IHByaW8sIHN0cnVjdCBjYXB0dXJlX2NvbnRyb2wgKmNhcGMpXG4ge1xuIFx0c3RydWN0IHpvbmVyZWYgKno7XG4gXHRzdHJ1Y3Qgem9uZSAqem9uZTtcbkBAIC0yODYyLDcgKzI4NzAsNyBAQCBlbnVtIGNvbXBhY3RfcmVzdWx0IHRyeV90b19jb21wYWN0X3BhZ2VzKGdmcF90IGdmcF9tYXNrLCB1bnNpZ25lZCBpbnQgb3JkZXIsXG4gXHRcdH1cbiBcbiBcdFx0c3RhdHVzID0gY29tcGFjdF96b25lX29yZGVyKHpvbmUsIG9yZGVyLCBnZnBfbWFzaywgcHJpbyxcbi1cdFx0XHRcdGFsbG9jX2ZsYWdzLCBhYy1cdTAwM2VoaWdoZXN0X3pvbmVpZHgsIGNhcHR1cmUpO1xuK1x0XHRcdFx0YWxsb2NfZmxhZ3MsIGFjLVx1MDAzZWhpZ2hlc3Rfem9uZWlkeCwgY2FwYyk7XG4gXHRcdHJjID0gbWF4KHN0YXR1cywgcmMpO1xuIFxuIFx0XHQvKiBUaGUgYWxsb2NhdGlvbiBzaG91bGQgc3VjY2VlZCwgc3RvcCBjb21wYWN0aW5nICovXG5kaWZmIC0tZ2l0IGEvbW0vaW50ZXJuYWwuaCBiL21tL2ludGVybmFsLmhcbmluZGV4IDE4MWU3OWYxZDZhMjA3Li4xZjYzNmNmYzg1OWExYSAxMDA2NDRcbi0tLSBhL21tL2ludGVybmFsLmhcbisrKyBiL21tL2ludGVybmFsLmhcbkBAIC0xMDYwLDYgKzEwNjAsMTMgQEAgc3RydWN0IGNvbXBhY3RfY29udHJvbCB7XG4gICovXG4gc3RydWN0IGNhcHR1cmVfY29udHJvbCB7XG4gXHRzdHJ1Y3QgY29tcGFjdF9jb250cm9sICpjYztcbitcdC8qXG4rXHQgKiBBbGxvY2F0aW9uIHJlcXVlc3Qgb3JkZXIuIE1heSBkaWZmZXIgZnJvbSB0aGUgY29tcGFjdGlvblxuK1x0ICogb3JkZXI6IGRlZnJhZ19tb2RlIHByb21vdGVzIHN1Yi1ibG9jayBhbGxvY2F0aW9ucyB0b1xuK1x0ICogcGFnZWJsb2NrLW9yZGVyIGNvbXBhY3Rpb247IGNhcHR1cmUgc3RpbGwgbWF0Y2hlcyBhdCB0aGVcbitcdCAqIG9yaWdpbmFsIGFsbG9jYXRpb24gb3JkZXIgc28gcHJlcF9uZXdfcGFnZSgpIGlzIGNvbnNpc3RlbnQuXG4rXHQgKi9cbitcdGludCBvcmRlcjtcbiBcdHN0cnVjdCBwYWdlICpwYWdlO1xuIH07XG4gXG5kaWZmIC0tZ2l0IGEvbW0vcGFnZV9hbGxvYy5jIGIvbW0vcGFnZV9hbGxvYy5jXG5pbmRleCBlZTkwMmE0NjhjMmY1Yi4uNTc1YTk5YTRjNzIzODQgMTAwNjQ0XG4tLS0gYS9tbS9wYWdlX2FsbG9jLmNcbisrKyBiL21tL3BhZ2VfYWxsb2MuY1xuQEAgLTcxOCw3ICs3MTgsNyBAQCBzdGF0aWMgaW5saW5lIHN0cnVjdCBjYXB0dXJlX2NvbnRyb2wgKnRhc2tfY2FwYyhzdHJ1Y3Qgem9uZSAqem9uZSlcbiB7XG4gXHRzdHJ1Y3QgY2FwdHVyZV9jb250cm9sICpjYXBjID0gY3VycmVudC1cdTAwM2VjYXB0dXJlX2NvbnRyb2w7XG4gXG4tXHRyZXR1cm4gdW5saWtlbHkoY2FwYykgXHUwMDI2XHUwMDI2XG4rXHRyZXR1cm4gdW5saWtlbHkoY2FwYyBcdTAwMjZcdTAwMjYgY2FwYy1cdTAwM2VjYykgXHUwMDI2XHUwMDI2XG4gXHRcdCEoY3VycmVudC1cdTAwM2VmbGFncyBcdTAwMjYgUEZfS1RIUkVBRCkgXHUwMDI2XHUwMDI2XG4gXHRcdCFjYXBjLVx1MDAzZXBhZ2UgXHUwMDI2XHUwMDI2XG4gXHRcdGNhcGMtXHUwMDNlY2MtXHUwMDNlem9uZSA9PSB6b25lID8gY2FwYyA6IE5VTEw7XG5AQCAtNzI4LDcgKzcyOCw3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbFxuIGNvbXBhY3Rpb25fY2FwdHVyZShzdHJ1Y3QgY2FwdHVyZV9jb250cm9sICpjYXBjLCBzdHJ1Y3QgcGFnZSAqcGFnZSxcbiBcdFx0ICAgaW50IG9yZGVyLCBpbnQgbWlncmF0ZXR5cGUpXG4ge1xuLVx0aWYgKCFjYXBjIHx8IG9yZGVyICE9IGNhcGMtXHUwMDNlY2MtXHUwMDNlb3JkZXIpXG4rXHRpZiAoIWNhcGMgfHwgb3JkZXIgIT0gY2FwYy1cdTAwM2VvcmRlcilcbiBcdFx0cmV0dXJuIGZhbHNlO1xuIFxuIFx0LyogRG8gbm90IGFjY2lkZW50YWxseSBwb2xsdXRlIENNQSBvciBpc29sYXRlZCByZWdpb25zKi9cbkBAIC03NDgsNyArNzQ4LDcgQEAgY29tcGFjdGlvbl9jYXB0dXJlKHN0cnVjdCBjYXB0dXJlX2NvbnRyb2wgKmNhcGMsIHN0cnVjdCBwYWdlICpwYWdlLFxuIFx0XHRyZXR1cm4gZmFsc2U7XG4gXG4gXHRpZiAobWlncmF0ZXR5cGUgIT0gY2FwYy1cdTAwM2VjYy1cdTAwM2VtaWdyYXRldHlwZSlcbi1cdFx0dHJhY2VfbW1fcGFnZV9hbGxvY19leHRmcmFnKHBhZ2UsIGNhcGMtXHUwMDNlY2MtXHUwMDNlb3JkZXIsIG9yZGVyLFxuK1x0XHR0cmFjZV9tbV9wYWdlX2FsbG9jX2V4dGZyYWcocGFnZSwgY2FwYy1cdTAwM2VvcmRlciwgb3JkZXIsXG4gXHRcdFx0XHRcdCAgICBjYXBjLVx1MDAzZWNjLVx1MDAzZW1pZ3JhdGV0eXBlLCBtaWdyYXRldHlwZSk7XG4gXG4gXHRjYXBjLVx1MDAzZXBhZ2UgPSBwYWdlO1xuQEAgLTQxNDYsMjEgKzQxNDYsNTkgQEAgX19hbGxvY19wYWdlc19kaXJlY3RfY29tcGFjdChnZnBfdCBnZnBfbWFzaywgdW5zaWduZWQgaW50IG9yZGVyLFxuIFx0c3RydWN0IHBhZ2UgKnBhZ2UgPSBOVUxMO1xuIFx0dW5zaWduZWQgbG9uZyBwZmxhZ3M7XG4gXHR1bnNpZ25lZCBpbnQgbm9yZWNsYWltX2ZsYWc7XG4rXHRzdHJ1Y3QgY2FwdHVyZV9jb250cm9sIGNhcGMgPSB7XG4rXHRcdC5vcmRlciA9IG9yZGVyLFxuK1x0XHQucGFnZSA9IE5VTEwsXG4rXHR9O1xuK1x0aW50IGNvbXBhY3Rfb3JkZXIgPSBvcmRlcjtcbiBcbi1cdGlmICghb3JkZXIpXG4rXHQvKlxuK1x0ICogSWYgZmFsbGJhY2tzIGFyZSBub3QgcGVybWl0dGVkIChkZWZyYWdfbW9kZSksIHdlIGVpdGhlclxuK1x0ICogbmVlZCB0byByZWNsYWltIHNwYWNlIGluIGEgYmxvY2sgb2YgbWF0Y2hpbmcgdHlwZSwgb3IgY2xlYXJcbitcdCAqIG91dCBhbiBlbnRpcmUgYmxvY2sgdG8gYWxsb3cgX19ybXF1ZXVlX2NsYWltKCkgdG8gY29udmVydC5cbitcdCAqXG4rXHQgKiBSZWNsYWltIGJ5IGl0c2VsZiBpcyBwcmltYXJpbHkgZnJlZWluZyBzcGFjZSBpbiBtb3ZhYmxlXG4rXHQgKiBibG9ja3MsIHNpbmNlIHRoYXQncyB3aGVyZSB0aGUgTFJVIHBhZ2VzIGxpdmUuIFNvIHRoaXNcbitcdCAqIHdvcmtzIGZvciBtb3ZhYmxlIHJlcXVlc3RzLCBidXQgbm90IGZvciBvdGhlcnMuXG4rXHQgKlxuK1x0ICogRm9yIHRob3NlLCBwcm9tb3RlIHRoZSBvcmRlciB0byBoZWxwIG1ha2UgYmxvY2tzLCBpbnN0ZWFkXG4rXHQgKiBvZiBzcGlubmluZyBpbiByZWNsYWltIGFsb25lIHVucHJvZHVjdGl2ZWx5LlxuK1x0ICovXG4rXHRpZiAoKGFsbG9jX2ZsYWdzIFx1MDAyNiBBTExPQ19OT0ZSQUdNRU5UKSBcdTAwMjZcdTAwMjYgYWMtXHUwMDNlbWlncmF0ZXR5cGUgIT0gTUlHUkFURV9NT1ZBQkxFKVxuK1x0XHRjb21wYWN0X29yZGVyID0gbWF4KG9yZGVyLCBwYWdlYmxvY2tfb3JkZXIpO1xuK1xuK1x0aWYgKCFjb21wYWN0X29yZGVyKVxuIFx0XHRyZXR1cm4gTlVMTDtcbiBcbitcdC8qXG4rXHQgKiBNYWtlIHN1cmUgdGhlIHN0cnVjdHMgYXJlIHJlYWxseSBpbml0aWFsaXplZCBiZWZvcmUgd2UgZXhwb3NlIHRoZVxuK1x0ICogY2FwdHVyZSBjb250cm9sLCBpbiBjYXNlIHdlIGFyZSBpbnRlcnJ1cHRlZCBhbmQgdGhlIGludGVycnVwdCBoYW5kbGVyXG4rXHQgKiBmcmVlcyBhIHBhZ2UuXG4rXHQgKi9cbitcdGJhcnJpZXIoKTtcbitcdFdSSVRFX09OQ0UoY3VycmVudC1cdTAwM2VjYXB0dXJlX2NvbnRyb2wsIFx1MDAyNmNhcGMpO1xuK1xuIFx0cHNpX21lbXN0YWxsX2VudGVyKFx1MDAyNnBmbGFncyk7XG4gXHRkZWxheWFjY3RfY29tcGFjdF9zdGFydCgpO1xuK1x0ZnNfcmVjbGFpbV9hY3F1aXJlKGdmcF9tYXNrKTtcbiBcdG5vcmVjbGFpbV9mbGFnID0gbWVtYWxsb2Nfbm9yZWNsYWltX3NhdmUoKTtcbiBcbi1cdCpjb21wYWN0X3Jlc3VsdCA9IHRyeV90b19jb21wYWN0X3BhZ2VzKGdmcF9tYXNrLCBvcmRlciwgYWxsb2NfZmxhZ3MsIGFjLFxuLVx0XHRcdFx0XHRcdFx0XHRwcmlvLCBcdTAwMjZwYWdlKTtcbitcdCpjb21wYWN0X3Jlc3VsdCA9IHRyeV90b19jb21wYWN0X3BhZ2VzKGdmcF9tYXNrLCBjb21wYWN0X29yZGVyLFxuK1x0XHRcdFx0XHQgICAgICAgYWxsb2NfZmxhZ3MsIGFjLCBwcmlvLCBcdTAwMjZjYXBjKTtcbiBcbiBcdG1lbWFsbG9jX25vcmVjbGFpbV9yZXN0b3JlKG5vcmVjbGFpbV9mbGFnKTtcbitcdGZzX3JlY2xhaW1fcmVsZWFzZShnZnBfbWFzayk7XG4gXHRwc2lfbWVtc3RhbGxfbGVhdmUoXHUwMDI2cGZsYWdzKTtcbiBcdGRlbGF5YWNjdF9jb21wYWN0X2VuZCgpO1xuIFxuK1x0LypcbitcdCAqIE1ha2Ugc3VyZSB3ZSBoaWRlIGNhcHR1cmUgY29udHJvbCBmaXJzdCBiZWZvcmUgd2UgcmVhZCB0aGUgY2FwdHVyZWRcbitcdCAqIHBhZ2UgcG9pbnRlciwgb3RoZXJ3aXNlIGFuIGludGVycnVwdCBjb3VsZCBmcmVlIGFuZCBjYXB0dXJlIGEgcGFnZVxuK1x0ICogYW5kIHdlIHdvdWxkIGxlYWsgaXQuXG4rXHQgKi9cbitcdFdSSVRFX09OQ0UoY3VycmVudC1cdTAwM2VjYXB0dXJlX2NvbnRyb2wsIE5VTEwpO1xuK1x0cGFnZSA9IFJFQURfT05DRShjYXBjLnBhZ2UpO1xuK1xuIFx0aWYgKCpjb21wYWN0X3Jlc3VsdCA9PSBDT01QQUNUX1NLSVBQRUQgfHxcbiBcdCAgICAqY29tcGFjdF9yZXN1bHQgPT0gQ09NUEFDVF9ERUZFUlJFRClcbiBcdFx0cmV0dXJuIE5VTEw7XG5AQCAtNDE4Miw3ICs0MjIwLDcgQEAgX19hbGxvY19wYWdlc19kaXJlY3RfY29tcGFjdChnZnBfdCBnZnBfbWFzaywgdW5zaWduZWQgaW50IG9yZGVyLFxuIFx0XHRzdHJ1Y3Qgem9uZSAqem9uZSA9IHBhZ2Vfem9uZShwYWdlKTtcbiBcbiBcdFx0em9uZS1cdTAwM2Vjb21wYWN0X2Jsb2Nrc2tpcF9mbHVzaCA9IGZhbHNlO1xuLVx0XHRjb21wYWN0aW9uX2RlZmVyX3Jlc2V0KHpvbmUsIG9yZGVyLCB0cnVlKTtcbitcdFx0Y29tcGFjdGlvbl9kZWZlcl9yZXNldCh6b25lLCBjb21wYWN0X29yZGVyLCB0cnVlKTtcbiBcdFx0Y291bnRfdm1fZXZlbnQoQ09NUEFDVFNVQ0NFU1MpO1xuIFx0XHRyZXR1cm4gcGFnZTtcbiBcdH1cbkBAIC00NDIyLDkgKzQ0NjAsMTQgQEAgX19hbGxvY19wYWdlc19kaXJlY3RfcmVjbGFpbShnZnBfdCBnZnBfbWFzaywgdW5zaWduZWQgaW50IG9yZGVyLFxuIFx0c3RydWN0IHBhZ2UgKnBhZ2UgPSBOVUxMO1xuIFx0dW5zaWduZWQgbG9uZyBwZmxhZ3M7XG4gXHRib29sIGRyYWluZWQgPSBmYWxzZTtcbitcdGludCByZWNsYWltX29yZGVyID0gb3JkZXI7XG4rXG4rXHQvKiBNYXRjaCB0aGUgc2xvd3BhdGggY29tcGFjdGlvbiBwcm9tb3Rpb24gaW4gX19hbGxvY19wYWdlc19kaXJlY3RfY29tcGFjdCAqL1xuK1x0aWYgKChhbGxvY19mbGFncyBcdTAwMjYgQUxMT0NfTk9GUkFHTUVOVCkgXHUwMDI2XHUwMDI2IGFjLVx1MDAzZW1pZ3JhdGV0eXBlICE9IE1JR1JBVEVfTU9WQUJMRSlcbitcdFx0cmVjbGFpbV9vcmRlciA9IG1heChvcmRlciwgcGFnZWJsb2NrX29yZGVyKTtcbiBcbiBcdHBzaV9tZW1zdGFsbF9lbnRlcihcdTAwMjZwZmxhZ3MpO1xuLVx0KmRpZF9zb21lX3Byb2dyZXNzID0gX19wZXJmb3JtX3JlY2xhaW0oZ2ZwX21hc2ssIG9yZGVyLCBhYyk7XG4rXHQqZGlkX3NvbWVfcHJvZ3Jlc3MgPSBfX3BlcmZvcm1fcmVjbGFpbShnZnBfbWFzaywgcmVjbGFpbV9vcmRlciwgYWMpO1xuIFx0aWYgKHVubGlrZWx5KCEoKmRpZF9zb21lX3Byb2dyZXNzKSkpXG4gXHRcdGdvdG8gb3V0O1xuIFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjZUMjA6MjE6NTQuMDUwNDU1OTY5WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjI0OTk1OTY3MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIE1lbW9yeSBDb21wYWN0aW9uIFBhdGNoKipcblxuT2theSwgc28gSSd2ZSBnb3QgdGhpcyBwYXRjaCBoZXJlIHRoYXTigJlzIHRpbmtlcmluZyB3aXRoIG1lbW9yeSBjb21wYWN0aW9uIGFuZCBhbGxvY2F0aW9uLCBzcGVjaWZpY2FsbHkgd2l0aCBob3cgd2UgaGFuZGxlIGNvbXBhY3Rpb24gb3JkZXJzIGFuZCBwYWdlIGNhcHR1cmUgaW4gYHRyeV90b19jb21wYWN0X3BhZ2VzYCBhbmQgYF9fYWxsb2NfcGFnZXNfZGlyZWN0X2NvbXBhY3RgLiBJdCBzZWVtcyBsaWtlIHRoZSBjb3JlIGxvZ2ljIGlzIGJlaW5nIHR3ZWFrZWQuIFRoaXMgaXMgZGVmaW5pdGVseSB3b3J0aCBhIGNsb3NlciBsb29rLCBnaXZlbiB0aGF0IHRoaXMgdG91Y2hlcyB1cG9uIGBwYWdlYmxvY2tfb3JkZXJgIHdoZW4gYEFMTE9DX05PRlJBR01FTlRgIGlzIHNldCBhbmQgdGhlIG1pZ3JhdGlvbiB0eXBlIGlzbuKAmXQgYE1JR1JBVEVfTU9WQUJMRWAuIFRoZSBwYXRjaCBhbHNvIHNlZW1zIHRvIGJlIGFmZmVjdGluZyBgc3VpdGFibGVfbWlncmF0aW9uX3NvdXJjZWAgYW5kIGBmYXN0X2ZpbmRfbWlncmF0ZWJsb2NrYCwgd2hpY2ggYXJlIGNydWNpYWwgd2l0aGluIHRoZSBjb21wYWN0aW9uIGZyYW1ld29yay5cblxuR2l2ZW4gdGhhdCB0aGlzIGlzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgY29kZSwgaXQncyBkZWZpbml0ZWx5IGhpZ2gtdmFsdWUgZm9yIGZ1enppbmcuIFdlIG5lZWQgdG8gaWRlbnRpZnkgdGhlIGtleSBmdW5jdGlvbnMgdG8gZm9jdXMgb3VyIGVmZm9ydHMuXG5cbkJhc2VkIG9uIHRoZSBjb2RlIGNoYW5nZXMsIGl0IGxvb2tzIGxpa2Ugd2UncmUgemVyb2luZyBpbiBvbjogYHN1aXRhYmxlX21pZ3JhdGlvbl9zb3VyY2VgLCBgZmFzdF9maW5kX21pZ3JhdGVibG9ja2AsIGBjb21wYWN0X3pvbmVfb3JkZXJgLCBgdHJ5X3RvX2NvbXBhY3RfcGFnZXNgLCBgY29tcGFjdGlvbl9jYXB0dXJlYCwgYF9fYWxsb2NfcGFnZXNfZGlyZWN0X2NvbXBhY3RgLCBhbmQgYF9fYWxsb2NfcGFnZXNfZGlyZWN0X3JlY2xhaW1gLlxuXG5gX19hbGxvY19wYWdlc19kaXJlY3RfY29tcGFjdGAgYW5kIGBfX2FsbG9jX3BhZ2VzX2RpcmVjdF9yZWNsYWltYCBhcmUgcGFydCBvZiB0aGUgcGFnZSBhbGxvY2F0b3Igc2xvdyBwYXRoLCBhcyBleHBlY3RlZC4gYHRyeV90b19jb21wYWN0X3BhZ2VzYCBpcyB0aGUgZGlyZWN0IGNvbXBhY3Rpb24gZW50cnkgcG9pbnQsIHdoaWNoIG1ha2VzIGl0IGEgY3JpdGljYWwgYXJlYS4gYGNvbXBhY3Rfem9uZV9vcmRlcmAgaXMgYSBzdGF0aWMgZnVuY3Rpb24sIGFuZCBzbyBhcmUgYHN1aXRhYmxlX21pZ3JhdGlvbl9zb3VyY2VgIGFuZCBgZmFzdF9maW5kX21pZ3JhdGVibG9ja2AuXG5cbkkgc2hvdWxkIGNoZWNrIGlmIHRoZXJlIGFyZSBhbnkgc3BlY2lmaWMga2VybmVsIGNvbmZpZ3VyYXRpb25zIHJlbGV2YW50IHRvIGNvbXBhY3Rpb24sIGxpa2UgYENPTkZJR19DT01QQUNUSU9OYC4gTGV0J3MgZ3JlcCBmb3IgdGhhdCBhbmQgYWxzbyBmb3IgYHRyeV90b19jb21wYWN0X3BhZ2VzYCB0byBnZXQgYSBicm9hZGVyIHZpZXcgb2YgaG93IHRoZXNlIGNoYW5nZXMgYXJlIHRpZWQgaW50byB0aGUgcmVzdCBvZiB0aGUgc3lzdGVtLiBUaGlzIHdpbGwgZ2l2ZSBtZSBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGUgY29kZSBtaWdodCBiZWhhdmUgaW4gZGlmZmVyZW50IHNjZW5hcmlvcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NTMxNCwiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM2NCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI2VDIwOjIyOjAwLjMwMDQxNzI2MVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNjE4NDE3NDE5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInRyeV90b19jb21wYWN0X3BhZ2VzXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvY29tcGFjdGlvbi5oPTExPWVudW0gY29tcGFjdF9wcmlvcml0eSB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2NvbXBhY3Rpb24uaC0yMC1cXG5pbmNsdWRlL2xpbnV4L2NvbXBhY3Rpb24uaDoyMTovKiBSZXR1cm4gdmFsdWVzIGZvciBjb21wYWN0X3pvbmUoKSBhbmQgdHJ5X3RvX2NvbXBhY3RfcGFnZXMoKSAqL1xcbmluY2x1ZGUvbGludXgvY29tcGFjdGlvbi5oLTIyLS8qIFdoZW4gYWRkaW5nIG5ldyBzdGF0ZXMsIHBsZWFzZSBhZGp1c3QgaW5jbHVkZS90cmFjZS9ldmVudHMvY29tcGFjdGlvbi5oICovXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2NvbXBhY3Rpb24uaD05Mj1leHRlcm4gaW50IGZyYWdtZW50YXRpb25faW5kZXgoc3RydWN0IHpvbmUgKnpvbmUsIHVuc2lnbmVkIGludCBvcmRlcik7XFxuaW5jbHVkZS9saW51eC9jb21wYWN0aW9uLmg6OTM6ZXh0ZXJuIGVudW0gY29tcGFjdF9yZXN1bHQgdHJ5X3RvX2NvbXBhY3RfcGFnZXMoZ2ZwX3QgZ2ZwX21hc2ssXFxuaW5jbHVkZS9saW51eC9jb21wYWN0aW9uLmgtOTQtXFx0XFx0dW5zaWduZWQgaW50IG9yZGVyLCB1bnNpZ25lZCBpbnQgYWxsb2NfZmxhZ3MsXFxuLS1cXG5pbmNsdWRlL3RyYWNlL2V2ZW50cy9jb21wYWN0aW9uLmg9MTMxPVRSQUNFX0VWRU5UKG1tX2NvbXBhY3Rpb25fZW5kLFxcbi0tXFxuaW5jbHVkZS90cmFjZS9ldmVudHMvY29tcGFjdGlvbi5oLTE2NC1cXG5pbmNsdWRlL3RyYWNlL2V2ZW50cy9jb21wYWN0aW9uLmg6MTY1OlRSQUNFX0VWRU5UKG1tX2NvbXBhY3Rpb25fdHJ5X3RvX2NvbXBhY3RfcGFnZXMsXFxuaW5jbHVkZS90cmFjZS9ldmVudHMvY29tcGFjdGlvbi5oLTE2Ni1cXG4tLVxcbm1tL2NvbXBhY3Rpb24uYz0yNzkxPXN0YXRpYyBlbnVtIGNvbXBhY3RfcmVzdWx0IGNvbXBhY3Rfem9uZV9vcmRlcihzdHJ1Y3Qgem9uZSAqem9uZSwgaW50IG9yZGVyLFxcbi0tXFxubW0vY29tcGFjdGlvbi5jLTI4MzItLyoqXFxubW0vY29tcGFjdGlvbi5jOjI4MzM6ICogdHJ5X3RvX2NvbXBhY3RfcGFnZXMgLSBEaXJlY3QgY29tcGFjdCB0byBzYXRpc2Z5IGEgaGlnaC1vcmRlciBhbGxvY2F0aW9uXFxubW0vY29tcGFjdGlvbi5jLTI4MzQtICogQGdmcF9tYXNrOiBUaGUgR0ZQIG1hc2sgb2YgdGhlIGN1cnJlbnQgYWxsb2NhdGlvblxcbi0tXFxubW0vY29tcGFjdGlvbi5jLTI4NDItICovXFxubW0vY29tcGFjdGlvbi5jOjI4NDM6ZW51bSBjb21wYWN0X3Jlc3VsdCB0cnlfdG9fY29tcGFjdF9wYWdlcyhnZnBfdCBnZnBfbWFzaywgdW5zaWduZWQgaW50IG9yZGVyLFxcbm1tL2NvbXBhY3Rpb24uYy0yODQ0LVxcdFxcdHVuc2lnbmVkIGludCBhbGxvY19mbGFncywgY29uc3Qgc3RydWN0IGFsbG9jX2NvbnRleHQgKmFjLFxcbi0tXFxubW0vY29tcGFjdGlvbi5jLTI4NTMtXFxubW0vY29tcGFjdGlvbi5jOjI4NTQ6XFx0dHJhY2VfbW1fY29tcGFjdGlvbl90cnlfdG9fY29tcGFjdF9wYWdlcyhvcmRlciwgZ2ZwX21hc2ssIHByaW8pO1xcbm1tL2NvbXBhY3Rpb24uYy0yODU1LVxcbi0tXFxubW0vcGFnZV9hbGxvYy5jPTQxNDI9X19hbGxvY19wYWdlc19kaXJlY3RfY29tcGFjdChnZnBfdCBnZnBfbWFzaywgdW5zaWduZWQgaW50IG9yZGVyLFxcbi0tXFxubW0vcGFnZV9hbGxvYy5jLTQxODUtXFxubW0vcGFnZV9hbGxvYy5jOjQxODY6XFx0KmNvbXBhY3RfcmVzdWx0ID0gdHJ5X3RvX2NvbXBhY3RfcGFnZXMoZ2ZwX21hc2ssIGNvbXBhY3Rfb3JkZXIsXFxubW0vcGFnZV9hbGxvYy5jLTQxODctXFx0XFx0XFx0XFx0XFx0ICAgICAgIGFsbG9jX2ZsYWdzLCBhYywgcHJpbywgXFx1MDAyNmNhcGMpO1xcbi0tXFxubW0vdm1zY2FuLmM9NTk5OD1zdGF0aWMgYm9vbCBpbl9yZWNsYWltX2NvbXBhY3Rpb24oc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxuLS1cXG5tbS92bXNjYW4uYy02MDExLSAqIHRydWUgaWYgbW9yZSBwYWdlcyBzaG91bGQgYmUgcmVjbGFpbWVkIHN1Y2ggdGhhdCB3aGVuIHRoZSBwYWdlIGFsbG9jYXRvclxcbm1tL3Ztc2Nhbi5jOjYwMTI6ICogY2FsbHMgdHJ5X3RvX2NvbXBhY3RfcGFnZXMoKSB0aGF0IGl0IHdpbGwgaGF2ZSBlbm91Z2ggZnJlZSBwYWdlcyB0byBzdWNjZWVkLlxcbm1tL3Ztc2Nhbi5jLTYwMTMtICogSXQgd2lsbCBnaXZlIHVwIGVhcmxpZXIgdGhhbiB0aGF0IGlmIHRoZXJlIGlzIGRpZmZpY3VsdHkgcmVjbGFpbWluZyBwYWdlcy5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjZUMjA6MjI6MDMuOTE4ODM5NDZaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjQ2MTE0NTk1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgQ29tcGFjdGlvbiBhbmQgQWxsb2NhdGlvbiBDb2RlIERlcGVuZGVuY2llcyoqXG5cbkFscmlnaHQsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbnRlcmFjdGlvbiBiZXR3ZWVuIGNvbXBhY3Rpb24gYW5kIGFsbG9jYXRpb24uIEJhc2VkIG9uIHRoZSBmaWxlIHBhdGhzLCBJJ20gZGl2aW5nIGludG8gYG1tL2NvbXBhY3Rpb24uY2AgYW5kIGBtbS9wYWdlX2FsbG9jLmNgLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgYmVmb3JlIEkgZ2V0IHRvbyBkZWVwIGludG8gdGhlIHdlZWRzLCBJIHNob3VsZCBxdWlja2x5IHZlcmlmeSBpZiBjb21wYWN0aW9uIGlzIGNvbmRpdGlvbmFsbHkgY29tcGlsZWQuIEknbGwgbmVlZCB0byBjb25maXJtIGlmIGBDT05GSUdfQ09NUEFDVElPTmAgaXMgZW5hYmxlZCBvciByZXF1aXJlZCB0byB1bmRlcnN0YW5kIHRoZSBjb2RlIHBhdGggcHJvcGVybHksIHBhcnRpY3VsYXJseSBob3cgaXQgYWZmZWN0cyB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgc2NoZW1lLiBJJ2xsIHNlYXJjaCBmb3IgdGhlIHByZXByb2Nlc3NvciBkaXJlY3RpdmVzIHJlbGF0ZWQgdG8gdGhhdCBjb25maWcgb3B0aW9uIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUgYnVpbGQgY29uZmlndXJhdGlvbi4gVGhhdCB3aWxsIHByb3ZpZGUgY3J1Y2lhbCBjb250ZXh0IGJlZm9yZSBnb2luZyBhbnkgZnVydGhlciB3aXRoIHRoZSBhbmFseXNpcyBvZiB0aG9zZSBmaWxlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NjkxMCwiT3V0cHV0VG9rZW5zIjoyNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI2VDIwOjIyOjA3LjE2NDk1NjA4NVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMjEzMDE2NjIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiQ09ORklHX0NPTVBBQ1RJT05cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2NvbXBhY3Rpb24uYy0yOC1cXG5tbS9jb21wYWN0aW9uLmM6Mjk6I2lmZGVmIENPTkZJR19DT01QQUNUSU9OXFxubW0vY29tcGFjdGlvbi5jLTMwLS8qXFxuLS1cXG5tbS9jb21wYWN0aW9uLmM9NTk9c3RhdGljIGlubGluZSBib29sIGlzX3ZpYV9jb21wYWN0X21lbW9yeShpbnQgb3JkZXIpIHsgcmV0dXJuIGZhbHNlOyB9XFxuLS1cXG5tbS9jb21wYWN0aW9uLmMtNjEtXFxubW0vY29tcGFjdGlvbi5jOjYyOiNpZiBkZWZpbmVkIENPTkZJR19DT01QQUNUSU9OIHx8IGRlZmluZWQgQ09ORklHX0NNQVxcbm1tL2NvbXBhY3Rpb24uYy02My1cXG4tLVxcbm1tL2NvbXBhY3Rpb24uYz05MT1zdGF0aWMgdW5zaWduZWQgbG9uZyByZWxlYXNlX2ZyZWVfbGlzdChzdHJ1Y3QgbGlzdF9oZWFkICpmcmVlcGFnZXMpXFxuLS1cXG5tbS9jb21wYWN0aW9uLmMtMTE1LVxcbm1tL2NvbXBhY3Rpb24uYzoxMTY6I2lmZGVmIENPTkZJR19DT01QQUNUSU9OXFxubW0vY29tcGFjdGlvbi5jLTExNy1cXG4tLVxcbm1tL2NvbXBhY3Rpb24uYz00OTA9c3RhdGljIGJvb2wgdGVzdF9hbmRfc2V0X3NraXAoc3RydWN0IGNvbXBhY3RfY29udHJvbCAqY2MsIHN0cnVjdCBwYWdlICpwYWdlKVxcbi0tXFxubW0vY29tcGFjdGlvbi5jLTQ5My19XFxubW0vY29tcGFjdGlvbi5jOjQ5NDojZW5kaWYgLyogQ09ORklHX0NPTVBBQ1RJT04gKi9cXG5tbS9jb21wYWN0aW9uLmMtNDk1LVxcbi0tXFxubW0vY29tcGFjdGlvbi5jPTEzMzc9aXNvbGF0ZV9taWdyYXRlcGFnZXNfcmFuZ2Uoc3RydWN0IGNvbXBhY3RfY29udHJvbCAqY2MsIHVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLFxcbi0tXFxubW0vY29tcGFjdGlvbi5jLTEzNzItXFxubW0vY29tcGFjdGlvbi5jOjEzNzM6I2VuZGlmIC8qIENPTkZJR19DT01QQUNUSU9OIHx8IENPTkZJR19DTUEgKi9cXG5tbS9jb21wYWN0aW9uLmM6MTM3NDojaWZkZWYgQ09ORklHX0NPTVBBQ1RJT05cXG5tbS9jb21wYWN0aW9uLmMtMTM3NS1cXG4tLVxcbm1tL2NvbXBhY3Rpb24uYz0zMzYxPXN1YnN5c19pbml0Y2FsbChrY29tcGFjdGRfaW5pdClcXG5tbS9jb21wYWN0aW9uLmMtMzM2Mi1cXG5tbS9jb21wYWN0aW9uLmM6MzM2MzojZW5kaWYgLyogQ09ORklHX0NPTVBBQ1RJT04gKi9cXG4tLVxcbm1tL2ludGVybmFsLmg9OTk5PXN0YXRpYyBpbmxpbmUgdm9pZCBzcGFyc2VfaW5pdF9zdWJzZWN0aW9uX21hcCh1bnNpZ25lZCBsb25nIHBmbixcXG4tLVxcbm1tL2ludGVybmFsLmgtMTAwNC1cXG5tbS9pbnRlcm5hbC5oOjEwMDU6I2lmIGRlZmluZWQgQ09ORklHX0NPTVBBQ1RJT04gfHwgZGVmaW5lZCBDT05GSUdfQ01BXFxubW0vaW50ZXJuYWwuaC0xMDA2LVxcbi0tXFxubW0vaW50ZXJuYWwuaD0xMDgxPXZvaWQgaW5pdF9jbWFfcmVzZXJ2ZWRfcGFnZWJsb2NrKHN0cnVjdCBwYWdlICpwYWdlKTtcXG5tbS9pbnRlcm5hbC5oLTEwODItXFxubW0vaW50ZXJuYWwuaDoxMDgzOiNlbmRpZiAvKiBDT05GSUdfQ09NUEFDVElPTiB8fCBDT05GSUdfQ01BICovXFxubW0vaW50ZXJuYWwuaC0xMDg0LVxcbi0tXFxubW0vbW1faW5pdC5jPTEzMzM9c3RhdGljIHZvaWQgX19pbml0IGNhbGN1bGF0ZV9ub2RlX3RvdGFscGFnZXMoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCxcXG4tLVxcbm1tL21tX2luaXQuYy0xMzc1LVxcbm1tL21tX2luaXQuYzoxMzc2OiNpZmRlZiBDT05GSUdfQ09NUEFDVElPTlxcbm1tL21tX2luaXQuYy0xMzc3LXN0YXRpYyB2b2lkIHBnZGF0X2luaXRfa2NvbXBhY3RkKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQpXFxuLS1cXG5tbS9vb21fa2lsbC5jPTQ1Nj1zdGF0aWMgdm9pZCBkdW1wX2hlYWRlcihzdHJ1Y3Qgb29tX2NvbnRyb2wgKm9jKVxcbi0tXFxubW0vb29tX2tpbGwuYy00NjAtXFx0XFx0XFx0Y3VycmVudC1cXHUwMDNlc2lnbmFsLVxcdTAwM2Vvb21fc2NvcmVfYWRqKTtcXG5tbS9vb21fa2lsbC5jOjQ2MTpcXHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX0NPTVBBQ1RJT04pIFxcdTAwMjZcXHUwMDI2IG9jLVxcdTAwM2VvcmRlcilcXG5tbS9vb21fa2lsbC5jLTQ2Mi1cXHRcXHRwcl93YXJuKFxcXCJDT01QQUNUSU9OIGlzIGRpc2FibGVkISEhXFxcXG5cXFwiKTtcXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYz03MTA9c3RhdGljIGlubGluZSB2b2lkIHNldF9idWRkeV9vcmRlcihzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgaW50IG9yZGVyKVxcbi0tXFxubW0vcGFnZV9hbGxvYy5jLTcxNS1cXG5tbS9wYWdlX2FsbG9jLmM6NzE2OiNpZmRlZiBDT05GSUdfQ09NUEFDVElPTlxcbm1tL3BhZ2VfYWxsb2MuYy03MTctc3RhdGljIGlubGluZSBzdHJ1Y3QgY2FwdHVyZV9jb250cm9sICp0YXNrX2NhcGMoc3RydWN0IHpvbmUgKnpvbmUpXFxuLS1cXG5tbS9wYWdlX2FsbG9jLmM9NzY1PWNvbXBhY3Rpb25fY2FwdHVyZShzdHJ1Y3QgY2FwdHVyZV9jb250cm9sICpjYXBjLCBzdHJ1Y3QgcGFnZSAqcGFnZSxcXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYy03NjktfVxcbm1tL3BhZ2VfYWxsb2MuYzo3NzA6I2VuZGlmIC8qIENPTkZJR19DT01QQUNUSU9OICovXFxubW0vcGFnZV9hbGxvYy5jLTc3MS1cXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYz00MDQ3PV9fYWxsb2NfcGFnZXNfbWF5X29vbShnZnBfdCBnZnBfbWFzaywgdW5zaWduZWQgaW50IG9yZGVyLFxcbi0tXFxubW0vcGFnZV9hbGxvYy5jLTQxMzgtXFxubW0vcGFnZV9hbGxvYy5jOjQxMzk6I2lmZGVmIENPTkZJR19DT01QQUNUSU9OXFxubW0vcGFnZV9hbGxvYy5jLTQxNDAtLyogVHJ5IG1lbW9yeSBjb21wYWN0aW9uIGZvciBoaWdoLW9yZGVyIGFsbG9jYXRpb25zIGJlZm9yZSByZWNsYWltICovXFxuLS1cXG5tbS9wYWdlX2FsbG9jLmM9NDMxNz1zaG91bGRfY29tcGFjdF9yZXRyeShnZnBfdCBnZnBfbWFzaywgc3RydWN0IGFsbG9jX2NvbnRleHQgKmFjLCBpbnQgb3JkZXIsXFxuLS1cXG5tbS9wYWdlX2FsbG9jLmMtNDM0Mi19XFxubW0vcGFnZV9hbGxvYy5jOjQzNDM6I2VuZGlmIC8qIENPTkZJR19DT01QQUNUSU9OICovXFxubW0vcGFnZV9hbGxvYy5jLTQzNDQtXFxuLS1cXG5tbS92bXNjYW4uYz02MzMxPXN0YXRpYyB2b2lkIHNocmlua196b25lcyhzdHJ1Y3Qgem9uZWxpc3QgKnpvbmVsaXN0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTYzNzEtXFx0XFx0XFx0ICovXFxubW0vdm1zY2FuLmM6NjM3MjpcXHRcXHRcXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfQ09NUEFDVElPTikgXFx1MDAyNlxcdTAwMjZcXG5tbS92bXNjYW4uYy02MzczLVxcdFxcdFxcdCAgICBzYy1cXHUwMDNlb3JkZXIgXFx1MDAzZSBQQUdFX0FMTE9DX0NPU1RMWV9PUkRFUiBcXHUwMDI2XFx1MDAyNlxcbi0tXFxubW0vdm1zdGF0LmM9MTA0Mj12b2lkIG1lbW1hcF9wYWdlc19hZGQobG9uZyBkZWx0YSlcXG4tLVxcbm1tL3Ztc3RhdC5jLTEwNDYtXFxubW0vdm1zdGF0LmM6MTA0NzojaWZkZWYgQ09ORklHX0NPTVBBQ1RJT05cXG5tbS92bXN0YXQuYy0xMDQ4LVxcbi0tXFxubW0vdm1zdGF0LmM9MTE4Nz1jb25zdCBjaGFyICogY29uc3Qgdm1zdGF0X3RleHRbXSA9IHtcXG4tLVxcbm1tL3Ztc3RhdC5jLTEzNzAtI2VuZGlmXFxubW0vdm1zdGF0LmM6MTM3MTojaWZkZWYgQ09ORklHX0NPTVBBQ1RJT05cXG5tbS92bXN0YXQuYy0xMzcyLVxcdFtJKENPTVBBQ1RNSUdSQVRFX1NDQU5ORUQpXVxcdFxcdD0gXFxcImNvbXBhY3RfbWlncmF0ZV9zY2FubmVkXFxcIixcXG4tLVxcbm1tL3Ztc3RhdC5jLTE0OTYtXFxubW0vdm1zdGF0LmM6MTQ5NzojaWYgKGRlZmluZWQoQ09ORklHX0RFQlVHX0ZTKSBcXHUwMDI2XFx1MDAyNiBkZWZpbmVkKENPTkZJR19DT01QQUNUSU9OKSkgfHwgXFxcXFxcbm1tL3Ztc3RhdC5jLTE0OTgtICAgICBkZWZpbmVkKENPTkZJR19QUk9DX0ZTKVxcbi0tXFxubW0vdm1zdGF0LmM9MjI2OD12b2lkIF9faW5pdCBpbml0X21tX2ludGVybmFscyh2b2lkKVxcbi0tXFxubW0vdm1zdGF0LmMtMjMwMS1cXG5tbS92bXN0YXQuYzoyMzAyOiNpZiBkZWZpbmVkKENPTkZJR19ERUJVR19GUykgXFx1MDAyNlxcdTAwMjYgZGVmaW5lZChDT05GSUdfQ09NUEFDVElPTilcXG5tbS92bXN0YXQuYy0yMzAzLVxcbi0tXFxubW0venNtYWxsb2MuYz0xOTk9c3RydWN0IHpzX3Bvb2wge1xcbi0tXFxubW0venNtYWxsb2MuYy0yMTMtI2VuZGlmXFxubW0venNtYWxsb2MuYzoyMTQ6I2lmZGVmIENPTkZJR19DT01QQUNUSU9OXFxubW0venNtYWxsb2MuYy0yMTUtXFx0c3RydWN0IHdvcmtfc3RydWN0IGZyZWVfd29yaztcXG4tLVxcbm1tL3pzbWFsbG9jLmM9MzYwPXN0YXRpYyBib29sIFpzSHVnZVBhZ2Uoc3RydWN0IHpzcGFnZSAqenNwYWdlKVxcbi0tXFxubW0venNtYWxsb2MuYy0zNjQtXFxubW0venNtYWxsb2MuYzozNjU6I2lmZGVmIENPTkZJR19DT01QQUNUSU9OXFxubW0venNtYWxsb2MuYy0zNjYtc3RhdGljIHZvaWQga2lja19kZWZlcnJlZF9mcmVlKHN0cnVjdCB6c19wb29sICpwb29sKTtcXG4tLVxcbm1tL3pzbWFsbG9jLmM9OTMxPXN0YXRpYyBzdHJ1Y3QgenNwYWdlICphbGxvY196c3BhZ2Uoc3RydWN0IHpzX3Bvb2wgKnBvb2wsXFxuLS1cXG5tbS96c21hbGxvYy5jLTk0MS1cXG5tbS96c21hbGxvYy5jOjk0MjpcXHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX0NPTVBBQ1RJT04pKVxcbm1tL3pzbWFsbG9jLmMtOTQzLVxcdFxcdGdmcCBcXHUwMDI2PSB+X19HRlBfTU9WQUJMRTtcXG4tLVxcbm1tL3pzbWFsbG9jLmM9MTU5ND1zdGF0aWMgaW50IHB1dGJhY2tfenNwYWdlKHN0cnVjdCBzaXplX2NsYXNzICpjbGFzcywgc3RydWN0IHpzcGFnZSAqenNwYWdlKVxcbi0tXFxubW0venNtYWxsb2MuYy0xNjAzLVxcbm1tL3pzbWFsbG9jLmM6MTYwNDojaWZkZWYgQ09ORklHX0NPTVBBQ1RJT05cXG5tbS96c21hbGxvYy5jLTE2MDUtLypcXG4tLVxcbm1tL3pzbWFsbG9jLmM9MTYwOT1zdGF0aWMgdm9pZCBsb2NrX3pzcGFnZShzdHJ1Y3QgenNwYWdlICp6c3BhZ2UpXFxuLS1cXG5tbS96c21hbGxvYy5jLTE2NDUtfVxcbm1tL3pzbWFsbG9jLmM6MTY0NjojZW5kaWYgLyogQ09ORklHX0NPTVBBQ1RJT04gKi9cXG5tbS96c21hbGxvYy5jLTE2NDctXFxubW0venNtYWxsb2MuYzoxNjQ4OiNpZmRlZiBDT05GSUdfQ09NUEFDVElPTlxcbm1tL3pzbWFsbG9jLmMtMTY0OS1cXG4tLVxcbm1tL3pzbWFsbG9jLmM9MjIzNz1zdGF0aWMgaW50IF9faW5pdCB6c19pbml0KHZvaWQpXFxuLS1cXG5tbS96c21hbGxvYy5jLTIyNDQtXFxubW0venNtYWxsb2MuYzoyMjQ1OiNpZmRlZiBDT05GSUdfQ09NUEFDVElPTlxcbm1tL3pzbWFsbG9jLmMtMjI0Ni1cXHRyYyA9IHNldF9tb3ZhYmxlX29wcyhcXHUwMDI2enNtYWxsb2NfbW9wcywgUEdUWV96c21hbGxvYyk7XFxuLS1cXG5tbS96c21hbGxvYy5jPTIyNTY9c3RhdGljIHZvaWQgX19leGl0IHpzX2V4aXQodm9pZClcXG5tbS96c21hbGxvYy5jLTIyNTcte1xcbm1tL3pzbWFsbG9jLmM6MjI1ODojaWZkZWYgQ09ORklHX0NPTVBBQ1RJT05cXG5tbS96c21hbGxvYy5jLTIyNTktXFx0c2V0X21vdmFibGVfb3BzKE5VTEwsIFBHVFlfenNtYWxsb2MpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNlQyMDoyMjowNy40ODYyNjI4NDdaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NzUzMjU1OTg5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgS2VybmVsJ3MgTWVtb3J5IENvbXBhY3Rpb24gSW1wbGVtZW50YXRpb24qKlxuXG5Pa2F5LCBzbyB0aGUgcHJpbWFyeSBjb25maWd1cmF0aW9uIG9wdGlvbiBkcml2aW5nIHRoaXMgc2VlbXMgdG8gYmUgYENPTkZJR19DT01QQUNUSU9OYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIGNoYW5nZXMgaW1wYWN0IHRoZSBzeXN0ZW0uIEl0IGxvb2tzIGxpa2UgYF9fYWxsb2NfcGFnZXNfZGlyZWN0X2NvbXBhY3RgIGlzIGNvbmRpdGlvbmFsbHkgY29tcGlsZWQgYmFzZWQgb24gYENPTkZJR19DT01QQUNUSU9OYCwgd2hpY2ggaXMgYSBrZXkgcGllY2Ugb2YgaW5mb3JtYXRpb24uIEkgc2hvdWxkIGxvb2sgZm9yIGFueSBvdGhlciByZWxhdGVkIGNvbmZpZ3VyYXRpb24gb3B0aW9ucywganVzdCBpbiBjYXNlLlxuXG5BbHJpZ2h0LCBsZXQncyBicmVhayBkb3duIHRoZSBjb2RlIG1vZGlmaWNhdGlvbnMuIFRoZSBwYXRjaCB0YXJnZXRzIGBtbS9jb21wYWN0aW9uLmNgIGFuZCBgbW0vcGFnZV9hbGxvYy5jYCwgc28gdGhvc2UgYXJlIHRoZSBhcmVhcyBvZiBpbnRlcmVzdC4gSW4gYG1tL2NvbXBhY3Rpb24uY2AsIEkgc2VlIGZ1bmN0aW9ucyBsaWtlIGBzdWl0YWJsZV9taWdyYXRpb25fc291cmNlYCwgYGZhc3RfZmluZF9taWdyYXRlYmxvY2tgLCBgY29tcGFjdF96b25lX29yZGVyYCwgYW5kIGB0cnlfdG9fY29tcGFjdF9wYWdlc2AuIFRoYXQncyB0aGUgZXhwZWN0ZWQgY29yZSBjb21wYWN0aW9uIGxvZ2ljLlxuXG5Ob3csIGluIGBtbS9wYWdlX2FsbG9jLmNgLCBJJ20gc2VlaW5nIGBjb21wYWN0aW9uX2NhcHR1cmVgLCBgX19hbGxvY19wYWdlc19kaXJlY3RfY29tcGFjdGAsIGFuZCBgX19hbGxvY19wYWdlc19kaXJlY3RfcmVjbGFpbWAuIEhtbSwgd2FpdCBhIHNlY29uZC4uLiBgX19hbGxvY19wYWdlc19kaXJlY3RfcmVjbGFpbWAgaXNuJ3QgZ3VhcmRlZCBieSBhbiBgI2lmZGVmIENPTkZJR19DT01QQUNUSU9OYCBwcmVwcm9jZXNzb3IgZGlyZWN0aXZlLCB3aGljaCBpcyBpbnRlcmVzdGluZy4gSSdsbCBuZWVkIHRvIGNoZWNrIHRoZSBjb2RlIGFyb3VuZCBsaW5lIDQ0NjAgaW4gYG1tL3BhZ2VfYWxsb2MuY2AgdG8gdW5kZXJzdGFuZCB0aGUgZXhhY3QgY29udGV4dCB0aGVyZS4gVGhpcyBpbXBsaWVzIHRoYXQgZXZlbiB3aXRob3V0IGFjdGl2ZSBjb21wYWN0aW9uLCBzb21lIGRpcmVjdCByZWNsYWltIGZ1bmN0aW9uYWxpdHkgbWlnaHQgc3RpbGwgYmUgaW50ZXJhY3Rpbmcgd2l0aCB0aGUgcmVsYXRlZCBjb2RlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5NDI2LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI2VDIwOjIyOjEyLjIzOTUyMDU0NloiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzNzM5MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9wYWdlX2FsbG9jLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNDQ1MCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiNDQ1MDpcXHRcXG40NDUxOlxcdFxcdHJldHVybiBwcm9ncmVzcztcXG40NDUyOlxcdH1cXG40NDUzOlxcdFxcbjQ0NTQ6XFx0LyogVGhlIHJlYWxseSBzbG93IGFsbG9jYXRvciBwYXRoIHdoZXJlIHdlIGVudGVyIGRpcmVjdCByZWNsYWltICovXFxuNDQ1NTpcXHRzdGF0aWMgaW5saW5lIHN0cnVjdCBwYWdlICpcXG40NDU2OlxcdF9fYWxsb2NfcGFnZXNfZGlyZWN0X3JlY2xhaW0oZ2ZwX3QgZ2ZwX21hc2ssIHVuc2lnbmVkIGludCBvcmRlcixcXG40NDU3OlxcdFxcdFxcdHVuc2lnbmVkIGludCBhbGxvY19mbGFncywgY29uc3Qgc3RydWN0IGFsbG9jX2NvbnRleHQgKmFjLFxcbjQ0NTg6XFx0XFx0XFx0dW5zaWduZWQgbG9uZyAqZGlkX3NvbWVfcHJvZ3Jlc3MpXFxuNDQ1OTpcXHR7XFxuNDQ2MDpcXHRcXHRzdHJ1Y3QgcGFnZSAqcGFnZSA9IE5VTEw7XFxuNDQ2MTpcXHRcXHR1bnNpZ25lZCBsb25nIHBmbGFncztcXG40NDYyOlxcdFxcdGJvb2wgZHJhaW5lZCA9IGZhbHNlO1xcbjQ0NjM6XFx0XFx0aW50IHJlY2xhaW1fb3JkZXIgPSBvcmRlcjtcXG40NDY0OlxcdFxcbjQ0NjU6XFx0XFx0LyogTWF0Y2ggdGhlIHNsb3dwYXRoIGNvbXBhY3Rpb24gcHJvbW90aW9uIGluIF9fYWxsb2NfcGFnZXNfZGlyZWN0X2NvbXBhY3QgKi9cXG40NDY2OlxcdFxcdGlmICgoYWxsb2NfZmxhZ3MgXFx1MDAyNiBBTExPQ19OT0ZSQUdNRU5UKSBcXHUwMDI2XFx1MDAyNiBhYy1cXHUwMDNlbWlncmF0ZXR5cGUgIT0gTUlHUkFURV9NT1ZBQkxFKVxcbjQ0Njc6XFx0XFx0XFx0cmVjbGFpbV9vcmRlciA9IG1heChvcmRlciwgcGFnZWJsb2NrX29yZGVyKTtcXG40NDY4OlxcdFxcbjQ0Njk6XFx0XFx0cHNpX21lbXN0YWxsX2VudGVyKFxcdTAwMjZwZmxhZ3MpO1xcbjQ0NzA6XFx0XFx0KmRpZF9zb21lX3Byb2dyZXNzID0gX19wZXJmb3JtX3JlY2xhaW0oZ2ZwX21hc2ssIHJlY2xhaW1fb3JkZXIsIGFjKTtcXG40NDcxOlxcdFxcdGlmICh1bmxpa2VseSghKCpkaWRfc29tZV9wcm9ncmVzcykpKVxcbjQ0NzI6XFx0XFx0XFx0Z290byBvdXQ7XFxuNDQ3MzpcXHRcXG40NDc0OlxcdHJldHJ5OlxcbjQ0NzU6XFx0XFx0cGFnZSA9IGdldF9wYWdlX2Zyb21fZnJlZWxpc3QoZ2ZwX21hc2ssIG9yZGVyLCBhbGxvY19mbGFncywgYWMpO1xcbjQ0NzY6XFx0XFxuNDQ3NzpcXHRcXHQvKlxcbjQ0Nzg6XFx0XFx0ICogSWYgYW4gYWxsb2NhdGlvbiBmYWlsZWQgYWZ0ZXIgZGlyZWN0IHJlY2xhaW0sIGl0IGNvdWxkIGJlIGJlY2F1c2VcXG40NDc5OlxcdFxcdCAqIHBhZ2VzIGFyZSBwaW5uZWQgb24gdGhlIHBlci1jcHUgbGlzdHMgb3IgaW4gaGlnaCBhbGxvYyByZXNlcnZlcy5cXG40NDgwOlxcdFxcdCAqIFNocmluayB0aGVtIGFuZCB0cnkgYWdhaW5cXG40NDgxOlxcdFxcdCAqL1xcbjQ0ODI6XFx0XFx0aWYgKCFwYWdlIFxcdTAwMjZcXHUwMDI2ICFkcmFpbmVkKSB7XFxuNDQ4MzpcXHRcXHRcXHR1bnJlc2VydmVfaGlnaGF0b21pY19wYWdlYmxvY2soYWMsIGZhbHNlKTtcXG40NDg0OlxcdFxcdFxcdGRyYWluX2FsbF9wYWdlcyhOVUxMKTtcXG40NDg1OlxcdFxcdFxcdGRyYWluZWQgPSB0cnVlO1xcbjQ0ODY6XFx0XFx0XFx0Z290byByZXRyeTtcXG40NDg3OlxcdFxcdH1cXG40NDg4OlxcdG91dDpcXG40NDg5OlxcdFxcdHBzaV9tZW1zdGFsbF9sZWF2ZShcXHUwMDI2cGZsYWdzKTtcXG40NDkwOlxcdFxcbjQ0OTE6XFx0XFx0cmV0dXJuIHBhZ2U7XFxuNDQ5MjpcXHR9XFxuNDQ5MzpcXHRcXG40NDk0OlxcdHN0YXRpYyB2b2lkIHdha2VfYWxsX2tzd2FwZHModW5zaWduZWQgaW50IG9yZGVyLCBnZnBfdCBnZnBfbWFzayxcXG40NDk1OlxcdFxcdFxcdFxcdCAgICAgY29uc3Qgc3RydWN0IGFsbG9jX2NvbnRleHQgKmFjKVxcbjQ0OTY6XFx0e1xcbjQ0OTc6XFx0XFx0c3RydWN0IHpvbmVyZWYgKno7XFxuNDQ5ODpcXHRcXHRzdHJ1Y3Qgem9uZSAqem9uZTtcXG40NDk5OlxcdFxcdHBnX2RhdGFfdCAqbGFzdF9wZ2RhdCA9IE5VTEw7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI2VDIwOjIyOjEyLjIzOTc1OTA5NVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMwMzA5MDQyNjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gdGhlIE1lbW9yeSBBbGxvY2F0aW9uIENvZGUqKlxuXG5BbHJpZ2h0LCBzbyBgX19hbGxvY19wYWdlc19kaXJlY3RfcmVjbGFpbWAgaXMgZGVmaW5pdGVseSBpbiB0aGUgYnVpbGQsIG5vIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIHRoZXJlLiBUaGF0J3MgZ29vZCB0byBrbm93LiBOb3csIGBfX2FsbG9jX3BhZ2VzX2RpcmVjdF9jb21wYWN0YC4uLiBhaCwgdGhhdCdzIHR1Y2tlZCBiZWhpbmQgYSBgI2lmZGVmIENPTkZJR19DT01QQUNUSU9OYC4gTWFrZXMgc2Vuc2UuIFNvLCBpdHMgcHJlc2VuY2UgaW4gdGhlIGtlcm5lbCBpbWFnZSBkZXBlbmRzIG9uIHRoYXQgY29uZmlndXJhdGlvbiBvcHRpb24gYmVpbmcgZW5hYmxlZC4gVGltZSB0byBkaWcgaW4gYSBiaXQgZnVydGhlci4gTGV0IG1lIGp1bXAgb3ZlciB0byBgbW0vcGFnZV9hbGxvYy5jYCBhbmQgdGFrZSBhIGxvb2sgYXJvdW5kIGxpbmUgNDE0Ni4gVGhhdCdzIGEgcmVhc29uYWJsZSBwbGFjZSB0byBzdGFydCwgZ2l2ZW4gdGhlIGZ1bmN0aW9uIG5hbWVzLiBIb3BlZnVsbHksIEkgY2FuIHNlZSBob3cgdGhlc2UgdHdvIGZ1bmN0aW9ucyBhcmUgY2FsbGVkIGFuZCBob3cgdGhleSBpbnRlcmFjdC4gTGV0J3Mgc2VlIHdoYXQgd2UgZmluZCB0aGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA3MjAsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1OSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI2VDIwOjIyOjE1LjI3MDY2NTE5M1oiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMzc1MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vcGFnZV9hbGxvYy5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDQxMzAsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjQxMzA6XFx0XFx0cmV0dXJuIHBhZ2U7XFxuNDEzMTpcXHR9XFxuNDEzMjpcXHRcXG40MTMzOlxcdC8qXFxuNDEzNDpcXHQgKiBNYXhpbXVtIG51bWJlciBvZiBjb21wYWN0aW9uIHJldHJpZXMgd2l0aCBhIHByb2dyZXNzIGJlZm9yZSBPT01cXG40MTM1OlxcdCAqIGtpbGxlciBpcyBjb25zaWRlciBhcyB0aGUgb25seSB3YXkgdG8gbW92ZSBmb3J3YXJkLlxcbjQxMzY6XFx0ICovXFxuNDEzNzpcXHQjZGVmaW5lIE1BWF9DT01QQUNUX1JFVFJJRVMgMTZcXG40MTM4OlxcdFxcbjQxMzk6XFx0I2lmZGVmIENPTkZJR19DT01QQUNUSU9OXFxuNDE0MDpcXHQvKiBUcnkgbWVtb3J5IGNvbXBhY3Rpb24gZm9yIGhpZ2gtb3JkZXIgYWxsb2NhdGlvbnMgYmVmb3JlIHJlY2xhaW0gKi9cXG40MTQxOlxcdHN0YXRpYyBzdHJ1Y3QgcGFnZSAqXFxuNDE0MjpcXHRfX2FsbG9jX3BhZ2VzX2RpcmVjdF9jb21wYWN0KGdmcF90IGdmcF9tYXNrLCB1bnNpZ25lZCBpbnQgb3JkZXIsXFxuNDE0MzpcXHRcXHRcXHR1bnNpZ25lZCBpbnQgYWxsb2NfZmxhZ3MsIGNvbnN0IHN0cnVjdCBhbGxvY19jb250ZXh0ICphYyxcXG40MTQ0OlxcdFxcdFxcdGVudW0gY29tcGFjdF9wcmlvcml0eSBwcmlvLCBlbnVtIGNvbXBhY3RfcmVzdWx0ICpjb21wYWN0X3Jlc3VsdClcXG40MTQ1OlxcdHtcXG40MTQ2OlxcdFxcdHN0cnVjdCBwYWdlICpwYWdlID0gTlVMTDtcXG40MTQ3OlxcdFxcdHVuc2lnbmVkIGxvbmcgcGZsYWdzO1xcbjQxNDg6XFx0XFx0dW5zaWduZWQgaW50IG5vcmVjbGFpbV9mbGFnO1xcbjQxNDk6XFx0XFx0c3RydWN0IGNhcHR1cmVfY29udHJvbCBjYXBjID0ge1xcbjQxNTA6XFx0XFx0XFx0Lm9yZGVyID0gb3JkZXIsXFxuNDE1MTpcXHRcXHRcXHQucGFnZSA9IE5VTEwsXFxuNDE1MjpcXHRcXHR9O1xcbjQxNTM6XFx0XFx0aW50IGNvbXBhY3Rfb3JkZXIgPSBvcmRlcjtcXG40MTU0OlxcdFxcbjQxNTU6XFx0XFx0LypcXG40MTU2OlxcdFxcdCAqIElmIGZhbGxiYWNrcyBhcmUgbm90IHBlcm1pdHRlZCAoZGVmcmFnX21vZGUpLCB3ZSBlaXRoZXJcXG40MTU3OlxcdFxcdCAqIG5lZWQgdG8gcmVjbGFpbSBzcGFjZSBpbiBhIGJsb2NrIG9mIG1hdGNoaW5nIHR5cGUsIG9yIGNsZWFyXFxuNDE1ODpcXHRcXHQgKiBvdXQgYW4gZW50aXJlIGJsb2NrIHRvIGFsbG93IF9fcm1xdWV1ZV9jbGFpbSgpIHRvIGNvbnZlcnQuXFxuNDE1OTpcXHRcXHQgKlxcbjQxNjA6XFx0XFx0ICogUmVjbGFpbSBieSBpdHNlbGYgaXMgcHJpbWFyaWx5IGZyZWVpbmcgc3BhY2UgaW4gbW92YWJsZVxcbjQxNjE6XFx0XFx0ICogYmxvY2tzLCBzaW5jZSB0aGF0J3Mgd2hlcmUgdGhlIExSVSBwYWdlcyBsaXZlLiBTbyB0aGlzXFxuNDE2MjpcXHRcXHQgKiB3b3JrcyBmb3IgbW92YWJsZSByZXF1ZXN0cywgYnV0IG5vdCBmb3Igb3RoZXJzLlxcbjQxNjM6XFx0XFx0ICpcXG40MTY0OlxcdFxcdCAqIEZvciB0aG9zZSwgcHJvbW90ZSB0aGUgb3JkZXIgdG8gaGVscCBtYWtlIGJsb2NrcywgaW5zdGVhZFxcbjQxNjU6XFx0XFx0ICogb2Ygc3Bpbm5pbmcgaW4gcmVjbGFpbSBhbG9uZSB1bnByb2R1Y3RpdmVseS5cXG40MTY2OlxcdFxcdCAqL1xcbjQxNjc6XFx0XFx0aWYgKChhbGxvY19mbGFncyBcXHUwMDI2IEFMTE9DX05PRlJBR01FTlQpIFxcdTAwMjZcXHUwMDI2IGFjLVxcdTAwM2VtaWdyYXRldHlwZSAhPSBNSUdSQVRFX01PVkFCTEUpXFxuNDE2ODpcXHRcXHRcXHRjb21wYWN0X29yZGVyID0gbWF4KG9yZGVyLCBwYWdlYmxvY2tfb3JkZXIpO1xcbjQxNjk6XFx0XFxuNDE3MDpcXHRcXHRpZiAoIWNvbXBhY3Rfb3JkZXIpXFxuNDE3MTpcXHRcXHRcXHRyZXR1cm4gTlVMTDtcXG40MTcyOlxcdFxcbjQxNzM6XFx0XFx0LypcXG40MTc0OlxcdFxcdCAqIE1ha2Ugc3VyZSB0aGUgc3RydWN0cyBhcmUgcmVhbGx5IGluaXRpYWxpemVkIGJlZm9yZSB3ZSBleHBvc2UgdGhlXFxuNDE3NTpcXHRcXHQgKiBjYXB0dXJlIGNvbnRyb2wsIGluIGNhc2Ugd2UgYXJlIGludGVycnVwdGVkIGFuZCB0aGUgaW50ZXJydXB0IGhhbmRsZXJcXG40MTc2OlxcdFxcdCAqIGZyZWVzIGEgcGFnZS5cXG40MTc3OlxcdFxcdCAqL1xcbjQxNzg6XFx0XFx0YmFycmllcigpO1xcbjQxNzk6XFx0XFx0V1JJVEVfT05DRShjdXJyZW50LVxcdTAwM2VjYXB0dXJlX2NvbnRyb2wsIFxcdTAwMjZjYXBjKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjZUMjA6MjI6MTUuMjcxMDA0NjQzWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI5MzA1MjAyODUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQ29tcGFjdGlvbiBDb25maWd1cmF0aW9uIFJldmlldyoqXG5cbk9rYXksIHNvIG1vc3Qgb2YgdGhlc2UgY2hhbmdlcyBJJ20gbG9va2luZyBhdCBoaW5nZSBvbiBgQ09ORklHX0NPTVBBQ1RJT05gLiBUaGF0J3MgcHJldHR5IHN0YW5kYXJkLCBidXQgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGhhdmVuJ3QgbWlzc2VkIGFueXRoaW5nIGNydWNpYWwuIExldCdzIG5vdCBhc3N1bWUgYW55dGhpbmcuIEkgbmVlZCB0byBnZXQgaW50byBhIG1ldGhvZGljYWwgYXBwcm9hY2ggZm9yIHRoaXMuXG5cbkknbSB0aGlua2luZywgYXJlIHRoZXJlIGFueSAqb3RoZXIqIGNvbmZpZyBvcHRpb25zIEkgbmVlZCB0byBkb3VibGUtY2hlY2sgcmVsYXRlZCB0byB0aGVzZSBjb21wYWN0aW9uIG1vZGlmaWNhdGlvbnM/IExldCdzIHRha2UgYSBsb29rIGF0IGBzdWl0YWJsZV9taWdyYXRpb25fc291cmNlYCB3aXRoaW4gYG1tL2NvbXBhY3Rpb24uY2AuIFRoYXQgZnVuY3Rpb24gd2lsbCBnaXZlIG1lIGEgZ29vZCwgbG93LWxldmVsIGluc2lnaHQgaW50byB0aGUgY29tcGFjdGlvbiBiZWhhdmlvci4gVGltZSB0byBkZWx2ZSBpbnRvIHRoZSBjb2RlIGFuZCBydWxlIG91dCBhbnkgZGVwZW5kZW5jaWVzIG9yIGVkZ2UgY2FzZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExNzIxLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yNlQyMDoyMjoxOC4yMDE1MjY3NDdaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjE3MzQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL2NvbXBhY3Rpb24uY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMzcwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMzcwOlxcdFxcdHJldHVybiByZXQ7XFxuMTM3MTpcXHR9XFxuMTM3MjpcXHRcXG4xMzczOlxcdCNlbmRpZiAvKiBDT05GSUdfQ09NUEFDVElPTiB8fCBDT05GSUdfQ01BICovXFxuMTM3NDpcXHQjaWZkZWYgQ09ORklHX0NPTVBBQ1RJT05cXG4xMzc1OlxcdFxcbjEzNzY6XFx0c3RhdGljIGJvb2wgc3VpdGFibGVfbWlncmF0aW9uX3NvdXJjZShzdHJ1Y3QgY29tcGFjdF9jb250cm9sICpjYyxcXG4xMzc3OlxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdHN0cnVjdCBwYWdlICpwYWdlKVxcbjEzNzg6XFx0e1xcbjEzNzk6XFx0XFx0aW50IGJsb2NrX210O1xcbjEzODA6XFx0XFxuMTM4MTpcXHRcXHRpZiAocGFnZWJsb2NrX3NraXBfcGVyc2lzdGVudChwYWdlKSlcXG4xMzgyOlxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4xMzgzOlxcdFxcbjEzODQ6XFx0XFx0LypcXG4xMzg1OlxcdFxcdCAqIEJhY2tncm91bmQgY29tcGFjdGlvbiBwcm9kdWNlcyBibG9ja3MgZm9yIHRoZSB6b25lIGF0XFxuMTM4NjpcXHRcXHQgKiBsYXJnZSwgd2l0aCBubyBwYXJ0aWN1bGFyIGFsbG9jYXRpb24gY29udGV4dC4gQWxsb3cgYWxsXFxuMTM4NzpcXHRcXHQgKiBibG9jayB0eXBlcywgaW5jbHVkaW5nIENNQS5cXG4xMzg4OlxcdFxcdCAqL1xcbjEzODk6XFx0XFx0aWYgKCFjYy1cXHUwMDNlZGlyZWN0X2NvbXBhY3Rpb24pXFxuMTM5MDpcXHRcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4xMzkxOlxcdFxcbjEzOTI6XFx0XFx0YmxvY2tfbXQgPSBnZXRfcGFnZWJsb2NrX21pZ3JhdGV0eXBlKHBhZ2UpO1xcbjEzOTM6XFx0XFxuMTM5NDpcXHRcXHQvKlxcbjEzOTU6XFx0XFx0ICogQ01BIHBhZ2VzIGNhbiBvbmx5IGJlIHRha2VuIGJ5IEFMTE9DX0NNQSByZXF1ZXN0cy4gRm9yIGFueWJvZHlcXG4xMzk2OlxcdFxcdCAqIGVsc2UsIHZhY2F0aW5nIGEgQ01BIGJsb2NrIGNvbnN1bWVzIGZyZWUgcGFnZXMgdGhlIGNhbGxlclxcbjEzOTc6XFx0XFx0ICogY291bGQgaGF2ZSB1c2VkLCBhbmQgcHJvZHVjZXMgZnJlZSBwYWdlcyBpdCBjYW5ub3QuXFxuMTM5ODpcXHRcXHQgKi9cXG4xMzk5OlxcdFxcdGlmIChpc19taWdyYXRlX2NtYShibG9ja19tdCkgXFx1MDAyNlxcdTAwMjYgIShjYy1cXHUwMDNlYWxsb2NfZmxhZ3MgXFx1MDAyNiBBTExPQ19DTUEpKVxcbjE0MDA6XFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbjE0MDE6XFx0XFxuMTQwMjpcXHRcXHRpZiAoY2MtXFx1MDAzZW1vZGUgIT0gTUlHUkFURV9BU1lOQylcXG4xNDAzOlxcdFxcdFxcdHJldHVybiB0cnVlO1xcbjE0MDQ6XFx0XFxuMTQwNTpcXHRcXHQvKlxcbjE0MDY6XFx0XFx0ICogUHJldmVudCBzbWFsbCB1bm1vdmFibGUvcmVjbGFpbWFibGUgcmVxdWVzdHMgZnJvbSBwb2xsdXRpbmdcXG4xNDA3OlxcdFxcdCAqIG1vdmFibGUgYmxvY2tzIHRocm91Z2ggZmFsbGJhY2tzLiBXaG9sZS1ibG9jayBwcm9kdWN0aW9uIGlzXFxuMTQwODpcXHRcXHQgKiBleGVtcHQgYXMgdGhlIGFsbG9jYXRvciBjbGFpbXMgYW5kIGNvbnZlcnRzIHRoZXNlLlxcbjE0MDk6XFx0XFx0ICovXFxuMTQxMDpcXHRcXHRpZiAoY2MtXFx1MDAzZW1pZ3JhdGV0eXBlID09IE1JR1JBVEVfTU9WQUJMRSB8fCBjYy1cXHUwMDNlb3JkZXIgXFx1MDAzZT0gcGFnZWJsb2NrX29yZGVyKVxcbjE0MTE6XFx0XFx0XFx0cmV0dXJuIGlzX21pZ3JhdGVfbW92YWJsZShibG9ja19tdCk7XFxuMTQxMjpcXHRcXHRlbHNlXFxuMTQxMzpcXHRcXHRcXHRyZXR1cm4gYmxvY2tfbXQgPT0gY2MtXFx1MDAzZW1pZ3JhdGV0eXBlO1xcbjE0MTQ6XFx0fVxcbjE0MTU6XFx0XFxuMTQxNjpcXHQvKiBSZXR1cm5zIHRydWUgaWYgdGhlIHBhZ2UgaXMgd2l0aGluIGEgYmxvY2sgc3VpdGFibGUgZm9yIG1pZ3JhdGlvbiB0byAqL1xcbjE0MTc6XFx0c3RhdGljIGJvb2wgc3VpdGFibGVfbWlncmF0aW9uX3RhcmdldChzdHJ1Y3QgY29tcGFjdF9jb250cm9sICpjYyxcXG4xNDE4OlxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdHN0cnVjdCBwYWdlICpwYWdlKVxcbjE0MTk6XFx0e1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNlQyMDoyMjoxOC4yMDE3NDU1NThaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzk2OTE4Mzk5MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoZXNlIGNoYW5nZXMsIHBocmFzZWQgYXMgYSBwZXJzb25hbCB0aG91Z2h0IHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gdGhlIE1pZ3JhdGlvbiBTb3VyY2UgTG9naWMqKlxuXG5BbHJpZ2h0LCBzbyBJJ20gbG9va2luZyBhdCB0aGVzZSBjaGFuZ2VzIGluIGBzdWl0YWJsZV9taWdyYXRpb25fc291cmNlYCBhbmQgaXQncyBjbGVhciB0aGUgZm9jdXMgaXMgYXJvdW5kIGhvdyB3ZSdyZSBoYW5kbGluZyBDTUEgKENvbnRpZ3VvdXMgTWVtb3J5IEFsbG9jYXRvcikgbWVtb3J5IGZvciBtaWdyYXRpb24uIFNwZWNpZmljYWxseSwgaXQgc2VlbXMgbGlrZSB3ZSdyZSByZWx5aW5nIG9uIHRoZSBmdW5jdGlvbnMgYGlzX21pZ3JhdGVfY21hKGJsb2NrX210KWAgYW5kIHRoZSBtYWNybyBgQUxMT0NfQ01BYC4gTXkgaW5pdGlhbCBxdWVzdGlvbiBpcywgZG8gdGhlc2UgY2hhbmdlcyBpbXBseSBhICpyZXF1aXJlbWVudCogZm9yIGBDT05GSUdfQ01BYCB0byBiZSBlbmFibGVkPyBJdCBzZWVtcyBsaWtlbHksIGdpdmVuIHRoZSBkaXJlY3QgdXNlIG9mIHRoZXNlIENNQS1yZWxhdGVkIGNvbnN0cnVjdHMuIEkgbmVlZCB0byB0cmFjZSB0aGlzIGJhY2suXG5cbkFoLCBgaXNfbWlncmF0ZV9jbWFgIGlzIGRlZmluZWQgaW4gYGluY2x1ZGUvbGludXgvbW16b25lLmhgLCB3aGljaCBpcyB0aGUgY29ycmVjdCBwbGFjZSBmb3IgbWVtb3J5IHpvbmUgaW5mb3JtYXRpb24gYW5kIGRlZmluaXRpb25zLiBUaGF0J3MgZ29vZCwgaXQncyB3aGVyZSBJJ2QgZXhwZWN0IGl0IHRvIGJlLiBUaGlzIHN1Z2dlc3RzIHRoZSBsb2dpYyBpcyBjaGVja2luZyBpZiB0aGUgY3VycmVudCBtZW1vcnkgYmxvY2sgKGBibG9ja19tdGApIGlzIGFsbG9jYXRlZCBmcm9tIGEgQ01BIHpvbmUuIEkgbmVlZCB0byBzZWUgaG93IHRoZSBpbnRlcmFjdGlvbnMgd2l0aCBgQUxMT0NfQ01BYCBhZmZlY3QgdGhlIG92ZXJhbGwgbWlncmF0aW9uIHBhdGguXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyNjM5LCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yNlQyMDoyMjoyMi4xNzA5MzEzNTlaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3OTk5MjE4OTMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaXNfbWlncmF0ZV9jbWFcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9tbXpvbmUuaD0xNDc9ZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBtaWdyYXRldHlwZV9uYW1lc1tNSUdSQVRFX1RZUEVTXTtcXG4tLVxcbmluY2x1ZGUvbGludXgvbW16b25lLmgtMTQ5LSNpZmRlZiBDT05GSUdfQ01BXFxuaW5jbHVkZS9saW51eC9tbXpvbmUuaDoxNTA6IyAgZGVmaW5lIGlzX21pZ3JhdGVfY21hKG1pZ3JhdGV0eXBlKSB1bmxpa2VseSgobWlncmF0ZXR5cGUpID09IE1JR1JBVEVfQ01BKVxcbmluY2x1ZGUvbGludXgvbW16b25lLmg6MTUxOiMgIGRlZmluZSBpc19taWdyYXRlX2NtYV9wYWdlKF9wYWdlKSAoZ2V0X3BhZ2VibG9ja19taWdyYXRldHlwZShfcGFnZSkgPT0gTUlHUkFURV9DTUEpXFxuaW5jbHVkZS9saW51eC9tbXpvbmUuaC0xNTItLypcXG4tLVxcbmluY2x1ZGUvbGludXgvbW16b25lLmgtMTU1LSAqL1xcbmluY2x1ZGUvbGludXgvbW16b25lLmg6MTU2OiMgIGRlZmluZSBpc19taWdyYXRlX2NtYV9mb2xpbyhmb2xpbywgcGZuKSBcXFxcXFxuaW5jbHVkZS9saW51eC9tbXpvbmUuaC0xNTctXFx0KGdldF9wZm5ibG9ja19taWdyYXRldHlwZShcXHUwMDI2Zm9saW8tXFx1MDAzZXBhZ2UsIHBmbikgPT0gTUlHUkFURV9DTUEpXFxuaW5jbHVkZS9saW51eC9tbXpvbmUuaC0xNTgtI2Vsc2VcXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oOjE1OTojICBkZWZpbmUgaXNfbWlncmF0ZV9jbWEobWlncmF0ZXR5cGUpIGZhbHNlXFxuaW5jbHVkZS9saW51eC9tbXpvbmUuaDoxNjA6IyAgZGVmaW5lIGlzX21pZ3JhdGVfY21hX3BhZ2UoX3BhZ2UpIGZhbHNlXFxuaW5jbHVkZS9saW51eC9tbXpvbmUuaDoxNjE6IyAgZGVmaW5lIGlzX21pZ3JhdGVfY21hX2ZvbGlvKGZvbGlvLCBwZm4pIGZhbHNlXFxuaW5jbHVkZS9saW51eC9tbXpvbmUuaC0xNjItI2VuZGlmXFxuLS1cXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oPTE2ND1zdGF0aWMgaW5saW5lIGJvb2wgaXNfbWlncmF0ZV9tb3ZhYmxlKGludCBtdClcXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oLTE2NS17XFxuaW5jbHVkZS9saW51eC9tbXpvbmUuaDoxNjY6XFx0cmV0dXJuIGlzX21pZ3JhdGVfY21hKG10KSB8fCBtdCA9PSBNSUdSQVRFX01PVkFCTEU7XFxuaW5jbHVkZS9saW51eC9tbXpvbmUuaC0xNjctfVxcbi0tXFxubW0vY29tcGFjdGlvbi5jPTEzNzY9c3RhdGljIGJvb2wgc3VpdGFibGVfbWlncmF0aW9uX3NvdXJjZShzdHJ1Y3QgY29tcGFjdF9jb250cm9sICpjYyxcXG4tLVxcbm1tL2NvbXBhY3Rpb24uYy0xMzk4LVxcdCAqL1xcbm1tL2NvbXBhY3Rpb24uYzoxMzk5OlxcdGlmIChpc19taWdyYXRlX2NtYShibG9ja19tdCkgXFx1MDAyNlxcdTAwMjYgIShjYy1cXHUwMDNlYWxsb2NfZmxhZ3MgXFx1MDAyNiBBTExPQ19DTUEpKVxcbm1tL2NvbXBhY3Rpb24uYy0xNDAwLVxcdFxcdHJldHVybiBmYWxzZTtcXG4tLVxcbm1tL2RlYnVnLmM9NzA9c3RhdGljIHZvaWQgX19kdW1wX2ZvbGlvKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8sIGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlLFxcbi0tXFxubW0vZGVidWcuYy0xMTUtXFx0cHJfd2FybihcXFwiJXNmbGFnczogJXBHcCVzXFxcXG5cXFwiLCB0eXBlLCBcXHUwMDI2Zm9saW8tXFx1MDAzZWZsYWdzLFxcbm1tL2RlYnVnLmM6MTE2OlxcdFxcdGlzX21pZ3JhdGVfY21hX2ZvbGlvKGZvbGlvLCBwZm4pID8gXFxcIiBDTUFcXFwiIDogXFxcIlxcXCIpO1xcbm1tL2RlYnVnLmMtMTE3LVxcdGlmIChwYWdlX2hhc190eXBlKFxcdTAwMjZmb2xpby1cXHUwMDNlcGFnZSkpXFxuLS1cXG5tbS9wYWdlX2FsbG9jLmM9NzI4PWNvbXBhY3Rpb25fY2FwdHVyZShzdHJ1Y3QgY2FwdHVyZV9jb250cm9sICpjYXBjLCBzdHJ1Y3QgcGFnZSAqcGFnZSxcXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYy03MzQtXFx0LyogRG8gbm90IGFjY2lkZW50YWxseSBwb2xsdXRlIENNQSBvciBpc29sYXRlZCByZWdpb25zKi9cXG5tbS9wYWdlX2FsbG9jLmM6NzM1OlxcdGlmIChpc19taWdyYXRlX2NtYShtaWdyYXRldHlwZSkgfHxcXG5tbS9wYWdlX2FsbG9jLmMtNzM2LVxcdCAgICBpc19taWdyYXRlX2lzb2xhdGUobWlncmF0ZXR5cGUpKVxcbi0tXFxubW0vcGFnZV9hbGxvYy5jPTc3Mj1zdGF0aWMgaW5saW5lIHZvaWQgYWNjb3VudF9mcmVlcGFnZXMoc3RydWN0IHpvbmUgKnpvbmUsIGludCBucl9wYWdlcyxcXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYy03ODEtXFxubW0vcGFnZV9hbGxvYy5jOjc4MjpcXHRpZiAoaXNfbWlncmF0ZV9jbWEobWlncmF0ZXR5cGUpKVxcbm1tL3BhZ2VfYWxsb2MuYy03ODMtXFx0XFx0X19tb2Rfem9uZV9wYWdlX3N0YXRlKHpvbmUsIE5SX0ZSRUVfQ01BX1BBR0VTLCBucl9wYWdlcyk7XFxuLS1cXG5tbS9wYWdlX2lzb2xhdGlvbi5jPTEzND1zdGF0aWMgc3RydWN0IHBhZ2UgKmhhc191bm1vdmFibGVfcGFnZXModW5zaWduZWQgbG9uZyBzdGFydF9wZm4sIHVuc2lnbmVkIGxvbmcgZW5kX3BmbixcXG4tLVxcbm1tL3BhZ2VfaXNvbGF0aW9uLmMtMTQyLVxcbm1tL3BhZ2VfaXNvbGF0aW9uLmM6MTQzOlxcdGlmIChpc19taWdyYXRlX2NtYV9wYWdlKHBhZ2UpKSB7XFxubW0vcGFnZV9pc29sYXRpb24uYy0xNDQtXFx0XFx0LypcXG4tLVxcbm1tL3BhZ2Vfb3duZXIuYz00MjU9dm9pZCBwYWdldHlwZWluZm9fc2hvd21peGVkY291bnRfcHJpbnQoc3RydWN0IHNlcV9maWxlICptLFxcbi0tXFxubW0vcGFnZV9vd25lci5jLTQ4NS1cXHRcXHRcXHRpZiAocGFnZWJsb2NrX210ICE9IHBhZ2VfbXQpIHtcXG5tbS9wYWdlX293bmVyLmM6NDg2OlxcdFxcdFxcdFxcdGlmIChpc19taWdyYXRlX2NtYShwYWdlYmxvY2tfbXQpKVxcbm1tL3BhZ2Vfb3duZXIuYy00ODctXFx0XFx0XFx0XFx0XFx0Y291bnRbTUlHUkFURV9NT1ZBQkxFXSsrO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNlQyMDoyMjoyMy45NzA4NTcwMzJaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODUyNDY2ODUzMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIE1lbW9yeSBDb21wYWN0aW9uIExvZ2ljKipcblxuT2theSwgc28gSSdtIGRpdmluZyBpbnRvIHRoaXMgY29kZSByZWxhdGVkIHRvIG1lbW9yeSBjb21wYWN0aW9uLiBJdCBzZWVtcyB0aGUgbWFpbiBmb2N1cyBvZiB0aGlzIHBhcnRpY3VsYXIgc2V0IG9mIGNoYW5nZXMgcmV2b2x2ZXMgYXJvdW5kIG9wdGltaXppbmcgaG93IHRoZSBzeXN0ZW0gaGFuZGxlcyBtZW1vcnkgZnJhZ21lbnRhdGlvbiwgcHJpbWFyaWx5IHdoZW4gZGVhbGluZyB3aXRoIGFsbG9jYXRpb25zIHRoYXQgcmVxdWlyZSBjb250aWd1b3VzIHBoeXNpY2FsIG1lbW9yeS4gVGhlIGBpc19taWdyYXRlX2NtYWAgZmxhZyBpcyB0aWVkIHRvIGBDT05GSUdfQ01BYCwgd2hpY2ggc3VnZ2VzdHMgdGhlcmUncyBzb21lIGludGVyYWN0aW9uIHdpdGggQ29udGlndW91cyBNZW1vcnkgQWxsb2NhdGlvbiwgYnV0IHRoYXQncyBub3QgdGhlIGNlbnRyYWwgcGllY2UsIGF0IGxlYXN0IG5vdCBpbml0aWFsbHkuIFRoZSBjcnVjaWFsIGFzcGVjdCBhcHBlYXJzIHRvIGJlIGBDT05GSUdfQ09NUEFDVElPTmAuXG5cblNwZWNpZmljYWxseSwgSSdtIGtleWluZyBpbiBvbiBgc3VpdGFibGVfbWlncmF0aW9uX3NvdXJjZWAgYmVjYXVzZSBpdCBoYXMgdGhlIGludGVyZXN0aW5nIGNvbmRpdGlvbmFsIGxvZ2ljIHJlZ2FyZGluZyBDTUEgcGFnZXMuIEl0IHN0YXRlcyB0aGF0IENNQSBwYWdlcyBjYW4gb25seSBiZSBhbGxvY2F0ZWQgaWYgYEFMTE9DX0NNQWAgaXMgc2V0LiBUaGlzIGFmZmVjdHMgdGhlIG1pZ3JhdGlvbiBwcm9jZXNzLCBidXQgbW9yZSBicm9hZGx5LCB0aGUgY29yZSBjaGFuZ2UgaXMgd2l0aGluIGBfX2FsbG9jX3BhZ2VzX2RpcmVjdF9jb21wYWN0YC4gTG9va2luZyBhdCB0aGUgY29kZSBmb3IgdGhhdCBmdW5jdGlvbiwgaXQgbG9va3MgbGlrZSBpdCBwcm9tb3RlcyB0aGUgY29tcGFjdGlvbiBvcmRlciB3aGVuIGBBTExPQ19OT0ZSQUdNRU5UYCBpcyBzZXQgYW5kIHRoZSBtaWdyYXRpb24gdHlwZSBpc24ndCBtb3ZhYmxlLiBUaGlzIHNlZW1zIHRvIGJlIHdoZXJlIHRoZSByZWFsIGNoYW5nZSBsaWVzOiBib29zdGluZyB0aGUgb3JkZXIgb2YgdGhlIGNvbXBhY3Rpb24gdG8gbW9yZSBhZ2dyZXNzaXZlbHkgY3JlYXRlIGxhcmdlciBjb250aWd1b3VzIGJsb2Nrcy5cblxuSSBuZWVkIHRvIG5haWwgZG93biBleGFjdGx5IHdoZXJlIHRvIGZvY3VzLiBMZXQncyBtYWtlIHN1cmUgSSdtIHplcm9pbmcgaW4gb24gdGhlIHJpZ2h0IGZ1bmN0aW9uczogYF9fYWxsb2NfcGFnZXNfZGlyZWN0X2NvbXBhY3RgLCBgX19hbGxvY19wYWdlc19kaXJlY3RfcmVjbGFpbWAsIGB0cnlfdG9fY29tcGFjdF9wYWdlc2AsIGBjb21wYWN0X3pvbmVfb3JkZXJgLCBgc3VpdGFibGVfbWlncmF0aW9uX3NvdXJjZWAsIGBmYXN0X2ZpbmRfbWlncmF0ZWJsb2NrYCwgYW5kIGBjb21wYWN0aW9uX2NhcHR1cmVgLlxuXG5BZnRlciBhIHF1aWNrIG1lbnRhbCByZXZpZXcsIGBfX2FsbG9jX3BhZ2VzX2RpcmVjdF9jb21wYWN0YCBhbmQgYF9fYWxsb2NfcGFnZXNfZGlyZWN0X3JlY2xhaW1gIGFyZSBwYXJ0IG9mIHRoZSBwYWdlIGFsbG9jYXRvcidzIHNsb3cgcGF0aCwgc28gdGhleSdyZSBpbXBvcnRhbnQuIGB0cnlfdG9fY29tcGFjdF9wYWdlc2Agc2VlbXMgdG8gYmUgYSBnb29kIGVudHJ5IHBvaW50IHRvIHRoZSBjb21wYWN0aW9uIGxvZ2ljLiBUaGUgb3RoZXJzIGFyZSBzdGF0aWMgb3Igc3RhdGljIGlubGluZSwgbWVhbmluZyB0aGV5IG1heSBiZSBtb3JlIGNvbnRhaW5lZC5cblxuV2FpdCBhIHNlY29uZC4gSXQgbG9va3MgbGlrZSBgX19hbGxvY19wYWdlc19kaXJlY3RfY29tcGFjdGAgaXMgc3RhdGljLiBUaGlzIG1lYW5zIGl0IGlzIG9ubHkgYWNjZXNzaWJsZSBmcm9tIHdpdGhpbiBgbW0vcGFnZV9hbGxvYy5jYC4gVGhpcyBjb3VsZCBiZSBhIHByb2JsZW0gaW4gdGVybXMgb2YgZGVidWdnaW5nIGFuZCB0cmFjaW5nIGJlY2F1c2UgSSBjYW4ndCBkaXJlY3RseSB0YXJnZXQgaXQuIGB0cnlfdG9fY29tcGFjdF9wYWdlc2Agb24gdGhlIG90aGVyIGhhbmQsIGlzIGV4cG9ydGVkLiBPa2F5LCBsZXQncyBoZWFkIG92ZXIgdG8gYG1tL2NvbXBhY3Rpb24uY2AgdG8gdW5kZXJzdGFuZCBgdHJ5X3RvX2NvbXBhY3RfcGFnZXNgIG1vcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0MDk4LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjkzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI2VDIwOjIyOjMyLjQ5NTUyNzc2NloiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjE0OTU0MTE4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInRyeV90b19jb21wYWN0X3BhZ2VzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL2NvbXBhY3Rpb24uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9jb21wYWN0aW9uLmM9Mjc5MT1zdGF0aWMgZW51bSBjb21wYWN0X3Jlc3VsdCBjb21wYWN0X3pvbmVfb3JkZXIoc3RydWN0IHpvbmUgKnpvbmUsIGludCBvcmRlcixcXG4tLVxcbm1tL2NvbXBhY3Rpb24uYy0yODMyLS8qKlxcbm1tL2NvbXBhY3Rpb24uYzoyODMzOiAqIHRyeV90b19jb21wYWN0X3BhZ2VzIC0gRGlyZWN0IGNvbXBhY3QgdG8gc2F0aXNmeSBhIGhpZ2gtb3JkZXIgYWxsb2NhdGlvblxcbm1tL2NvbXBhY3Rpb24uYy0yODM0LSAqIEBnZnBfbWFzazogVGhlIEdGUCBtYXNrIG9mIHRoZSBjdXJyZW50IGFsbG9jYXRpb25cXG4tLVxcbm1tL2NvbXBhY3Rpb24uYy0yODQyLSAqL1xcbm1tL2NvbXBhY3Rpb24uYzoyODQzOmVudW0gY29tcGFjdF9yZXN1bHQgdHJ5X3RvX2NvbXBhY3RfcGFnZXMoZ2ZwX3QgZ2ZwX21hc2ssIHVuc2lnbmVkIGludCBvcmRlcixcXG5tbS9jb21wYWN0aW9uLmMtMjg0NC1cXHRcXHR1bnNpZ25lZCBpbnQgYWxsb2NfZmxhZ3MsIGNvbnN0IHN0cnVjdCBhbGxvY19jb250ZXh0ICphYyxcXG4tLVxcbm1tL2NvbXBhY3Rpb24uYy0yODUzLVxcbm1tL2NvbXBhY3Rpb24uYzoyODU0OlxcdHRyYWNlX21tX2NvbXBhY3Rpb25fdHJ5X3RvX2NvbXBhY3RfcGFnZXMob3JkZXIsIGdmcF9tYXNrLCBwcmlvKTtcXG5tbS9jb21wYWN0aW9uLmMtMjg1NS1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjZUMjA6MjI6MzIuNzEwNDg3MTMzWiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ4ODA3MDU2NDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIFN5emthbGxlcidzIFBvdGVudGlhbCBmb3IgVGFyZ2V0aW5nIE1lbW9yeSBDb21wYWN0aW9uIEZ1bmN0aW9ucyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoZXNlIG1lbW9yeSBjb21wYWN0aW9uIGZ1bmN0aW9ucyBhbmQgaG93IHRoZXkgcmVsYXRlIHRvIGZ1enppbmcgd2l0aCBTeXprYWxsZXIuIEl0IGxvb2tzIGxpa2UgYHRyeV90b19jb21wYWN0X3BhZ2VzYCBpcyAqbm90KiBhIHN0YXRpYyBmdW5jdGlvbiwgd2hpbGUgYGNvbXBhY3Rfem9uZV9vcmRlcmAsIGBzdWl0YWJsZV9taWdyYXRpb25fc291cmNlYCwgYGZhc3RfZmluZF9taWdyYXRlYmxvY2tgLCBgX19hbGxvY19wYWdlc19kaXJlY3RfY29tcGFjdGAsIGFuZCBgX19hbGxvY19wYWdlc19kaXJlY3RfcmVjbGFpbWAgKmFyZSogc3RhdGljLiBUaGUgcXVlc3Rpb24gdGhhdCBpbW1lZGlhdGVseSBjb21lcyB0byBtaW5kLCBhcyBhbiBleHBlcnQgaW4gdGhpcyBhcmVhLCBpcyB3aGV0aGVyIFN5emthbGxlciBjYW4gZWZmZWN0aXZlbHkgdGFyZ2V0IHRoZXNlIHN0YXRpYyBmdW5jdGlvbnMuXG5cblN5emthbGxlciwgaW4gZ2VuZXJhbCwgd29ya3MgYnkgZnV6emluZyBzeXNjYWxscywgc28gdGhlIHNjb3BlIGlzIHRoZSBlbnRpcmUga2VybmVsLiBUaGUga2V5IGhlcmUgaXMgdGhlIGBGb2N1c1N5bWJvbHNgIGxpc3Q7IGl0IGd1aWRlcyB0aGUgZnV6emVyIHRvIHByaW9yaXRpemUgaW5wdXRzIHRoYXQgaGl0IHNwZWNpZmljIGZ1bmN0aW9ucy4gVGhhdCBzZWVtcyBsaWtlIGEgZ29vZCBhcHByb2FjaC4gVGhlIGdvb2QgbmV3cyBpcyB0aGF0IFN5emthbGxlciB1c2VzIGluc3RydWN0aW9uIGFkZHJlc3NlcyBmb3IgY292ZXJhZ2UsIHNvIGFzIGxvbmcgYXMgdGhlIHN0YXRpYyBmdW5jdGlvbnMgYXJlbid0IGNvbXBsZXRlbHkgaW5saW5lZCwgd2Ugc2hvdWxkIGJlIGFibGUgdG8gbWFwIHRoZW0gYW5kIHVzZSB0aGVtLlxuXG5Ob3csIGEgY3J1Y2lhbCBkZXRhaWwgdG8gdmVyaWZ5LiBJJ20gcHJldHR5IHN1cmUgYF9fYWxsb2NfcGFnZXNfZGlyZWN0X2NvbXBhY3RgIGlzICpub3QqIGlubGluZWQuIEhvd2V2ZXIsIEkgbmVlZCB0byBkb3VibGUtY2hlY2sgb24gYF9fYWxsb2NfcGFnZXNfZGlyZWN0X3JlY2xhaW1gLiBJdCdzIGZsYWdnZWQgYXMgYHN0YXRpYyBpbmxpbmVgIGluIHRoZSBwYXRjaC4gSSBuZWVkIHRvIGJlIHN1cmU7IGxldCdzIGNoZWNrIHRoZSBzb3VyY2UgZm9yIGNvbmZpcm1hdGlvbi4gVGhpcyB3aWxsIG1ha2Ugb3IgYnJlYWsgdGhlIGVmZmVjdGl2ZW5lc3Mgb2YgdGhlIHRhcmdldGVkIGZ1enppbmcgY2FtcGFpZ24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1NjA4LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTk1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI2VDIwOjIyOjM3LjU5MTE5NTY0N1oiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE1NzAyNDMzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl9fYWxsb2NfcGFnZXNfZGlyZWN0X3JlY2xhaW1cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vcGFnZV9hbGxvYy5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3BhZ2VfYWxsb2MuYz00NDU1PXN0YXRpYyBpbmxpbmUgc3RydWN0IHBhZ2UgKlxcbm1tL3BhZ2VfYWxsb2MuYzo0NDU2Ol9fYWxsb2NfcGFnZXNfZGlyZWN0X3JlY2xhaW0oZ2ZwX3QgZ2ZwX21hc2ssIHVuc2lnbmVkIGludCBvcmRlcixcXG5tbS9wYWdlX2FsbG9jLmMtNDQ1Ny1cXHRcXHR1bnNpZ25lZCBpbnQgYWxsb2NfZmxhZ3MsIGNvbnN0IHN0cnVjdCBhbGxvY19jb250ZXh0ICphYyxcXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYz00NzY4PV9fYWxsb2NfcGFnZXNfc2xvd3BhdGgoZ2ZwX3QgZ2ZwX21hc2ssIHVuc2lnbmVkIGludCBvcmRlcixcXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYy00OTE4LVxcdGlmICghY29tcGFjdF9maXJzdCkge1xcbm1tL3BhZ2VfYWxsb2MuYzo0OTE5OlxcdFxcdHBhZ2UgPSBfX2FsbG9jX3BhZ2VzX2RpcmVjdF9yZWNsYWltKGdmcF9tYXNrLCBvcmRlciwgYWxsb2NfZmxhZ3MsXFxubW0vcGFnZV9hbGxvYy5jLTQ5MjAtXFx0XFx0XFx0XFx0XFx0XFx0XFx0YWMsIFxcdTAwMjZkaWRfc29tZV9wcm9ncmVzcyk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI2VDIwOjIyOjM3LjcwNjkwMjE0WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM4NTYzOTg3MzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBzaXR1YXRpb24sIGdpdmVuIG15IGV4cGVydGlzZTpcblxuKipFeGFtaW5pbmcgTWVtb3J5IEFsbG9jYXRpb24gSW50ZXJuYWxzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhlc2UgbG93LWxldmVsIG1lbW9yeSBhbGxvY2F0aW9uIGZ1bmN0aW9ucy4gYF9fYWxsb2NfcGFnZXNfZGlyZWN0X3JlY2xhaW1gIGlzIGRlY2xhcmVkIGFzIGBzdGF0aWMgaW5saW5lYC4gVGhpcyBpcyBzaWduaWZpY2FudCBiZWNhdXNlIGl0IHN0cm9uZ2x5IHN1Z2dlc3RzIHRoYXQgdGhlIGNvbXBpbGVyIHdpbGwgbGlrZWx5IHRyeSB0byAqaW5saW5lKiB0aGlzIGZ1bmN0aW9uIGRpcmVjdGx5IGludG8gdGhlIGBfX2FsbG9jX3BhZ2VzX3Nsb3dwYXRoYCBmdW5jdGlvbi4gVGhhdCBtZWFucyB0aGUgY29kZSBmcm9tIGBfX2FsbG9jX3BhZ2VzX2RpcmVjdF9yZWNsYWltYCB3aWxsIGJlIG1lcmdlZCBkaXJlY3RseSBpbnRvIGBfX2FsbG9jX3BhZ2VzX3Nsb3dwYXRoYCB0byBwb3RlbnRpYWxseSBpbmNyZWFzZSBwZXJmb3JtYW5jZSBieSBlbGltaW5hdGluZyBhIGZ1bmN0aW9uIGNhbGwgb3ZlcmhlYWQuIEl0IGlzIGEgY29tbW9uIGNvbXBpbGVyIG9wdGltaXphdGlvbiB0ZWNobmlxdWUgdXNlZCB0byByZWR1Y2Ugb3ZlcmhlYWQuXG5cbk5vdywgYGNvbXBhY3Rpb25fY2FwdHVyZWAgaXMgYWxzbyBgc3RhdGljIGlubGluZWAuIFRoaXMgc3VnZ2VzdHMgdGhlIHNhbWUgaW5saW5pbmcgYmVoYXZpb3IgYXMgYmVmb3JlLiBUaGlzIGlzIGFub3RoZXIgYXJlYSB0byB3YXRjaCBvdXQgZm9yIG9wdGltaXphdGlvbnMsIGFzIHRoZSBgc3RhdGljIGlubGluZWAgZGVjbGFyYXRpb24gaXMgYSBjbHVlIHRvIGl0cyBpbnRlbmRlZCB1c2FnZS5cblxuRmluYWxseSwgYF9fYWxsb2NfcGFnZXNfZGlyZWN0X2NvbXBhY3RgIGlzIGRlY2xhcmVkIGFzIGBzdGF0aWNgLiAgVGhpcyBpcyBpbXBvcnRhbnQuIEEgYHN0YXRpY2AgZnVuY3Rpb24gaGFzIGludGVybmFsIGxpbmthZ2Ugb25seSBhbmQgaXMgbm90IHZpc2libGUgb3V0c2lkZSB0aGUgY3VycmVudCBjb21waWxhdGlvbiB1bml0LiBJdCB3b24ndCBiZSBpbmxpbmVkIGFuZCBpcyBvbmx5IHVzZWQgd2l0aGluIHRoZSBzb3VyY2UgZmlsZSBpdCdzIGRlZmluZWQgaW4uIFRoaXMgcHJvYmFibHkgbWVhbnMgaXQgcGVyZm9ybXMgYSBzcGVjaWZpYyBjb21wYWN0aW9uIHJvdXRpbmUgd2l0aGluIHRoaXMgc3BlY2lmaWMgYWxsb2NhdGlvbiBwYXRoLCBhbmQgdGhlcmUncyBubyBuZWVkIGZvciBpdCB0byBiZSBhY2Nlc3NpYmxlIGVsc2V3aGVyZSBpbiB0aGUga2VybmVsLiBUaGlzIGFsc28gbGV0cyB0aGUgY29tcGlsZXIgcGVyZm9ybSBtb3JlIGFnZ3Jlc3NpdmUgb3B0aW1pemF0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTYzODQsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yNlQyMDoyMjo0MS41NjMzMDI1MThaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExMDM4NjI0NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJfX2FsbG9jX3BhZ2VzX2RpcmVjdF9jb21wYWN0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL3BhZ2VfYWxsb2MuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9wYWdlX2FsbG9jLmM9NDE0MT1zdGF0aWMgc3RydWN0IHBhZ2UgKlxcbm1tL3BhZ2VfYWxsb2MuYzo0MTQyOl9fYWxsb2NfcGFnZXNfZGlyZWN0X2NvbXBhY3QoZ2ZwX3QgZ2ZwX21hc2ssIHVuc2lnbmVkIGludCBvcmRlcixcXG5tbS9wYWdlX2FsbG9jLmMtNDE0My1cXHRcXHR1bnNpZ25lZCBpbnQgYWxsb2NfZmxhZ3MsIGNvbnN0IHN0cnVjdCBhbGxvY19jb250ZXh0ICphYyxcXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYz00MzA3PXN0YXRpYyBpbmxpbmUgc3RydWN0IHBhZ2UgKlxcbm1tL3BhZ2VfYWxsb2MuYzo0MzA4Ol9fYWxsb2NfcGFnZXNfZGlyZWN0X2NvbXBhY3QoZ2ZwX3QgZ2ZwX21hc2ssIHVuc2lnbmVkIGludCBvcmRlcixcXG5tbS9wYWdlX2FsbG9jLmMtNDMwOS1cXHRcXHR1bnNpZ25lZCBpbnQgYWxsb2NfZmxhZ3MsIGNvbnN0IHN0cnVjdCBhbGxvY19jb250ZXh0ICphYyxcXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYz00NDU2PV9fYWxsb2NfcGFnZXNfZGlyZWN0X3JlY2xhaW0oZ2ZwX3QgZ2ZwX21hc2ssIHVuc2lnbmVkIGludCBvcmRlcixcXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYy00NDY0LVxcbm1tL3BhZ2VfYWxsb2MuYzo0NDY1OlxcdC8qIE1hdGNoIHRoZSBzbG93cGF0aCBjb21wYWN0aW9uIHByb21vdGlvbiBpbiBfX2FsbG9jX3BhZ2VzX2RpcmVjdF9jb21wYWN0ICovXFxubW0vcGFnZV9hbGxvYy5jLTQ0NjYtXFx0aWYgKChhbGxvY19mbGFncyBcXHUwMDI2IEFMTE9DX05PRlJBR01FTlQpIFxcdTAwMjZcXHUwMDI2IGFjLVxcdTAwM2VtaWdyYXRldHlwZSAhPSBNSUdSQVRFX01PVkFCTEUpXFxuLS1cXG5tbS9wYWdlX2FsbG9jLmM9NDc2OD1fX2FsbG9jX3BhZ2VzX3Nsb3dwYXRoKGdmcF90IGdmcF9tYXNrLCB1bnNpZ25lZCBpbnQgb3JkZXIsXFxuLS1cXG5tbS9wYWdlX2FsbG9jLmMtNDkyNS1cXHQvKiBUcnkgZGlyZWN0IGNvbXBhY3Rpb24gYW5kIHRoZW4gYWxsb2NhdGluZyAqL1xcbm1tL3BhZ2VfYWxsb2MuYzo0OTI2OlxcdHBhZ2UgPSBfX2FsbG9jX3BhZ2VzX2RpcmVjdF9jb21wYWN0KGdmcF9tYXNrLCBvcmRlciwgYWxsb2NfZmxhZ3MsIGFjLFxcbm1tL3BhZ2VfYWxsb2MuYy00OTI3LVxcdFxcdFxcdFxcdFxcdGNvbXBhY3RfcHJpb3JpdHksIFxcdTAwMjZjb21wYWN0X3Jlc3VsdCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI2VDIwOjIyOjQxLjY3MzY5MDU1MloiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NjgwNjE4NzQyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uXG5cbioqTXkgQW5hbHlzaXMgb2YgdGhlIERpcmVjdCBDb21wYWN0aW9uIFByb2Nlc3MqKlxuXG5SaWdodCwgc28gYF9fYWxsb2NfcGFnZXNfZGlyZWN0X2NvbXBhY3RgIGlzIGRlY2xhcmVkIGBzdGF0aWNgLCB3aGljaCBpbW1lZGlhdGVseSBuYXJyb3dzIHRoZSBzY29wZSBvZiB3aGVyZSBJIG5lZWQgdG8gZm9jdXMgbXkgYXR0ZW50aW9uLiBJdCBtZWFucyBJIG5lZWQgdG8gaWdub3JlIGl0cyBkaXJlY3QgY2FsbHMgb3V0c2lkZSBvZiB0aGUgZmlsZSBpdCdzIGRlZmluZWQgaW4uIFRoaXMgc3VnZ2VzdHMgYSBsb2NhbGl6ZWQgb3B0aW1pemF0aW9uIG9yIGEgaGVscGVyIGZ1bmN0aW9uIHRoYXTigJlzIG5vdCBpbnRlbmRlZCB0byBiZSBleHBvc2VkIHdpZGVseS4gVGh1cywgdGhlIHJlbGV2YW50IGNhbGxzIHRvIGZvY3VzIG9uIGFyZSB0aGUgZnVuY3Rpb25zIGl0IGNhbGxzLlxuXG5UaGVyZWZvcmUsIHRoZSBrZXkgZnVuY3Rpb25zIHRvIGludmVzdGlnYXRlIGZ1cnRoZXIgYXJlOiBgX19hbGxvY19wYWdlc19kaXJlY3RfY29tcGFjdGAsIG5hdHVyYWxseSwgdGhlbiBgdHJ5X3RvX2NvbXBhY3RfcGFnZXNgLCB3aGljaCBzZWVtcyB0byBiZSB0aGUgbG9naWNhbCBlbnRyeSBwb2ludCBmb3IgdGhlIGNvbXBhY3Rpb24gYXR0ZW1wdCwgZm9sbG93ZWQgYnkgdGhlIHpvbmUtbGV2ZWwgY29tcGFjdGlvbiBsb2dpYyBpbiBgY29tcGFjdF96b25lX29yZGVyYC4gSSBhbHNvIHdhbnQgdG8gZGl2ZSBpbnRvIHRoZSBzb3VyY2UvZGVzdGluYXRpb24gcGFnZSBzZWxlY3Rpb24sIGFuZCBpbiBwYXJ0aWN1bGFyIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBzeXN0ZW0gZGV0ZXJtaW5lcyBhIGBzdWl0YWJsZV9taWdyYXRpb25fc291cmNlYCBhbmQgZmluYWxseSBJIG5lZWQgdG8ga25vdyB0aGUgZmFzdCBwYXRoIGZvciBhbGxvY2F0aW9uIHRoYXQgaW52b2x2ZXMgYGZhc3RfZmluZF9taWdyYXRlYmxvY2tgLlxuXG5JIHRoaW5rIGBmYXN0X2ZpbmRfbWlncmF0ZWJsb2NrYCBpcyB0aGUgb25lIHRvIGluc3BlY3QgZmlyc3QuIEknbGwgc3RhcnQgd2l0aCB0aGlzIG9uZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTcyMTAsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yNlQyMDoyMjo0Ni4zNTQzMTE4NTRaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgyNDAxNjQ0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImZhc3RfZmluZF9taWdyYXRlYmxvY2tcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vY29tcGFjdGlvbi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2NvbXBhY3Rpb24uYz0xOTQ0PXJlaW5pdF9taWdyYXRlX3BmbihzdHJ1Y3QgY29tcGFjdF9jb250cm9sICpjYylcXG4tLVxcbm1tL2NvbXBhY3Rpb24uYy0xOTU5LSAqL1xcbm1tL2NvbXBhY3Rpb24uYzoxOTYwOnN0YXRpYyB1bnNpZ25lZCBsb25nIGZhc3RfZmluZF9taWdyYXRlYmxvY2soc3RydWN0IGNvbXBhY3RfY29udHJvbCAqY2MpXFxubW0vY29tcGFjdGlvbi5jLTE5NjEte1xcbi0tXFxubW0vY29tcGFjdGlvbi5jPTIwODI9c3RhdGljIGlzb2xhdGVfbWlncmF0ZV90IGlzb2xhdGVfbWlncmF0ZXBhZ2VzKHN0cnVjdCBjb21wYWN0X2NvbnRyb2wgKmNjKVxcbi0tXFxubW0vY29tcGFjdGlvbi5jLTIwOTctXFx0ICovXFxubW0vY29tcGFjdGlvbi5jOjIwOTg6XFx0bG93X3BmbiA9IGZhc3RfZmluZF9taWdyYXRlYmxvY2soY2MpO1xcbm1tL2NvbXBhY3Rpb24uYy0yMDk5LVxcdGJsb2NrX3N0YXJ0X3BmbiA9IHBhZ2VibG9ja19zdGFydF9wZm4obG93X3Bmbik7XFxuLS1cXG5tbS9jb21wYWN0aW9uLmMtMjEwMy1cXHQvKlxcbm1tL2NvbXBhY3Rpb24uYzoyMTA0OlxcdCAqIGZhc3RfZmluZF9taWdyYXRlYmxvY2soKSBoYXMgYWxyZWFkeSBlbnN1cmVkIHRoZSBwYWdlYmxvY2sgaXMgbm90XFxubW0vY29tcGFjdGlvbi5jLTIxMDUtXFx0ICogc2V0IHdpdGggYSBza2lwcGVkIGZsYWcsIHNvIHRvIGF2b2lkIHRoZSBpc29sYXRpb25fc3VpdGFibGUgY2hlY2tcXG4tLVxcbm1tL2NvbXBhY3Rpb24uYz0yNTUzPWNvbXBhY3Rfem9uZShzdHJ1Y3QgY29tcGFjdF9jb250cm9sICpjYywgc3RydWN0IGNhcHR1cmVfY29udHJvbCAqY2FwYylcXG4tLVxcbm1tL2NvbXBhY3Rpb24uYy0yNzA5LVxcdFxcdFxcdCAqIHdpdGhpbiB0aGUgcGFnZWJsb2NrX29yZGVyLWFsaWduZWQgYmxvY2sgYW5kXFxubW0vY29tcGFjdGlvbi5jOjI3MTA6XFx0XFx0XFx0ICogZmFzdF9maW5kX21pZ3JhdGVibG9jayBtYXkgYmUgdXNlZCB0aGVuIHNjYW4gdGhlXFxubW0vY29tcGFjdGlvbi5jLTI3MTEtXFx0XFx0XFx0ICogcmVtYWluZGVyIG9mIHRoZSBwYWdlYmxvY2suIFRoaXMgd2lsbCBtYXJrIHRoZVxcbi0tXFxubW0vY29tcGFjdGlvbi5jLTI3MTQtXFx0XFx0XFx0ICogZm9yIHRoZSByZXF1ZXN0IGJ1dCBhdm9pZCBsb29wcyBkdWUgdG9cXG5tbS9jb21wYWN0aW9uLmM6MjcxNTpcXHRcXHRcXHQgKiBmYXN0X2ZpbmRfbWlncmF0ZWJsb2NrIHJldmlzaXRpbmcgYmxvY2tzIHRoYXQgd2VyZVxcbm1tL2NvbXBhY3Rpb24uYy0yNzE2LVxcdFxcdFxcdCAqIHJlY2VudGx5IHBhcnRpYWxseSBzY2FubmVkLlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNlQyMDoyMjo0Ni40MzY3MjE2OThaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzU2ODMzMjg2NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgTWVtb3J5IENvbXBhY3Rpb24gU3ltYm9sIFVzYWdlKipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byBob3cgbWVtb3J5IGNvbXBhY3Rpb24gd29ya3MsIGFuZCB0aGUgZmlyc3QgdGhpbmcgSSdtIG5vdGluZyBpcyB0aGF0IGBmYXN0X2ZpbmRfbWlncmF0ZWJsb2NrYCAqaXMqIGluZGVlZCBhIHN0YXRpYyBmdW5jdGlvbi4gVGhhdCBoZWxwcy4gR2l2ZW4gdGhhdCwgbXkgd29ya2luZyBoeXBvdGhlc2lzIGZvciB0aGUga2V5IHN5bWJvbHMgdXNlZCBpbiB0aGUgZm9jdXMgb2YgdGhlIHByb2Nlc3Mgc2hvdWxkIGJlOlxuXG4qICAgYF9fYWxsb2NfcGFnZXNfZGlyZWN0X2NvbXBhY3RgXG4qICAgYHRyeV90b19jb21wYWN0X3BhZ2VzYFxuKiAgIGBjb21wYWN0X3pvbmVfb3JkZXJgXG4qICAgYHN1aXRhYmxlX21pZ3JhdGlvbl9zb3VyY2VgXG4qICAgYGZhc3RfZmluZF9taWdyYXRlYmxvY2tgXG5cbkJ1dCB3YWl0LCBJIG5lZWQgdG8gYmUgY2FyZWZ1bCBoZXJlLiBMb29raW5nIGFnYWluLCBgX19hbGxvY19wYWdlc19kaXJlY3RfcmVjbGFpbWAgaXMgZGVmaW5lZCBhcyBgc3RhdGljIGlubGluZWAuIFJpZ2h0LCBzbyBpdCB3b24ndCBiZSBhIHVuaXF1ZSBzeW1ib2wgaW4gdGhlIGZpbmFsIGNvbXBpbGVkIGNvZGUuIEhtbSwgdGhhdCBjaGFuZ2VzIHRoaW5ncy4gSG93ZXZlciwgYF9fcGVyZm9ybV9yZWNsYWltYCAqbWlnaHQqIHN0aWxsIGJlLiBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQuIExldCBtZSBxdWlja2x5IGRvdWJsZS1jaGVjayB0aGUgZGVmaW5pdGlvbiBhbmQgdXNhZ2Ugb2YgYF9fcGVyZm9ybV9yZWNsYWltYCB0byBiZSBjZXJ0YWluLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODA0MywiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yNlQyMDoyMjo1MC4wMDUwNTY4MDRaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExMDYyMjA1NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJfX3BlcmZvcm1fcmVjbGFpbVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9wYWdlX2FsbG9jLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vcGFnZV9hbGxvYy5jPTQ0Mjk9c3RhdGljIHVuc2lnbmVkIGxvbmdcXG5tbS9wYWdlX2FsbG9jLmM6NDQzMDpfX3BlcmZvcm1fcmVjbGFpbShnZnBfdCBnZnBfbWFzaywgdW5zaWduZWQgaW50IG9yZGVyLFxcbm1tL3BhZ2VfYWxsb2MuYy00NDMxLVxcdFxcdFxcdFxcdFxcdGNvbnN0IHN0cnVjdCBhbGxvY19jb250ZXh0ICphYylcXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYz00NDU2PV9fYWxsb2NfcGFnZXNfZGlyZWN0X3JlY2xhaW0oZ2ZwX3QgZ2ZwX21hc2ssIHVuc2lnbmVkIGludCBvcmRlcixcXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYy00NDY5LVxcdHBzaV9tZW1zdGFsbF9lbnRlcihcXHUwMDI2cGZsYWdzKTtcXG5tbS9wYWdlX2FsbG9jLmM6NDQ3MDpcXHQqZGlkX3NvbWVfcHJvZ3Jlc3MgPSBfX3BlcmZvcm1fcmVjbGFpbShnZnBfbWFzaywgcmVjbGFpbV9vcmRlciwgYWMpO1xcbm1tL3BhZ2VfYWxsb2MuYy00NDcxLVxcdGlmICh1bmxpa2VseSghKCpkaWRfc29tZV9wcm9ncmVzcykpKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNlQyMDoyMjo1MC4xMTU2ODI3N1oiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4NDgwNDA3MzMzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBNZW1vcnkgQ29tcGFjdGlvbiBQYXRjaCoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgaW50ZXJlc3RpbmcuIFdoaWxlIGBfX3BlcmZvcm1fcmVjbGFpbWAgaXRzZWxmIGlzbid0IGRpcmVjdGx5IHRvdWNoZWQsIHRoZSBpbXBvcnRhbnQgY2hhbmdlIHNlZW1zIHRvIGJlIGluIGBfX2FsbG9jX3BhZ2VzX2RpcmVjdF9yZWNsYWltYCwgd2hpY2gsIGR1ZSB0byBiZWluZyBpbmxpbmVkLCBhY3R1YWxseSBtZWFucyB0aGUgbW9kaWZpY2F0aW9uIGlzIGhhcHBlbmluZyB3aXRoaW4gYF9fYWxsb2NfcGFnZXNfc2xvd3BhdGhgLiBJIGNvdWxkIHRyeSBmdXp6aW5nIHRoYXQgZnVuY3Rpb24gc2luY2UgaXQgY29udGFpbnMgdGhlIGxvZ2ljIGZvciBtZW1vcnkgYWxsb2NhdGlvbiBmYWlsdXJlcyBhbmQgaXQncyBhZmZlY3RlZCwgYnV0IHRoYXQncyBhICp2ZXJ5KiBob3QgcGF0aC4gRm9jdXNpbmcgb24gdGhlIGNvbXBhY3Rpb24gZnVuY3Rpb25zIHNlZW1zIG1vcmUgdGFyZ2V0ZWQgYW5kIHBvdGVudGlhbGx5IG1vcmUgZnJ1aXRmdWwuXG5cblRoZSBmaXJzdCB0aGluZyBJIG5lZWRlZCB0byBjb25maXJtIHdhcyB0aGUgY29uZmlndXJhdGlvbiByZXF1aXJlbWVudHMuIEl0IGxvb2tzIGxpa2UgYENPTkZJR19DT01QQUNUSU9OYCBpcyB0aGUgb25seSBvbmUuIEl0J3MgdXN1YWxseSBlbmFibGVkLCBidXQgaXQncyBhbHdheXMgZ29vZCB0byBiZSBleHBsaWNpdC5cblxuTGV0J3MgYnJlYWsgZG93biB0aGUgbG9naWMuIFRoZSBjb3JlIG9mIHRoZSBwYXRjaCByZXZvbHZlcyBhcm91bmQgbW9kaWZpY2F0aW9ucyB0byBob3cgZGlyZWN0IGNvbXBhY3Rpb24gYW5kIHJlY2xhaW0gaGFuZGxlIHBhZ2UgY2FwdHVyZSBhbmQgY29tcGFjdGlvbiBvcmRlcnMsIHNwZWNpZmljYWxseSBwcm9tb3RpbmcgdGhlIGNvbXBhY3Rpb24gb3JkZXIgdG8gYHBhZ2VibG9ja19vcmRlcmAuIFRoaXMgYWltcyB0byByZWR1Y2UgZnJhZ21lbnRhdGlvbiBkdXJpbmcgaGlnaGVyLW9yZGVyIGFsbG9jYXRpb25zIGFuZCB1bmRlciBtZW1vcnkgcHJlc3N1cmUuIFRoYXQgbWFrZXMgc2Vuc2UsIHRoaXMgaXMgcmlnaHQgaW4gdGhlIGhlYXJ0IG9mIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYy5cblxuRG91YmxlLWNoZWNraW5nIGZvciBhbnkgb3RoZXIgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMsIGl0IGxvb2tzIGxpa2UgYEFMTE9DX05PRlJBR01FTlRgIGlzIGEgZmxhZywgYE1JR1JBVEVfTU9WQUJMRWAgaXMgYSBtaWdyYXRldHlwZSwgYW5kIGBwYWdlYmxvY2tfb3JkZXJgIGlzIGEgbWFjcm8vdmFyaWFibGUuIEFuZCBgdHJ5X3RvX2NvbXBhY3RfcGFnZXNgIGlzIHRoZSBtYWluIGVudHJ5IHBvaW50IHRvIGl0IGFsbC5cblxuR2l2ZW4gdGhpcyBpcyBnZW5lcmljIE1NIGNvZGUsIHRoZXJlIGFyZW4ndCBhbnkgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIGNvbmZpZ3VyYXRpb24gY29uc2lkZXJhdGlvbnMuIFRoZXJlZm9yZSwgYEVuYWJsZUNvbmZpZ3NgIHNob3VsZCBpbmRlZWQgYmUgYFtcIkNPTVBBQ1RJT05cIl1gLlxuXG5Ob3csIGZvciBgRm9jdXNTeW1ib2xzYCwgSSd2ZSBpZGVudGlmaWVkIHNldmVyYWwga2V5IGZ1bmN0aW9uczpcblxuKiAgIGBfX2FsbG9jX3BhZ2VzX2RpcmVjdF9jb21wYWN0YCAtIFNpbmNlIHRoaXMgZnVuY3Rpb24gaGFzIFwiZGlyZWN0XCIgaW4gaXRzIG5hbWUsIGl0IHNvdW5kcyBnb29kIHRvIHN0YXJ0IHdpdGguXG4qICAgYHRyeV90b19jb21wYWN0X3BhZ2VzYCAtIFRoaXMgc2VlbXMgdG8gYmUgdGhlIG1haW4gZW50cnkgcG9pbnQuXG4qICAgYGNvbXBhY3Rfem9uZV9vcmRlcmAgLSBMaWtlbHkgaW52b2x2ZWQgaW4gZGV0ZXJtaW5pbmcgdGhlIGNvbXBhY3Rpb24gb3JkZXIuXG4qICAgYHN1aXRhYmxlX21pZ3JhdGlvbl9zb3VyY2VgIC0gUGFydCBvZiB0aGUgcGFnZSBtaWdyYXRpb24gcHJvY2Vzcy5cbiogICBgZmFzdF9maW5kX21pZ3JhdGVibG9ja2AgLSBQb3RlbnRpYWxseSByZWxhdGVkIHRvIGZpbmRpbmcgYmxvY2tzIGZvciBtaWdyYXRpb24uXG5cbkkgbmVlZCB0byBjb25maXJtIGlmIHRoZXNlIGZ1bmN0aW9ucyBhcmUgaW5saW5lLiBJJ3ZlIG5vdyB2ZXJpZmllZCB0aGF0IGBfX2FsbG9jX3BhZ2VzX2RpcmVjdF9jb21wYWN0YCAoc3RydWN0IHBhZ2VcXCopLCBgY29tcGFjdF96b25lX29yZGVyYCAoZW51bSksIGBzdWl0YWJsZV9taWdyYXRpb25fc291cmNlYCAoYm9vbCksIGFuZCBgZmFzdF9maW5kX21pZ3JhdGVibG9ja2AgKHVuc2lnbmVkIGxvbmcpIGFyZSBhbGwgc3RhdGljIGFuZCBub3QgbWFya2VkIGFzIGlubGluZSwgd2hpY2ggaXMgZ29vZCBmb3IgdGFyZ2V0ZWQgZnV6emluZy5cblxuT25lIGZpbmFsIGNoZWNrLCBpcyBgdHJ5X3RvX2NvbXBhY3RfcGFnZXNgIGV4cG9ydGVkPyBJIHNob3VsZCB2ZXJpZnkgdGhhdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTg2NDMsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjZUMjA6MjI6NTguNTk2MDkxNzQzWiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MjMzODQ1MywiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiRVhQT1JUX1NZTUJPTC4qdHJ5X3RvX2NvbXBhY3RfcGFnZXNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNlQyMDoyMjo1OC42Njg0Mzg1OTZaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzg4NzY2OTY1MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHVuZGVyc3RhbmRpbmcsIHBsYXlpbmcgdGhlIHJvbGUgb2YgYW4gZXhwZXJ0OlxuXG4qKkFuYWx5emluZyB0aGUgYGNvbXBhY3Rpb25gIEZ1bmN0aW9uIGluIHRoZSBLZXJuZWwgTWVtb3J5IE1hbmFnZW1lbnQgQ29kZSoqXG5cbkFscmlnaHQsIHNvIHRoZSBgY29tcGFjdGlvbmAgZnVuY3Rpb24gaXMgaW4gYG1tL2NvbXBhY3Rpb24uY2AsIGJ1dCBpdCdzICpub3QqIGV4cG9ydGVkIGFzIGEgbW9kdWxlIGZ1bmN0aW9uLiBGaW5lLCBubyBiaWcgZGVhbCwgaXQncyBnbG9iYWwgKGJ1dCBub24tc3RhdGljKSwgd2hpY2ggaXMgdG90YWxseSBhY2NlcHRhYmxlIGZvciBob3cgc3l6a2FsbGVyIG9wZXJhdGVzLiBJdCdzIG5vdCBhIHByb2JsZW0uXG5cbk5vdywgSSBuZWVkIHRvIGxvb2sgYXQgYGNvbXBhY3Rpb25fY2FwdHVyZWAuIEl0IGxvb2tzIGxpa2UgaXQncyBhIGBzdGF0aWMgaW5saW5lYCBmdW5jdGlvbi4gVGhlIGtleSBoZXJlIGlzIHRoZSBgaW5saW5lYC4gU28sIG15IGltbWVkaWF0ZSB0aG91Z2h0IGlzOiB0aGlzIHRoaW5nJ3MgYmVlbiAqaW5saW5lZCogd2hlcmV2ZXIgaXQncyB1c2VkLiBUaGlzIG1lYW5zIEkgbmVlZCB0byB0cmFjZSB0aGUgY2FsbGluZyBjb250ZXh0IGJ5IGNoZWNraW5nIHdoZXJlIGl0IGlzIGNhbGxlZCFcblxuXG4iLCJJbnB1dFRva2VucyI6MTk4MjIsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yNlQyMDoyMzowMi41NTYxMTAzMzlaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU0NDc1NzEzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbXBhY3Rpb25fY2FwdHVyZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9wYWdlX2FsbG9jLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vcGFnZV9hbGxvYy5jPTcyNz1zdGF0aWMgaW5saW5lIGJvb2xcXG5tbS9wYWdlX2FsbG9jLmM6NzI4OmNvbXBhY3Rpb25fY2FwdHVyZShzdHJ1Y3QgY2FwdHVyZV9jb250cm9sICpjYXBjLCBzdHJ1Y3QgcGFnZSAqcGFnZSxcXG5tbS9wYWdlX2FsbG9jLmMtNzI5LVxcdFxcdCAgIGludCBvcmRlciwgaW50IG1pZ3JhdGV0eXBlKVxcbi0tXFxubW0vcGFnZV9hbGxvYy5jPTc2ND1zdGF0aWMgaW5saW5lIGJvb2xcXG5tbS9wYWdlX2FsbG9jLmM6NzY1OmNvbXBhY3Rpb25fY2FwdHVyZShzdHJ1Y3QgY2FwdHVyZV9jb250cm9sICpjYXBjLCBzdHJ1Y3QgcGFnZSAqcGFnZSxcXG5tbS9wYWdlX2FsbG9jLmMtNzY2LVxcdFxcdCAgIGludCBvcmRlciwgaW50IG1pZ3JhdGV0eXBlKVxcbi0tXFxubW0vcGFnZV9hbGxvYy5jPTkzNj1zdGF0aWMgaW5saW5lIHZvaWQgX19mcmVlX29uZV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlLFxcbi0tXFxubW0vcGFnZV9hbGxvYy5jLTk1OC1cXG5tbS9wYWdlX2FsbG9jLmM6OTU5OlxcdFxcdGlmIChjb21wYWN0aW9uX2NhcHR1cmUoY2FwYywgcGFnZSwgb3JkZXIsIG1pZ3JhdGV0eXBlKSkge1xcbm1tL3BhZ2VfYWxsb2MuYy05NjAtXFx0XFx0XFx0YWNjb3VudF9mcmVlcGFnZXMoem9uZSwgLSgxIFxcdTAwM2NcXHUwMDNjIG9yZGVyKSwgbWlncmF0ZXR5cGUpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNlQyMDoyMzowMi42MTA1OTAyNzJaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzIzNDM2NTIxOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgTWVtb3J5IENvbXBhY3Rpb24gUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGJlZW4gZGlnZ2luZyBpbnRvIHRoaXMgcGF0Y2guIFRoZSBrZXkgdGhpbmcgSSdtIHNlZWluZyBpcyB0aGF0IGl0J3MgYWxsIGFib3V0IG1lbW9yeSBjb21wYWN0aW9uIGFuZCBhbGxvY2F0aW9uLCBhbmQgaG93IHRoZXkgaW50ZXJhY3QuIFNwZWNpZmljYWxseSwgaXQncyBtYWtpbmcgc29tZSBjaGFuZ2VzIHRvIGRpcmVjdCBjb21wYWN0aW9uIGFuZCByZWNsYWltLCBmb2N1c2luZyBvbiBob3cgdGhleSBoYW5kbGUgcGFnZSBjYXB0dXJlIGFuZCBjb21wYWN0aW9uIG9yZGVycy4gVGhlIGdvYWwgc2VlbXMgdG8gYmUgdG8gaW1wcm92ZSBtZW1vcnkgbWFuYWdlbWVudCBieSBwcm9tb3RpbmcgdGhlIGNvbXBhY3Rpb24gb3JkZXIgdG8gYHBhZ2VibG9ja19vcmRlcmAgdW5kZXIgY2VydGFpbiBhbGxvY2F0aW9uIHNjZW5hcmlvcyB0byByZWR1Y2UgZnJhZ21lbnRhdGlvbi5cblxuVGhlIGltcG9ydGFudCB0aGluZyBpcyB0aGF0IGBfX2ZyZWVfb25lX3BhZ2VgIGlzIGJlaW5nIGNhbGxlZCwgd2hpY2ggaXMgYSBob3QgcGF0aCwgYW5kIHdlIGRvbid0IHdhbnQgdG8gaW5jbHVkZSB0aGlzIGluIGBGb2N1c1N5bWJvbHNgLlxuXG5TbywgdGhlIGNyaXRpY2FsIGZ1bmN0aW9ucyB0byBmb2N1cyBvbiBhcmU6XG5cbiogICBgX19hbGxvY19wYWdlc19kaXJlY3RfY29tcGFjdGBcbiogICBgdHJ5X3RvX2NvbXBhY3RfcGFnZXNgXG4qICAgYGNvbXBhY3Rfem9uZV9vcmRlcmBcbiogICBgc3VpdGFibGVfbWlncmF0aW9uX3NvdXJjZWBcbiogICBgZmFzdF9maW5kX21pZ3JhdGVibG9ja2BcblxuSSB3ZW50IGJhY2sgYW5kIGNoZWNrZWQgaWYgYW55IG90aGVyIGZ1bmN0aW9ucyB3ZXJlIG1vZGlmaWVkLiBJIGZvdW5kIGB0YXNrX2NhcGNgIGJ1dCBzaW5jZSB0aGF0J3MgaW5saW5lIGl0J3Mgbm90IGEgbWFqb3IgY29uY2Vybi5cblxuVGhpbmtpbmcgaXQgdGhyb3VnaCwgdGhlIHBhdGNoIGlzIHRvdWNoaW5nIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQg4oCTIGRpcmVjdCBjb21wYWN0aW9uLCByZWNsYWltLCBhbGxvY2F0aW9uIOKAkyBhbmQgdGhhdCdzIGV4YWN0bHkgdGhlIGtpbmQgb2YgdGhpbmcgd2Ugd2FudCB0byBmdXp6LiBUaGUgc2NlbmFyaW9zIGl0IHRhcmdldHMgYXJlIHRob3NlIHRoYXQgaW52b2x2ZSBoaWdoZXItb3JkZXIgbWVtb3J5IGFsbG9jYXRpb25zIGFuZCBtZW1vcnkgcHJlc3N1cmUuIEl0IHNlZW1zIGZ1bmN0aW9uYWwgYW5kIGRlZmluaXRlbHkgd29ydGh5IG9mIGZ1enppbmcuXG5cblRoZSByZWxldmFudCBjb25maWcgaXMgYENPTVBBQ1RJT05gLCBhbmQgdGhlcmUncyBhbiBvcHRpb25hbCBkZXBlbmRlbmNlIG9uIGBDT05GSUdfQ01BYCB3aXRoaW4gYHN1aXRhYmxlX21pZ3JhdGlvbl9zb3VyY2VgLCBidXQgYENPTVBBQ1RJT05gIGlzIHRoZSBwcmltYXJ5IG9uZSwgc28gdGhhdCdzIHdoYXQgSSdsbCBsaXN0LlxuXG5JIHRoaW5rIEkndmUgZ290IGEgc29saWQgZ3Jhc3Agb24gdGhpcyBub3cuIEknbGwgbW92ZSBvbiB0byBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDM2MywiT3V0cHV0VG9rZW5zIjoxNTAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NDMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjZUMjA6MjM6MDkuODQ0OTU4Mzk5WiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzA3NDI0NTMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkNPTVBBQ1RJT05cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJfX2FsbG9jX3BhZ2VzX2RpcmVjdF9jb21wYWN0XCIsXG4gICAgXCJ0cnlfdG9fY29tcGFjdF9wYWdlc1wiLFxuICAgIFwiY29tcGFjdF96b25lX29yZGVyXCIsXG4gICAgXCJzdWl0YWJsZV9taWdyYXRpb25fc291cmNlXCIsXG4gICAgXCJmYXN0X2ZpbmRfbWlncmF0ZWJsb2NrXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgbWVtb3J5IGNvbXBhY3Rpb24gYW5kIGFsbG9jYXRpb24gbG9naWMsIHNwZWNpZmljYWxseSBob3cgZGlyZWN0IGNvbXBhY3Rpb24gYW5kIHJlY2xhaW0gaGFuZGxlIHBhZ2UgY2FwdHVyZSBhbmQgY29tcGFjdGlvbiBvcmRlcnMuIEl0IHByb21vdGVzIHRoZSBjb21wYWN0aW9uIG9yZGVyIHRvIGBwYWdlYmxvY2tfb3JkZXJgIGZvciBjZXJ0YWluIGFsbG9jYXRpb25zIHRvIHByZXZlbnQgZnJhZ21lbnRhdGlvbi4gVGhpcyBpcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljIHRoYXQgaXMgcmVhY2hhYmxlIGR1cmluZyBoaWdoLW9yZGVyIG1lbW9yeSBhbGxvY2F0aW9ucyBhbmQgbWVtb3J5IHByZXNzdXJlLiBJdCBpcyBmdW5jdGlvbmFsIGFuZCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkNPTVBBQ1RJT05cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJfX2FsbG9jX3BhZ2VzX2RpcmVjdF9jb21wYWN0XCIsXG4gICAgXCJ0cnlfdG9fY29tcGFjdF9wYWdlc1wiLFxuICAgIFwiY29tcGFjdF96b25lX29yZGVyXCIsXG4gICAgXCJzdWl0YWJsZV9taWdyYXRpb25fc291cmNlXCIsXG4gICAgXCJmYXN0X2ZpbmRfbWlncmF0ZWJsb2NrXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgbWVtb3J5IGNvbXBhY3Rpb24gYW5kIGFsbG9jYXRpb24gbG9naWMsIHNwZWNpZmljYWxseSBob3cgZGlyZWN0IGNvbXBhY3Rpb24gYW5kIHJlY2xhaW0gaGFuZGxlIHBhZ2UgY2FwdHVyZSBhbmQgY29tcGFjdGlvbiBvcmRlcnMuIEl0IHByb21vdGVzIHRoZSBjb21wYWN0aW9uIG9yZGVyIHRvIGBwYWdlYmxvY2tfb3JkZXJgIGZvciBjZXJ0YWluIGFsbG9jYXRpb25zIHRvIHByZXZlbnQgZnJhZ21lbnRhdGlvbi4gVGhpcyBpcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljIHRoYXQgaXMgcmVhY2hhYmxlIGR1cmluZyBoaWdoLW9yZGVyIG1lbW9yeSBhbGxvY2F0aW9ucyBhbmQgbWVtb3J5IHByZXNzdXJlLiBJdCBpcyBmdW5jdGlvbmFsIGFuZCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow4nr6j[1] Phase: Succeeded StartedAt: 2026-06-26 20:24:19 +0000 UTC FinishedAt: 2026-06-26 20:24:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4nr6j[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-06-26 20:24:19 +0000 UTC FinishedAt: 2026-06-26 20:24:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4nr6j[2] Phase: Succeeded StartedAt: 2026-06-26 20:24:19 +0000 UTC FinishedAt: 2026-06-26 22:46:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4nr6j[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__alloc_pages_direct_compact","try_to_compact_pages","compact_zone_order","suitable_migration_source","fast_find_migrateblock"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION"],"series_id":"216ebe58-31a8-43cd-82f6-6478e1894eff","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN) Phase: Failed StartedAt: 2026-06-26 20:24:19 +0000 UTC FinishedAt: 2026-06-26 22:46:16 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__alloc_pages_direct_compact","try_to_compact_pages","compact_zone_order","suitable_migration_source","fast_find_migrateblock"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION"],"series_id":"216ebe58-31a8-43cd-82f6-6478e1894eff","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflow4nr6j[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__alloc_pages_direct_compact","try_to_compact_pages","compact_zone_order","suitable_migration_source","fast_find_migrateblock"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION"],"series_id":"216ebe58-31a8-43cd-82f6-6478e1894eff","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-06-26 20:24:19 +0000 UTC FinishedAt: 2026-06-26 20:24:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4nr6j[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__alloc_pages_direct_compact","try_to_compact_pages","compact_zone_order","suitable_migration_source","fast_find_migrateblock"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION"],"series_id":"216ebe58-31a8-43cd-82f6-6478e1894eff","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-06-26 20:24:19 +0000 UTC FinishedAt: 2026-06-26 20:24:30 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow4nr6j/series-workflow4nr6j-convert-artifact-2606355957/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow4nr6j[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__alloc_pages_direct_compact","try_to_compact_pages","compact_zone_order","suitable_migration_source","fast_find_migrateblock"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION"],"series_id":"216ebe58-31a8-43cd-82f6-6478e1894eff","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-06-26 20:24:40 +0000 UTC FinishedAt: 2026-06-26 20:52:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4nr6j[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__alloc_pages_direct_compact","try_to_compact_pages","compact_zone_order","suitable_migration_source","fast_find_migrateblock"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION"],"series_id":"216ebe58-31a8-43cd-82f6-6478e1894eff","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-06-26 20:24:40 +0000 UTC FinishedAt: 2026-06-26 20:52:55 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*06b46a67-e6a6-47e6-8b4d-608b37871207,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:request,Path:/tmp/request.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow4nr6j/series-workflow4nr6j-convert-artifact-2606355957/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "7e03de74-3acc-4643-b788-8200dfd5c473", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow4nr6j/series-workflow4nr6j-build-action-3749523419/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow4nr6j[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__alloc_pages_direct_compact","try_to_compact_pages","compact_zone_order","suitable_migration_source","fast_find_migrateblock"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION"],"series_id":"216ebe58-31a8-43cd-82f6-6478e1894eff","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-06-26 20:24:40 +0000 UTC FinishedAt: 2026-06-26 20:52:45 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*06b46a67-e6a6-47e6-8b4d-608b37871207,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:request,Path:/tmp/request.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow4nr6j/series-workflow4nr6j-convert-artifact-2606355957/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "7e03de74-3acc-4643-b788-8200dfd5c473", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow4nr6j/series-workflow4nr6j-build-action-3749523419/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow4nr6j[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__alloc_pages_direct_compact","try_to_compact_pages","compact_zone_order","suitable_migration_source","fast_find_migrateblock"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION"],"series_id":"216ebe58-31a8-43cd-82f6-6478e1894eff","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-06-26 20:52:55 +0000 UTC FinishedAt: 2026-06-26 20:52:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4nr6j[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__alloc_pages_direct_compact","try_to_compact_pages","compact_zone_order","suitable_migration_source","fast_find_migrateblock"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION"],"series_id":"216ebe58-31a8-43cd-82f6-6478e1894eff","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-06-26 20:52:55 +0000 UTC FinishedAt: 2026-06-26 20:52:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4nr6j[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__alloc_pages_direct_compact","try_to_compact_pages","compact_zone_order","suitable_migration_source","fast_find_migrateblock"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION"],"series_id":"216ebe58-31a8-43cd-82f6-6478e1894eff","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-06-26 20:52:55 +0000 UTC FinishedAt: 2026-06-26 20:53:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4nr6j[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__alloc_pages_direct_compact","try_to_compact_pages","compact_zone_order","suitable_migration_source","fast_find_migrateblock"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION"],"series_id":"216ebe58-31a8-43cd-82f6-6478e1894eff","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-06-26 20:52:55 +0000 UTC FinishedAt: 2026-06-26 20:53:01 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION"],"series_id":"216ebe58-31a8-43cd-82f6-6478e1894eff","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow4nr6j/series-workflow4nr6j-convert-artifact-2447977296/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow4nr6j[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__alloc_pages_direct_compact","try_to_compact_pages","compact_zone_order","suitable_migration_source","fast_find_migrateblock"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION"],"series_id":"216ebe58-31a8-43cd-82f6-6478e1894eff","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-06-26 20:53:05 +0000 UTC FinishedAt: 2026-06-26 20:55:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4nr6j[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__alloc_pages_direct_compact","try_to_compact_pages","compact_zone_order","suitable_migration_source","fast_find_migrateblock"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION"],"series_id":"216ebe58-31a8-43cd-82f6-6478e1894eff","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-06-26 20:53:05 +0000 UTC FinishedAt: 2026-06-26 20:54:58 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*7e03de74-3acc-4643-b788-8200dfd5c473,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Boot test: Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:report-findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow4nr6j/series-workflow4nr6j-build-action-3749523419/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow4nr6j[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__alloc_pages_direct_compact","try_to_compact_pages","compact_zone_order","suitable_migration_source","fast_find_migrateblock"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION"],"series_id":"216ebe58-31a8-43cd-82f6-6478e1894eff","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-06-26 20:55:08 +0000 UTC FinishedAt: 2026-06-26 20:55:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4nr6j[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__alloc_pages_direct_compact","try_to_compact_pages","compact_zone_order","suitable_migration_source","fast_find_migrateblock"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION"],"series_id":"216ebe58-31a8-43cd-82f6-6478e1894eff","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-06-26 20:55:08 +0000 UTC FinishedAt: 2026-06-26 20:55:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4nr6j[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__alloc_pages_direct_compact","try_to_compact_pages","compact_zone_order","suitable_migration_source","fast_find_migrateblock"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION"],"series_id":"216ebe58-31a8-43cd-82f6-6478e1894eff","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-06-26 20:55:08 +0000 UTC FinishedAt: 2026-06-26 21:35:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4nr6j[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__alloc_pages_direct_compact","try_to_compact_pages","compact_zone_order","suitable_migration_source","fast_find_migrateblock"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION"],"series_id":"216ebe58-31a8-43cd-82f6-6478e1894eff","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-06-26 20:55:08 +0000 UTC FinishedAt: 2026-06-26 21:35:32 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*06b46a67-e6a6-47e6-8b4d-608b37871207,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:request,Path:/tmp/request.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow4nr6j/series-workflow4nr6j-convert-artifact-2447977296/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "a8c4d3af-3d8b-4910-b8f7-c94a9630e8e0", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow4nr6j/series-workflow4nr6j-build-action-3649956044/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow4nr6j[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__alloc_pages_direct_compact","try_to_compact_pages","compact_zone_order","suitable_migration_source","fast_find_migrateblock"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION"],"series_id":"216ebe58-31a8-43cd-82f6-6478e1894eff","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-06-26 20:55:08 +0000 UTC FinishedAt: 2026-06-26 21:35:10 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*06b46a67-e6a6-47e6-8b4d-608b37871207,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:request,Path:/tmp/request.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow4nr6j/series-workflow4nr6j-convert-artifact-2447977296/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "a8c4d3af-3d8b-4910-b8f7-c94a9630e8e0", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow4nr6j/series-workflow4nr6j-build-action-3649956044/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow4nr6j[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__alloc_pages_direct_compact","try_to_compact_pages","compact_zone_order","suitable_migration_source","fast_find_migrateblock"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION"],"series_id":"216ebe58-31a8-43cd-82f6-6478e1894eff","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-06-26 21:35:32 +0000 UTC FinishedAt: 2026-06-26 21:35:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4nr6j[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__alloc_pages_direct_compact","try_to_compact_pages","compact_zone_order","suitable_migration_source","fast_find_migrateblock"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION"],"series_id":"216ebe58-31a8-43cd-82f6-6478e1894eff","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-06-26 21:35:32 +0000 UTC FinishedAt: 2026-06-26 21:35:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4nr6j[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__alloc_pages_direct_compact","try_to_compact_pages","compact_zone_order","suitable_migration_source","fast_find_migrateblock"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION"],"series_id":"216ebe58-31a8-43cd-82f6-6478e1894eff","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-06-26 21:35:32 +0000 UTC FinishedAt: 2026-06-26 21:37:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4nr6j[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__alloc_pages_direct_compact","try_to_compact_pages","compact_zone_order","suitable_migration_source","fast_find_migrateblock"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION"],"series_id":"216ebe58-31a8-43cd-82f6-6478e1894eff","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-06-26 21:35:32 +0000 UTC FinishedAt: 2026-06-26 21:37:05 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*a8c4d3af-3d8b-4910-b8f7-c94a9630e8e0,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Boot test: Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:report-findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow4nr6j/series-workflow4nr6j-build-action-3649956044/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow4nr6j[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__alloc_pages_direct_compact","try_to_compact_pages","compact_zone_order","suitable_migration_source","fast_find_migrateblock"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION"],"series_id":"216ebe58-31a8-43cd-82f6-6478e1894eff","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10] Phase: Failed StartedAt: 2026-06-26 21:37:15 +0000 UTC FinishedAt: 2026-06-26 22:46:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4nr6j[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__alloc_pages_direct_compact","try_to_compact_pages","compact_zone_order","suitable_migration_source","fast_find_migrateblock"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION"],"series_id":"216ebe58-31a8-43cd-82f6-6478e1894eff","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Failed StartedAt: 2026-06-26 21:37:15 +0000 UTC FinishedAt: 2026-06-26 22:46:16 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__alloc_pages_direct_compact","try_to_compact_pages","compact_zone_order","suitable_migration_source","fast_find_migrateblock"],"skip_cover_check":true},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:track,Default:nil,Value:*KASAN,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:base-build-id,Default:nil,Value:*7e03de74-3acc-4643-b788-8200dfd5c473,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*a8c4d3af-3d8b-4910-b8f7-c94a9630e8e0,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:base-kernel,Path:,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow4nr6j/series-workflow4nr6j-build-action-3749523419/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:patched-kernel,Path:,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow4nr6j/series-workflow4nr6j-build-action-3649956044/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow4nr6j[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__alloc_pages_direct_compact","try_to_compact_pages","compact_zone_order","suitable_migration_source","fast_find_migrateblock"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION"],"series_id":"216ebe58-31a8-43cd-82f6-6478e1894eff","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-06-26 21:37:15 +0000 UTC FinishedAt: 2026-06-26 21:37:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4nr6j[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__alloc_pages_direct_compact","try_to_compact_pages","compact_zone_order","suitable_migration_source","fast_find_migrateblock"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION"],"series_id":"216ebe58-31a8-43cd-82f6-6478e1894eff","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-06-26 21:37:15 +0000 UTC FinishedAt: 2026-06-26 21:37:35 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__alloc_pages_direct_compact","try_to_compact_pages","compact_zone_order","suitable_migration_source","fast_find_migrateblock"],"skip_cover_check":true},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow4nr6j/series-workflow4nr6j-convert-artifact-946087241/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow4nr6j[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__alloc_pages_direct_compact","try_to_compact_pages","compact_zone_order","suitable_migration_source","fast_find_migrateblock"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION"],"series_id":"216ebe58-31a8-43cd-82f6-6478e1894eff","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-06-26 21:37:15 +0000 UTC FinishedAt: 2026-06-26 21:37:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4nr6j[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__alloc_pages_direct_compact","try_to_compact_pages","compact_zone_order","suitable_migration_source","fast_find_migrateblock"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION"],"series_id":"216ebe58-31a8-43cd-82f6-6478e1894eff","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-06-26 21:37:15 +0000 UTC FinishedAt: 2026-06-26 21:37:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4nr6j[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__alloc_pages_direct_compact","try_to_compact_pages","compact_zone_order","suitable_migration_source","fast_find_migrateblock"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION"],"series_id":"216ebe58-31a8-43cd-82f6-6478e1894eff","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-06-26 21:37:15 +0000 UTC FinishedAt: 2026-06-26 21:37:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4nr6j[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__alloc_pages_direct_compact","try_to_compact_pages","compact_zone_order","suitable_migration_source","fast_find_migrateblock"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION"],"series_id":"216ebe58-31a8-43cd-82f6-6478e1894eff","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Failed StartedAt: 2026-06-26 21:37:43 +0000 UTC FinishedAt: 2026-06-26 22:46:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4nr6j[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__alloc_pages_direct_compact","try_to_compact_pages","compact_zone_order","suitable_migration_source","fast_find_migrateblock"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION"],"series_id":"216ebe58-31a8-43cd-82f6-6478e1894eff","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Error StartedAt: 2026-06-26 21:37:43 +0000 UTC FinishedAt: 2026-06-26 22:46:16 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*7e03de74-3acc-4643-b788-8200dfd5c473,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*a8c4d3af-3d8b-4910-b8f7-c94a9630e8e0,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Fuzz,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:base-kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow4nr6j/series-workflow4nr6j-build-action-3749523419/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:patched-kernel,Path:/patched,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow4nr6j/series-workflow4nr6j-build-action-3649956044/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:config,Path:/tmp/config.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow4nr6j/series-workflow4nr6j-convert-artifact-946087241/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil