Name: series-workflowbks7d Phase: Succeeded StartedAt: 2026-06-24 19:24:11 +0000 UTC FinishedAt: 2026-06-24 23:42:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbks7d[0] Phase: Succeeded StartedAt: 2026-06-24 19:24:11 +0000 UTC FinishedAt: 2026-06-24 19:35:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbks7d[0].run-triage Phase: Succeeded StartedAt: 2026-06-24 19:24:11 +0000 UTC FinishedAt: 2026-06-24 19:35:54 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "840ef6c78e6a2f694b578ecb9063241c992aaa9e", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "840ef6c78e6a2f694b578ecb9063241c992aaa9e", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL" ], "series_id": "6198af4e-8e12-4c90-ae16-90c7cc5d5d4c" }, "track": "KASAN", "fuzz": { "focus": [ "bpf" ], "focus_symbols": [ "htab_elem_defer_free", "htab_elem_free_rcu_cb", "bpf_task_work_cancel_and_free", "htab_map_free", "free_htab_elem", "htab_elem_free", "htab_lru_push_free", "alloc_htab_elem", "prealloc_lru_pop" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI0IDE5OjM1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aHRhYl9lbGVtX2RlZmVyX2ZyZWUmIzM0OywKICAgICYjMzQ7aHRhYl9lbGVtX2ZyZWVfcmN1X2NiJiMzNDssCiAgICAmIzM0O2JwZl90YXNrX3dvcmtfY2FuY2VsX2FuZF9mcmVlJiMzNDssCiAgICAmIzM0O2h0YWJfbWFwX2ZyZWUmIzM0OywKICAgICYjMzQ7ZnJlZV9odGFiX2VsZW0mIzM0OywKICAgICYjMzQ7aHRhYl9lbGVtX2ZyZWUmIzM0OywKICAgICYjMzQ7aHRhYl9scnVfcHVzaF9mcmVlJiMzNDssCiAgICAmIzM0O2FsbG9jX2h0YWJfZWxlbSYjMzQ7LAogICAgJiMzNDtwcmVhbGxvY19scnVfcG9wJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBCUEYgc3Vic3lzdGVtIHRvIGRlZmVyIHRoZSBmcmVlaW5nIG9mIGhhc2ggdGFibGUgZWxlbWVudHMgY29udGFpbmluZyBCUEZfVEFTS19XT1JLIGZpZWxkcyB1c2luZyBjYWxsX3JjdV90YXNrc190cmFjZS4gVGhpcyBwcmV2ZW50cyBhIHVzZS1hZnRlci1mcmVlIHdoZW4gYSB0YXNrIHdvcmsgY2FsbGJhY2sgaXMgc3RpbGwgcnVubmluZy4gSXQgYWxzbyByZS1pbml0aWFsaXplcyBzcGVjaWFsIGZpZWxkcyBmb3IgcmVjeWNsZWQgZWxlbWVudHMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIEJQRiBtYXAgbG9naWMgYW5kIHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIGNvcnJlY3QgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIHNjaGVkdWxpbmcgYmVoYXZpb3IuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjQgMTk6MzU8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBkYTI2YmIzYmMxZDhlNzFmYjk3NDUwNjFlNzMyOTc1YzJjNWMxZDQzXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBKdW4gMjQgMTk6MzU6MDYgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9oYXNodGFiLmMgYi9rZXJuZWwvYnBmL2hhc2h0YWIuY1xuaW5kZXggOWYzOTRlMWFhMmU4NWIuLjE5ZmE2MTkwOWU0ZmVkIDEwMDY0NFxuLS0tIGEva2VybmVsL2JwZi9oYXNodGFiLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9icGYvaGFzaHRhYi5jXG5AQCAtMzEwLDYgJiM0MzszMTAsNyBAQCBzdGF0aWMgc3RydWN0IGh0YWJfZWxlbSAqcHJlYWxsb2NfbHJ1X3BvcChzdHJ1Y3QgYnBmX2h0YWIgKmh0YWIsIHZvaWQgKmtleSxcbiBcdFx0YnBmX21hcF9pbmNfZWxlbV9jb3VudChcdTAwMjZodGFiLVx1MDAzZW1hcCk7XG4gXHRcdGwgPSBjb250YWluZXJfb2Yobm9kZSwgc3RydWN0IGh0YWJfZWxlbSwgbHJ1X25vZGUpO1xuIFx0XHRtZW1jcHkobC1cdTAwM2VrZXksIGtleSwgaHRhYi1cdTAwM2VtYXAua2V5X3NpemUpO1xuJiM0MztcdFx0Y2hlY2tfYW5kX2luaXRfbWFwX3ZhbHVlKFx1MDAyNmh0YWItXHUwMDNlbWFwLCBodGFiX2VsZW1fdmFsdWUobCwgaHRhYi1cdTAwM2VtYXAua2V5X3NpemUpKTtcbiBcdFx0cmV0dXJuIGw7XG4gXHR9XG4gXG5AQCAtOTUwLDEyICYjNDM7OTUxLDY5IEBAIHN0YXRpYyBpbnQgaHRhYl9tYXBfZ2V0X25leHRfa2V5KHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSwgdm9pZCAqbmV4dF9rZXkpXG4gXHRyZXR1cm4gLUVOT0VOVDtcbiB9XG4gXG4mIzQzOy8qIERlZmVycmVkIGh0YWJfZWxlbSBmcmVlIGZvciBicGZfdGFza193b3JrIG1hcHMuICBjYW5jZWxfYW5kX2ZyZWUoKVxuJiM0MzsgKiByZXR1cm5zIHdoaWxlIHRoZSB0YXNrX3dvcmsgY2FsbGJhY2sgbWF5IHN0aWxsIGJlIGFjY2Vzc2luZyBtYXBfdmFsO1xuJiM0MzsgKiB0aGUgY2FsbGJhY2sgaG9sZHMgZ3VhcmQocmN1X3Rhc2tzX3RyYWNlKSwgc28gZGVmZXJyaW5nIHRoZSByZWN5Y2xlXG4mIzQzOyAqIHRocm91Z2ggY2FsbF9yY3VfdGFza3NfdHJhY2UoKSB3YWl0cyBmb3IgaXQgKGFuZCwgc2luY2UgYSB0YXNrcyB0cmFjZVxuJiM0MzsgKiBHUCBpbXBsaWVzIGEgcmVndWxhciBSQ1UgR1AsIGZvciBCUEYgdmFsdWUgcmVhZGVycyB0b28pIGJlZm9yZSB0aGVcbiYjNDM7ICogZWxlbWVudCBpcyByZXVzZWQuICBBIGNhbGxiYWNrIHRoYXQgZW50ZXJzIGFmdGVyIHRoZSBHUCBmaW5kcyB0aGUgY3R4XG4mIzQzOyAqIGFscmVhZHkgRlJFRUQgYW5kIGJhaWxzIG91dC5cbiYjNDM7ICovXG4mIzQzO3N0cnVjdCBodGFiX2VsZW1fZnJlZV9yY3Uge1xuJiM0MztcdHN0cnVjdCByY3VfaGVhZCByY3U7XG4mIzQzO1x0c3RydWN0IGJwZl9odGFiICpodGFiO1xuJiM0MztcdHN0cnVjdCBodGFiX2VsZW0gKmVsZW07XG4mIzQzO307XG4mIzQzO1xuJiM0MzsvKiBSZXR1cm4gYW4gaHRhYl9lbGVtIHRvIGl0cyBtYXAmIzM5O3MgZnJlZSBwb29sOiBicGZfbWVtX2NhY2hlX2ZyZWUgZm9yXG4mIzQzOyAqIG5vbi1wcmVhbGxvYywgcGNwdV9mcmVlbGlzdF9wdXNoIGZvciBwcmVhbGxvYywgYnBmX2xydV9wdXNoX2ZyZWUgZm9yXG4mIzQzOyAqIHByZWFsbG9jIExSVS5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyB2b2lkIGh0YWJfZWxlbV9yZWN5Y2xlKHN0cnVjdCBicGZfaHRhYiAqaHRhYiwgc3RydWN0IGh0YWJfZWxlbSAqbClcbiYjNDM7e1xuJiM0MztcdGlmIChodGFiX2lzX3ByZWFsbG9jKGh0YWIpKSB7XG4mIzQzO1x0XHRpZiAoaHRhYl9pc19scnUoaHRhYikpXG4mIzQzO1x0XHRcdGJwZl9scnVfcHVzaF9mcmVlKFx1MDAyNmh0YWItXHUwMDNlbHJ1LCBcdTAwMjZsLVx1MDAzZWxydV9ub2RlKTtcbiYjNDM7XHRcdGVsc2VcbiYjNDM7XHRcdFx0cGNwdV9mcmVlbGlzdF9wdXNoKFx1MDAyNmh0YWItXHUwMDNlZnJlZWxpc3QsIFx1MDAyNmwtXHUwMDNlZm5vZGUpO1xuJiM0MztcdH0gZWxzZSB7XG4mIzQzO1x0XHRicGZfbWVtX2NhY2hlX2ZyZWUoXHUwMDI2aHRhYi1cdTAwM2VtYSwgbCk7XG4mIzQzO1x0fVxuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBodGFiX2VsZW1fZnJlZV9yY3VfY2Ioc3RydWN0IHJjdV9oZWFkICpoZWFkKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGh0YWJfZWxlbV9mcmVlX3JjdSAqZnIgPSBjb250YWluZXJfb2YoaGVhZCwgc3RydWN0IGh0YWJfZWxlbV9mcmVlX3JjdSwgcmN1KTtcbiYjNDM7XG4mIzQzO1x0aHRhYl9lbGVtX3JlY3ljbGUoZnItXHUwMDNlaHRhYiwgZnItXHUwMDNlZWxlbSk7XG4mIzQzO1x0a2ZyZWUoZnIpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBodGFiX2VsZW1fZGVmZXJfZnJlZShzdHJ1Y3QgYnBmX2h0YWIgKmh0YWIsIHN0cnVjdCBodGFiX2VsZW0gKmwpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgaHRhYl9lbGVtX2ZyZWVfcmN1ICpmcjtcbiYjNDM7XG4mIzQzO1x0ZnIgPSBrbWFsbG9jX29iaigqZnIsIEdGUF9BVE9NSUMpO1xuJiM0MztcdGlmIChXQVJOX09OX09OQ0UoIWZyKSkge1xuJiM0MztcdFx0LyogRmFsbGJhY2s6IGltbWVkaWF0ZSByZWN5Y2xlLCBzbWFsbCBVQUYgcmlzayAqL1xuJiM0MztcdFx0aHRhYl9lbGVtX3JlY3ljbGUoaHRhYiwgbCk7XG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1x0fVxuJiM0MztcdGZyLVx1MDAzZWh0YWIgPSBodGFiO1xuJiM0MztcdGZyLVx1MDAzZWVsZW0gPSBsO1xuJiM0MztcdGNhbGxfcmN1X3Rhc2tzX3RyYWNlKFx1MDAyNmZyLVx1MDAzZXJjdSwgaHRhYl9lbGVtX2ZyZWVfcmN1X2NiKTtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgdm9pZCBodGFiX2VsZW1fZnJlZShzdHJ1Y3QgYnBmX2h0YWIgKmh0YWIsIHN0cnVjdCBodGFiX2VsZW0gKmwpXG4ge1xuIFx0Y2hlY2tfYW5kX2NhbmNlbF9maWVsZHMoaHRhYiwgbCk7XG4gXG4gXHRpZiAoaHRhYi1cdTAwM2VtYXAubWFwX3R5cGUgPT0gQlBGX01BUF9UWVBFX1BFUkNQVV9IQVNIKVxuIFx0XHRicGZfbWVtX2NhY2hlX2ZyZWUoXHUwMDI2aHRhYi1cdTAwM2VwY3B1X21hLCBsLVx1MDAzZXB0cl90b19wcHRyKTtcbiYjNDM7XHRpZiAoYnRmX3JlY29yZF9oYXNfZmllbGQoaHRhYi1cdTAwM2VtYXAucmVjb3JkLCBCUEZfVEFTS19XT1JLKSkge1xuJiM0MztcdFx0aHRhYl9lbGVtX2RlZmVyX2ZyZWUoaHRhYiwgbCk7XG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1x0fVxuIFx0YnBmX21lbV9jYWNoZV9mcmVlKFx1MDAyNmh0YWItXHUwMDNlbWEsIGwpO1xuIH1cbiBcbkBAIC0xMDA2LDYgJiM0MzsxMDY0LDEwIEBAIHN0YXRpYyB2b2lkIGZyZWVfaHRhYl9lbGVtKHN0cnVjdCBicGZfaHRhYiAqaHRhYiwgc3RydWN0IGh0YWJfZWxlbSAqbClcbiBcdGlmIChodGFiX2lzX3ByZWFsbG9jKGh0YWIpKSB7XG4gXHRcdGJwZl9tYXBfZGVjX2VsZW1fY291bnQoXHUwMDI2aHRhYi1cdTAwM2VtYXApO1xuIFx0XHRjaGVja19hbmRfY2FuY2VsX2ZpZWxkcyhodGFiLCBsKTtcbiYjNDM7XHRcdGlmIChidGZfcmVjb3JkX2hhc19maWVsZChodGFiLVx1MDAzZW1hcC5yZWNvcmQsIEJQRl9UQVNLX1dPUkspKSB7XG4mIzQzO1x0XHRcdGh0YWJfZWxlbV9kZWZlcl9mcmVlKGh0YWIsIGwpO1xuJiM0MztcdFx0XHRyZXR1cm47XG4mIzQzO1x0XHR9XG4gXHRcdHBjcHVfZnJlZWxpc3RfcHVzaChcdTAwMjZodGFiLVx1MDAzZWZyZWVsaXN0LCBcdTAwMjZsLVx1MDAzZWZub2RlKTtcbiBcdH0gZWxzZSB7XG4gXHRcdGRlY19lbGVtX2NvdW50KGh0YWIpO1xuQEAgLTExMTgsNiAmIzQzOzExODAsMTEgQEAgc3RhdGljIHN0cnVjdCBodGFiX2VsZW0gKmFsbG9jX2h0YWJfZWxlbShzdHJ1Y3QgYnBmX2h0YWIgKmh0YWIsIHZvaWQgKmtleSxcbiBcdH1cbiBcbiBcdG1lbWNweShsX25ldy1cdTAwM2VrZXksIGtleSwga2V5X3NpemUpO1xuJiM0MztcdC8qIFJlLWluaXRpYWxpemUgc3BlY2lhbCBmaWVsZHMgZm9yIHJlY3ljbGVkIGVsZW1lbnRzLiAgY29weV9tYXBfdmFsdWUoKVxuJiM0MztcdCAqIHNraXBzIGJ0Zl9yZWNvcmQgZmllbGRzLCBzbyBhIHN0YWxlIEVSUl9QVFIoLUVCVVNZKSBsZWZ0IGJ5XG4mIzQzO1x0ICogYnBmX3Rhc2tfd29ya19jYW5jZWxfYW5kX2ZyZWUgd291bGQgcGVyc2lzdCBhbmQgYmxvY2sgbmV3IHNjaGVkdWxpbmcuXG4mIzQzO1x0ICovXG4mIzQzO1x0Y2hlY2tfYW5kX2luaXRfbWFwX3ZhbHVlKFx1MDAyNmh0YWItXHUwMDNlbWFwLCBodGFiX2VsZW1fdmFsdWUobF9uZXcsIGtleV9zaXplKSk7XG4gXHRpZiAocGVyY3B1KSB7XG4gXHRcdGlmIChwcmVhbGxvYykge1xuIFx0XHRcdHBwdHIgPSBodGFiX2VsZW1fZ2V0X3B0cihsX25ldywga2V5X3NpemUpO1xuQEAgLTEyNzUsNiAmIzQzOzEzNDIsMTAgQEAgc3RhdGljIHZvaWQgaHRhYl9scnVfcHVzaF9mcmVlKHN0cnVjdCBicGZfaHRhYiAqaHRhYiwgc3RydWN0IGh0YWJfZWxlbSAqZWxlbSlcbiB7XG4gXHRjaGVja19hbmRfY2FuY2VsX2ZpZWxkcyhodGFiLCBlbGVtKTtcbiBcdGJwZl9tYXBfZGVjX2VsZW1fY291bnQoXHUwMDI2aHRhYi1cdTAwM2VtYXApO1xuJiM0MztcdGlmIChidGZfcmVjb3JkX2hhc19maWVsZChodGFiLVx1MDAzZW1hcC5yZWNvcmQsIEJQRl9UQVNLX1dPUkspKSB7XG4mIzQzO1x0XHRodGFiX2VsZW1fZGVmZXJfZnJlZShodGFiLCBlbGVtKTtcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XHR9XG4gXHRicGZfbHJ1X3B1c2hfZnJlZShcdTAwMjZodGFiLVx1MDAzZWxydSwgXHUwMDI2ZWxlbS1cdTAwM2VscnVfbm9kZSk7XG4gfVxuIFxuQEAgLTE2NDEsOSAmIzQzOzE3MTIsMTkgQEAgc3RhdGljIHZvaWQgaHRhYl9tYXBfZnJlZShzdHJ1Y3QgYnBmX21hcCAqbWFwKVxuIFx0XHRkZWxldGVfYWxsX2VsZW1lbnRzKGh0YWIpO1xuIFx0fSBlbHNlIHtcbiBcdFx0aHRhYl9mcmVlX3ByZWFsbG9jZWRfZmllbGRzKGh0YWIpO1xuLVx0XHRwcmVhbGxvY19kZXN0cm95KGh0YWIpO1xuIFx0fVxuIFxuJiM0MztcdC8qIEZvciBicGZfdGFza193b3JrIG1hcHMsIGVsZW1lbnQgZnJlZXMgZGVmZXIgcmVjeWNsaW5nIHRocm91Z2hcbiYjNDM7XHQgKiBjYWxsX3JjdV90YXNrc190cmFjZSgpIHNvIHJ1bm5pbmcgY2FsbGJhY2tzIGZpbmlzaCBiZWZvcmUgcmV1c2UuXG4mIzQzO1x0ICogV2FpdCBmb3IgYW55IGluLWZsaWdodCBkZWZlcnJlZCByZWN5Y2xlcyBoZXJlLCBiZWZvcmUgdGhlXG4mIzQzO1x0ICogZnJlZWxpc3QvTFJVIGFuZCBlbGVtZW50IG1lbW9yeSBhcmUgdG9ybiBkb3duLlxuJiM0MztcdCAqL1xuJiM0MztcdGlmIChidGZfcmVjb3JkX2hhc19maWVsZChodGFiLVx1MDAzZW1hcC5yZWNvcmQsIEJQRl9UQVNLX1dPUkspKVxuJiM0MztcdFx0cmN1X2JhcnJpZXJfdGFza3NfdHJhY2UoKTtcbiYjNDM7XG4mIzQzO1x0aWYgKGh0YWJfaXNfcHJlYWxsb2MoaHRhYikpXG4mIzQzO1x0XHRwcmVhbGxvY19kZXN0cm95KGh0YWIpO1xuJiM0MztcbiBcdGJwZl9tYXBfZnJlZV9lbGVtX2NvdW50KG1hcCk7XG4gXHRmcmVlX3BlcmNwdShodGFiLVx1MDAzZWV4dHJhX2VsZW1zKTtcbiBcdGJwZl9tYXBfYXJlYV9mcmVlKGh0YWItXHUwMDNlYnVja2V0cyk7XG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9oZWxwZXJzLmMgYi9rZXJuZWwvYnBmL2hlbHBlcnMuY1xuaW5kZXggYzE4ZjFlMTZlZGVlNGMuLjA3MDg4YWMxZjBiMmQ5IDEwMDY0NFxuLS0tIGEva2VybmVsL2JwZi9oZWxwZXJzLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9icGYvaGVscGVycy5jXG5AQCAtNDQ1NCw3ICYjNDM7NDQ1NCwxMCBAQCBzdGF0aWMgdm9pZCBicGZfdGFza193b3JrX2NhbGxiYWNrKHN0cnVjdCBjYWxsYmFja19oZWFkICpjYilcbiBcdHUzMiBpZHg7XG4gXHR2b2lkICprZXk7XG4gXG4tXHQvKiBSZWFkIGxvY2sgaXMgbmVlZGVkIHRvIHByb3RlY3QgY3R4IGFuZCBtYXAga2V5L3ZhbHVlIGFjY2VzcyAqL1xuJiM0MztcdC8qIEhvbGQgcmN1X3JlYWRfbG9ja190cmFjZSBzbyB0aGF0IGNhbGxfcmN1X3Rhc2tzX3RyYWNlKCkgaW5cbiYjNDM7XHQgKiBodGFiX2VsZW1fZGVmZXJfZnJlZSgpIHdhaXRzIGZvciB0aGlzIGNhbGxiYWNrIHRvIGZpbmlzaCBiZWZvcmVcbiYjNDM7XHQgKiByZWN5Y2xpbmcgdGhlIGh0YWJfZWxlbS5cbiYjNDM7XHQgKi9cbiBcdGd1YXJkKHJjdV90YXNrc190cmFjZSkoKTtcbiBcdC8qXG4gXHQgKiBUaGlzIGNhbGxiYWNrIG1heSBzdGFydCBydW5uaW5nIGJlZm9yZSBicGZfdGFza193b3JrX2lycSgpIHN3aXRjaGVkIHRvXG5AQCAtNDc4NCw4ICYjNDM7NDc4Nyw4IEBAIHZvaWQgYnBmX3Rhc2tfd29ya19jYW5jZWxfYW5kX2ZyZWUodm9pZCAqdmFsKVxuIFx0c3RydWN0IGJwZl90YXNrX3dvcmtfY3R4ICpjdHg7XG4gXHRlbnVtIGJwZl90YXNrX3dvcmtfc3RhdGUgc3RhdGU7XG4gXG4tXHRjdHggPSB4Y2hnKFx1MDAyNnR3ay1cdTAwM2VjdHgsIE5VTEwpO1xuLVx0aWYgKCFjdHgpXG4mIzQzO1x0Y3R4ID0geGNoZyhcdTAwMjZ0d2stXHUwMDNlY3R4LCBFUlJfUFRSKC1FQlVTWSkpO1xuJiM0MztcdGlmIChJU19FUlJfT1JfTlVMTChjdHgpKVxuIFx0XHRyZXR1cm47XG4gXG4gXHRzdGF0ZSA9IHhjaGcoXHUwMDI2Y3R4LVx1MDAzZXN0YXRlLCBCUEZfVFdfRlJFRUQpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI0IDE5OjM1PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aHRhYl9lbGVtX2RlZmVyX2ZyZWUmIzM0OywKICAgICYjMzQ7aHRhYl9lbGVtX2ZyZWVfcmN1X2NiJiMzNDssCiAgICAmIzM0O2JwZl90YXNrX3dvcmtfY2FuY2VsX2FuZF9mcmVlJiMzNDssCiAgICAmIzM0O2h0YWJfbWFwX2ZyZWUmIzM0OywKICAgICYjMzQ7ZnJlZV9odGFiX2VsZW0mIzM0OywKICAgICYjMzQ7aHRhYl9lbGVtX2ZyZWUmIzM0OywKICAgICYjMzQ7aHRhYl9scnVfcHVzaF9mcmVlJiMzNDssCiAgICAmIzM0O2FsbG9jX2h0YWJfZWxlbSYjMzQ7LAogICAgJiMzNDtwcmVhbGxvY19scnVfcG9wJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBCUEYgc3Vic3lzdGVtIHRvIGRlZmVyIHRoZSBmcmVlaW5nIG9mIGhhc2ggdGFibGUgZWxlbWVudHMgY29udGFpbmluZyBCUEZfVEFTS19XT1JLIGZpZWxkcyB1c2luZyBjYWxsX3JjdV90YXNrc190cmFjZS4gVGhpcyBwcmV2ZW50cyBhIHVzZS1hZnRlci1mcmVlIHdoZW4gYSB0YXNrIHdvcmsgY2FsbGJhY2sgaXMgc3RpbGwgcnVubmluZy4gSXQgYWxzbyByZS1pbml0aWFsaXplcyBzcGVjaWFsIGZpZWxkcyBmb3IgcmVjeWNsZWQgZWxlbWVudHMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIEJQRiBtYXAgbG9naWMgYW5kIHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIGNvcnJlY3QgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIHNjaGVkdWxpbmcgYmVoYXZpb3IuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0CiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSwKICAgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGRhMjZiYjNiYzFkOGU3MWZiOTc0NTA2MWU3MzI5NzVjMmM1YzFkNDMKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgV2VkIEp1biAyNCAxOTozNTowNiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvaGFzaHRhYi5jIGIva2VybmVsL2JwZi9oYXNodGFiLmMKaW5kZXggOWYzOTRlMWFhMmU4NWIuLjE5ZmE2MTkwOWU0ZmVkIDEwMDY0NAotLS0gYS9rZXJuZWwvYnBmL2hhc2h0YWIuYwomIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvYnBmL2hhc2h0YWIuYwpAQCAtMzEwLDYgJiM0MzszMTAsNyBAQCBzdGF0aWMgc3RydWN0IGh0YWJfZWxlbSAqcHJlYWxsb2NfbHJ1X3BvcChzdHJ1Y3QgYnBmX2h0YWIgKmh0YWIsIHZvaWQgKmtleSwKIAkJYnBmX21hcF9pbmNfZWxlbV9jb3VudCgmYW1wO2h0YWItJmd0O21hcCk7CiAJCWwgPSBjb250YWluZXJfb2Yobm9kZSwgc3RydWN0IGh0YWJfZWxlbSwgbHJ1X25vZGUpOwogCQltZW1jcHkobC0mZ3Q7a2V5LCBrZXksIGh0YWItJmd0O21hcC5rZXlfc2l6ZSk7CiYjNDM7CQljaGVja19hbmRfaW5pdF9tYXBfdmFsdWUoJmFtcDtodGFiLSZndDttYXAsIGh0YWJfZWxlbV92YWx1ZShsLCBodGFiLSZndDttYXAua2V5X3NpemUpKTsKIAkJcmV0dXJuIGw7CiAJfQogCkBAIC05NTAsMTIgJiM0Mzs5NTEsNjkgQEAgc3RhdGljIGludCBodGFiX21hcF9nZXRfbmV4dF9rZXkoc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5LCB2b2lkICpuZXh0X2tleSkKIAlyZXR1cm4gLUVOT0VOVDsKIH0KIAomIzQzOy8qIERlZmVycmVkIGh0YWJfZWxlbSBmcmVlIGZvciBicGZfdGFza193b3JrIG1hcHMuICBjYW5jZWxfYW5kX2ZyZWUoKQomIzQzOyAqIHJldHVybnMgd2hpbGUgdGhlIHRhc2tfd29yayBjYWxsYmFjayBtYXkgc3RpbGwgYmUgYWNjZXNzaW5nIG1hcF92YWw7CiYjNDM7ICogdGhlIGNhbGxiYWNrIGhvbGRzIGd1YXJkKHJjdV90YXNrc190cmFjZSksIHNvIGRlZmVycmluZyB0aGUgcmVjeWNsZQomIzQzOyAqIHRocm91Z2ggY2FsbF9yY3VfdGFza3NfdHJhY2UoKSB3YWl0cyBmb3IgaXQgKGFuZCwgc2luY2UgYSB0YXNrcyB0cmFjZQomIzQzOyAqIEdQIGltcGxpZXMgYSByZWd1bGFyIFJDVSBHUCwgZm9yIEJQRiB2YWx1ZSByZWFkZXJzIHRvbykgYmVmb3JlIHRoZQomIzQzOyAqIGVsZW1lbnQgaXMgcmV1c2VkLiAgQSBjYWxsYmFjayB0aGF0IGVudGVycyBhZnRlciB0aGUgR1AgZmluZHMgdGhlIGN0eAomIzQzOyAqIGFscmVhZHkgRlJFRUQgYW5kIGJhaWxzIG91dC4KJiM0MzsgKi8KJiM0MztzdHJ1Y3QgaHRhYl9lbGVtX2ZyZWVfcmN1IHsKJiM0MzsJc3RydWN0IHJjdV9oZWFkIHJjdTsKJiM0MzsJc3RydWN0IGJwZl9odGFiICpodGFiOwomIzQzOwlzdHJ1Y3QgaHRhYl9lbGVtICplbGVtOwomIzQzO307CiYjNDM7CiYjNDM7LyogUmV0dXJuIGFuIGh0YWJfZWxlbSB0byBpdHMgbWFwJiMzOTtzIGZyZWUgcG9vbDogYnBmX21lbV9jYWNoZV9mcmVlIGZvcgomIzQzOyAqIG5vbi1wcmVhbGxvYywgcGNwdV9mcmVlbGlzdF9wdXNoIGZvciBwcmVhbGxvYywgYnBmX2xydV9wdXNoX2ZyZWUgZm9yCiYjNDM7ICogcHJlYWxsb2MgTFJVLgomIzQzOyAqLwomIzQzO3N0YXRpYyB2b2lkIGh0YWJfZWxlbV9yZWN5Y2xlKHN0cnVjdCBicGZfaHRhYiAqaHRhYiwgc3RydWN0IGh0YWJfZWxlbSAqbCkKJiM0Mzt7CiYjNDM7CWlmIChodGFiX2lzX3ByZWFsbG9jKGh0YWIpKSB7CiYjNDM7CQlpZiAoaHRhYl9pc19scnUoaHRhYikpCiYjNDM7CQkJYnBmX2xydV9wdXNoX2ZyZWUoJmFtcDtodGFiLSZndDtscnUsICZhbXA7bC0mZ3Q7bHJ1X25vZGUpOwomIzQzOwkJZWxzZQomIzQzOwkJCXBjcHVfZnJlZWxpc3RfcHVzaCgmYW1wO2h0YWItJmd0O2ZyZWVsaXN0LCAmYW1wO2wtJmd0O2Zub2RlKTsKJiM0MzsJfSBlbHNlIHsKJiM0MzsJCWJwZl9tZW1fY2FjaGVfZnJlZSgmYW1wO2h0YWItJmd0O21hLCBsKTsKJiM0MzsJfQomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBodGFiX2VsZW1fZnJlZV9yY3VfY2Ioc3RydWN0IHJjdV9oZWFkICpoZWFkKQomIzQzO3sKJiM0MzsJc3RydWN0IGh0YWJfZWxlbV9mcmVlX3JjdSAqZnIgPSBjb250YWluZXJfb2YoaGVhZCwgc3RydWN0IGh0YWJfZWxlbV9mcmVlX3JjdSwgcmN1KTsKJiM0MzsKJiM0MzsJaHRhYl9lbGVtX3JlY3ljbGUoZnItJmd0O2h0YWIsIGZyLSZndDtlbGVtKTsKJiM0MzsJa2ZyZWUoZnIpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBodGFiX2VsZW1fZGVmZXJfZnJlZShzdHJ1Y3QgYnBmX2h0YWIgKmh0YWIsIHN0cnVjdCBodGFiX2VsZW0gKmwpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgaHRhYl9lbGVtX2ZyZWVfcmN1ICpmcjsKJiM0MzsKJiM0MzsJZnIgPSBrbWFsbG9jX29iaigqZnIsIEdGUF9BVE9NSUMpOwomIzQzOwlpZiAoV0FSTl9PTl9PTkNFKCFmcikpIHsKJiM0MzsJCS8qIEZhbGxiYWNrOiBpbW1lZGlhdGUgcmVjeWNsZSwgc21hbGwgVUFGIHJpc2sgKi8KJiM0MzsJCWh0YWJfZWxlbV9yZWN5Y2xlKGh0YWIsIGwpOwomIzQzOwkJcmV0dXJuOwomIzQzOwl9CiYjNDM7CWZyLSZndDtodGFiID0gaHRhYjsKJiM0MzsJZnItJmd0O2VsZW0gPSBsOwomIzQzOwljYWxsX3JjdV90YXNrc190cmFjZSgmYW1wO2ZyLSZndDtyY3UsIGh0YWJfZWxlbV9mcmVlX3JjdV9jYik7CiYjNDM7fQomIzQzOwogc3RhdGljIHZvaWQgaHRhYl9lbGVtX2ZyZWUoc3RydWN0IGJwZl9odGFiICpodGFiLCBzdHJ1Y3QgaHRhYl9lbGVtICpsKQogewogCWNoZWNrX2FuZF9jYW5jZWxfZmllbGRzKGh0YWIsIGwpOwogCiAJaWYgKGh0YWItJmd0O21hcC5tYXBfdHlwZSA9PSBCUEZfTUFQX1RZUEVfUEVSQ1BVX0hBU0gpCiAJCWJwZl9tZW1fY2FjaGVfZnJlZSgmYW1wO2h0YWItJmd0O3BjcHVfbWEsIGwtJmd0O3B0cl90b19wcHRyKTsKJiM0MzsJaWYgKGJ0Zl9yZWNvcmRfaGFzX2ZpZWxkKGh0YWItJmd0O21hcC5yZWNvcmQsIEJQRl9UQVNLX1dPUkspKSB7CiYjNDM7CQlodGFiX2VsZW1fZGVmZXJfZnJlZShodGFiLCBsKTsKJiM0MzsJCXJldHVybjsKJiM0MzsJfQogCWJwZl9tZW1fY2FjaGVfZnJlZSgmYW1wO2h0YWItJmd0O21hLCBsKTsKIH0KIApAQCAtMTAwNiw2ICYjNDM7MTA2NCwxMCBAQCBzdGF0aWMgdm9pZCBmcmVlX2h0YWJfZWxlbShzdHJ1Y3QgYnBmX2h0YWIgKmh0YWIsIHN0cnVjdCBodGFiX2VsZW0gKmwpCiAJaWYgKGh0YWJfaXNfcHJlYWxsb2MoaHRhYikpIHsKIAkJYnBmX21hcF9kZWNfZWxlbV9jb3VudCgmYW1wO2h0YWItJmd0O21hcCk7CiAJCWNoZWNrX2FuZF9jYW5jZWxfZmllbGRzKGh0YWIsIGwpOwomIzQzOwkJaWYgKGJ0Zl9yZWNvcmRfaGFzX2ZpZWxkKGh0YWItJmd0O21hcC5yZWNvcmQsIEJQRl9UQVNLX1dPUkspKSB7CiYjNDM7CQkJaHRhYl9lbGVtX2RlZmVyX2ZyZWUoaHRhYiwgbCk7CiYjNDM7CQkJcmV0dXJuOwomIzQzOwkJfQogCQlwY3B1X2ZyZWVsaXN0X3B1c2goJmFtcDtodGFiLSZndDtmcmVlbGlzdCwgJmFtcDtsLSZndDtmbm9kZSk7CiAJfSBlbHNlIHsKIAkJZGVjX2VsZW1fY291bnQoaHRhYik7CkBAIC0xMTE4LDYgJiM0MzsxMTgwLDExIEBAIHN0YXRpYyBzdHJ1Y3QgaHRhYl9lbGVtICphbGxvY19odGFiX2VsZW0oc3RydWN0IGJwZl9odGFiICpodGFiLCB2b2lkICprZXksCiAJfQogCiAJbWVtY3B5KGxfbmV3LSZndDtrZXksIGtleSwga2V5X3NpemUpOwomIzQzOwkvKiBSZS1pbml0aWFsaXplIHNwZWNpYWwgZmllbGRzIGZvciByZWN5Y2xlZCBlbGVtZW50cy4gIGNvcHlfbWFwX3ZhbHVlKCkKJiM0MzsJICogc2tpcHMgYnRmX3JlY29yZCBmaWVsZHMsIHNvIGEgc3RhbGUgRVJSX1BUUigtRUJVU1kpIGxlZnQgYnkKJiM0MzsJICogYnBmX3Rhc2tfd29ya19jYW5jZWxfYW5kX2ZyZWUgd291bGQgcGVyc2lzdCBhbmQgYmxvY2sgbmV3IHNjaGVkdWxpbmcuCiYjNDM7CSAqLwomIzQzOwljaGVja19hbmRfaW5pdF9tYXBfdmFsdWUoJmFtcDtodGFiLSZndDttYXAsIGh0YWJfZWxlbV92YWx1ZShsX25ldywga2V5X3NpemUpKTsKIAlpZiAocGVyY3B1KSB7CiAJCWlmIChwcmVhbGxvYykgewogCQkJcHB0ciA9IGh0YWJfZWxlbV9nZXRfcHRyKGxfbmV3LCBrZXlfc2l6ZSk7CkBAIC0xMjc1LDYgJiM0MzsxMzQyLDEwIEBAIHN0YXRpYyB2b2lkIGh0YWJfbHJ1X3B1c2hfZnJlZShzdHJ1Y3QgYnBmX2h0YWIgKmh0YWIsIHN0cnVjdCBodGFiX2VsZW0gKmVsZW0pCiB7CiAJY2hlY2tfYW5kX2NhbmNlbF9maWVsZHMoaHRhYiwgZWxlbSk7CiAJYnBmX21hcF9kZWNfZWxlbV9jb3VudCgmYW1wO2h0YWItJmd0O21hcCk7CiYjNDM7CWlmIChidGZfcmVjb3JkX2hhc19maWVsZChodGFiLSZndDttYXAucmVjb3JkLCBCUEZfVEFTS19XT1JLKSkgewomIzQzOwkJaHRhYl9lbGVtX2RlZmVyX2ZyZWUoaHRhYiwgZWxlbSk7CiYjNDM7CQlyZXR1cm47CiYjNDM7CX0KIAlicGZfbHJ1X3B1c2hfZnJlZSgmYW1wO2h0YWItJmd0O2xydSwgJmFtcDtlbGVtLSZndDtscnVfbm9kZSk7CiB9CiAKQEAgLTE2NDEsOSAmIzQzOzE3MTIsMTkgQEAgc3RhdGljIHZvaWQgaHRhYl9tYXBfZnJlZShzdHJ1Y3QgYnBmX21hcCAqbWFwKQogCQlkZWxldGVfYWxsX2VsZW1lbnRzKGh0YWIpOwogCX0gZWxzZSB7CiAJCWh0YWJfZnJlZV9wcmVhbGxvY2VkX2ZpZWxkcyhodGFiKTsKLQkJcHJlYWxsb2NfZGVzdHJveShodGFiKTsKIAl9CiAKJiM0MzsJLyogRm9yIGJwZl90YXNrX3dvcmsgbWFwcywgZWxlbWVudCBmcmVlcyBkZWZlciByZWN5Y2xpbmcgdGhyb3VnaAomIzQzOwkgKiBjYWxsX3JjdV90YXNrc190cmFjZSgpIHNvIHJ1bm5pbmcgY2FsbGJhY2tzIGZpbmlzaCBiZWZvcmUgcmV1c2UuCiYjNDM7CSAqIFdhaXQgZm9yIGFueSBpbi1mbGlnaHQgZGVmZXJyZWQgcmVjeWNsZXMgaGVyZSwgYmVmb3JlIHRoZQomIzQzOwkgKiBmcmVlbGlzdC9MUlUgYW5kIGVsZW1lbnQgbWVtb3J5IGFyZSB0b3JuIGRvd24uCiYjNDM7CSAqLwomIzQzOwlpZiAoYnRmX3JlY29yZF9oYXNfZmllbGQoaHRhYi0mZ3Q7bWFwLnJlY29yZCwgQlBGX1RBU0tfV09SSykpCiYjNDM7CQlyY3VfYmFycmllcl90YXNrc190cmFjZSgpOwomIzQzOwomIzQzOwlpZiAoaHRhYl9pc19wcmVhbGxvYyhodGFiKSkKJiM0MzsJCXByZWFsbG9jX2Rlc3Ryb3koaHRhYik7CiYjNDM7CiAJYnBmX21hcF9mcmVlX2VsZW1fY291bnQobWFwKTsKIAlmcmVlX3BlcmNwdShodGFiLSZndDtleHRyYV9lbGVtcyk7CiAJYnBmX21hcF9hcmVhX2ZyZWUoaHRhYi0mZ3Q7YnVja2V0cyk7CmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL2hlbHBlcnMuYyBiL2tlcm5lbC9icGYvaGVscGVycy5jCmluZGV4IGMxOGYxZTE2ZWRlZTRjLi4wNzA4OGFjMWYwYjJkOSAxMDA2NDQKLS0tIGEva2VybmVsL2JwZi9oZWxwZXJzLmMKJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2JwZi9oZWxwZXJzLmMKQEAgLTQ0NTQsNyAmIzQzOzQ0NTQsMTAgQEAgc3RhdGljIHZvaWQgYnBmX3Rhc2tfd29ya19jYWxsYmFjayhzdHJ1Y3QgY2FsbGJhY2tfaGVhZCAqY2IpCiAJdTMyIGlkeDsKIAl2b2lkICprZXk7CiAKLQkvKiBSZWFkIGxvY2sgaXMgbmVlZGVkIHRvIHByb3RlY3QgY3R4IGFuZCBtYXAga2V5L3ZhbHVlIGFjY2VzcyAqLwomIzQzOwkvKiBIb2xkIHJjdV9yZWFkX2xvY2tfdHJhY2Ugc28gdGhhdCBjYWxsX3JjdV90YXNrc190cmFjZSgpIGluCiYjNDM7CSAqIGh0YWJfZWxlbV9kZWZlcl9mcmVlKCkgd2FpdHMgZm9yIHRoaXMgY2FsbGJhY2sgdG8gZmluaXNoIGJlZm9yZQomIzQzOwkgKiByZWN5Y2xpbmcgdGhlIGh0YWJfZWxlbS4KJiM0MzsJICovCiAJZ3VhcmQocmN1X3Rhc2tzX3RyYWNlKSgpOwogCS8qCiAJICogVGhpcyBjYWxsYmFjayBtYXkgc3RhcnQgcnVubmluZyBiZWZvcmUgYnBmX3Rhc2tfd29ya19pcnEoKSBzd2l0Y2hlZCB0bwpAQCAtNDc4NCw4ICYjNDM7NDc4Nyw4IEBAIHZvaWQgYnBmX3Rhc2tfd29ya19jYW5jZWxfYW5kX2ZyZWUodm9pZCAqdmFsKQogCXN0cnVjdCBicGZfdGFza193b3JrX2N0eCAqY3R4OwogCWVudW0gYnBmX3Rhc2tfd29ya19zdGF0ZSBzdGF0ZTsKIAotCWN0eCA9IHhjaGcoJmFtcDt0d2stJmd0O2N0eCwgTlVMTCk7Ci0JaWYgKCFjdHgpCiYjNDM7CWN0eCA9IHhjaGcoJmFtcDt0d2stJmd0O2N0eCwgRVJSX1BUUigtRUJVU1kpKTsKJiM0MzsJaWYgKElTX0VSUl9PUl9OVUxMKGN0eCkpCiAJCXJldHVybjsKIAogCXN0YXRlID0geGNoZygmYW1wO2N0eC0mZ3Q7c3RhdGUsIEJQRl9UV19GUkVFRCk7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI0IDE5OjM1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQwNDgKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiAyOTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgQlBGIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBhIHBhdGNoIHRoYXQmIzM5O3MgbWFraW5nIGNoYW5nZXMgaW4gYGtlcm5lbC9icGYvaGFzaHRhYi5jYCBhbmQgYGtlcm5lbC9icGYvaGVscGVycy5jYC4gSXQmIzM5O3MgaW50cm9kdWNpbmcgYSBkZWZlcnJlZCBmcmVlIG1lY2hhbmlzbSBzcGVjaWZpY2FsbHkgZm9yIGBodGFiX2VsZW1gIHN0cnVjdHVyZXMgd2l0aGluIEJQRiBtYXBzIHRoYXQgdXRpbGl6ZSBgQlBGX1RBU0tfV09SS2AgZmllbGRzLiBUaGUgZ29hbCBoZXJlIGlzIHByZXR0eSBjbGVhcjogcHJldmVudCBhIFVzZS1BZnRlci1GcmVlIChVQUYpIHNpdHVhdGlvbi4gVGhlIGltcGxlbWVudGF0aW9uIHVzZXMgYGNhbGxfcmN1X3Rhc2tzX3RyYWNlYCB0byBwb3N0cG9uZSB0aGUgZWxlbWVudCByZWN5Y2xpbmcsIGVuc3VyaW5nIHRoYXQgYGJwZl90YXNrX3dvcmtfY2FuY2VsX2FuZF9mcmVlYCBkb2VzbiYjMzk7dCBnZXQgY2FsbGVkIHdoaWxlIHRoZSB0YXNrIHdvcmsgY2FsbGJhY2sgaXMgc3RpbGwgYWN0aXZlLgoKVGhleSYjMzk7dmUgYWxzbyBtb2RpZmllZCBgYnBmX3Rhc2tfd29ya19jYW5jZWxfYW5kX2ZyZWVgIHRvIHNldCBgdHdrLSZndDtjdHhgIHRvIGBFUlJfUFRSKC1FQlVTWSlgIGluc3RlYWQgb2YgYE5VTExgLiBTbWFydCwgdGhhdCYjMzk7cyBhIGdvb2Qgd2F5IHRvIHNpZ25hbCB0aGF0IHRoZSByZXNvdXJjZSBpcyB0ZW1wb3JhcmlseSB1bmF2YWlsYWJsZS4gQW5kIGluIGBhbGxvY19odGFiX2VsZW1gIGFuZCBgcHJlYWxsb2NfbHJ1X3BvcGAsIHRoZSBzcGVjaWFsIGZpZWxkcyBvZiByZWN5Y2xlZCBlbGVtZW50cyBhcmUgYmVpbmcgcmUtaW5pdGlhbGl6ZWQgdmlhIGBjaGVja19hbmRfaW5pdF9tYXBfdmFsdWVgLiBUaGlzIGlzIGFsbCBmYWlybHkgc3RhbmRhcmQgcHJhY3RpY2UgZm9yIG1hbmFnaW5nIHJlY3ljbGVkIG1lbW9yeSBhbmQgZW5zdXJpbmcgY29uc2lzdGVudCBzdGF0ZSBhZnRlciByZXVzZS4KClRoaXMgaXMgYSBwcmV0dHkgZnVuZGFtZW50YWwgbW9kaWZpY2F0aW9uIHdpdGhpbiB0aGUgY29yZSBCUEYgc3Vic3lzdGVtLCBpbXBhY3RpbmcgbWFwcyB0aGF0IHVzZSBgYnBmX3Rhc2tfd29ya2AuIEdpdmVuIHRoZSBwb3RlbnRpYWwgZm9yIGNvbmN1cnJlbmN5IGlzc3VlcyBhbmQgdGhlIGZvY3VzIG9uIHByZXZlbnRpbmcgVUFGLCB0aGlzICphYnNvbHV0ZWx5KiBuZWVkcyByaWdvcm91cyBmdXp6aW5nLiBJJiMzOTtsbCBuZWVkIHRvIGlkZW50aWZ5IHRoZSByZWxldmFudCBrZXJuZWwgY29uZmlndXJhdGlvbnMgdG8gZW5zdXJlIHByb3BlciB0ZXN0aW5nLgoKRmlyc3QsIGBCUEZfU1lTQ0FMTGAgaXMgdGhlIG9idmlvdXMgb25lLCB0aGUgY29yZSBCUEYgZnVuY3Rpb25hbGl0eS4gQnV0IEkgbmVlZCB0byBjaGVjayBmb3IgYW55IHNwZWNpZmljIGNvbmZpZ3VyYXRpb25zIHJlbGF0ZWQgdG8gYEJQRl9UQVNLX1dPUktgIG9yIHNvbWV0aGluZyBzaW1pbGFyLCBtYXliZSB0aGVyZSBhcmUgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gYXNwZWN0cyBhdCBwbGF5LiBJJiMzOTtsbCBwdWxsIG91dCBgZ3JlcHBlcmAgYW5kIHNlYXJjaCBmb3IgYEJQRl9UQVNLX1dPUktgIHdpdGhpbiB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24gZmlsZXMgdG8gcGlucG9pbnQgdGhvc2UgcmVsZXZhbnQgc3ltYm9scy4gVGhpcyBpcyB3aGVyZSBJJiMzOTtsbCByZWFsbHkgaG9uZSBpbiBvbiB0aGUgcGF0Y2gmIzM5O3MgaW1wYWN0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI0IDE5OjM1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0JQRl9UQVNLX1dPUksmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9icGYuaD0xOTg9ZW51bSBidGZfZmllbGRfdHlwZSB7XG4tLVxuaW5jbHVkZS9saW51eC9icGYuaC0yMTQtXHRCUEZfUkVTX1NQSU5fTE9DSyA9ICgxIFx1MDAzY1x1MDAzYyAxMiksXG5pbmNsdWRlL2xpbnV4L2JwZi5oOjIxNTpcdEJQRl9UQVNLX1dPUksgID0gKDEgXHUwMDNjXHUwMDNjIDEzKSxcbmluY2x1ZGUvbGludXgvYnBmLmgtMjE2LX07XG4tLVxuaW5jbHVkZS9saW51eC9icGYuaD0zNDY9c3RhdGljIGlubGluZSBjb25zdCBjaGFyICpidGZfZmllbGRfdHlwZV9uYW1lKGVudW0gYnRmX2ZpZWxkX3R5cGUgdHlwZSlcbi0tXG5pbmNsdWRlL2xpbnV4L2JwZi5oLTM3My1cdFx0cmV0dXJuIFwmIzM0O2JwZl9yZWZjb3VudFwmIzM0OztcbmluY2x1ZGUvbGludXgvYnBmLmg6Mzc0Olx0Y2FzZSBCUEZfVEFTS19XT1JLOlxuaW5jbHVkZS9saW51eC9icGYuaC0zNzUtXHRcdHJldHVybiBcJiMzNDticGZfdGFza193b3JrXCYjMzQ7O1xuLS1cbmluY2x1ZGUvbGludXgvYnBmLmg9Mzg4PXN0YXRpYyBpbmxpbmUgdTMyIGJ0Zl9maWVsZF90eXBlX3NpemUoZW51bSBidGZfZmllbGRfdHlwZSB0eXBlKVxuLS1cbmluY2x1ZGUvbGludXgvYnBmLmgtNDEzLVx0XHRyZXR1cm4gc2l6ZW9mKHN0cnVjdCBicGZfcmVmY291bnQpO1xuaW5jbHVkZS9saW51eC9icGYuaDo0MTQ6XHRjYXNlIEJQRl9UQVNLX1dPUks6XG5pbmNsdWRlL2xpbnV4L2JwZi5oLTQxNS1cdFx0cmV0dXJuIHNpemVvZihzdHJ1Y3QgYnBmX3Rhc2tfd29yayk7XG4tLVxuaW5jbHVkZS9saW51eC9icGYuaD00MjI9c3RhdGljIGlubGluZSB1MzIgYnRmX2ZpZWxkX3R5cGVfYWxpZ24oZW51bSBidGZfZmllbGRfdHlwZSB0eXBlKVxuLS1cbmluY2x1ZGUvbGludXgvYnBmLmgtNDQ3LVx0XHRyZXR1cm4gX19hbGlnbm9mX18oc3RydWN0IGJwZl9yZWZjb3VudCk7XG5pbmNsdWRlL2xpbnV4L2JwZi5oOjQ0ODpcdGNhc2UgQlBGX1RBU0tfV09SSzpcbmluY2x1ZGUvbGludXgvYnBmLmgtNDQ5LVx0XHRyZXR1cm4gX19hbGlnbm9mX18oc3RydWN0IGJwZl90YXNrX3dvcmspO1xuLS1cbmluY2x1ZGUvbGludXgvYnBmLmg9NDU2PXN0YXRpYyBpbmxpbmUgdm9pZCBicGZfb2JqX2luaXRfZmllbGQoY29uc3Qgc3RydWN0IGJ0Zl9maWVsZCAqZmllbGQsIHZvaWQgKmFkZHIpXG4tLVxuaW5jbHVkZS9saW51eC9icGYuaC00ODAtXHRjYXNlIEJQRl9VUFRSOlxuaW5jbHVkZS9saW51eC9icGYuaDo0ODE6XHRjYXNlIEJQRl9UQVNLX1dPUks6XG5pbmNsdWRlL2xpbnV4L2JwZi5oLTQ4Mi1cdFx0YnJlYWs7XG4tLVxuaW5jbHVkZS9saW51eC9icGYuaD00OTY9c3RhdGljIGlubGluZSBib29sIGJ0Zl9maWVsZF9pc19ubWlfc2FmZShlbnVtIGJ0Zl9maWVsZF90eXBlIHR5cGUpXG4tLVxuaW5jbHVkZS9saW51eC9icGYuaC01MDItXHRjYXNlIEJQRl9XT1JLUVVFVUU6XG5pbmNsdWRlL2xpbnV4L2JwZi5oOjUwMzpcdGNhc2UgQlBGX1RBU0tfV09SSzpcbmluY2x1ZGUvbGludXgvYnBmLmgtNTA0LVx0Y2FzZSBCUEZfS1BUUl9VTlJFRjpcbi0tXG5pbmNsdWRlL2xpbnV4L2JwZi5oPTcwMz1zdGF0aWMgaW5saW5lIGJvb2wgYnBmX21hcF9oYXNfaW50ZXJuYWxfc3RydWN0cyhzdHJ1Y3QgYnBmX21hcCAqbWFwKVxuaW5jbHVkZS9saW51eC9icGYuaC03MDQte1xuaW5jbHVkZS9saW51eC9icGYuaDo3MDU6XHRyZXR1cm4gYnRmX3JlY29yZF9oYXNfZmllbGQobWFwLVx1MDAzZXJlY29yZCwgQlBGX1RJTUVSIHwgQlBGX1dPUktRVUVVRSB8IEJQRl9UQVNLX1dPUkspO1xuaW5jbHVkZS9saW51eC9icGYuaC03MDYtfVxuLS1cbmtlcm5lbC9icGYvYnRmLmM9MzYwNz1zdGF0aWMgaW50IGJ0Zl9nZXRfZmllbGRfdHlwZShjb25zdCBzdHJ1Y3QgYnRmICpidGYsIGNvbnN0IHN0cnVjdCBidGZfdHlwZSAqdmFyX3R5cGUsXG4tLVxua2VybmVsL2JwZi9idGYuYy0zNjE4LVx0XHR7IEJQRl9XT1JLUVVFVUUsIFwmIzM0O2JwZl93cVwmIzM0OywgdHJ1ZSB9LFxua2VybmVsL2JwZi9idGYuYzozNjE5Olx0XHR7IEJQRl9UQVNLX1dPUkssIFwmIzM0O2JwZl90YXNrX3dvcmtcJiMzNDssIHRydWUgfSxcbmtlcm5lbC9icGYvYnRmLmMtMzYyMC1cdFx0eyBCUEZfTElTVF9IRUFELCBcJiMzNDticGZfbGlzdF9oZWFkXCYjMzQ7LCBmYWxzZSB9LFxuLS1cbmtlcm5lbC9icGYvYnRmLmM9Mzc0Nz1zdGF0aWMgaW50IGJ0Zl9maW5kX2ZpZWxkX29uZShjb25zdCBzdHJ1Y3QgYnRmICpidGYsXG4tLVxua2VybmVsL2JwZi9idGYuYy0zODAzLVx0Y2FzZSBCUEZfUkVGQ09VTlQ6XG5rZXJuZWwvYnBmL2J0Zi5jOjM4MDQ6XHRjYXNlIEJQRl9UQVNLX1dPUks6XG5rZXJuZWwvYnBmL2J0Zi5jLTM4MDUtXHRcdHJldCA9IGJ0Zl9maW5kX3N0cnVjdChidGYsIHZhcl90eXBlLCBvZmYsIHN6LCBmaWVsZF90eXBlLFxuLS1cbmtlcm5lbC9icGYvYnRmLmM9NDA3MD1zdHJ1Y3QgYnRmX3JlY29yZCAqYnRmX3BhcnNlX2ZpZWxkcyhjb25zdCBzdHJ1Y3QgYnRmICpidGYsIGNvbnN0IHN0cnVjdCBidGZfdHlwZSAqdCxcbi0tXG5rZXJuZWwvYnBmL2J0Zi5jLTQxMzYtXHRcdFx0YnJlYWs7XG5rZXJuZWwvYnBmL2J0Zi5jOjQxMzc6XHRcdGNhc2UgQlBGX1RBU0tfV09SSzpcbmtlcm5lbC9icGYvYnRmLmMtNDEzOC1cdFx0XHRXQVJOX09OX09OQ0UocmVjLVx1MDAzZXRhc2tfd29ya19vZmYgXHUwMDNlPSAwKTtcbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYz0xMDA3PXN0YXRpYyB2b2lkIGh0YWJfZWxlbV9mcmVlKHN0cnVjdCBicGZfaHRhYiAqaHRhYiwgc3RydWN0IGh0YWJfZWxlbSAqbClcbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0xMDEyLVx0XHRicGZfbWVtX2NhY2hlX2ZyZWUoXHUwMDI2aHRhYi1cdTAwM2VwY3B1X21hLCBsLVx1MDAzZXB0cl90b19wcHRyKTtcbmtlcm5lbC9icGYvaGFzaHRhYi5jOjEwMTM6XHRpZiAoYnRmX3JlY29yZF9oYXNfZmllbGQoaHRhYi1cdTAwM2VtYXAucmVjb3JkLCBCUEZfVEFTS19XT1JLKSkge1xua2VybmVsL2JwZi9oYXNodGFiLmMtMTAxNC1cdFx0aHRhYl9lbGVtX2RlZmVyX2ZyZWUoaHRhYiwgbCk7XG4tLVxua2VybmVsL2JwZi9oYXNodGFiLmM9MTA2MD1zdGF0aWMgdm9pZCBmcmVlX2h0YWJfZWxlbShzdHJ1Y3QgYnBmX2h0YWIgKmh0YWIsIHN0cnVjdCBodGFiX2VsZW0gKmwpXG4tLVxua2VybmVsL2JwZi9oYXNodGFiLmMtMTA2Ni1cdFx0Y2hlY2tfYW5kX2NhbmNlbF9maWVsZHMoaHRhYiwgbCk7XG5rZXJuZWwvYnBmL2hhc2h0YWIuYzoxMDY3Olx0XHRpZiAoYnRmX3JlY29yZF9oYXNfZmllbGQoaHRhYi1cdTAwM2VtYXAucmVjb3JkLCBCUEZfVEFTS19XT1JLKSkge1xua2VybmVsL2JwZi9oYXNodGFiLmMtMTA2OC1cdFx0XHRodGFiX2VsZW1fZGVmZXJfZnJlZShodGFiLCBsKTtcbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYz0xMzQxPXN0YXRpYyB2b2lkIGh0YWJfbHJ1X3B1c2hfZnJlZShzdHJ1Y3QgYnBmX2h0YWIgKmh0YWIsIHN0cnVjdCBodGFiX2VsZW0gKmVsZW0pXG4tLVxua2VybmVsL2JwZi9oYXNodGFiLmMtMTM0NC1cdGJwZl9tYXBfZGVjX2VsZW1fY291bnQoXHUwMDI2aHRhYi1cdTAwM2VtYXApO1xua2VybmVsL2JwZi9oYXNodGFiLmM6MTM0NTpcdGlmIChidGZfcmVjb3JkX2hhc19maWVsZChodGFiLVx1MDAzZW1hcC5yZWNvcmQsIEJQRl9UQVNLX1dPUkspKSB7XG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0xMzQ2LVx0XHRodGFiX2VsZW1fZGVmZXJfZnJlZShodGFiLCBlbGVtKTtcbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYz0xNjk4PXN0YXRpYyB2b2lkIGh0YWJfbWFwX2ZyZWUoc3RydWN0IGJwZl9tYXAgKm1hcClcbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0xNzIxLVx0ICovXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzoxNzIyOlx0aWYgKGJ0Zl9yZWNvcmRfaGFzX2ZpZWxkKGh0YWItXHUwMDNlbWFwLnJlY29yZCwgQlBGX1RBU0tfV09SSykpXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0xNzIzLVx0XHRyY3VfYmFycmllcl90YXNrc190cmFjZSgpO1xuLS1cbmtlcm5lbC9icGYvaGVscGVycy5jPTUwMzI9dm9pZCBicGZfbWFwX2ZyZWVfaW50ZXJuYWxfc3RydWN0cyhzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICp2YWwpXG4tLVxua2VybmVsL2JwZi9oZWxwZXJzLmMtNTAzNy1cdFx0YnBmX29ial9mcmVlX3dvcmtxdWV1ZShtYXAtXHUwMDNlcmVjb3JkLCB2YWwpO1xua2VybmVsL2JwZi9oZWxwZXJzLmM6NTAzODpcdGlmIChidGZfcmVjb3JkX2hhc19maWVsZChtYXAtXHUwMDNlcmVjb3JkLCBCUEZfVEFTS19XT1JLKSlcbmtlcm5lbC9icGYvaGVscGVycy5jLTUwMzktXHRcdGJwZl9vYmpfZnJlZV90YXNrX3dvcmsobWFwLVx1MDAzZXJlY29yZCwgdmFsKTtcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYz02NjU9dm9pZCBidGZfcmVjb3JkX2ZyZWUoc3RydWN0IGJ0Zl9yZWNvcmQgKnJlYylcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy02OTAtXHRcdGNhc2UgQlBGX1dPUktRVUVVRTpcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjY5MTpcdFx0Y2FzZSBCUEZfVEFTS19XT1JLOlxua2VybmVsL2JwZi9zeXNjYWxsLmMtNjkyLVx0XHRcdC8qIE5vdGhpbmcgdG8gcmVsZWFzZSAqL1xuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jPTcwOD1zdHJ1Y3QgYnRmX3JlY29yZCAqYnRmX3JlY29yZF9kdXAoY29uc3Qgc3RydWN0IGJ0Zl9yZWNvcmQgKnJlYylcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy03NDQtXHRcdGNhc2UgQlBGX1dPUktRVUVVRTpcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjc0NTpcdFx0Y2FzZSBCUEZfVEFTS19XT1JLOlxua2VybmVsL2JwZi9zeXNjYWxsLmMtNzQ2LVx0XHRcdC8qIE5vdGhpbmcgdG8gYWNxdWlyZSAqL1xuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jPTgwND12b2lkIGJwZl9vYmpfZnJlZV90YXNrX3dvcmsoY29uc3Qgc3RydWN0IGJ0Zl9yZWNvcmQgKnJlYywgdm9pZCAqb2JqKVxua2VybmVsL2JwZi9zeXNjYWxsLmMtODA1LXtcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjgwNjpcdGlmIChXQVJOX09OX09OQ0UoIWJ0Zl9yZWNvcmRfaGFzX2ZpZWxkKHJlYywgQlBGX1RBU0tfV09SSykpKVxua2VybmVsL2JwZi9zeXNjYWxsLmMtODA3LVx0XHRyZXR1cm47XG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmM9ODE2PXZvaWQgYnBmX29ial9mcmVlX2ZpZWxkcyhjb25zdCBzdHJ1Y3QgYnRmX3JlY29yZCAqcmVjLCB2b2lkICpvYmopXG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmMtODM5LVx0XHRcdGJyZWFrO1xua2VybmVsL2JwZi9zeXNjYWxsLmM6ODQwOlx0XHRjYXNlIEJQRl9UQVNLX1dPUks6XG5rZXJuZWwvYnBmL3N5c2NhbGwuYy04NDEtXHRcdFx0YnBmX3Rhc2tfd29ya19jYW5jZWxfYW5kX2ZyZWUoZmllbGRfcHRyKTtcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYz0xMjQ0PXN0YXRpYyBpbnQgbWFwX2NoZWNrX2J0ZihzdHJ1Y3QgYnBmX21hcCAqbWFwLCBzdHJ1Y3QgYnBmX3Rva2VuICp0b2tlbixcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0xMjY4LVx0XHRcdFx0ICAgICAgIEJQRl9SQl9ST09UIHwgQlBGX1JFRkNPVU5UIHwgQlBGX1dPUktRVUVVRSB8IEJQRl9VUFRSIHxcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjEyNjk6XHRcdFx0XHQgICAgICAgQlBGX1RBU0tfV09SSyxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTEyNzAtXHRcdFx0XHQgICAgICAgbWFwLVx1MDAzZXZhbHVlX3NpemUpO1xuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jLTEzMDEtXHRcdFx0Y2FzZSBCUEZfV09SS1FVRVVFOlxua2VybmVsL2JwZi9zeXNjYWxsLmM6MTMwMjpcdFx0XHRjYXNlIEJQRl9UQVNLX1dPUks6XG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0xMzAzLVx0XHRcdFx0aWYgKG1hcC1cdTAwM2VtYXBfdHlwZSAhPSBCUEZfTUFQX1RZUEVfSEFTSCBcdTAwMjZcdTAwMjZcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTg3NT1zdGF0aWMgdm9pZCBtYXJrX3B0cl9ub3RfbnVsbF9yZWcoc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZylcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTg4Ni1cdFx0XHRpZiAoYnRmX3JlY29yZF9oYXNfZmllbGQobWFwLVx1MDAzZWlubmVyX21hcF9tZXRhLVx1MDAzZXJlY29yZCxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxODg3Olx0XHRcdFx0XHRcdCBCUEZfVElNRVIgfCBCUEZfV09SS1FVRVVFIHwgQlBGX1RBU0tfV09SSykpIHtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xODg4LVx0XHRcdFx0cmVnLVx1MDAzZW1hcF91aWQgPSByZWctXHUwMDNlaWQ7XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTcwNzg9c3RhdGljIGludCBjaGVja19tYXBfZmllbGRfcG9pbnRlcihzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnLCBhcmdub190IGFyZ25vLFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy03MTA2LVx0XHRicmVhaztcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo3MTA3Olx0Y2FzZSBCUEZfVEFTS19XT1JLOlxua2VybmVsL2JwZi92ZXJpZmllci5jLTcxMDgtXHRcdGZpZWxkX29mZiA9IG1hcC1cdTAwM2VyZWNvcmQtXHUwMDNldGFza193b3JrX29mZjtcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTE5MDY9c3RhdGljIGludCBjaGVja19rZnVuY19hcmdzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfa2Z1bmNfY2FsbF9hcmdfbWV0YSAqbWV0YSxcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTI0NDgtXHRcdFx0fVxua2VybmVsL2JwZi92ZXJpZmllci5jOjEyNDQ5Olx0XHRcdHJldCA9IGNoZWNrX21hcF9maWVsZF9wb2ludGVyKGVudiwgcmVnLCBhcmdubywgQlBGX1RBU0tfV09SSywgXHUwMDI2bWV0YS1cdTAwM2VtYXApO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTEyNDUwLVx0XHRcdGlmIChyZXQgXHUwMDNjIDApXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdGFza193b3JrX3N0cmVzcy5jPTQ2PXN0YXRpYyB2b2lkIHRhc2tfd29ya19ydW4oYm9vbCBlbmFibGVfZGVsZXRlKVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3Rhc2tfd29ya19zdHJlc3MuYy01MC1cdGludCBudGhyZWFkcyA9IDE2O1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdGFza193b3JrX3N0cmVzcy5jOjUxOlx0aW50IHRlc3RfdGltZV9zID0gZ2V0X2Vudl9pbnQoXCYjMzQ7QlBGX1RBU0tfV09SS19URVNUX1RJTUVcJiMzNDssIDEpO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdGFza193b3JrX3N0cmVzcy5jLTUyLVx0cHRocmVhZF90IHRpZFtudGhyZWFkc10sIHRpZF9kZWw7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjQgMTk6MzU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzk3MgoJCQkJCQkJb3V0cHV0OiAyNgoJCQkJCQkJdGhvdWdodHM6IDIzMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEJQRiBIYXNodGFibGUgUGF0Y2gqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyB0b3VjaGluZyBga2VybmVsL2JwZi9oYXNodGFiLmNgIGFuZCBga2VybmVsL2JwZi9oZWxwZXJzLmNgLiBJIG5lZWQgdG8gZm9jdXMgb24gdGhlIGtleSBjaGFuZ2VzLCB3aGljaCBzZWVtIHRvIHJldm9sdmUgYXJvdW5kIGRlZmVycmVkIGZyZWVpbmcgb2YgaGFzaHRhYmxlIGVsZW1lbnRzLiBUaGUgbWFpbiBwbGF5ZXJzIGhlcmUgYXJlIGBodGFiX2VsZW1fZGVmZXJfZnJlZWAsIGBodGFiX2VsZW1fZnJlZV9yY3VfY2JgLCBhbmQgdGhlIGZ1bmN0aW9uIGBicGZfdGFza193b3JrX2NhbmNlbF9hbmRfZnJlZWAuIEkgc2hvdWxkIGFsc28ga2VlcCBhbiBleWUgb24gaG93IHRoZSBwYXRjaCBpbnRlcmFjdHMgd2l0aCBleGlzdGluZyBmdW5jdGlvbnMgbGlrZSBgaHRhYl9lbGVtX2ZyZWVgLCBgZnJlZV9odGFiX2VsZW1gLCBgaHRhYl9scnVfcHVzaF9mcmVlYCwgYW5kIGBodGFiX21hcF9mcmVlYCB0byBnZXQgdGhlIGZ1bGwgcGljdHVyZS4KCldhaXQgYSBzZWNvbmTigKYgYGh0YWJfZWxlbV9kZWZlcl9mcmVlYCBhbmQgYGh0YWJfZWxlbV9mcmVlX3JjdV9jYmAgYXJlIGJvdGggZGVjbGFyZWQgYXMgYHN0YXRpY2AuIFRoYXQgbGltaXRzIHRoZWlyIHNjb3BlIHRvIHRoaXMgZmlsZSwgd2hpY2ggbWVhbnMgdGhlIG1haW4gKmV4cG9zZWQqIGZ1bmN0aW9uIGhlcmUgaXMgYGJwZl90YXNrX3dvcmtfY2FuY2VsX2FuZF9mcmVlYC4gSSYjMzk7bGwgbmVlZCB0byBjb25maXJtIGlmIGl0JiMzOTtzIGV4cG9ydGVkIG9yIGdsb2JhbCB0byBmdWxseSB1bmRlcnN0YW5kIHRoZSBpbXBhY3QuIExldCYjMzk7cyBkaWcgaW50byBgYnBmX3Rhc2tfd29ya19jYW5jZWxfYW5kX2ZyZWVgIGRpcmVjdGx5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI0IDE5OjM1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JwZl90YXNrX3dvcmtfY2FuY2VsX2FuZF9mcmVlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvYnBmLmg9NjQ2PXZvaWQgYnBmX3dxX2NhbmNlbF9hbmRfZnJlZSh2b2lkICp0aW1lcik7XG5pbmNsdWRlL2xpbnV4L2JwZi5oOjY0Nzp2b2lkIGJwZl90YXNrX3dvcmtfY2FuY2VsX2FuZF9mcmVlKHZvaWQgKnRpbWVyKTtcbmluY2x1ZGUvbGludXgvYnBmLmgtNjQ4LXZvaWQgYnBmX2xpc3RfaGVhZF9mcmVlKGNvbnN0IHN0cnVjdCBidGZfZmllbGQgKmZpZWxkLCB2b2lkICpsaXN0X2hlYWQsXG4tLVxua2VybmVsL2JwZi9oYXNodGFiLmM9MTEzOD1zdGF0aWMgc3RydWN0IGh0YWJfZWxlbSAqYWxsb2NfaHRhYl9lbGVtKHN0cnVjdCBicGZfaHRhYiAqaHRhYiwgdm9pZCAqa2V5LFxuLS1cbmtlcm5lbC9icGYvaGFzaHRhYi5jLTExODQtXHQgKiBza2lwcyBidGZfcmVjb3JkIGZpZWxkcywgc28gYSBzdGFsZSBFUlJfUFRSKC1FQlVTWSkgbGVmdCBieVxua2VybmVsL2JwZi9oYXNodGFiLmM6MTE4NTpcdCAqIGJwZl90YXNrX3dvcmtfY2FuY2VsX2FuZF9mcmVlIHdvdWxkIHBlcnNpc3QgYW5kIGJsb2NrIG5ldyBzY2hlZHVsaW5nLlxua2VybmVsL2JwZi9oYXNodGFiLmMtMTE4Ni1cdCAqL1xuLS1cbmtlcm5lbC9icGYvaGVscGVycy5jPTQ1NTQ9c3RhdGljIHN0cnVjdCBicGZfdGFza193b3JrX2N0eCAqYnBmX3Rhc2tfd29ya19hY3F1aXJlX2N0eChzdHJ1Y3QgYnBmX3Rhc2tfd29yayAqdHcsXG4tLVxua2VybmVsL2JwZi9oZWxwZXJzLmMtNDU5MS1cdFx0LyogdHJhbnNmZXIgbWFwJiMzOTtzIHJlZiBpbnRvIGNhbmNlbF9hbmRfZnJlZSgpICovXG5rZXJuZWwvYnBmL2hlbHBlcnMuYzo0NTkyOlx0XHRicGZfdGFza193b3JrX2NhbmNlbF9hbmRfZnJlZSh0dyk7XG5rZXJuZWwvYnBmL2hlbHBlcnMuYy00NTkzLVx0XHRyZXR1cm4gRVJSX1BUUigtRUJVU1kpO1xuLS1cbmtlcm5lbC9icGYvaGVscGVycy5jPTQ3NzY9c3RhdGljIHZvaWQgYnBmX3Rhc2tfd29ya19jYW5jZWxfc2NoZWR1bGVkKHN0cnVjdCBpcnFfd29yayAqaXJxX3dvcmspXG4tLVxua2VybmVsL2JwZi9oZWxwZXJzLmMtNDc4My1cbmtlcm5lbC9icGYvaGVscGVycy5jOjQ3ODQ6dm9pZCBicGZfdGFza193b3JrX2NhbmNlbF9hbmRfZnJlZSh2b2lkICp2YWwpXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy00Nzg1LXtcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYz04MDQ9dm9pZCBicGZfb2JqX2ZyZWVfdGFza193b3JrKGNvbnN0IHN0cnVjdCBidGZfcmVjb3JkICpyZWMsIHZvaWQgKm9iailcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy04MDctXHRcdHJldHVybjtcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjgwODpcdGJwZl90YXNrX3dvcmtfY2FuY2VsX2FuZF9mcmVlKG9iaiAmIzQzOyByZWMtXHUwMDNldGFza193b3JrX29mZik7XG5rZXJuZWwvYnBmL3N5c2NhbGwuYy04MDktfVxuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jPTgxNj12b2lkIGJwZl9vYmpfZnJlZV9maWVsZHMoY29uc3Qgc3RydWN0IGJ0Zl9yZWNvcmQgKnJlYywgdm9pZCAqb2JqKVxuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jLTg0MC1cdFx0Y2FzZSBCUEZfVEFTS19XT1JLOlxua2VybmVsL2JwZi9zeXNjYWxsLmM6ODQxOlx0XHRcdGJwZl90YXNrX3dvcmtfY2FuY2VsX2FuZF9mcmVlKGZpZWxkX3B0cik7XG5rZXJuZWwvYnBmL3N5c2NhbGwuYy04NDItXHRcdFx0YnJlYWs7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjQgMTk6MzU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTIyNAoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDIwNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipCUEYgQ29uZmlndXJhdGlvbiBEZWVwIERpdmUqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGludG8gdGhlIEJQRiBjb25maWd1cmF0aW9uLCBzcGVjaWZpY2FsbHkgYXJvdW5kIHNvbWUgbWVtb3J5IG1hbmFnZW1lbnQgY29uY2VybnMuIE15IHN0YXJ0aW5nIHBvaW50IGlzIGBCUEZfU1lTQ0FMTGAsIHRoYXQgc2VlbXMgdG8gYmUgdGhlIGtleSBjb25maWd1cmF0aW9uIG9wdGlvbi4gQnV0LCBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQgdGhpcyBpcyB0aGUgb25seSBvbmUgbmVlZGVkIHRvIGVuYWJsZSBhbGwgdGhlIHJlbGV2YW50IGZlYXR1cmVzLiBJIHN1c3BlY3QgaXQgaXMsIGJ1dCBpdCYjMzk7cyBhbHdheXMgYmVzdCB0byBiZSB0aG9yb3VnaC4KCk15IGZvY3VzIHJpZ2h0IG5vdyBpcyBvbiBzeW1ib2xzIHRoYXQgc2VlbSB0byBiZSByZWxhdGVkIHRvIGhhc2h0YWJsZSBlbGVtZW50IGZyZWVpbmcgYW5kIGNsZWFudXAuIFRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zIGxvb2sgaW1wb3J0YW50OiBgaHRhYl9lbGVtX2RlZmVyX2ZyZWVgLCBgaHRhYl9lbGVtX2ZyZWVfcmN1X2NiYCwgYGJwZl90YXNrX3dvcmtfY2FuY2VsX2FuZF9mcmVlYCwgYGh0YWJfbWFwX2ZyZWVgLCBgZnJlZV9odGFiX2VsZW1gLCBgaHRhYl9lbGVtX2ZyZWVgLCBhbmQgYGh0YWJfbHJ1X3B1c2hfZnJlZWAuIFRoZXNlIGxpa2VseSBob2xkIHRoZSBrZXkgdG8gdW5kZXJzdGFuZGluZyB0aGUgZnVsbCBsaWZlY3ljbGUuCgpBIHF1aWNrIGNyb3NzLXJlZmVyZW5jZSBzaG93cyB0aGF0IGBodGFiX2VsZW1fZGVmZXJfZnJlZWAgaXMgYSBzdGF0aWMgZnVuY3Rpb24sIHJlc2lkaW5nIHdpdGhpbiBga2VybmVsL2JwZi9oYXNodGFiLmNgLCBhbmQgYGJwZl90YXNrX3dvcmtfY2FuY2VsX2FuZF9mcmVlYCBpcyBsb2NhdGVkIGluIGBrZXJuZWwvYnBmL2hlbHBlcnMuY2AuIFRoaXMgaXMgdXNlZnVsLCB0aGlzIGNvbmZpcm1zIHRoZXkmIzM5O3JlIGluIHRoZSByaWdodCBwbGFjZXMsIGJ1dCBkb2VzbiYjMzk7dCBpbW1lZGlhdGVseSB0ZWxsIG1lIHRoZSBkZXBlbmRlbmNpZXMuCgpOb3csIG15IG5leHQgc3RlcCBpcyB0byBjb25maXJtIHdoZXRoZXIgb3Igbm90IGBCUEZfU1lTQ0FMTGAgaXMgdGhlIG9ubHkgY29uZmlnIEkgbmVlZC4gSSYjMzk7bGwgbmVlZCB0byBkaWcgZGVlcGVyIGludG8gdGhlIGJ1aWxkIHN5c3RlbSBhbmQgZGVwZW5kZW5jaWVzIHRvIGJlIGNvbXBsZXRlbHkgY2VydGFpbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNCAxOTozNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgQlBGX1NZU0NBTEwmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9LY29uZmlnPTI1PW1lbnUgXCYjMzQ7QlBGIHN1YnN5c3RlbVwmIzM0O1xua2VybmVsL2JwZi9LY29uZmlnLTI2LVxua2VybmVsL2JwZi9LY29uZmlnOjI3OmNvbmZpZyBCUEZfU1lTQ0FMTFxua2VybmVsL2JwZi9LY29uZmlnLTI4LVx0Ym9vbCBcJiMzNDtFbmFibGUgYnBmKCkgc3lzdGVtIGNhbGxcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNCAxOTozNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5ODYzCgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogNTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGZyb20gbXkgcGVyc3BlY3RpdmUgYXMgYW4gZXhwZXJ0IGluIHRoZSBmaWVsZDoKCioqSW5pdGlhbCBBc3Nlc3NtZW50IG9mIEJQRiBDb25maWd1cmF0aW9uKioKCkFscmlnaHQsIHNvIHRoZSBjb3JlIGNvbmZpZ3VyYXRpb24gcG9pbnQgZm9yIEJQRiwgdGhlIG9uZSB0byBsb29rIGF0IGZpcnN0IGFuZCBmb3JlbW9zdCwgaXMgZGVmaW5pdGVseSBgQlBGX1NZU0NBTExgLiBUaGF0JiMzOTtzIHRoZSBiYXNlbGluZSwgdGhlIGNyaXRpY2FsIHBpZWNlLiBCdXQsIGhvbGQgb24gYSBtaW51dGUsIGxldCYjMzk7cyBub3QganVtcCB0byBjb25jbHVzaW9ucy4gYGJwZl90YXNrX3dvcmtgIGlzIGEgc3BlY2lmaWMgKmZlYXR1cmUqIHdpdGhpbiB0aGUgYnJvYWRlciBCUEYgZWNvc3lzdGVtLiBNeSBleHBlcmllbmNlIHNjcmVhbXMgdGhhdCBvZnRlbiB0aGVzZSBzcGVjaWFsaXplZCBmdW5jdGlvbmFsaXRpZXMgaGF2ZSBkZXBlbmRlbmNpZXMsIGFuZCBzb21ldGltZXMgbm90IGltbWVkaWF0ZWx5IG9idmlvdXMgb25lcy4KClRoZXJlZm9yZSwgYmVmb3JlIEkgZ28gYW55IGZ1cnRoZXIsIEkgbmVlZCB0byB2ZXJpZnksICpleHBsaWNpdGx5KiwgaWYgdGhlcmUgYXJlIGFueSBvdGhlciBjb25maWd1cmF0aW9uIGtub2JzIHJlbGF0ZWQgdG8gYGJwZl90YXNrX3dvcmtgIGl0c2VsZi4gSnVzdCBiZWNhdXNlIGl0JiMzOTtzIHBhcnQgb2YgQlBGIGRvZXNuJiMzOTt0IGF1dG9tYXRpY2FsbHkgbWVhbiBpdCYjMzk7cyBlbmFibGVkIGJ5IHRoZSBwcmltYXJ5IGBCUEZfU1lTQ0FMTGAgc3dpdGNoLiBJdCBjb3VsZCBiZSBjb25kaXRpb25hbGx5IGNvbXBpbGVkIG9yIGRlcGVuZCBvbiBhbm90aGVyLCBwZXJoYXBzIG1vcmUgZ3JhbnVsYXIsIG9wdGlvbi4gSSBuZWVkIHRvIGJlICpzdXJlKiBJJiMzOTttIG5vdCBtaXNzaW5nIHNvbWV0aGluZyBmdW5kYW1lbnRhbC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjQgMTk6MzU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnBmX3Rhc2tfd29yayYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtEb2N1bWVudGF0aW9uL2JwZi9rZnVuY3MucnN0PTQwMj1FeGFtcGxlIGRlY2xhcmF0aW9uOlxuLS1cbkRvY3VtZW50YXRpb24vYnBmL2tmdW5jcy5yc3QtNDA1LVxuRG9jdW1lbnRhdGlvbi9icGYva2Z1bmNzLnJzdDo0MDY6XHRfX2JwZl9rZnVuYyBpbnQgYnBmX3Rhc2tfd29ya19zY2hlZHVsZV9zaWduYWwoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLCBzdHJ1Y3QgYnBmX3Rhc2tfd29yayAqdHcsXG5Eb2N1bWVudGF0aW9uL2JwZi9rZnVuY3MucnN0OjQwNzpcdFx0XHRcdFx0XHQgICAgICB2b2lkICptYXBfX21hcCwgYnBmX3Rhc2tfd29ya19jYWxsYmFja190IGNhbGxiYWNrLFxuRG9jdW1lbnRhdGlvbi9icGYva2Z1bmNzLnJzdC00MDgtXHRcdFx0XHRcdFx0ICAgICAgc3RydWN0IGJwZl9wcm9nX2F1eCAqYXV4KSB7IC4uLiB9XG4tLVxuRG9jdW1lbnRhdGlvbi9icGYva2Z1bmNzLnJzdD00MTA9RXhhbXBsZSB1c2FnZSBpbiBCUEYgcHJvZ3JhbTpcbi0tXG5Eb2N1bWVudGF0aW9uL2JwZi9rZnVuY3MucnN0LTQxNC1cdC8qIG5vdGUgdGhhdCB0aGUgbGFzdCBhcmd1bWVudCBpcyBvbWl0dGVkICovXG5Eb2N1bWVudGF0aW9uL2JwZi9rZnVuY3MucnN0OjQxNTogICAgICAgIGJwZl90YXNrX3dvcmtfc2NoZWR1bGVfc2lnbmFsKHRhc2ssIFx1MDAyNndvcmstXHUwMDNldHcsIFx1MDAyNmFycm1hcCwgdGFza193b3JrX2NhbGxiYWNrKTtcbkRvY3VtZW50YXRpb24vYnBmL2tmdW5jcy5yc3QtNDE2LVxuLS1cbmluY2x1ZGUvbGludXgvYnBmLmg9MzQ2PXN0YXRpYyBpbmxpbmUgY29uc3QgY2hhciAqYnRmX2ZpZWxkX3R5cGVfbmFtZShlbnVtIGJ0Zl9maWVsZF90eXBlIHR5cGUpXG4tLVxuaW5jbHVkZS9saW51eC9icGYuaC0zNzQtXHRjYXNlIEJQRl9UQVNLX1dPUks6XG5pbmNsdWRlL2xpbnV4L2JwZi5oOjM3NTpcdFx0cmV0dXJuIFwmIzM0O2JwZl90YXNrX3dvcmtcJiMzNDs7XG5pbmNsdWRlL2xpbnV4L2JwZi5oLTM3Ni1cdGRlZmF1bHQ6XG4tLVxuaW5jbHVkZS9saW51eC9icGYuaD0zODg9c3RhdGljIGlubGluZSB1MzIgYnRmX2ZpZWxkX3R5cGVfc2l6ZShlbnVtIGJ0Zl9maWVsZF90eXBlIHR5cGUpXG4tLVxuaW5jbHVkZS9saW51eC9icGYuaC00MTQtXHRjYXNlIEJQRl9UQVNLX1dPUks6XG5pbmNsdWRlL2xpbnV4L2JwZi5oOjQxNTpcdFx0cmV0dXJuIHNpemVvZihzdHJ1Y3QgYnBmX3Rhc2tfd29yayk7XG5pbmNsdWRlL2xpbnV4L2JwZi5oLTQxNi1cdGRlZmF1bHQ6XG4tLVxuaW5jbHVkZS9saW51eC9icGYuaD00MjI9c3RhdGljIGlubGluZSB1MzIgYnRmX2ZpZWxkX3R5cGVfYWxpZ24oZW51bSBidGZfZmllbGRfdHlwZSB0eXBlKVxuLS1cbmluY2x1ZGUvbGludXgvYnBmLmgtNDQ4LVx0Y2FzZSBCUEZfVEFTS19XT1JLOlxuaW5jbHVkZS9saW51eC9icGYuaDo0NDk6XHRcdHJldHVybiBfX2FsaWdub2ZfXyhzdHJ1Y3QgYnBmX3Rhc2tfd29yayk7XG5pbmNsdWRlL2xpbnV4L2JwZi5oLTQ1MC1cdGRlZmF1bHQ6XG4tLVxuaW5jbHVkZS9saW51eC9icGYuaD02NDY9dm9pZCBicGZfd3FfY2FuY2VsX2FuZF9mcmVlKHZvaWQgKnRpbWVyKTtcbmluY2x1ZGUvbGludXgvYnBmLmg6NjQ3OnZvaWQgYnBmX3Rhc2tfd29ya19jYW5jZWxfYW5kX2ZyZWUodm9pZCAqdGltZXIpO1xuaW5jbHVkZS9saW51eC9icGYuaC02NDgtdm9pZCBicGZfbGlzdF9oZWFkX2ZyZWUoY29uc3Qgc3RydWN0IGJ0Zl9maWVsZCAqZmllbGQsIHZvaWQgKmxpc3RfaGVhZCxcbi0tXG5pbmNsdWRlL3VhcGkvbGludXgvYnBmLmg9NzUwMj1zdHJ1Y3QgYnBmX3RpbWVyIHtcbi0tXG5pbmNsdWRlL3VhcGkvbGludXgvYnBmLmgtNzUwNS1cbmluY2x1ZGUvdWFwaS9saW51eC9icGYuaDo3NTA2OnN0cnVjdCBicGZfdGFza193b3JrIHtcbmluY2x1ZGUvdWFwaS9saW51eC9icGYuaC03NTA3LVx0X191NjQgX19vcGFxdWU7XG4tLVxua2VybmVsL2JwZi9idGYuYz0zNjA3PXN0YXRpYyBpbnQgYnRmX2dldF9maWVsZF90eXBlKGNvbnN0IHN0cnVjdCBidGYgKmJ0ZiwgY29uc3Qgc3RydWN0IGJ0Zl90eXBlICp2YXJfdHlwZSxcbi0tXG5rZXJuZWwvYnBmL2J0Zi5jLTM2MTgtXHRcdHsgQlBGX1dPUktRVUVVRSwgXCYjMzQ7YnBmX3dxXCYjMzQ7LCB0cnVlIH0sXG5rZXJuZWwvYnBmL2J0Zi5jOjM2MTk6XHRcdHsgQlBGX1RBU0tfV09SSywgXCYjMzQ7YnBmX3Rhc2tfd29ya1wmIzM0OywgdHJ1ZSB9LFxua2VybmVsL2JwZi9idGYuYy0zNjIwLVx0XHR7IEJQRl9MSVNUX0hFQUQsIFwmIzM0O2JwZl9saXN0X2hlYWRcJiMzNDssIGZhbHNlIH0sXG4tLVxua2VybmVsL2JwZi9oYXNodGFiLmM9ODk2PXN0YXRpYyBpbnQgaHRhYl9tYXBfZ2V0X25leHRfa2V5KHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSwgdm9pZCAqbmV4dF9rZXkpXG4tLVxua2VybmVsL2JwZi9oYXNodGFiLmMtOTUzLVxua2VybmVsL2JwZi9oYXNodGFiLmM6OTU0Oi8qIERlZmVycmVkIGh0YWJfZWxlbSBmcmVlIGZvciBicGZfdGFza193b3JrIG1hcHMuICBjYW5jZWxfYW5kX2ZyZWUoKVxua2VybmVsL2JwZi9oYXNodGFiLmMtOTU1LSAqIHJldHVybnMgd2hpbGUgdGhlIHRhc2tfd29yayBjYWxsYmFjayBtYXkgc3RpbGwgYmUgYWNjZXNzaW5nIG1hcF92YWw7XG4tLVxua2VybmVsL2JwZi9oYXNodGFiLmM9MTEzOD1zdGF0aWMgc3RydWN0IGh0YWJfZWxlbSAqYWxsb2NfaHRhYl9lbGVtKHN0cnVjdCBicGZfaHRhYiAqaHRhYiwgdm9pZCAqa2V5LFxuLS1cbmtlcm5lbC9icGYvaGFzaHRhYi5jLTExODQtXHQgKiBza2lwcyBidGZfcmVjb3JkIGZpZWxkcywgc28gYSBzdGFsZSBFUlJfUFRSKC1FQlVTWSkgbGVmdCBieVxua2VybmVsL2JwZi9oYXNodGFiLmM6MTE4NTpcdCAqIGJwZl90YXNrX3dvcmtfY2FuY2VsX2FuZF9mcmVlIHdvdWxkIHBlcnNpc3QgYW5kIGJsb2NrIG5ldyBzY2hlZHVsaW5nLlxua2VybmVsL2JwZi9oYXNodGFiLmMtMTE4Ni1cdCAqL1xuLS1cbmtlcm5lbC9icGYvaGFzaHRhYi5jPTE2OTg9c3RhdGljIHZvaWQgaHRhYl9tYXBfZnJlZShzdHJ1Y3QgYnBmX21hcCAqbWFwKVxuLS1cbmtlcm5lbC9icGYvaGFzaHRhYi5jLTE3MTYtXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzoxNzE3Olx0LyogRm9yIGJwZl90YXNrX3dvcmsgbWFwcywgZWxlbWVudCBmcmVlcyBkZWZlciByZWN5Y2xpbmcgdGhyb3VnaFxua2VybmVsL2JwZi9oYXNodGFiLmMtMTcxOC1cdCAqIGNhbGxfcmN1X3Rhc2tzX3RyYWNlKCkgc28gcnVubmluZyBjYWxsYmFja3MgZmluaXNoIGJlZm9yZSByZXVzZS5cbi0tXG5rZXJuZWwvYnBmL2hlbHBlcnMuYz00MzE2PV9fYnBmX2tmdW5jIGludCBicGZfdmVyaWZ5X3BrY3M3X3NpZ25hdHVyZShjb25zdCBzdHJ1Y3QgYnBmX2R5bnB0ciAqZGF0YV9wLFxuLS1cbmtlcm5lbC9icGYvaGVscGVycy5jLTQzNjAtXG5rZXJuZWwvYnBmL2hlbHBlcnMuYzo0MzYxOnR5cGVkZWYgaW50ICgqYnBmX3Rhc2tfd29ya19jYWxsYmFja190KShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXksIHZvaWQgKnZhbHVlKTtcbmtlcm5lbC9icGYvaGVscGVycy5jLTQzNjItXG5rZXJuZWwvYnBmL2hlbHBlcnMuYzo0MzYzOmVudW0gYnBmX3Rhc2tfd29ya19zdGF0ZSB7XG5rZXJuZWwvYnBmL2hlbHBlcnMuYzo0MzY0Olx0LyogYnBmX3Rhc2tfd29yayBpcyByZWFkeSB0byBiZSB1c2VkICovXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy00MzY1LVx0QlBGX1RXX1NUQU5EQlkgPSAwLFxuLS1cbmtlcm5lbC9icGYvaGVscGVycy5jLTQzNzctXG5rZXJuZWwvYnBmL2hlbHBlcnMuYzo0Mzc4OnN0cnVjdCBicGZfdGFza193b3JrX2N0eCB7XG5rZXJuZWwvYnBmL2hlbHBlcnMuYzo0Mzc5Olx0ZW51bSBicGZfdGFza193b3JrX3N0YXRlIHN0YXRlO1xua2VybmVsL2JwZi9oZWxwZXJzLmMtNDM4MC1cdHJlZmNvdW50X3QgcmVmY250O1xuLS1cbmtlcm5lbC9icGYvaGVscGVycy5jLTQzOTAtXHRlbnVtIHRhc2tfd29ya19ub3RpZnlfbW9kZSBtb2RlO1xua2VybmVsL2JwZi9oZWxwZXJzLmM6NDM5MTpcdGJwZl90YXNrX3dvcmtfY2FsbGJhY2tfdCBjYWxsYmFja19mbjtcbmtlcm5lbC9icGYvaGVscGVycy5jLTQzOTItXHRzdHJ1Y3QgcmN1X2hlYWQgcmN1O1xuLS1cbmtlcm5lbC9icGYvaGVscGVycy5jLTQzOTQtXG5rZXJuZWwvYnBmL2hlbHBlcnMuYzo0Mzk1Oi8qIEFjdHVhbCB0eXBlIGZvciBzdHJ1Y3QgYnBmX3Rhc2tfd29yayAqL1xua2VybmVsL2JwZi9oZWxwZXJzLmM6NDM5NjpzdHJ1Y3QgYnBmX3Rhc2tfd29ya19rZXJuIHtcbmtlcm5lbC9icGYvaGVscGVycy5jOjQzOTc6XHRzdHJ1Y3QgYnBmX3Rhc2tfd29ya19jdHggKmN0eDtcbmtlcm5lbC9icGYvaGVscGVycy5jLTQzOTgtfTtcbmtlcm5lbC9icGYvaGVscGVycy5jLTQzOTktXG5rZXJuZWwvYnBmL2hlbHBlcnMuYzo0NDAwOnN0YXRpYyB2b2lkIGJwZl90YXNrX3dvcmtfY3R4X3Jlc2V0KHN0cnVjdCBicGZfdGFza193b3JrX2N0eCAqY3R4KVxua2VybmVsL2JwZi9oZWxwZXJzLmMtNDQwMS17XG4tLVxua2VybmVsL2JwZi9oZWxwZXJzLmMtNDQxMS1cbmtlcm5lbC9icGYvaGVscGVycy5jOjQ0MTI6c3RhdGljIGJvb2wgYnBmX3Rhc2tfd29ya19jdHhfdHJ5Z2V0KHN0cnVjdCBicGZfdGFza193b3JrX2N0eCAqY3R4KVxua2VybmVsL2JwZi9oZWxwZXJzLmMtNDQxMy17XG4tLVxua2VybmVsL2JwZi9oZWxwZXJzLmMtNDQxNi1cbmtlcm5lbC9icGYvaGVscGVycy5jOjQ0MTc6c3RhdGljIHZvaWQgYnBmX3Rhc2tfd29ya19kZXN0cm95KHN0cnVjdCBpcnFfd29yayAqaXJxX3dvcmspXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy00NDE4LXtcbmtlcm5lbC9icGYvaGVscGVycy5jOjQ0MTk6XHRzdHJ1Y3QgYnBmX3Rhc2tfd29ya19jdHggKmN0eCA9IGNvbnRhaW5lcl9vZihpcnFfd29yaywgc3RydWN0IGJwZl90YXNrX3dvcmtfY3R4LCBpcnFfd29yayk7XG5rZXJuZWwvYnBmL2hlbHBlcnMuYy00NDIwLVxua2VybmVsL2JwZi9oZWxwZXJzLmM6NDQyMTpcdGJwZl90YXNrX3dvcmtfY3R4X3Jlc2V0KGN0eCk7XG5rZXJuZWwvYnBmL2hlbHBlcnMuYy00NDIyLVx0a2ZyZWVfcmN1KGN0eCwgcmN1KTtcbi0tXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy00NDI0LVxua2VybmVsL2JwZi9oZWxwZXJzLmM6NDQyNTpzdGF0aWMgdm9pZCBicGZfdGFza193b3JrX2N0eF9wdXQoc3RydWN0IGJwZl90YXNrX3dvcmtfY3R4ICpjdHgpXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy00NDI2LXtcbi0tXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy00NDMwLVx0aWYgKGlycXNfZGlzYWJsZWQoKSkge1xua2VybmVsL2JwZi9oZWxwZXJzLmM6NDQzMTpcdFx0Y3R4LVx1MDAzZWlycV93b3JrID0gSVJRX1dPUktfSU5JVChicGZfdGFza193b3JrX2Rlc3Ryb3kpO1xua2VybmVsL2JwZi9oZWxwZXJzLmMtNDQzMi1cdFx0aXJxX3dvcmtfcXVldWUoXHUwMDI2Y3R4LVx1MDAzZWlycV93b3JrKTtcbmtlcm5lbC9icGYvaGVscGVycy5jLTQ0MzMtXHR9IGVsc2Uge1xua2VybmVsL2JwZi9oZWxwZXJzLmM6NDQzNDpcdFx0YnBmX3Rhc2tfd29ya19kZXN0cm95KFx1MDAyNmN0eC1cdTAwM2VpcnFfd29yayk7XG5rZXJuZWwvYnBmL2hlbHBlcnMuYy00NDM1LVx0fVxuLS1cbmtlcm5lbC9icGYvaGVscGVycy5jLTQ0MzctXG5rZXJuZWwvYnBmL2hlbHBlcnMuYzo0NDM4OnN0YXRpYyB2b2lkIGJwZl90YXNrX3dvcmtfY2FuY2VsKHN0cnVjdCBicGZfdGFza193b3JrX2N0eCAqY3R4KVxua2VybmVsL2JwZi9oZWxwZXJzLmMtNDQzOS17XG4tLVxua2VybmVsL2JwZi9oZWxwZXJzLmMtNDQ0Ni1cdGlmICh0YXNrX3dvcmtfY2FuY2VsKGN0eC1cdTAwM2V0YXNrLCBcdTAwMjZjdHgtXHUwMDNld29yaykpXG5rZXJuZWwvYnBmL2hlbHBlcnMuYzo0NDQ3Olx0XHRicGZfdGFza193b3JrX2N0eF9wdXQoY3R4KTtcbmtlcm5lbC9icGYvaGVscGVycy5jLTQ0NDgtfVxua2VybmVsL2JwZi9oZWxwZXJzLmMtNDQ0OS1cbmtlcm5lbC9icGYvaGVscGVycy5jOjQ0NTA6c3RhdGljIHZvaWQgYnBmX3Rhc2tfd29ya19jYWxsYmFjayhzdHJ1Y3QgY2FsbGJhY2tfaGVhZCAqY2IpXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy00NDUxLXtcbmtlcm5lbC9icGYvaGVscGVycy5jOjQ0NTI6XHRzdHJ1Y3QgYnBmX3Rhc2tfd29ya19jdHggKmN0eCA9IGNvbnRhaW5lcl9vZihjYiwgc3RydWN0IGJwZl90YXNrX3dvcmtfY3R4LCB3b3JrKTtcbmtlcm5lbC9icGYvaGVscGVycy5jOjQ0NTM6XHRlbnVtIGJwZl90YXNrX3dvcmtfc3RhdGUgc3RhdGU7XG5rZXJuZWwvYnBmL2hlbHBlcnMuYy00NDU0LVx0dTMyIGlkeDtcbi0tXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy00NDYyLVx0Lypcbmtlcm5lbC9icGYvaGVscGVycy5jOjQ0NjM6XHQgKiBUaGlzIGNhbGxiYWNrIG1heSBzdGFydCBydW5uaW5nIGJlZm9yZSBicGZfdGFza193b3JrX2lycSgpIHN3aXRjaGVkIHRvXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy00NDY0LVx0ICogU0NIRURVTEVEIHN0YXRlLCBzbyBoYW5kbGUgYm90aCB0cmFuc2l0aW9uIHZhcmlhbnRzIFNDSEVEVUxJTkd8U0NIRURVTEVEIC1cdTAwM2UgUlVOTklORy5cbi0tXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy00NDY5LVx0aWYgKHN0YXRlID09IEJQRl9UV19GUkVFRCkge1xua2VybmVsL2JwZi9oZWxwZXJzLmM6NDQ3MDpcdFx0YnBmX3Rhc2tfd29ya19jdHhfcHV0KGN0eCk7XG5rZXJuZWwvYnBmL2hlbHBlcnMuYy00NDcxLVx0XHRyZXR1cm47XG4tLVxua2VybmVsL2JwZi9oZWxwZXJzLmMtNDQ3OS1cbmtlcm5lbC9icGYvaGVscGVycy5jOjQ0ODA6XHRicGZfdGFza193b3JrX2N0eF9yZXNldChjdHgpO1xua2VybmVsL2JwZi9oZWxwZXJzLmMtNDQ4MS1cdCh2b2lkKWNtcHhjaGcoXHUwMDI2Y3R4LVx1MDAzZXN0YXRlLCBCUEZfVFdfUlVOTklORywgQlBGX1RXX1NUQU5EQlkpO1xua2VybmVsL2JwZi9oZWxwZXJzLmMtNDQ4Mi1cbmtlcm5lbC9icGYvaGVscGVycy5jOjQ0ODM6XHRicGZfdGFza193b3JrX2N0eF9wdXQoY3R4KTtcbmtlcm5lbC9icGYvaGVscGVycy5jLTQ0ODQtfVxua2VybmVsL2JwZi9oZWxwZXJzLmMtNDQ4NS1cbmtlcm5lbC9icGYvaGVscGVycy5jOjQ0ODY6c3RhdGljIHZvaWQgYnBmX3Rhc2tfd29ya19pcnEoc3RydWN0IGlycV93b3JrICppcnFfd29yaylcbmtlcm5lbC9icGYvaGVscGVycy5jLTQ0ODcte1xua2VybmVsL2JwZi9oZWxwZXJzLmM6NDQ4ODpcdHN0cnVjdCBicGZfdGFza193b3JrX2N0eCAqY3R4ID0gY29udGFpbmVyX29mKGlycV93b3JrLCBzdHJ1Y3QgYnBmX3Rhc2tfd29ya19jdHgsIGlycV93b3JrKTtcbmtlcm5lbC9icGYvaGVscGVycy5jOjQ0ODk6XHRlbnVtIGJwZl90YXNrX3dvcmtfc3RhdGUgc3RhdGU7XG5rZXJuZWwvYnBmL2hlbHBlcnMuYy00NDkwLVx0aW50IGVycjtcbi0tXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy00NDk0LVx0aWYgKGNtcHhjaGcoXHUwMDI2Y3R4LVx1MDAzZXN0YXRlLCBCUEZfVFdfUEVORElORywgQlBGX1RXX1NDSEVEVUxJTkcpICE9IEJQRl9UV19QRU5ESU5HKSB7XG5rZXJuZWwvYnBmL2hlbHBlcnMuYzo0NDk1Olx0XHRicGZfdGFza193b3JrX2N0eF9wdXQoY3R4KTtcbmtlcm5lbC9icGYvaGVscGVycy5jLTQ0OTYtXHRcdHJldHVybjtcbi0tXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy00NTAwLVx0aWYgKGVycikge1xua2VybmVsL2JwZi9oZWxwZXJzLmM6NDUwMTpcdFx0YnBmX3Rhc2tfd29ya19jdHhfcmVzZXQoY3R4KTtcbmtlcm5lbC9icGYvaGVscGVycy5jLTQ1MDItXHRcdC8qXG4tLVxua2VybmVsL2JwZi9oZWxwZXJzLmMtNDUwNi1cdFx0KHZvaWQpY21weGNoZyhcdTAwMjZjdHgtXHUwMDNlc3RhdGUsIEJQRl9UV19TQ0hFRFVMSU5HLCBCUEZfVFdfU1RBTkRCWSk7XG5rZXJuZWwvYnBmL2hlbHBlcnMuYzo0NTA3Olx0XHRicGZfdGFza193b3JrX2N0eF9wdXQoY3R4KTtcbmtlcm5lbC9icGYvaGVscGVycy5jLTQ1MDgtXHRcdHJldHVybjtcbi0tXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy00NTE5LVx0aWYgKHN0YXRlID09IEJQRl9UV19GUkVFRClcbmtlcm5lbC9icGYvaGVscGVycy5jOjQ1MjA6XHRcdGJwZl90YXNrX3dvcmtfY2FuY2VsKGN0eCk7IC8qIGNsZWFuIHVwIGlmIHdlIHN3aXRjaGVkIGludG8gRlJFRUQgc3RhdGUgKi9cbmtlcm5lbC9icGYvaGVscGVycy5jLTQ1MjEtfVxua2VybmVsL2JwZi9oZWxwZXJzLmMtNDUyMi1cbmtlcm5lbC9icGYvaGVscGVycy5jOjQ1MjM6c3RhdGljIHN0cnVjdCBicGZfdGFza193b3JrX2N0eCAqYnBmX3Rhc2tfd29ya19mZXRjaF9jdHgoc3RydWN0IGJwZl90YXNrX3dvcmsgKnR3LFxua2VybmVsL2JwZi9oZWxwZXJzLmMtNDUyNC1cdFx0XHRcdFx0XHRcdCBzdHJ1Y3QgYnBmX21hcCAqbWFwKVxua2VybmVsL2JwZi9oZWxwZXJzLmMtNDUyNS17XG5rZXJuZWwvYnBmL2hlbHBlcnMuYzo0NTI2Olx0c3RydWN0IGJwZl90YXNrX3dvcmtfa2VybiAqdHdrID0gKHZvaWQgKil0dztcbmtlcm5lbC9icGYvaGVscGVycy5jOjQ1Mjc6XHRzdHJ1Y3QgYnBmX3Rhc2tfd29ya19jdHggKmN0eCwgKm9sZF9jdHg7XG5rZXJuZWwvYnBmL2hlbHBlcnMuYy00NTI4LVxuLS1cbmtlcm5lbC9icGYvaGVscGVycy5jLTQ1NTMtXG5rZXJuZWwvYnBmL2hlbHBlcnMuYzo0NTU0OnN0YXRpYyBzdHJ1Y3QgYnBmX3Rhc2tfd29ya19jdHggKmJwZl90YXNrX3dvcmtfYWNxdWlyZV9jdHgoc3RydWN0IGJwZl90YXNrX3dvcmsgKnR3LFxua2VybmVsL2JwZi9oZWxwZXJzLmMtNDU1NS1cdFx0XHRcdFx0XHRcdCAgIHN0cnVjdCBicGZfbWFwICptYXApXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy00NTU2LXtcbmtlcm5lbC9icGYvaGVscGVycy5jOjQ1NTc6XHRzdHJ1Y3QgYnBmX3Rhc2tfd29ya19jdHggKmN0eDtcbmtlcm5lbC9icGYvaGVscGVycy5jLTQ1NTgtXG4tLVxua2VybmVsL2JwZi9oZWxwZXJzLmMtNDU2Ny1cdHNjb3BlZF9ndWFyZChyY3UpIHtcbmtlcm5lbC9icGYvaGVscGVycy5jOjQ1Njg6XHRcdGN0eCA9IGJwZl90YXNrX3dvcmtfZmV0Y2hfY3R4KHR3LCBtYXApO1xua2VybmVsL2JwZi9oZWxwZXJzLmMtNDU2OS1cdFx0aWYgKElTX0VSUihjdHgpKVxuLS1cbmtlcm5lbC9icGYvaGVscGVycy5jLTQ1NzItXHRcdC8qIHRyeSB0byBnZXQgcmVmIGZvciB0YXNrX3dvcmsgY2FsbGJhY2sgdG8gaG9sZCAqL1xua2VybmVsL2JwZi9oZWxwZXJzLmM6NDU3MzpcdFx0aWYgKCFicGZfdGFza193b3JrX2N0eF90cnlnZXQoY3R4KSlcbmtlcm5lbC9icGYvaGVscGVycy5jLTQ1NzQtXHRcdFx0cmV0dXJuIEVSUl9QVFIoLUVCVVNZKTtcbi0tXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy00NTc4LVx0XHQvKiBsb3N0IGFjcXVpcmluZyByYWNlIG9yIG1hcF9yZWxlYXNlX3VyZWYoKSBzdG9sZSBpdCBmcm9tIHVzLCBwdXQgcmVmIGFuZCBiYWlsICovXG5rZXJuZWwvYnBmL2hlbHBlcnMuYzo0NTc5Olx0XHRicGZfdGFza193b3JrX2N0eF9wdXQoY3R4KTtcbmtlcm5lbC9icGYvaGVscGVycy5jLTQ1ODAtXHRcdHJldHVybiBFUlJfUFRSKC1FQlVTWSk7XG4tLVxua2VybmVsL2JwZi9oZWxwZXJzLmMtNDU4OS1cdFx0LyogZHJvcCByZWYgd2UganVzdCBnb3QgZm9yIHRhc2tfd29yayBjYWxsYmFjayBpdHNlbGYgKi9cbmtlcm5lbC9icGYvaGVscGVycy5jOjQ1OTA6XHRcdGJwZl90YXNrX3dvcmtfY3R4X3B1dChjdHgpO1xua2VybmVsL2JwZi9oZWxwZXJzLmMtNDU5MS1cdFx0LyogdHJhbnNmZXIgbWFwJiMzOTtzIHJlZiBpbnRvIGNhbmNlbF9hbmRfZnJlZSgpICovXG5rZXJuZWwvYnBmL2hlbHBlcnMuYzo0NTkyOlx0XHRicGZfdGFza193b3JrX2NhbmNlbF9hbmRfZnJlZSh0dyk7XG5rZXJuZWwvYnBmL2hlbHBlcnMuYy00NTkzLVx0XHRyZXR1cm4gRVJSX1BUUigtRUJVU1kpO1xuLS1cbmtlcm5lbC9icGYvaGVscGVycy5jLTQ1OTgtXG5rZXJuZWwvYnBmL2hlbHBlcnMuYzo0NTk5OnN0YXRpYyBpbnQgYnBmX3Rhc2tfd29ya19zY2hlZHVsZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssIHN0cnVjdCBicGZfdGFza193b3JrICp0dyxcbmtlcm5lbC9icGYvaGVscGVycy5jOjQ2MDA6XHRcdFx0XHQgIHN0cnVjdCBicGZfbWFwICptYXAsIGJwZl90YXNrX3dvcmtfY2FsbGJhY2tfdCBjYWxsYmFja19mbixcbmtlcm5lbC9icGYvaGVscGVycy5jLTQ2MDEtXHRcdFx0XHQgIHN0cnVjdCBicGZfcHJvZ19hdXggKmF1eCwgZW51bSB0YXNrX3dvcmtfbm90aWZ5X21vZGUgbW9kZSlcbi0tXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy00NjAzLVx0c3RydWN0IGJwZl9wcm9nICpwcm9nO1xua2VybmVsL2JwZi9oZWxwZXJzLmM6NDYwNDpcdHN0cnVjdCBicGZfdGFza193b3JrX2N0eCAqY3R4O1xua2VybmVsL2JwZi9oZWxwZXJzLmMtNDYwNS1cdGludCBlcnI7XG5rZXJuZWwvYnBmL2hlbHBlcnMuYy00NjA2LVxua2VybmVsL2JwZi9oZWxwZXJzLmM6NDYwNzpcdEJURl9UWVBFX0VNSVQoc3RydWN0IGJwZl90YXNrX3dvcmspO1xua2VybmVsL2JwZi9oZWxwZXJzLmMtNDYwOC1cbi0tXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy00NjE3LVxua2VybmVsL2JwZi9oZWxwZXJzLmM6NDYxODpcdGN0eCA9IGJwZl90YXNrX3dvcmtfYWNxdWlyZV9jdHgodHcsIG1hcCk7XG5rZXJuZWwvYnBmL2hlbHBlcnMuYy00NjE5LVx0aWYgKElTX0VSUihjdHgpKSB7XG4tLVxua2VybmVsL2JwZi9oZWxwZXJzLmMtNDYyOS1cdGN0eC1cdTAwM2VtYXBfdmFsID0gKHZvaWQgKil0dyAtIG1hcC1cdTAwM2VyZWNvcmQtXHUwMDNldGFza193b3JrX29mZjtcbmtlcm5lbC9icGYvaGVscGVycy5jOjQ2MzA6XHRpbml0X3Rhc2tfd29yayhcdTAwMjZjdHgtXHUwMDNld29yaywgYnBmX3Rhc2tfd29ya19jYWxsYmFjayk7XG5rZXJuZWwvYnBmL2hlbHBlcnMuYzo0NjMxOlx0aW5pdF9pcnFfd29yayhcdTAwMjZjdHgtXHUwMDNlaXJxX3dvcmssIGJwZl90YXNrX3dvcmtfaXJxKTtcbmtlcm5lbC9icGYvaGVscGVycy5jLTQ2MzItXG4tLVxua2VybmVsL2JwZi9oZWxwZXJzLmMtNDY0My0vKipcbmtlcm5lbC9icGYvaGVscGVycy5jOjQ2NDQ6ICogYnBmX3Rhc2tfd29ya19zY2hlZHVsZV9zaWduYWwgLSBTY2hlZHVsZSBCUEYgY2FsbGJhY2sgdXNpbmcgdGFza193b3JrX2FkZCB3aXRoIFRXQV9TSUdOQUxcbmtlcm5lbC9icGYvaGVscGVycy5jLTQ2NDUtICogbW9kZVxua2VybmVsL2JwZi9oZWxwZXJzLmMtNDY0Ni0gKiBAdGFzazogVGFzayBzdHJ1Y3QgZm9yIHdoaWNoIGNhbGxiYWNrIHNob3VsZCBiZSBzY2hlZHVsZWRcbmtlcm5lbC9icGYvaGVscGVycy5jOjQ2NDc6ICogQHR3OiBQb2ludGVyIHRvIHN0cnVjdCBicGZfdGFza193b3JrIGluIEJQRiBtYXAgdmFsdWUgZm9yIGludGVybmFsIGJvb2trZWVwaW5nXG5rZXJuZWwvYnBmL2hlbHBlcnMuYzo0NjQ4OiAqIEBtYXBfX21hcDogYnBmX21hcCB0aGF0IGVtYmVkcyBzdHJ1Y3QgYnBmX3Rhc2tfd29yayBpbiB0aGUgdmFsdWVzXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy00NjQ5LSAqIEBjYWxsYmFjazogcG9pbnRlciB0byBCUEYgc3VicHJvZ3JhbSB0byBjYWxsXG4tLVxua2VybmVsL2JwZi9oZWxwZXJzLmMtNDY1My0gKi9cbmtlcm5lbC9icGYvaGVscGVycy5jOjQ2NTQ6X19icGZfa2Z1bmMgaW50IGJwZl90YXNrX3dvcmtfc2NoZWR1bGVfc2lnbmFsKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywgc3RydWN0IGJwZl90YXNrX3dvcmsgKnR3LFxua2VybmVsL2JwZi9oZWxwZXJzLmM6NDY1NTpcdFx0XHRcdFx0ICAgICAgdm9pZCAqbWFwX19tYXAsIGJwZl90YXNrX3dvcmtfY2FsbGJhY2tfdCBjYWxsYmFjayxcbmtlcm5lbC9icGYvaGVscGVycy5jLTQ2NTYtXHRcdFx0XHRcdCAgICAgIHN0cnVjdCBicGZfcHJvZ19hdXggKmF1eClcbmtlcm5lbC9icGYvaGVscGVycy5jLTQ2NTcte1xua2VybmVsL2JwZi9oZWxwZXJzLmM6NDY1ODpcdHJldHVybiBicGZfdGFza193b3JrX3NjaGVkdWxlKHRhc2ssIHR3LCBtYXBfX21hcCwgY2FsbGJhY2ssIGF1eCwgVFdBX1NJR05BTCk7XG5rZXJuZWwvYnBmL2hlbHBlcnMuYy00NjU5LX1cbi0tXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy00NjYxLS8qKlxua2VybmVsL2JwZi9oZWxwZXJzLmM6NDY2MjogKiBicGZfdGFza193b3JrX3NjaGVkdWxlX3Jlc3VtZSAtIFNjaGVkdWxlIEJQRiBjYWxsYmFjayB1c2luZyB0YXNrX3dvcmtfYWRkIHdpdGggVFdBX1JFU1VNRVxua2VybmVsL2JwZi9oZWxwZXJzLmMtNDY2My0gKiBtb2RlXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy00NjY0LSAqIEB0YXNrOiBUYXNrIHN0cnVjdCBmb3Igd2hpY2ggY2FsbGJhY2sgc2hvdWxkIGJlIHNjaGVkdWxlZFxua2VybmVsL2JwZi9oZWxwZXJzLmM6NDY2NTogKiBAdHc6IFBvaW50ZXIgdG8gc3RydWN0IGJwZl90YXNrX3dvcmsgaW4gQlBGIG1hcCB2YWx1ZSBmb3IgaW50ZXJuYWwgYm9va2tlZXBpbmdcbmtlcm5lbC9icGYvaGVscGVycy5jOjQ2NjY6ICogQG1hcF9fbWFwOiBicGZfbWFwIHRoYXQgZW1iZWRzIHN0cnVjdCBicGZfdGFza193b3JrIGluIHRoZSB2YWx1ZXNcbmtlcm5lbC9icGYvaGVscGVycy5jLTQ2NjctICogQGNhbGxiYWNrOiBwb2ludGVyIHRvIEJQRiBzdWJwcm9ncmFtIHRvIGNhbGxcbi0tXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy00NjcxLSAqL1xua2VybmVsL2JwZi9oZWxwZXJzLmM6NDY3MjpfX2JwZl9rZnVuYyBpbnQgYnBmX3Rhc2tfd29ya19zY2hlZHVsZV9yZXN1bWUoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLCBzdHJ1Y3QgYnBmX3Rhc2tfd29yayAqdHcsXG5rZXJuZWwvYnBmL2hlbHBlcnMuYzo0NjczOlx0XHRcdFx0XHQgICAgICB2b2lkICptYXBfX21hcCwgYnBmX3Rhc2tfd29ya19jYWxsYmFja190IGNhbGxiYWNrLFxua2VybmVsL2JwZi9oZWxwZXJzLmMtNDY3NC1cdFx0XHRcdFx0ICAgICAgc3RydWN0IGJwZl9wcm9nX2F1eCAqYXV4KVxua2VybmVsL2JwZi9oZWxwZXJzLmMtNDY3NS17XG5rZXJuZWwvYnBmL2hlbHBlcnMuYzo0Njc2Olx0cmV0dXJuIGJwZl90YXNrX3dvcmtfc2NoZWR1bGUodGFzaywgdHcsIG1hcF9fbWFwLCBjYWxsYmFjaywgYXV4LCBUV0FfUkVTVU1FKTtcbmtlcm5lbC9icGYvaGVscGVycy5jLTQ2NzctfVxuLS1cbmtlcm5lbC9icGYvaGVscGVycy5jPTQ3NzQ9X19icGZfa2Z1bmNfZW5kX2RlZnMoKTtcbmtlcm5lbC9icGYvaGVscGVycy5jLTQ3NzUtXG5rZXJuZWwvYnBmL2hlbHBlcnMuYzo0Nzc2OnN0YXRpYyB2b2lkIGJwZl90YXNrX3dvcmtfY2FuY2VsX3NjaGVkdWxlZChzdHJ1Y3QgaXJxX3dvcmsgKmlycV93b3JrKVxua2VybmVsL2JwZi9oZWxwZXJzLmMtNDc3Ny17XG5rZXJuZWwvYnBmL2hlbHBlcnMuYzo0Nzc4Olx0c3RydWN0IGJwZl90YXNrX3dvcmtfY3R4ICpjdHggPSBjb250YWluZXJfb2YoaXJxX3dvcmssIHN0cnVjdCBicGZfdGFza193b3JrX2N0eCwgaXJxX3dvcmspO1xua2VybmVsL2JwZi9oZWxwZXJzLmMtNDc3OS1cbmtlcm5lbC9icGYvaGVscGVycy5jOjQ3ODA6XHRicGZfdGFza193b3JrX2NhbmNlbChjdHgpOyAvKiB0aGlzIG1pZ2h0IHB1dCB0YXNrX3dvcmsgY2FsbGJhY2smIzM5O3MgcmVmICovXG5rZXJuZWwvYnBmL2hlbHBlcnMuYzo0NzgxOlx0YnBmX3Rhc2tfd29ya19jdHhfcHV0KGN0eCk7IC8qIGFuZCBoZXJlIHdlIHB1dCBtYXAmIzM5O3Mgb3duIHJlZiB0aGF0IHdhcyB0cmFuc2ZlcnJlZCB0byB1cyAqL1xua2VybmVsL2JwZi9oZWxwZXJzLmMtNDc4Mi19XG5rZXJuZWwvYnBmL2hlbHBlcnMuYy00NzgzLVxua2VybmVsL2JwZi9oZWxwZXJzLmM6NDc4NDp2b2lkIGJwZl90YXNrX3dvcmtfY2FuY2VsX2FuZF9mcmVlKHZvaWQgKnZhbClcbmtlcm5lbC9icGYvaGVscGVycy5jLTQ3ODUte1xua2VybmVsL2JwZi9oZWxwZXJzLmM6NDc4NjpcdHN0cnVjdCBicGZfdGFza193b3JrX2tlcm4gKnR3ayA9IHZhbDtcbmtlcm5lbC9icGYvaGVscGVycy5jOjQ3ODc6XHRzdHJ1Y3QgYnBmX3Rhc2tfd29ya19jdHggKmN0eDtcbmtlcm5lbC9icGYvaGVscGVycy5jOjQ3ODg6XHRlbnVtIGJwZl90YXNrX3dvcmtfc3RhdGUgc3RhdGU7XG5rZXJuZWwvYnBmL2hlbHBlcnMuYy00Nzg5LVxuLS1cbmtlcm5lbC9icGYvaGVscGVycy5jLTQ3OTYtXHRcdC8qIHJ1biBpbiBpcnFfd29yayB0byBhdm9pZCBsb2NrcyBpbiBOTUkgKi9cbmtlcm5lbC9icGYvaGVscGVycy5jOjQ3OTc6XHRcdGluaXRfaXJxX3dvcmsoXHUwMDI2Y3R4LVx1MDAzZWlycV93b3JrLCBicGZfdGFza193b3JrX2NhbmNlbF9zY2hlZHVsZWQpO1xua2VybmVsL2JwZi9oZWxwZXJzLmMtNDc5OC1cdFx0aXJxX3dvcmtfcXVldWUoXHUwMDI2Y3R4LVx1MDAzZWlycV93b3JrKTtcbi0tXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy00ODAxLVxua2VybmVsL2JwZi9oZWxwZXJzLmM6NDgwMjpcdGJwZl90YXNrX3dvcmtfY3R4X3B1dChjdHgpOyAvKiBwdXQgYnBmIG1hcCYjMzk7cyByZWYgKi9cbmtlcm5lbC9icGYvaGVscGVycy5jLTQ4MDMtfVxuLS1cbmtlcm5lbC9icGYvaGVscGVycy5jPTQ5Njg9QlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9zdHJlYW1fcHJpbnRfc3RhY2ssIEtGX0lNUExJQ0lUX0FSR1MpXG5rZXJuZWwvYnBmL2hlbHBlcnMuYzo0OTY5OkJURl9JRF9GTEFHUyhmdW5jLCBicGZfdGFza193b3JrX3NjaGVkdWxlX3NpZ25hbCwgS0ZfSU1QTElDSVRfQVJHUylcbmtlcm5lbC9icGYvaGVscGVycy5jOjQ5NzA6QlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl90YXNrX3dvcmtfc2NoZWR1bGVfcmVzdW1lLCBLRl9JTVBMSUNJVF9BUkdTKVxua2VybmVsL2JwZi9oZWxwZXJzLmMtNDk3MS1CVEZfSURfRkxBR1MoZnVuYywgYnBmX2R5bnB0cl9mcm9tX2ZpbGUpXG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmM9ODA0PXZvaWQgYnBmX29ial9mcmVlX3Rhc2tfd29yayhjb25zdCBzdHJ1Y3QgYnRmX3JlY29yZCAqcmVjLCB2b2lkICpvYmopXG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmMtODA3LVx0XHRyZXR1cm47XG5rZXJuZWwvYnBmL3N5c2NhbGwuYzo4MDg6XHRicGZfdGFza193b3JrX2NhbmNlbF9hbmRfZnJlZShvYmogJiM0MzsgcmVjLVx1MDAzZXRhc2tfd29ya19vZmYpO1xua2VybmVsL2JwZi9zeXNjYWxsLmMtODA5LX1cbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYz04MTY9dm9pZCBicGZfb2JqX2ZyZWVfZmllbGRzKGNvbnN0IHN0cnVjdCBidGZfcmVjb3JkICpyZWMsIHZvaWQgKm9iailcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy04NDAtXHRcdGNhc2UgQlBGX1RBU0tfV09SSzpcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjg0MTpcdFx0XHRicGZfdGFza193b3JrX2NhbmNlbF9hbmRfZnJlZShmaWVsZF9wdHIpO1xua2VybmVsL2JwZi9zeXNjYWxsLmMtODQyLVx0XHRcdGJyZWFrO1xuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz01MzA9c3RhdGljIGJvb2wgaXNfYXN5bmNfY2Jfc2xlZXBhYmxlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqaW5zbilcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNTM1LVxua2VybmVsL2JwZi92ZXJpZmllci5jOjUzNjpcdC8qIGJwZl93cSBhbmQgYnBmX3Rhc2tfd29yayBjYWxsYmFja3MgYXJlIGFsd2F5cyBzbGVlcGFibGUuICovXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNTM3LVx0aWYgKGJwZl9wc2V1ZG9fa2Z1bmNfY2FsbChpbnNuKSBcdTAwMjZcdTAwMjYgaW5zbi1cdTAwM2VvZmYgPT0gMCBcdTAwMjZcdTAwMjZcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTA4MDI9QlRGX0lEKHN0cnVjdCwgYnBmX3Jlc19zcGluX2xvY2spXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTA4MDM6QlRGX0lEKHN0cnVjdCwgYnBmX3Rhc2tfd29yaylcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMDgwNC1CVEZfSUQoc3RydWN0LCBicGZfcHJvZ19hdXgpXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTEwOTgyPWVudW0gc3BlY2lhbF9rZnVuY190eXBlIHtcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTEwNDQtXHRLRl9fX2JwZl90cmFwLFxua2VybmVsL2JwZi92ZXJpZmllci5jOjExMDQ1Olx0S0ZfYnBmX3Rhc2tfd29ya19zY2hlZHVsZV9zaWduYWwsXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTEwNDY6XHRLRl9icGZfdGFza193b3JrX3NjaGVkdWxlX3Jlc3VtZSxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMTA0Ny1cdEtGX2JwZl9hcmVuYV9hbGxvY19wYWdlcyxcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTExMzc9QlRGX0lEKGZ1bmMsIF9fYnBmX3RyYXApXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTExMzg6QlRGX0lEKGZ1bmMsIGJwZl90YXNrX3dvcmtfc2NoZWR1bGVfc2lnbmFsKVxua2VybmVsL2JwZi92ZXJpZmllci5jOjExMTM5OkJURl9JRChmdW5jLCBicGZfdGFza193b3JrX3NjaGVkdWxlX3Jlc3VtZSlcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMTE0MC1CVEZfSUQoZnVuYywgYnBmX2FyZW5hX2FsbG9jX3BhZ2VzKVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xMTE5Nj1zdGF0aWMgYm9vbCBpc190YXNrX3dvcmtfYWRkX2tmdW5jKHUzMiBmdW5jX2lkKVxua2VybmVsL2JwZi92ZXJpZmllci5jLTExMTk3LXtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMTE5ODpcdHJldHVybiBmdW5jX2lkID09IHNwZWNpYWxfa2Z1bmNfbGlzdFtLRl9icGZfdGFza193b3JrX3NjaGVkdWxlX3NpZ25hbF0gfHxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMTE5OTpcdCAgICAgICBmdW5jX2lkID09IHNwZWNpYWxfa2Z1bmNfbGlzdFtLRl9icGZfdGFza193b3JrX3NjaGVkdWxlX3Jlc3VtZV07XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTEyMDAtfVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xMTkwNj1zdGF0aWMgaW50IGNoZWNrX2tmdW5jX2FyZ3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9rZnVuY19jYWxsX2FyZ19tZXRhICptZXRhLFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMjA4MC1cdFx0XHRcdFx0XHR2ZXJib3NlKGVudixcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMjA4MTpcdFx0XHRcdFx0XHRcdFwmIzM0O2JwZl90YXNrX3dvcmsgcG9pbnRlciBpbiBSMiBtYXBfdWlkPSVkIGRvZXNuJiMzOTt0IG1hdGNoIG1hcCBwb2ludGVyIGluIFIzIG1hcF91aWQ9JWRcXG5cJiMzNDssXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTIwODItXHRcdFx0XHRcdFx0XHRtZXRhLVx1MDAzZW1hcC51aWQsIHJlZy1cdTAwM2VtYXBfdWlkKTtcbi0tXG50b29scy9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmg9NzUwMj1zdHJ1Y3QgYnBmX3RpbWVyIHtcbi0tXG50b29scy9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmgtNzUwNS1cbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaDo3NTA2OnN0cnVjdCBicGZfdGFza193b3JrIHtcbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaC03NTA3LVx0X191NjQgX19vcGFxdWU7XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdGVzdF90YXNrX3dvcmsuYz0yNT1zdHJ1Y3QgZWxlbSB7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy90ZXN0X3Rhc2tfd29yay5jLTI2LVx0Y2hhciBkYXRhWzEyOF07XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy90ZXN0X3Rhc2tfd29yay5jOjI3Olx0c3RydWN0IGJwZl90YXNrX3dvcmsgdHc7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy90ZXN0X3Rhc2tfd29yay5jLTI4LX07XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2ZpbGVfcmVhZGVyLmM9MjA9c3RydWN0IGVsZW0ge1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2ZpbGVfcmVhZGVyLmMtMjEtXHRzdHJ1Y3QgZmlsZSAqZmlsZTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9maWxlX3JlYWRlci5jOjIyOlx0c3RydWN0IGJwZl90YXNrX3dvcmsgdHc7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvZmlsZV9yZWFkZXIuYy0yMy19O1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9maWxlX3JlYWRlci5jPTY2PWludCBvbl9vcGVuX3ZhbGlkYXRlX2ZpbGVfcmVhZCh2b2lkICpjKVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9maWxlX3JlYWRlci5jLTc5LVx0fVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2ZpbGVfcmVhZGVyLmM6ODA6XHRicGZfdGFza193b3JrX3NjaGVkdWxlX3NpZ25hbCh0YXNrLCBcdTAwMjZ3b3JrLVx1MDAzZXR3LCBcdTAwMjZhcnJtYXAsIHRhc2tfd29ya19jYWxsYmFjayk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvZmlsZV9yZWFkZXIuYy04MS1cdHJldHVybiAwO1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90YXNrX3dvcmsuYz0xNj1zdHJ1Y3QgZWxlbSB7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGFza193b3JrLmMtMTctXHRjaGFyIGRhdGFbMTI4XTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90YXNrX3dvcmsuYzoxODpcdHN0cnVjdCBicGZfdGFza193b3JrIHR3O1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rhc2tfd29yay5jLTE5LX07XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rhc2tfd29yay5jPTU0PWludCBvbmNwdV9oYXNoX21hcChzdHJ1Y3QgcHRfcmVncyAqYXJncylcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGFza193b3JrLmMtNjctXHRcdHJldHVybiAwO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rhc2tfd29yay5jOjY4Olx0YnBmX3Rhc2tfd29ya19zY2hlZHVsZV9yZXN1bWUodGFzaywgXHUwMDI2d29yay1cdTAwM2V0dywgXHUwMDI2aG1hcCwgcHJvY2Vzc193b3JrKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90YXNrX3dvcmsuYy02OS1cdHJldHVybiAwO1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90YXNrX3dvcmsuYz03Mz1pbnQgb25jcHVfYXJyYXlfbWFwKHN0cnVjdCBwdF9yZWdzICphcmdzKVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90YXNrX3dvcmsuYy04MS1cdFx0cmV0dXJuIDA7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGFza193b3JrLmM6ODI6XHRicGZfdGFza193b3JrX3NjaGVkdWxlX3NpZ25hbCh0YXNrLCBcdTAwMjZ3b3JrLVx1MDAzZXR3LCBcdTAwMjZhcnJtYXAsIHByb2Nlc3Nfd29yayk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGFza193b3JrLmMtODMtXHRyZXR1cm4gMDtcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGFza193b3JrLmM9ODc9aW50IG9uY3B1X2xydV9tYXAoc3RydWN0IHB0X3JlZ3MgKmFyZ3MpXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rhc2tfd29yay5jLTEwMy1cdFx0cmV0dXJuIDA7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGFza193b3JrLmM6MTA0Olx0YnBmX3Rhc2tfd29ya19zY2hlZHVsZV9yZXN1bWUodGFzaywgXHUwMDI2d29yay1cdTAwM2V0dywgXHUwMDI2bHJ1bWFwLCBwcm9jZXNzX3dvcmspO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rhc2tfd29yay5jLTEwNS1cdHJldHVybiAwO1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90YXNrX3dvcmtfZmFpbC5jPTE1PXN0cnVjdCBlbGVtIHtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90YXNrX3dvcmtfZmFpbC5jLTE2LVx0Y2hhciBkYXRhWzEyOF07XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGFza193b3JrX2ZhaWwuYzoxNzpcdHN0cnVjdCBicGZfdGFza193b3JrIHR3O1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rhc2tfd29ya19mYWlsLmMtMTgtfTtcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGFza193b3JrX2ZhaWwuYz00Nz1pbnQgbWlzbWF0Y2hfbWFwKHN0cnVjdCBwdF9yZWdzICphcmdzKVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90YXNrX3dvcmtfZmFpbC5jLTU1LVx0XHRyZXR1cm4gMDtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90YXNrX3dvcmtfZmFpbC5jOjU2Olx0YnBmX3Rhc2tfd29ya19zY2hlZHVsZV9yZXN1bWUodGFzaywgXHUwMDI2d29yay1cdTAwM2V0dywgXHUwMDI2aG1hcCwgcHJvY2Vzc193b3JrKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90YXNrX3dvcmtfZmFpbC5jLTU3LVx0cmV0dXJuIDA7XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rhc2tfd29ya19mYWlsLmM9NjI9aW50IG5vX21hcF90YXNrX3dvcmsoc3RydWN0IHB0X3JlZ3MgKmFyZ3MpXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rhc2tfd29ya19mYWlsLmMtNjQtXHRzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2s7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGFza193b3JrX2ZhaWwuYzo2NTpcdHN0cnVjdCBicGZfdGFza193b3JrIHR3O1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rhc2tfd29ya19mYWlsLmMtNjYtXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGFza193b3JrX2ZhaWwuYy02Ny1cdHRhc2sgPSBicGZfZ2V0X2N1cnJlbnRfdGFza19idGYoKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90YXNrX3dvcmtfZmFpbC5jOjY4Olx0YnBmX3Rhc2tfd29ya19zY2hlZHVsZV9yZXN1bWUodGFzaywgXHUwMDI2dHcsIFx1MDAyNmhtYXAsIHByb2Nlc3Nfd29yayk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGFza193b3JrX2ZhaWwuYy02OS1cdHJldHVybiAwO1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90YXNrX3dvcmtfZmFpbC5jPTc0PWludCB0YXNrX3dvcmtfbnVsbChzdHJ1Y3QgcHRfcmVncyAqYXJncylcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGFza193b3JrX2ZhaWwuYy03OC1cdHRhc2sgPSBicGZfZ2V0X2N1cnJlbnRfdGFza19idGYoKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90YXNrX3dvcmtfZmFpbC5jOjc5Olx0YnBmX3Rhc2tfd29ya19zY2hlZHVsZV9yZXN1bWUodGFzaywgTlVMTCwgXHUwMDI2aG1hcCwgcHJvY2Vzc193b3JrKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90YXNrX3dvcmtfZmFpbC5jLTgwLVx0cmV0dXJuIDA7XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rhc2tfd29ya19mYWlsLmM9ODU9aW50IG1hcF9udWxsKHN0cnVjdCBwdF9yZWdzICphcmdzKVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90YXNrX3dvcmtfZmFpbC5jLTkzLVx0XHRyZXR1cm4gMDtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90YXNrX3dvcmtfZmFpbC5jOjk0Olx0YnBmX3Rhc2tfd29ya19zY2hlZHVsZV9yZXN1bWUodGFzaywgXHUwMDI2d29yay1cdTAwM2V0dywgTlVMTCwgcHJvY2Vzc193b3JrKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90YXNrX3dvcmtfZmFpbC5jLTk1LVx0cmV0dXJuIDA7XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rhc2tfd29ya19zdHJlc3MuYz0yMD1zdHJ1Y3QgZWxlbSB7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGFza193b3JrX3N0cmVzcy5jLTIxLVx0X191MzIgY291bnQ7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGFza193b3JrX3N0cmVzcy5jOjIyOlx0c3RydWN0IGJwZl90YXNrX3dvcmsgdHc7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGFza193b3JrX3N0cmVzcy5jLTIzLX07XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rhc2tfd29ya19zdHJlc3MuYz00MD1pbnQgc2NoZWR1bGVfdGFza193b3JrKHZvaWQgKmN0eClcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGFza193b3JrX3N0cmVzcy5jLTUzLVx0fVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rhc2tfd29ya19zdHJlc3MuYzo1NDpcdGVyciA9IGJwZl90YXNrX3dvcmtfc2NoZWR1bGVfc2lnbmFsKGJwZl9nZXRfY3VycmVudF90YXNrX2J0ZigpLCBcdTAwMjZ3b3JrLVx1MDAzZXR3LCBcdTAwMjZobWFwLFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rhc2tfd29ya19zdHJlc3MuYy01NS1cdFx0XHRcdFx0ICAgIHByb2Nlc3Nfd29yayk7XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FzeW5jX2NiX2NvbnRleHQuYz0xMjQ9c3RydWN0IHRhc2tfd29ya19lbGVtIHtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hc3luY19jYl9jb250ZXh0LmM6MTI1Olx0c3RydWN0IGJwZl90YXNrX3dvcmsgdHc7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfYXN5bmNfY2JfY29udGV4dC5jLTEyNi19O1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hc3luY19jYl9jb250ZXh0LmM9MTQ1PWludCB0YXNrX3dvcmtfbm9uX3NsZWVwYWJsZV9wcm9nKHZvaWQgKmN0eClcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfYXN5bmNfY2JfY29udGV4dC5jLTE1OC1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hc3luY19jYl9jb250ZXh0LmM6MTU5Olx0YnBmX3Rhc2tfd29ya19zY2hlZHVsZV9yZXN1bWUodGFzaywgXHUwMDI2dmFsLVx1MDAzZXR3LCBcdTAwMjZ0YXNrX3dvcmtfbWFwLCB0YXNrX3dvcmtfY2IpO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FzeW5jX2NiX2NvbnRleHQuYy0xNjAtXHRyZXR1cm4gMDtcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfYXN5bmNfY2JfY29udGV4dC5jPTE2NT1pbnQgdGFza193b3JrX3NsZWVwYWJsZV9wcm9nKHZvaWQgKmN0eClcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfYXN5bmNfY2JfY29udGV4dC5jLTE3OC1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hc3luY19jYl9jb250ZXh0LmM6MTc5Olx0YnBmX3Rhc2tfd29ya19zY2hlZHVsZV9yZXN1bWUodGFzaywgXHUwMDI2dmFsLVx1MDAzZXR3LCBcdTAwMjZ0YXNrX3dvcmtfbWFwLCB0YXNrX3dvcmtfY2IpO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FzeW5jX2NiX2NvbnRleHQuYy0xODAtXHRyZXR1cm4gMDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjQgMTk6MzU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjAyNDAKCQkJCQkJCW91dHB1dDogMjI0CgkJCQkJCQl0aG91Z2h0czogNjgwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgQlBGIFRhc2sgV29yayBQYXRjaCBmb3IgRnV6emluZyBGb2N1cyoqCgpPa2F5LCBzbyB3ZSYjMzk7cmUgbG9va2luZyBhdCBgYnBmX3Rhc2tfd29ya2AsIGEgQlBGIGZlYXR1cmUuIFRoZSByZWxldmFudCBjb25maWcgaXMgYEJQRl9TWVNDQUxMYC4gVGhlIGNvcmUgb2YgdGhpcyBwYXRjaCBzZWVtcyB0byBpbnZvbHZlIGRlZmVycmVkIGZyZWVpbmcgb2YgaGFzaCB0YWJsZSBlbGVtZW50cywgc3BlY2lmaWNhbGx5IHJlbGF0ZWQgdG8gYGNhbGxfcmN1X3Rhc2tzX3RyYWNlYC4gTXkgaW5pdGlhbCB0aG91Z2h0IHdhcyB0byBsaXN0IHRoZSBwcmltYXJ5IGZ1bmN0aW9ucyBpbnZvbHZlZCBpbiB0aGUgZGVmZXJyZWQgZnJlZWluZyBhbmQgbWVtb3J5IG1hbmFnZW1lbnQuCgpJbml0aWFsbHksIHRoZSBrZXkgc3ltYm9scyB0aGF0IHNwcmluZyB0byBtaW5kIGFyZTogYGJwZl90YXNrX3dvcmtfY2FuY2VsX2FuZF9mcmVlYCwgYGh0YWJfbWFwX2ZyZWVgLCBgZnJlZV9odGFiX2VsZW1gLCBgaHRhYl9lbGVtX2ZyZWVgLCBhbmQgYGh0YWJfbHJ1X3B1c2hfZnJlZWAuIEhvd2V2ZXIsIHRoZSByZWFsIGNydXggb2YgdGhpcyBwYXRjaCBpcyB0aGUgaGFuZGxpbmcgb2YgdGhlIFJDVSBjYWxsYmFja3MuIFRoZXNlIHN0YXRpYyBmdW5jdGlvbnMsIGBodGFiX2VsZW1fZGVmZXJfZnJlZWAgYW5kIGBodGFiX2VsZW1fZnJlZV9yY3VfY2JgLCBhcmUgdGhlIGNyaXRpY2FsIHBpZWNlcy4gU3l6a2FsbGVyICpjYW4qIGhhbmRsZSBzdGF0aWMgZnVuY3Rpb25zIGlmIHRoZXkmIzM5O3JlIHVuaXF1ZWx5IGlkZW50aWZpYWJsZSwgb3Igd2UgY2FuIGp1c3QgbGlzdCB0aGVtIGV4cGxpY2l0bHksIGFuZCBzbywgdGhhdCYjMzk7cyB3aGF0IEkmIzM5O2xsIGRvLgoKVGhlcmVmb3JlLCBJJiMzOTt2ZSBleHBhbmRlZCB0aGUgbGlzdCB0byBpbmNsdWRlOiBgaHRhYl9lbGVtX2RlZmVyX2ZyZWVgLCBgaHRhYl9lbGVtX2ZyZWVfcmN1X2NiYCwgYGJwZl90YXNrX3dvcmtfY2FuY2VsX2FuZF9mcmVlYCwgYGh0YWJfbWFwX2ZyZWVgLCBgZnJlZV9odGFiX2VsZW1gLCBgaHRhYl9lbGVtX2ZyZWVgLCBhbmQgYGh0YWJfbHJ1X3B1c2hfZnJlZWAuIFllcywgSSYjMzk7dmUgY29uZmlybWVkIHRoYXQgYGh0YWJfZWxlbV9kZWZlcl9mcmVlYCBhbmQgYGh0YWJfZWxlbV9mcmVlX3JjdV9jYmAgYXJlIGluZGVlZCBzdGF0aWMgZnVuY3Rpb25zLgoKVGhpcyBpcyBhIHVzZS1hZnRlci1mcmVlIGZpeCwgYW5kIHRoYXQgd2FycmFudHMgYWdncmVzc2l2ZSBmdXp6aW5nLiBUaGUgZ29hbCBoZXJlIGlzIHRvIGVuc3VyZSB0aGUgZGVmZXJyZWQgZnJlZWluZyBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgYW55IG5ldyBpc3N1ZXMgb3IgbGVha3MuIFRoZXJlZm9yZSwgSSYjMzk7bSBzZXR0aW5nIGBXb3J0aEZ1enppbmdgIHRvIGB0cnVlYCwgYW5kIEkmIzM5O20gZW5hYmxpbmcgYEJQRl9TWVNDQUxMYCB2aWEgYEVuYWJsZUNvbmZpZ3NgLgoKSSBuZWVkIHRvIGZvY3VzIG91ciBmdXp6aW5nIG9uIHRoZSBjcml0aWNhbCBmdW5jdGlvbnMsIHNvIEkmIzM5O2xsIHNldCBgRm9jdXNTeW1ib2xzYCB0byB0aGUgZm9sbG93aW5nOiBgaHRhYl9lbGVtX2RlZmVyX2ZyZWVgLCBgaHRhYl9lbGVtX2ZyZWVfcmN1X2NiYCwgYGJwZl90YXNrX3dvcmtfY2FuY2VsX2FuZF9mcmVlYCwgYGh0YWJfbWFwX2ZyZWVgLCBgZnJlZV9odGFiX2VsZW1gLCBgaHRhYl9lbGVtX2ZyZWVgLCBhbmQgYGh0YWJfbHJ1X3B1c2hfZnJlZWAuCgpHaXZlbiB0aGF0IGNlcnRhaW4gZmllbGRzIGluIHRoZSBoYXNoIHRhYmxlIGVsZW1lbnRzIHdlcmUgcmVpbml0aWFsaXplZCwgSSBzaG91bGQgYWxzbyBpbmNsdWRlIHRoZSBgYWxsb2NfaHRhYl9lbGVtYCBhbmQgYHByZWFsbG9jX2xydV9wb3BgIGZ1bmN0aW9ucyBhcyBwYXJ0IG9mIG91ciBmdXp6aW5nIGZvY3VzLiBUaGlzIHNob3VsZCBwcm92aWRlIHN1ZmZpY2llbnQgZnV6emluZyBjb3ZlcmFnZS4KCk9rYXksIGxldCYjMzk7cyBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI0IDE5OjM1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCUEZfU1lTQ0FMTCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2h0YWJfZWxlbV9kZWZlcl9mcmVlJiMzNDssCiAgICAmIzM0O2h0YWJfZWxlbV9mcmVlX3JjdV9jYiYjMzQ7LAogICAgJiMzNDticGZfdGFza193b3JrX2NhbmNlbF9hbmRfZnJlZSYjMzQ7LAogICAgJiMzNDtodGFiX21hcF9mcmVlJiMzNDssCiAgICAmIzM0O2ZyZWVfaHRhYl9lbGVtJiMzNDssCiAgICAmIzM0O2h0YWJfZWxlbV9mcmVlJiMzNDssCiAgICAmIzM0O2h0YWJfbHJ1X3B1c2hfZnJlZSYjMzQ7LAogICAgJiMzNDthbGxvY19odGFiX2VsZW0mIzM0OywKICAgICYjMzQ7cHJlYWxsb2NfbHJ1X3BvcCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgQlBGIHN1YnN5c3RlbSB0byBkZWZlciB0aGUgZnJlZWluZyBvZiBoYXNoIHRhYmxlIGVsZW1lbnRzIGNvbnRhaW5pbmcgQlBGX1RBU0tfV09SSyBmaWVsZHMgdXNpbmcgY2FsbF9yY3VfdGFza3NfdHJhY2UuIFRoaXMgcHJldmVudHMgYSB1c2UtYWZ0ZXItZnJlZSB3aGVuIGEgdGFzayB3b3JrIGNhbGxiYWNrIGlzIHN0aWxsIHJ1bm5pbmcuIEl0IGFsc28gcmUtaW5pdGlhbGl6ZXMgc3BlY2lhbCBmaWVsZHMgZm9yIHJlY3ljbGVkIGVsZW1lbnRzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBCUEYgbWFwIGxvZ2ljIGFuZCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBjb3JyZWN0IG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBzY2hlZHVsaW5nIGJlaGF2aW9yLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCUEZfU1lTQ0FMTCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2h0YWJfZWxlbV9kZWZlcl9mcmVlJiMzNDssCiAgICAmIzM0O2h0YWJfZWxlbV9mcmVlX3JjdV9jYiYjMzQ7LAogICAgJiMzNDticGZfdGFza193b3JrX2NhbmNlbF9hbmRfZnJlZSYjMzQ7LAogICAgJiMzNDtodGFiX21hcF9mcmVlJiMzNDssCiAgICAmIzM0O2ZyZWVfaHRhYl9lbGVtJiMzNDssCiAgICAmIzM0O2h0YWJfZWxlbV9mcmVlJiMzNDssCiAgICAmIzM0O2h0YWJfbHJ1X3B1c2hfZnJlZSYjMzQ7LAogICAgJiMzNDthbGxvY19odGFiX2VsZW0mIzM0OywKICAgICYjMzQ7cHJlYWxsb2NfbHJ1X3BvcCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgQlBGIHN1YnN5c3RlbSB0byBkZWZlciB0aGUgZnJlZWluZyBvZiBoYXNoIHRhYmxlIGVsZW1lbnRzIGNvbnRhaW5pbmcgQlBGX1RBU0tfV09SSyBmaWVsZHMgdXNpbmcgY2FsbF9yY3VfdGFza3NfdHJhY2UuIFRoaXMgcHJldmVudHMgYSB1c2UtYWZ0ZXItZnJlZSB3aGVuIGEgdGFzayB3b3JrIGNhbGxiYWNrIGlzIHN0aWxsIHJ1bm5pbmcuIEl0IGFsc28gcmUtaW5pdGlhbGl6ZXMgc3BlY2lhbCBmaWVsZHMgZm9yIHJlY3ljbGVkIGVsZW1lbnRzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBCUEYgbWFwIGxvZ2ljIGFuZCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBjb3JyZWN0IG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBzY2hlZHVsaW5nIGJlaGF2aW9yLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDYtMjRUMTk6MzU6MDcuOTUxMDIyMzUzWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mzk2ODM4NTk4MDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX1NZU0NBTExcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJodGFiX2VsZW1fZGVmZXJfZnJlZVwiLFxuICAgIFwiaHRhYl9lbGVtX2ZyZWVfcmN1X2NiXCIsXG4gICAgXCJicGZfdGFza193b3JrX2NhbmNlbF9hbmRfZnJlZVwiLFxuICAgIFwiaHRhYl9tYXBfZnJlZVwiLFxuICAgIFwiZnJlZV9odGFiX2VsZW1cIixcbiAgICBcImh0YWJfZWxlbV9mcmVlXCIsXG4gICAgXCJodGFiX2xydV9wdXNoX2ZyZWVcIixcbiAgICBcImFsbG9jX2h0YWJfZWxlbVwiLFxuICAgIFwicHJlYWxsb2NfbHJ1X3BvcFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBCUEYgc3Vic3lzdGVtIHRvIGRlZmVyIHRoZSBmcmVlaW5nIG9mIGhhc2ggdGFibGUgZWxlbWVudHMgY29udGFpbmluZyBCUEZfVEFTS19XT1JLIGZpZWxkcyB1c2luZyBjYWxsX3JjdV90YXNrc190cmFjZS4gVGhpcyBwcmV2ZW50cyBhIHVzZS1hZnRlci1mcmVlIHdoZW4gYSB0YXNrIHdvcmsgY2FsbGJhY2sgaXMgc3RpbGwgcnVubmluZy4gSXQgYWxzbyByZS1pbml0aWFsaXplcyBzcGVjaWFsIGZpZWxkcyBmb3IgcmVjeWNsZWQgZWxlbWVudHMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIEJQRiBtYXAgbG9naWMgYW5kIHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIGNvcnJlY3QgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIHNjaGVkdWxpbmcgYmVoYXZpb3IuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI0VDE5OjM1OjA3Ljk1MTAyNzkxM1oiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDc0OTA4MDA5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgZGEyNmJiM2JjMWQ4ZTcxZmI5NzQ1MDYxZTczMjk3NWMyYzVjMWQ0M1xcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgV2VkIEp1biAyNCAxOTozNTowNiAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL2hhc2h0YWIuYyBiL2tlcm5lbC9icGYvaGFzaHRhYi5jXFxuaW5kZXggOWYzOTRlMWFhMmU4NWIuLjE5ZmE2MTkwOWU0ZmVkIDEwMDY0NFxcbi0tLSBhL2tlcm5lbC9icGYvaGFzaHRhYi5jXFxuKysrIGIva2VybmVsL2JwZi9oYXNodGFiLmNcXG5AQCAtMzEwLDYgKzMxMCw3IEBAIHN0YXRpYyBzdHJ1Y3QgaHRhYl9lbGVtICpwcmVhbGxvY19scnVfcG9wKHN0cnVjdCBicGZfaHRhYiAqaHRhYiwgdm9pZCAqa2V5LFxcbiBcXHRcXHRicGZfbWFwX2luY19lbGVtX2NvdW50KFxcdTAwMjZodGFiLVxcdTAwM2VtYXApO1xcbiBcXHRcXHRsID0gY29udGFpbmVyX29mKG5vZGUsIHN0cnVjdCBodGFiX2VsZW0sIGxydV9ub2RlKTtcXG4gXFx0XFx0bWVtY3B5KGwtXFx1MDAzZWtleSwga2V5LCBodGFiLVxcdTAwM2VtYXAua2V5X3NpemUpO1xcbitcXHRcXHRjaGVja19hbmRfaW5pdF9tYXBfdmFsdWUoXFx1MDAyNmh0YWItXFx1MDAzZW1hcCwgaHRhYl9lbGVtX3ZhbHVlKGwsIGh0YWItXFx1MDAzZW1hcC5rZXlfc2l6ZSkpO1xcbiBcXHRcXHRyZXR1cm4gbDtcXG4gXFx0fVxcbiBcXG5AQCAtOTUwLDEyICs5NTEsNjkgQEAgc3RhdGljIGludCBodGFiX21hcF9nZXRfbmV4dF9rZXkoc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5LCB2b2lkICpuZXh0X2tleSlcXG4gXFx0cmV0dXJuIC1FTk9FTlQ7XFxuIH1cXG4gXFxuKy8qIERlZmVycmVkIGh0YWJfZWxlbSBmcmVlIGZvciBicGZfdGFza193b3JrIG1hcHMuICBjYW5jZWxfYW5kX2ZyZWUoKVxcbisgKiByZXR1cm5zIHdoaWxlIHRoZSB0YXNrX3dvcmsgY2FsbGJhY2sgbWF5IHN0aWxsIGJlIGFjY2Vzc2luZyBtYXBfdmFsO1xcbisgKiB0aGUgY2FsbGJhY2sgaG9sZHMgZ3VhcmQocmN1X3Rhc2tzX3RyYWNlKSwgc28gZGVmZXJyaW5nIHRoZSByZWN5Y2xlXFxuKyAqIHRocm91Z2ggY2FsbF9yY3VfdGFza3NfdHJhY2UoKSB3YWl0cyBmb3IgaXQgKGFuZCwgc2luY2UgYSB0YXNrcyB0cmFjZVxcbisgKiBHUCBpbXBsaWVzIGEgcmVndWxhciBSQ1UgR1AsIGZvciBCUEYgdmFsdWUgcmVhZGVycyB0b28pIGJlZm9yZSB0aGVcXG4rICogZWxlbWVudCBpcyByZXVzZWQuICBBIGNhbGxiYWNrIHRoYXQgZW50ZXJzIGFmdGVyIHRoZSBHUCBmaW5kcyB0aGUgY3R4XFxuKyAqIGFscmVhZHkgRlJFRUQgYW5kIGJhaWxzIG91dC5cXG4rICovXFxuK3N0cnVjdCBodGFiX2VsZW1fZnJlZV9yY3Uge1xcbitcXHRzdHJ1Y3QgcmN1X2hlYWQgcmN1O1xcbitcXHRzdHJ1Y3QgYnBmX2h0YWIgKmh0YWI7XFxuK1xcdHN0cnVjdCBodGFiX2VsZW0gKmVsZW07XFxuK307XFxuK1xcbisvKiBSZXR1cm4gYW4gaHRhYl9lbGVtIHRvIGl0cyBtYXAncyBmcmVlIHBvb2w6IGJwZl9tZW1fY2FjaGVfZnJlZSBmb3JcXG4rICogbm9uLXByZWFsbG9jLCBwY3B1X2ZyZWVsaXN0X3B1c2ggZm9yIHByZWFsbG9jLCBicGZfbHJ1X3B1c2hfZnJlZSBmb3JcXG4rICogcHJlYWxsb2MgTFJVLlxcbisgKi9cXG4rc3RhdGljIHZvaWQgaHRhYl9lbGVtX3JlY3ljbGUoc3RydWN0IGJwZl9odGFiICpodGFiLCBzdHJ1Y3QgaHRhYl9lbGVtICpsKVxcbit7XFxuK1xcdGlmIChodGFiX2lzX3ByZWFsbG9jKGh0YWIpKSB7XFxuK1xcdFxcdGlmIChodGFiX2lzX2xydShodGFiKSlcXG4rXFx0XFx0XFx0YnBmX2xydV9wdXNoX2ZyZWUoXFx1MDAyNmh0YWItXFx1MDAzZWxydSwgXFx1MDAyNmwtXFx1MDAzZWxydV9ub2RlKTtcXG4rXFx0XFx0ZWxzZVxcbitcXHRcXHRcXHRwY3B1X2ZyZWVsaXN0X3B1c2goXFx1MDAyNmh0YWItXFx1MDAzZWZyZWVsaXN0LCBcXHUwMDI2bC1cXHUwMDNlZm5vZGUpO1xcbitcXHR9IGVsc2Uge1xcbitcXHRcXHRicGZfbWVtX2NhY2hlX2ZyZWUoXFx1MDAyNmh0YWItXFx1MDAzZW1hLCBsKTtcXG4rXFx0fVxcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBodGFiX2VsZW1fZnJlZV9yY3VfY2Ioc3RydWN0IHJjdV9oZWFkICpoZWFkKVxcbit7XFxuK1xcdHN0cnVjdCBodGFiX2VsZW1fZnJlZV9yY3UgKmZyID0gY29udGFpbmVyX29mKGhlYWQsIHN0cnVjdCBodGFiX2VsZW1fZnJlZV9yY3UsIHJjdSk7XFxuK1xcbitcXHRodGFiX2VsZW1fcmVjeWNsZShmci1cXHUwMDNlaHRhYiwgZnItXFx1MDAzZWVsZW0pO1xcbitcXHRrZnJlZShmcik7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIGh0YWJfZWxlbV9kZWZlcl9mcmVlKHN0cnVjdCBicGZfaHRhYiAqaHRhYiwgc3RydWN0IGh0YWJfZWxlbSAqbClcXG4re1xcbitcXHRzdHJ1Y3QgaHRhYl9lbGVtX2ZyZWVfcmN1ICpmcjtcXG4rXFxuK1xcdGZyID0ga21hbGxvY19vYmooKmZyLCBHRlBfQVRPTUlDKTtcXG4rXFx0aWYgKFdBUk5fT05fT05DRSghZnIpKSB7XFxuK1xcdFxcdC8qIEZhbGxiYWNrOiBpbW1lZGlhdGUgcmVjeWNsZSwgc21hbGwgVUFGIHJpc2sgKi9cXG4rXFx0XFx0aHRhYl9lbGVtX3JlY3ljbGUoaHRhYiwgbCk7XFxuK1xcdFxcdHJldHVybjtcXG4rXFx0fVxcbitcXHRmci1cXHUwMDNlaHRhYiA9IGh0YWI7XFxuK1xcdGZyLVxcdTAwM2VlbGVtID0gbDtcXG4rXFx0Y2FsbF9yY3VfdGFza3NfdHJhY2UoXFx1MDAyNmZyLVxcdTAwM2VyY3UsIGh0YWJfZWxlbV9mcmVlX3JjdV9jYik7XFxuK31cXG4rXFxuIHN0YXRpYyB2b2lkIGh0YWJfZWxlbV9mcmVlKHN0cnVjdCBicGZfaHRhYiAqaHRhYiwgc3RydWN0IGh0YWJfZWxlbSAqbClcXG4ge1xcbiBcXHRjaGVja19hbmRfY2FuY2VsX2ZpZWxkcyhodGFiLCBsKTtcXG4gXFxuIFxcdGlmIChodGFiLVxcdTAwM2VtYXAubWFwX3R5cGUgPT0gQlBGX01BUF9UWVBFX1BFUkNQVV9IQVNIKVxcbiBcXHRcXHRicGZfbWVtX2NhY2hlX2ZyZWUoXFx1MDAyNmh0YWItXFx1MDAzZXBjcHVfbWEsIGwtXFx1MDAzZXB0cl90b19wcHRyKTtcXG4rXFx0aWYgKGJ0Zl9yZWNvcmRfaGFzX2ZpZWxkKGh0YWItXFx1MDAzZW1hcC5yZWNvcmQsIEJQRl9UQVNLX1dPUkspKSB7XFxuK1xcdFxcdGh0YWJfZWxlbV9kZWZlcl9mcmVlKGh0YWIsIGwpO1xcbitcXHRcXHRyZXR1cm47XFxuK1xcdH1cXG4gXFx0YnBmX21lbV9jYWNoZV9mcmVlKFxcdTAwMjZodGFiLVxcdTAwM2VtYSwgbCk7XFxuIH1cXG4gXFxuQEAgLTEwMDYsNiArMTA2NCwxMCBAQCBzdGF0aWMgdm9pZCBmcmVlX2h0YWJfZWxlbShzdHJ1Y3QgYnBmX2h0YWIgKmh0YWIsIHN0cnVjdCBodGFiX2VsZW0gKmwpXFxuIFxcdGlmIChodGFiX2lzX3ByZWFsbG9jKGh0YWIpKSB7XFxuIFxcdFxcdGJwZl9tYXBfZGVjX2VsZW1fY291bnQoXFx1MDAyNmh0YWItXFx1MDAzZW1hcCk7XFxuIFxcdFxcdGNoZWNrX2FuZF9jYW5jZWxfZmllbGRzKGh0YWIsIGwpO1xcbitcXHRcXHRpZiAoYnRmX3JlY29yZF9oYXNfZmllbGQoaHRhYi1cXHUwMDNlbWFwLnJlY29yZCwgQlBGX1RBU0tfV09SSykpIHtcXG4rXFx0XFx0XFx0aHRhYl9lbGVtX2RlZmVyX2ZyZWUoaHRhYiwgbCk7XFxuK1xcdFxcdFxcdHJldHVybjtcXG4rXFx0XFx0fVxcbiBcXHRcXHRwY3B1X2ZyZWVsaXN0X3B1c2goXFx1MDAyNmh0YWItXFx1MDAzZWZyZWVsaXN0LCBcXHUwMDI2bC1cXHUwMDNlZm5vZGUpO1xcbiBcXHR9IGVsc2Uge1xcbiBcXHRcXHRkZWNfZWxlbV9jb3VudChodGFiKTtcXG5AQCAtMTExOCw2ICsxMTgwLDExIEBAIHN0YXRpYyBzdHJ1Y3QgaHRhYl9lbGVtICphbGxvY19odGFiX2VsZW0oc3RydWN0IGJwZl9odGFiICpodGFiLCB2b2lkICprZXksXFxuIFxcdH1cXG4gXFxuIFxcdG1lbWNweShsX25ldy1cXHUwMDNla2V5LCBrZXksIGtleV9zaXplKTtcXG4rXFx0LyogUmUtaW5pdGlhbGl6ZSBzcGVjaWFsIGZpZWxkcyBmb3IgcmVjeWNsZWQgZWxlbWVudHMuICBjb3B5X21hcF92YWx1ZSgpXFxuK1xcdCAqIHNraXBzIGJ0Zl9yZWNvcmQgZmllbGRzLCBzbyBhIHN0YWxlIEVSUl9QVFIoLUVCVVNZKSBsZWZ0IGJ5XFxuK1xcdCAqIGJwZl90YXNrX3dvcmtfY2FuY2VsX2FuZF9mcmVlIHdvdWxkIHBlcnNpc3QgYW5kIGJsb2NrIG5ldyBzY2hlZHVsaW5nLlxcbitcXHQgKi9cXG4rXFx0Y2hlY2tfYW5kX2luaXRfbWFwX3ZhbHVlKFxcdTAwMjZodGFiLVxcdTAwM2VtYXAsIGh0YWJfZWxlbV92YWx1ZShsX25ldywga2V5X3NpemUpKTtcXG4gXFx0aWYgKHBlcmNwdSkge1xcbiBcXHRcXHRpZiAocHJlYWxsb2MpIHtcXG4gXFx0XFx0XFx0cHB0ciA9IGh0YWJfZWxlbV9nZXRfcHRyKGxfbmV3LCBrZXlfc2l6ZSk7XFxuQEAgLTEyNzUsNiArMTM0MiwxMCBAQCBzdGF0aWMgdm9pZCBodGFiX2xydV9wdXNoX2ZyZWUoc3RydWN0IGJwZl9odGFiICpodGFiLCBzdHJ1Y3QgaHRhYl9lbGVtICplbGVtKVxcbiB7XFxuIFxcdGNoZWNrX2FuZF9jYW5jZWxfZmllbGRzKGh0YWIsIGVsZW0pO1xcbiBcXHRicGZfbWFwX2RlY19lbGVtX2NvdW50KFxcdTAwMjZodGFiLVxcdTAwM2VtYXApO1xcbitcXHRpZiAoYnRmX3JlY29yZF9oYXNfZmllbGQoaHRhYi1cXHUwMDNlbWFwLnJlY29yZCwgQlBGX1RBU0tfV09SSykpIHtcXG4rXFx0XFx0aHRhYl9lbGVtX2RlZmVyX2ZyZWUoaHRhYiwgZWxlbSk7XFxuK1xcdFxcdHJldHVybjtcXG4rXFx0fVxcbiBcXHRicGZfbHJ1X3B1c2hfZnJlZShcXHUwMDI2aHRhYi1cXHUwMDNlbHJ1LCBcXHUwMDI2ZWxlbS1cXHUwMDNlbHJ1X25vZGUpO1xcbiB9XFxuIFxcbkBAIC0xNjQxLDkgKzE3MTIsMTkgQEAgc3RhdGljIHZvaWQgaHRhYl9tYXBfZnJlZShzdHJ1Y3QgYnBmX21hcCAqbWFwKVxcbiBcXHRcXHRkZWxldGVfYWxsX2VsZW1lbnRzKGh0YWIpO1xcbiBcXHR9IGVsc2Uge1xcbiBcXHRcXHRodGFiX2ZyZWVfcHJlYWxsb2NlZF9maWVsZHMoaHRhYik7XFxuLVxcdFxcdHByZWFsbG9jX2Rlc3Ryb3koaHRhYik7XFxuIFxcdH1cXG4gXFxuK1xcdC8qIEZvciBicGZfdGFza193b3JrIG1hcHMsIGVsZW1lbnQgZnJlZXMgZGVmZXIgcmVjeWNsaW5nIHRocm91Z2hcXG4rXFx0ICogY2FsbF9yY3VfdGFza3NfdHJhY2UoKSBzbyBydW5uaW5nIGNhbGxiYWNrcyBmaW5pc2ggYmVmb3JlIHJldXNlLlxcbitcXHQgKiBXYWl0IGZvciBhbnkgaW4tZmxpZ2h0IGRlZmVycmVkIHJlY3ljbGVzIGhlcmUsIGJlZm9yZSB0aGVcXG4rXFx0ICogZnJlZWxpc3QvTFJVIGFuZCBlbGVtZW50IG1lbW9yeSBhcmUgdG9ybiBkb3duLlxcbitcXHQgKi9cXG4rXFx0aWYgKGJ0Zl9yZWNvcmRfaGFzX2ZpZWxkKGh0YWItXFx1MDAzZW1hcC5yZWNvcmQsIEJQRl9UQVNLX1dPUkspKVxcbitcXHRcXHRyY3VfYmFycmllcl90YXNrc190cmFjZSgpO1xcbitcXG4rXFx0aWYgKGh0YWJfaXNfcHJlYWxsb2MoaHRhYikpXFxuK1xcdFxcdHByZWFsbG9jX2Rlc3Ryb3koaHRhYik7XFxuK1xcbiBcXHRicGZfbWFwX2ZyZWVfZWxlbV9jb3VudChtYXApO1xcbiBcXHRmcmVlX3BlcmNwdShodGFiLVxcdTAwM2VleHRyYV9lbGVtcyk7XFxuIFxcdGJwZl9tYXBfYXJlYV9mcmVlKGh0YWItXFx1MDAzZWJ1Y2tldHMpO1xcbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL2hlbHBlcnMuYyBiL2tlcm5lbC9icGYvaGVscGVycy5jXFxuaW5kZXggYzE4ZjFlMTZlZGVlNGMuLjA3MDg4YWMxZjBiMmQ5IDEwMDY0NFxcbi0tLSBhL2tlcm5lbC9icGYvaGVscGVycy5jXFxuKysrIGIva2VybmVsL2JwZi9oZWxwZXJzLmNcXG5AQCAtNDQ1NCw3ICs0NDU0LDEwIEBAIHN0YXRpYyB2b2lkIGJwZl90YXNrX3dvcmtfY2FsbGJhY2soc3RydWN0IGNhbGxiYWNrX2hlYWQgKmNiKVxcbiBcXHR1MzIgaWR4O1xcbiBcXHR2b2lkICprZXk7XFxuIFxcbi1cXHQvKiBSZWFkIGxvY2sgaXMgbmVlZGVkIHRvIHByb3RlY3QgY3R4IGFuZCBtYXAga2V5L3ZhbHVlIGFjY2VzcyAqL1xcbitcXHQvKiBIb2xkIHJjdV9yZWFkX2xvY2tfdHJhY2Ugc28gdGhhdCBjYWxsX3JjdV90YXNrc190cmFjZSgpIGluXFxuK1xcdCAqIGh0YWJfZWxlbV9kZWZlcl9mcmVlKCkgd2FpdHMgZm9yIHRoaXMgY2FsbGJhY2sgdG8gZmluaXNoIGJlZm9yZVxcbitcXHQgKiByZWN5Y2xpbmcgdGhlIGh0YWJfZWxlbS5cXG4rXFx0ICovXFxuIFxcdGd1YXJkKHJjdV90YXNrc190cmFjZSkoKTtcXG4gXFx0LypcXG4gXFx0ICogVGhpcyBjYWxsYmFjayBtYXkgc3RhcnQgcnVubmluZyBiZWZvcmUgYnBmX3Rhc2tfd29ya19pcnEoKSBzd2l0Y2hlZCB0b1xcbkBAIC00Nzg0LDggKzQ3ODcsOCBAQCB2b2lkIGJwZl90YXNrX3dvcmtfY2FuY2VsX2FuZF9mcmVlKHZvaWQgKnZhbClcXG4gXFx0c3RydWN0IGJwZl90YXNrX3dvcmtfY3R4ICpjdHg7XFxuIFxcdGVudW0gYnBmX3Rhc2tfd29ya19zdGF0ZSBzdGF0ZTtcXG4gXFxuLVxcdGN0eCA9IHhjaGcoXFx1MDAyNnR3ay1cXHUwMDNlY3R4LCBOVUxMKTtcXG4tXFx0aWYgKCFjdHgpXFxuK1xcdGN0eCA9IHhjaGcoXFx1MDAyNnR3ay1cXHUwMDNlY3R4LCBFUlJfUFRSKC1FQlVTWSkpO1xcbitcXHRpZiAoSVNfRVJSX09SX05VTEwoY3R4KSlcXG4gXFx0XFx0cmV0dXJuO1xcbiBcXG4gXFx0c3RhdGUgPSB4Y2hnKFxcdTAwMjZjdHgtXFx1MDAzZXN0YXRlLCBCUEZfVFdfRlJFRUQpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNFQxOTozNTowOC40MjY2MDA5NDJaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM5MjA4MjcxMjQ1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9TWVNDQUxMXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaHRhYl9lbGVtX2RlZmVyX2ZyZWVcIixcbiAgICBcImh0YWJfZWxlbV9mcmVlX3JjdV9jYlwiLFxuICAgIFwiYnBmX3Rhc2tfd29ya19jYW5jZWxfYW5kX2ZyZWVcIixcbiAgICBcImh0YWJfbWFwX2ZyZWVcIixcbiAgICBcImZyZWVfaHRhYl9lbGVtXCIsXG4gICAgXCJodGFiX2VsZW1fZnJlZVwiLFxuICAgIFwiaHRhYl9scnVfcHVzaF9mcmVlXCIsXG4gICAgXCJhbGxvY19odGFiX2VsZW1cIixcbiAgICBcInByZWFsbG9jX2xydV9wb3BcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgQlBGIHN1YnN5c3RlbSB0byBkZWZlciB0aGUgZnJlZWluZyBvZiBoYXNoIHRhYmxlIGVsZW1lbnRzIGNvbnRhaW5pbmcgQlBGX1RBU0tfV09SSyBmaWVsZHMgdXNpbmcgY2FsbF9yY3VfdGFza3NfdHJhY2UuIFRoaXMgcHJldmVudHMgYSB1c2UtYWZ0ZXItZnJlZSB3aGVuIGEgdGFzayB3b3JrIGNhbGxiYWNrIGlzIHN0aWxsIHJ1bm5pbmcuIEl0IGFsc28gcmUtaW5pdGlhbGl6ZXMgc3BlY2lhbCBmaWVsZHMgZm9yIHJlY3ljbGVkIGVsZW1lbnRzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBCUEYgbWFwIGxvZ2ljIGFuZCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBjb3JyZWN0IG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBzY2hlZHVsaW5nIGJlaGF2aW9yLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG5ldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0XG4gICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksXG4gICBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGRhMjZiYjNiYzFkOGU3MWZiOTc0NTA2MWU3MzI5NzVjMmM1YzFkNDNcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIEp1biAyNCAxOTozNTowNiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvaGFzaHRhYi5jIGIva2VybmVsL2JwZi9oYXNodGFiLmNcbmluZGV4IDlmMzk0ZTFhYTJlODViLi4xOWZhNjE5MDllNGZlZCAxMDA2NDRcbi0tLSBhL2tlcm5lbC9icGYvaGFzaHRhYi5jXG4rKysgYi9rZXJuZWwvYnBmL2hhc2h0YWIuY1xuQEAgLTMxMCw2ICszMTAsNyBAQCBzdGF0aWMgc3RydWN0IGh0YWJfZWxlbSAqcHJlYWxsb2NfbHJ1X3BvcChzdHJ1Y3QgYnBmX2h0YWIgKmh0YWIsIHZvaWQgKmtleSxcbiBcdFx0YnBmX21hcF9pbmNfZWxlbV9jb3VudChcdTAwMjZodGFiLVx1MDAzZW1hcCk7XG4gXHRcdGwgPSBjb250YWluZXJfb2Yobm9kZSwgc3RydWN0IGh0YWJfZWxlbSwgbHJ1X25vZGUpO1xuIFx0XHRtZW1jcHkobC1cdTAwM2VrZXksIGtleSwgaHRhYi1cdTAwM2VtYXAua2V5X3NpemUpO1xuK1x0XHRjaGVja19hbmRfaW5pdF9tYXBfdmFsdWUoXHUwMDI2aHRhYi1cdTAwM2VtYXAsIGh0YWJfZWxlbV92YWx1ZShsLCBodGFiLVx1MDAzZW1hcC5rZXlfc2l6ZSkpO1xuIFx0XHRyZXR1cm4gbDtcbiBcdH1cbiBcbkBAIC05NTAsMTIgKzk1MSw2OSBAQCBzdGF0aWMgaW50IGh0YWJfbWFwX2dldF9uZXh0X2tleShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXksIHZvaWQgKm5leHRfa2V5KVxuIFx0cmV0dXJuIC1FTk9FTlQ7XG4gfVxuIFxuKy8qIERlZmVycmVkIGh0YWJfZWxlbSBmcmVlIGZvciBicGZfdGFza193b3JrIG1hcHMuICBjYW5jZWxfYW5kX2ZyZWUoKVxuKyAqIHJldHVybnMgd2hpbGUgdGhlIHRhc2tfd29yayBjYWxsYmFjayBtYXkgc3RpbGwgYmUgYWNjZXNzaW5nIG1hcF92YWw7XG4rICogdGhlIGNhbGxiYWNrIGhvbGRzIGd1YXJkKHJjdV90YXNrc190cmFjZSksIHNvIGRlZmVycmluZyB0aGUgcmVjeWNsZVxuKyAqIHRocm91Z2ggY2FsbF9yY3VfdGFza3NfdHJhY2UoKSB3YWl0cyBmb3IgaXQgKGFuZCwgc2luY2UgYSB0YXNrcyB0cmFjZVxuKyAqIEdQIGltcGxpZXMgYSByZWd1bGFyIFJDVSBHUCwgZm9yIEJQRiB2YWx1ZSByZWFkZXJzIHRvbykgYmVmb3JlIHRoZVxuKyAqIGVsZW1lbnQgaXMgcmV1c2VkLiAgQSBjYWxsYmFjayB0aGF0IGVudGVycyBhZnRlciB0aGUgR1AgZmluZHMgdGhlIGN0eFxuKyAqIGFscmVhZHkgRlJFRUQgYW5kIGJhaWxzIG91dC5cbisgKi9cbitzdHJ1Y3QgaHRhYl9lbGVtX2ZyZWVfcmN1IHtcbitcdHN0cnVjdCByY3VfaGVhZCByY3U7XG4rXHRzdHJ1Y3QgYnBmX2h0YWIgKmh0YWI7XG4rXHRzdHJ1Y3QgaHRhYl9lbGVtICplbGVtO1xuK307XG4rXG4rLyogUmV0dXJuIGFuIGh0YWJfZWxlbSB0byBpdHMgbWFwJ3MgZnJlZSBwb29sOiBicGZfbWVtX2NhY2hlX2ZyZWUgZm9yXG4rICogbm9uLXByZWFsbG9jLCBwY3B1X2ZyZWVsaXN0X3B1c2ggZm9yIHByZWFsbG9jLCBicGZfbHJ1X3B1c2hfZnJlZSBmb3JcbisgKiBwcmVhbGxvYyBMUlUuXG4rICovXG4rc3RhdGljIHZvaWQgaHRhYl9lbGVtX3JlY3ljbGUoc3RydWN0IGJwZl9odGFiICpodGFiLCBzdHJ1Y3QgaHRhYl9lbGVtICpsKVxuK3tcbitcdGlmIChodGFiX2lzX3ByZWFsbG9jKGh0YWIpKSB7XG4rXHRcdGlmIChodGFiX2lzX2xydShodGFiKSlcbitcdFx0XHRicGZfbHJ1X3B1c2hfZnJlZShcdTAwMjZodGFiLVx1MDAzZWxydSwgXHUwMDI2bC1cdTAwM2VscnVfbm9kZSk7XG4rXHRcdGVsc2VcbitcdFx0XHRwY3B1X2ZyZWVsaXN0X3B1c2goXHUwMDI2aHRhYi1cdTAwM2VmcmVlbGlzdCwgXHUwMDI2bC1cdTAwM2Vmbm9kZSk7XG4rXHR9IGVsc2Uge1xuK1x0XHRicGZfbWVtX2NhY2hlX2ZyZWUoXHUwMDI2aHRhYi1cdTAwM2VtYSwgbCk7XG4rXHR9XG4rfVxuK1xuK3N0YXRpYyB2b2lkIGh0YWJfZWxlbV9mcmVlX3JjdV9jYihzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQpXG4re1xuK1x0c3RydWN0IGh0YWJfZWxlbV9mcmVlX3JjdSAqZnIgPSBjb250YWluZXJfb2YoaGVhZCwgc3RydWN0IGh0YWJfZWxlbV9mcmVlX3JjdSwgcmN1KTtcbitcbitcdGh0YWJfZWxlbV9yZWN5Y2xlKGZyLVx1MDAzZWh0YWIsIGZyLVx1MDAzZWVsZW0pO1xuK1x0a2ZyZWUoZnIpO1xuK31cbitcbitzdGF0aWMgdm9pZCBodGFiX2VsZW1fZGVmZXJfZnJlZShzdHJ1Y3QgYnBmX2h0YWIgKmh0YWIsIHN0cnVjdCBodGFiX2VsZW0gKmwpXG4re1xuK1x0c3RydWN0IGh0YWJfZWxlbV9mcmVlX3JjdSAqZnI7XG4rXG4rXHRmciA9IGttYWxsb2Nfb2JqKCpmciwgR0ZQX0FUT01JQyk7XG4rXHRpZiAoV0FSTl9PTl9PTkNFKCFmcikpIHtcbitcdFx0LyogRmFsbGJhY2s6IGltbWVkaWF0ZSByZWN5Y2xlLCBzbWFsbCBVQUYgcmlzayAqL1xuK1x0XHRodGFiX2VsZW1fcmVjeWNsZShodGFiLCBsKTtcbitcdFx0cmV0dXJuO1xuK1x0fVxuK1x0ZnItXHUwMDNlaHRhYiA9IGh0YWI7XG4rXHRmci1cdTAwM2VlbGVtID0gbDtcbitcdGNhbGxfcmN1X3Rhc2tzX3RyYWNlKFx1MDAyNmZyLVx1MDAzZXJjdSwgaHRhYl9lbGVtX2ZyZWVfcmN1X2NiKTtcbit9XG4rXG4gc3RhdGljIHZvaWQgaHRhYl9lbGVtX2ZyZWUoc3RydWN0IGJwZl9odGFiICpodGFiLCBzdHJ1Y3QgaHRhYl9lbGVtICpsKVxuIHtcbiBcdGNoZWNrX2FuZF9jYW5jZWxfZmllbGRzKGh0YWIsIGwpO1xuIFxuIFx0aWYgKGh0YWItXHUwMDNlbWFwLm1hcF90eXBlID09IEJQRl9NQVBfVFlQRV9QRVJDUFVfSEFTSClcbiBcdFx0YnBmX21lbV9jYWNoZV9mcmVlKFx1MDAyNmh0YWItXHUwMDNlcGNwdV9tYSwgbC1cdTAwM2VwdHJfdG9fcHB0cik7XG4rXHRpZiAoYnRmX3JlY29yZF9oYXNfZmllbGQoaHRhYi1cdTAwM2VtYXAucmVjb3JkLCBCUEZfVEFTS19XT1JLKSkge1xuK1x0XHRodGFiX2VsZW1fZGVmZXJfZnJlZShodGFiLCBsKTtcbitcdFx0cmV0dXJuO1xuK1x0fVxuIFx0YnBmX21lbV9jYWNoZV9mcmVlKFx1MDAyNmh0YWItXHUwMDNlbWEsIGwpO1xuIH1cbiBcbkBAIC0xMDA2LDYgKzEwNjQsMTAgQEAgc3RhdGljIHZvaWQgZnJlZV9odGFiX2VsZW0oc3RydWN0IGJwZl9odGFiICpodGFiLCBzdHJ1Y3QgaHRhYl9lbGVtICpsKVxuIFx0aWYgKGh0YWJfaXNfcHJlYWxsb2MoaHRhYikpIHtcbiBcdFx0YnBmX21hcF9kZWNfZWxlbV9jb3VudChcdTAwMjZodGFiLVx1MDAzZW1hcCk7XG4gXHRcdGNoZWNrX2FuZF9jYW5jZWxfZmllbGRzKGh0YWIsIGwpO1xuK1x0XHRpZiAoYnRmX3JlY29yZF9oYXNfZmllbGQoaHRhYi1cdTAwM2VtYXAucmVjb3JkLCBCUEZfVEFTS19XT1JLKSkge1xuK1x0XHRcdGh0YWJfZWxlbV9kZWZlcl9mcmVlKGh0YWIsIGwpO1xuK1x0XHRcdHJldHVybjtcbitcdFx0fVxuIFx0XHRwY3B1X2ZyZWVsaXN0X3B1c2goXHUwMDI2aHRhYi1cdTAwM2VmcmVlbGlzdCwgXHUwMDI2bC1cdTAwM2Vmbm9kZSk7XG4gXHR9IGVsc2Uge1xuIFx0XHRkZWNfZWxlbV9jb3VudChodGFiKTtcbkBAIC0xMTE4LDYgKzExODAsMTEgQEAgc3RhdGljIHN0cnVjdCBodGFiX2VsZW0gKmFsbG9jX2h0YWJfZWxlbShzdHJ1Y3QgYnBmX2h0YWIgKmh0YWIsIHZvaWQgKmtleSxcbiBcdH1cbiBcbiBcdG1lbWNweShsX25ldy1cdTAwM2VrZXksIGtleSwga2V5X3NpemUpO1xuK1x0LyogUmUtaW5pdGlhbGl6ZSBzcGVjaWFsIGZpZWxkcyBmb3IgcmVjeWNsZWQgZWxlbWVudHMuICBjb3B5X21hcF92YWx1ZSgpXG4rXHQgKiBza2lwcyBidGZfcmVjb3JkIGZpZWxkcywgc28gYSBzdGFsZSBFUlJfUFRSKC1FQlVTWSkgbGVmdCBieVxuK1x0ICogYnBmX3Rhc2tfd29ya19jYW5jZWxfYW5kX2ZyZWUgd291bGQgcGVyc2lzdCBhbmQgYmxvY2sgbmV3IHNjaGVkdWxpbmcuXG4rXHQgKi9cbitcdGNoZWNrX2FuZF9pbml0X21hcF92YWx1ZShcdTAwMjZodGFiLVx1MDAzZW1hcCwgaHRhYl9lbGVtX3ZhbHVlKGxfbmV3LCBrZXlfc2l6ZSkpO1xuIFx0aWYgKHBlcmNwdSkge1xuIFx0XHRpZiAocHJlYWxsb2MpIHtcbiBcdFx0XHRwcHRyID0gaHRhYl9lbGVtX2dldF9wdHIobF9uZXcsIGtleV9zaXplKTtcbkBAIC0xMjc1LDYgKzEzNDIsMTAgQEAgc3RhdGljIHZvaWQgaHRhYl9scnVfcHVzaF9mcmVlKHN0cnVjdCBicGZfaHRhYiAqaHRhYiwgc3RydWN0IGh0YWJfZWxlbSAqZWxlbSlcbiB7XG4gXHRjaGVja19hbmRfY2FuY2VsX2ZpZWxkcyhodGFiLCBlbGVtKTtcbiBcdGJwZl9tYXBfZGVjX2VsZW1fY291bnQoXHUwMDI2aHRhYi1cdTAwM2VtYXApO1xuK1x0aWYgKGJ0Zl9yZWNvcmRfaGFzX2ZpZWxkKGh0YWItXHUwMDNlbWFwLnJlY29yZCwgQlBGX1RBU0tfV09SSykpIHtcbitcdFx0aHRhYl9lbGVtX2RlZmVyX2ZyZWUoaHRhYiwgZWxlbSk7XG4rXHRcdHJldHVybjtcbitcdH1cbiBcdGJwZl9scnVfcHVzaF9mcmVlKFx1MDAyNmh0YWItXHUwMDNlbHJ1LCBcdTAwMjZlbGVtLVx1MDAzZWxydV9ub2RlKTtcbiB9XG4gXG5AQCAtMTY0MSw5ICsxNzEyLDE5IEBAIHN0YXRpYyB2b2lkIGh0YWJfbWFwX2ZyZWUoc3RydWN0IGJwZl9tYXAgKm1hcClcbiBcdFx0ZGVsZXRlX2FsbF9lbGVtZW50cyhodGFiKTtcbiBcdH0gZWxzZSB7XG4gXHRcdGh0YWJfZnJlZV9wcmVhbGxvY2VkX2ZpZWxkcyhodGFiKTtcbi1cdFx0cHJlYWxsb2NfZGVzdHJveShodGFiKTtcbiBcdH1cbiBcbitcdC8qIEZvciBicGZfdGFza193b3JrIG1hcHMsIGVsZW1lbnQgZnJlZXMgZGVmZXIgcmVjeWNsaW5nIHRocm91Z2hcbitcdCAqIGNhbGxfcmN1X3Rhc2tzX3RyYWNlKCkgc28gcnVubmluZyBjYWxsYmFja3MgZmluaXNoIGJlZm9yZSByZXVzZS5cbitcdCAqIFdhaXQgZm9yIGFueSBpbi1mbGlnaHQgZGVmZXJyZWQgcmVjeWNsZXMgaGVyZSwgYmVmb3JlIHRoZVxuK1x0ICogZnJlZWxpc3QvTFJVIGFuZCBlbGVtZW50IG1lbW9yeSBhcmUgdG9ybiBkb3duLlxuK1x0ICovXG4rXHRpZiAoYnRmX3JlY29yZF9oYXNfZmllbGQoaHRhYi1cdTAwM2VtYXAucmVjb3JkLCBCUEZfVEFTS19XT1JLKSlcbitcdFx0cmN1X2JhcnJpZXJfdGFza3NfdHJhY2UoKTtcbitcbitcdGlmIChodGFiX2lzX3ByZWFsbG9jKGh0YWIpKVxuK1x0XHRwcmVhbGxvY19kZXN0cm95KGh0YWIpO1xuK1xuIFx0YnBmX21hcF9mcmVlX2VsZW1fY291bnQobWFwKTtcbiBcdGZyZWVfcGVyY3B1KGh0YWItXHUwMDNlZXh0cmFfZWxlbXMpO1xuIFx0YnBmX21hcF9hcmVhX2ZyZWUoaHRhYi1cdTAwM2VidWNrZXRzKTtcbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL2hlbHBlcnMuYyBiL2tlcm5lbC9icGYvaGVscGVycy5jXG5pbmRleCBjMThmMWUxNmVkZWU0Yy4uMDcwODhhYzFmMGIyZDkgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvYnBmL2hlbHBlcnMuY1xuKysrIGIva2VybmVsL2JwZi9oZWxwZXJzLmNcbkBAIC00NDU0LDcgKzQ0NTQsMTAgQEAgc3RhdGljIHZvaWQgYnBmX3Rhc2tfd29ya19jYWxsYmFjayhzdHJ1Y3QgY2FsbGJhY2tfaGVhZCAqY2IpXG4gXHR1MzIgaWR4O1xuIFx0dm9pZCAqa2V5O1xuIFxuLVx0LyogUmVhZCBsb2NrIGlzIG5lZWRlZCB0byBwcm90ZWN0IGN0eCBhbmQgbWFwIGtleS92YWx1ZSBhY2Nlc3MgKi9cbitcdC8qIEhvbGQgcmN1X3JlYWRfbG9ja190cmFjZSBzbyB0aGF0IGNhbGxfcmN1X3Rhc2tzX3RyYWNlKCkgaW5cbitcdCAqIGh0YWJfZWxlbV9kZWZlcl9mcmVlKCkgd2FpdHMgZm9yIHRoaXMgY2FsbGJhY2sgdG8gZmluaXNoIGJlZm9yZVxuK1x0ICogcmVjeWNsaW5nIHRoZSBodGFiX2VsZW0uXG4rXHQgKi9cbiBcdGd1YXJkKHJjdV90YXNrc190cmFjZSkoKTtcbiBcdC8qXG4gXHQgKiBUaGlzIGNhbGxiYWNrIG1heSBzdGFydCBydW5uaW5nIGJlZm9yZSBicGZfdGFza193b3JrX2lycSgpIHN3aXRjaGVkIHRvXG5AQCAtNDc4NCw4ICs0Nzg3LDggQEAgdm9pZCBicGZfdGFza193b3JrX2NhbmNlbF9hbmRfZnJlZSh2b2lkICp2YWwpXG4gXHRzdHJ1Y3QgYnBmX3Rhc2tfd29ya19jdHggKmN0eDtcbiBcdGVudW0gYnBmX3Rhc2tfd29ya19zdGF0ZSBzdGF0ZTtcbiBcbi1cdGN0eCA9IHhjaGcoXHUwMDI2dHdrLVx1MDAzZWN0eCwgTlVMTCk7XG4tXHRpZiAoIWN0eClcbitcdGN0eCA9IHhjaGcoXHUwMDI2dHdrLVx1MDAzZWN0eCwgRVJSX1BUUigtRUJVU1kpKTtcbitcdGlmIChJU19FUlJfT1JfTlVMTChjdHgpKVxuIFx0XHRyZXR1cm47XG4gXG4gXHRzdGF0ZSA9IHhjaGcoXHUwMDI2Y3R4LVx1MDAzZXN0YXRlLCBCUEZfVFdfRlJFRUQpO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjRUMTk6MzU6MDguNDI2NjAyNTYyWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjMzMjkwNjU2MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBCUEYgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBhIHBhdGNoIHRoYXQncyBtYWtpbmcgY2hhbmdlcyBpbiBga2VybmVsL2JwZi9oYXNodGFiLmNgIGFuZCBga2VybmVsL2JwZi9oZWxwZXJzLmNgLiBJdCdzIGludHJvZHVjaW5nIGEgZGVmZXJyZWQgZnJlZSBtZWNoYW5pc20gc3BlY2lmaWNhbGx5IGZvciBgaHRhYl9lbGVtYCBzdHJ1Y3R1cmVzIHdpdGhpbiBCUEYgbWFwcyB0aGF0IHV0aWxpemUgYEJQRl9UQVNLX1dPUktgIGZpZWxkcy4gVGhlIGdvYWwgaGVyZSBpcyBwcmV0dHkgY2xlYXI6IHByZXZlbnQgYSBVc2UtQWZ0ZXItRnJlZSAoVUFGKSBzaXR1YXRpb24uIFRoZSBpbXBsZW1lbnRhdGlvbiB1c2VzIGBjYWxsX3JjdV90YXNrc190cmFjZWAgdG8gcG9zdHBvbmUgdGhlIGVsZW1lbnQgcmVjeWNsaW5nLCBlbnN1cmluZyB0aGF0IGBicGZfdGFza193b3JrX2NhbmNlbF9hbmRfZnJlZWAgZG9lc24ndCBnZXQgY2FsbGVkIHdoaWxlIHRoZSB0YXNrIHdvcmsgY2FsbGJhY2sgaXMgc3RpbGwgYWN0aXZlLlxuXG5UaGV5J3ZlIGFsc28gbW9kaWZpZWQgYGJwZl90YXNrX3dvcmtfY2FuY2VsX2FuZF9mcmVlYCB0byBzZXQgYHR3ay1cdTAwM2VjdHhgIHRvIGBFUlJfUFRSKC1FQlVTWSlgIGluc3RlYWQgb2YgYE5VTExgLiBTbWFydCwgdGhhdCdzIGEgZ29vZCB3YXkgdG8gc2lnbmFsIHRoYXQgdGhlIHJlc291cmNlIGlzIHRlbXBvcmFyaWx5IHVuYXZhaWxhYmxlLiBBbmQgaW4gYGFsbG9jX2h0YWJfZWxlbWAgYW5kIGBwcmVhbGxvY19scnVfcG9wYCwgdGhlIHNwZWNpYWwgZmllbGRzIG9mIHJlY3ljbGVkIGVsZW1lbnRzIGFyZSBiZWluZyByZS1pbml0aWFsaXplZCB2aWEgYGNoZWNrX2FuZF9pbml0X21hcF92YWx1ZWAuIFRoaXMgaXMgYWxsIGZhaXJseSBzdGFuZGFyZCBwcmFjdGljZSBmb3IgbWFuYWdpbmcgcmVjeWNsZWQgbWVtb3J5IGFuZCBlbnN1cmluZyBjb25zaXN0ZW50IHN0YXRlIGFmdGVyIHJldXNlLlxuXG5UaGlzIGlzIGEgcHJldHR5IGZ1bmRhbWVudGFsIG1vZGlmaWNhdGlvbiB3aXRoaW4gdGhlIGNvcmUgQlBGIHN1YnN5c3RlbSwgaW1wYWN0aW5nIG1hcHMgdGhhdCB1c2UgYGJwZl90YXNrX3dvcmtgLiBHaXZlbiB0aGUgcG90ZW50aWFsIGZvciBjb25jdXJyZW5jeSBpc3N1ZXMgYW5kIHRoZSBmb2N1cyBvbiBwcmV2ZW50aW5nIFVBRiwgdGhpcyAqYWJzb2x1dGVseSogbmVlZHMgcmlnb3JvdXMgZnV6emluZy4gSSdsbCBuZWVkIHRvIGlkZW50aWZ5IHRoZSByZWxldmFudCBrZXJuZWwgY29uZmlndXJhdGlvbnMgdG8gZW5zdXJlIHByb3BlciB0ZXN0aW5nLlxuXG5GaXJzdCwgYEJQRl9TWVNDQUxMYCBpcyB0aGUgb2J2aW91cyBvbmUsIHRoZSBjb3JlIEJQRiBmdW5jdGlvbmFsaXR5LiBCdXQgSSBuZWVkIHRvIGNoZWNrIGZvciBhbnkgc3BlY2lmaWMgY29uZmlndXJhdGlvbnMgcmVsYXRlZCB0byBgQlBGX1RBU0tfV09SS2Agb3Igc29tZXRoaW5nIHNpbWlsYXIsIG1heWJlIHRoZXJlIGFyZSBjb25kaXRpb25hbCBjb21waWxhdGlvbiBhc3BlY3RzIGF0IHBsYXkuIEknbGwgcHVsbCBvdXQgYGdyZXBwZXJgIGFuZCBzZWFyY2ggZm9yIGBCUEZfVEFTS19XT1JLYCB3aXRoaW4gdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uIGZpbGVzIHRvIHBpbnBvaW50IHRob3NlIHJlbGV2YW50IHN5bWJvbHMuIFRoaXMgaXMgd2hlcmUgSSdsbCByZWFsbHkgaG9uZSBpbiBvbiB0aGUgcGF0Y2gncyBpbXBhY3QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQwNDgsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOTcsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNFQxOTozNToxNC43NTk1MTI1OTRaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjM2ODAwNjMzMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJCUEZfVEFTS19XT1JLXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvYnBmLmg9MTk4PWVudW0gYnRmX2ZpZWxkX3R5cGUge1xcbi0tXFxuaW5jbHVkZS9saW51eC9icGYuaC0yMTQtXFx0QlBGX1JFU19TUElOX0xPQ0sgPSAoMSBcXHUwMDNjXFx1MDAzYyAxMiksXFxuaW5jbHVkZS9saW51eC9icGYuaDoyMTU6XFx0QlBGX1RBU0tfV09SSyAgPSAoMSBcXHUwMDNjXFx1MDAzYyAxMyksXFxuaW5jbHVkZS9saW51eC9icGYuaC0yMTYtfTtcXG4tLVxcbmluY2x1ZGUvbGludXgvYnBmLmg9MzQ2PXN0YXRpYyBpbmxpbmUgY29uc3QgY2hhciAqYnRmX2ZpZWxkX3R5cGVfbmFtZShlbnVtIGJ0Zl9maWVsZF90eXBlIHR5cGUpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2JwZi5oLTM3My1cXHRcXHRyZXR1cm4gXFxcImJwZl9yZWZjb3VudFxcXCI7XFxuaW5jbHVkZS9saW51eC9icGYuaDozNzQ6XFx0Y2FzZSBCUEZfVEFTS19XT1JLOlxcbmluY2x1ZGUvbGludXgvYnBmLmgtMzc1LVxcdFxcdHJldHVybiBcXFwiYnBmX3Rhc2tfd29ya1xcXCI7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2JwZi5oPTM4OD1zdGF0aWMgaW5saW5lIHUzMiBidGZfZmllbGRfdHlwZV9zaXplKGVudW0gYnRmX2ZpZWxkX3R5cGUgdHlwZSlcXG4tLVxcbmluY2x1ZGUvbGludXgvYnBmLmgtNDEzLVxcdFxcdHJldHVybiBzaXplb2Yoc3RydWN0IGJwZl9yZWZjb3VudCk7XFxuaW5jbHVkZS9saW51eC9icGYuaDo0MTQ6XFx0Y2FzZSBCUEZfVEFTS19XT1JLOlxcbmluY2x1ZGUvbGludXgvYnBmLmgtNDE1LVxcdFxcdHJldHVybiBzaXplb2Yoc3RydWN0IGJwZl90YXNrX3dvcmspO1xcbi0tXFxuaW5jbHVkZS9saW51eC9icGYuaD00MjI9c3RhdGljIGlubGluZSB1MzIgYnRmX2ZpZWxkX3R5cGVfYWxpZ24oZW51bSBidGZfZmllbGRfdHlwZSB0eXBlKVxcbi0tXFxuaW5jbHVkZS9saW51eC9icGYuaC00NDctXFx0XFx0cmV0dXJuIF9fYWxpZ25vZl9fKHN0cnVjdCBicGZfcmVmY291bnQpO1xcbmluY2x1ZGUvbGludXgvYnBmLmg6NDQ4OlxcdGNhc2UgQlBGX1RBU0tfV09SSzpcXG5pbmNsdWRlL2xpbnV4L2JwZi5oLTQ0OS1cXHRcXHRyZXR1cm4gX19hbGlnbm9mX18oc3RydWN0IGJwZl90YXNrX3dvcmspO1xcbi0tXFxuaW5jbHVkZS9saW51eC9icGYuaD00NTY9c3RhdGljIGlubGluZSB2b2lkIGJwZl9vYmpfaW5pdF9maWVsZChjb25zdCBzdHJ1Y3QgYnRmX2ZpZWxkICpmaWVsZCwgdm9pZCAqYWRkcilcXG4tLVxcbmluY2x1ZGUvbGludXgvYnBmLmgtNDgwLVxcdGNhc2UgQlBGX1VQVFI6XFxuaW5jbHVkZS9saW51eC9icGYuaDo0ODE6XFx0Y2FzZSBCUEZfVEFTS19XT1JLOlxcbmluY2x1ZGUvbGludXgvYnBmLmgtNDgyLVxcdFxcdGJyZWFrO1xcbi0tXFxuaW5jbHVkZS9saW51eC9icGYuaD00OTY9c3RhdGljIGlubGluZSBib29sIGJ0Zl9maWVsZF9pc19ubWlfc2FmZShlbnVtIGJ0Zl9maWVsZF90eXBlIHR5cGUpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2JwZi5oLTUwMi1cXHRjYXNlIEJQRl9XT1JLUVVFVUU6XFxuaW5jbHVkZS9saW51eC9icGYuaDo1MDM6XFx0Y2FzZSBCUEZfVEFTS19XT1JLOlxcbmluY2x1ZGUvbGludXgvYnBmLmgtNTA0LVxcdGNhc2UgQlBGX0tQVFJfVU5SRUY6XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2JwZi5oPTcwMz1zdGF0aWMgaW5saW5lIGJvb2wgYnBmX21hcF9oYXNfaW50ZXJuYWxfc3RydWN0cyhzdHJ1Y3QgYnBmX21hcCAqbWFwKVxcbmluY2x1ZGUvbGludXgvYnBmLmgtNzA0LXtcXG5pbmNsdWRlL2xpbnV4L2JwZi5oOjcwNTpcXHRyZXR1cm4gYnRmX3JlY29yZF9oYXNfZmllbGQobWFwLVxcdTAwM2VyZWNvcmQsIEJQRl9USU1FUiB8IEJQRl9XT1JLUVVFVUUgfCBCUEZfVEFTS19XT1JLKTtcXG5pbmNsdWRlL2xpbnV4L2JwZi5oLTcwNi19XFxuLS1cXG5rZXJuZWwvYnBmL2J0Zi5jPTM2MDc9c3RhdGljIGludCBidGZfZ2V0X2ZpZWxkX3R5cGUoY29uc3Qgc3RydWN0IGJ0ZiAqYnRmLCBjb25zdCBzdHJ1Y3QgYnRmX3R5cGUgKnZhcl90eXBlLFxcbi0tXFxua2VybmVsL2JwZi9idGYuYy0zNjE4LVxcdFxcdHsgQlBGX1dPUktRVUVVRSwgXFxcImJwZl93cVxcXCIsIHRydWUgfSxcXG5rZXJuZWwvYnBmL2J0Zi5jOjM2MTk6XFx0XFx0eyBCUEZfVEFTS19XT1JLLCBcXFwiYnBmX3Rhc2tfd29ya1xcXCIsIHRydWUgfSxcXG5rZXJuZWwvYnBmL2J0Zi5jLTM2MjAtXFx0XFx0eyBCUEZfTElTVF9IRUFELCBcXFwiYnBmX2xpc3RfaGVhZFxcXCIsIGZhbHNlIH0sXFxuLS1cXG5rZXJuZWwvYnBmL2J0Zi5jPTM3NDc9c3RhdGljIGludCBidGZfZmluZF9maWVsZF9vbmUoY29uc3Qgc3RydWN0IGJ0ZiAqYnRmLFxcbi0tXFxua2VybmVsL2JwZi9idGYuYy0zODAzLVxcdGNhc2UgQlBGX1JFRkNPVU5UOlxcbmtlcm5lbC9icGYvYnRmLmM6MzgwNDpcXHRjYXNlIEJQRl9UQVNLX1dPUks6XFxua2VybmVsL2JwZi9idGYuYy0zODA1LVxcdFxcdHJldCA9IGJ0Zl9maW5kX3N0cnVjdChidGYsIHZhcl90eXBlLCBvZmYsIHN6LCBmaWVsZF90eXBlLFxcbi0tXFxua2VybmVsL2JwZi9idGYuYz00MDcwPXN0cnVjdCBidGZfcmVjb3JkICpidGZfcGFyc2VfZmllbGRzKGNvbnN0IHN0cnVjdCBidGYgKmJ0ZiwgY29uc3Qgc3RydWN0IGJ0Zl90eXBlICp0LFxcbi0tXFxua2VybmVsL2JwZi9idGYuYy00MTM2LVxcdFxcdFxcdGJyZWFrO1xcbmtlcm5lbC9icGYvYnRmLmM6NDEzNzpcXHRcXHRjYXNlIEJQRl9UQVNLX1dPUks6XFxua2VybmVsL2JwZi9idGYuYy00MTM4LVxcdFxcdFxcdFdBUk5fT05fT05DRShyZWMtXFx1MDAzZXRhc2tfd29ya19vZmYgXFx1MDAzZT0gMCk7XFxuLS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYz0xMDA3PXN0YXRpYyB2b2lkIGh0YWJfZWxlbV9mcmVlKHN0cnVjdCBicGZfaHRhYiAqaHRhYiwgc3RydWN0IGh0YWJfZWxlbSAqbClcXG4tLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTEwMTItXFx0XFx0YnBmX21lbV9jYWNoZV9mcmVlKFxcdTAwMjZodGFiLVxcdTAwM2VwY3B1X21hLCBsLVxcdTAwM2VwdHJfdG9fcHB0cik7XFxua2VybmVsL2JwZi9oYXNodGFiLmM6MTAxMzpcXHRpZiAoYnRmX3JlY29yZF9oYXNfZmllbGQoaHRhYi1cXHUwMDNlbWFwLnJlY29yZCwgQlBGX1RBU0tfV09SSykpIHtcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0xMDE0LVxcdFxcdGh0YWJfZWxlbV9kZWZlcl9mcmVlKGh0YWIsIGwpO1xcbi0tXFxua2VybmVsL2JwZi9oYXNodGFiLmM9MTA2MD1zdGF0aWMgdm9pZCBmcmVlX2h0YWJfZWxlbShzdHJ1Y3QgYnBmX2h0YWIgKmh0YWIsIHN0cnVjdCBodGFiX2VsZW0gKmwpXFxuLS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0xMDY2LVxcdFxcdGNoZWNrX2FuZF9jYW5jZWxfZmllbGRzKGh0YWIsIGwpO1xcbmtlcm5lbC9icGYvaGFzaHRhYi5jOjEwNjc6XFx0XFx0aWYgKGJ0Zl9yZWNvcmRfaGFzX2ZpZWxkKGh0YWItXFx1MDAzZW1hcC5yZWNvcmQsIEJQRl9UQVNLX1dPUkspKSB7XFxua2VybmVsL2JwZi9oYXNodGFiLmMtMTA2OC1cXHRcXHRcXHRodGFiX2VsZW1fZGVmZXJfZnJlZShodGFiLCBsKTtcXG4tLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jPTEzNDE9c3RhdGljIHZvaWQgaHRhYl9scnVfcHVzaF9mcmVlKHN0cnVjdCBicGZfaHRhYiAqaHRhYiwgc3RydWN0IGh0YWJfZWxlbSAqZWxlbSlcXG4tLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTEzNDQtXFx0YnBmX21hcF9kZWNfZWxlbV9jb3VudChcXHUwMDI2aHRhYi1cXHUwMDNlbWFwKTtcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzoxMzQ1OlxcdGlmIChidGZfcmVjb3JkX2hhc19maWVsZChodGFiLVxcdTAwM2VtYXAucmVjb3JkLCBCUEZfVEFTS19XT1JLKSkge1xcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTEzNDYtXFx0XFx0aHRhYl9lbGVtX2RlZmVyX2ZyZWUoaHRhYiwgZWxlbSk7XFxuLS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYz0xNjk4PXN0YXRpYyB2b2lkIGh0YWJfbWFwX2ZyZWUoc3RydWN0IGJwZl9tYXAgKm1hcClcXG4tLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTE3MjEtXFx0ICovXFxua2VybmVsL2JwZi9oYXNodGFiLmM6MTcyMjpcXHRpZiAoYnRmX3JlY29yZF9oYXNfZmllbGQoaHRhYi1cXHUwMDNlbWFwLnJlY29yZCwgQlBGX1RBU0tfV09SSykpXFxua2VybmVsL2JwZi9oYXNodGFiLmMtMTcyMy1cXHRcXHRyY3VfYmFycmllcl90YXNrc190cmFjZSgpO1xcbi0tXFxua2VybmVsL2JwZi9oZWxwZXJzLmM9NTAzMj12b2lkIGJwZl9tYXBfZnJlZV9pbnRlcm5hbF9zdHJ1Y3RzKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKnZhbClcXG4tLVxcbmtlcm5lbC9icGYvaGVscGVycy5jLTUwMzctXFx0XFx0YnBmX29ial9mcmVlX3dvcmtxdWV1ZShtYXAtXFx1MDAzZXJlY29yZCwgdmFsKTtcXG5rZXJuZWwvYnBmL2hlbHBlcnMuYzo1MDM4OlxcdGlmIChidGZfcmVjb3JkX2hhc19maWVsZChtYXAtXFx1MDAzZXJlY29yZCwgQlBGX1RBU0tfV09SSykpXFxua2VybmVsL2JwZi9oZWxwZXJzLmMtNTAzOS1cXHRcXHRicGZfb2JqX2ZyZWVfdGFza193b3JrKG1hcC1cXHUwMDNlcmVjb3JkLCB2YWwpO1xcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmM9NjY1PXZvaWQgYnRmX3JlY29yZF9mcmVlKHN0cnVjdCBidGZfcmVjb3JkICpyZWMpXFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy02OTAtXFx0XFx0Y2FzZSBCUEZfV09SS1FVRVVFOlxcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjY5MTpcXHRcXHRjYXNlIEJQRl9UQVNLX1dPUks6XFxua2VybmVsL2JwZi9zeXNjYWxsLmMtNjkyLVxcdFxcdFxcdC8qIE5vdGhpbmcgdG8gcmVsZWFzZSAqL1xcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmM9NzA4PXN0cnVjdCBidGZfcmVjb3JkICpidGZfcmVjb3JkX2R1cChjb25zdCBzdHJ1Y3QgYnRmX3JlY29yZCAqcmVjKVxcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtNzQ0LVxcdFxcdGNhc2UgQlBGX1dPUktRVUVVRTpcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzo3NDU6XFx0XFx0Y2FzZSBCUEZfVEFTS19XT1JLOlxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTc0Ni1cXHRcXHRcXHQvKiBOb3RoaW5nIHRvIGFjcXVpcmUgKi9cXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jPTgwND12b2lkIGJwZl9vYmpfZnJlZV90YXNrX3dvcmsoY29uc3Qgc3RydWN0IGJ0Zl9yZWNvcmQgKnJlYywgdm9pZCAqb2JqKVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTgwNS17XFxua2VybmVsL2JwZi9zeXNjYWxsLmM6ODA2OlxcdGlmIChXQVJOX09OX09OQ0UoIWJ0Zl9yZWNvcmRfaGFzX2ZpZWxkKHJlYywgQlBGX1RBU0tfV09SSykpKVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTgwNy1cXHRcXHRyZXR1cm47XFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYz04MTY9dm9pZCBicGZfb2JqX2ZyZWVfZmllbGRzKGNvbnN0IHN0cnVjdCBidGZfcmVjb3JkICpyZWMsIHZvaWQgKm9iailcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTgzOS1cXHRcXHRcXHRicmVhaztcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzo4NDA6XFx0XFx0Y2FzZSBCUEZfVEFTS19XT1JLOlxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTg0MS1cXHRcXHRcXHRicGZfdGFza193b3JrX2NhbmNlbF9hbmRfZnJlZShmaWVsZF9wdHIpO1xcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmM9MTI0ND1zdGF0aWMgaW50IG1hcF9jaGVja19idGYoc3RydWN0IGJwZl9tYXAgKm1hcCwgc3RydWN0IGJwZl90b2tlbiAqdG9rZW4sXFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0xMjY4LVxcdFxcdFxcdFxcdCAgICAgICBCUEZfUkJfUk9PVCB8IEJQRl9SRUZDT1VOVCB8IEJQRl9XT1JLUVVFVUUgfCBCUEZfVVBUUiB8XFxua2VybmVsL2JwZi9zeXNjYWxsLmM6MTI2OTpcXHRcXHRcXHRcXHQgICAgICAgQlBGX1RBU0tfV09SSyxcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0xMjcwLVxcdFxcdFxcdFxcdCAgICAgICBtYXAtXFx1MDAzZXZhbHVlX3NpemUpO1xcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtMTMwMS1cXHRcXHRcXHRjYXNlIEJQRl9XT1JLUVVFVUU6XFxua2VybmVsL2JwZi9zeXNjYWxsLmM6MTMwMjpcXHRcXHRcXHRjYXNlIEJQRl9UQVNLX1dPUks6XFxua2VybmVsL2JwZi9zeXNjYWxsLmMtMTMwMy1cXHRcXHRcXHRcXHRpZiAobWFwLVxcdTAwM2VtYXBfdHlwZSAhPSBCUEZfTUFQX1RZUEVfSEFTSCBcXHUwMDI2XFx1MDAyNlxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTE4NzU9c3RhdGljIHZvaWQgbWFya19wdHJfbm90X251bGxfcmVnKHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcpXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTg4Ni1cXHRcXHRcXHRpZiAoYnRmX3JlY29yZF9oYXNfZmllbGQobWFwLVxcdTAwM2Vpbm5lcl9tYXBfbWV0YS1cXHUwMDNlcmVjb3JkLFxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxODg3OlxcdFxcdFxcdFxcdFxcdFxcdCBCUEZfVElNRVIgfCBCUEZfV09SS1FVRVVFIHwgQlBGX1RBU0tfV09SSykpIHtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTg4OC1cXHRcXHRcXHRcXHRyZWctXFx1MDAzZW1hcF91aWQgPSByZWctXFx1MDAzZWlkO1xcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTcwNzg9c3RhdGljIGludCBjaGVja19tYXBfZmllbGRfcG9pbnRlcihzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnLCBhcmdub190IGFyZ25vLFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTcxMDYtXFx0XFx0YnJlYWs7XFxua2VybmVsL2JwZi92ZXJpZmllci5jOjcxMDc6XFx0Y2FzZSBCUEZfVEFTS19XT1JLOlxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy03MTA4LVxcdFxcdGZpZWxkX29mZiA9IG1hcC1cXHUwMDNlcmVjb3JkLVxcdTAwM2V0YXNrX3dvcmtfb2ZmO1xcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTExOTA2PXN0YXRpYyBpbnQgY2hlY2tfa2Z1bmNfYXJncyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2tmdW5jX2NhbGxfYXJnX21ldGEgKm1ldGEsXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTI0NDgtXFx0XFx0XFx0fVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMjQ0OTpcXHRcXHRcXHRyZXQgPSBjaGVja19tYXBfZmllbGRfcG9pbnRlcihlbnYsIHJlZywgYXJnbm8sIEJQRl9UQVNLX1dPUkssIFxcdTAwMjZtZXRhLVxcdTAwM2VtYXApO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMjQ1MC1cXHRcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3Rhc2tfd29ya19zdHJlc3MuYz00Nj1zdGF0aWMgdm9pZCB0YXNrX3dvcmtfcnVuKGJvb2wgZW5hYmxlX2RlbGV0ZSlcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3Rhc2tfd29ya19zdHJlc3MuYy01MC1cXHRpbnQgbnRocmVhZHMgPSAxNjtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy90YXNrX3dvcmtfc3RyZXNzLmM6NTE6XFx0aW50IHRlc3RfdGltZV9zID0gZ2V0X2Vudl9pbnQoXFxcIkJQRl9UQVNLX1dPUktfVEVTVF9USU1FXFxcIiwgMSk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdGFza193b3JrX3N0cmVzcy5jLTUyLVxcdHB0aHJlYWRfdCB0aWRbbnRocmVhZHNdLCB0aWRfZGVsO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNFQxOTozNToxNy4xMjc1MjU5MDVaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NjA3ODU5NDI1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgQlBGIEhhc2h0YWJsZSBQYXRjaCoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcgYGtlcm5lbC9icGYvaGFzaHRhYi5jYCBhbmQgYGtlcm5lbC9icGYvaGVscGVycy5jYC4gSSBuZWVkIHRvIGZvY3VzIG9uIHRoZSBrZXkgY2hhbmdlcywgd2hpY2ggc2VlbSB0byByZXZvbHZlIGFyb3VuZCBkZWZlcnJlZCBmcmVlaW5nIG9mIGhhc2h0YWJsZSBlbGVtZW50cy4gVGhlIG1haW4gcGxheWVycyBoZXJlIGFyZSBgaHRhYl9lbGVtX2RlZmVyX2ZyZWVgLCBgaHRhYl9lbGVtX2ZyZWVfcmN1X2NiYCwgYW5kIHRoZSBmdW5jdGlvbiBgYnBmX3Rhc2tfd29ya19jYW5jZWxfYW5kX2ZyZWVgLiBJIHNob3VsZCBhbHNvIGtlZXAgYW4gZXllIG9uIGhvdyB0aGUgcGF0Y2ggaW50ZXJhY3RzIHdpdGggZXhpc3RpbmcgZnVuY3Rpb25zIGxpa2UgYGh0YWJfZWxlbV9mcmVlYCwgYGZyZWVfaHRhYl9lbGVtYCwgYGh0YWJfbHJ1X3B1c2hfZnJlZWAsIGFuZCBgaHRhYl9tYXBfZnJlZWAgdG8gZ2V0IHRoZSBmdWxsIHBpY3R1cmUuXG5cbldhaXQgYSBzZWNvbmTigKYgYGh0YWJfZWxlbV9kZWZlcl9mcmVlYCBhbmQgYGh0YWJfZWxlbV9mcmVlX3JjdV9jYmAgYXJlIGJvdGggZGVjbGFyZWQgYXMgYHN0YXRpY2AuIFRoYXQgbGltaXRzIHRoZWlyIHNjb3BlIHRvIHRoaXMgZmlsZSwgd2hpY2ggbWVhbnMgdGhlIG1haW4gKmV4cG9zZWQqIGZ1bmN0aW9uIGhlcmUgaXMgYGJwZl90YXNrX3dvcmtfY2FuY2VsX2FuZF9mcmVlYC4gSSdsbCBuZWVkIHRvIGNvbmZpcm0gaWYgaXQncyBleHBvcnRlZCBvciBnbG9iYWwgdG8gZnVsbHkgdW5kZXJzdGFuZCB0aGUgaW1wYWN0LiBMZXQncyBkaWcgaW50byBgYnBmX3Rhc2tfd29ya19jYW5jZWxfYW5kX2ZyZWVgIGRpcmVjdGx5LlxuXG5cbiIsIklucHV0VG9rZW5zIjo3OTcyLCJPdXRwdXRUb2tlbnMiOjI2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjMzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI0VDE5OjM1OjIxLjczNTM4NzQzMVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTkzNDcyNTg1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJwZl90YXNrX3dvcmtfY2FuY2VsX2FuZF9mcmVlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvYnBmLmg9NjQ2PXZvaWQgYnBmX3dxX2NhbmNlbF9hbmRfZnJlZSh2b2lkICp0aW1lcik7XFxuaW5jbHVkZS9saW51eC9icGYuaDo2NDc6dm9pZCBicGZfdGFza193b3JrX2NhbmNlbF9hbmRfZnJlZSh2b2lkICp0aW1lcik7XFxuaW5jbHVkZS9saW51eC9icGYuaC02NDgtdm9pZCBicGZfbGlzdF9oZWFkX2ZyZWUoY29uc3Qgc3RydWN0IGJ0Zl9maWVsZCAqZmllbGQsIHZvaWQgKmxpc3RfaGVhZCxcXG4tLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jPTExMzg9c3RhdGljIHN0cnVjdCBodGFiX2VsZW0gKmFsbG9jX2h0YWJfZWxlbShzdHJ1Y3QgYnBmX2h0YWIgKmh0YWIsIHZvaWQgKmtleSxcXG4tLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTExODQtXFx0ICogc2tpcHMgYnRmX3JlY29yZCBmaWVsZHMsIHNvIGEgc3RhbGUgRVJSX1BUUigtRUJVU1kpIGxlZnQgYnlcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzoxMTg1OlxcdCAqIGJwZl90YXNrX3dvcmtfY2FuY2VsX2FuZF9mcmVlIHdvdWxkIHBlcnNpc3QgYW5kIGJsb2NrIG5ldyBzY2hlZHVsaW5nLlxcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTExODYtXFx0ICovXFxuLS1cXG5rZXJuZWwvYnBmL2hlbHBlcnMuYz00NTU0PXN0YXRpYyBzdHJ1Y3QgYnBmX3Rhc2tfd29ya19jdHggKmJwZl90YXNrX3dvcmtfYWNxdWlyZV9jdHgoc3RydWN0IGJwZl90YXNrX3dvcmsgKnR3LFxcbi0tXFxua2VybmVsL2JwZi9oZWxwZXJzLmMtNDU5MS1cXHRcXHQvKiB0cmFuc2ZlciBtYXAncyByZWYgaW50byBjYW5jZWxfYW5kX2ZyZWUoKSAqL1xcbmtlcm5lbC9icGYvaGVscGVycy5jOjQ1OTI6XFx0XFx0YnBmX3Rhc2tfd29ya19jYW5jZWxfYW5kX2ZyZWUodHcpO1xcbmtlcm5lbC9icGYvaGVscGVycy5jLTQ1OTMtXFx0XFx0cmV0dXJuIEVSUl9QVFIoLUVCVVNZKTtcXG4tLVxcbmtlcm5lbC9icGYvaGVscGVycy5jPTQ3NzY9c3RhdGljIHZvaWQgYnBmX3Rhc2tfd29ya19jYW5jZWxfc2NoZWR1bGVkKHN0cnVjdCBpcnFfd29yayAqaXJxX3dvcmspXFxuLS1cXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy00NzgzLVxcbmtlcm5lbC9icGYvaGVscGVycy5jOjQ3ODQ6dm9pZCBicGZfdGFza193b3JrX2NhbmNlbF9hbmRfZnJlZSh2b2lkICp2YWwpXFxua2VybmVsL2JwZi9oZWxwZXJzLmMtNDc4NS17XFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYz04MDQ9dm9pZCBicGZfb2JqX2ZyZWVfdGFza193b3JrKGNvbnN0IHN0cnVjdCBidGZfcmVjb3JkICpyZWMsIHZvaWQgKm9iailcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTgwNy1cXHRcXHRyZXR1cm47XFxua2VybmVsL2JwZi9zeXNjYWxsLmM6ODA4OlxcdGJwZl90YXNrX3dvcmtfY2FuY2VsX2FuZF9mcmVlKG9iaiArIHJlYy1cXHUwMDNldGFza193b3JrX29mZik7XFxua2VybmVsL2JwZi9zeXNjYWxsLmMtODA5LX1cXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jPTgxNj12b2lkIGJwZl9vYmpfZnJlZV9maWVsZHMoY29uc3Qgc3RydWN0IGJ0Zl9yZWNvcmQgKnJlYywgdm9pZCAqb2JqKVxcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtODQwLVxcdFxcdGNhc2UgQlBGX1RBU0tfV09SSzpcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzo4NDE6XFx0XFx0XFx0YnBmX3Rhc2tfd29ya19jYW5jZWxfYW5kX2ZyZWUoZmllbGRfcHRyKTtcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy04NDItXFx0XFx0XFx0YnJlYWs7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI0VDE5OjM1OjIzLjkyODg2NTkyNloiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ3MTcwMTEyOTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQlBGIENvbmZpZ3VyYXRpb24gRGVlcCBEaXZlKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgaW50byB0aGUgQlBGIGNvbmZpZ3VyYXRpb24sIHNwZWNpZmljYWxseSBhcm91bmQgc29tZSBtZW1vcnkgbWFuYWdlbWVudCBjb25jZXJucy4gTXkgc3RhcnRpbmcgcG9pbnQgaXMgYEJQRl9TWVNDQUxMYCwgdGhhdCBzZWVtcyB0byBiZSB0aGUga2V5IGNvbmZpZ3VyYXRpb24gb3B0aW9uLiBCdXQsIEkgbmVlZCB0byB2ZXJpZnkgdGhhdCB0aGlzIGlzIHRoZSBvbmx5IG9uZSBuZWVkZWQgdG8gZW5hYmxlIGFsbCB0aGUgcmVsZXZhbnQgZmVhdHVyZXMuIEkgc3VzcGVjdCBpdCBpcywgYnV0IGl0J3MgYWx3YXlzIGJlc3QgdG8gYmUgdGhvcm91Z2guXG5cbk15IGZvY3VzIHJpZ2h0IG5vdyBpcyBvbiBzeW1ib2xzIHRoYXQgc2VlbSB0byBiZSByZWxhdGVkIHRvIGhhc2h0YWJsZSBlbGVtZW50IGZyZWVpbmcgYW5kIGNsZWFudXAuIFRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zIGxvb2sgaW1wb3J0YW50OiBgaHRhYl9lbGVtX2RlZmVyX2ZyZWVgLCBgaHRhYl9lbGVtX2ZyZWVfcmN1X2NiYCwgYGJwZl90YXNrX3dvcmtfY2FuY2VsX2FuZF9mcmVlYCwgYGh0YWJfbWFwX2ZyZWVgLCBgZnJlZV9odGFiX2VsZW1gLCBgaHRhYl9lbGVtX2ZyZWVgLCBhbmQgYGh0YWJfbHJ1X3B1c2hfZnJlZWAuIFRoZXNlIGxpa2VseSBob2xkIHRoZSBrZXkgdG8gdW5kZXJzdGFuZGluZyB0aGUgZnVsbCBsaWZlY3ljbGUuXG5cbkEgcXVpY2sgY3Jvc3MtcmVmZXJlbmNlIHNob3dzIHRoYXQgYGh0YWJfZWxlbV9kZWZlcl9mcmVlYCBpcyBhIHN0YXRpYyBmdW5jdGlvbiwgcmVzaWRpbmcgd2l0aGluIGBrZXJuZWwvYnBmL2hhc2h0YWIuY2AsIGFuZCBgYnBmX3Rhc2tfd29ya19jYW5jZWxfYW5kX2ZyZWVgIGlzIGxvY2F0ZWQgaW4gYGtlcm5lbC9icGYvaGVscGVycy5jYC4gVGhpcyBpcyB1c2VmdWwsIHRoaXMgY29uZmlybXMgdGhleSdyZSBpbiB0aGUgcmlnaHQgcGxhY2VzLCBidXQgZG9lc24ndCBpbW1lZGlhdGVseSB0ZWxsIG1lIHRoZSBkZXBlbmRlbmNpZXMuXG5cbk5vdywgbXkgbmV4dCBzdGVwIGlzIHRvIGNvbmZpcm0gd2hldGhlciBvciBub3QgYEJQRl9TWVNDQUxMYCBpcyB0aGUgb25seSBjb25maWcgSSBuZWVkLiBJJ2xsIG5lZWQgdG8gZGlnIGRlZXBlciBpbnRvIHRoZSBidWlsZCBzeXN0ZW0gYW5kIGRlcGVuZGVuY2llcyB0byBiZSBjb21wbGV0ZWx5IGNlcnRhaW4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjkyMjQsIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMDYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjRUMTk6MzU6MjguNjQ1ODgwNjE5WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwMDIzMjgxNTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEJQRl9TWVNDQUxMXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvS2NvbmZpZz0yNT1tZW51IFxcXCJCUEYgc3Vic3lzdGVtXFxcIlxcbmtlcm5lbC9icGYvS2NvbmZpZy0yNi1cXG5rZXJuZWwvYnBmL0tjb25maWc6Mjc6Y29uZmlnIEJQRl9TWVNDQUxMXFxua2VybmVsL2JwZi9LY29uZmlnLTI4LVxcdGJvb2wgXFxcIkVuYWJsZSBicGYoKSBzeXN0ZW0gY2FsbFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjRUMTk6MzU6MzAuNjQ4MjE0NTg5WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzc4NjE4MzgzNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBmcm9tIG15IHBlcnNwZWN0aXZlIGFzIGFuIGV4cGVydCBpbiB0aGUgZmllbGQ6XG5cbioqSW5pdGlhbCBBc3Nlc3NtZW50IG9mIEJQRiBDb25maWd1cmF0aW9uKipcblxuQWxyaWdodCwgc28gdGhlIGNvcmUgY29uZmlndXJhdGlvbiBwb2ludCBmb3IgQlBGLCB0aGUgb25lIHRvIGxvb2sgYXQgZmlyc3QgYW5kIGZvcmVtb3N0LCBpcyBkZWZpbml0ZWx5IGBCUEZfU1lTQ0FMTGAuIFRoYXQncyB0aGUgYmFzZWxpbmUsIHRoZSBjcml0aWNhbCBwaWVjZS4gQnV0LCBob2xkIG9uIGEgbWludXRlLCBsZXQncyBub3QganVtcCB0byBjb25jbHVzaW9ucy4gYGJwZl90YXNrX3dvcmtgIGlzIGEgc3BlY2lmaWMgKmZlYXR1cmUqIHdpdGhpbiB0aGUgYnJvYWRlciBCUEYgZWNvc3lzdGVtLiBNeSBleHBlcmllbmNlIHNjcmVhbXMgdGhhdCBvZnRlbiB0aGVzZSBzcGVjaWFsaXplZCBmdW5jdGlvbmFsaXRpZXMgaGF2ZSBkZXBlbmRlbmNpZXMsIGFuZCBzb21ldGltZXMgbm90IGltbWVkaWF0ZWx5IG9idmlvdXMgb25lcy5cblxuVGhlcmVmb3JlLCBiZWZvcmUgSSBnbyBhbnkgZnVydGhlciwgSSBuZWVkIHRvIHZlcmlmeSwgKmV4cGxpY2l0bHkqLCBpZiB0aGVyZSBhcmUgYW55IG90aGVyIGNvbmZpZ3VyYXRpb24ga25vYnMgcmVsYXRlZCB0byBgYnBmX3Rhc2tfd29ya2AgaXRzZWxmLiBKdXN0IGJlY2F1c2UgaXQncyBwYXJ0IG9mIEJQRiBkb2Vzbid0IGF1dG9tYXRpY2FsbHkgbWVhbiBpdCdzIGVuYWJsZWQgYnkgdGhlIHByaW1hcnkgYEJQRl9TWVNDQUxMYCBzd2l0Y2guIEl0IGNvdWxkIGJlIGNvbmRpdGlvbmFsbHkgY29tcGlsZWQgb3IgZGVwZW5kIG9uIGFub3RoZXIsIHBlcmhhcHMgbW9yZSBncmFudWxhciwgb3B0aW9uLiBJIG5lZWQgdG8gYmUgKnN1cmUqIEknbSBub3QgbWlzc2luZyBzb21ldGhpbmcgZnVuZGFtZW50YWwuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk4NjMsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yNFQxOTozNTozNC40MzQ0MDE0MTVaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5MDUxNzU0NzIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYnBmX3Rhc2tfd29ya1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJEb2N1bWVudGF0aW9uL2JwZi9rZnVuY3MucnN0PTQwMj1FeGFtcGxlIGRlY2xhcmF0aW9uOlxcbi0tXFxuRG9jdW1lbnRhdGlvbi9icGYva2Z1bmNzLnJzdC00MDUtXFxuRG9jdW1lbnRhdGlvbi9icGYva2Z1bmNzLnJzdDo0MDY6XFx0X19icGZfa2Z1bmMgaW50IGJwZl90YXNrX3dvcmtfc2NoZWR1bGVfc2lnbmFsKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywgc3RydWN0IGJwZl90YXNrX3dvcmsgKnR3LFxcbkRvY3VtZW50YXRpb24vYnBmL2tmdW5jcy5yc3Q6NDA3OlxcdFxcdFxcdFxcdFxcdFxcdCAgICAgIHZvaWQgKm1hcF9fbWFwLCBicGZfdGFza193b3JrX2NhbGxiYWNrX3QgY2FsbGJhY2ssXFxuRG9jdW1lbnRhdGlvbi9icGYva2Z1bmNzLnJzdC00MDgtXFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IGJwZl9wcm9nX2F1eCAqYXV4KSB7IC4uLiB9XFxuLS1cXG5Eb2N1bWVudGF0aW9uL2JwZi9rZnVuY3MucnN0PTQxMD1FeGFtcGxlIHVzYWdlIGluIEJQRiBwcm9ncmFtOlxcbi0tXFxuRG9jdW1lbnRhdGlvbi9icGYva2Z1bmNzLnJzdC00MTQtXFx0Lyogbm90ZSB0aGF0IHRoZSBsYXN0IGFyZ3VtZW50IGlzIG9taXR0ZWQgKi9cXG5Eb2N1bWVudGF0aW9uL2JwZi9rZnVuY3MucnN0OjQxNTogICAgICAgIGJwZl90YXNrX3dvcmtfc2NoZWR1bGVfc2lnbmFsKHRhc2ssIFxcdTAwMjZ3b3JrLVxcdTAwM2V0dywgXFx1MDAyNmFycm1hcCwgdGFza193b3JrX2NhbGxiYWNrKTtcXG5Eb2N1bWVudGF0aW9uL2JwZi9rZnVuY3MucnN0LTQxNi1cXG4tLVxcbmluY2x1ZGUvbGludXgvYnBmLmg9MzQ2PXN0YXRpYyBpbmxpbmUgY29uc3QgY2hhciAqYnRmX2ZpZWxkX3R5cGVfbmFtZShlbnVtIGJ0Zl9maWVsZF90eXBlIHR5cGUpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2JwZi5oLTM3NC1cXHRjYXNlIEJQRl9UQVNLX1dPUks6XFxuaW5jbHVkZS9saW51eC9icGYuaDozNzU6XFx0XFx0cmV0dXJuIFxcXCJicGZfdGFza193b3JrXFxcIjtcXG5pbmNsdWRlL2xpbnV4L2JwZi5oLTM3Ni1cXHRkZWZhdWx0Olxcbi0tXFxuaW5jbHVkZS9saW51eC9icGYuaD0zODg9c3RhdGljIGlubGluZSB1MzIgYnRmX2ZpZWxkX3R5cGVfc2l6ZShlbnVtIGJ0Zl9maWVsZF90eXBlIHR5cGUpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2JwZi5oLTQxNC1cXHRjYXNlIEJQRl9UQVNLX1dPUks6XFxuaW5jbHVkZS9saW51eC9icGYuaDo0MTU6XFx0XFx0cmV0dXJuIHNpemVvZihzdHJ1Y3QgYnBmX3Rhc2tfd29yayk7XFxuaW5jbHVkZS9saW51eC9icGYuaC00MTYtXFx0ZGVmYXVsdDpcXG4tLVxcbmluY2x1ZGUvbGludXgvYnBmLmg9NDIyPXN0YXRpYyBpbmxpbmUgdTMyIGJ0Zl9maWVsZF90eXBlX2FsaWduKGVudW0gYnRmX2ZpZWxkX3R5cGUgdHlwZSlcXG4tLVxcbmluY2x1ZGUvbGludXgvYnBmLmgtNDQ4LVxcdGNhc2UgQlBGX1RBU0tfV09SSzpcXG5pbmNsdWRlL2xpbnV4L2JwZi5oOjQ0OTpcXHRcXHRyZXR1cm4gX19hbGlnbm9mX18oc3RydWN0IGJwZl90YXNrX3dvcmspO1xcbmluY2x1ZGUvbGludXgvYnBmLmgtNDUwLVxcdGRlZmF1bHQ6XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2JwZi5oPTY0Nj12b2lkIGJwZl93cV9jYW5jZWxfYW5kX2ZyZWUodm9pZCAqdGltZXIpO1xcbmluY2x1ZGUvbGludXgvYnBmLmg6NjQ3OnZvaWQgYnBmX3Rhc2tfd29ya19jYW5jZWxfYW5kX2ZyZWUodm9pZCAqdGltZXIpO1xcbmluY2x1ZGUvbGludXgvYnBmLmgtNjQ4LXZvaWQgYnBmX2xpc3RfaGVhZF9mcmVlKGNvbnN0IHN0cnVjdCBidGZfZmllbGQgKmZpZWxkLCB2b2lkICpsaXN0X2hlYWQsXFxuLS1cXG5pbmNsdWRlL3VhcGkvbGludXgvYnBmLmg9NzUwMj1zdHJ1Y3QgYnBmX3RpbWVyIHtcXG4tLVxcbmluY2x1ZGUvdWFwaS9saW51eC9icGYuaC03NTA1LVxcbmluY2x1ZGUvdWFwaS9saW51eC9icGYuaDo3NTA2OnN0cnVjdCBicGZfdGFza193b3JrIHtcXG5pbmNsdWRlL3VhcGkvbGludXgvYnBmLmgtNzUwNy1cXHRfX3U2NCBfX29wYXF1ZTtcXG4tLVxcbmtlcm5lbC9icGYvYnRmLmM9MzYwNz1zdGF0aWMgaW50IGJ0Zl9nZXRfZmllbGRfdHlwZShjb25zdCBzdHJ1Y3QgYnRmICpidGYsIGNvbnN0IHN0cnVjdCBidGZfdHlwZSAqdmFyX3R5cGUsXFxuLS1cXG5rZXJuZWwvYnBmL2J0Zi5jLTM2MTgtXFx0XFx0eyBCUEZfV09SS1FVRVVFLCBcXFwiYnBmX3dxXFxcIiwgdHJ1ZSB9LFxcbmtlcm5lbC9icGYvYnRmLmM6MzYxOTpcXHRcXHR7IEJQRl9UQVNLX1dPUkssIFxcXCJicGZfdGFza193b3JrXFxcIiwgdHJ1ZSB9LFxcbmtlcm5lbC9icGYvYnRmLmMtMzYyMC1cXHRcXHR7IEJQRl9MSVNUX0hFQUQsIFxcXCJicGZfbGlzdF9oZWFkXFxcIiwgZmFsc2UgfSxcXG4tLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jPTg5Nj1zdGF0aWMgaW50IGh0YWJfbWFwX2dldF9uZXh0X2tleShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXksIHZvaWQgKm5leHRfa2V5KVxcbi0tXFxua2VybmVsL2JwZi9oYXNodGFiLmMtOTUzLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jOjk1NDovKiBEZWZlcnJlZCBodGFiX2VsZW0gZnJlZSBmb3IgYnBmX3Rhc2tfd29yayBtYXBzLiAgY2FuY2VsX2FuZF9mcmVlKClcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy05NTUtICogcmV0dXJucyB3aGlsZSB0aGUgdGFza193b3JrIGNhbGxiYWNrIG1heSBzdGlsbCBiZSBhY2Nlc3NpbmcgbWFwX3ZhbDtcXG4tLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jPTExMzg9c3RhdGljIHN0cnVjdCBodGFiX2VsZW0gKmFsbG9jX2h0YWJfZWxlbShzdHJ1Y3QgYnBmX2h0YWIgKmh0YWIsIHZvaWQgKmtleSxcXG4tLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTExODQtXFx0ICogc2tpcHMgYnRmX3JlY29yZCBmaWVsZHMsIHNvIGEgc3RhbGUgRVJSX1BUUigtRUJVU1kpIGxlZnQgYnlcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzoxMTg1OlxcdCAqIGJwZl90YXNrX3dvcmtfY2FuY2VsX2FuZF9mcmVlIHdvdWxkIHBlcnNpc3QgYW5kIGJsb2NrIG5ldyBzY2hlZHVsaW5nLlxcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTExODYtXFx0ICovXFxuLS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYz0xNjk4PXN0YXRpYyB2b2lkIGh0YWJfbWFwX2ZyZWUoc3RydWN0IGJwZl9tYXAgKm1hcClcXG4tLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTE3MTYtXFxua2VybmVsL2JwZi9oYXNodGFiLmM6MTcxNzpcXHQvKiBGb3IgYnBmX3Rhc2tfd29yayBtYXBzLCBlbGVtZW50IGZyZWVzIGRlZmVyIHJlY3ljbGluZyB0aHJvdWdoXFxua2VybmVsL2JwZi9oYXNodGFiLmMtMTcxOC1cXHQgKiBjYWxsX3JjdV90YXNrc190cmFjZSgpIHNvIHJ1bm5pbmcgY2FsbGJhY2tzIGZpbmlzaCBiZWZvcmUgcmV1c2UuXFxuLS1cXG5rZXJuZWwvYnBmL2hlbHBlcnMuYz00MzE2PV9fYnBmX2tmdW5jIGludCBicGZfdmVyaWZ5X3BrY3M3X3NpZ25hdHVyZShjb25zdCBzdHJ1Y3QgYnBmX2R5bnB0ciAqZGF0YV9wLFxcbi0tXFxua2VybmVsL2JwZi9oZWxwZXJzLmMtNDM2MC1cXG5rZXJuZWwvYnBmL2hlbHBlcnMuYzo0MzYxOnR5cGVkZWYgaW50ICgqYnBmX3Rhc2tfd29ya19jYWxsYmFja190KShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXksIHZvaWQgKnZhbHVlKTtcXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy00MzYyLVxcbmtlcm5lbC9icGYvaGVscGVycy5jOjQzNjM6ZW51bSBicGZfdGFza193b3JrX3N0YXRlIHtcXG5rZXJuZWwvYnBmL2hlbHBlcnMuYzo0MzY0OlxcdC8qIGJwZl90YXNrX3dvcmsgaXMgcmVhZHkgdG8gYmUgdXNlZCAqL1xcbmtlcm5lbC9icGYvaGVscGVycy5jLTQzNjUtXFx0QlBGX1RXX1NUQU5EQlkgPSAwLFxcbi0tXFxua2VybmVsL2JwZi9oZWxwZXJzLmMtNDM3Ny1cXG5rZXJuZWwvYnBmL2hlbHBlcnMuYzo0Mzc4OnN0cnVjdCBicGZfdGFza193b3JrX2N0eCB7XFxua2VybmVsL2JwZi9oZWxwZXJzLmM6NDM3OTpcXHRlbnVtIGJwZl90YXNrX3dvcmtfc3RhdGUgc3RhdGU7XFxua2VybmVsL2JwZi9oZWxwZXJzLmMtNDM4MC1cXHRyZWZjb3VudF90IHJlZmNudDtcXG4tLVxcbmtlcm5lbC9icGYvaGVscGVycy5jLTQzOTAtXFx0ZW51bSB0YXNrX3dvcmtfbm90aWZ5X21vZGUgbW9kZTtcXG5rZXJuZWwvYnBmL2hlbHBlcnMuYzo0MzkxOlxcdGJwZl90YXNrX3dvcmtfY2FsbGJhY2tfdCBjYWxsYmFja19mbjtcXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy00MzkyLVxcdHN0cnVjdCByY3VfaGVhZCByY3U7XFxuLS1cXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy00Mzk0LVxcbmtlcm5lbC9icGYvaGVscGVycy5jOjQzOTU6LyogQWN0dWFsIHR5cGUgZm9yIHN0cnVjdCBicGZfdGFza193b3JrICovXFxua2VybmVsL2JwZi9oZWxwZXJzLmM6NDM5NjpzdHJ1Y3QgYnBmX3Rhc2tfd29ya19rZXJuIHtcXG5rZXJuZWwvYnBmL2hlbHBlcnMuYzo0Mzk3OlxcdHN0cnVjdCBicGZfdGFza193b3JrX2N0eCAqY3R4O1xcbmtlcm5lbC9icGYvaGVscGVycy5jLTQzOTgtfTtcXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy00Mzk5LVxcbmtlcm5lbC9icGYvaGVscGVycy5jOjQ0MDA6c3RhdGljIHZvaWQgYnBmX3Rhc2tfd29ya19jdHhfcmVzZXQoc3RydWN0IGJwZl90YXNrX3dvcmtfY3R4ICpjdHgpXFxua2VybmVsL2JwZi9oZWxwZXJzLmMtNDQwMS17XFxuLS1cXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy00NDExLVxcbmtlcm5lbC9icGYvaGVscGVycy5jOjQ0MTI6c3RhdGljIGJvb2wgYnBmX3Rhc2tfd29ya19jdHhfdHJ5Z2V0KHN0cnVjdCBicGZfdGFza193b3JrX2N0eCAqY3R4KVxcbmtlcm5lbC9icGYvaGVscGVycy5jLTQ0MTMte1xcbi0tXFxua2VybmVsL2JwZi9oZWxwZXJzLmMtNDQxNi1cXG5rZXJuZWwvYnBmL2hlbHBlcnMuYzo0NDE3OnN0YXRpYyB2b2lkIGJwZl90YXNrX3dvcmtfZGVzdHJveShzdHJ1Y3QgaXJxX3dvcmsgKmlycV93b3JrKVxcbmtlcm5lbC9icGYvaGVscGVycy5jLTQ0MTgte1xcbmtlcm5lbC9icGYvaGVscGVycy5jOjQ0MTk6XFx0c3RydWN0IGJwZl90YXNrX3dvcmtfY3R4ICpjdHggPSBjb250YWluZXJfb2YoaXJxX3dvcmssIHN0cnVjdCBicGZfdGFza193b3JrX2N0eCwgaXJxX3dvcmspO1xcbmtlcm5lbC9icGYvaGVscGVycy5jLTQ0MjAtXFxua2VybmVsL2JwZi9oZWxwZXJzLmM6NDQyMTpcXHRicGZfdGFza193b3JrX2N0eF9yZXNldChjdHgpO1xcbmtlcm5lbC9icGYvaGVscGVycy5jLTQ0MjItXFx0a2ZyZWVfcmN1KGN0eCwgcmN1KTtcXG4tLVxcbmtlcm5lbC9icGYvaGVscGVycy5jLTQ0MjQtXFxua2VybmVsL2JwZi9oZWxwZXJzLmM6NDQyNTpzdGF0aWMgdm9pZCBicGZfdGFza193b3JrX2N0eF9wdXQoc3RydWN0IGJwZl90YXNrX3dvcmtfY3R4ICpjdHgpXFxua2VybmVsL2JwZi9oZWxwZXJzLmMtNDQyNi17XFxuLS1cXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy00NDMwLVxcdGlmIChpcnFzX2Rpc2FibGVkKCkpIHtcXG5rZXJuZWwvYnBmL2hlbHBlcnMuYzo0NDMxOlxcdFxcdGN0eC1cXHUwMDNlaXJxX3dvcmsgPSBJUlFfV09SS19JTklUKGJwZl90YXNrX3dvcmtfZGVzdHJveSk7XFxua2VybmVsL2JwZi9oZWxwZXJzLmMtNDQzMi1cXHRcXHRpcnFfd29ya19xdWV1ZShcXHUwMDI2Y3R4LVxcdTAwM2VpcnFfd29yayk7XFxua2VybmVsL2JwZi9oZWxwZXJzLmMtNDQzMy1cXHR9IGVsc2Uge1xcbmtlcm5lbC9icGYvaGVscGVycy5jOjQ0MzQ6XFx0XFx0YnBmX3Rhc2tfd29ya19kZXN0cm95KFxcdTAwMjZjdHgtXFx1MDAzZWlycV93b3JrKTtcXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy00NDM1LVxcdH1cXG4tLVxcbmtlcm5lbC9icGYvaGVscGVycy5jLTQ0MzctXFxua2VybmVsL2JwZi9oZWxwZXJzLmM6NDQzODpzdGF0aWMgdm9pZCBicGZfdGFza193b3JrX2NhbmNlbChzdHJ1Y3QgYnBmX3Rhc2tfd29ya19jdHggKmN0eClcXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy00NDM5LXtcXG4tLVxcbmtlcm5lbC9icGYvaGVscGVycy5jLTQ0NDYtXFx0aWYgKHRhc2tfd29ya19jYW5jZWwoY3R4LVxcdTAwM2V0YXNrLCBcXHUwMDI2Y3R4LVxcdTAwM2V3b3JrKSlcXG5rZXJuZWwvYnBmL2hlbHBlcnMuYzo0NDQ3OlxcdFxcdGJwZl90YXNrX3dvcmtfY3R4X3B1dChjdHgpO1xcbmtlcm5lbC9icGYvaGVscGVycy5jLTQ0NDgtfVxcbmtlcm5lbC9icGYvaGVscGVycy5jLTQ0NDktXFxua2VybmVsL2JwZi9oZWxwZXJzLmM6NDQ1MDpzdGF0aWMgdm9pZCBicGZfdGFza193b3JrX2NhbGxiYWNrKHN0cnVjdCBjYWxsYmFja19oZWFkICpjYilcXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy00NDUxLXtcXG5rZXJuZWwvYnBmL2hlbHBlcnMuYzo0NDUyOlxcdHN0cnVjdCBicGZfdGFza193b3JrX2N0eCAqY3R4ID0gY29udGFpbmVyX29mKGNiLCBzdHJ1Y3QgYnBmX3Rhc2tfd29ya19jdHgsIHdvcmspO1xcbmtlcm5lbC9icGYvaGVscGVycy5jOjQ0NTM6XFx0ZW51bSBicGZfdGFza193b3JrX3N0YXRlIHN0YXRlO1xcbmtlcm5lbC9icGYvaGVscGVycy5jLTQ0NTQtXFx0dTMyIGlkeDtcXG4tLVxcbmtlcm5lbC9icGYvaGVscGVycy5jLTQ0NjItXFx0LypcXG5rZXJuZWwvYnBmL2hlbHBlcnMuYzo0NDYzOlxcdCAqIFRoaXMgY2FsbGJhY2sgbWF5IHN0YXJ0IHJ1bm5pbmcgYmVmb3JlIGJwZl90YXNrX3dvcmtfaXJxKCkgc3dpdGNoZWQgdG9cXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy00NDY0LVxcdCAqIFNDSEVEVUxFRCBzdGF0ZSwgc28gaGFuZGxlIGJvdGggdHJhbnNpdGlvbiB2YXJpYW50cyBTQ0hFRFVMSU5HfFNDSEVEVUxFRCAtXFx1MDAzZSBSVU5OSU5HLlxcbi0tXFxua2VybmVsL2JwZi9oZWxwZXJzLmMtNDQ2OS1cXHRpZiAoc3RhdGUgPT0gQlBGX1RXX0ZSRUVEKSB7XFxua2VybmVsL2JwZi9oZWxwZXJzLmM6NDQ3MDpcXHRcXHRicGZfdGFza193b3JrX2N0eF9wdXQoY3R4KTtcXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy00NDcxLVxcdFxcdHJldHVybjtcXG4tLVxcbmtlcm5lbC9icGYvaGVscGVycy5jLTQ0NzktXFxua2VybmVsL2JwZi9oZWxwZXJzLmM6NDQ4MDpcXHRicGZfdGFza193b3JrX2N0eF9yZXNldChjdHgpO1xcbmtlcm5lbC9icGYvaGVscGVycy5jLTQ0ODEtXFx0KHZvaWQpY21weGNoZyhcXHUwMDI2Y3R4LVxcdTAwM2VzdGF0ZSwgQlBGX1RXX1JVTk5JTkcsIEJQRl9UV19TVEFOREJZKTtcXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy00NDgyLVxcbmtlcm5lbC9icGYvaGVscGVycy5jOjQ0ODM6XFx0YnBmX3Rhc2tfd29ya19jdHhfcHV0KGN0eCk7XFxua2VybmVsL2JwZi9oZWxwZXJzLmMtNDQ4NC19XFxua2VybmVsL2JwZi9oZWxwZXJzLmMtNDQ4NS1cXG5rZXJuZWwvYnBmL2hlbHBlcnMuYzo0NDg2OnN0YXRpYyB2b2lkIGJwZl90YXNrX3dvcmtfaXJxKHN0cnVjdCBpcnFfd29yayAqaXJxX3dvcmspXFxua2VybmVsL2JwZi9oZWxwZXJzLmMtNDQ4Ny17XFxua2VybmVsL2JwZi9oZWxwZXJzLmM6NDQ4ODpcXHRzdHJ1Y3QgYnBmX3Rhc2tfd29ya19jdHggKmN0eCA9IGNvbnRhaW5lcl9vZihpcnFfd29yaywgc3RydWN0IGJwZl90YXNrX3dvcmtfY3R4LCBpcnFfd29yayk7XFxua2VybmVsL2JwZi9oZWxwZXJzLmM6NDQ4OTpcXHRlbnVtIGJwZl90YXNrX3dvcmtfc3RhdGUgc3RhdGU7XFxua2VybmVsL2JwZi9oZWxwZXJzLmMtNDQ5MC1cXHRpbnQgZXJyO1xcbi0tXFxua2VybmVsL2JwZi9oZWxwZXJzLmMtNDQ5NC1cXHRpZiAoY21weGNoZyhcXHUwMDI2Y3R4LVxcdTAwM2VzdGF0ZSwgQlBGX1RXX1BFTkRJTkcsIEJQRl9UV19TQ0hFRFVMSU5HKSAhPSBCUEZfVFdfUEVORElORykge1xcbmtlcm5lbC9icGYvaGVscGVycy5jOjQ0OTU6XFx0XFx0YnBmX3Rhc2tfd29ya19jdHhfcHV0KGN0eCk7XFxua2VybmVsL2JwZi9oZWxwZXJzLmMtNDQ5Ni1cXHRcXHRyZXR1cm47XFxuLS1cXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy00NTAwLVxcdGlmIChlcnIpIHtcXG5rZXJuZWwvYnBmL2hlbHBlcnMuYzo0NTAxOlxcdFxcdGJwZl90YXNrX3dvcmtfY3R4X3Jlc2V0KGN0eCk7XFxua2VybmVsL2JwZi9oZWxwZXJzLmMtNDUwMi1cXHRcXHQvKlxcbi0tXFxua2VybmVsL2JwZi9oZWxwZXJzLmMtNDUwNi1cXHRcXHQodm9pZCljbXB4Y2hnKFxcdTAwMjZjdHgtXFx1MDAzZXN0YXRlLCBCUEZfVFdfU0NIRURVTElORywgQlBGX1RXX1NUQU5EQlkpO1xcbmtlcm5lbC9icGYvaGVscGVycy5jOjQ1MDc6XFx0XFx0YnBmX3Rhc2tfd29ya19jdHhfcHV0KGN0eCk7XFxua2VybmVsL2JwZi9oZWxwZXJzLmMtNDUwOC1cXHRcXHRyZXR1cm47XFxuLS1cXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy00NTE5LVxcdGlmIChzdGF0ZSA9PSBCUEZfVFdfRlJFRUQpXFxua2VybmVsL2JwZi9oZWxwZXJzLmM6NDUyMDpcXHRcXHRicGZfdGFza193b3JrX2NhbmNlbChjdHgpOyAvKiBjbGVhbiB1cCBpZiB3ZSBzd2l0Y2hlZCBpbnRvIEZSRUVEIHN0YXRlICovXFxua2VybmVsL2JwZi9oZWxwZXJzLmMtNDUyMS19XFxua2VybmVsL2JwZi9oZWxwZXJzLmMtNDUyMi1cXG5rZXJuZWwvYnBmL2hlbHBlcnMuYzo0NTIzOnN0YXRpYyBzdHJ1Y3QgYnBmX3Rhc2tfd29ya19jdHggKmJwZl90YXNrX3dvcmtfZmV0Y2hfY3R4KHN0cnVjdCBicGZfdGFza193b3JrICp0dyxcXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy00NTI0LVxcdFxcdFxcdFxcdFxcdFxcdFxcdCBzdHJ1Y3QgYnBmX21hcCAqbWFwKVxcbmtlcm5lbC9icGYvaGVscGVycy5jLTQ1MjUte1xcbmtlcm5lbC9icGYvaGVscGVycy5jOjQ1MjY6XFx0c3RydWN0IGJwZl90YXNrX3dvcmtfa2VybiAqdHdrID0gKHZvaWQgKil0dztcXG5rZXJuZWwvYnBmL2hlbHBlcnMuYzo0NTI3OlxcdHN0cnVjdCBicGZfdGFza193b3JrX2N0eCAqY3R4LCAqb2xkX2N0eDtcXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy00NTI4LVxcbi0tXFxua2VybmVsL2JwZi9oZWxwZXJzLmMtNDU1My1cXG5rZXJuZWwvYnBmL2hlbHBlcnMuYzo0NTU0OnN0YXRpYyBzdHJ1Y3QgYnBmX3Rhc2tfd29ya19jdHggKmJwZl90YXNrX3dvcmtfYWNxdWlyZV9jdHgoc3RydWN0IGJwZl90YXNrX3dvcmsgKnR3LFxcbmtlcm5lbC9icGYvaGVscGVycy5jLTQ1NTUtXFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgc3RydWN0IGJwZl9tYXAgKm1hcClcXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy00NTU2LXtcXG5rZXJuZWwvYnBmL2hlbHBlcnMuYzo0NTU3OlxcdHN0cnVjdCBicGZfdGFza193b3JrX2N0eCAqY3R4O1xcbmtlcm5lbC9icGYvaGVscGVycy5jLTQ1NTgtXFxuLS1cXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy00NTY3LVxcdHNjb3BlZF9ndWFyZChyY3UpIHtcXG5rZXJuZWwvYnBmL2hlbHBlcnMuYzo0NTY4OlxcdFxcdGN0eCA9IGJwZl90YXNrX3dvcmtfZmV0Y2hfY3R4KHR3LCBtYXApO1xcbmtlcm5lbC9icGYvaGVscGVycy5jLTQ1NjktXFx0XFx0aWYgKElTX0VSUihjdHgpKVxcbi0tXFxua2VybmVsL2JwZi9oZWxwZXJzLmMtNDU3Mi1cXHRcXHQvKiB0cnkgdG8gZ2V0IHJlZiBmb3IgdGFza193b3JrIGNhbGxiYWNrIHRvIGhvbGQgKi9cXG5rZXJuZWwvYnBmL2hlbHBlcnMuYzo0NTczOlxcdFxcdGlmICghYnBmX3Rhc2tfd29ya19jdHhfdHJ5Z2V0KGN0eCkpXFxua2VybmVsL2JwZi9oZWxwZXJzLmMtNDU3NC1cXHRcXHRcXHRyZXR1cm4gRVJSX1BUUigtRUJVU1kpO1xcbi0tXFxua2VybmVsL2JwZi9oZWxwZXJzLmMtNDU3OC1cXHRcXHQvKiBsb3N0IGFjcXVpcmluZyByYWNlIG9yIG1hcF9yZWxlYXNlX3VyZWYoKSBzdG9sZSBpdCBmcm9tIHVzLCBwdXQgcmVmIGFuZCBiYWlsICovXFxua2VybmVsL2JwZi9oZWxwZXJzLmM6NDU3OTpcXHRcXHRicGZfdGFza193b3JrX2N0eF9wdXQoY3R4KTtcXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy00NTgwLVxcdFxcdHJldHVybiBFUlJfUFRSKC1FQlVTWSk7XFxuLS1cXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy00NTg5LVxcdFxcdC8qIGRyb3AgcmVmIHdlIGp1c3QgZ290IGZvciB0YXNrX3dvcmsgY2FsbGJhY2sgaXRzZWxmICovXFxua2VybmVsL2JwZi9oZWxwZXJzLmM6NDU5MDpcXHRcXHRicGZfdGFza193b3JrX2N0eF9wdXQoY3R4KTtcXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy00NTkxLVxcdFxcdC8qIHRyYW5zZmVyIG1hcCdzIHJlZiBpbnRvIGNhbmNlbF9hbmRfZnJlZSgpICovXFxua2VybmVsL2JwZi9oZWxwZXJzLmM6NDU5MjpcXHRcXHRicGZfdGFza193b3JrX2NhbmNlbF9hbmRfZnJlZSh0dyk7XFxua2VybmVsL2JwZi9oZWxwZXJzLmMtNDU5My1cXHRcXHRyZXR1cm4gRVJSX1BUUigtRUJVU1kpO1xcbi0tXFxua2VybmVsL2JwZi9oZWxwZXJzLmMtNDU5OC1cXG5rZXJuZWwvYnBmL2hlbHBlcnMuYzo0NTk5OnN0YXRpYyBpbnQgYnBmX3Rhc2tfd29ya19zY2hlZHVsZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssIHN0cnVjdCBicGZfdGFza193b3JrICp0dyxcXG5rZXJuZWwvYnBmL2hlbHBlcnMuYzo0NjAwOlxcdFxcdFxcdFxcdCAgc3RydWN0IGJwZl9tYXAgKm1hcCwgYnBmX3Rhc2tfd29ya19jYWxsYmFja190IGNhbGxiYWNrX2ZuLFxcbmtlcm5lbC9icGYvaGVscGVycy5jLTQ2MDEtXFx0XFx0XFx0XFx0ICBzdHJ1Y3QgYnBmX3Byb2dfYXV4ICphdXgsIGVudW0gdGFza193b3JrX25vdGlmeV9tb2RlIG1vZGUpXFxuLS1cXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy00NjAzLVxcdHN0cnVjdCBicGZfcHJvZyAqcHJvZztcXG5rZXJuZWwvYnBmL2hlbHBlcnMuYzo0NjA0OlxcdHN0cnVjdCBicGZfdGFza193b3JrX2N0eCAqY3R4O1xcbmtlcm5lbC9icGYvaGVscGVycy5jLTQ2MDUtXFx0aW50IGVycjtcXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy00NjA2LVxcbmtlcm5lbC9icGYvaGVscGVycy5jOjQ2MDc6XFx0QlRGX1RZUEVfRU1JVChzdHJ1Y3QgYnBmX3Rhc2tfd29yayk7XFxua2VybmVsL2JwZi9oZWxwZXJzLmMtNDYwOC1cXG4tLVxcbmtlcm5lbC9icGYvaGVscGVycy5jLTQ2MTctXFxua2VybmVsL2JwZi9oZWxwZXJzLmM6NDYxODpcXHRjdHggPSBicGZfdGFza193b3JrX2FjcXVpcmVfY3R4KHR3LCBtYXApO1xcbmtlcm5lbC9icGYvaGVscGVycy5jLTQ2MTktXFx0aWYgKElTX0VSUihjdHgpKSB7XFxuLS1cXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy00NjI5LVxcdGN0eC1cXHUwMDNlbWFwX3ZhbCA9ICh2b2lkICopdHcgLSBtYXAtXFx1MDAzZXJlY29yZC1cXHUwMDNldGFza193b3JrX29mZjtcXG5rZXJuZWwvYnBmL2hlbHBlcnMuYzo0NjMwOlxcdGluaXRfdGFza193b3JrKFxcdTAwMjZjdHgtXFx1MDAzZXdvcmssIGJwZl90YXNrX3dvcmtfY2FsbGJhY2spO1xcbmtlcm5lbC9icGYvaGVscGVycy5jOjQ2MzE6XFx0aW5pdF9pcnFfd29yayhcXHUwMDI2Y3R4LVxcdTAwM2VpcnFfd29yaywgYnBmX3Rhc2tfd29ya19pcnEpO1xcbmtlcm5lbC9icGYvaGVscGVycy5jLTQ2MzItXFxuLS1cXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy00NjQzLS8qKlxcbmtlcm5lbC9icGYvaGVscGVycy5jOjQ2NDQ6ICogYnBmX3Rhc2tfd29ya19zY2hlZHVsZV9zaWduYWwgLSBTY2hlZHVsZSBCUEYgY2FsbGJhY2sgdXNpbmcgdGFza193b3JrX2FkZCB3aXRoIFRXQV9TSUdOQUxcXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy00NjQ1LSAqIG1vZGVcXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy00NjQ2LSAqIEB0YXNrOiBUYXNrIHN0cnVjdCBmb3Igd2hpY2ggY2FsbGJhY2sgc2hvdWxkIGJlIHNjaGVkdWxlZFxcbmtlcm5lbC9icGYvaGVscGVycy5jOjQ2NDc6ICogQHR3OiBQb2ludGVyIHRvIHN0cnVjdCBicGZfdGFza193b3JrIGluIEJQRiBtYXAgdmFsdWUgZm9yIGludGVybmFsIGJvb2trZWVwaW5nXFxua2VybmVsL2JwZi9oZWxwZXJzLmM6NDY0ODogKiBAbWFwX19tYXA6IGJwZl9tYXAgdGhhdCBlbWJlZHMgc3RydWN0IGJwZl90YXNrX3dvcmsgaW4gdGhlIHZhbHVlc1xcbmtlcm5lbC9icGYvaGVscGVycy5jLTQ2NDktICogQGNhbGxiYWNrOiBwb2ludGVyIHRvIEJQRiBzdWJwcm9ncmFtIHRvIGNhbGxcXG4tLVxcbmtlcm5lbC9icGYvaGVscGVycy5jLTQ2NTMtICovXFxua2VybmVsL2JwZi9oZWxwZXJzLmM6NDY1NDpfX2JwZl9rZnVuYyBpbnQgYnBmX3Rhc2tfd29ya19zY2hlZHVsZV9zaWduYWwoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLCBzdHJ1Y3QgYnBmX3Rhc2tfd29yayAqdHcsXFxua2VybmVsL2JwZi9oZWxwZXJzLmM6NDY1NTpcXHRcXHRcXHRcXHRcXHQgICAgICB2b2lkICptYXBfX21hcCwgYnBmX3Rhc2tfd29ya19jYWxsYmFja190IGNhbGxiYWNrLFxcbmtlcm5lbC9icGYvaGVscGVycy5jLTQ2NTYtXFx0XFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IGJwZl9wcm9nX2F1eCAqYXV4KVxcbmtlcm5lbC9icGYvaGVscGVycy5jLTQ2NTcte1xcbmtlcm5lbC9icGYvaGVscGVycy5jOjQ2NTg6XFx0cmV0dXJuIGJwZl90YXNrX3dvcmtfc2NoZWR1bGUodGFzaywgdHcsIG1hcF9fbWFwLCBjYWxsYmFjaywgYXV4LCBUV0FfU0lHTkFMKTtcXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy00NjU5LX1cXG4tLVxcbmtlcm5lbC9icGYvaGVscGVycy5jLTQ2NjEtLyoqXFxua2VybmVsL2JwZi9oZWxwZXJzLmM6NDY2MjogKiBicGZfdGFza193b3JrX3NjaGVkdWxlX3Jlc3VtZSAtIFNjaGVkdWxlIEJQRiBjYWxsYmFjayB1c2luZyB0YXNrX3dvcmtfYWRkIHdpdGggVFdBX1JFU1VNRVxcbmtlcm5lbC9icGYvaGVscGVycy5jLTQ2NjMtICogbW9kZVxcbmtlcm5lbC9icGYvaGVscGVycy5jLTQ2NjQtICogQHRhc2s6IFRhc2sgc3RydWN0IGZvciB3aGljaCBjYWxsYmFjayBzaG91bGQgYmUgc2NoZWR1bGVkXFxua2VybmVsL2JwZi9oZWxwZXJzLmM6NDY2NTogKiBAdHc6IFBvaW50ZXIgdG8gc3RydWN0IGJwZl90YXNrX3dvcmsgaW4gQlBGIG1hcCB2YWx1ZSBmb3IgaW50ZXJuYWwgYm9va2tlZXBpbmdcXG5rZXJuZWwvYnBmL2hlbHBlcnMuYzo0NjY2OiAqIEBtYXBfX21hcDogYnBmX21hcCB0aGF0IGVtYmVkcyBzdHJ1Y3QgYnBmX3Rhc2tfd29yayBpbiB0aGUgdmFsdWVzXFxua2VybmVsL2JwZi9oZWxwZXJzLmMtNDY2Ny0gKiBAY2FsbGJhY2s6IHBvaW50ZXIgdG8gQlBGIHN1YnByb2dyYW0gdG8gY2FsbFxcbi0tXFxua2VybmVsL2JwZi9oZWxwZXJzLmMtNDY3MS0gKi9cXG5rZXJuZWwvYnBmL2hlbHBlcnMuYzo0NjcyOl9fYnBmX2tmdW5jIGludCBicGZfdGFza193b3JrX3NjaGVkdWxlX3Jlc3VtZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssIHN0cnVjdCBicGZfdGFza193b3JrICp0dyxcXG5rZXJuZWwvYnBmL2hlbHBlcnMuYzo0NjczOlxcdFxcdFxcdFxcdFxcdCAgICAgIHZvaWQgKm1hcF9fbWFwLCBicGZfdGFza193b3JrX2NhbGxiYWNrX3QgY2FsbGJhY2ssXFxua2VybmVsL2JwZi9oZWxwZXJzLmMtNDY3NC1cXHRcXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3QgYnBmX3Byb2dfYXV4ICphdXgpXFxua2VybmVsL2JwZi9oZWxwZXJzLmMtNDY3NS17XFxua2VybmVsL2JwZi9oZWxwZXJzLmM6NDY3NjpcXHRyZXR1cm4gYnBmX3Rhc2tfd29ya19zY2hlZHVsZSh0YXNrLCB0dywgbWFwX19tYXAsIGNhbGxiYWNrLCBhdXgsIFRXQV9SRVNVTUUpO1xcbmtlcm5lbC9icGYvaGVscGVycy5jLTQ2NzctfVxcbi0tXFxua2VybmVsL2JwZi9oZWxwZXJzLmM9NDc3ND1fX2JwZl9rZnVuY19lbmRfZGVmcygpO1xcbmtlcm5lbC9icGYvaGVscGVycy5jLTQ3NzUtXFxua2VybmVsL2JwZi9oZWxwZXJzLmM6NDc3NjpzdGF0aWMgdm9pZCBicGZfdGFza193b3JrX2NhbmNlbF9zY2hlZHVsZWQoc3RydWN0IGlycV93b3JrICppcnFfd29yaylcXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy00Nzc3LXtcXG5rZXJuZWwvYnBmL2hlbHBlcnMuYzo0Nzc4OlxcdHN0cnVjdCBicGZfdGFza193b3JrX2N0eCAqY3R4ID0gY29udGFpbmVyX29mKGlycV93b3JrLCBzdHJ1Y3QgYnBmX3Rhc2tfd29ya19jdHgsIGlycV93b3JrKTtcXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy00Nzc5LVxcbmtlcm5lbC9icGYvaGVscGVycy5jOjQ3ODA6XFx0YnBmX3Rhc2tfd29ya19jYW5jZWwoY3R4KTsgLyogdGhpcyBtaWdodCBwdXQgdGFza193b3JrIGNhbGxiYWNrJ3MgcmVmICovXFxua2VybmVsL2JwZi9oZWxwZXJzLmM6NDc4MTpcXHRicGZfdGFza193b3JrX2N0eF9wdXQoY3R4KTsgLyogYW5kIGhlcmUgd2UgcHV0IG1hcCdzIG93biByZWYgdGhhdCB3YXMgdHJhbnNmZXJyZWQgdG8gdXMgKi9cXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy00NzgyLX1cXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy00NzgzLVxcbmtlcm5lbC9icGYvaGVscGVycy5jOjQ3ODQ6dm9pZCBicGZfdGFza193b3JrX2NhbmNlbF9hbmRfZnJlZSh2b2lkICp2YWwpXFxua2VybmVsL2JwZi9oZWxwZXJzLmMtNDc4NS17XFxua2VybmVsL2JwZi9oZWxwZXJzLmM6NDc4NjpcXHRzdHJ1Y3QgYnBmX3Rhc2tfd29ya19rZXJuICp0d2sgPSB2YWw7XFxua2VybmVsL2JwZi9oZWxwZXJzLmM6NDc4NzpcXHRzdHJ1Y3QgYnBmX3Rhc2tfd29ya19jdHggKmN0eDtcXG5rZXJuZWwvYnBmL2hlbHBlcnMuYzo0Nzg4OlxcdGVudW0gYnBmX3Rhc2tfd29ya19zdGF0ZSBzdGF0ZTtcXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy00Nzg5LVxcbi0tXFxua2VybmVsL2JwZi9oZWxwZXJzLmMtNDc5Ni1cXHRcXHQvKiBydW4gaW4gaXJxX3dvcmsgdG8gYXZvaWQgbG9ja3MgaW4gTk1JICovXFxua2VybmVsL2JwZi9oZWxwZXJzLmM6NDc5NzpcXHRcXHRpbml0X2lycV93b3JrKFxcdTAwMjZjdHgtXFx1MDAzZWlycV93b3JrLCBicGZfdGFza193b3JrX2NhbmNlbF9zY2hlZHVsZWQpO1xcbmtlcm5lbC9icGYvaGVscGVycy5jLTQ3OTgtXFx0XFx0aXJxX3dvcmtfcXVldWUoXFx1MDAyNmN0eC1cXHUwMDNlaXJxX3dvcmspO1xcbi0tXFxua2VybmVsL2JwZi9oZWxwZXJzLmMtNDgwMS1cXG5rZXJuZWwvYnBmL2hlbHBlcnMuYzo0ODAyOlxcdGJwZl90YXNrX3dvcmtfY3R4X3B1dChjdHgpOyAvKiBwdXQgYnBmIG1hcCdzIHJlZiAqL1xcbmtlcm5lbC9icGYvaGVscGVycy5jLTQ4MDMtfVxcbi0tXFxua2VybmVsL2JwZi9oZWxwZXJzLmM9NDk2OD1CVEZfSURfRkxBR1MoZnVuYywgYnBmX3N0cmVhbV9wcmludF9zdGFjaywgS0ZfSU1QTElDSVRfQVJHUylcXG5rZXJuZWwvYnBmL2hlbHBlcnMuYzo0OTY5OkJURl9JRF9GTEFHUyhmdW5jLCBicGZfdGFza193b3JrX3NjaGVkdWxlX3NpZ25hbCwgS0ZfSU1QTElDSVRfQVJHUylcXG5rZXJuZWwvYnBmL2hlbHBlcnMuYzo0OTcwOkJURl9JRF9GTEFHUyhmdW5jLCBicGZfdGFza193b3JrX3NjaGVkdWxlX3Jlc3VtZSwgS0ZfSU1QTElDSVRfQVJHUylcXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy00OTcxLUJURl9JRF9GTEFHUyhmdW5jLCBicGZfZHlucHRyX2Zyb21fZmlsZSlcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jPTgwND12b2lkIGJwZl9vYmpfZnJlZV90YXNrX3dvcmsoY29uc3Qgc3RydWN0IGJ0Zl9yZWNvcmQgKnJlYywgdm9pZCAqb2JqKVxcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtODA3LVxcdFxcdHJldHVybjtcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzo4MDg6XFx0YnBmX3Rhc2tfd29ya19jYW5jZWxfYW5kX2ZyZWUob2JqICsgcmVjLVxcdTAwM2V0YXNrX3dvcmtfb2ZmKTtcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy04MDktfVxcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmM9ODE2PXZvaWQgYnBmX29ial9mcmVlX2ZpZWxkcyhjb25zdCBzdHJ1Y3QgYnRmX3JlY29yZCAqcmVjLCB2b2lkICpvYmopXFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy04NDAtXFx0XFx0Y2FzZSBCUEZfVEFTS19XT1JLOlxcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjg0MTpcXHRcXHRcXHRicGZfdGFza193b3JrX2NhbmNlbF9hbmRfZnJlZShmaWVsZF9wdHIpO1xcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTg0Mi1cXHRcXHRcXHRicmVhaztcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz01MzA9c3RhdGljIGJvb2wgaXNfYXN5bmNfY2Jfc2xlZXBhYmxlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqaW5zbilcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy01MzUtXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjUzNjpcXHQvKiBicGZfd3EgYW5kIGJwZl90YXNrX3dvcmsgY2FsbGJhY2tzIGFyZSBhbHdheXMgc2xlZXBhYmxlLiAqL1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy01MzctXFx0aWYgKGJwZl9wc2V1ZG9fa2Z1bmNfY2FsbChpbnNuKSBcXHUwMDI2XFx1MDAyNiBpbnNuLVxcdTAwM2VvZmYgPT0gMCBcXHUwMDI2XFx1MDAyNlxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTEwODAyPUJURl9JRChzdHJ1Y3QsIGJwZl9yZXNfc3Bpbl9sb2NrKVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMDgwMzpCVEZfSUQoc3RydWN0LCBicGZfdGFza193b3JrKVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMDgwNC1CVEZfSUQoc3RydWN0LCBicGZfcHJvZ19hdXgpXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTA5ODI9ZW51bSBzcGVjaWFsX2tmdW5jX3R5cGUge1xcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTExMDQ0LVxcdEtGX19fYnBmX3RyYXAsXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjExMDQ1OlxcdEtGX2JwZl90YXNrX3dvcmtfc2NoZWR1bGVfc2lnbmFsLFxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMTA0NjpcXHRLRl9icGZfdGFza193b3JrX3NjaGVkdWxlX3Jlc3VtZSxcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTEwNDctXFx0S0ZfYnBmX2FyZW5hX2FsbG9jX3BhZ2VzLFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTExMTM3PUJURl9JRChmdW5jLCBfX2JwZl90cmFwKVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMTEzODpCVEZfSUQoZnVuYywgYnBmX3Rhc2tfd29ya19zY2hlZHVsZV9zaWduYWwpXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjExMTM5OkJURl9JRChmdW5jLCBicGZfdGFza193b3JrX3NjaGVkdWxlX3Jlc3VtZSlcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTExNDAtQlRGX0lEKGZ1bmMsIGJwZl9hcmVuYV9hbGxvY19wYWdlcylcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xMTE5Nj1zdGF0aWMgYm9vbCBpc190YXNrX3dvcmtfYWRkX2tmdW5jKHUzMiBmdW5jX2lkKVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMTE5Ny17XFxua2VybmVsL2JwZi92ZXJpZmllci5jOjExMTk4OlxcdHJldHVybiBmdW5jX2lkID09IHNwZWNpYWxfa2Z1bmNfbGlzdFtLRl9icGZfdGFza193b3JrX3NjaGVkdWxlX3NpZ25hbF0gfHxcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTExOTk6XFx0ICAgICAgIGZ1bmNfaWQgPT0gc3BlY2lhbF9rZnVuY19saXN0W0tGX2JwZl90YXNrX3dvcmtfc2NoZWR1bGVfcmVzdW1lXTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTEyMDAtfVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTExOTA2PXN0YXRpYyBpbnQgY2hlY2tfa2Z1bmNfYXJncyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2tmdW5jX2NhbGxfYXJnX21ldGEgKm1ldGEsXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTIwODAtXFx0XFx0XFx0XFx0XFx0XFx0dmVyYm9zZShlbnYsXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjEyMDgxOlxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXCJicGZfdGFza193b3JrIHBvaW50ZXIgaW4gUjIgbWFwX3VpZD0lZCBkb2Vzbid0IG1hdGNoIG1hcCBwb2ludGVyIGluIFIzIG1hcF91aWQ9JWRcXFxcblxcXCIsXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTEyMDgyLVxcdFxcdFxcdFxcdFxcdFxcdFxcdG1ldGEtXFx1MDAzZW1hcC51aWQsIHJlZy1cXHUwMDNlbWFwX3VpZCk7XFxuLS1cXG50b29scy9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmg9NzUwMj1zdHJ1Y3QgYnBmX3RpbWVyIHtcXG4tLVxcbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaC03NTA1LVxcbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaDo3NTA2OnN0cnVjdCBicGZfdGFza193b3JrIHtcXG50b29scy9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmgtNzUwNy1cXHRfX3U2NCBfX29wYXF1ZTtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3Rlc3RfdGFza193b3JrLmM9MjU9c3RydWN0IGVsZW0ge1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3Rlc3RfdGFza193b3JrLmMtMjYtXFx0Y2hhciBkYXRhWzEyOF07XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdGVzdF90YXNrX3dvcmsuYzoyNzpcXHRzdHJ1Y3QgYnBmX3Rhc2tfd29yayB0dztcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy90ZXN0X3Rhc2tfd29yay5jLTI4LX07XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvZmlsZV9yZWFkZXIuYz0yMD1zdHJ1Y3QgZWxlbSB7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2ZpbGVfcmVhZGVyLmMtMjEtXFx0c3RydWN0IGZpbGUgKmZpbGU7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2ZpbGVfcmVhZGVyLmM6MjI6XFx0c3RydWN0IGJwZl90YXNrX3dvcmsgdHc7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2ZpbGVfcmVhZGVyLmMtMjMtfTtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9maWxlX3JlYWRlci5jPTY2PWludCBvbl9vcGVuX3ZhbGlkYXRlX2ZpbGVfcmVhZCh2b2lkICpjKVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2ZpbGVfcmVhZGVyLmMtNzktXFx0fVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9maWxlX3JlYWRlci5jOjgwOlxcdGJwZl90YXNrX3dvcmtfc2NoZWR1bGVfc2lnbmFsKHRhc2ssIFxcdTAwMjZ3b3JrLVxcdTAwM2V0dywgXFx1MDAyNmFycm1hcCwgdGFza193b3JrX2NhbGxiYWNrKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvZmlsZV9yZWFkZXIuYy04MS1cXHRyZXR1cm4gMDtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90YXNrX3dvcmsuYz0xNj1zdHJ1Y3QgZWxlbSB7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rhc2tfd29yay5jLTE3LVxcdGNoYXIgZGF0YVsxMjhdO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90YXNrX3dvcmsuYzoxODpcXHRzdHJ1Y3QgYnBmX3Rhc2tfd29yayB0dztcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGFza193b3JrLmMtMTktfTtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90YXNrX3dvcmsuYz01ND1pbnQgb25jcHVfaGFzaF9tYXAoc3RydWN0IHB0X3JlZ3MgKmFyZ3MpXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGFza193b3JrLmMtNjctXFx0XFx0cmV0dXJuIDA7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rhc2tfd29yay5jOjY4OlxcdGJwZl90YXNrX3dvcmtfc2NoZWR1bGVfcmVzdW1lKHRhc2ssIFxcdTAwMjZ3b3JrLVxcdTAwM2V0dywgXFx1MDAyNmhtYXAsIHByb2Nlc3Nfd29yayk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rhc2tfd29yay5jLTY5LVxcdHJldHVybiAwO1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rhc2tfd29yay5jPTczPWludCBvbmNwdV9hcnJheV9tYXAoc3RydWN0IHB0X3JlZ3MgKmFyZ3MpXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGFza193b3JrLmMtODEtXFx0XFx0cmV0dXJuIDA7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rhc2tfd29yay5jOjgyOlxcdGJwZl90YXNrX3dvcmtfc2NoZWR1bGVfc2lnbmFsKHRhc2ssIFxcdTAwMjZ3b3JrLVxcdTAwM2V0dywgXFx1MDAyNmFycm1hcCwgcHJvY2Vzc193b3JrKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGFza193b3JrLmMtODMtXFx0cmV0dXJuIDA7XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGFza193b3JrLmM9ODc9aW50IG9uY3B1X2xydV9tYXAoc3RydWN0IHB0X3JlZ3MgKmFyZ3MpXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGFza193b3JrLmMtMTAzLVxcdFxcdHJldHVybiAwO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90YXNrX3dvcmsuYzoxMDQ6XFx0YnBmX3Rhc2tfd29ya19zY2hlZHVsZV9yZXN1bWUodGFzaywgXFx1MDAyNndvcmstXFx1MDAzZXR3LCBcXHUwMDI2bHJ1bWFwLCBwcm9jZXNzX3dvcmspO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90YXNrX3dvcmsuYy0xMDUtXFx0cmV0dXJuIDA7XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGFza193b3JrX2ZhaWwuYz0xNT1zdHJ1Y3QgZWxlbSB7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rhc2tfd29ya19mYWlsLmMtMTYtXFx0Y2hhciBkYXRhWzEyOF07XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rhc2tfd29ya19mYWlsLmM6MTc6XFx0c3RydWN0IGJwZl90YXNrX3dvcmsgdHc7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rhc2tfd29ya19mYWlsLmMtMTgtfTtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90YXNrX3dvcmtfZmFpbC5jPTQ3PWludCBtaXNtYXRjaF9tYXAoc3RydWN0IHB0X3JlZ3MgKmFyZ3MpXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGFza193b3JrX2ZhaWwuYy01NS1cXHRcXHRyZXR1cm4gMDtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGFza193b3JrX2ZhaWwuYzo1NjpcXHRicGZfdGFza193b3JrX3NjaGVkdWxlX3Jlc3VtZSh0YXNrLCBcXHUwMDI2d29yay1cXHUwMDNldHcsIFxcdTAwMjZobWFwLCBwcm9jZXNzX3dvcmspO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90YXNrX3dvcmtfZmFpbC5jLTU3LVxcdHJldHVybiAwO1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rhc2tfd29ya19mYWlsLmM9NjI9aW50IG5vX21hcF90YXNrX3dvcmsoc3RydWN0IHB0X3JlZ3MgKmFyZ3MpXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGFza193b3JrX2ZhaWwuYy02NC1cXHRzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2s7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rhc2tfd29ya19mYWlsLmM6NjU6XFx0c3RydWN0IGJwZl90YXNrX3dvcmsgdHc7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rhc2tfd29ya19mYWlsLmMtNjYtXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rhc2tfd29ya19mYWlsLmMtNjctXFx0dGFzayA9IGJwZl9nZXRfY3VycmVudF90YXNrX2J0ZigpO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90YXNrX3dvcmtfZmFpbC5jOjY4OlxcdGJwZl90YXNrX3dvcmtfc2NoZWR1bGVfcmVzdW1lKHRhc2ssIFxcdTAwMjZ0dywgXFx1MDAyNmhtYXAsIHByb2Nlc3Nfd29yayk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rhc2tfd29ya19mYWlsLmMtNjktXFx0cmV0dXJuIDA7XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGFza193b3JrX2ZhaWwuYz03ND1pbnQgdGFza193b3JrX251bGwoc3RydWN0IHB0X3JlZ3MgKmFyZ3MpXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGFza193b3JrX2ZhaWwuYy03OC1cXHR0YXNrID0gYnBmX2dldF9jdXJyZW50X3Rhc2tfYnRmKCk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rhc2tfd29ya19mYWlsLmM6Nzk6XFx0YnBmX3Rhc2tfd29ya19zY2hlZHVsZV9yZXN1bWUodGFzaywgTlVMTCwgXFx1MDAyNmhtYXAsIHByb2Nlc3Nfd29yayk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rhc2tfd29ya19mYWlsLmMtODAtXFx0cmV0dXJuIDA7XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGFza193b3JrX2ZhaWwuYz04NT1pbnQgbWFwX251bGwoc3RydWN0IHB0X3JlZ3MgKmFyZ3MpXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGFza193b3JrX2ZhaWwuYy05My1cXHRcXHRyZXR1cm4gMDtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGFza193b3JrX2ZhaWwuYzo5NDpcXHRicGZfdGFza193b3JrX3NjaGVkdWxlX3Jlc3VtZSh0YXNrLCBcXHUwMDI2d29yay1cXHUwMDNldHcsIE5VTEwsIHByb2Nlc3Nfd29yayk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rhc2tfd29ya19mYWlsLmMtOTUtXFx0cmV0dXJuIDA7XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGFza193b3JrX3N0cmVzcy5jPTIwPXN0cnVjdCBlbGVtIHtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGFza193b3JrX3N0cmVzcy5jLTIxLVxcdF9fdTMyIGNvdW50O1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90YXNrX3dvcmtfc3RyZXNzLmM6MjI6XFx0c3RydWN0IGJwZl90YXNrX3dvcmsgdHc7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rhc2tfd29ya19zdHJlc3MuYy0yMy19O1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rhc2tfd29ya19zdHJlc3MuYz00MD1pbnQgc2NoZWR1bGVfdGFza193b3JrKHZvaWQgKmN0eClcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90YXNrX3dvcmtfc3RyZXNzLmMtNTMtXFx0fVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90YXNrX3dvcmtfc3RyZXNzLmM6NTQ6XFx0ZXJyID0gYnBmX3Rhc2tfd29ya19zY2hlZHVsZV9zaWduYWwoYnBmX2dldF9jdXJyZW50X3Rhc2tfYnRmKCksIFxcdTAwMjZ3b3JrLVxcdTAwM2V0dywgXFx1MDAyNmhtYXAsXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rhc2tfd29ya19zdHJlc3MuYy01NS1cXHRcXHRcXHRcXHRcXHQgICAgcHJvY2Vzc193b3JrKTtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hc3luY19jYl9jb250ZXh0LmM9MTI0PXN0cnVjdCB0YXNrX3dvcmtfZWxlbSB7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FzeW5jX2NiX2NvbnRleHQuYzoxMjU6XFx0c3RydWN0IGJwZl90YXNrX3dvcmsgdHc7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FzeW5jX2NiX2NvbnRleHQuYy0xMjYtfTtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hc3luY19jYl9jb250ZXh0LmM9MTQ1PWludCB0YXNrX3dvcmtfbm9uX3NsZWVwYWJsZV9wcm9nKHZvaWQgKmN0eClcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hc3luY19jYl9jb250ZXh0LmMtMTU4LVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hc3luY19jYl9jb250ZXh0LmM6MTU5OlxcdGJwZl90YXNrX3dvcmtfc2NoZWR1bGVfcmVzdW1lKHRhc2ssIFxcdTAwMjZ2YWwtXFx1MDAzZXR3LCBcXHUwMDI2dGFza193b3JrX21hcCwgdGFza193b3JrX2NiKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfYXN5bmNfY2JfY29udGV4dC5jLTE2MC1cXHRyZXR1cm4gMDtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hc3luY19jYl9jb250ZXh0LmM9MTY1PWludCB0YXNrX3dvcmtfc2xlZXBhYmxlX3Byb2codm9pZCAqY3R4KVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FzeW5jX2NiX2NvbnRleHQuYy0xNzgtXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FzeW5jX2NiX2NvbnRleHQuYzoxNzk6XFx0YnBmX3Rhc2tfd29ya19zY2hlZHVsZV9yZXN1bWUodGFzaywgXFx1MDAyNnZhbC1cXHUwMDNldHcsIFxcdTAwMjZ0YXNrX3dvcmtfbWFwLCB0YXNrX3dvcmtfY2IpO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hc3luY19jYl9jb250ZXh0LmMtMTgwLVxcdHJldHVybiAwO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNFQxOTozNTozNi4zMzk1ODU1ODdaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTEyMDQyNDQ5MTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBCUEYgVGFzayBXb3JrIFBhdGNoIGZvciBGdXp6aW5nIEZvY3VzKipcblxuT2theSwgc28gd2UncmUgbG9va2luZyBhdCBgYnBmX3Rhc2tfd29ya2AsIGEgQlBGIGZlYXR1cmUuIFRoZSByZWxldmFudCBjb25maWcgaXMgYEJQRl9TWVNDQUxMYC4gVGhlIGNvcmUgb2YgdGhpcyBwYXRjaCBzZWVtcyB0byBpbnZvbHZlIGRlZmVycmVkIGZyZWVpbmcgb2YgaGFzaCB0YWJsZSBlbGVtZW50cywgc3BlY2lmaWNhbGx5IHJlbGF0ZWQgdG8gYGNhbGxfcmN1X3Rhc2tzX3RyYWNlYC4gTXkgaW5pdGlhbCB0aG91Z2h0IHdhcyB0byBsaXN0IHRoZSBwcmltYXJ5IGZ1bmN0aW9ucyBpbnZvbHZlZCBpbiB0aGUgZGVmZXJyZWQgZnJlZWluZyBhbmQgbWVtb3J5IG1hbmFnZW1lbnQuXG5cbkluaXRpYWxseSwgdGhlIGtleSBzeW1ib2xzIHRoYXQgc3ByaW5nIHRvIG1pbmQgYXJlOiBgYnBmX3Rhc2tfd29ya19jYW5jZWxfYW5kX2ZyZWVgLCBgaHRhYl9tYXBfZnJlZWAsIGBmcmVlX2h0YWJfZWxlbWAsIGBodGFiX2VsZW1fZnJlZWAsIGFuZCBgaHRhYl9scnVfcHVzaF9mcmVlYC4gSG93ZXZlciwgdGhlIHJlYWwgY3J1eCBvZiB0aGlzIHBhdGNoIGlzIHRoZSBoYW5kbGluZyBvZiB0aGUgUkNVIGNhbGxiYWNrcy4gVGhlc2Ugc3RhdGljIGZ1bmN0aW9ucywgYGh0YWJfZWxlbV9kZWZlcl9mcmVlYCBhbmQgYGh0YWJfZWxlbV9mcmVlX3JjdV9jYmAsIGFyZSB0aGUgY3JpdGljYWwgcGllY2VzLiBTeXprYWxsZXIgKmNhbiogaGFuZGxlIHN0YXRpYyBmdW5jdGlvbnMgaWYgdGhleSdyZSB1bmlxdWVseSBpZGVudGlmaWFibGUsIG9yIHdlIGNhbiBqdXN0IGxpc3QgdGhlbSBleHBsaWNpdGx5LCBhbmQgc28sIHRoYXQncyB3aGF0IEknbGwgZG8uXG5cblRoZXJlZm9yZSwgSSd2ZSBleHBhbmRlZCB0aGUgbGlzdCB0byBpbmNsdWRlOiBgaHRhYl9lbGVtX2RlZmVyX2ZyZWVgLCBgaHRhYl9lbGVtX2ZyZWVfcmN1X2NiYCwgYGJwZl90YXNrX3dvcmtfY2FuY2VsX2FuZF9mcmVlYCwgYGh0YWJfbWFwX2ZyZWVgLCBgZnJlZV9odGFiX2VsZW1gLCBgaHRhYl9lbGVtX2ZyZWVgLCBhbmQgYGh0YWJfbHJ1X3B1c2hfZnJlZWAuIFllcywgSSd2ZSBjb25maXJtZWQgdGhhdCBgaHRhYl9lbGVtX2RlZmVyX2ZyZWVgIGFuZCBgaHRhYl9lbGVtX2ZyZWVfcmN1X2NiYCBhcmUgaW5kZWVkIHN0YXRpYyBmdW5jdGlvbnMuXG5cblRoaXMgaXMgYSB1c2UtYWZ0ZXItZnJlZSBmaXgsIGFuZCB0aGF0IHdhcnJhbnRzIGFnZ3Jlc3NpdmUgZnV6emluZy4gVGhlIGdvYWwgaGVyZSBpcyB0byBlbnN1cmUgdGhlIGRlZmVycmVkIGZyZWVpbmcgZG9lc24ndCBpbnRyb2R1Y2UgYW55IG5ldyBpc3N1ZXMgb3IgbGVha3MuIFRoZXJlZm9yZSwgSSdtIHNldHRpbmcgYFdvcnRoRnV6emluZ2AgdG8gYHRydWVgLCBhbmQgSSdtIGVuYWJsaW5nIGBCUEZfU1lTQ0FMTGAgdmlhIGBFbmFibGVDb25maWdzYC5cblxuSSBuZWVkIHRvIGZvY3VzIG91ciBmdXp6aW5nIG9uIHRoZSBjcml0aWNhbCBmdW5jdGlvbnMsIHNvIEknbGwgc2V0IGBGb2N1c1N5bWJvbHNgIHRvIHRoZSBmb2xsb3dpbmc6IGBodGFiX2VsZW1fZGVmZXJfZnJlZWAsIGBodGFiX2VsZW1fZnJlZV9yY3VfY2JgLCBgYnBmX3Rhc2tfd29ya19jYW5jZWxfYW5kX2ZyZWVgLCBgaHRhYl9tYXBfZnJlZWAsIGBmcmVlX2h0YWJfZWxlbWAsIGBodGFiX2VsZW1fZnJlZWAsIGFuZCBgaHRhYl9scnVfcHVzaF9mcmVlYC5cblxuR2l2ZW4gdGhhdCBjZXJ0YWluIGZpZWxkcyBpbiB0aGUgaGFzaCB0YWJsZSBlbGVtZW50cyB3ZXJlIHJlaW5pdGlhbGl6ZWQsIEkgc2hvdWxkIGFsc28gaW5jbHVkZSB0aGUgYGFsbG9jX2h0YWJfZWxlbWAgYW5kIGBwcmVhbGxvY19scnVfcG9wYCBmdW5jdGlvbnMgYXMgcGFydCBvZiBvdXIgZnV6emluZyBmb2N1cy4gVGhpcyBzaG91bGQgcHJvdmlkZSBzdWZmaWNpZW50IGZ1enppbmcgY292ZXJhZ2UuXG5cbk9rYXksIGxldCdzIGNhbGwgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjAyNDAsIk91dHB1dFRva2VucyI6MjI0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjgwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI0VDE5OjM1OjQ3LjU0MzgzMzI2OVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkxMDMxNjc4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfU1lTQ0FMTFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImh0YWJfZWxlbV9kZWZlcl9mcmVlXCIsXG4gICAgXCJodGFiX2VsZW1fZnJlZV9yY3VfY2JcIixcbiAgICBcImJwZl90YXNrX3dvcmtfY2FuY2VsX2FuZF9mcmVlXCIsXG4gICAgXCJodGFiX21hcF9mcmVlXCIsXG4gICAgXCJmcmVlX2h0YWJfZWxlbVwiLFxuICAgIFwiaHRhYl9lbGVtX2ZyZWVcIixcbiAgICBcImh0YWJfbHJ1X3B1c2hfZnJlZVwiLFxuICAgIFwiYWxsb2NfaHRhYl9lbGVtXCIsXG4gICAgXCJwcmVhbGxvY19scnVfcG9wXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEJQRiBzdWJzeXN0ZW0gdG8gZGVmZXIgdGhlIGZyZWVpbmcgb2YgaGFzaCB0YWJsZSBlbGVtZW50cyBjb250YWluaW5nIEJQRl9UQVNLX1dPUksgZmllbGRzIHVzaW5nIGNhbGxfcmN1X3Rhc2tzX3RyYWNlLiBUaGlzIHByZXZlbnRzIGEgdXNlLWFmdGVyLWZyZWUgd2hlbiBhIHRhc2sgd29yayBjYWxsYmFjayBpcyBzdGlsbCBydW5uaW5nLiBJdCBhbHNvIHJlLWluaXRpYWxpemVzIHNwZWNpYWwgZmllbGRzIGZvciByZWN5Y2xlZCBlbGVtZW50cy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgQlBGIG1hcCBsb2dpYyBhbmQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgY29ycmVjdCBtZW1vcnkgbWFuYWdlbWVudCBhbmQgc2NoZWR1bGluZyBiZWhhdmlvci5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfU1lTQ0FMTFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImh0YWJfZWxlbV9kZWZlcl9mcmVlXCIsXG4gICAgXCJodGFiX2VsZW1fZnJlZV9yY3VfY2JcIixcbiAgICBcImJwZl90YXNrX3dvcmtfY2FuY2VsX2FuZF9mcmVlXCIsXG4gICAgXCJodGFiX21hcF9mcmVlXCIsXG4gICAgXCJmcmVlX2h0YWJfZWxlbVwiLFxuICAgIFwiaHRhYl9lbGVtX2ZyZWVcIixcbiAgICBcImh0YWJfbHJ1X3B1c2hfZnJlZVwiLFxuICAgIFwiYWxsb2NfaHRhYl9lbGVtXCIsXG4gICAgXCJwcmVhbGxvY19scnVfcG9wXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEJQRiBzdWJzeXN0ZW0gdG8gZGVmZXIgdGhlIGZyZWVpbmcgb2YgaGFzaCB0YWJsZSBlbGVtZW50cyBjb250YWluaW5nIEJQRl9UQVNLX1dPUksgZmllbGRzIHVzaW5nIGNhbGxfcmN1X3Rhc2tzX3RyYWNlLiBUaGlzIHByZXZlbnRzIGEgdXNlLWFmdGVyLWZyZWUgd2hlbiBhIHRhc2sgd29yayBjYWxsYmFjayBpcyBzdGlsbCBydW5uaW5nLiBJdCBhbHNvIHJlLWluaXRpYWxpemVzIHNwZWNpYWwgZmllbGRzIGZvciByZWN5Y2xlZCBlbGVtZW50cy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgQlBGIG1hcCBsb2dpYyBhbmQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgY29ycmVjdCBtZW1vcnkgbWFuYWdlbWVudCBhbmQgc2NoZWR1bGluZyBiZWhhdmlvci5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowbks7d[0].run-triage(0) Phase: Succeeded StartedAt: 2026-06-24 19:24:11 +0000 UTC FinishedAt: 2026-06-24 19:35:49 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "840ef6c78e6a2f694b578ecb9063241c992aaa9e", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "840ef6c78e6a2f694b578ecb9063241c992aaa9e", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL" ], "series_id": "6198af4e-8e12-4c90-ae16-90c7cc5d5d4c" }, "track": "KASAN", "fuzz": { "focus": [ "bpf" ], "focus_symbols": [ "htab_elem_defer_free", "htab_elem_free_rcu_cb", "bpf_task_work_cancel_and_free", "htab_map_free", "free_htab_elem", "htab_elem_free", "htab_lru_push_free", "alloc_htab_elem", "prealloc_lru_pop" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI0IDE5OjM1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aHRhYl9lbGVtX2RlZmVyX2ZyZWUmIzM0OywKICAgICYjMzQ7aHRhYl9lbGVtX2ZyZWVfcmN1X2NiJiMzNDssCiAgICAmIzM0O2JwZl90YXNrX3dvcmtfY2FuY2VsX2FuZF9mcmVlJiMzNDssCiAgICAmIzM0O2h0YWJfbWFwX2ZyZWUmIzM0OywKICAgICYjMzQ7ZnJlZV9odGFiX2VsZW0mIzM0OywKICAgICYjMzQ7aHRhYl9lbGVtX2ZyZWUmIzM0OywKICAgICYjMzQ7aHRhYl9scnVfcHVzaF9mcmVlJiMzNDssCiAgICAmIzM0O2FsbG9jX2h0YWJfZWxlbSYjMzQ7LAogICAgJiMzNDtwcmVhbGxvY19scnVfcG9wJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBCUEYgc3Vic3lzdGVtIHRvIGRlZmVyIHRoZSBmcmVlaW5nIG9mIGhhc2ggdGFibGUgZWxlbWVudHMgY29udGFpbmluZyBCUEZfVEFTS19XT1JLIGZpZWxkcyB1c2luZyBjYWxsX3JjdV90YXNrc190cmFjZS4gVGhpcyBwcmV2ZW50cyBhIHVzZS1hZnRlci1mcmVlIHdoZW4gYSB0YXNrIHdvcmsgY2FsbGJhY2sgaXMgc3RpbGwgcnVubmluZy4gSXQgYWxzbyByZS1pbml0aWFsaXplcyBzcGVjaWFsIGZpZWxkcyBmb3IgcmVjeWNsZWQgZWxlbWVudHMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIEJQRiBtYXAgbG9naWMgYW5kIHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIGNvcnJlY3QgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIHNjaGVkdWxpbmcgYmVoYXZpb3IuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjQgMTk6MzU8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBkYTI2YmIzYmMxZDhlNzFmYjk3NDUwNjFlNzMyOTc1YzJjNWMxZDQzXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBKdW4gMjQgMTk6MzU6MDYgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9oYXNodGFiLmMgYi9rZXJuZWwvYnBmL2hhc2h0YWIuY1xuaW5kZXggOWYzOTRlMWFhMmU4NWIuLjE5ZmE2MTkwOWU0ZmVkIDEwMDY0NFxuLS0tIGEva2VybmVsL2JwZi9oYXNodGFiLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9icGYvaGFzaHRhYi5jXG5AQCAtMzEwLDYgJiM0MzszMTAsNyBAQCBzdGF0aWMgc3RydWN0IGh0YWJfZWxlbSAqcHJlYWxsb2NfbHJ1X3BvcChzdHJ1Y3QgYnBmX2h0YWIgKmh0YWIsIHZvaWQgKmtleSxcbiBcdFx0YnBmX21hcF9pbmNfZWxlbV9jb3VudChcdTAwMjZodGFiLVx1MDAzZW1hcCk7XG4gXHRcdGwgPSBjb250YWluZXJfb2Yobm9kZSwgc3RydWN0IGh0YWJfZWxlbSwgbHJ1X25vZGUpO1xuIFx0XHRtZW1jcHkobC1cdTAwM2VrZXksIGtleSwgaHRhYi1cdTAwM2VtYXAua2V5X3NpemUpO1xuJiM0MztcdFx0Y2hlY2tfYW5kX2luaXRfbWFwX3ZhbHVlKFx1MDAyNmh0YWItXHUwMDNlbWFwLCBodGFiX2VsZW1fdmFsdWUobCwgaHRhYi1cdTAwM2VtYXAua2V5X3NpemUpKTtcbiBcdFx0cmV0dXJuIGw7XG4gXHR9XG4gXG5AQCAtOTUwLDEyICYjNDM7OTUxLDY5IEBAIHN0YXRpYyBpbnQgaHRhYl9tYXBfZ2V0X25leHRfa2V5KHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSwgdm9pZCAqbmV4dF9rZXkpXG4gXHRyZXR1cm4gLUVOT0VOVDtcbiB9XG4gXG4mIzQzOy8qIERlZmVycmVkIGh0YWJfZWxlbSBmcmVlIGZvciBicGZfdGFza193b3JrIG1hcHMuICBjYW5jZWxfYW5kX2ZyZWUoKVxuJiM0MzsgKiByZXR1cm5zIHdoaWxlIHRoZSB0YXNrX3dvcmsgY2FsbGJhY2sgbWF5IHN0aWxsIGJlIGFjY2Vzc2luZyBtYXBfdmFsO1xuJiM0MzsgKiB0aGUgY2FsbGJhY2sgaG9sZHMgZ3VhcmQocmN1X3Rhc2tzX3RyYWNlKSwgc28gZGVmZXJyaW5nIHRoZSByZWN5Y2xlXG4mIzQzOyAqIHRocm91Z2ggY2FsbF9yY3VfdGFza3NfdHJhY2UoKSB3YWl0cyBmb3IgaXQgKGFuZCwgc2luY2UgYSB0YXNrcyB0cmFjZVxuJiM0MzsgKiBHUCBpbXBsaWVzIGEgcmVndWxhciBSQ1UgR1AsIGZvciBCUEYgdmFsdWUgcmVhZGVycyB0b28pIGJlZm9yZSB0aGVcbiYjNDM7ICogZWxlbWVudCBpcyByZXVzZWQuICBBIGNhbGxiYWNrIHRoYXQgZW50ZXJzIGFmdGVyIHRoZSBHUCBmaW5kcyB0aGUgY3R4XG4mIzQzOyAqIGFscmVhZHkgRlJFRUQgYW5kIGJhaWxzIG91dC5cbiYjNDM7ICovXG4mIzQzO3N0cnVjdCBodGFiX2VsZW1fZnJlZV9yY3Uge1xuJiM0MztcdHN0cnVjdCByY3VfaGVhZCByY3U7XG4mIzQzO1x0c3RydWN0IGJwZl9odGFiICpodGFiO1xuJiM0MztcdHN0cnVjdCBodGFiX2VsZW0gKmVsZW07XG4mIzQzO307XG4mIzQzO1xuJiM0MzsvKiBSZXR1cm4gYW4gaHRhYl9lbGVtIHRvIGl0cyBtYXAmIzM5O3MgZnJlZSBwb29sOiBicGZfbWVtX2NhY2hlX2ZyZWUgZm9yXG4mIzQzOyAqIG5vbi1wcmVhbGxvYywgcGNwdV9mcmVlbGlzdF9wdXNoIGZvciBwcmVhbGxvYywgYnBmX2xydV9wdXNoX2ZyZWUgZm9yXG4mIzQzOyAqIHByZWFsbG9jIExSVS5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyB2b2lkIGh0YWJfZWxlbV9yZWN5Y2xlKHN0cnVjdCBicGZfaHRhYiAqaHRhYiwgc3RydWN0IGh0YWJfZWxlbSAqbClcbiYjNDM7e1xuJiM0MztcdGlmIChodGFiX2lzX3ByZWFsbG9jKGh0YWIpKSB7XG4mIzQzO1x0XHRpZiAoaHRhYl9pc19scnUoaHRhYikpXG4mIzQzO1x0XHRcdGJwZl9scnVfcHVzaF9mcmVlKFx1MDAyNmh0YWItXHUwMDNlbHJ1LCBcdTAwMjZsLVx1MDAzZWxydV9ub2RlKTtcbiYjNDM7XHRcdGVsc2VcbiYjNDM7XHRcdFx0cGNwdV9mcmVlbGlzdF9wdXNoKFx1MDAyNmh0YWItXHUwMDNlZnJlZWxpc3QsIFx1MDAyNmwtXHUwMDNlZm5vZGUpO1xuJiM0MztcdH0gZWxzZSB7XG4mIzQzO1x0XHRicGZfbWVtX2NhY2hlX2ZyZWUoXHUwMDI2aHRhYi1cdTAwM2VtYSwgbCk7XG4mIzQzO1x0fVxuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBodGFiX2VsZW1fZnJlZV9yY3VfY2Ioc3RydWN0IHJjdV9oZWFkICpoZWFkKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGh0YWJfZWxlbV9mcmVlX3JjdSAqZnIgPSBjb250YWluZXJfb2YoaGVhZCwgc3RydWN0IGh0YWJfZWxlbV9mcmVlX3JjdSwgcmN1KTtcbiYjNDM7XG4mIzQzO1x0aHRhYl9lbGVtX3JlY3ljbGUoZnItXHUwMDNlaHRhYiwgZnItXHUwMDNlZWxlbSk7XG4mIzQzO1x0a2ZyZWUoZnIpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBodGFiX2VsZW1fZGVmZXJfZnJlZShzdHJ1Y3QgYnBmX2h0YWIgKmh0YWIsIHN0cnVjdCBodGFiX2VsZW0gKmwpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgaHRhYl9lbGVtX2ZyZWVfcmN1ICpmcjtcbiYjNDM7XG4mIzQzO1x0ZnIgPSBrbWFsbG9jX29iaigqZnIsIEdGUF9BVE9NSUMpO1xuJiM0MztcdGlmIChXQVJOX09OX09OQ0UoIWZyKSkge1xuJiM0MztcdFx0LyogRmFsbGJhY2s6IGltbWVkaWF0ZSByZWN5Y2xlLCBzbWFsbCBVQUYgcmlzayAqL1xuJiM0MztcdFx0aHRhYl9lbGVtX3JlY3ljbGUoaHRhYiwgbCk7XG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1x0fVxuJiM0MztcdGZyLVx1MDAzZWh0YWIgPSBodGFiO1xuJiM0MztcdGZyLVx1MDAzZWVsZW0gPSBsO1xuJiM0MztcdGNhbGxfcmN1X3Rhc2tzX3RyYWNlKFx1MDAyNmZyLVx1MDAzZXJjdSwgaHRhYl9lbGVtX2ZyZWVfcmN1X2NiKTtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgdm9pZCBodGFiX2VsZW1fZnJlZShzdHJ1Y3QgYnBmX2h0YWIgKmh0YWIsIHN0cnVjdCBodGFiX2VsZW0gKmwpXG4ge1xuIFx0Y2hlY2tfYW5kX2NhbmNlbF9maWVsZHMoaHRhYiwgbCk7XG4gXG4gXHRpZiAoaHRhYi1cdTAwM2VtYXAubWFwX3R5cGUgPT0gQlBGX01BUF9UWVBFX1BFUkNQVV9IQVNIKVxuIFx0XHRicGZfbWVtX2NhY2hlX2ZyZWUoXHUwMDI2aHRhYi1cdTAwM2VwY3B1X21hLCBsLVx1MDAzZXB0cl90b19wcHRyKTtcbiYjNDM7XHRpZiAoYnRmX3JlY29yZF9oYXNfZmllbGQoaHRhYi1cdTAwM2VtYXAucmVjb3JkLCBCUEZfVEFTS19XT1JLKSkge1xuJiM0MztcdFx0aHRhYl9lbGVtX2RlZmVyX2ZyZWUoaHRhYiwgbCk7XG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1x0fVxuIFx0YnBmX21lbV9jYWNoZV9mcmVlKFx1MDAyNmh0YWItXHUwMDNlbWEsIGwpO1xuIH1cbiBcbkBAIC0xMDA2LDYgJiM0MzsxMDY0LDEwIEBAIHN0YXRpYyB2b2lkIGZyZWVfaHRhYl9lbGVtKHN0cnVjdCBicGZfaHRhYiAqaHRhYiwgc3RydWN0IGh0YWJfZWxlbSAqbClcbiBcdGlmIChodGFiX2lzX3ByZWFsbG9jKGh0YWIpKSB7XG4gXHRcdGJwZl9tYXBfZGVjX2VsZW1fY291bnQoXHUwMDI2aHRhYi1cdTAwM2VtYXApO1xuIFx0XHRjaGVja19hbmRfY2FuY2VsX2ZpZWxkcyhodGFiLCBsKTtcbiYjNDM7XHRcdGlmIChidGZfcmVjb3JkX2hhc19maWVsZChodGFiLVx1MDAzZW1hcC5yZWNvcmQsIEJQRl9UQVNLX1dPUkspKSB7XG4mIzQzO1x0XHRcdGh0YWJfZWxlbV9kZWZlcl9mcmVlKGh0YWIsIGwpO1xuJiM0MztcdFx0XHRyZXR1cm47XG4mIzQzO1x0XHR9XG4gXHRcdHBjcHVfZnJlZWxpc3RfcHVzaChcdTAwMjZodGFiLVx1MDAzZWZyZWVsaXN0LCBcdTAwMjZsLVx1MDAzZWZub2RlKTtcbiBcdH0gZWxzZSB7XG4gXHRcdGRlY19lbGVtX2NvdW50KGh0YWIpO1xuQEAgLTExMTgsNiAmIzQzOzExODAsMTEgQEAgc3RhdGljIHN0cnVjdCBodGFiX2VsZW0gKmFsbG9jX2h0YWJfZWxlbShzdHJ1Y3QgYnBmX2h0YWIgKmh0YWIsIHZvaWQgKmtleSxcbiBcdH1cbiBcbiBcdG1lbWNweShsX25ldy1cdTAwM2VrZXksIGtleSwga2V5X3NpemUpO1xuJiM0MztcdC8qIFJlLWluaXRpYWxpemUgc3BlY2lhbCBmaWVsZHMgZm9yIHJlY3ljbGVkIGVsZW1lbnRzLiAgY29weV9tYXBfdmFsdWUoKVxuJiM0MztcdCAqIHNraXBzIGJ0Zl9yZWNvcmQgZmllbGRzLCBzbyBhIHN0YWxlIEVSUl9QVFIoLUVCVVNZKSBsZWZ0IGJ5XG4mIzQzO1x0ICogYnBmX3Rhc2tfd29ya19jYW5jZWxfYW5kX2ZyZWUgd291bGQgcGVyc2lzdCBhbmQgYmxvY2sgbmV3IHNjaGVkdWxpbmcuXG4mIzQzO1x0ICovXG4mIzQzO1x0Y2hlY2tfYW5kX2luaXRfbWFwX3ZhbHVlKFx1MDAyNmh0YWItXHUwMDNlbWFwLCBodGFiX2VsZW1fdmFsdWUobF9uZXcsIGtleV9zaXplKSk7XG4gXHRpZiAocGVyY3B1KSB7XG4gXHRcdGlmIChwcmVhbGxvYykge1xuIFx0XHRcdHBwdHIgPSBodGFiX2VsZW1fZ2V0X3B0cihsX25ldywga2V5X3NpemUpO1xuQEAgLTEyNzUsNiAmIzQzOzEzNDIsMTAgQEAgc3RhdGljIHZvaWQgaHRhYl9scnVfcHVzaF9mcmVlKHN0cnVjdCBicGZfaHRhYiAqaHRhYiwgc3RydWN0IGh0YWJfZWxlbSAqZWxlbSlcbiB7XG4gXHRjaGVja19hbmRfY2FuY2VsX2ZpZWxkcyhodGFiLCBlbGVtKTtcbiBcdGJwZl9tYXBfZGVjX2VsZW1fY291bnQoXHUwMDI2aHRhYi1cdTAwM2VtYXApO1xuJiM0MztcdGlmIChidGZfcmVjb3JkX2hhc19maWVsZChodGFiLVx1MDAzZW1hcC5yZWNvcmQsIEJQRl9UQVNLX1dPUkspKSB7XG4mIzQzO1x0XHRodGFiX2VsZW1fZGVmZXJfZnJlZShodGFiLCBlbGVtKTtcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XHR9XG4gXHRicGZfbHJ1X3B1c2hfZnJlZShcdTAwMjZodGFiLVx1MDAzZWxydSwgXHUwMDI2ZWxlbS1cdTAwM2VscnVfbm9kZSk7XG4gfVxuIFxuQEAgLTE2NDEsOSAmIzQzOzE3MTIsMTkgQEAgc3RhdGljIHZvaWQgaHRhYl9tYXBfZnJlZShzdHJ1Y3QgYnBmX21hcCAqbWFwKVxuIFx0XHRkZWxldGVfYWxsX2VsZW1lbnRzKGh0YWIpO1xuIFx0fSBlbHNlIHtcbiBcdFx0aHRhYl9mcmVlX3ByZWFsbG9jZWRfZmllbGRzKGh0YWIpO1xuLVx0XHRwcmVhbGxvY19kZXN0cm95KGh0YWIpO1xuIFx0fVxuIFxuJiM0MztcdC8qIEZvciBicGZfdGFza193b3JrIG1hcHMsIGVsZW1lbnQgZnJlZXMgZGVmZXIgcmVjeWNsaW5nIHRocm91Z2hcbiYjNDM7XHQgKiBjYWxsX3JjdV90YXNrc190cmFjZSgpIHNvIHJ1bm5pbmcgY2FsbGJhY2tzIGZpbmlzaCBiZWZvcmUgcmV1c2UuXG4mIzQzO1x0ICogV2FpdCBmb3IgYW55IGluLWZsaWdodCBkZWZlcnJlZCByZWN5Y2xlcyBoZXJlLCBiZWZvcmUgdGhlXG4mIzQzO1x0ICogZnJlZWxpc3QvTFJVIGFuZCBlbGVtZW50IG1lbW9yeSBhcmUgdG9ybiBkb3duLlxuJiM0MztcdCAqL1xuJiM0MztcdGlmIChidGZfcmVjb3JkX2hhc19maWVsZChodGFiLVx1MDAzZW1hcC5yZWNvcmQsIEJQRl9UQVNLX1dPUkspKVxuJiM0MztcdFx0cmN1X2JhcnJpZXJfdGFza3NfdHJhY2UoKTtcbiYjNDM7XG4mIzQzO1x0aWYgKGh0YWJfaXNfcHJlYWxsb2MoaHRhYikpXG4mIzQzO1x0XHRwcmVhbGxvY19kZXN0cm95KGh0YWIpO1xuJiM0MztcbiBcdGJwZl9tYXBfZnJlZV9lbGVtX2NvdW50KG1hcCk7XG4gXHRmcmVlX3BlcmNwdShodGFiLVx1MDAzZWV4dHJhX2VsZW1zKTtcbiBcdGJwZl9tYXBfYXJlYV9mcmVlKGh0YWItXHUwMDNlYnVja2V0cyk7XG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9oZWxwZXJzLmMgYi9rZXJuZWwvYnBmL2hlbHBlcnMuY1xuaW5kZXggYzE4ZjFlMTZlZGVlNGMuLjA3MDg4YWMxZjBiMmQ5IDEwMDY0NFxuLS0tIGEva2VybmVsL2JwZi9oZWxwZXJzLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9icGYvaGVscGVycy5jXG5AQCAtNDQ1NCw3ICYjNDM7NDQ1NCwxMCBAQCBzdGF0aWMgdm9pZCBicGZfdGFza193b3JrX2NhbGxiYWNrKHN0cnVjdCBjYWxsYmFja19oZWFkICpjYilcbiBcdHUzMiBpZHg7XG4gXHR2b2lkICprZXk7XG4gXG4tXHQvKiBSZWFkIGxvY2sgaXMgbmVlZGVkIHRvIHByb3RlY3QgY3R4IGFuZCBtYXAga2V5L3ZhbHVlIGFjY2VzcyAqL1xuJiM0MztcdC8qIEhvbGQgcmN1X3JlYWRfbG9ja190cmFjZSBzbyB0aGF0IGNhbGxfcmN1X3Rhc2tzX3RyYWNlKCkgaW5cbiYjNDM7XHQgKiBodGFiX2VsZW1fZGVmZXJfZnJlZSgpIHdhaXRzIGZvciB0aGlzIGNhbGxiYWNrIHRvIGZpbmlzaCBiZWZvcmVcbiYjNDM7XHQgKiByZWN5Y2xpbmcgdGhlIGh0YWJfZWxlbS5cbiYjNDM7XHQgKi9cbiBcdGd1YXJkKHJjdV90YXNrc190cmFjZSkoKTtcbiBcdC8qXG4gXHQgKiBUaGlzIGNhbGxiYWNrIG1heSBzdGFydCBydW5uaW5nIGJlZm9yZSBicGZfdGFza193b3JrX2lycSgpIHN3aXRjaGVkIHRvXG5AQCAtNDc4NCw4ICYjNDM7NDc4Nyw4IEBAIHZvaWQgYnBmX3Rhc2tfd29ya19jYW5jZWxfYW5kX2ZyZWUodm9pZCAqdmFsKVxuIFx0c3RydWN0IGJwZl90YXNrX3dvcmtfY3R4ICpjdHg7XG4gXHRlbnVtIGJwZl90YXNrX3dvcmtfc3RhdGUgc3RhdGU7XG4gXG4tXHRjdHggPSB4Y2hnKFx1MDAyNnR3ay1cdTAwM2VjdHgsIE5VTEwpO1xuLVx0aWYgKCFjdHgpXG4mIzQzO1x0Y3R4ID0geGNoZyhcdTAwMjZ0d2stXHUwMDNlY3R4LCBFUlJfUFRSKC1FQlVTWSkpO1xuJiM0MztcdGlmIChJU19FUlJfT1JfTlVMTChjdHgpKVxuIFx0XHRyZXR1cm47XG4gXG4gXHRzdGF0ZSA9IHhjaGcoXHUwMDI2Y3R4LVx1MDAzZXN0YXRlLCBCUEZfVFdfRlJFRUQpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI0IDE5OjM1PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aHRhYl9lbGVtX2RlZmVyX2ZyZWUmIzM0OywKICAgICYjMzQ7aHRhYl9lbGVtX2ZyZWVfcmN1X2NiJiMzNDssCiAgICAmIzM0O2JwZl90YXNrX3dvcmtfY2FuY2VsX2FuZF9mcmVlJiMzNDssCiAgICAmIzM0O2h0YWJfbWFwX2ZyZWUmIzM0OywKICAgICYjMzQ7ZnJlZV9odGFiX2VsZW0mIzM0OywKICAgICYjMzQ7aHRhYl9lbGVtX2ZyZWUmIzM0OywKICAgICYjMzQ7aHRhYl9scnVfcHVzaF9mcmVlJiMzNDssCiAgICAmIzM0O2FsbG9jX2h0YWJfZWxlbSYjMzQ7LAogICAgJiMzNDtwcmVhbGxvY19scnVfcG9wJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBCUEYgc3Vic3lzdGVtIHRvIGRlZmVyIHRoZSBmcmVlaW5nIG9mIGhhc2ggdGFibGUgZWxlbWVudHMgY29udGFpbmluZyBCUEZfVEFTS19XT1JLIGZpZWxkcyB1c2luZyBjYWxsX3JjdV90YXNrc190cmFjZS4gVGhpcyBwcmV2ZW50cyBhIHVzZS1hZnRlci1mcmVlIHdoZW4gYSB0YXNrIHdvcmsgY2FsbGJhY2sgaXMgc3RpbGwgcnVubmluZy4gSXQgYWxzbyByZS1pbml0aWFsaXplcyBzcGVjaWFsIGZpZWxkcyBmb3IgcmVjeWNsZWQgZWxlbWVudHMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIEJQRiBtYXAgbG9naWMgYW5kIHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIGNvcnJlY3QgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIHNjaGVkdWxpbmcgYmVoYXZpb3IuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0CiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSwKICAgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGRhMjZiYjNiYzFkOGU3MWZiOTc0NTA2MWU3MzI5NzVjMmM1YzFkNDMKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgV2VkIEp1biAyNCAxOTozNTowNiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvaGFzaHRhYi5jIGIva2VybmVsL2JwZi9oYXNodGFiLmMKaW5kZXggOWYzOTRlMWFhMmU4NWIuLjE5ZmE2MTkwOWU0ZmVkIDEwMDY0NAotLS0gYS9rZXJuZWwvYnBmL2hhc2h0YWIuYwomIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvYnBmL2hhc2h0YWIuYwpAQCAtMzEwLDYgJiM0MzszMTAsNyBAQCBzdGF0aWMgc3RydWN0IGh0YWJfZWxlbSAqcHJlYWxsb2NfbHJ1X3BvcChzdHJ1Y3QgYnBmX2h0YWIgKmh0YWIsIHZvaWQgKmtleSwKIAkJYnBmX21hcF9pbmNfZWxlbV9jb3VudCgmYW1wO2h0YWItJmd0O21hcCk7CiAJCWwgPSBjb250YWluZXJfb2Yobm9kZSwgc3RydWN0IGh0YWJfZWxlbSwgbHJ1X25vZGUpOwogCQltZW1jcHkobC0mZ3Q7a2V5LCBrZXksIGh0YWItJmd0O21hcC5rZXlfc2l6ZSk7CiYjNDM7CQljaGVja19hbmRfaW5pdF9tYXBfdmFsdWUoJmFtcDtodGFiLSZndDttYXAsIGh0YWJfZWxlbV92YWx1ZShsLCBodGFiLSZndDttYXAua2V5X3NpemUpKTsKIAkJcmV0dXJuIGw7CiAJfQogCkBAIC05NTAsMTIgJiM0Mzs5NTEsNjkgQEAgc3RhdGljIGludCBodGFiX21hcF9nZXRfbmV4dF9rZXkoc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5LCB2b2lkICpuZXh0X2tleSkKIAlyZXR1cm4gLUVOT0VOVDsKIH0KIAomIzQzOy8qIERlZmVycmVkIGh0YWJfZWxlbSBmcmVlIGZvciBicGZfdGFza193b3JrIG1hcHMuICBjYW5jZWxfYW5kX2ZyZWUoKQomIzQzOyAqIHJldHVybnMgd2hpbGUgdGhlIHRhc2tfd29yayBjYWxsYmFjayBtYXkgc3RpbGwgYmUgYWNjZXNzaW5nIG1hcF92YWw7CiYjNDM7ICogdGhlIGNhbGxiYWNrIGhvbGRzIGd1YXJkKHJjdV90YXNrc190cmFjZSksIHNvIGRlZmVycmluZyB0aGUgcmVjeWNsZQomIzQzOyAqIHRocm91Z2ggY2FsbF9yY3VfdGFza3NfdHJhY2UoKSB3YWl0cyBmb3IgaXQgKGFuZCwgc2luY2UgYSB0YXNrcyB0cmFjZQomIzQzOyAqIEdQIGltcGxpZXMgYSByZWd1bGFyIFJDVSBHUCwgZm9yIEJQRiB2YWx1ZSByZWFkZXJzIHRvbykgYmVmb3JlIHRoZQomIzQzOyAqIGVsZW1lbnQgaXMgcmV1c2VkLiAgQSBjYWxsYmFjayB0aGF0IGVudGVycyBhZnRlciB0aGUgR1AgZmluZHMgdGhlIGN0eAomIzQzOyAqIGFscmVhZHkgRlJFRUQgYW5kIGJhaWxzIG91dC4KJiM0MzsgKi8KJiM0MztzdHJ1Y3QgaHRhYl9lbGVtX2ZyZWVfcmN1IHsKJiM0MzsJc3RydWN0IHJjdV9oZWFkIHJjdTsKJiM0MzsJc3RydWN0IGJwZl9odGFiICpodGFiOwomIzQzOwlzdHJ1Y3QgaHRhYl9lbGVtICplbGVtOwomIzQzO307CiYjNDM7CiYjNDM7LyogUmV0dXJuIGFuIGh0YWJfZWxlbSB0byBpdHMgbWFwJiMzOTtzIGZyZWUgcG9vbDogYnBmX21lbV9jYWNoZV9mcmVlIGZvcgomIzQzOyAqIG5vbi1wcmVhbGxvYywgcGNwdV9mcmVlbGlzdF9wdXNoIGZvciBwcmVhbGxvYywgYnBmX2xydV9wdXNoX2ZyZWUgZm9yCiYjNDM7ICogcHJlYWxsb2MgTFJVLgomIzQzOyAqLwomIzQzO3N0YXRpYyB2b2lkIGh0YWJfZWxlbV9yZWN5Y2xlKHN0cnVjdCBicGZfaHRhYiAqaHRhYiwgc3RydWN0IGh0YWJfZWxlbSAqbCkKJiM0Mzt7CiYjNDM7CWlmIChodGFiX2lzX3ByZWFsbG9jKGh0YWIpKSB7CiYjNDM7CQlpZiAoaHRhYl9pc19scnUoaHRhYikpCiYjNDM7CQkJYnBmX2xydV9wdXNoX2ZyZWUoJmFtcDtodGFiLSZndDtscnUsICZhbXA7bC0mZ3Q7bHJ1X25vZGUpOwomIzQzOwkJZWxzZQomIzQzOwkJCXBjcHVfZnJlZWxpc3RfcHVzaCgmYW1wO2h0YWItJmd0O2ZyZWVsaXN0LCAmYW1wO2wtJmd0O2Zub2RlKTsKJiM0MzsJfSBlbHNlIHsKJiM0MzsJCWJwZl9tZW1fY2FjaGVfZnJlZSgmYW1wO2h0YWItJmd0O21hLCBsKTsKJiM0MzsJfQomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBodGFiX2VsZW1fZnJlZV9yY3VfY2Ioc3RydWN0IHJjdV9oZWFkICpoZWFkKQomIzQzO3sKJiM0MzsJc3RydWN0IGh0YWJfZWxlbV9mcmVlX3JjdSAqZnIgPSBjb250YWluZXJfb2YoaGVhZCwgc3RydWN0IGh0YWJfZWxlbV9mcmVlX3JjdSwgcmN1KTsKJiM0MzsKJiM0MzsJaHRhYl9lbGVtX3JlY3ljbGUoZnItJmd0O2h0YWIsIGZyLSZndDtlbGVtKTsKJiM0MzsJa2ZyZWUoZnIpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBodGFiX2VsZW1fZGVmZXJfZnJlZShzdHJ1Y3QgYnBmX2h0YWIgKmh0YWIsIHN0cnVjdCBodGFiX2VsZW0gKmwpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgaHRhYl9lbGVtX2ZyZWVfcmN1ICpmcjsKJiM0MzsKJiM0MzsJZnIgPSBrbWFsbG9jX29iaigqZnIsIEdGUF9BVE9NSUMpOwomIzQzOwlpZiAoV0FSTl9PTl9PTkNFKCFmcikpIHsKJiM0MzsJCS8qIEZhbGxiYWNrOiBpbW1lZGlhdGUgcmVjeWNsZSwgc21hbGwgVUFGIHJpc2sgKi8KJiM0MzsJCWh0YWJfZWxlbV9yZWN5Y2xlKGh0YWIsIGwpOwomIzQzOwkJcmV0dXJuOwomIzQzOwl9CiYjNDM7CWZyLSZndDtodGFiID0gaHRhYjsKJiM0MzsJZnItJmd0O2VsZW0gPSBsOwomIzQzOwljYWxsX3JjdV90YXNrc190cmFjZSgmYW1wO2ZyLSZndDtyY3UsIGh0YWJfZWxlbV9mcmVlX3JjdV9jYik7CiYjNDM7fQomIzQzOwogc3RhdGljIHZvaWQgaHRhYl9lbGVtX2ZyZWUoc3RydWN0IGJwZl9odGFiICpodGFiLCBzdHJ1Y3QgaHRhYl9lbGVtICpsKQogewogCWNoZWNrX2FuZF9jYW5jZWxfZmllbGRzKGh0YWIsIGwpOwogCiAJaWYgKGh0YWItJmd0O21hcC5tYXBfdHlwZSA9PSBCUEZfTUFQX1RZUEVfUEVSQ1BVX0hBU0gpCiAJCWJwZl9tZW1fY2FjaGVfZnJlZSgmYW1wO2h0YWItJmd0O3BjcHVfbWEsIGwtJmd0O3B0cl90b19wcHRyKTsKJiM0MzsJaWYgKGJ0Zl9yZWNvcmRfaGFzX2ZpZWxkKGh0YWItJmd0O21hcC5yZWNvcmQsIEJQRl9UQVNLX1dPUkspKSB7CiYjNDM7CQlodGFiX2VsZW1fZGVmZXJfZnJlZShodGFiLCBsKTsKJiM0MzsJCXJldHVybjsKJiM0MzsJfQogCWJwZl9tZW1fY2FjaGVfZnJlZSgmYW1wO2h0YWItJmd0O21hLCBsKTsKIH0KIApAQCAtMTAwNiw2ICYjNDM7MTA2NCwxMCBAQCBzdGF0aWMgdm9pZCBmcmVlX2h0YWJfZWxlbShzdHJ1Y3QgYnBmX2h0YWIgKmh0YWIsIHN0cnVjdCBodGFiX2VsZW0gKmwpCiAJaWYgKGh0YWJfaXNfcHJlYWxsb2MoaHRhYikpIHsKIAkJYnBmX21hcF9kZWNfZWxlbV9jb3VudCgmYW1wO2h0YWItJmd0O21hcCk7CiAJCWNoZWNrX2FuZF9jYW5jZWxfZmllbGRzKGh0YWIsIGwpOwomIzQzOwkJaWYgKGJ0Zl9yZWNvcmRfaGFzX2ZpZWxkKGh0YWItJmd0O21hcC5yZWNvcmQsIEJQRl9UQVNLX1dPUkspKSB7CiYjNDM7CQkJaHRhYl9lbGVtX2RlZmVyX2ZyZWUoaHRhYiwgbCk7CiYjNDM7CQkJcmV0dXJuOwomIzQzOwkJfQogCQlwY3B1X2ZyZWVsaXN0X3B1c2goJmFtcDtodGFiLSZndDtmcmVlbGlzdCwgJmFtcDtsLSZndDtmbm9kZSk7CiAJfSBlbHNlIHsKIAkJZGVjX2VsZW1fY291bnQoaHRhYik7CkBAIC0xMTE4LDYgJiM0MzsxMTgwLDExIEBAIHN0YXRpYyBzdHJ1Y3QgaHRhYl9lbGVtICphbGxvY19odGFiX2VsZW0oc3RydWN0IGJwZl9odGFiICpodGFiLCB2b2lkICprZXksCiAJfQogCiAJbWVtY3B5KGxfbmV3LSZndDtrZXksIGtleSwga2V5X3NpemUpOwomIzQzOwkvKiBSZS1pbml0aWFsaXplIHNwZWNpYWwgZmllbGRzIGZvciByZWN5Y2xlZCBlbGVtZW50cy4gIGNvcHlfbWFwX3ZhbHVlKCkKJiM0MzsJICogc2tpcHMgYnRmX3JlY29yZCBmaWVsZHMsIHNvIGEgc3RhbGUgRVJSX1BUUigtRUJVU1kpIGxlZnQgYnkKJiM0MzsJICogYnBmX3Rhc2tfd29ya19jYW5jZWxfYW5kX2ZyZWUgd291bGQgcGVyc2lzdCBhbmQgYmxvY2sgbmV3IHNjaGVkdWxpbmcuCiYjNDM7CSAqLwomIzQzOwljaGVja19hbmRfaW5pdF9tYXBfdmFsdWUoJmFtcDtodGFiLSZndDttYXAsIGh0YWJfZWxlbV92YWx1ZShsX25ldywga2V5X3NpemUpKTsKIAlpZiAocGVyY3B1KSB7CiAJCWlmIChwcmVhbGxvYykgewogCQkJcHB0ciA9IGh0YWJfZWxlbV9nZXRfcHRyKGxfbmV3LCBrZXlfc2l6ZSk7CkBAIC0xMjc1LDYgJiM0MzsxMzQyLDEwIEBAIHN0YXRpYyB2b2lkIGh0YWJfbHJ1X3B1c2hfZnJlZShzdHJ1Y3QgYnBmX2h0YWIgKmh0YWIsIHN0cnVjdCBodGFiX2VsZW0gKmVsZW0pCiB7CiAJY2hlY2tfYW5kX2NhbmNlbF9maWVsZHMoaHRhYiwgZWxlbSk7CiAJYnBmX21hcF9kZWNfZWxlbV9jb3VudCgmYW1wO2h0YWItJmd0O21hcCk7CiYjNDM7CWlmIChidGZfcmVjb3JkX2hhc19maWVsZChodGFiLSZndDttYXAucmVjb3JkLCBCUEZfVEFTS19XT1JLKSkgewomIzQzOwkJaHRhYl9lbGVtX2RlZmVyX2ZyZWUoaHRhYiwgZWxlbSk7CiYjNDM7CQlyZXR1cm47CiYjNDM7CX0KIAlicGZfbHJ1X3B1c2hfZnJlZSgmYW1wO2h0YWItJmd0O2xydSwgJmFtcDtlbGVtLSZndDtscnVfbm9kZSk7CiB9CiAKQEAgLTE2NDEsOSAmIzQzOzE3MTIsMTkgQEAgc3RhdGljIHZvaWQgaHRhYl9tYXBfZnJlZShzdHJ1Y3QgYnBmX21hcCAqbWFwKQogCQlkZWxldGVfYWxsX2VsZW1lbnRzKGh0YWIpOwogCX0gZWxzZSB7CiAJCWh0YWJfZnJlZV9wcmVhbGxvY2VkX2ZpZWxkcyhodGFiKTsKLQkJcHJlYWxsb2NfZGVzdHJveShodGFiKTsKIAl9CiAKJiM0MzsJLyogRm9yIGJwZl90YXNrX3dvcmsgbWFwcywgZWxlbWVudCBmcmVlcyBkZWZlciByZWN5Y2xpbmcgdGhyb3VnaAomIzQzOwkgKiBjYWxsX3JjdV90YXNrc190cmFjZSgpIHNvIHJ1bm5pbmcgY2FsbGJhY2tzIGZpbmlzaCBiZWZvcmUgcmV1c2UuCiYjNDM7CSAqIFdhaXQgZm9yIGFueSBpbi1mbGlnaHQgZGVmZXJyZWQgcmVjeWNsZXMgaGVyZSwgYmVmb3JlIHRoZQomIzQzOwkgKiBmcmVlbGlzdC9MUlUgYW5kIGVsZW1lbnQgbWVtb3J5IGFyZSB0b3JuIGRvd24uCiYjNDM7CSAqLwomIzQzOwlpZiAoYnRmX3JlY29yZF9oYXNfZmllbGQoaHRhYi0mZ3Q7bWFwLnJlY29yZCwgQlBGX1RBU0tfV09SSykpCiYjNDM7CQlyY3VfYmFycmllcl90YXNrc190cmFjZSgpOwomIzQzOwomIzQzOwlpZiAoaHRhYl9pc19wcmVhbGxvYyhodGFiKSkKJiM0MzsJCXByZWFsbG9jX2Rlc3Ryb3koaHRhYik7CiYjNDM7CiAJYnBmX21hcF9mcmVlX2VsZW1fY291bnQobWFwKTsKIAlmcmVlX3BlcmNwdShodGFiLSZndDtleHRyYV9lbGVtcyk7CiAJYnBmX21hcF9hcmVhX2ZyZWUoaHRhYi0mZ3Q7YnVja2V0cyk7CmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL2hlbHBlcnMuYyBiL2tlcm5lbC9icGYvaGVscGVycy5jCmluZGV4IGMxOGYxZTE2ZWRlZTRjLi4wNzA4OGFjMWYwYjJkOSAxMDA2NDQKLS0tIGEva2VybmVsL2JwZi9oZWxwZXJzLmMKJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2JwZi9oZWxwZXJzLmMKQEAgLTQ0NTQsNyAmIzQzOzQ0NTQsMTAgQEAgc3RhdGljIHZvaWQgYnBmX3Rhc2tfd29ya19jYWxsYmFjayhzdHJ1Y3QgY2FsbGJhY2tfaGVhZCAqY2IpCiAJdTMyIGlkeDsKIAl2b2lkICprZXk7CiAKLQkvKiBSZWFkIGxvY2sgaXMgbmVlZGVkIHRvIHByb3RlY3QgY3R4IGFuZCBtYXAga2V5L3ZhbHVlIGFjY2VzcyAqLwomIzQzOwkvKiBIb2xkIHJjdV9yZWFkX2xvY2tfdHJhY2Ugc28gdGhhdCBjYWxsX3JjdV90YXNrc190cmFjZSgpIGluCiYjNDM7CSAqIGh0YWJfZWxlbV9kZWZlcl9mcmVlKCkgd2FpdHMgZm9yIHRoaXMgY2FsbGJhY2sgdG8gZmluaXNoIGJlZm9yZQomIzQzOwkgKiByZWN5Y2xpbmcgdGhlIGh0YWJfZWxlbS4KJiM0MzsJICovCiAJZ3VhcmQocmN1X3Rhc2tzX3RyYWNlKSgpOwogCS8qCiAJICogVGhpcyBjYWxsYmFjayBtYXkgc3RhcnQgcnVubmluZyBiZWZvcmUgYnBmX3Rhc2tfd29ya19pcnEoKSBzd2l0Y2hlZCB0bwpAQCAtNDc4NCw4ICYjNDM7NDc4Nyw4IEBAIHZvaWQgYnBmX3Rhc2tfd29ya19jYW5jZWxfYW5kX2ZyZWUodm9pZCAqdmFsKQogCXN0cnVjdCBicGZfdGFza193b3JrX2N0eCAqY3R4OwogCWVudW0gYnBmX3Rhc2tfd29ya19zdGF0ZSBzdGF0ZTsKIAotCWN0eCA9IHhjaGcoJmFtcDt0d2stJmd0O2N0eCwgTlVMTCk7Ci0JaWYgKCFjdHgpCiYjNDM7CWN0eCA9IHhjaGcoJmFtcDt0d2stJmd0O2N0eCwgRVJSX1BUUigtRUJVU1kpKTsKJiM0MzsJaWYgKElTX0VSUl9PUl9OVUxMKGN0eCkpCiAJCXJldHVybjsKIAogCXN0YXRlID0geGNoZygmYW1wO2N0eC0mZ3Q7c3RhdGUsIEJQRl9UV19GUkVFRCk7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI0IDE5OjM1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQwNDgKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiAyOTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgQlBGIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBhIHBhdGNoIHRoYXQmIzM5O3MgbWFraW5nIGNoYW5nZXMgaW4gYGtlcm5lbC9icGYvaGFzaHRhYi5jYCBhbmQgYGtlcm5lbC9icGYvaGVscGVycy5jYC4gSXQmIzM5O3MgaW50cm9kdWNpbmcgYSBkZWZlcnJlZCBmcmVlIG1lY2hhbmlzbSBzcGVjaWZpY2FsbHkgZm9yIGBodGFiX2VsZW1gIHN0cnVjdHVyZXMgd2l0aGluIEJQRiBtYXBzIHRoYXQgdXRpbGl6ZSBgQlBGX1RBU0tfV09SS2AgZmllbGRzLiBUaGUgZ29hbCBoZXJlIGlzIHByZXR0eSBjbGVhcjogcHJldmVudCBhIFVzZS1BZnRlci1GcmVlIChVQUYpIHNpdHVhdGlvbi4gVGhlIGltcGxlbWVudGF0aW9uIHVzZXMgYGNhbGxfcmN1X3Rhc2tzX3RyYWNlYCB0byBwb3N0cG9uZSB0aGUgZWxlbWVudCByZWN5Y2xpbmcsIGVuc3VyaW5nIHRoYXQgYGJwZl90YXNrX3dvcmtfY2FuY2VsX2FuZF9mcmVlYCBkb2VzbiYjMzk7dCBnZXQgY2FsbGVkIHdoaWxlIHRoZSB0YXNrIHdvcmsgY2FsbGJhY2sgaXMgc3RpbGwgYWN0aXZlLgoKVGhleSYjMzk7dmUgYWxzbyBtb2RpZmllZCBgYnBmX3Rhc2tfd29ya19jYW5jZWxfYW5kX2ZyZWVgIHRvIHNldCBgdHdrLSZndDtjdHhgIHRvIGBFUlJfUFRSKC1FQlVTWSlgIGluc3RlYWQgb2YgYE5VTExgLiBTbWFydCwgdGhhdCYjMzk7cyBhIGdvb2Qgd2F5IHRvIHNpZ25hbCB0aGF0IHRoZSByZXNvdXJjZSBpcyB0ZW1wb3JhcmlseSB1bmF2YWlsYWJsZS4gQW5kIGluIGBhbGxvY19odGFiX2VsZW1gIGFuZCBgcHJlYWxsb2NfbHJ1X3BvcGAsIHRoZSBzcGVjaWFsIGZpZWxkcyBvZiByZWN5Y2xlZCBlbGVtZW50cyBhcmUgYmVpbmcgcmUtaW5pdGlhbGl6ZWQgdmlhIGBjaGVja19hbmRfaW5pdF9tYXBfdmFsdWVgLiBUaGlzIGlzIGFsbCBmYWlybHkgc3RhbmRhcmQgcHJhY3RpY2UgZm9yIG1hbmFnaW5nIHJlY3ljbGVkIG1lbW9yeSBhbmQgZW5zdXJpbmcgY29uc2lzdGVudCBzdGF0ZSBhZnRlciByZXVzZS4KClRoaXMgaXMgYSBwcmV0dHkgZnVuZGFtZW50YWwgbW9kaWZpY2F0aW9uIHdpdGhpbiB0aGUgY29yZSBCUEYgc3Vic3lzdGVtLCBpbXBhY3RpbmcgbWFwcyB0aGF0IHVzZSBgYnBmX3Rhc2tfd29ya2AuIEdpdmVuIHRoZSBwb3RlbnRpYWwgZm9yIGNvbmN1cnJlbmN5IGlzc3VlcyBhbmQgdGhlIGZvY3VzIG9uIHByZXZlbnRpbmcgVUFGLCB0aGlzICphYnNvbHV0ZWx5KiBuZWVkcyByaWdvcm91cyBmdXp6aW5nLiBJJiMzOTtsbCBuZWVkIHRvIGlkZW50aWZ5IHRoZSByZWxldmFudCBrZXJuZWwgY29uZmlndXJhdGlvbnMgdG8gZW5zdXJlIHByb3BlciB0ZXN0aW5nLgoKRmlyc3QsIGBCUEZfU1lTQ0FMTGAgaXMgdGhlIG9idmlvdXMgb25lLCB0aGUgY29yZSBCUEYgZnVuY3Rpb25hbGl0eS4gQnV0IEkgbmVlZCB0byBjaGVjayBmb3IgYW55IHNwZWNpZmljIGNvbmZpZ3VyYXRpb25zIHJlbGF0ZWQgdG8gYEJQRl9UQVNLX1dPUktgIG9yIHNvbWV0aGluZyBzaW1pbGFyLCBtYXliZSB0aGVyZSBhcmUgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gYXNwZWN0cyBhdCBwbGF5LiBJJiMzOTtsbCBwdWxsIG91dCBgZ3JlcHBlcmAgYW5kIHNlYXJjaCBmb3IgYEJQRl9UQVNLX1dPUktgIHdpdGhpbiB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24gZmlsZXMgdG8gcGlucG9pbnQgdGhvc2UgcmVsZXZhbnQgc3ltYm9scy4gVGhpcyBpcyB3aGVyZSBJJiMzOTtsbCByZWFsbHkgaG9uZSBpbiBvbiB0aGUgcGF0Y2gmIzM5O3MgaW1wYWN0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI0IDE5OjM1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0JQRl9UQVNLX1dPUksmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9icGYuaD0xOTg9ZW51bSBidGZfZmllbGRfdHlwZSB7XG4tLVxuaW5jbHVkZS9saW51eC9icGYuaC0yMTQtXHRCUEZfUkVTX1NQSU5fTE9DSyA9ICgxIFx1MDAzY1x1MDAzYyAxMiksXG5pbmNsdWRlL2xpbnV4L2JwZi5oOjIxNTpcdEJQRl9UQVNLX1dPUksgID0gKDEgXHUwMDNjXHUwMDNjIDEzKSxcbmluY2x1ZGUvbGludXgvYnBmLmgtMjE2LX07XG4tLVxuaW5jbHVkZS9saW51eC9icGYuaD0zNDY9c3RhdGljIGlubGluZSBjb25zdCBjaGFyICpidGZfZmllbGRfdHlwZV9uYW1lKGVudW0gYnRmX2ZpZWxkX3R5cGUgdHlwZSlcbi0tXG5pbmNsdWRlL2xpbnV4L2JwZi5oLTM3My1cdFx0cmV0dXJuIFwmIzM0O2JwZl9yZWZjb3VudFwmIzM0OztcbmluY2x1ZGUvbGludXgvYnBmLmg6Mzc0Olx0Y2FzZSBCUEZfVEFTS19XT1JLOlxuaW5jbHVkZS9saW51eC9icGYuaC0zNzUtXHRcdHJldHVybiBcJiMzNDticGZfdGFza193b3JrXCYjMzQ7O1xuLS1cbmluY2x1ZGUvbGludXgvYnBmLmg9Mzg4PXN0YXRpYyBpbmxpbmUgdTMyIGJ0Zl9maWVsZF90eXBlX3NpemUoZW51bSBidGZfZmllbGRfdHlwZSB0eXBlKVxuLS1cbmluY2x1ZGUvbGludXgvYnBmLmgtNDEzLVx0XHRyZXR1cm4gc2l6ZW9mKHN0cnVjdCBicGZfcmVmY291bnQpO1xuaW5jbHVkZS9saW51eC9icGYuaDo0MTQ6XHRjYXNlIEJQRl9UQVNLX1dPUks6XG5pbmNsdWRlL2xpbnV4L2JwZi5oLTQxNS1cdFx0cmV0dXJuIHNpemVvZihzdHJ1Y3QgYnBmX3Rhc2tfd29yayk7XG4tLVxuaW5jbHVkZS9saW51eC9icGYuaD00MjI9c3RhdGljIGlubGluZSB1MzIgYnRmX2ZpZWxkX3R5cGVfYWxpZ24oZW51bSBidGZfZmllbGRfdHlwZSB0eXBlKVxuLS1cbmluY2x1ZGUvbGludXgvYnBmLmgtNDQ3LVx0XHRyZXR1cm4gX19hbGlnbm9mX18oc3RydWN0IGJwZl9yZWZjb3VudCk7XG5pbmNsdWRlL2xpbnV4L2JwZi5oOjQ0ODpcdGNhc2UgQlBGX1RBU0tfV09SSzpcbmluY2x1ZGUvbGludXgvYnBmLmgtNDQ5LVx0XHRyZXR1cm4gX19hbGlnbm9mX18oc3RydWN0IGJwZl90YXNrX3dvcmspO1xuLS1cbmluY2x1ZGUvbGludXgvYnBmLmg9NDU2PXN0YXRpYyBpbmxpbmUgdm9pZCBicGZfb2JqX2luaXRfZmllbGQoY29uc3Qgc3RydWN0IGJ0Zl9maWVsZCAqZmllbGQsIHZvaWQgKmFkZHIpXG4tLVxuaW5jbHVkZS9saW51eC9icGYuaC00ODAtXHRjYXNlIEJQRl9VUFRSOlxuaW5jbHVkZS9saW51eC9icGYuaDo0ODE6XHRjYXNlIEJQRl9UQVNLX1dPUks6XG5pbmNsdWRlL2xpbnV4L2JwZi5oLTQ4Mi1cdFx0YnJlYWs7XG4tLVxuaW5jbHVkZS9saW51eC9icGYuaD00OTY9c3RhdGljIGlubGluZSBib29sIGJ0Zl9maWVsZF9pc19ubWlfc2FmZShlbnVtIGJ0Zl9maWVsZF90eXBlIHR5cGUpXG4tLVxuaW5jbHVkZS9saW51eC9icGYuaC01MDItXHRjYXNlIEJQRl9XT1JLUVVFVUU6XG5pbmNsdWRlL2xpbnV4L2JwZi5oOjUwMzpcdGNhc2UgQlBGX1RBU0tfV09SSzpcbmluY2x1ZGUvbGludXgvYnBmLmgtNTA0LVx0Y2FzZSBCUEZfS1BUUl9VTlJFRjpcbi0tXG5pbmNsdWRlL2xpbnV4L2JwZi5oPTcwMz1zdGF0aWMgaW5saW5lIGJvb2wgYnBmX21hcF9oYXNfaW50ZXJuYWxfc3RydWN0cyhzdHJ1Y3QgYnBmX21hcCAqbWFwKVxuaW5jbHVkZS9saW51eC9icGYuaC03MDQte1xuaW5jbHVkZS9saW51eC9icGYuaDo3MDU6XHRyZXR1cm4gYnRmX3JlY29yZF9oYXNfZmllbGQobWFwLVx1MDAzZXJlY29yZCwgQlBGX1RJTUVSIHwgQlBGX1dPUktRVUVVRSB8IEJQRl9UQVNLX1dPUkspO1xuaW5jbHVkZS9saW51eC9icGYuaC03MDYtfVxuLS1cbmtlcm5lbC9icGYvYnRmLmM9MzYwNz1zdGF0aWMgaW50IGJ0Zl9nZXRfZmllbGRfdHlwZShjb25zdCBzdHJ1Y3QgYnRmICpidGYsIGNvbnN0IHN0cnVjdCBidGZfdHlwZSAqdmFyX3R5cGUsXG4tLVxua2VybmVsL2JwZi9idGYuYy0zNjE4LVx0XHR7IEJQRl9XT1JLUVVFVUUsIFwmIzM0O2JwZl93cVwmIzM0OywgdHJ1ZSB9LFxua2VybmVsL2JwZi9idGYuYzozNjE5Olx0XHR7IEJQRl9UQVNLX1dPUkssIFwmIzM0O2JwZl90YXNrX3dvcmtcJiMzNDssIHRydWUgfSxcbmtlcm5lbC9icGYvYnRmLmMtMzYyMC1cdFx0eyBCUEZfTElTVF9IRUFELCBcJiMzNDticGZfbGlzdF9oZWFkXCYjMzQ7LCBmYWxzZSB9LFxuLS1cbmtlcm5lbC9icGYvYnRmLmM9Mzc0Nz1zdGF0aWMgaW50IGJ0Zl9maW5kX2ZpZWxkX29uZShjb25zdCBzdHJ1Y3QgYnRmICpidGYsXG4tLVxua2VybmVsL2JwZi9idGYuYy0zODAzLVx0Y2FzZSBCUEZfUkVGQ09VTlQ6XG5rZXJuZWwvYnBmL2J0Zi5jOjM4MDQ6XHRjYXNlIEJQRl9UQVNLX1dPUks6XG5rZXJuZWwvYnBmL2J0Zi5jLTM4MDUtXHRcdHJldCA9IGJ0Zl9maW5kX3N0cnVjdChidGYsIHZhcl90eXBlLCBvZmYsIHN6LCBmaWVsZF90eXBlLFxuLS1cbmtlcm5lbC9icGYvYnRmLmM9NDA3MD1zdHJ1Y3QgYnRmX3JlY29yZCAqYnRmX3BhcnNlX2ZpZWxkcyhjb25zdCBzdHJ1Y3QgYnRmICpidGYsIGNvbnN0IHN0cnVjdCBidGZfdHlwZSAqdCxcbi0tXG5rZXJuZWwvYnBmL2J0Zi5jLTQxMzYtXHRcdFx0YnJlYWs7XG5rZXJuZWwvYnBmL2J0Zi5jOjQxMzc6XHRcdGNhc2UgQlBGX1RBU0tfV09SSzpcbmtlcm5lbC9icGYvYnRmLmMtNDEzOC1cdFx0XHRXQVJOX09OX09OQ0UocmVjLVx1MDAzZXRhc2tfd29ya19vZmYgXHUwMDNlPSAwKTtcbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYz0xMDA3PXN0YXRpYyB2b2lkIGh0YWJfZWxlbV9mcmVlKHN0cnVjdCBicGZfaHRhYiAqaHRhYiwgc3RydWN0IGh0YWJfZWxlbSAqbClcbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0xMDEyLVx0XHRicGZfbWVtX2NhY2hlX2ZyZWUoXHUwMDI2aHRhYi1cdTAwM2VwY3B1X21hLCBsLVx1MDAzZXB0cl90b19wcHRyKTtcbmtlcm5lbC9icGYvaGFzaHRhYi5jOjEwMTM6XHRpZiAoYnRmX3JlY29yZF9oYXNfZmllbGQoaHRhYi1cdTAwM2VtYXAucmVjb3JkLCBCUEZfVEFTS19XT1JLKSkge1xua2VybmVsL2JwZi9oYXNodGFiLmMtMTAxNC1cdFx0aHRhYl9lbGVtX2RlZmVyX2ZyZWUoaHRhYiwgbCk7XG4tLVxua2VybmVsL2JwZi9oYXNodGFiLmM9MTA2MD1zdGF0aWMgdm9pZCBmcmVlX2h0YWJfZWxlbShzdHJ1Y3QgYnBmX2h0YWIgKmh0YWIsIHN0cnVjdCBodGFiX2VsZW0gKmwpXG4tLVxua2VybmVsL2JwZi9oYXNodGFiLmMtMTA2Ni1cdFx0Y2hlY2tfYW5kX2NhbmNlbF9maWVsZHMoaHRhYiwgbCk7XG5rZXJuZWwvYnBmL2hhc2h0YWIuYzoxMDY3Olx0XHRpZiAoYnRmX3JlY29yZF9oYXNfZmllbGQoaHRhYi1cdTAwM2VtYXAucmVjb3JkLCBCUEZfVEFTS19XT1JLKSkge1xua2VybmVsL2JwZi9oYXNodGFiLmMtMTA2OC1cdFx0XHRodGFiX2VsZW1fZGVmZXJfZnJlZShodGFiLCBsKTtcbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYz0xMzQxPXN0YXRpYyB2b2lkIGh0YWJfbHJ1X3B1c2hfZnJlZShzdHJ1Y3QgYnBmX2h0YWIgKmh0YWIsIHN0cnVjdCBodGFiX2VsZW0gKmVsZW0pXG4tLVxua2VybmVsL2JwZi9oYXNodGFiLmMtMTM0NC1cdGJwZl9tYXBfZGVjX2VsZW1fY291bnQoXHUwMDI2aHRhYi1cdTAwM2VtYXApO1xua2VybmVsL2JwZi9oYXNodGFiLmM6MTM0NTpcdGlmIChidGZfcmVjb3JkX2hhc19maWVsZChodGFiLVx1MDAzZW1hcC5yZWNvcmQsIEJQRl9UQVNLX1dPUkspKSB7XG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0xMzQ2LVx0XHRodGFiX2VsZW1fZGVmZXJfZnJlZShodGFiLCBlbGVtKTtcbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYz0xNjk4PXN0YXRpYyB2b2lkIGh0YWJfbWFwX2ZyZWUoc3RydWN0IGJwZl9tYXAgKm1hcClcbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0xNzIxLVx0ICovXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzoxNzIyOlx0aWYgKGJ0Zl9yZWNvcmRfaGFzX2ZpZWxkKGh0YWItXHUwMDNlbWFwLnJlY29yZCwgQlBGX1RBU0tfV09SSykpXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0xNzIzLVx0XHRyY3VfYmFycmllcl90YXNrc190cmFjZSgpO1xuLS1cbmtlcm5lbC9icGYvaGVscGVycy5jPTUwMzI9dm9pZCBicGZfbWFwX2ZyZWVfaW50ZXJuYWxfc3RydWN0cyhzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICp2YWwpXG4tLVxua2VybmVsL2JwZi9oZWxwZXJzLmMtNTAzNy1cdFx0YnBmX29ial9mcmVlX3dvcmtxdWV1ZShtYXAtXHUwMDNlcmVjb3JkLCB2YWwpO1xua2VybmVsL2JwZi9oZWxwZXJzLmM6NTAzODpcdGlmIChidGZfcmVjb3JkX2hhc19maWVsZChtYXAtXHUwMDNlcmVjb3JkLCBCUEZfVEFTS19XT1JLKSlcbmtlcm5lbC9icGYvaGVscGVycy5jLTUwMzktXHRcdGJwZl9vYmpfZnJlZV90YXNrX3dvcmsobWFwLVx1MDAzZXJlY29yZCwgdmFsKTtcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYz02NjU9dm9pZCBidGZfcmVjb3JkX2ZyZWUoc3RydWN0IGJ0Zl9yZWNvcmQgKnJlYylcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy02OTAtXHRcdGNhc2UgQlBGX1dPUktRVUVVRTpcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjY5MTpcdFx0Y2FzZSBCUEZfVEFTS19XT1JLOlxua2VybmVsL2JwZi9zeXNjYWxsLmMtNjkyLVx0XHRcdC8qIE5vdGhpbmcgdG8gcmVsZWFzZSAqL1xuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jPTcwOD1zdHJ1Y3QgYnRmX3JlY29yZCAqYnRmX3JlY29yZF9kdXAoY29uc3Qgc3RydWN0IGJ0Zl9yZWNvcmQgKnJlYylcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy03NDQtXHRcdGNhc2UgQlBGX1dPUktRVUVVRTpcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjc0NTpcdFx0Y2FzZSBCUEZfVEFTS19XT1JLOlxua2VybmVsL2JwZi9zeXNjYWxsLmMtNzQ2LVx0XHRcdC8qIE5vdGhpbmcgdG8gYWNxdWlyZSAqL1xuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jPTgwND12b2lkIGJwZl9vYmpfZnJlZV90YXNrX3dvcmsoY29uc3Qgc3RydWN0IGJ0Zl9yZWNvcmQgKnJlYywgdm9pZCAqb2JqKVxua2VybmVsL2JwZi9zeXNjYWxsLmMtODA1LXtcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjgwNjpcdGlmIChXQVJOX09OX09OQ0UoIWJ0Zl9yZWNvcmRfaGFzX2ZpZWxkKHJlYywgQlBGX1RBU0tfV09SSykpKVxua2VybmVsL2JwZi9zeXNjYWxsLmMtODA3LVx0XHRyZXR1cm47XG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmM9ODE2PXZvaWQgYnBmX29ial9mcmVlX2ZpZWxkcyhjb25zdCBzdHJ1Y3QgYnRmX3JlY29yZCAqcmVjLCB2b2lkICpvYmopXG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmMtODM5LVx0XHRcdGJyZWFrO1xua2VybmVsL2JwZi9zeXNjYWxsLmM6ODQwOlx0XHRjYXNlIEJQRl9UQVNLX1dPUks6XG5rZXJuZWwvYnBmL3N5c2NhbGwuYy04NDEtXHRcdFx0YnBmX3Rhc2tfd29ya19jYW5jZWxfYW5kX2ZyZWUoZmllbGRfcHRyKTtcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYz0xMjQ0PXN0YXRpYyBpbnQgbWFwX2NoZWNrX2J0ZihzdHJ1Y3QgYnBmX21hcCAqbWFwLCBzdHJ1Y3QgYnBmX3Rva2VuICp0b2tlbixcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0xMjY4LVx0XHRcdFx0ICAgICAgIEJQRl9SQl9ST09UIHwgQlBGX1JFRkNPVU5UIHwgQlBGX1dPUktRVUVVRSB8IEJQRl9VUFRSIHxcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjEyNjk6XHRcdFx0XHQgICAgICAgQlBGX1RBU0tfV09SSyxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTEyNzAtXHRcdFx0XHQgICAgICAgbWFwLVx1MDAzZXZhbHVlX3NpemUpO1xuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jLTEzMDEtXHRcdFx0Y2FzZSBCUEZfV09SS1FVRVVFOlxua2VybmVsL2JwZi9zeXNjYWxsLmM6MTMwMjpcdFx0XHRjYXNlIEJQRl9UQVNLX1dPUks6XG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0xMzAzLVx0XHRcdFx0aWYgKG1hcC1cdTAwM2VtYXBfdHlwZSAhPSBCUEZfTUFQX1RZUEVfSEFTSCBcdTAwMjZcdTAwMjZcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTg3NT1zdGF0aWMgdm9pZCBtYXJrX3B0cl9ub3RfbnVsbF9yZWcoc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZylcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTg4Ni1cdFx0XHRpZiAoYnRmX3JlY29yZF9oYXNfZmllbGQobWFwLVx1MDAzZWlubmVyX21hcF9tZXRhLVx1MDAzZXJlY29yZCxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxODg3Olx0XHRcdFx0XHRcdCBCUEZfVElNRVIgfCBCUEZfV09SS1FVRVVFIHwgQlBGX1RBU0tfV09SSykpIHtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xODg4LVx0XHRcdFx0cmVnLVx1MDAzZW1hcF91aWQgPSByZWctXHUwMDNlaWQ7XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTcwNzg9c3RhdGljIGludCBjaGVja19tYXBfZmllbGRfcG9pbnRlcihzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnLCBhcmdub190IGFyZ25vLFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy03MTA2LVx0XHRicmVhaztcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo3MTA3Olx0Y2FzZSBCUEZfVEFTS19XT1JLOlxua2VybmVsL2JwZi92ZXJpZmllci5jLTcxMDgtXHRcdGZpZWxkX29mZiA9IG1hcC1cdTAwM2VyZWNvcmQtXHUwMDNldGFza193b3JrX29mZjtcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTE5MDY9c3RhdGljIGludCBjaGVja19rZnVuY19hcmdzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfa2Z1bmNfY2FsbF9hcmdfbWV0YSAqbWV0YSxcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTI0NDgtXHRcdFx0fVxua2VybmVsL2JwZi92ZXJpZmllci5jOjEyNDQ5Olx0XHRcdHJldCA9IGNoZWNrX21hcF9maWVsZF9wb2ludGVyKGVudiwgcmVnLCBhcmdubywgQlBGX1RBU0tfV09SSywgXHUwMDI2bWV0YS1cdTAwM2VtYXApO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTEyNDUwLVx0XHRcdGlmIChyZXQgXHUwMDNjIDApXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdGFza193b3JrX3N0cmVzcy5jPTQ2PXN0YXRpYyB2b2lkIHRhc2tfd29ya19ydW4oYm9vbCBlbmFibGVfZGVsZXRlKVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3Rhc2tfd29ya19zdHJlc3MuYy01MC1cdGludCBudGhyZWFkcyA9IDE2O1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdGFza193b3JrX3N0cmVzcy5jOjUxOlx0aW50IHRlc3RfdGltZV9zID0gZ2V0X2Vudl9pbnQoXCYjMzQ7QlBGX1RBU0tfV09SS19URVNUX1RJTUVcJiMzNDssIDEpO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdGFza193b3JrX3N0cmVzcy5jLTUyLVx0cHRocmVhZF90IHRpZFtudGhyZWFkc10sIHRpZF9kZWw7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjQgMTk6MzU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzk3MgoJCQkJCQkJb3V0cHV0OiAyNgoJCQkJCQkJdGhvdWdodHM6IDIzMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEJQRiBIYXNodGFibGUgUGF0Y2gqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyB0b3VjaGluZyBga2VybmVsL2JwZi9oYXNodGFiLmNgIGFuZCBga2VybmVsL2JwZi9oZWxwZXJzLmNgLiBJIG5lZWQgdG8gZm9jdXMgb24gdGhlIGtleSBjaGFuZ2VzLCB3aGljaCBzZWVtIHRvIHJldm9sdmUgYXJvdW5kIGRlZmVycmVkIGZyZWVpbmcgb2YgaGFzaHRhYmxlIGVsZW1lbnRzLiBUaGUgbWFpbiBwbGF5ZXJzIGhlcmUgYXJlIGBodGFiX2VsZW1fZGVmZXJfZnJlZWAsIGBodGFiX2VsZW1fZnJlZV9yY3VfY2JgLCBhbmQgdGhlIGZ1bmN0aW9uIGBicGZfdGFza193b3JrX2NhbmNlbF9hbmRfZnJlZWAuIEkgc2hvdWxkIGFsc28ga2VlcCBhbiBleWUgb24gaG93IHRoZSBwYXRjaCBpbnRlcmFjdHMgd2l0aCBleGlzdGluZyBmdW5jdGlvbnMgbGlrZSBgaHRhYl9lbGVtX2ZyZWVgLCBgZnJlZV9odGFiX2VsZW1gLCBgaHRhYl9scnVfcHVzaF9mcmVlYCwgYW5kIGBodGFiX21hcF9mcmVlYCB0byBnZXQgdGhlIGZ1bGwgcGljdHVyZS4KCldhaXQgYSBzZWNvbmTigKYgYGh0YWJfZWxlbV9kZWZlcl9mcmVlYCBhbmQgYGh0YWJfZWxlbV9mcmVlX3JjdV9jYmAgYXJlIGJvdGggZGVjbGFyZWQgYXMgYHN0YXRpY2AuIFRoYXQgbGltaXRzIHRoZWlyIHNjb3BlIHRvIHRoaXMgZmlsZSwgd2hpY2ggbWVhbnMgdGhlIG1haW4gKmV4cG9zZWQqIGZ1bmN0aW9uIGhlcmUgaXMgYGJwZl90YXNrX3dvcmtfY2FuY2VsX2FuZF9mcmVlYC4gSSYjMzk7bGwgbmVlZCB0byBjb25maXJtIGlmIGl0JiMzOTtzIGV4cG9ydGVkIG9yIGdsb2JhbCB0byBmdWxseSB1bmRlcnN0YW5kIHRoZSBpbXBhY3QuIExldCYjMzk7cyBkaWcgaW50byBgYnBmX3Rhc2tfd29ya19jYW5jZWxfYW5kX2ZyZWVgIGRpcmVjdGx5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI0IDE5OjM1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JwZl90YXNrX3dvcmtfY2FuY2VsX2FuZF9mcmVlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvYnBmLmg9NjQ2PXZvaWQgYnBmX3dxX2NhbmNlbF9hbmRfZnJlZSh2b2lkICp0aW1lcik7XG5pbmNsdWRlL2xpbnV4L2JwZi5oOjY0Nzp2b2lkIGJwZl90YXNrX3dvcmtfY2FuY2VsX2FuZF9mcmVlKHZvaWQgKnRpbWVyKTtcbmluY2x1ZGUvbGludXgvYnBmLmgtNjQ4LXZvaWQgYnBmX2xpc3RfaGVhZF9mcmVlKGNvbnN0IHN0cnVjdCBidGZfZmllbGQgKmZpZWxkLCB2b2lkICpsaXN0X2hlYWQsXG4tLVxua2VybmVsL2JwZi9oYXNodGFiLmM9MTEzOD1zdGF0aWMgc3RydWN0IGh0YWJfZWxlbSAqYWxsb2NfaHRhYl9lbGVtKHN0cnVjdCBicGZfaHRhYiAqaHRhYiwgdm9pZCAqa2V5LFxuLS1cbmtlcm5lbC9icGYvaGFzaHRhYi5jLTExODQtXHQgKiBza2lwcyBidGZfcmVjb3JkIGZpZWxkcywgc28gYSBzdGFsZSBFUlJfUFRSKC1FQlVTWSkgbGVmdCBieVxua2VybmVsL2JwZi9oYXNodGFiLmM6MTE4NTpcdCAqIGJwZl90YXNrX3dvcmtfY2FuY2VsX2FuZF9mcmVlIHdvdWxkIHBlcnNpc3QgYW5kIGJsb2NrIG5ldyBzY2hlZHVsaW5nLlxua2VybmVsL2JwZi9oYXNodGFiLmMtMTE4Ni1cdCAqL1xuLS1cbmtlcm5lbC9icGYvaGVscGVycy5jPTQ1NTQ9c3RhdGljIHN0cnVjdCBicGZfdGFza193b3JrX2N0eCAqYnBmX3Rhc2tfd29ya19hY3F1aXJlX2N0eChzdHJ1Y3QgYnBmX3Rhc2tfd29yayAqdHcsXG4tLVxua2VybmVsL2JwZi9oZWxwZXJzLmMtNDU5MS1cdFx0LyogdHJhbnNmZXIgbWFwJiMzOTtzIHJlZiBpbnRvIGNhbmNlbF9hbmRfZnJlZSgpICovXG5rZXJuZWwvYnBmL2hlbHBlcnMuYzo0NTkyOlx0XHRicGZfdGFza193b3JrX2NhbmNlbF9hbmRfZnJlZSh0dyk7XG5rZXJuZWwvYnBmL2hlbHBlcnMuYy00NTkzLVx0XHRyZXR1cm4gRVJSX1BUUigtRUJVU1kpO1xuLS1cbmtlcm5lbC9icGYvaGVscGVycy5jPTQ3NzY9c3RhdGljIHZvaWQgYnBmX3Rhc2tfd29ya19jYW5jZWxfc2NoZWR1bGVkKHN0cnVjdCBpcnFfd29yayAqaXJxX3dvcmspXG4tLVxua2VybmVsL2JwZi9oZWxwZXJzLmMtNDc4My1cbmtlcm5lbC9icGYvaGVscGVycy5jOjQ3ODQ6dm9pZCBicGZfdGFza193b3JrX2NhbmNlbF9hbmRfZnJlZSh2b2lkICp2YWwpXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy00Nzg1LXtcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYz04MDQ9dm9pZCBicGZfb2JqX2ZyZWVfdGFza193b3JrKGNvbnN0IHN0cnVjdCBidGZfcmVjb3JkICpyZWMsIHZvaWQgKm9iailcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy04MDctXHRcdHJldHVybjtcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjgwODpcdGJwZl90YXNrX3dvcmtfY2FuY2VsX2FuZF9mcmVlKG9iaiAmIzQzOyByZWMtXHUwMDNldGFza193b3JrX29mZik7XG5rZXJuZWwvYnBmL3N5c2NhbGwuYy04MDktfVxuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jPTgxNj12b2lkIGJwZl9vYmpfZnJlZV9maWVsZHMoY29uc3Qgc3RydWN0IGJ0Zl9yZWNvcmQgKnJlYywgdm9pZCAqb2JqKVxuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jLTg0MC1cdFx0Y2FzZSBCUEZfVEFTS19XT1JLOlxua2VybmVsL2JwZi9zeXNjYWxsLmM6ODQxOlx0XHRcdGJwZl90YXNrX3dvcmtfY2FuY2VsX2FuZF9mcmVlKGZpZWxkX3B0cik7XG5rZXJuZWwvYnBmL3N5c2NhbGwuYy04NDItXHRcdFx0YnJlYWs7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjQgMTk6MzU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTIyNAoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDIwNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipCUEYgQ29uZmlndXJhdGlvbiBEZWVwIERpdmUqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGludG8gdGhlIEJQRiBjb25maWd1cmF0aW9uLCBzcGVjaWZpY2FsbHkgYXJvdW5kIHNvbWUgbWVtb3J5IG1hbmFnZW1lbnQgY29uY2VybnMuIE15IHN0YXJ0aW5nIHBvaW50IGlzIGBCUEZfU1lTQ0FMTGAsIHRoYXQgc2VlbXMgdG8gYmUgdGhlIGtleSBjb25maWd1cmF0aW9uIG9wdGlvbi4gQnV0LCBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQgdGhpcyBpcyB0aGUgb25seSBvbmUgbmVlZGVkIHRvIGVuYWJsZSBhbGwgdGhlIHJlbGV2YW50IGZlYXR1cmVzLiBJIHN1c3BlY3QgaXQgaXMsIGJ1dCBpdCYjMzk7cyBhbHdheXMgYmVzdCB0byBiZSB0aG9yb3VnaC4KCk15IGZvY3VzIHJpZ2h0IG5vdyBpcyBvbiBzeW1ib2xzIHRoYXQgc2VlbSB0byBiZSByZWxhdGVkIHRvIGhhc2h0YWJsZSBlbGVtZW50IGZyZWVpbmcgYW5kIGNsZWFudXAuIFRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zIGxvb2sgaW1wb3J0YW50OiBgaHRhYl9lbGVtX2RlZmVyX2ZyZWVgLCBgaHRhYl9lbGVtX2ZyZWVfcmN1X2NiYCwgYGJwZl90YXNrX3dvcmtfY2FuY2VsX2FuZF9mcmVlYCwgYGh0YWJfbWFwX2ZyZWVgLCBgZnJlZV9odGFiX2VsZW1gLCBgaHRhYl9lbGVtX2ZyZWVgLCBhbmQgYGh0YWJfbHJ1X3B1c2hfZnJlZWAuIFRoZXNlIGxpa2VseSBob2xkIHRoZSBrZXkgdG8gdW5kZXJzdGFuZGluZyB0aGUgZnVsbCBsaWZlY3ljbGUuCgpBIHF1aWNrIGNyb3NzLXJlZmVyZW5jZSBzaG93cyB0aGF0IGBodGFiX2VsZW1fZGVmZXJfZnJlZWAgaXMgYSBzdGF0aWMgZnVuY3Rpb24sIHJlc2lkaW5nIHdpdGhpbiBga2VybmVsL2JwZi9oYXNodGFiLmNgLCBhbmQgYGJwZl90YXNrX3dvcmtfY2FuY2VsX2FuZF9mcmVlYCBpcyBsb2NhdGVkIGluIGBrZXJuZWwvYnBmL2hlbHBlcnMuY2AuIFRoaXMgaXMgdXNlZnVsLCB0aGlzIGNvbmZpcm1zIHRoZXkmIzM5O3JlIGluIHRoZSByaWdodCBwbGFjZXMsIGJ1dCBkb2VzbiYjMzk7dCBpbW1lZGlhdGVseSB0ZWxsIG1lIHRoZSBkZXBlbmRlbmNpZXMuCgpOb3csIG15IG5leHQgc3RlcCBpcyB0byBjb25maXJtIHdoZXRoZXIgb3Igbm90IGBCUEZfU1lTQ0FMTGAgaXMgdGhlIG9ubHkgY29uZmlnIEkgbmVlZC4gSSYjMzk7bGwgbmVlZCB0byBkaWcgZGVlcGVyIGludG8gdGhlIGJ1aWxkIHN5c3RlbSBhbmQgZGVwZW5kZW5jaWVzIHRvIGJlIGNvbXBsZXRlbHkgY2VydGFpbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNCAxOTozNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgQlBGX1NZU0NBTEwmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9LY29uZmlnPTI1PW1lbnUgXCYjMzQ7QlBGIHN1YnN5c3RlbVwmIzM0O1xua2VybmVsL2JwZi9LY29uZmlnLTI2LVxua2VybmVsL2JwZi9LY29uZmlnOjI3OmNvbmZpZyBCUEZfU1lTQ0FMTFxua2VybmVsL2JwZi9LY29uZmlnLTI4LVx0Ym9vbCBcJiMzNDtFbmFibGUgYnBmKCkgc3lzdGVtIGNhbGxcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNCAxOTozNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5ODYzCgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogNTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGZyb20gbXkgcGVyc3BlY3RpdmUgYXMgYW4gZXhwZXJ0IGluIHRoZSBmaWVsZDoKCioqSW5pdGlhbCBBc3Nlc3NtZW50IG9mIEJQRiBDb25maWd1cmF0aW9uKioKCkFscmlnaHQsIHNvIHRoZSBjb3JlIGNvbmZpZ3VyYXRpb24gcG9pbnQgZm9yIEJQRiwgdGhlIG9uZSB0byBsb29rIGF0IGZpcnN0IGFuZCBmb3JlbW9zdCwgaXMgZGVmaW5pdGVseSBgQlBGX1NZU0NBTExgLiBUaGF0JiMzOTtzIHRoZSBiYXNlbGluZSwgdGhlIGNyaXRpY2FsIHBpZWNlLiBCdXQsIGhvbGQgb24gYSBtaW51dGUsIGxldCYjMzk7cyBub3QganVtcCB0byBjb25jbHVzaW9ucy4gYGJwZl90YXNrX3dvcmtgIGlzIGEgc3BlY2lmaWMgKmZlYXR1cmUqIHdpdGhpbiB0aGUgYnJvYWRlciBCUEYgZWNvc3lzdGVtLiBNeSBleHBlcmllbmNlIHNjcmVhbXMgdGhhdCBvZnRlbiB0aGVzZSBzcGVjaWFsaXplZCBmdW5jdGlvbmFsaXRpZXMgaGF2ZSBkZXBlbmRlbmNpZXMsIGFuZCBzb21ldGltZXMgbm90IGltbWVkaWF0ZWx5IG9idmlvdXMgb25lcy4KClRoZXJlZm9yZSwgYmVmb3JlIEkgZ28gYW55IGZ1cnRoZXIsIEkgbmVlZCB0byB2ZXJpZnksICpleHBsaWNpdGx5KiwgaWYgdGhlcmUgYXJlIGFueSBvdGhlciBjb25maWd1cmF0aW9uIGtub2JzIHJlbGF0ZWQgdG8gYGJwZl90YXNrX3dvcmtgIGl0c2VsZi4gSnVzdCBiZWNhdXNlIGl0JiMzOTtzIHBhcnQgb2YgQlBGIGRvZXNuJiMzOTt0IGF1dG9tYXRpY2FsbHkgbWVhbiBpdCYjMzk7cyBlbmFibGVkIGJ5IHRoZSBwcmltYXJ5IGBCUEZfU1lTQ0FMTGAgc3dpdGNoLiBJdCBjb3VsZCBiZSBjb25kaXRpb25hbGx5IGNvbXBpbGVkIG9yIGRlcGVuZCBvbiBhbm90aGVyLCBwZXJoYXBzIG1vcmUgZ3JhbnVsYXIsIG9wdGlvbi4gSSBuZWVkIHRvIGJlICpzdXJlKiBJJiMzOTttIG5vdCBtaXNzaW5nIHNvbWV0aGluZyBmdW5kYW1lbnRhbC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjQgMTk6MzU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnBmX3Rhc2tfd29yayYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtEb2N1bWVudGF0aW9uL2JwZi9rZnVuY3MucnN0PTQwMj1FeGFtcGxlIGRlY2xhcmF0aW9uOlxuLS1cbkRvY3VtZW50YXRpb24vYnBmL2tmdW5jcy5yc3QtNDA1LVxuRG9jdW1lbnRhdGlvbi9icGYva2Z1bmNzLnJzdDo0MDY6XHRfX2JwZl9rZnVuYyBpbnQgYnBmX3Rhc2tfd29ya19zY2hlZHVsZV9zaWduYWwoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLCBzdHJ1Y3QgYnBmX3Rhc2tfd29yayAqdHcsXG5Eb2N1bWVudGF0aW9uL2JwZi9rZnVuY3MucnN0OjQwNzpcdFx0XHRcdFx0XHQgICAgICB2b2lkICptYXBfX21hcCwgYnBmX3Rhc2tfd29ya19jYWxsYmFja190IGNhbGxiYWNrLFxuRG9jdW1lbnRhdGlvbi9icGYva2Z1bmNzLnJzdC00MDgtXHRcdFx0XHRcdFx0ICAgICAgc3RydWN0IGJwZl9wcm9nX2F1eCAqYXV4KSB7IC4uLiB9XG4tLVxuRG9jdW1lbnRhdGlvbi9icGYva2Z1bmNzLnJzdD00MTA9RXhhbXBsZSB1c2FnZSBpbiBCUEYgcHJvZ3JhbTpcbi0tXG5Eb2N1bWVudGF0aW9uL2JwZi9rZnVuY3MucnN0LTQxNC1cdC8qIG5vdGUgdGhhdCB0aGUgbGFzdCBhcmd1bWVudCBpcyBvbWl0dGVkICovXG5Eb2N1bWVudGF0aW9uL2JwZi9rZnVuY3MucnN0OjQxNTogICAgICAgIGJwZl90YXNrX3dvcmtfc2NoZWR1bGVfc2lnbmFsKHRhc2ssIFx1MDAyNndvcmstXHUwMDNldHcsIFx1MDAyNmFycm1hcCwgdGFza193b3JrX2NhbGxiYWNrKTtcbkRvY3VtZW50YXRpb24vYnBmL2tmdW5jcy5yc3QtNDE2LVxuLS1cbmluY2x1ZGUvbGludXgvYnBmLmg9MzQ2PXN0YXRpYyBpbmxpbmUgY29uc3QgY2hhciAqYnRmX2ZpZWxkX3R5cGVfbmFtZShlbnVtIGJ0Zl9maWVsZF90eXBlIHR5cGUpXG4tLVxuaW5jbHVkZS9saW51eC9icGYuaC0zNzQtXHRjYXNlIEJQRl9UQVNLX1dPUks6XG5pbmNsdWRlL2xpbnV4L2JwZi5oOjM3NTpcdFx0cmV0dXJuIFwmIzM0O2JwZl90YXNrX3dvcmtcJiMzNDs7XG5pbmNsdWRlL2xpbnV4L2JwZi5oLTM3Ni1cdGRlZmF1bHQ6XG4tLVxuaW5jbHVkZS9saW51eC9icGYuaD0zODg9c3RhdGljIGlubGluZSB1MzIgYnRmX2ZpZWxkX3R5cGVfc2l6ZShlbnVtIGJ0Zl9maWVsZF90eXBlIHR5cGUpXG4tLVxuaW5jbHVkZS9saW51eC9icGYuaC00MTQtXHRjYXNlIEJQRl9UQVNLX1dPUks6XG5pbmNsdWRlL2xpbnV4L2JwZi5oOjQxNTpcdFx0cmV0dXJuIHNpemVvZihzdHJ1Y3QgYnBmX3Rhc2tfd29yayk7XG5pbmNsdWRlL2xpbnV4L2JwZi5oLTQxNi1cdGRlZmF1bHQ6XG4tLVxuaW5jbHVkZS9saW51eC9icGYuaD00MjI9c3RhdGljIGlubGluZSB1MzIgYnRmX2ZpZWxkX3R5cGVfYWxpZ24oZW51bSBidGZfZmllbGRfdHlwZSB0eXBlKVxuLS1cbmluY2x1ZGUvbGludXgvYnBmLmgtNDQ4LVx0Y2FzZSBCUEZfVEFTS19XT1JLOlxuaW5jbHVkZS9saW51eC9icGYuaDo0NDk6XHRcdHJldHVybiBfX2FsaWdub2ZfXyhzdHJ1Y3QgYnBmX3Rhc2tfd29yayk7XG5pbmNsdWRlL2xpbnV4L2JwZi5oLTQ1MC1cdGRlZmF1bHQ6XG4tLVxuaW5jbHVkZS9saW51eC9icGYuaD02NDY9dm9pZCBicGZfd3FfY2FuY2VsX2FuZF9mcmVlKHZvaWQgKnRpbWVyKTtcbmluY2x1ZGUvbGludXgvYnBmLmg6NjQ3OnZvaWQgYnBmX3Rhc2tfd29ya19jYW5jZWxfYW5kX2ZyZWUodm9pZCAqdGltZXIpO1xuaW5jbHVkZS9saW51eC9icGYuaC02NDgtdm9pZCBicGZfbGlzdF9oZWFkX2ZyZWUoY29uc3Qgc3RydWN0IGJ0Zl9maWVsZCAqZmllbGQsIHZvaWQgKmxpc3RfaGVhZCxcbi0tXG5pbmNsdWRlL3VhcGkvbGludXgvYnBmLmg9NzUwMj1zdHJ1Y3QgYnBmX3RpbWVyIHtcbi0tXG5pbmNsdWRlL3VhcGkvbGludXgvYnBmLmgtNzUwNS1cbmluY2x1ZGUvdWFwaS9saW51eC9icGYuaDo3NTA2OnN0cnVjdCBicGZfdGFza193b3JrIHtcbmluY2x1ZGUvdWFwaS9saW51eC9icGYuaC03NTA3LVx0X191NjQgX19vcGFxdWU7XG4tLVxua2VybmVsL2JwZi9idGYuYz0zNjA3PXN0YXRpYyBpbnQgYnRmX2dldF9maWVsZF90eXBlKGNvbnN0IHN0cnVjdCBidGYgKmJ0ZiwgY29uc3Qgc3RydWN0IGJ0Zl90eXBlICp2YXJfdHlwZSxcbi0tXG5rZXJuZWwvYnBmL2J0Zi5jLTM2MTgtXHRcdHsgQlBGX1dPUktRVUVVRSwgXCYjMzQ7YnBmX3dxXCYjMzQ7LCB0cnVlIH0sXG5rZXJuZWwvYnBmL2J0Zi5jOjM2MTk6XHRcdHsgQlBGX1RBU0tfV09SSywgXCYjMzQ7YnBmX3Rhc2tfd29ya1wmIzM0OywgdHJ1ZSB9LFxua2VybmVsL2JwZi9idGYuYy0zNjIwLVx0XHR7IEJQRl9MSVNUX0hFQUQsIFwmIzM0O2JwZl9saXN0X2hlYWRcJiMzNDssIGZhbHNlIH0sXG4tLVxua2VybmVsL2JwZi9oYXNodGFiLmM9ODk2PXN0YXRpYyBpbnQgaHRhYl9tYXBfZ2V0X25leHRfa2V5KHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSwgdm9pZCAqbmV4dF9rZXkpXG4tLVxua2VybmVsL2JwZi9oYXNodGFiLmMtOTUzLVxua2VybmVsL2JwZi9oYXNodGFiLmM6OTU0Oi8qIERlZmVycmVkIGh0YWJfZWxlbSBmcmVlIGZvciBicGZfdGFza193b3JrIG1hcHMuICBjYW5jZWxfYW5kX2ZyZWUoKVxua2VybmVsL2JwZi9oYXNodGFiLmMtOTU1LSAqIHJldHVybnMgd2hpbGUgdGhlIHRhc2tfd29yayBjYWxsYmFjayBtYXkgc3RpbGwgYmUgYWNjZXNzaW5nIG1hcF92YWw7XG4tLVxua2VybmVsL2JwZi9oYXNodGFiLmM9MTEzOD1zdGF0aWMgc3RydWN0IGh0YWJfZWxlbSAqYWxsb2NfaHRhYl9lbGVtKHN0cnVjdCBicGZfaHRhYiAqaHRhYiwgdm9pZCAqa2V5LFxuLS1cbmtlcm5lbC9icGYvaGFzaHRhYi5jLTExODQtXHQgKiBza2lwcyBidGZfcmVjb3JkIGZpZWxkcywgc28gYSBzdGFsZSBFUlJfUFRSKC1FQlVTWSkgbGVmdCBieVxua2VybmVsL2JwZi9oYXNodGFiLmM6MTE4NTpcdCAqIGJwZl90YXNrX3dvcmtfY2FuY2VsX2FuZF9mcmVlIHdvdWxkIHBlcnNpc3QgYW5kIGJsb2NrIG5ldyBzY2hlZHVsaW5nLlxua2VybmVsL2JwZi9oYXNodGFiLmMtMTE4Ni1cdCAqL1xuLS1cbmtlcm5lbC9icGYvaGFzaHRhYi5jPTE2OTg9c3RhdGljIHZvaWQgaHRhYl9tYXBfZnJlZShzdHJ1Y3QgYnBmX21hcCAqbWFwKVxuLS1cbmtlcm5lbC9icGYvaGFzaHRhYi5jLTE3MTYtXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzoxNzE3Olx0LyogRm9yIGJwZl90YXNrX3dvcmsgbWFwcywgZWxlbWVudCBmcmVlcyBkZWZlciByZWN5Y2xpbmcgdGhyb3VnaFxua2VybmVsL2JwZi9oYXNodGFiLmMtMTcxOC1cdCAqIGNhbGxfcmN1X3Rhc2tzX3RyYWNlKCkgc28gcnVubmluZyBjYWxsYmFja3MgZmluaXNoIGJlZm9yZSByZXVzZS5cbi0tXG5rZXJuZWwvYnBmL2hlbHBlcnMuYz00MzE2PV9fYnBmX2tmdW5jIGludCBicGZfdmVyaWZ5X3BrY3M3X3NpZ25hdHVyZShjb25zdCBzdHJ1Y3QgYnBmX2R5bnB0ciAqZGF0YV9wLFxuLS1cbmtlcm5lbC9icGYvaGVscGVycy5jLTQzNjAtXG5rZXJuZWwvYnBmL2hlbHBlcnMuYzo0MzYxOnR5cGVkZWYgaW50ICgqYnBmX3Rhc2tfd29ya19jYWxsYmFja190KShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXksIHZvaWQgKnZhbHVlKTtcbmtlcm5lbC9icGYvaGVscGVycy5jLTQzNjItXG5rZXJuZWwvYnBmL2hlbHBlcnMuYzo0MzYzOmVudW0gYnBmX3Rhc2tfd29ya19zdGF0ZSB7XG5rZXJuZWwvYnBmL2hlbHBlcnMuYzo0MzY0Olx0LyogYnBmX3Rhc2tfd29yayBpcyByZWFkeSB0byBiZSB1c2VkICovXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy00MzY1LVx0QlBGX1RXX1NUQU5EQlkgPSAwLFxuLS1cbmtlcm5lbC9icGYvaGVscGVycy5jLTQzNzctXG5rZXJuZWwvYnBmL2hlbHBlcnMuYzo0Mzc4OnN0cnVjdCBicGZfdGFza193b3JrX2N0eCB7XG5rZXJuZWwvYnBmL2hlbHBlcnMuYzo0Mzc5Olx0ZW51bSBicGZfdGFza193b3JrX3N0YXRlIHN0YXRlO1xua2VybmVsL2JwZi9oZWxwZXJzLmMtNDM4MC1cdHJlZmNvdW50X3QgcmVmY250O1xuLS1cbmtlcm5lbC9icGYvaGVscGVycy5jLTQzOTAtXHRlbnVtIHRhc2tfd29ya19ub3RpZnlfbW9kZSBtb2RlO1xua2VybmVsL2JwZi9oZWxwZXJzLmM6NDM5MTpcdGJwZl90YXNrX3dvcmtfY2FsbGJhY2tfdCBjYWxsYmFja19mbjtcbmtlcm5lbC9icGYvaGVscGVycy5jLTQzOTItXHRzdHJ1Y3QgcmN1X2hlYWQgcmN1O1xuLS1cbmtlcm5lbC9icGYvaGVscGVycy5jLTQzOTQtXG5rZXJuZWwvYnBmL2hlbHBlcnMuYzo0Mzk1Oi8qIEFjdHVhbCB0eXBlIGZvciBzdHJ1Y3QgYnBmX3Rhc2tfd29yayAqL1xua2VybmVsL2JwZi9oZWxwZXJzLmM6NDM5NjpzdHJ1Y3QgYnBmX3Rhc2tfd29ya19rZXJuIHtcbmtlcm5lbC9icGYvaGVscGVycy5jOjQzOTc6XHRzdHJ1Y3QgYnBmX3Rhc2tfd29ya19jdHggKmN0eDtcbmtlcm5lbC9icGYvaGVscGVycy5jLTQzOTgtfTtcbmtlcm5lbC9icGYvaGVscGVycy5jLTQzOTktXG5rZXJuZWwvYnBmL2hlbHBlcnMuYzo0NDAwOnN0YXRpYyB2b2lkIGJwZl90YXNrX3dvcmtfY3R4X3Jlc2V0KHN0cnVjdCBicGZfdGFza193b3JrX2N0eCAqY3R4KVxua2VybmVsL2JwZi9oZWxwZXJzLmMtNDQwMS17XG4tLVxua2VybmVsL2JwZi9oZWxwZXJzLmMtNDQxMS1cbmtlcm5lbC9icGYvaGVscGVycy5jOjQ0MTI6c3RhdGljIGJvb2wgYnBmX3Rhc2tfd29ya19jdHhfdHJ5Z2V0KHN0cnVjdCBicGZfdGFza193b3JrX2N0eCAqY3R4KVxua2VybmVsL2JwZi9oZWxwZXJzLmMtNDQxMy17XG4tLVxua2VybmVsL2JwZi9oZWxwZXJzLmMtNDQxNi1cbmtlcm5lbC9icGYvaGVscGVycy5jOjQ0MTc6c3RhdGljIHZvaWQgYnBmX3Rhc2tfd29ya19kZXN0cm95KHN0cnVjdCBpcnFfd29yayAqaXJxX3dvcmspXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy00NDE4LXtcbmtlcm5lbC9icGYvaGVscGVycy5jOjQ0MTk6XHRzdHJ1Y3QgYnBmX3Rhc2tfd29ya19jdHggKmN0eCA9IGNvbnRhaW5lcl9vZihpcnFfd29yaywgc3RydWN0IGJwZl90YXNrX3dvcmtfY3R4LCBpcnFfd29yayk7XG5rZXJuZWwvYnBmL2hlbHBlcnMuYy00NDIwLVxua2VybmVsL2JwZi9oZWxwZXJzLmM6NDQyMTpcdGJwZl90YXNrX3dvcmtfY3R4X3Jlc2V0KGN0eCk7XG5rZXJuZWwvYnBmL2hlbHBlcnMuYy00NDIyLVx0a2ZyZWVfcmN1KGN0eCwgcmN1KTtcbi0tXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy00NDI0LVxua2VybmVsL2JwZi9oZWxwZXJzLmM6NDQyNTpzdGF0aWMgdm9pZCBicGZfdGFza193b3JrX2N0eF9wdXQoc3RydWN0IGJwZl90YXNrX3dvcmtfY3R4ICpjdHgpXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy00NDI2LXtcbi0tXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy00NDMwLVx0aWYgKGlycXNfZGlzYWJsZWQoKSkge1xua2VybmVsL2JwZi9oZWxwZXJzLmM6NDQzMTpcdFx0Y3R4LVx1MDAzZWlycV93b3JrID0gSVJRX1dPUktfSU5JVChicGZfdGFza193b3JrX2Rlc3Ryb3kpO1xua2VybmVsL2JwZi9oZWxwZXJzLmMtNDQzMi1cdFx0aXJxX3dvcmtfcXVldWUoXHUwMDI2Y3R4LVx1MDAzZWlycV93b3JrKTtcbmtlcm5lbC9icGYvaGVscGVycy5jLTQ0MzMtXHR9IGVsc2Uge1xua2VybmVsL2JwZi9oZWxwZXJzLmM6NDQzNDpcdFx0YnBmX3Rhc2tfd29ya19kZXN0cm95KFx1MDAyNmN0eC1cdTAwM2VpcnFfd29yayk7XG5rZXJuZWwvYnBmL2hlbHBlcnMuYy00NDM1LVx0fVxuLS1cbmtlcm5lbC9icGYvaGVscGVycy5jLTQ0MzctXG5rZXJuZWwvYnBmL2hlbHBlcnMuYzo0NDM4OnN0YXRpYyB2b2lkIGJwZl90YXNrX3dvcmtfY2FuY2VsKHN0cnVjdCBicGZfdGFza193b3JrX2N0eCAqY3R4KVxua2VybmVsL2JwZi9oZWxwZXJzLmMtNDQzOS17XG4tLVxua2VybmVsL2JwZi9oZWxwZXJzLmMtNDQ0Ni1cdGlmICh0YXNrX3dvcmtfY2FuY2VsKGN0eC1cdTAwM2V0YXNrLCBcdTAwMjZjdHgtXHUwMDNld29yaykpXG5rZXJuZWwvYnBmL2hlbHBlcnMuYzo0NDQ3Olx0XHRicGZfdGFza193b3JrX2N0eF9wdXQoY3R4KTtcbmtlcm5lbC9icGYvaGVscGVycy5jLTQ0NDgtfVxua2VybmVsL2JwZi9oZWxwZXJzLmMtNDQ0OS1cbmtlcm5lbC9icGYvaGVscGVycy5jOjQ0NTA6c3RhdGljIHZvaWQgYnBmX3Rhc2tfd29ya19jYWxsYmFjayhzdHJ1Y3QgY2FsbGJhY2tfaGVhZCAqY2IpXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy00NDUxLXtcbmtlcm5lbC9icGYvaGVscGVycy5jOjQ0NTI6XHRzdHJ1Y3QgYnBmX3Rhc2tfd29ya19jdHggKmN0eCA9IGNvbnRhaW5lcl9vZihjYiwgc3RydWN0IGJwZl90YXNrX3dvcmtfY3R4LCB3b3JrKTtcbmtlcm5lbC9icGYvaGVscGVycy5jOjQ0NTM6XHRlbnVtIGJwZl90YXNrX3dvcmtfc3RhdGUgc3RhdGU7XG5rZXJuZWwvYnBmL2hlbHBlcnMuYy00NDU0LVx0dTMyIGlkeDtcbi0tXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy00NDYyLVx0Lypcbmtlcm5lbC9icGYvaGVscGVycy5jOjQ0NjM6XHQgKiBUaGlzIGNhbGxiYWNrIG1heSBzdGFydCBydW5uaW5nIGJlZm9yZSBicGZfdGFza193b3JrX2lycSgpIHN3aXRjaGVkIHRvXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy00NDY0LVx0ICogU0NIRURVTEVEIHN0YXRlLCBzbyBoYW5kbGUgYm90aCB0cmFuc2l0aW9uIHZhcmlhbnRzIFNDSEVEVUxJTkd8U0NIRURVTEVEIC1cdTAwM2UgUlVOTklORy5cbi0tXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy00NDY5LVx0aWYgKHN0YXRlID09IEJQRl9UV19GUkVFRCkge1xua2VybmVsL2JwZi9oZWxwZXJzLmM6NDQ3MDpcdFx0YnBmX3Rhc2tfd29ya19jdHhfcHV0KGN0eCk7XG5rZXJuZWwvYnBmL2hlbHBlcnMuYy00NDcxLVx0XHRyZXR1cm47XG4tLVxua2VybmVsL2JwZi9oZWxwZXJzLmMtNDQ3OS1cbmtlcm5lbC9icGYvaGVscGVycy5jOjQ0ODA6XHRicGZfdGFza193b3JrX2N0eF9yZXNldChjdHgpO1xua2VybmVsL2JwZi9oZWxwZXJzLmMtNDQ4MS1cdCh2b2lkKWNtcHhjaGcoXHUwMDI2Y3R4LVx1MDAzZXN0YXRlLCBCUEZfVFdfUlVOTklORywgQlBGX1RXX1NUQU5EQlkpO1xua2VybmVsL2JwZi9oZWxwZXJzLmMtNDQ4Mi1cbmtlcm5lbC9icGYvaGVscGVycy5jOjQ0ODM6XHRicGZfdGFza193b3JrX2N0eF9wdXQoY3R4KTtcbmtlcm5lbC9icGYvaGVscGVycy5jLTQ0ODQtfVxua2VybmVsL2JwZi9oZWxwZXJzLmMtNDQ4NS1cbmtlcm5lbC9icGYvaGVscGVycy5jOjQ0ODY6c3RhdGljIHZvaWQgYnBmX3Rhc2tfd29ya19pcnEoc3RydWN0IGlycV93b3JrICppcnFfd29yaylcbmtlcm5lbC9icGYvaGVscGVycy5jLTQ0ODcte1xua2VybmVsL2JwZi9oZWxwZXJzLmM6NDQ4ODpcdHN0cnVjdCBicGZfdGFza193b3JrX2N0eCAqY3R4ID0gY29udGFpbmVyX29mKGlycV93b3JrLCBzdHJ1Y3QgYnBmX3Rhc2tfd29ya19jdHgsIGlycV93b3JrKTtcbmtlcm5lbC9icGYvaGVscGVycy5jOjQ0ODk6XHRlbnVtIGJwZl90YXNrX3dvcmtfc3RhdGUgc3RhdGU7XG5rZXJuZWwvYnBmL2hlbHBlcnMuYy00NDkwLVx0aW50IGVycjtcbi0tXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy00NDk0LVx0aWYgKGNtcHhjaGcoXHUwMDI2Y3R4LVx1MDAzZXN0YXRlLCBCUEZfVFdfUEVORElORywgQlBGX1RXX1NDSEVEVUxJTkcpICE9IEJQRl9UV19QRU5ESU5HKSB7XG5rZXJuZWwvYnBmL2hlbHBlcnMuYzo0NDk1Olx0XHRicGZfdGFza193b3JrX2N0eF9wdXQoY3R4KTtcbmtlcm5lbC9icGYvaGVscGVycy5jLTQ0OTYtXHRcdHJldHVybjtcbi0tXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy00NTAwLVx0aWYgKGVycikge1xua2VybmVsL2JwZi9oZWxwZXJzLmM6NDUwMTpcdFx0YnBmX3Rhc2tfd29ya19jdHhfcmVzZXQoY3R4KTtcbmtlcm5lbC9icGYvaGVscGVycy5jLTQ1MDItXHRcdC8qXG4tLVxua2VybmVsL2JwZi9oZWxwZXJzLmMtNDUwNi1cdFx0KHZvaWQpY21weGNoZyhcdTAwMjZjdHgtXHUwMDNlc3RhdGUsIEJQRl9UV19TQ0hFRFVMSU5HLCBCUEZfVFdfU1RBTkRCWSk7XG5rZXJuZWwvYnBmL2hlbHBlcnMuYzo0NTA3Olx0XHRicGZfdGFza193b3JrX2N0eF9wdXQoY3R4KTtcbmtlcm5lbC9icGYvaGVscGVycy5jLTQ1MDgtXHRcdHJldHVybjtcbi0tXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy00NTE5LVx0aWYgKHN0YXRlID09IEJQRl9UV19GUkVFRClcbmtlcm5lbC9icGYvaGVscGVycy5jOjQ1MjA6XHRcdGJwZl90YXNrX3dvcmtfY2FuY2VsKGN0eCk7IC8qIGNsZWFuIHVwIGlmIHdlIHN3aXRjaGVkIGludG8gRlJFRUQgc3RhdGUgKi9cbmtlcm5lbC9icGYvaGVscGVycy5jLTQ1MjEtfVxua2VybmVsL2JwZi9oZWxwZXJzLmMtNDUyMi1cbmtlcm5lbC9icGYvaGVscGVycy5jOjQ1MjM6c3RhdGljIHN0cnVjdCBicGZfdGFza193b3JrX2N0eCAqYnBmX3Rhc2tfd29ya19mZXRjaF9jdHgoc3RydWN0IGJwZl90YXNrX3dvcmsgKnR3LFxua2VybmVsL2JwZi9oZWxwZXJzLmMtNDUyNC1cdFx0XHRcdFx0XHRcdCBzdHJ1Y3QgYnBmX21hcCAqbWFwKVxua2VybmVsL2JwZi9oZWxwZXJzLmMtNDUyNS17XG5rZXJuZWwvYnBmL2hlbHBlcnMuYzo0NTI2Olx0c3RydWN0IGJwZl90YXNrX3dvcmtfa2VybiAqdHdrID0gKHZvaWQgKil0dztcbmtlcm5lbC9icGYvaGVscGVycy5jOjQ1Mjc6XHRzdHJ1Y3QgYnBmX3Rhc2tfd29ya19jdHggKmN0eCwgKm9sZF9jdHg7XG5rZXJuZWwvYnBmL2hlbHBlcnMuYy00NTI4LVxuLS1cbmtlcm5lbC9icGYvaGVscGVycy5jLTQ1NTMtXG5rZXJuZWwvYnBmL2hlbHBlcnMuYzo0NTU0OnN0YXRpYyBzdHJ1Y3QgYnBmX3Rhc2tfd29ya19jdHggKmJwZl90YXNrX3dvcmtfYWNxdWlyZV9jdHgoc3RydWN0IGJwZl90YXNrX3dvcmsgKnR3LFxua2VybmVsL2JwZi9oZWxwZXJzLmMtNDU1NS1cdFx0XHRcdFx0XHRcdCAgIHN0cnVjdCBicGZfbWFwICptYXApXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy00NTU2LXtcbmtlcm5lbC9icGYvaGVscGVycy5jOjQ1NTc6XHRzdHJ1Y3QgYnBmX3Rhc2tfd29ya19jdHggKmN0eDtcbmtlcm5lbC9icGYvaGVscGVycy5jLTQ1NTgtXG4tLVxua2VybmVsL2JwZi9oZWxwZXJzLmMtNDU2Ny1cdHNjb3BlZF9ndWFyZChyY3UpIHtcbmtlcm5lbC9icGYvaGVscGVycy5jOjQ1Njg6XHRcdGN0eCA9IGJwZl90YXNrX3dvcmtfZmV0Y2hfY3R4KHR3LCBtYXApO1xua2VybmVsL2JwZi9oZWxwZXJzLmMtNDU2OS1cdFx0aWYgKElTX0VSUihjdHgpKVxuLS1cbmtlcm5lbC9icGYvaGVscGVycy5jLTQ1NzItXHRcdC8qIHRyeSB0byBnZXQgcmVmIGZvciB0YXNrX3dvcmsgY2FsbGJhY2sgdG8gaG9sZCAqL1xua2VybmVsL2JwZi9oZWxwZXJzLmM6NDU3MzpcdFx0aWYgKCFicGZfdGFza193b3JrX2N0eF90cnlnZXQoY3R4KSlcbmtlcm5lbC9icGYvaGVscGVycy5jLTQ1NzQtXHRcdFx0cmV0dXJuIEVSUl9QVFIoLUVCVVNZKTtcbi0tXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy00NTc4LVx0XHQvKiBsb3N0IGFjcXVpcmluZyByYWNlIG9yIG1hcF9yZWxlYXNlX3VyZWYoKSBzdG9sZSBpdCBmcm9tIHVzLCBwdXQgcmVmIGFuZCBiYWlsICovXG5rZXJuZWwvYnBmL2hlbHBlcnMuYzo0NTc5Olx0XHRicGZfdGFza193b3JrX2N0eF9wdXQoY3R4KTtcbmtlcm5lbC9icGYvaGVscGVycy5jLTQ1ODAtXHRcdHJldHVybiBFUlJfUFRSKC1FQlVTWSk7XG4tLVxua2VybmVsL2JwZi9oZWxwZXJzLmMtNDU4OS1cdFx0LyogZHJvcCByZWYgd2UganVzdCBnb3QgZm9yIHRhc2tfd29yayBjYWxsYmFjayBpdHNlbGYgKi9cbmtlcm5lbC9icGYvaGVscGVycy5jOjQ1OTA6XHRcdGJwZl90YXNrX3dvcmtfY3R4X3B1dChjdHgpO1xua2VybmVsL2JwZi9oZWxwZXJzLmMtNDU5MS1cdFx0LyogdHJhbnNmZXIgbWFwJiMzOTtzIHJlZiBpbnRvIGNhbmNlbF9hbmRfZnJlZSgpICovXG5rZXJuZWwvYnBmL2hlbHBlcnMuYzo0NTkyOlx0XHRicGZfdGFza193b3JrX2NhbmNlbF9hbmRfZnJlZSh0dyk7XG5rZXJuZWwvYnBmL2hlbHBlcnMuYy00NTkzLVx0XHRyZXR1cm4gRVJSX1BUUigtRUJVU1kpO1xuLS1cbmtlcm5lbC9icGYvaGVscGVycy5jLTQ1OTgtXG5rZXJuZWwvYnBmL2hlbHBlcnMuYzo0NTk5OnN0YXRpYyBpbnQgYnBmX3Rhc2tfd29ya19zY2hlZHVsZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssIHN0cnVjdCBicGZfdGFza193b3JrICp0dyxcbmtlcm5lbC9icGYvaGVscGVycy5jOjQ2MDA6XHRcdFx0XHQgIHN0cnVjdCBicGZfbWFwICptYXAsIGJwZl90YXNrX3dvcmtfY2FsbGJhY2tfdCBjYWxsYmFja19mbixcbmtlcm5lbC9icGYvaGVscGVycy5jLTQ2MDEtXHRcdFx0XHQgIHN0cnVjdCBicGZfcHJvZ19hdXggKmF1eCwgZW51bSB0YXNrX3dvcmtfbm90aWZ5X21vZGUgbW9kZSlcbi0tXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy00NjAzLVx0c3RydWN0IGJwZl9wcm9nICpwcm9nO1xua2VybmVsL2JwZi9oZWxwZXJzLmM6NDYwNDpcdHN0cnVjdCBicGZfdGFza193b3JrX2N0eCAqY3R4O1xua2VybmVsL2JwZi9oZWxwZXJzLmMtNDYwNS1cdGludCBlcnI7XG5rZXJuZWwvYnBmL2hlbHBlcnMuYy00NjA2LVxua2VybmVsL2JwZi9oZWxwZXJzLmM6NDYwNzpcdEJURl9UWVBFX0VNSVQoc3RydWN0IGJwZl90YXNrX3dvcmspO1xua2VybmVsL2JwZi9oZWxwZXJzLmMtNDYwOC1cbi0tXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy00NjE3LVxua2VybmVsL2JwZi9oZWxwZXJzLmM6NDYxODpcdGN0eCA9IGJwZl90YXNrX3dvcmtfYWNxdWlyZV9jdHgodHcsIG1hcCk7XG5rZXJuZWwvYnBmL2hlbHBlcnMuYy00NjE5LVx0aWYgKElTX0VSUihjdHgpKSB7XG4tLVxua2VybmVsL2JwZi9oZWxwZXJzLmMtNDYyOS1cdGN0eC1cdTAwM2VtYXBfdmFsID0gKHZvaWQgKil0dyAtIG1hcC1cdTAwM2VyZWNvcmQtXHUwMDNldGFza193b3JrX29mZjtcbmtlcm5lbC9icGYvaGVscGVycy5jOjQ2MzA6XHRpbml0X3Rhc2tfd29yayhcdTAwMjZjdHgtXHUwMDNld29yaywgYnBmX3Rhc2tfd29ya19jYWxsYmFjayk7XG5rZXJuZWwvYnBmL2hlbHBlcnMuYzo0NjMxOlx0aW5pdF9pcnFfd29yayhcdTAwMjZjdHgtXHUwMDNlaXJxX3dvcmssIGJwZl90YXNrX3dvcmtfaXJxKTtcbmtlcm5lbC9icGYvaGVscGVycy5jLTQ2MzItXG4tLVxua2VybmVsL2JwZi9oZWxwZXJzLmMtNDY0My0vKipcbmtlcm5lbC9icGYvaGVscGVycy5jOjQ2NDQ6ICogYnBmX3Rhc2tfd29ya19zY2hlZHVsZV9zaWduYWwgLSBTY2hlZHVsZSBCUEYgY2FsbGJhY2sgdXNpbmcgdGFza193b3JrX2FkZCB3aXRoIFRXQV9TSUdOQUxcbmtlcm5lbC9icGYvaGVscGVycy5jLTQ2NDUtICogbW9kZVxua2VybmVsL2JwZi9oZWxwZXJzLmMtNDY0Ni0gKiBAdGFzazogVGFzayBzdHJ1Y3QgZm9yIHdoaWNoIGNhbGxiYWNrIHNob3VsZCBiZSBzY2hlZHVsZWRcbmtlcm5lbC9icGYvaGVscGVycy5jOjQ2NDc6ICogQHR3OiBQb2ludGVyIHRvIHN0cnVjdCBicGZfdGFza193b3JrIGluIEJQRiBtYXAgdmFsdWUgZm9yIGludGVybmFsIGJvb2trZWVwaW5nXG5rZXJuZWwvYnBmL2hlbHBlcnMuYzo0NjQ4OiAqIEBtYXBfX21hcDogYnBmX21hcCB0aGF0IGVtYmVkcyBzdHJ1Y3QgYnBmX3Rhc2tfd29yayBpbiB0aGUgdmFsdWVzXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy00NjQ5LSAqIEBjYWxsYmFjazogcG9pbnRlciB0byBCUEYgc3VicHJvZ3JhbSB0byBjYWxsXG4tLVxua2VybmVsL2JwZi9oZWxwZXJzLmMtNDY1My0gKi9cbmtlcm5lbC9icGYvaGVscGVycy5jOjQ2NTQ6X19icGZfa2Z1bmMgaW50IGJwZl90YXNrX3dvcmtfc2NoZWR1bGVfc2lnbmFsKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywgc3RydWN0IGJwZl90YXNrX3dvcmsgKnR3LFxua2VybmVsL2JwZi9oZWxwZXJzLmM6NDY1NTpcdFx0XHRcdFx0ICAgICAgdm9pZCAqbWFwX19tYXAsIGJwZl90YXNrX3dvcmtfY2FsbGJhY2tfdCBjYWxsYmFjayxcbmtlcm5lbC9icGYvaGVscGVycy5jLTQ2NTYtXHRcdFx0XHRcdCAgICAgIHN0cnVjdCBicGZfcHJvZ19hdXggKmF1eClcbmtlcm5lbC9icGYvaGVscGVycy5jLTQ2NTcte1xua2VybmVsL2JwZi9oZWxwZXJzLmM6NDY1ODpcdHJldHVybiBicGZfdGFza193b3JrX3NjaGVkdWxlKHRhc2ssIHR3LCBtYXBfX21hcCwgY2FsbGJhY2ssIGF1eCwgVFdBX1NJR05BTCk7XG5rZXJuZWwvYnBmL2hlbHBlcnMuYy00NjU5LX1cbi0tXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy00NjYxLS8qKlxua2VybmVsL2JwZi9oZWxwZXJzLmM6NDY2MjogKiBicGZfdGFza193b3JrX3NjaGVkdWxlX3Jlc3VtZSAtIFNjaGVkdWxlIEJQRiBjYWxsYmFjayB1c2luZyB0YXNrX3dvcmtfYWRkIHdpdGggVFdBX1JFU1VNRVxua2VybmVsL2JwZi9oZWxwZXJzLmMtNDY2My0gKiBtb2RlXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy00NjY0LSAqIEB0YXNrOiBUYXNrIHN0cnVjdCBmb3Igd2hpY2ggY2FsbGJhY2sgc2hvdWxkIGJlIHNjaGVkdWxlZFxua2VybmVsL2JwZi9oZWxwZXJzLmM6NDY2NTogKiBAdHc6IFBvaW50ZXIgdG8gc3RydWN0IGJwZl90YXNrX3dvcmsgaW4gQlBGIG1hcCB2YWx1ZSBmb3IgaW50ZXJuYWwgYm9va2tlZXBpbmdcbmtlcm5lbC9icGYvaGVscGVycy5jOjQ2NjY6ICogQG1hcF9fbWFwOiBicGZfbWFwIHRoYXQgZW1iZWRzIHN0cnVjdCBicGZfdGFza193b3JrIGluIHRoZSB2YWx1ZXNcbmtlcm5lbC9icGYvaGVscGVycy5jLTQ2NjctICogQGNhbGxiYWNrOiBwb2ludGVyIHRvIEJQRiBzdWJwcm9ncmFtIHRvIGNhbGxcbi0tXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy00NjcxLSAqL1xua2VybmVsL2JwZi9oZWxwZXJzLmM6NDY3MjpfX2JwZl9rZnVuYyBpbnQgYnBmX3Rhc2tfd29ya19zY2hlZHVsZV9yZXN1bWUoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLCBzdHJ1Y3QgYnBmX3Rhc2tfd29yayAqdHcsXG5rZXJuZWwvYnBmL2hlbHBlcnMuYzo0NjczOlx0XHRcdFx0XHQgICAgICB2b2lkICptYXBfX21hcCwgYnBmX3Rhc2tfd29ya19jYWxsYmFja190IGNhbGxiYWNrLFxua2VybmVsL2JwZi9oZWxwZXJzLmMtNDY3NC1cdFx0XHRcdFx0ICAgICAgc3RydWN0IGJwZl9wcm9nX2F1eCAqYXV4KVxua2VybmVsL2JwZi9oZWxwZXJzLmMtNDY3NS17XG5rZXJuZWwvYnBmL2hlbHBlcnMuYzo0Njc2Olx0cmV0dXJuIGJwZl90YXNrX3dvcmtfc2NoZWR1bGUodGFzaywgdHcsIG1hcF9fbWFwLCBjYWxsYmFjaywgYXV4LCBUV0FfUkVTVU1FKTtcbmtlcm5lbC9icGYvaGVscGVycy5jLTQ2NzctfVxuLS1cbmtlcm5lbC9icGYvaGVscGVycy5jPTQ3NzQ9X19icGZfa2Z1bmNfZW5kX2RlZnMoKTtcbmtlcm5lbC9icGYvaGVscGVycy5jLTQ3NzUtXG5rZXJuZWwvYnBmL2hlbHBlcnMuYzo0Nzc2OnN0YXRpYyB2b2lkIGJwZl90YXNrX3dvcmtfY2FuY2VsX3NjaGVkdWxlZChzdHJ1Y3QgaXJxX3dvcmsgKmlycV93b3JrKVxua2VybmVsL2JwZi9oZWxwZXJzLmMtNDc3Ny17XG5rZXJuZWwvYnBmL2hlbHBlcnMuYzo0Nzc4Olx0c3RydWN0IGJwZl90YXNrX3dvcmtfY3R4ICpjdHggPSBjb250YWluZXJfb2YoaXJxX3dvcmssIHN0cnVjdCBicGZfdGFza193b3JrX2N0eCwgaXJxX3dvcmspO1xua2VybmVsL2JwZi9oZWxwZXJzLmMtNDc3OS1cbmtlcm5lbC9icGYvaGVscGVycy5jOjQ3ODA6XHRicGZfdGFza193b3JrX2NhbmNlbChjdHgpOyAvKiB0aGlzIG1pZ2h0IHB1dCB0YXNrX3dvcmsgY2FsbGJhY2smIzM5O3MgcmVmICovXG5rZXJuZWwvYnBmL2hlbHBlcnMuYzo0NzgxOlx0YnBmX3Rhc2tfd29ya19jdHhfcHV0KGN0eCk7IC8qIGFuZCBoZXJlIHdlIHB1dCBtYXAmIzM5O3Mgb3duIHJlZiB0aGF0IHdhcyB0cmFuc2ZlcnJlZCB0byB1cyAqL1xua2VybmVsL2JwZi9oZWxwZXJzLmMtNDc4Mi19XG5rZXJuZWwvYnBmL2hlbHBlcnMuYy00NzgzLVxua2VybmVsL2JwZi9oZWxwZXJzLmM6NDc4NDp2b2lkIGJwZl90YXNrX3dvcmtfY2FuY2VsX2FuZF9mcmVlKHZvaWQgKnZhbClcbmtlcm5lbC9icGYvaGVscGVycy5jLTQ3ODUte1xua2VybmVsL2JwZi9oZWxwZXJzLmM6NDc4NjpcdHN0cnVjdCBicGZfdGFza193b3JrX2tlcm4gKnR3ayA9IHZhbDtcbmtlcm5lbC9icGYvaGVscGVycy5jOjQ3ODc6XHRzdHJ1Y3QgYnBmX3Rhc2tfd29ya19jdHggKmN0eDtcbmtlcm5lbC9icGYvaGVscGVycy5jOjQ3ODg6XHRlbnVtIGJwZl90YXNrX3dvcmtfc3RhdGUgc3RhdGU7XG5rZXJuZWwvYnBmL2hlbHBlcnMuYy00Nzg5LVxuLS1cbmtlcm5lbC9icGYvaGVscGVycy5jLTQ3OTYtXHRcdC8qIHJ1biBpbiBpcnFfd29yayB0byBhdm9pZCBsb2NrcyBpbiBOTUkgKi9cbmtlcm5lbC9icGYvaGVscGVycy5jOjQ3OTc6XHRcdGluaXRfaXJxX3dvcmsoXHUwMDI2Y3R4LVx1MDAzZWlycV93b3JrLCBicGZfdGFza193b3JrX2NhbmNlbF9zY2hlZHVsZWQpO1xua2VybmVsL2JwZi9oZWxwZXJzLmMtNDc5OC1cdFx0aXJxX3dvcmtfcXVldWUoXHUwMDI2Y3R4LVx1MDAzZWlycV93b3JrKTtcbi0tXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy00ODAxLVxua2VybmVsL2JwZi9oZWxwZXJzLmM6NDgwMjpcdGJwZl90YXNrX3dvcmtfY3R4X3B1dChjdHgpOyAvKiBwdXQgYnBmIG1hcCYjMzk7cyByZWYgKi9cbmtlcm5lbC9icGYvaGVscGVycy5jLTQ4MDMtfVxuLS1cbmtlcm5lbC9icGYvaGVscGVycy5jPTQ5Njg9QlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9zdHJlYW1fcHJpbnRfc3RhY2ssIEtGX0lNUExJQ0lUX0FSR1MpXG5rZXJuZWwvYnBmL2hlbHBlcnMuYzo0OTY5OkJURl9JRF9GTEFHUyhmdW5jLCBicGZfdGFza193b3JrX3NjaGVkdWxlX3NpZ25hbCwgS0ZfSU1QTElDSVRfQVJHUylcbmtlcm5lbC9icGYvaGVscGVycy5jOjQ5NzA6QlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl90YXNrX3dvcmtfc2NoZWR1bGVfcmVzdW1lLCBLRl9JTVBMSUNJVF9BUkdTKVxua2VybmVsL2JwZi9oZWxwZXJzLmMtNDk3MS1CVEZfSURfRkxBR1MoZnVuYywgYnBmX2R5bnB0cl9mcm9tX2ZpbGUpXG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmM9ODA0PXZvaWQgYnBmX29ial9mcmVlX3Rhc2tfd29yayhjb25zdCBzdHJ1Y3QgYnRmX3JlY29yZCAqcmVjLCB2b2lkICpvYmopXG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmMtODA3LVx0XHRyZXR1cm47XG5rZXJuZWwvYnBmL3N5c2NhbGwuYzo4MDg6XHRicGZfdGFza193b3JrX2NhbmNlbF9hbmRfZnJlZShvYmogJiM0MzsgcmVjLVx1MDAzZXRhc2tfd29ya19vZmYpO1xua2VybmVsL2JwZi9zeXNjYWxsLmMtODA5LX1cbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYz04MTY9dm9pZCBicGZfb2JqX2ZyZWVfZmllbGRzKGNvbnN0IHN0cnVjdCBidGZfcmVjb3JkICpyZWMsIHZvaWQgKm9iailcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy04NDAtXHRcdGNhc2UgQlBGX1RBU0tfV09SSzpcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjg0MTpcdFx0XHRicGZfdGFza193b3JrX2NhbmNlbF9hbmRfZnJlZShmaWVsZF9wdHIpO1xua2VybmVsL2JwZi9zeXNjYWxsLmMtODQyLVx0XHRcdGJyZWFrO1xuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz01MzA9c3RhdGljIGJvb2wgaXNfYXN5bmNfY2Jfc2xlZXBhYmxlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqaW5zbilcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNTM1LVxua2VybmVsL2JwZi92ZXJpZmllci5jOjUzNjpcdC8qIGJwZl93cSBhbmQgYnBmX3Rhc2tfd29yayBjYWxsYmFja3MgYXJlIGFsd2F5cyBzbGVlcGFibGUuICovXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNTM3LVx0aWYgKGJwZl9wc2V1ZG9fa2Z1bmNfY2FsbChpbnNuKSBcdTAwMjZcdTAwMjYgaW5zbi1cdTAwM2VvZmYgPT0gMCBcdTAwMjZcdTAwMjZcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTA4MDI9QlRGX0lEKHN0cnVjdCwgYnBmX3Jlc19zcGluX2xvY2spXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTA4MDM6QlRGX0lEKHN0cnVjdCwgYnBmX3Rhc2tfd29yaylcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMDgwNC1CVEZfSUQoc3RydWN0LCBicGZfcHJvZ19hdXgpXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTEwOTgyPWVudW0gc3BlY2lhbF9rZnVuY190eXBlIHtcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTEwNDQtXHRLRl9fX2JwZl90cmFwLFxua2VybmVsL2JwZi92ZXJpZmllci5jOjExMDQ1Olx0S0ZfYnBmX3Rhc2tfd29ya19zY2hlZHVsZV9zaWduYWwsXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTEwNDY6XHRLRl9icGZfdGFza193b3JrX3NjaGVkdWxlX3Jlc3VtZSxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMTA0Ny1cdEtGX2JwZl9hcmVuYV9hbGxvY19wYWdlcyxcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTExMzc9QlRGX0lEKGZ1bmMsIF9fYnBmX3RyYXApXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTExMzg6QlRGX0lEKGZ1bmMsIGJwZl90YXNrX3dvcmtfc2NoZWR1bGVfc2lnbmFsKVxua2VybmVsL2JwZi92ZXJpZmllci5jOjExMTM5OkJURl9JRChmdW5jLCBicGZfdGFza193b3JrX3NjaGVkdWxlX3Jlc3VtZSlcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMTE0MC1CVEZfSUQoZnVuYywgYnBmX2FyZW5hX2FsbG9jX3BhZ2VzKVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xMTE5Nj1zdGF0aWMgYm9vbCBpc190YXNrX3dvcmtfYWRkX2tmdW5jKHUzMiBmdW5jX2lkKVxua2VybmVsL2JwZi92ZXJpZmllci5jLTExMTk3LXtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMTE5ODpcdHJldHVybiBmdW5jX2lkID09IHNwZWNpYWxfa2Z1bmNfbGlzdFtLRl9icGZfdGFza193b3JrX3NjaGVkdWxlX3NpZ25hbF0gfHxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMTE5OTpcdCAgICAgICBmdW5jX2lkID09IHNwZWNpYWxfa2Z1bmNfbGlzdFtLRl9icGZfdGFza193b3JrX3NjaGVkdWxlX3Jlc3VtZV07XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTEyMDAtfVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xMTkwNj1zdGF0aWMgaW50IGNoZWNrX2tmdW5jX2FyZ3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9rZnVuY19jYWxsX2FyZ19tZXRhICptZXRhLFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMjA4MC1cdFx0XHRcdFx0XHR2ZXJib3NlKGVudixcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMjA4MTpcdFx0XHRcdFx0XHRcdFwmIzM0O2JwZl90YXNrX3dvcmsgcG9pbnRlciBpbiBSMiBtYXBfdWlkPSVkIGRvZXNuJiMzOTt0IG1hdGNoIG1hcCBwb2ludGVyIGluIFIzIG1hcF91aWQ9JWRcXG5cJiMzNDssXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTIwODItXHRcdFx0XHRcdFx0XHRtZXRhLVx1MDAzZW1hcC51aWQsIHJlZy1cdTAwM2VtYXBfdWlkKTtcbi0tXG50b29scy9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmg9NzUwMj1zdHJ1Y3QgYnBmX3RpbWVyIHtcbi0tXG50b29scy9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmgtNzUwNS1cbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaDo3NTA2OnN0cnVjdCBicGZfdGFza193b3JrIHtcbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaC03NTA3LVx0X191NjQgX19vcGFxdWU7XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdGVzdF90YXNrX3dvcmsuYz0yNT1zdHJ1Y3QgZWxlbSB7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy90ZXN0X3Rhc2tfd29yay5jLTI2LVx0Y2hhciBkYXRhWzEyOF07XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy90ZXN0X3Rhc2tfd29yay5jOjI3Olx0c3RydWN0IGJwZl90YXNrX3dvcmsgdHc7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy90ZXN0X3Rhc2tfd29yay5jLTI4LX07XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2ZpbGVfcmVhZGVyLmM9MjA9c3RydWN0IGVsZW0ge1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2ZpbGVfcmVhZGVyLmMtMjEtXHRzdHJ1Y3QgZmlsZSAqZmlsZTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9maWxlX3JlYWRlci5jOjIyOlx0c3RydWN0IGJwZl90YXNrX3dvcmsgdHc7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvZmlsZV9yZWFkZXIuYy0yMy19O1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9maWxlX3JlYWRlci5jPTY2PWludCBvbl9vcGVuX3ZhbGlkYXRlX2ZpbGVfcmVhZCh2b2lkICpjKVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9maWxlX3JlYWRlci5jLTc5LVx0fVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2ZpbGVfcmVhZGVyLmM6ODA6XHRicGZfdGFza193b3JrX3NjaGVkdWxlX3NpZ25hbCh0YXNrLCBcdTAwMjZ3b3JrLVx1MDAzZXR3LCBcdTAwMjZhcnJtYXAsIHRhc2tfd29ya19jYWxsYmFjayk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvZmlsZV9yZWFkZXIuYy04MS1cdHJldHVybiAwO1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90YXNrX3dvcmsuYz0xNj1zdHJ1Y3QgZWxlbSB7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGFza193b3JrLmMtMTctXHRjaGFyIGRhdGFbMTI4XTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90YXNrX3dvcmsuYzoxODpcdHN0cnVjdCBicGZfdGFza193b3JrIHR3O1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rhc2tfd29yay5jLTE5LX07XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rhc2tfd29yay5jPTU0PWludCBvbmNwdV9oYXNoX21hcChzdHJ1Y3QgcHRfcmVncyAqYXJncylcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGFza193b3JrLmMtNjctXHRcdHJldHVybiAwO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rhc2tfd29yay5jOjY4Olx0YnBmX3Rhc2tfd29ya19zY2hlZHVsZV9yZXN1bWUodGFzaywgXHUwMDI2d29yay1cdTAwM2V0dywgXHUwMDI2aG1hcCwgcHJvY2Vzc193b3JrKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90YXNrX3dvcmsuYy02OS1cdHJldHVybiAwO1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90YXNrX3dvcmsuYz03Mz1pbnQgb25jcHVfYXJyYXlfbWFwKHN0cnVjdCBwdF9yZWdzICphcmdzKVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90YXNrX3dvcmsuYy04MS1cdFx0cmV0dXJuIDA7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGFza193b3JrLmM6ODI6XHRicGZfdGFza193b3JrX3NjaGVkdWxlX3NpZ25hbCh0YXNrLCBcdTAwMjZ3b3JrLVx1MDAzZXR3LCBcdTAwMjZhcnJtYXAsIHByb2Nlc3Nfd29yayk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGFza193b3JrLmMtODMtXHRyZXR1cm4gMDtcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGFza193b3JrLmM9ODc9aW50IG9uY3B1X2xydV9tYXAoc3RydWN0IHB0X3JlZ3MgKmFyZ3MpXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rhc2tfd29yay5jLTEwMy1cdFx0cmV0dXJuIDA7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGFza193b3JrLmM6MTA0Olx0YnBmX3Rhc2tfd29ya19zY2hlZHVsZV9yZXN1bWUodGFzaywgXHUwMDI2d29yay1cdTAwM2V0dywgXHUwMDI2bHJ1bWFwLCBwcm9jZXNzX3dvcmspO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rhc2tfd29yay5jLTEwNS1cdHJldHVybiAwO1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90YXNrX3dvcmtfZmFpbC5jPTE1PXN0cnVjdCBlbGVtIHtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90YXNrX3dvcmtfZmFpbC5jLTE2LVx0Y2hhciBkYXRhWzEyOF07XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGFza193b3JrX2ZhaWwuYzoxNzpcdHN0cnVjdCBicGZfdGFza193b3JrIHR3O1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rhc2tfd29ya19mYWlsLmMtMTgtfTtcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGFza193b3JrX2ZhaWwuYz00Nz1pbnQgbWlzbWF0Y2hfbWFwKHN0cnVjdCBwdF9yZWdzICphcmdzKVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90YXNrX3dvcmtfZmFpbC5jLTU1LVx0XHRyZXR1cm4gMDtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90YXNrX3dvcmtfZmFpbC5jOjU2Olx0YnBmX3Rhc2tfd29ya19zY2hlZHVsZV9yZXN1bWUodGFzaywgXHUwMDI2d29yay1cdTAwM2V0dywgXHUwMDI2aG1hcCwgcHJvY2Vzc193b3JrKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90YXNrX3dvcmtfZmFpbC5jLTU3LVx0cmV0dXJuIDA7XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rhc2tfd29ya19mYWlsLmM9NjI9aW50IG5vX21hcF90YXNrX3dvcmsoc3RydWN0IHB0X3JlZ3MgKmFyZ3MpXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rhc2tfd29ya19mYWlsLmMtNjQtXHRzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2s7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGFza193b3JrX2ZhaWwuYzo2NTpcdHN0cnVjdCBicGZfdGFza193b3JrIHR3O1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rhc2tfd29ya19mYWlsLmMtNjYtXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGFza193b3JrX2ZhaWwuYy02Ny1cdHRhc2sgPSBicGZfZ2V0X2N1cnJlbnRfdGFza19idGYoKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90YXNrX3dvcmtfZmFpbC5jOjY4Olx0YnBmX3Rhc2tfd29ya19zY2hlZHVsZV9yZXN1bWUodGFzaywgXHUwMDI2dHcsIFx1MDAyNmhtYXAsIHByb2Nlc3Nfd29yayk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGFza193b3JrX2ZhaWwuYy02OS1cdHJldHVybiAwO1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90YXNrX3dvcmtfZmFpbC5jPTc0PWludCB0YXNrX3dvcmtfbnVsbChzdHJ1Y3QgcHRfcmVncyAqYXJncylcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGFza193b3JrX2ZhaWwuYy03OC1cdHRhc2sgPSBicGZfZ2V0X2N1cnJlbnRfdGFza19idGYoKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90YXNrX3dvcmtfZmFpbC5jOjc5Olx0YnBmX3Rhc2tfd29ya19zY2hlZHVsZV9yZXN1bWUodGFzaywgTlVMTCwgXHUwMDI2aG1hcCwgcHJvY2Vzc193b3JrKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90YXNrX3dvcmtfZmFpbC5jLTgwLVx0cmV0dXJuIDA7XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rhc2tfd29ya19mYWlsLmM9ODU9aW50IG1hcF9udWxsKHN0cnVjdCBwdF9yZWdzICphcmdzKVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90YXNrX3dvcmtfZmFpbC5jLTkzLVx0XHRyZXR1cm4gMDtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90YXNrX3dvcmtfZmFpbC5jOjk0Olx0YnBmX3Rhc2tfd29ya19zY2hlZHVsZV9yZXN1bWUodGFzaywgXHUwMDI2d29yay1cdTAwM2V0dywgTlVMTCwgcHJvY2Vzc193b3JrKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90YXNrX3dvcmtfZmFpbC5jLTk1LVx0cmV0dXJuIDA7XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rhc2tfd29ya19zdHJlc3MuYz0yMD1zdHJ1Y3QgZWxlbSB7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGFza193b3JrX3N0cmVzcy5jLTIxLVx0X191MzIgY291bnQ7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGFza193b3JrX3N0cmVzcy5jOjIyOlx0c3RydWN0IGJwZl90YXNrX3dvcmsgdHc7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGFza193b3JrX3N0cmVzcy5jLTIzLX07XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rhc2tfd29ya19zdHJlc3MuYz00MD1pbnQgc2NoZWR1bGVfdGFza193b3JrKHZvaWQgKmN0eClcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGFza193b3JrX3N0cmVzcy5jLTUzLVx0fVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rhc2tfd29ya19zdHJlc3MuYzo1NDpcdGVyciA9IGJwZl90YXNrX3dvcmtfc2NoZWR1bGVfc2lnbmFsKGJwZl9nZXRfY3VycmVudF90YXNrX2J0ZigpLCBcdTAwMjZ3b3JrLVx1MDAzZXR3LCBcdTAwMjZobWFwLFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rhc2tfd29ya19zdHJlc3MuYy01NS1cdFx0XHRcdFx0ICAgIHByb2Nlc3Nfd29yayk7XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FzeW5jX2NiX2NvbnRleHQuYz0xMjQ9c3RydWN0IHRhc2tfd29ya19lbGVtIHtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hc3luY19jYl9jb250ZXh0LmM6MTI1Olx0c3RydWN0IGJwZl90YXNrX3dvcmsgdHc7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfYXN5bmNfY2JfY29udGV4dC5jLTEyNi19O1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hc3luY19jYl9jb250ZXh0LmM9MTQ1PWludCB0YXNrX3dvcmtfbm9uX3NsZWVwYWJsZV9wcm9nKHZvaWQgKmN0eClcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfYXN5bmNfY2JfY29udGV4dC5jLTE1OC1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hc3luY19jYl9jb250ZXh0LmM6MTU5Olx0YnBmX3Rhc2tfd29ya19zY2hlZHVsZV9yZXN1bWUodGFzaywgXHUwMDI2dmFsLVx1MDAzZXR3LCBcdTAwMjZ0YXNrX3dvcmtfbWFwLCB0YXNrX3dvcmtfY2IpO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FzeW5jX2NiX2NvbnRleHQuYy0xNjAtXHRyZXR1cm4gMDtcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfYXN5bmNfY2JfY29udGV4dC5jPTE2NT1pbnQgdGFza193b3JrX3NsZWVwYWJsZV9wcm9nKHZvaWQgKmN0eClcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfYXN5bmNfY2JfY29udGV4dC5jLTE3OC1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hc3luY19jYl9jb250ZXh0LmM6MTc5Olx0YnBmX3Rhc2tfd29ya19zY2hlZHVsZV9yZXN1bWUodGFzaywgXHUwMDI2dmFsLVx1MDAzZXR3LCBcdTAwMjZ0YXNrX3dvcmtfbWFwLCB0YXNrX3dvcmtfY2IpO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FzeW5jX2NiX2NvbnRleHQuYy0xODAtXHRyZXR1cm4gMDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjQgMTk6MzU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjAyNDAKCQkJCQkJCW91dHB1dDogMjI0CgkJCQkJCQl0aG91Z2h0czogNjgwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgQlBGIFRhc2sgV29yayBQYXRjaCBmb3IgRnV6emluZyBGb2N1cyoqCgpPa2F5LCBzbyB3ZSYjMzk7cmUgbG9va2luZyBhdCBgYnBmX3Rhc2tfd29ya2AsIGEgQlBGIGZlYXR1cmUuIFRoZSByZWxldmFudCBjb25maWcgaXMgYEJQRl9TWVNDQUxMYC4gVGhlIGNvcmUgb2YgdGhpcyBwYXRjaCBzZWVtcyB0byBpbnZvbHZlIGRlZmVycmVkIGZyZWVpbmcgb2YgaGFzaCB0YWJsZSBlbGVtZW50cywgc3BlY2lmaWNhbGx5IHJlbGF0ZWQgdG8gYGNhbGxfcmN1X3Rhc2tzX3RyYWNlYC4gTXkgaW5pdGlhbCB0aG91Z2h0IHdhcyB0byBsaXN0IHRoZSBwcmltYXJ5IGZ1bmN0aW9ucyBpbnZvbHZlZCBpbiB0aGUgZGVmZXJyZWQgZnJlZWluZyBhbmQgbWVtb3J5IG1hbmFnZW1lbnQuCgpJbml0aWFsbHksIHRoZSBrZXkgc3ltYm9scyB0aGF0IHNwcmluZyB0byBtaW5kIGFyZTogYGJwZl90YXNrX3dvcmtfY2FuY2VsX2FuZF9mcmVlYCwgYGh0YWJfbWFwX2ZyZWVgLCBgZnJlZV9odGFiX2VsZW1gLCBgaHRhYl9lbGVtX2ZyZWVgLCBhbmQgYGh0YWJfbHJ1X3B1c2hfZnJlZWAuIEhvd2V2ZXIsIHRoZSByZWFsIGNydXggb2YgdGhpcyBwYXRjaCBpcyB0aGUgaGFuZGxpbmcgb2YgdGhlIFJDVSBjYWxsYmFja3MuIFRoZXNlIHN0YXRpYyBmdW5jdGlvbnMsIGBodGFiX2VsZW1fZGVmZXJfZnJlZWAgYW5kIGBodGFiX2VsZW1fZnJlZV9yY3VfY2JgLCBhcmUgdGhlIGNyaXRpY2FsIHBpZWNlcy4gU3l6a2FsbGVyICpjYW4qIGhhbmRsZSBzdGF0aWMgZnVuY3Rpb25zIGlmIHRoZXkmIzM5O3JlIHVuaXF1ZWx5IGlkZW50aWZpYWJsZSwgb3Igd2UgY2FuIGp1c3QgbGlzdCB0aGVtIGV4cGxpY2l0bHksIGFuZCBzbywgdGhhdCYjMzk7cyB3aGF0IEkmIzM5O2xsIGRvLgoKVGhlcmVmb3JlLCBJJiMzOTt2ZSBleHBhbmRlZCB0aGUgbGlzdCB0byBpbmNsdWRlOiBgaHRhYl9lbGVtX2RlZmVyX2ZyZWVgLCBgaHRhYl9lbGVtX2ZyZWVfcmN1X2NiYCwgYGJwZl90YXNrX3dvcmtfY2FuY2VsX2FuZF9mcmVlYCwgYGh0YWJfbWFwX2ZyZWVgLCBgZnJlZV9odGFiX2VsZW1gLCBgaHRhYl9lbGVtX2ZyZWVgLCBhbmQgYGh0YWJfbHJ1X3B1c2hfZnJlZWAuIFllcywgSSYjMzk7dmUgY29uZmlybWVkIHRoYXQgYGh0YWJfZWxlbV9kZWZlcl9mcmVlYCBhbmQgYGh0YWJfZWxlbV9mcmVlX3JjdV9jYmAgYXJlIGluZGVlZCBzdGF0aWMgZnVuY3Rpb25zLgoKVGhpcyBpcyBhIHVzZS1hZnRlci1mcmVlIGZpeCwgYW5kIHRoYXQgd2FycmFudHMgYWdncmVzc2l2ZSBmdXp6aW5nLiBUaGUgZ29hbCBoZXJlIGlzIHRvIGVuc3VyZSB0aGUgZGVmZXJyZWQgZnJlZWluZyBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgYW55IG5ldyBpc3N1ZXMgb3IgbGVha3MuIFRoZXJlZm9yZSwgSSYjMzk7bSBzZXR0aW5nIGBXb3J0aEZ1enppbmdgIHRvIGB0cnVlYCwgYW5kIEkmIzM5O20gZW5hYmxpbmcgYEJQRl9TWVNDQUxMYCB2aWEgYEVuYWJsZUNvbmZpZ3NgLgoKSSBuZWVkIHRvIGZvY3VzIG91ciBmdXp6aW5nIG9uIHRoZSBjcml0aWNhbCBmdW5jdGlvbnMsIHNvIEkmIzM5O2xsIHNldCBgRm9jdXNTeW1ib2xzYCB0byB0aGUgZm9sbG93aW5nOiBgaHRhYl9lbGVtX2RlZmVyX2ZyZWVgLCBgaHRhYl9lbGVtX2ZyZWVfcmN1X2NiYCwgYGJwZl90YXNrX3dvcmtfY2FuY2VsX2FuZF9mcmVlYCwgYGh0YWJfbWFwX2ZyZWVgLCBgZnJlZV9odGFiX2VsZW1gLCBgaHRhYl9lbGVtX2ZyZWVgLCBhbmQgYGh0YWJfbHJ1X3B1c2hfZnJlZWAuCgpHaXZlbiB0aGF0IGNlcnRhaW4gZmllbGRzIGluIHRoZSBoYXNoIHRhYmxlIGVsZW1lbnRzIHdlcmUgcmVpbml0aWFsaXplZCwgSSBzaG91bGQgYWxzbyBpbmNsdWRlIHRoZSBgYWxsb2NfaHRhYl9lbGVtYCBhbmQgYHByZWFsbG9jX2xydV9wb3BgIGZ1bmN0aW9ucyBhcyBwYXJ0IG9mIG91ciBmdXp6aW5nIGZvY3VzLiBUaGlzIHNob3VsZCBwcm92aWRlIHN1ZmZpY2llbnQgZnV6emluZyBjb3ZlcmFnZS4KCk9rYXksIGxldCYjMzk7cyBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI0IDE5OjM1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCUEZfU1lTQ0FMTCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2h0YWJfZWxlbV9kZWZlcl9mcmVlJiMzNDssCiAgICAmIzM0O2h0YWJfZWxlbV9mcmVlX3JjdV9jYiYjMzQ7LAogICAgJiMzNDticGZfdGFza193b3JrX2NhbmNlbF9hbmRfZnJlZSYjMzQ7LAogICAgJiMzNDtodGFiX21hcF9mcmVlJiMzNDssCiAgICAmIzM0O2ZyZWVfaHRhYl9lbGVtJiMzNDssCiAgICAmIzM0O2h0YWJfZWxlbV9mcmVlJiMzNDssCiAgICAmIzM0O2h0YWJfbHJ1X3B1c2hfZnJlZSYjMzQ7LAogICAgJiMzNDthbGxvY19odGFiX2VsZW0mIzM0OywKICAgICYjMzQ7cHJlYWxsb2NfbHJ1X3BvcCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgQlBGIHN1YnN5c3RlbSB0byBkZWZlciB0aGUgZnJlZWluZyBvZiBoYXNoIHRhYmxlIGVsZW1lbnRzIGNvbnRhaW5pbmcgQlBGX1RBU0tfV09SSyBmaWVsZHMgdXNpbmcgY2FsbF9yY3VfdGFza3NfdHJhY2UuIFRoaXMgcHJldmVudHMgYSB1c2UtYWZ0ZXItZnJlZSB3aGVuIGEgdGFzayB3b3JrIGNhbGxiYWNrIGlzIHN0aWxsIHJ1bm5pbmcuIEl0IGFsc28gcmUtaW5pdGlhbGl6ZXMgc3BlY2lhbCBmaWVsZHMgZm9yIHJlY3ljbGVkIGVsZW1lbnRzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBCUEYgbWFwIGxvZ2ljIGFuZCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBjb3JyZWN0IG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBzY2hlZHVsaW5nIGJlaGF2aW9yLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCUEZfU1lTQ0FMTCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2h0YWJfZWxlbV9kZWZlcl9mcmVlJiMzNDssCiAgICAmIzM0O2h0YWJfZWxlbV9mcmVlX3JjdV9jYiYjMzQ7LAogICAgJiMzNDticGZfdGFza193b3JrX2NhbmNlbF9hbmRfZnJlZSYjMzQ7LAogICAgJiMzNDtodGFiX21hcF9mcmVlJiMzNDssCiAgICAmIzM0O2ZyZWVfaHRhYl9lbGVtJiMzNDssCiAgICAmIzM0O2h0YWJfZWxlbV9mcmVlJiMzNDssCiAgICAmIzM0O2h0YWJfbHJ1X3B1c2hfZnJlZSYjMzQ7LAogICAgJiMzNDthbGxvY19odGFiX2VsZW0mIzM0OywKICAgICYjMzQ7cHJlYWxsb2NfbHJ1X3BvcCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgQlBGIHN1YnN5c3RlbSB0byBkZWZlciB0aGUgZnJlZWluZyBvZiBoYXNoIHRhYmxlIGVsZW1lbnRzIGNvbnRhaW5pbmcgQlBGX1RBU0tfV09SSyBmaWVsZHMgdXNpbmcgY2FsbF9yY3VfdGFza3NfdHJhY2UuIFRoaXMgcHJldmVudHMgYSB1c2UtYWZ0ZXItZnJlZSB3aGVuIGEgdGFzayB3b3JrIGNhbGxiYWNrIGlzIHN0aWxsIHJ1bm5pbmcuIEl0IGFsc28gcmUtaW5pdGlhbGl6ZXMgc3BlY2lhbCBmaWVsZHMgZm9yIHJlY3ljbGVkIGVsZW1lbnRzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBCUEYgbWFwIGxvZ2ljIGFuZCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBjb3JyZWN0IG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBzY2hlZHVsaW5nIGJlaGF2aW9yLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDYtMjRUMTk6MzU6MDcuOTUxMDIyMzUzWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mzk2ODM4NTk4MDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX1NZU0NBTExcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJodGFiX2VsZW1fZGVmZXJfZnJlZVwiLFxuICAgIFwiaHRhYl9lbGVtX2ZyZWVfcmN1X2NiXCIsXG4gICAgXCJicGZfdGFza193b3JrX2NhbmNlbF9hbmRfZnJlZVwiLFxuICAgIFwiaHRhYl9tYXBfZnJlZVwiLFxuICAgIFwiZnJlZV9odGFiX2VsZW1cIixcbiAgICBcImh0YWJfZWxlbV9mcmVlXCIsXG4gICAgXCJodGFiX2xydV9wdXNoX2ZyZWVcIixcbiAgICBcImFsbG9jX2h0YWJfZWxlbVwiLFxuICAgIFwicHJlYWxsb2NfbHJ1X3BvcFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBCUEYgc3Vic3lzdGVtIHRvIGRlZmVyIHRoZSBmcmVlaW5nIG9mIGhhc2ggdGFibGUgZWxlbWVudHMgY29udGFpbmluZyBCUEZfVEFTS19XT1JLIGZpZWxkcyB1c2luZyBjYWxsX3JjdV90YXNrc190cmFjZS4gVGhpcyBwcmV2ZW50cyBhIHVzZS1hZnRlci1mcmVlIHdoZW4gYSB0YXNrIHdvcmsgY2FsbGJhY2sgaXMgc3RpbGwgcnVubmluZy4gSXQgYWxzbyByZS1pbml0aWFsaXplcyBzcGVjaWFsIGZpZWxkcyBmb3IgcmVjeWNsZWQgZWxlbWVudHMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIEJQRiBtYXAgbG9naWMgYW5kIHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIGNvcnJlY3QgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIHNjaGVkdWxpbmcgYmVoYXZpb3IuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI0VDE5OjM1OjA3Ljk1MTAyNzkxM1oiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDc0OTA4MDA5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgZGEyNmJiM2JjMWQ4ZTcxZmI5NzQ1MDYxZTczMjk3NWMyYzVjMWQ0M1xcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgV2VkIEp1biAyNCAxOTozNTowNiAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL2hhc2h0YWIuYyBiL2tlcm5lbC9icGYvaGFzaHRhYi5jXFxuaW5kZXggOWYzOTRlMWFhMmU4NWIuLjE5ZmE2MTkwOWU0ZmVkIDEwMDY0NFxcbi0tLSBhL2tlcm5lbC9icGYvaGFzaHRhYi5jXFxuKysrIGIva2VybmVsL2JwZi9oYXNodGFiLmNcXG5AQCAtMzEwLDYgKzMxMCw3IEBAIHN0YXRpYyBzdHJ1Y3QgaHRhYl9lbGVtICpwcmVhbGxvY19scnVfcG9wKHN0cnVjdCBicGZfaHRhYiAqaHRhYiwgdm9pZCAqa2V5LFxcbiBcXHRcXHRicGZfbWFwX2luY19lbGVtX2NvdW50KFxcdTAwMjZodGFiLVxcdTAwM2VtYXApO1xcbiBcXHRcXHRsID0gY29udGFpbmVyX29mKG5vZGUsIHN0cnVjdCBodGFiX2VsZW0sIGxydV9ub2RlKTtcXG4gXFx0XFx0bWVtY3B5KGwtXFx1MDAzZWtleSwga2V5LCBodGFiLVxcdTAwM2VtYXAua2V5X3NpemUpO1xcbitcXHRcXHRjaGVja19hbmRfaW5pdF9tYXBfdmFsdWUoXFx1MDAyNmh0YWItXFx1MDAzZW1hcCwgaHRhYl9lbGVtX3ZhbHVlKGwsIGh0YWItXFx1MDAzZW1hcC5rZXlfc2l6ZSkpO1xcbiBcXHRcXHRyZXR1cm4gbDtcXG4gXFx0fVxcbiBcXG5AQCAtOTUwLDEyICs5NTEsNjkgQEAgc3RhdGljIGludCBodGFiX21hcF9nZXRfbmV4dF9rZXkoc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5LCB2b2lkICpuZXh0X2tleSlcXG4gXFx0cmV0dXJuIC1FTk9FTlQ7XFxuIH1cXG4gXFxuKy8qIERlZmVycmVkIGh0YWJfZWxlbSBmcmVlIGZvciBicGZfdGFza193b3JrIG1hcHMuICBjYW5jZWxfYW5kX2ZyZWUoKVxcbisgKiByZXR1cm5zIHdoaWxlIHRoZSB0YXNrX3dvcmsgY2FsbGJhY2sgbWF5IHN0aWxsIGJlIGFjY2Vzc2luZyBtYXBfdmFsO1xcbisgKiB0aGUgY2FsbGJhY2sgaG9sZHMgZ3VhcmQocmN1X3Rhc2tzX3RyYWNlKSwgc28gZGVmZXJyaW5nIHRoZSByZWN5Y2xlXFxuKyAqIHRocm91Z2ggY2FsbF9yY3VfdGFza3NfdHJhY2UoKSB3YWl0cyBmb3IgaXQgKGFuZCwgc2luY2UgYSB0YXNrcyB0cmFjZVxcbisgKiBHUCBpbXBsaWVzIGEgcmVndWxhciBSQ1UgR1AsIGZvciBCUEYgdmFsdWUgcmVhZGVycyB0b28pIGJlZm9yZSB0aGVcXG4rICogZWxlbWVudCBpcyByZXVzZWQuICBBIGNhbGxiYWNrIHRoYXQgZW50ZXJzIGFmdGVyIHRoZSBHUCBmaW5kcyB0aGUgY3R4XFxuKyAqIGFscmVhZHkgRlJFRUQgYW5kIGJhaWxzIG91dC5cXG4rICovXFxuK3N0cnVjdCBodGFiX2VsZW1fZnJlZV9yY3Uge1xcbitcXHRzdHJ1Y3QgcmN1X2hlYWQgcmN1O1xcbitcXHRzdHJ1Y3QgYnBmX2h0YWIgKmh0YWI7XFxuK1xcdHN0cnVjdCBodGFiX2VsZW0gKmVsZW07XFxuK307XFxuK1xcbisvKiBSZXR1cm4gYW4gaHRhYl9lbGVtIHRvIGl0cyBtYXAncyBmcmVlIHBvb2w6IGJwZl9tZW1fY2FjaGVfZnJlZSBmb3JcXG4rICogbm9uLXByZWFsbG9jLCBwY3B1X2ZyZWVsaXN0X3B1c2ggZm9yIHByZWFsbG9jLCBicGZfbHJ1X3B1c2hfZnJlZSBmb3JcXG4rICogcHJlYWxsb2MgTFJVLlxcbisgKi9cXG4rc3RhdGljIHZvaWQgaHRhYl9lbGVtX3JlY3ljbGUoc3RydWN0IGJwZl9odGFiICpodGFiLCBzdHJ1Y3QgaHRhYl9lbGVtICpsKVxcbit7XFxuK1xcdGlmIChodGFiX2lzX3ByZWFsbG9jKGh0YWIpKSB7XFxuK1xcdFxcdGlmIChodGFiX2lzX2xydShodGFiKSlcXG4rXFx0XFx0XFx0YnBmX2xydV9wdXNoX2ZyZWUoXFx1MDAyNmh0YWItXFx1MDAzZWxydSwgXFx1MDAyNmwtXFx1MDAzZWxydV9ub2RlKTtcXG4rXFx0XFx0ZWxzZVxcbitcXHRcXHRcXHRwY3B1X2ZyZWVsaXN0X3B1c2goXFx1MDAyNmh0YWItXFx1MDAzZWZyZWVsaXN0LCBcXHUwMDI2bC1cXHUwMDNlZm5vZGUpO1xcbitcXHR9IGVsc2Uge1xcbitcXHRcXHRicGZfbWVtX2NhY2hlX2ZyZWUoXFx1MDAyNmh0YWItXFx1MDAzZW1hLCBsKTtcXG4rXFx0fVxcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBodGFiX2VsZW1fZnJlZV9yY3VfY2Ioc3RydWN0IHJjdV9oZWFkICpoZWFkKVxcbit7XFxuK1xcdHN0cnVjdCBodGFiX2VsZW1fZnJlZV9yY3UgKmZyID0gY29udGFpbmVyX29mKGhlYWQsIHN0cnVjdCBodGFiX2VsZW1fZnJlZV9yY3UsIHJjdSk7XFxuK1xcbitcXHRodGFiX2VsZW1fcmVjeWNsZShmci1cXHUwMDNlaHRhYiwgZnItXFx1MDAzZWVsZW0pO1xcbitcXHRrZnJlZShmcik7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIGh0YWJfZWxlbV9kZWZlcl9mcmVlKHN0cnVjdCBicGZfaHRhYiAqaHRhYiwgc3RydWN0IGh0YWJfZWxlbSAqbClcXG4re1xcbitcXHRzdHJ1Y3QgaHRhYl9lbGVtX2ZyZWVfcmN1ICpmcjtcXG4rXFxuK1xcdGZyID0ga21hbGxvY19vYmooKmZyLCBHRlBfQVRPTUlDKTtcXG4rXFx0aWYgKFdBUk5fT05fT05DRSghZnIpKSB7XFxuK1xcdFxcdC8qIEZhbGxiYWNrOiBpbW1lZGlhdGUgcmVjeWNsZSwgc21hbGwgVUFGIHJpc2sgKi9cXG4rXFx0XFx0aHRhYl9lbGVtX3JlY3ljbGUoaHRhYiwgbCk7XFxuK1xcdFxcdHJldHVybjtcXG4rXFx0fVxcbitcXHRmci1cXHUwMDNlaHRhYiA9IGh0YWI7XFxuK1xcdGZyLVxcdTAwM2VlbGVtID0gbDtcXG4rXFx0Y2FsbF9yY3VfdGFza3NfdHJhY2UoXFx1MDAyNmZyLVxcdTAwM2VyY3UsIGh0YWJfZWxlbV9mcmVlX3JjdV9jYik7XFxuK31cXG4rXFxuIHN0YXRpYyB2b2lkIGh0YWJfZWxlbV9mcmVlKHN0cnVjdCBicGZfaHRhYiAqaHRhYiwgc3RydWN0IGh0YWJfZWxlbSAqbClcXG4ge1xcbiBcXHRjaGVja19hbmRfY2FuY2VsX2ZpZWxkcyhodGFiLCBsKTtcXG4gXFxuIFxcdGlmIChodGFiLVxcdTAwM2VtYXAubWFwX3R5cGUgPT0gQlBGX01BUF9UWVBFX1BFUkNQVV9IQVNIKVxcbiBcXHRcXHRicGZfbWVtX2NhY2hlX2ZyZWUoXFx1MDAyNmh0YWItXFx1MDAzZXBjcHVfbWEsIGwtXFx1MDAzZXB0cl90b19wcHRyKTtcXG4rXFx0aWYgKGJ0Zl9yZWNvcmRfaGFzX2ZpZWxkKGh0YWItXFx1MDAzZW1hcC5yZWNvcmQsIEJQRl9UQVNLX1dPUkspKSB7XFxuK1xcdFxcdGh0YWJfZWxlbV9kZWZlcl9mcmVlKGh0YWIsIGwpO1xcbitcXHRcXHRyZXR1cm47XFxuK1xcdH1cXG4gXFx0YnBmX21lbV9jYWNoZV9mcmVlKFxcdTAwMjZodGFiLVxcdTAwM2VtYSwgbCk7XFxuIH1cXG4gXFxuQEAgLTEwMDYsNiArMTA2NCwxMCBAQCBzdGF0aWMgdm9pZCBmcmVlX2h0YWJfZWxlbShzdHJ1Y3QgYnBmX2h0YWIgKmh0YWIsIHN0cnVjdCBodGFiX2VsZW0gKmwpXFxuIFxcdGlmIChodGFiX2lzX3ByZWFsbG9jKGh0YWIpKSB7XFxuIFxcdFxcdGJwZl9tYXBfZGVjX2VsZW1fY291bnQoXFx1MDAyNmh0YWItXFx1MDAzZW1hcCk7XFxuIFxcdFxcdGNoZWNrX2FuZF9jYW5jZWxfZmllbGRzKGh0YWIsIGwpO1xcbitcXHRcXHRpZiAoYnRmX3JlY29yZF9oYXNfZmllbGQoaHRhYi1cXHUwMDNlbWFwLnJlY29yZCwgQlBGX1RBU0tfV09SSykpIHtcXG4rXFx0XFx0XFx0aHRhYl9lbGVtX2RlZmVyX2ZyZWUoaHRhYiwgbCk7XFxuK1xcdFxcdFxcdHJldHVybjtcXG4rXFx0XFx0fVxcbiBcXHRcXHRwY3B1X2ZyZWVsaXN0X3B1c2goXFx1MDAyNmh0YWItXFx1MDAzZWZyZWVsaXN0LCBcXHUwMDI2bC1cXHUwMDNlZm5vZGUpO1xcbiBcXHR9IGVsc2Uge1xcbiBcXHRcXHRkZWNfZWxlbV9jb3VudChodGFiKTtcXG5AQCAtMTExOCw2ICsxMTgwLDExIEBAIHN0YXRpYyBzdHJ1Y3QgaHRhYl9lbGVtICphbGxvY19odGFiX2VsZW0oc3RydWN0IGJwZl9odGFiICpodGFiLCB2b2lkICprZXksXFxuIFxcdH1cXG4gXFxuIFxcdG1lbWNweShsX25ldy1cXHUwMDNla2V5LCBrZXksIGtleV9zaXplKTtcXG4rXFx0LyogUmUtaW5pdGlhbGl6ZSBzcGVjaWFsIGZpZWxkcyBmb3IgcmVjeWNsZWQgZWxlbWVudHMuICBjb3B5X21hcF92YWx1ZSgpXFxuK1xcdCAqIHNraXBzIGJ0Zl9yZWNvcmQgZmllbGRzLCBzbyBhIHN0YWxlIEVSUl9QVFIoLUVCVVNZKSBsZWZ0IGJ5XFxuK1xcdCAqIGJwZl90YXNrX3dvcmtfY2FuY2VsX2FuZF9mcmVlIHdvdWxkIHBlcnNpc3QgYW5kIGJsb2NrIG5ldyBzY2hlZHVsaW5nLlxcbitcXHQgKi9cXG4rXFx0Y2hlY2tfYW5kX2luaXRfbWFwX3ZhbHVlKFxcdTAwMjZodGFiLVxcdTAwM2VtYXAsIGh0YWJfZWxlbV92YWx1ZShsX25ldywga2V5X3NpemUpKTtcXG4gXFx0aWYgKHBlcmNwdSkge1xcbiBcXHRcXHRpZiAocHJlYWxsb2MpIHtcXG4gXFx0XFx0XFx0cHB0ciA9IGh0YWJfZWxlbV9nZXRfcHRyKGxfbmV3LCBrZXlfc2l6ZSk7XFxuQEAgLTEyNzUsNiArMTM0MiwxMCBAQCBzdGF0aWMgdm9pZCBodGFiX2xydV9wdXNoX2ZyZWUoc3RydWN0IGJwZl9odGFiICpodGFiLCBzdHJ1Y3QgaHRhYl9lbGVtICplbGVtKVxcbiB7XFxuIFxcdGNoZWNrX2FuZF9jYW5jZWxfZmllbGRzKGh0YWIsIGVsZW0pO1xcbiBcXHRicGZfbWFwX2RlY19lbGVtX2NvdW50KFxcdTAwMjZodGFiLVxcdTAwM2VtYXApO1xcbitcXHRpZiAoYnRmX3JlY29yZF9oYXNfZmllbGQoaHRhYi1cXHUwMDNlbWFwLnJlY29yZCwgQlBGX1RBU0tfV09SSykpIHtcXG4rXFx0XFx0aHRhYl9lbGVtX2RlZmVyX2ZyZWUoaHRhYiwgZWxlbSk7XFxuK1xcdFxcdHJldHVybjtcXG4rXFx0fVxcbiBcXHRicGZfbHJ1X3B1c2hfZnJlZShcXHUwMDI2aHRhYi1cXHUwMDNlbHJ1LCBcXHUwMDI2ZWxlbS1cXHUwMDNlbHJ1X25vZGUpO1xcbiB9XFxuIFxcbkBAIC0xNjQxLDkgKzE3MTIsMTkgQEAgc3RhdGljIHZvaWQgaHRhYl9tYXBfZnJlZShzdHJ1Y3QgYnBmX21hcCAqbWFwKVxcbiBcXHRcXHRkZWxldGVfYWxsX2VsZW1lbnRzKGh0YWIpO1xcbiBcXHR9IGVsc2Uge1xcbiBcXHRcXHRodGFiX2ZyZWVfcHJlYWxsb2NlZF9maWVsZHMoaHRhYik7XFxuLVxcdFxcdHByZWFsbG9jX2Rlc3Ryb3koaHRhYik7XFxuIFxcdH1cXG4gXFxuK1xcdC8qIEZvciBicGZfdGFza193b3JrIG1hcHMsIGVsZW1lbnQgZnJlZXMgZGVmZXIgcmVjeWNsaW5nIHRocm91Z2hcXG4rXFx0ICogY2FsbF9yY3VfdGFza3NfdHJhY2UoKSBzbyBydW5uaW5nIGNhbGxiYWNrcyBmaW5pc2ggYmVmb3JlIHJldXNlLlxcbitcXHQgKiBXYWl0IGZvciBhbnkgaW4tZmxpZ2h0IGRlZmVycmVkIHJlY3ljbGVzIGhlcmUsIGJlZm9yZSB0aGVcXG4rXFx0ICogZnJlZWxpc3QvTFJVIGFuZCBlbGVtZW50IG1lbW9yeSBhcmUgdG9ybiBkb3duLlxcbitcXHQgKi9cXG4rXFx0aWYgKGJ0Zl9yZWNvcmRfaGFzX2ZpZWxkKGh0YWItXFx1MDAzZW1hcC5yZWNvcmQsIEJQRl9UQVNLX1dPUkspKVxcbitcXHRcXHRyY3VfYmFycmllcl90YXNrc190cmFjZSgpO1xcbitcXG4rXFx0aWYgKGh0YWJfaXNfcHJlYWxsb2MoaHRhYikpXFxuK1xcdFxcdHByZWFsbG9jX2Rlc3Ryb3koaHRhYik7XFxuK1xcbiBcXHRicGZfbWFwX2ZyZWVfZWxlbV9jb3VudChtYXApO1xcbiBcXHRmcmVlX3BlcmNwdShodGFiLVxcdTAwM2VleHRyYV9lbGVtcyk7XFxuIFxcdGJwZl9tYXBfYXJlYV9mcmVlKGh0YWItXFx1MDAzZWJ1Y2tldHMpO1xcbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL2hlbHBlcnMuYyBiL2tlcm5lbC9icGYvaGVscGVycy5jXFxuaW5kZXggYzE4ZjFlMTZlZGVlNGMuLjA3MDg4YWMxZjBiMmQ5IDEwMDY0NFxcbi0tLSBhL2tlcm5lbC9icGYvaGVscGVycy5jXFxuKysrIGIva2VybmVsL2JwZi9oZWxwZXJzLmNcXG5AQCAtNDQ1NCw3ICs0NDU0LDEwIEBAIHN0YXRpYyB2b2lkIGJwZl90YXNrX3dvcmtfY2FsbGJhY2soc3RydWN0IGNhbGxiYWNrX2hlYWQgKmNiKVxcbiBcXHR1MzIgaWR4O1xcbiBcXHR2b2lkICprZXk7XFxuIFxcbi1cXHQvKiBSZWFkIGxvY2sgaXMgbmVlZGVkIHRvIHByb3RlY3QgY3R4IGFuZCBtYXAga2V5L3ZhbHVlIGFjY2VzcyAqL1xcbitcXHQvKiBIb2xkIHJjdV9yZWFkX2xvY2tfdHJhY2Ugc28gdGhhdCBjYWxsX3JjdV90YXNrc190cmFjZSgpIGluXFxuK1xcdCAqIGh0YWJfZWxlbV9kZWZlcl9mcmVlKCkgd2FpdHMgZm9yIHRoaXMgY2FsbGJhY2sgdG8gZmluaXNoIGJlZm9yZVxcbitcXHQgKiByZWN5Y2xpbmcgdGhlIGh0YWJfZWxlbS5cXG4rXFx0ICovXFxuIFxcdGd1YXJkKHJjdV90YXNrc190cmFjZSkoKTtcXG4gXFx0LypcXG4gXFx0ICogVGhpcyBjYWxsYmFjayBtYXkgc3RhcnQgcnVubmluZyBiZWZvcmUgYnBmX3Rhc2tfd29ya19pcnEoKSBzd2l0Y2hlZCB0b1xcbkBAIC00Nzg0LDggKzQ3ODcsOCBAQCB2b2lkIGJwZl90YXNrX3dvcmtfY2FuY2VsX2FuZF9mcmVlKHZvaWQgKnZhbClcXG4gXFx0c3RydWN0IGJwZl90YXNrX3dvcmtfY3R4ICpjdHg7XFxuIFxcdGVudW0gYnBmX3Rhc2tfd29ya19zdGF0ZSBzdGF0ZTtcXG4gXFxuLVxcdGN0eCA9IHhjaGcoXFx1MDAyNnR3ay1cXHUwMDNlY3R4LCBOVUxMKTtcXG4tXFx0aWYgKCFjdHgpXFxuK1xcdGN0eCA9IHhjaGcoXFx1MDAyNnR3ay1cXHUwMDNlY3R4LCBFUlJfUFRSKC1FQlVTWSkpO1xcbitcXHRpZiAoSVNfRVJSX09SX05VTEwoY3R4KSlcXG4gXFx0XFx0cmV0dXJuO1xcbiBcXG4gXFx0c3RhdGUgPSB4Y2hnKFxcdTAwMjZjdHgtXFx1MDAzZXN0YXRlLCBCUEZfVFdfRlJFRUQpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNFQxOTozNTowOC40MjY2MDA5NDJaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM5MjA4MjcxMjQ1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9TWVNDQUxMXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaHRhYl9lbGVtX2RlZmVyX2ZyZWVcIixcbiAgICBcImh0YWJfZWxlbV9mcmVlX3JjdV9jYlwiLFxuICAgIFwiYnBmX3Rhc2tfd29ya19jYW5jZWxfYW5kX2ZyZWVcIixcbiAgICBcImh0YWJfbWFwX2ZyZWVcIixcbiAgICBcImZyZWVfaHRhYl9lbGVtXCIsXG4gICAgXCJodGFiX2VsZW1fZnJlZVwiLFxuICAgIFwiaHRhYl9scnVfcHVzaF9mcmVlXCIsXG4gICAgXCJhbGxvY19odGFiX2VsZW1cIixcbiAgICBcInByZWFsbG9jX2xydV9wb3BcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgQlBGIHN1YnN5c3RlbSB0byBkZWZlciB0aGUgZnJlZWluZyBvZiBoYXNoIHRhYmxlIGVsZW1lbnRzIGNvbnRhaW5pbmcgQlBGX1RBU0tfV09SSyBmaWVsZHMgdXNpbmcgY2FsbF9yY3VfdGFza3NfdHJhY2UuIFRoaXMgcHJldmVudHMgYSB1c2UtYWZ0ZXItZnJlZSB3aGVuIGEgdGFzayB3b3JrIGNhbGxiYWNrIGlzIHN0aWxsIHJ1bm5pbmcuIEl0IGFsc28gcmUtaW5pdGlhbGl6ZXMgc3BlY2lhbCBmaWVsZHMgZm9yIHJlY3ljbGVkIGVsZW1lbnRzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBCUEYgbWFwIGxvZ2ljIGFuZCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBjb3JyZWN0IG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBzY2hlZHVsaW5nIGJlaGF2aW9yLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG5ldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0XG4gICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksXG4gICBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGRhMjZiYjNiYzFkOGU3MWZiOTc0NTA2MWU3MzI5NzVjMmM1YzFkNDNcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIEp1biAyNCAxOTozNTowNiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvaGFzaHRhYi5jIGIva2VybmVsL2JwZi9oYXNodGFiLmNcbmluZGV4IDlmMzk0ZTFhYTJlODViLi4xOWZhNjE5MDllNGZlZCAxMDA2NDRcbi0tLSBhL2tlcm5lbC9icGYvaGFzaHRhYi5jXG4rKysgYi9rZXJuZWwvYnBmL2hhc2h0YWIuY1xuQEAgLTMxMCw2ICszMTAsNyBAQCBzdGF0aWMgc3RydWN0IGh0YWJfZWxlbSAqcHJlYWxsb2NfbHJ1X3BvcChzdHJ1Y3QgYnBmX2h0YWIgKmh0YWIsIHZvaWQgKmtleSxcbiBcdFx0YnBmX21hcF9pbmNfZWxlbV9jb3VudChcdTAwMjZodGFiLVx1MDAzZW1hcCk7XG4gXHRcdGwgPSBjb250YWluZXJfb2Yobm9kZSwgc3RydWN0IGh0YWJfZWxlbSwgbHJ1X25vZGUpO1xuIFx0XHRtZW1jcHkobC1cdTAwM2VrZXksIGtleSwgaHRhYi1cdTAwM2VtYXAua2V5X3NpemUpO1xuK1x0XHRjaGVja19hbmRfaW5pdF9tYXBfdmFsdWUoXHUwMDI2aHRhYi1cdTAwM2VtYXAsIGh0YWJfZWxlbV92YWx1ZShsLCBodGFiLVx1MDAzZW1hcC5rZXlfc2l6ZSkpO1xuIFx0XHRyZXR1cm4gbDtcbiBcdH1cbiBcbkBAIC05NTAsMTIgKzk1MSw2OSBAQCBzdGF0aWMgaW50IGh0YWJfbWFwX2dldF9uZXh0X2tleShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXksIHZvaWQgKm5leHRfa2V5KVxuIFx0cmV0dXJuIC1FTk9FTlQ7XG4gfVxuIFxuKy8qIERlZmVycmVkIGh0YWJfZWxlbSBmcmVlIGZvciBicGZfdGFza193b3JrIG1hcHMuICBjYW5jZWxfYW5kX2ZyZWUoKVxuKyAqIHJldHVybnMgd2hpbGUgdGhlIHRhc2tfd29yayBjYWxsYmFjayBtYXkgc3RpbGwgYmUgYWNjZXNzaW5nIG1hcF92YWw7XG4rICogdGhlIGNhbGxiYWNrIGhvbGRzIGd1YXJkKHJjdV90YXNrc190cmFjZSksIHNvIGRlZmVycmluZyB0aGUgcmVjeWNsZVxuKyAqIHRocm91Z2ggY2FsbF9yY3VfdGFza3NfdHJhY2UoKSB3YWl0cyBmb3IgaXQgKGFuZCwgc2luY2UgYSB0YXNrcyB0cmFjZVxuKyAqIEdQIGltcGxpZXMgYSByZWd1bGFyIFJDVSBHUCwgZm9yIEJQRiB2YWx1ZSByZWFkZXJzIHRvbykgYmVmb3JlIHRoZVxuKyAqIGVsZW1lbnQgaXMgcmV1c2VkLiAgQSBjYWxsYmFjayB0aGF0IGVudGVycyBhZnRlciB0aGUgR1AgZmluZHMgdGhlIGN0eFxuKyAqIGFscmVhZHkgRlJFRUQgYW5kIGJhaWxzIG91dC5cbisgKi9cbitzdHJ1Y3QgaHRhYl9lbGVtX2ZyZWVfcmN1IHtcbitcdHN0cnVjdCByY3VfaGVhZCByY3U7XG4rXHRzdHJ1Y3QgYnBmX2h0YWIgKmh0YWI7XG4rXHRzdHJ1Y3QgaHRhYl9lbGVtICplbGVtO1xuK307XG4rXG4rLyogUmV0dXJuIGFuIGh0YWJfZWxlbSB0byBpdHMgbWFwJ3MgZnJlZSBwb29sOiBicGZfbWVtX2NhY2hlX2ZyZWUgZm9yXG4rICogbm9uLXByZWFsbG9jLCBwY3B1X2ZyZWVsaXN0X3B1c2ggZm9yIHByZWFsbG9jLCBicGZfbHJ1X3B1c2hfZnJlZSBmb3JcbisgKiBwcmVhbGxvYyBMUlUuXG4rICovXG4rc3RhdGljIHZvaWQgaHRhYl9lbGVtX3JlY3ljbGUoc3RydWN0IGJwZl9odGFiICpodGFiLCBzdHJ1Y3QgaHRhYl9lbGVtICpsKVxuK3tcbitcdGlmIChodGFiX2lzX3ByZWFsbG9jKGh0YWIpKSB7XG4rXHRcdGlmIChodGFiX2lzX2xydShodGFiKSlcbitcdFx0XHRicGZfbHJ1X3B1c2hfZnJlZShcdTAwMjZodGFiLVx1MDAzZWxydSwgXHUwMDI2bC1cdTAwM2VscnVfbm9kZSk7XG4rXHRcdGVsc2VcbitcdFx0XHRwY3B1X2ZyZWVsaXN0X3B1c2goXHUwMDI2aHRhYi1cdTAwM2VmcmVlbGlzdCwgXHUwMDI2bC1cdTAwM2Vmbm9kZSk7XG4rXHR9IGVsc2Uge1xuK1x0XHRicGZfbWVtX2NhY2hlX2ZyZWUoXHUwMDI2aHRhYi1cdTAwM2VtYSwgbCk7XG4rXHR9XG4rfVxuK1xuK3N0YXRpYyB2b2lkIGh0YWJfZWxlbV9mcmVlX3JjdV9jYihzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQpXG4re1xuK1x0c3RydWN0IGh0YWJfZWxlbV9mcmVlX3JjdSAqZnIgPSBjb250YWluZXJfb2YoaGVhZCwgc3RydWN0IGh0YWJfZWxlbV9mcmVlX3JjdSwgcmN1KTtcbitcbitcdGh0YWJfZWxlbV9yZWN5Y2xlKGZyLVx1MDAzZWh0YWIsIGZyLVx1MDAzZWVsZW0pO1xuK1x0a2ZyZWUoZnIpO1xuK31cbitcbitzdGF0aWMgdm9pZCBodGFiX2VsZW1fZGVmZXJfZnJlZShzdHJ1Y3QgYnBmX2h0YWIgKmh0YWIsIHN0cnVjdCBodGFiX2VsZW0gKmwpXG4re1xuK1x0c3RydWN0IGh0YWJfZWxlbV9mcmVlX3JjdSAqZnI7XG4rXG4rXHRmciA9IGttYWxsb2Nfb2JqKCpmciwgR0ZQX0FUT01JQyk7XG4rXHRpZiAoV0FSTl9PTl9PTkNFKCFmcikpIHtcbitcdFx0LyogRmFsbGJhY2s6IGltbWVkaWF0ZSByZWN5Y2xlLCBzbWFsbCBVQUYgcmlzayAqL1xuK1x0XHRodGFiX2VsZW1fcmVjeWNsZShodGFiLCBsKTtcbitcdFx0cmV0dXJuO1xuK1x0fVxuK1x0ZnItXHUwMDNlaHRhYiA9IGh0YWI7XG4rXHRmci1cdTAwM2VlbGVtID0gbDtcbitcdGNhbGxfcmN1X3Rhc2tzX3RyYWNlKFx1MDAyNmZyLVx1MDAzZXJjdSwgaHRhYl9lbGVtX2ZyZWVfcmN1X2NiKTtcbit9XG4rXG4gc3RhdGljIHZvaWQgaHRhYl9lbGVtX2ZyZWUoc3RydWN0IGJwZl9odGFiICpodGFiLCBzdHJ1Y3QgaHRhYl9lbGVtICpsKVxuIHtcbiBcdGNoZWNrX2FuZF9jYW5jZWxfZmllbGRzKGh0YWIsIGwpO1xuIFxuIFx0aWYgKGh0YWItXHUwMDNlbWFwLm1hcF90eXBlID09IEJQRl9NQVBfVFlQRV9QRVJDUFVfSEFTSClcbiBcdFx0YnBmX21lbV9jYWNoZV9mcmVlKFx1MDAyNmh0YWItXHUwMDNlcGNwdV9tYSwgbC1cdTAwM2VwdHJfdG9fcHB0cik7XG4rXHRpZiAoYnRmX3JlY29yZF9oYXNfZmllbGQoaHRhYi1cdTAwM2VtYXAucmVjb3JkLCBCUEZfVEFTS19XT1JLKSkge1xuK1x0XHRodGFiX2VsZW1fZGVmZXJfZnJlZShodGFiLCBsKTtcbitcdFx0cmV0dXJuO1xuK1x0fVxuIFx0YnBmX21lbV9jYWNoZV9mcmVlKFx1MDAyNmh0YWItXHUwMDNlbWEsIGwpO1xuIH1cbiBcbkBAIC0xMDA2LDYgKzEwNjQsMTAgQEAgc3RhdGljIHZvaWQgZnJlZV9odGFiX2VsZW0oc3RydWN0IGJwZl9odGFiICpodGFiLCBzdHJ1Y3QgaHRhYl9lbGVtICpsKVxuIFx0aWYgKGh0YWJfaXNfcHJlYWxsb2MoaHRhYikpIHtcbiBcdFx0YnBmX21hcF9kZWNfZWxlbV9jb3VudChcdTAwMjZodGFiLVx1MDAzZW1hcCk7XG4gXHRcdGNoZWNrX2FuZF9jYW5jZWxfZmllbGRzKGh0YWIsIGwpO1xuK1x0XHRpZiAoYnRmX3JlY29yZF9oYXNfZmllbGQoaHRhYi1cdTAwM2VtYXAucmVjb3JkLCBCUEZfVEFTS19XT1JLKSkge1xuK1x0XHRcdGh0YWJfZWxlbV9kZWZlcl9mcmVlKGh0YWIsIGwpO1xuK1x0XHRcdHJldHVybjtcbitcdFx0fVxuIFx0XHRwY3B1X2ZyZWVsaXN0X3B1c2goXHUwMDI2aHRhYi1cdTAwM2VmcmVlbGlzdCwgXHUwMDI2bC1cdTAwM2Vmbm9kZSk7XG4gXHR9IGVsc2Uge1xuIFx0XHRkZWNfZWxlbV9jb3VudChodGFiKTtcbkBAIC0xMTE4LDYgKzExODAsMTEgQEAgc3RhdGljIHN0cnVjdCBodGFiX2VsZW0gKmFsbG9jX2h0YWJfZWxlbShzdHJ1Y3QgYnBmX2h0YWIgKmh0YWIsIHZvaWQgKmtleSxcbiBcdH1cbiBcbiBcdG1lbWNweShsX25ldy1cdTAwM2VrZXksIGtleSwga2V5X3NpemUpO1xuK1x0LyogUmUtaW5pdGlhbGl6ZSBzcGVjaWFsIGZpZWxkcyBmb3IgcmVjeWNsZWQgZWxlbWVudHMuICBjb3B5X21hcF92YWx1ZSgpXG4rXHQgKiBza2lwcyBidGZfcmVjb3JkIGZpZWxkcywgc28gYSBzdGFsZSBFUlJfUFRSKC1FQlVTWSkgbGVmdCBieVxuK1x0ICogYnBmX3Rhc2tfd29ya19jYW5jZWxfYW5kX2ZyZWUgd291bGQgcGVyc2lzdCBhbmQgYmxvY2sgbmV3IHNjaGVkdWxpbmcuXG4rXHQgKi9cbitcdGNoZWNrX2FuZF9pbml0X21hcF92YWx1ZShcdTAwMjZodGFiLVx1MDAzZW1hcCwgaHRhYl9lbGVtX3ZhbHVlKGxfbmV3LCBrZXlfc2l6ZSkpO1xuIFx0aWYgKHBlcmNwdSkge1xuIFx0XHRpZiAocHJlYWxsb2MpIHtcbiBcdFx0XHRwcHRyID0gaHRhYl9lbGVtX2dldF9wdHIobF9uZXcsIGtleV9zaXplKTtcbkBAIC0xMjc1LDYgKzEzNDIsMTAgQEAgc3RhdGljIHZvaWQgaHRhYl9scnVfcHVzaF9mcmVlKHN0cnVjdCBicGZfaHRhYiAqaHRhYiwgc3RydWN0IGh0YWJfZWxlbSAqZWxlbSlcbiB7XG4gXHRjaGVja19hbmRfY2FuY2VsX2ZpZWxkcyhodGFiLCBlbGVtKTtcbiBcdGJwZl9tYXBfZGVjX2VsZW1fY291bnQoXHUwMDI2aHRhYi1cdTAwM2VtYXApO1xuK1x0aWYgKGJ0Zl9yZWNvcmRfaGFzX2ZpZWxkKGh0YWItXHUwMDNlbWFwLnJlY29yZCwgQlBGX1RBU0tfV09SSykpIHtcbitcdFx0aHRhYl9lbGVtX2RlZmVyX2ZyZWUoaHRhYiwgZWxlbSk7XG4rXHRcdHJldHVybjtcbitcdH1cbiBcdGJwZl9scnVfcHVzaF9mcmVlKFx1MDAyNmh0YWItXHUwMDNlbHJ1LCBcdTAwMjZlbGVtLVx1MDAzZWxydV9ub2RlKTtcbiB9XG4gXG5AQCAtMTY0MSw5ICsxNzEyLDE5IEBAIHN0YXRpYyB2b2lkIGh0YWJfbWFwX2ZyZWUoc3RydWN0IGJwZl9tYXAgKm1hcClcbiBcdFx0ZGVsZXRlX2FsbF9lbGVtZW50cyhodGFiKTtcbiBcdH0gZWxzZSB7XG4gXHRcdGh0YWJfZnJlZV9wcmVhbGxvY2VkX2ZpZWxkcyhodGFiKTtcbi1cdFx0cHJlYWxsb2NfZGVzdHJveShodGFiKTtcbiBcdH1cbiBcbitcdC8qIEZvciBicGZfdGFza193b3JrIG1hcHMsIGVsZW1lbnQgZnJlZXMgZGVmZXIgcmVjeWNsaW5nIHRocm91Z2hcbitcdCAqIGNhbGxfcmN1X3Rhc2tzX3RyYWNlKCkgc28gcnVubmluZyBjYWxsYmFja3MgZmluaXNoIGJlZm9yZSByZXVzZS5cbitcdCAqIFdhaXQgZm9yIGFueSBpbi1mbGlnaHQgZGVmZXJyZWQgcmVjeWNsZXMgaGVyZSwgYmVmb3JlIHRoZVxuK1x0ICogZnJlZWxpc3QvTFJVIGFuZCBlbGVtZW50IG1lbW9yeSBhcmUgdG9ybiBkb3duLlxuK1x0ICovXG4rXHRpZiAoYnRmX3JlY29yZF9oYXNfZmllbGQoaHRhYi1cdTAwM2VtYXAucmVjb3JkLCBCUEZfVEFTS19XT1JLKSlcbitcdFx0cmN1X2JhcnJpZXJfdGFza3NfdHJhY2UoKTtcbitcbitcdGlmIChodGFiX2lzX3ByZWFsbG9jKGh0YWIpKVxuK1x0XHRwcmVhbGxvY19kZXN0cm95KGh0YWIpO1xuK1xuIFx0YnBmX21hcF9mcmVlX2VsZW1fY291bnQobWFwKTtcbiBcdGZyZWVfcGVyY3B1KGh0YWItXHUwMDNlZXh0cmFfZWxlbXMpO1xuIFx0YnBmX21hcF9hcmVhX2ZyZWUoaHRhYi1cdTAwM2VidWNrZXRzKTtcbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL2hlbHBlcnMuYyBiL2tlcm5lbC9icGYvaGVscGVycy5jXG5pbmRleCBjMThmMWUxNmVkZWU0Yy4uMDcwODhhYzFmMGIyZDkgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvYnBmL2hlbHBlcnMuY1xuKysrIGIva2VybmVsL2JwZi9oZWxwZXJzLmNcbkBAIC00NDU0LDcgKzQ0NTQsMTAgQEAgc3RhdGljIHZvaWQgYnBmX3Rhc2tfd29ya19jYWxsYmFjayhzdHJ1Y3QgY2FsbGJhY2tfaGVhZCAqY2IpXG4gXHR1MzIgaWR4O1xuIFx0dm9pZCAqa2V5O1xuIFxuLVx0LyogUmVhZCBsb2NrIGlzIG5lZWRlZCB0byBwcm90ZWN0IGN0eCBhbmQgbWFwIGtleS92YWx1ZSBhY2Nlc3MgKi9cbitcdC8qIEhvbGQgcmN1X3JlYWRfbG9ja190cmFjZSBzbyB0aGF0IGNhbGxfcmN1X3Rhc2tzX3RyYWNlKCkgaW5cbitcdCAqIGh0YWJfZWxlbV9kZWZlcl9mcmVlKCkgd2FpdHMgZm9yIHRoaXMgY2FsbGJhY2sgdG8gZmluaXNoIGJlZm9yZVxuK1x0ICogcmVjeWNsaW5nIHRoZSBodGFiX2VsZW0uXG4rXHQgKi9cbiBcdGd1YXJkKHJjdV90YXNrc190cmFjZSkoKTtcbiBcdC8qXG4gXHQgKiBUaGlzIGNhbGxiYWNrIG1heSBzdGFydCBydW5uaW5nIGJlZm9yZSBicGZfdGFza193b3JrX2lycSgpIHN3aXRjaGVkIHRvXG5AQCAtNDc4NCw4ICs0Nzg3LDggQEAgdm9pZCBicGZfdGFza193b3JrX2NhbmNlbF9hbmRfZnJlZSh2b2lkICp2YWwpXG4gXHRzdHJ1Y3QgYnBmX3Rhc2tfd29ya19jdHggKmN0eDtcbiBcdGVudW0gYnBmX3Rhc2tfd29ya19zdGF0ZSBzdGF0ZTtcbiBcbi1cdGN0eCA9IHhjaGcoXHUwMDI2dHdrLVx1MDAzZWN0eCwgTlVMTCk7XG4tXHRpZiAoIWN0eClcbitcdGN0eCA9IHhjaGcoXHUwMDI2dHdrLVx1MDAzZWN0eCwgRVJSX1BUUigtRUJVU1kpKTtcbitcdGlmIChJU19FUlJfT1JfTlVMTChjdHgpKVxuIFx0XHRyZXR1cm47XG4gXG4gXHRzdGF0ZSA9IHhjaGcoXHUwMDI2Y3R4LVx1MDAzZXN0YXRlLCBCUEZfVFdfRlJFRUQpO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjRUMTk6MzU6MDguNDI2NjAyNTYyWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjMzMjkwNjU2MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBCUEYgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBhIHBhdGNoIHRoYXQncyBtYWtpbmcgY2hhbmdlcyBpbiBga2VybmVsL2JwZi9oYXNodGFiLmNgIGFuZCBga2VybmVsL2JwZi9oZWxwZXJzLmNgLiBJdCdzIGludHJvZHVjaW5nIGEgZGVmZXJyZWQgZnJlZSBtZWNoYW5pc20gc3BlY2lmaWNhbGx5IGZvciBgaHRhYl9lbGVtYCBzdHJ1Y3R1cmVzIHdpdGhpbiBCUEYgbWFwcyB0aGF0IHV0aWxpemUgYEJQRl9UQVNLX1dPUktgIGZpZWxkcy4gVGhlIGdvYWwgaGVyZSBpcyBwcmV0dHkgY2xlYXI6IHByZXZlbnQgYSBVc2UtQWZ0ZXItRnJlZSAoVUFGKSBzaXR1YXRpb24uIFRoZSBpbXBsZW1lbnRhdGlvbiB1c2VzIGBjYWxsX3JjdV90YXNrc190cmFjZWAgdG8gcG9zdHBvbmUgdGhlIGVsZW1lbnQgcmVjeWNsaW5nLCBlbnN1cmluZyB0aGF0IGBicGZfdGFza193b3JrX2NhbmNlbF9hbmRfZnJlZWAgZG9lc24ndCBnZXQgY2FsbGVkIHdoaWxlIHRoZSB0YXNrIHdvcmsgY2FsbGJhY2sgaXMgc3RpbGwgYWN0aXZlLlxuXG5UaGV5J3ZlIGFsc28gbW9kaWZpZWQgYGJwZl90YXNrX3dvcmtfY2FuY2VsX2FuZF9mcmVlYCB0byBzZXQgYHR3ay1cdTAwM2VjdHhgIHRvIGBFUlJfUFRSKC1FQlVTWSlgIGluc3RlYWQgb2YgYE5VTExgLiBTbWFydCwgdGhhdCdzIGEgZ29vZCB3YXkgdG8gc2lnbmFsIHRoYXQgdGhlIHJlc291cmNlIGlzIHRlbXBvcmFyaWx5IHVuYXZhaWxhYmxlLiBBbmQgaW4gYGFsbG9jX2h0YWJfZWxlbWAgYW5kIGBwcmVhbGxvY19scnVfcG9wYCwgdGhlIHNwZWNpYWwgZmllbGRzIG9mIHJlY3ljbGVkIGVsZW1lbnRzIGFyZSBiZWluZyByZS1pbml0aWFsaXplZCB2aWEgYGNoZWNrX2FuZF9pbml0X21hcF92YWx1ZWAuIFRoaXMgaXMgYWxsIGZhaXJseSBzdGFuZGFyZCBwcmFjdGljZSBmb3IgbWFuYWdpbmcgcmVjeWNsZWQgbWVtb3J5IGFuZCBlbnN1cmluZyBjb25zaXN0ZW50IHN0YXRlIGFmdGVyIHJldXNlLlxuXG5UaGlzIGlzIGEgcHJldHR5IGZ1bmRhbWVudGFsIG1vZGlmaWNhdGlvbiB3aXRoaW4gdGhlIGNvcmUgQlBGIHN1YnN5c3RlbSwgaW1wYWN0aW5nIG1hcHMgdGhhdCB1c2UgYGJwZl90YXNrX3dvcmtgLiBHaXZlbiB0aGUgcG90ZW50aWFsIGZvciBjb25jdXJyZW5jeSBpc3N1ZXMgYW5kIHRoZSBmb2N1cyBvbiBwcmV2ZW50aW5nIFVBRiwgdGhpcyAqYWJzb2x1dGVseSogbmVlZHMgcmlnb3JvdXMgZnV6emluZy4gSSdsbCBuZWVkIHRvIGlkZW50aWZ5IHRoZSByZWxldmFudCBrZXJuZWwgY29uZmlndXJhdGlvbnMgdG8gZW5zdXJlIHByb3BlciB0ZXN0aW5nLlxuXG5GaXJzdCwgYEJQRl9TWVNDQUxMYCBpcyB0aGUgb2J2aW91cyBvbmUsIHRoZSBjb3JlIEJQRiBmdW5jdGlvbmFsaXR5LiBCdXQgSSBuZWVkIHRvIGNoZWNrIGZvciBhbnkgc3BlY2lmaWMgY29uZmlndXJhdGlvbnMgcmVsYXRlZCB0byBgQlBGX1RBU0tfV09SS2Agb3Igc29tZXRoaW5nIHNpbWlsYXIsIG1heWJlIHRoZXJlIGFyZSBjb25kaXRpb25hbCBjb21waWxhdGlvbiBhc3BlY3RzIGF0IHBsYXkuIEknbGwgcHVsbCBvdXQgYGdyZXBwZXJgIGFuZCBzZWFyY2ggZm9yIGBCUEZfVEFTS19XT1JLYCB3aXRoaW4gdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uIGZpbGVzIHRvIHBpbnBvaW50IHRob3NlIHJlbGV2YW50IHN5bWJvbHMuIFRoaXMgaXMgd2hlcmUgSSdsbCByZWFsbHkgaG9uZSBpbiBvbiB0aGUgcGF0Y2gncyBpbXBhY3QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQwNDgsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOTcsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNFQxOTozNToxNC43NTk1MTI1OTRaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjM2ODAwNjMzMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJCUEZfVEFTS19XT1JLXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvYnBmLmg9MTk4PWVudW0gYnRmX2ZpZWxkX3R5cGUge1xcbi0tXFxuaW5jbHVkZS9saW51eC9icGYuaC0yMTQtXFx0QlBGX1JFU19TUElOX0xPQ0sgPSAoMSBcXHUwMDNjXFx1MDAzYyAxMiksXFxuaW5jbHVkZS9saW51eC9icGYuaDoyMTU6XFx0QlBGX1RBU0tfV09SSyAgPSAoMSBcXHUwMDNjXFx1MDAzYyAxMyksXFxuaW5jbHVkZS9saW51eC9icGYuaC0yMTYtfTtcXG4tLVxcbmluY2x1ZGUvbGludXgvYnBmLmg9MzQ2PXN0YXRpYyBpbmxpbmUgY29uc3QgY2hhciAqYnRmX2ZpZWxkX3R5cGVfbmFtZShlbnVtIGJ0Zl9maWVsZF90eXBlIHR5cGUpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2JwZi5oLTM3My1cXHRcXHRyZXR1cm4gXFxcImJwZl9yZWZjb3VudFxcXCI7XFxuaW5jbHVkZS9saW51eC9icGYuaDozNzQ6XFx0Y2FzZSBCUEZfVEFTS19XT1JLOlxcbmluY2x1ZGUvbGludXgvYnBmLmgtMzc1LVxcdFxcdHJldHVybiBcXFwiYnBmX3Rhc2tfd29ya1xcXCI7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2JwZi5oPTM4OD1zdGF0aWMgaW5saW5lIHUzMiBidGZfZmllbGRfdHlwZV9zaXplKGVudW0gYnRmX2ZpZWxkX3R5cGUgdHlwZSlcXG4tLVxcbmluY2x1ZGUvbGludXgvYnBmLmgtNDEzLVxcdFxcdHJldHVybiBzaXplb2Yoc3RydWN0IGJwZl9yZWZjb3VudCk7XFxuaW5jbHVkZS9saW51eC9icGYuaDo0MTQ6XFx0Y2FzZSBCUEZfVEFTS19XT1JLOlxcbmluY2x1ZGUvbGludXgvYnBmLmgtNDE1LVxcdFxcdHJldHVybiBzaXplb2Yoc3RydWN0IGJwZl90YXNrX3dvcmspO1xcbi0tXFxuaW5jbHVkZS9saW51eC9icGYuaD00MjI9c3RhdGljIGlubGluZSB1MzIgYnRmX2ZpZWxkX3R5cGVfYWxpZ24oZW51bSBidGZfZmllbGRfdHlwZSB0eXBlKVxcbi0tXFxuaW5jbHVkZS9saW51eC9icGYuaC00NDctXFx0XFx0cmV0dXJuIF9fYWxpZ25vZl9fKHN0cnVjdCBicGZfcmVmY291bnQpO1xcbmluY2x1ZGUvbGludXgvYnBmLmg6NDQ4OlxcdGNhc2UgQlBGX1RBU0tfV09SSzpcXG5pbmNsdWRlL2xpbnV4L2JwZi5oLTQ0OS1cXHRcXHRyZXR1cm4gX19hbGlnbm9mX18oc3RydWN0IGJwZl90YXNrX3dvcmspO1xcbi0tXFxuaW5jbHVkZS9saW51eC9icGYuaD00NTY9c3RhdGljIGlubGluZSB2b2lkIGJwZl9vYmpfaW5pdF9maWVsZChjb25zdCBzdHJ1Y3QgYnRmX2ZpZWxkICpmaWVsZCwgdm9pZCAqYWRkcilcXG4tLVxcbmluY2x1ZGUvbGludXgvYnBmLmgtNDgwLVxcdGNhc2UgQlBGX1VQVFI6XFxuaW5jbHVkZS9saW51eC9icGYuaDo0ODE6XFx0Y2FzZSBCUEZfVEFTS19XT1JLOlxcbmluY2x1ZGUvbGludXgvYnBmLmgtNDgyLVxcdFxcdGJyZWFrO1xcbi0tXFxuaW5jbHVkZS9saW51eC9icGYuaD00OTY9c3RhdGljIGlubGluZSBib29sIGJ0Zl9maWVsZF9pc19ubWlfc2FmZShlbnVtIGJ0Zl9maWVsZF90eXBlIHR5cGUpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2JwZi5oLTUwMi1cXHRjYXNlIEJQRl9XT1JLUVVFVUU6XFxuaW5jbHVkZS9saW51eC9icGYuaDo1MDM6XFx0Y2FzZSBCUEZfVEFTS19XT1JLOlxcbmluY2x1ZGUvbGludXgvYnBmLmgtNTA0LVxcdGNhc2UgQlBGX0tQVFJfVU5SRUY6XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2JwZi5oPTcwMz1zdGF0aWMgaW5saW5lIGJvb2wgYnBmX21hcF9oYXNfaW50ZXJuYWxfc3RydWN0cyhzdHJ1Y3QgYnBmX21hcCAqbWFwKVxcbmluY2x1ZGUvbGludXgvYnBmLmgtNzA0LXtcXG5pbmNsdWRlL2xpbnV4L2JwZi5oOjcwNTpcXHRyZXR1cm4gYnRmX3JlY29yZF9oYXNfZmllbGQobWFwLVxcdTAwM2VyZWNvcmQsIEJQRl9USU1FUiB8IEJQRl9XT1JLUVVFVUUgfCBCUEZfVEFTS19XT1JLKTtcXG5pbmNsdWRlL2xpbnV4L2JwZi5oLTcwNi19XFxuLS1cXG5rZXJuZWwvYnBmL2J0Zi5jPTM2MDc9c3RhdGljIGludCBidGZfZ2V0X2ZpZWxkX3R5cGUoY29uc3Qgc3RydWN0IGJ0ZiAqYnRmLCBjb25zdCBzdHJ1Y3QgYnRmX3R5cGUgKnZhcl90eXBlLFxcbi0tXFxua2VybmVsL2JwZi9idGYuYy0zNjE4LVxcdFxcdHsgQlBGX1dPUktRVUVVRSwgXFxcImJwZl93cVxcXCIsIHRydWUgfSxcXG5rZXJuZWwvYnBmL2J0Zi5jOjM2MTk6XFx0XFx0eyBCUEZfVEFTS19XT1JLLCBcXFwiYnBmX3Rhc2tfd29ya1xcXCIsIHRydWUgfSxcXG5rZXJuZWwvYnBmL2J0Zi5jLTM2MjAtXFx0XFx0eyBCUEZfTElTVF9IRUFELCBcXFwiYnBmX2xpc3RfaGVhZFxcXCIsIGZhbHNlIH0sXFxuLS1cXG5rZXJuZWwvYnBmL2J0Zi5jPTM3NDc9c3RhdGljIGludCBidGZfZmluZF9maWVsZF9vbmUoY29uc3Qgc3RydWN0IGJ0ZiAqYnRmLFxcbi0tXFxua2VybmVsL2JwZi9idGYuYy0zODAzLVxcdGNhc2UgQlBGX1JFRkNPVU5UOlxcbmtlcm5lbC9icGYvYnRmLmM6MzgwNDpcXHRjYXNlIEJQRl9UQVNLX1dPUks6XFxua2VybmVsL2JwZi9idGYuYy0zODA1LVxcdFxcdHJldCA9IGJ0Zl9maW5kX3N0cnVjdChidGYsIHZhcl90eXBlLCBvZmYsIHN6LCBmaWVsZF90eXBlLFxcbi0tXFxua2VybmVsL2JwZi9idGYuYz00MDcwPXN0cnVjdCBidGZfcmVjb3JkICpidGZfcGFyc2VfZmllbGRzKGNvbnN0IHN0cnVjdCBidGYgKmJ0ZiwgY29uc3Qgc3RydWN0IGJ0Zl90eXBlICp0LFxcbi0tXFxua2VybmVsL2JwZi9idGYuYy00MTM2LVxcdFxcdFxcdGJyZWFrO1xcbmtlcm5lbC9icGYvYnRmLmM6NDEzNzpcXHRcXHRjYXNlIEJQRl9UQVNLX1dPUks6XFxua2VybmVsL2JwZi9idGYuYy00MTM4LVxcdFxcdFxcdFdBUk5fT05fT05DRShyZWMtXFx1MDAzZXRhc2tfd29ya19vZmYgXFx1MDAzZT0gMCk7XFxuLS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYz0xMDA3PXN0YXRpYyB2b2lkIGh0YWJfZWxlbV9mcmVlKHN0cnVjdCBicGZfaHRhYiAqaHRhYiwgc3RydWN0IGh0YWJfZWxlbSAqbClcXG4tLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTEwMTItXFx0XFx0YnBmX21lbV9jYWNoZV9mcmVlKFxcdTAwMjZodGFiLVxcdTAwM2VwY3B1X21hLCBsLVxcdTAwM2VwdHJfdG9fcHB0cik7XFxua2VybmVsL2JwZi9oYXNodGFiLmM6MTAxMzpcXHRpZiAoYnRmX3JlY29yZF9oYXNfZmllbGQoaHRhYi1cXHUwMDNlbWFwLnJlY29yZCwgQlBGX1RBU0tfV09SSykpIHtcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0xMDE0LVxcdFxcdGh0YWJfZWxlbV9kZWZlcl9mcmVlKGh0YWIsIGwpO1xcbi0tXFxua2VybmVsL2JwZi9oYXNodGFiLmM9MTA2MD1zdGF0aWMgdm9pZCBmcmVlX2h0YWJfZWxlbShzdHJ1Y3QgYnBmX2h0YWIgKmh0YWIsIHN0cnVjdCBodGFiX2VsZW0gKmwpXFxuLS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0xMDY2LVxcdFxcdGNoZWNrX2FuZF9jYW5jZWxfZmllbGRzKGh0YWIsIGwpO1xcbmtlcm5lbC9icGYvaGFzaHRhYi5jOjEwNjc6XFx0XFx0aWYgKGJ0Zl9yZWNvcmRfaGFzX2ZpZWxkKGh0YWItXFx1MDAzZW1hcC5yZWNvcmQsIEJQRl9UQVNLX1dPUkspKSB7XFxua2VybmVsL2JwZi9oYXNodGFiLmMtMTA2OC1cXHRcXHRcXHRodGFiX2VsZW1fZGVmZXJfZnJlZShodGFiLCBsKTtcXG4tLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jPTEzNDE9c3RhdGljIHZvaWQgaHRhYl9scnVfcHVzaF9mcmVlKHN0cnVjdCBicGZfaHRhYiAqaHRhYiwgc3RydWN0IGh0YWJfZWxlbSAqZWxlbSlcXG4tLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTEzNDQtXFx0YnBmX21hcF9kZWNfZWxlbV9jb3VudChcXHUwMDI2aHRhYi1cXHUwMDNlbWFwKTtcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzoxMzQ1OlxcdGlmIChidGZfcmVjb3JkX2hhc19maWVsZChodGFiLVxcdTAwM2VtYXAucmVjb3JkLCBCUEZfVEFTS19XT1JLKSkge1xcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTEzNDYtXFx0XFx0aHRhYl9lbGVtX2RlZmVyX2ZyZWUoaHRhYiwgZWxlbSk7XFxuLS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYz0xNjk4PXN0YXRpYyB2b2lkIGh0YWJfbWFwX2ZyZWUoc3RydWN0IGJwZl9tYXAgKm1hcClcXG4tLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTE3MjEtXFx0ICovXFxua2VybmVsL2JwZi9oYXNodGFiLmM6MTcyMjpcXHRpZiAoYnRmX3JlY29yZF9oYXNfZmllbGQoaHRhYi1cXHUwMDNlbWFwLnJlY29yZCwgQlBGX1RBU0tfV09SSykpXFxua2VybmVsL2JwZi9oYXNodGFiLmMtMTcyMy1cXHRcXHRyY3VfYmFycmllcl90YXNrc190cmFjZSgpO1xcbi0tXFxua2VybmVsL2JwZi9oZWxwZXJzLmM9NTAzMj12b2lkIGJwZl9tYXBfZnJlZV9pbnRlcm5hbF9zdHJ1Y3RzKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKnZhbClcXG4tLVxcbmtlcm5lbC9icGYvaGVscGVycy5jLTUwMzctXFx0XFx0YnBmX29ial9mcmVlX3dvcmtxdWV1ZShtYXAtXFx1MDAzZXJlY29yZCwgdmFsKTtcXG5rZXJuZWwvYnBmL2hlbHBlcnMuYzo1MDM4OlxcdGlmIChidGZfcmVjb3JkX2hhc19maWVsZChtYXAtXFx1MDAzZXJlY29yZCwgQlBGX1RBU0tfV09SSykpXFxua2VybmVsL2JwZi9oZWxwZXJzLmMtNTAzOS1cXHRcXHRicGZfb2JqX2ZyZWVfdGFza193b3JrKG1hcC1cXHUwMDNlcmVjb3JkLCB2YWwpO1xcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmM9NjY1PXZvaWQgYnRmX3JlY29yZF9mcmVlKHN0cnVjdCBidGZfcmVjb3JkICpyZWMpXFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy02OTAtXFx0XFx0Y2FzZSBCUEZfV09SS1FVRVVFOlxcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjY5MTpcXHRcXHRjYXNlIEJQRl9UQVNLX1dPUks6XFxua2VybmVsL2JwZi9zeXNjYWxsLmMtNjkyLVxcdFxcdFxcdC8qIE5vdGhpbmcgdG8gcmVsZWFzZSAqL1xcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmM9NzA4PXN0cnVjdCBidGZfcmVjb3JkICpidGZfcmVjb3JkX2R1cChjb25zdCBzdHJ1Y3QgYnRmX3JlY29yZCAqcmVjKVxcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtNzQ0LVxcdFxcdGNhc2UgQlBGX1dPUktRVUVVRTpcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzo3NDU6XFx0XFx0Y2FzZSBCUEZfVEFTS19XT1JLOlxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTc0Ni1cXHRcXHRcXHQvKiBOb3RoaW5nIHRvIGFjcXVpcmUgKi9cXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jPTgwND12b2lkIGJwZl9vYmpfZnJlZV90YXNrX3dvcmsoY29uc3Qgc3RydWN0IGJ0Zl9yZWNvcmQgKnJlYywgdm9pZCAqb2JqKVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTgwNS17XFxua2VybmVsL2JwZi9zeXNjYWxsLmM6ODA2OlxcdGlmIChXQVJOX09OX09OQ0UoIWJ0Zl9yZWNvcmRfaGFzX2ZpZWxkKHJlYywgQlBGX1RBU0tfV09SSykpKVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTgwNy1cXHRcXHRyZXR1cm47XFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYz04MTY9dm9pZCBicGZfb2JqX2ZyZWVfZmllbGRzKGNvbnN0IHN0cnVjdCBidGZfcmVjb3JkICpyZWMsIHZvaWQgKm9iailcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTgzOS1cXHRcXHRcXHRicmVhaztcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzo4NDA6XFx0XFx0Y2FzZSBCUEZfVEFTS19XT1JLOlxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTg0MS1cXHRcXHRcXHRicGZfdGFza193b3JrX2NhbmNlbF9hbmRfZnJlZShmaWVsZF9wdHIpO1xcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmM9MTI0ND1zdGF0aWMgaW50IG1hcF9jaGVja19idGYoc3RydWN0IGJwZl9tYXAgKm1hcCwgc3RydWN0IGJwZl90b2tlbiAqdG9rZW4sXFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0xMjY4LVxcdFxcdFxcdFxcdCAgICAgICBCUEZfUkJfUk9PVCB8IEJQRl9SRUZDT1VOVCB8IEJQRl9XT1JLUVVFVUUgfCBCUEZfVVBUUiB8XFxua2VybmVsL2JwZi9zeXNjYWxsLmM6MTI2OTpcXHRcXHRcXHRcXHQgICAgICAgQlBGX1RBU0tfV09SSyxcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0xMjcwLVxcdFxcdFxcdFxcdCAgICAgICBtYXAtXFx1MDAzZXZhbHVlX3NpemUpO1xcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtMTMwMS1cXHRcXHRcXHRjYXNlIEJQRl9XT1JLUVVFVUU6XFxua2VybmVsL2JwZi9zeXNjYWxsLmM6MTMwMjpcXHRcXHRcXHRjYXNlIEJQRl9UQVNLX1dPUks6XFxua2VybmVsL2JwZi9zeXNjYWxsLmMtMTMwMy1cXHRcXHRcXHRcXHRpZiAobWFwLVxcdTAwM2VtYXBfdHlwZSAhPSBCUEZfTUFQX1RZUEVfSEFTSCBcXHUwMDI2XFx1MDAyNlxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTE4NzU9c3RhdGljIHZvaWQgbWFya19wdHJfbm90X251bGxfcmVnKHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcpXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTg4Ni1cXHRcXHRcXHRpZiAoYnRmX3JlY29yZF9oYXNfZmllbGQobWFwLVxcdTAwM2Vpbm5lcl9tYXBfbWV0YS1cXHUwMDNlcmVjb3JkLFxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxODg3OlxcdFxcdFxcdFxcdFxcdFxcdCBCUEZfVElNRVIgfCBCUEZfV09SS1FVRVVFIHwgQlBGX1RBU0tfV09SSykpIHtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTg4OC1cXHRcXHRcXHRcXHRyZWctXFx1MDAzZW1hcF91aWQgPSByZWctXFx1MDAzZWlkO1xcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTcwNzg9c3RhdGljIGludCBjaGVja19tYXBfZmllbGRfcG9pbnRlcihzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnLCBhcmdub190IGFyZ25vLFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTcxMDYtXFx0XFx0YnJlYWs7XFxua2VybmVsL2JwZi92ZXJpZmllci5jOjcxMDc6XFx0Y2FzZSBCUEZfVEFTS19XT1JLOlxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy03MTA4LVxcdFxcdGZpZWxkX29mZiA9IG1hcC1cXHUwMDNlcmVjb3JkLVxcdTAwM2V0YXNrX3dvcmtfb2ZmO1xcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTExOTA2PXN0YXRpYyBpbnQgY2hlY2tfa2Z1bmNfYXJncyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2tmdW5jX2NhbGxfYXJnX21ldGEgKm1ldGEsXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTI0NDgtXFx0XFx0XFx0fVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMjQ0OTpcXHRcXHRcXHRyZXQgPSBjaGVja19tYXBfZmllbGRfcG9pbnRlcihlbnYsIHJlZywgYXJnbm8sIEJQRl9UQVNLX1dPUkssIFxcdTAwMjZtZXRhLVxcdTAwM2VtYXApO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMjQ1MC1cXHRcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3Rhc2tfd29ya19zdHJlc3MuYz00Nj1zdGF0aWMgdm9pZCB0YXNrX3dvcmtfcnVuKGJvb2wgZW5hYmxlX2RlbGV0ZSlcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3Rhc2tfd29ya19zdHJlc3MuYy01MC1cXHRpbnQgbnRocmVhZHMgPSAxNjtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy90YXNrX3dvcmtfc3RyZXNzLmM6NTE6XFx0aW50IHRlc3RfdGltZV9zID0gZ2V0X2Vudl9pbnQoXFxcIkJQRl9UQVNLX1dPUktfVEVTVF9USU1FXFxcIiwgMSk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdGFza193b3JrX3N0cmVzcy5jLTUyLVxcdHB0aHJlYWRfdCB0aWRbbnRocmVhZHNdLCB0aWRfZGVsO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNFQxOTozNToxNy4xMjc1MjU5MDVaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NjA3ODU5NDI1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgQlBGIEhhc2h0YWJsZSBQYXRjaCoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcgYGtlcm5lbC9icGYvaGFzaHRhYi5jYCBhbmQgYGtlcm5lbC9icGYvaGVscGVycy5jYC4gSSBuZWVkIHRvIGZvY3VzIG9uIHRoZSBrZXkgY2hhbmdlcywgd2hpY2ggc2VlbSB0byByZXZvbHZlIGFyb3VuZCBkZWZlcnJlZCBmcmVlaW5nIG9mIGhhc2h0YWJsZSBlbGVtZW50cy4gVGhlIG1haW4gcGxheWVycyBoZXJlIGFyZSBgaHRhYl9lbGVtX2RlZmVyX2ZyZWVgLCBgaHRhYl9lbGVtX2ZyZWVfcmN1X2NiYCwgYW5kIHRoZSBmdW5jdGlvbiBgYnBmX3Rhc2tfd29ya19jYW5jZWxfYW5kX2ZyZWVgLiBJIHNob3VsZCBhbHNvIGtlZXAgYW4gZXllIG9uIGhvdyB0aGUgcGF0Y2ggaW50ZXJhY3RzIHdpdGggZXhpc3RpbmcgZnVuY3Rpb25zIGxpa2UgYGh0YWJfZWxlbV9mcmVlYCwgYGZyZWVfaHRhYl9lbGVtYCwgYGh0YWJfbHJ1X3B1c2hfZnJlZWAsIGFuZCBgaHRhYl9tYXBfZnJlZWAgdG8gZ2V0IHRoZSBmdWxsIHBpY3R1cmUuXG5cbldhaXQgYSBzZWNvbmTigKYgYGh0YWJfZWxlbV9kZWZlcl9mcmVlYCBhbmQgYGh0YWJfZWxlbV9mcmVlX3JjdV9jYmAgYXJlIGJvdGggZGVjbGFyZWQgYXMgYHN0YXRpY2AuIFRoYXQgbGltaXRzIHRoZWlyIHNjb3BlIHRvIHRoaXMgZmlsZSwgd2hpY2ggbWVhbnMgdGhlIG1haW4gKmV4cG9zZWQqIGZ1bmN0aW9uIGhlcmUgaXMgYGJwZl90YXNrX3dvcmtfY2FuY2VsX2FuZF9mcmVlYC4gSSdsbCBuZWVkIHRvIGNvbmZpcm0gaWYgaXQncyBleHBvcnRlZCBvciBnbG9iYWwgdG8gZnVsbHkgdW5kZXJzdGFuZCB0aGUgaW1wYWN0LiBMZXQncyBkaWcgaW50byBgYnBmX3Rhc2tfd29ya19jYW5jZWxfYW5kX2ZyZWVgIGRpcmVjdGx5LlxuXG5cbiIsIklucHV0VG9rZW5zIjo3OTcyLCJPdXRwdXRUb2tlbnMiOjI2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjMzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI0VDE5OjM1OjIxLjczNTM4NzQzMVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTkzNDcyNTg1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJwZl90YXNrX3dvcmtfY2FuY2VsX2FuZF9mcmVlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvYnBmLmg9NjQ2PXZvaWQgYnBmX3dxX2NhbmNlbF9hbmRfZnJlZSh2b2lkICp0aW1lcik7XFxuaW5jbHVkZS9saW51eC9icGYuaDo2NDc6dm9pZCBicGZfdGFza193b3JrX2NhbmNlbF9hbmRfZnJlZSh2b2lkICp0aW1lcik7XFxuaW5jbHVkZS9saW51eC9icGYuaC02NDgtdm9pZCBicGZfbGlzdF9oZWFkX2ZyZWUoY29uc3Qgc3RydWN0IGJ0Zl9maWVsZCAqZmllbGQsIHZvaWQgKmxpc3RfaGVhZCxcXG4tLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jPTExMzg9c3RhdGljIHN0cnVjdCBodGFiX2VsZW0gKmFsbG9jX2h0YWJfZWxlbShzdHJ1Y3QgYnBmX2h0YWIgKmh0YWIsIHZvaWQgKmtleSxcXG4tLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTExODQtXFx0ICogc2tpcHMgYnRmX3JlY29yZCBmaWVsZHMsIHNvIGEgc3RhbGUgRVJSX1BUUigtRUJVU1kpIGxlZnQgYnlcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzoxMTg1OlxcdCAqIGJwZl90YXNrX3dvcmtfY2FuY2VsX2FuZF9mcmVlIHdvdWxkIHBlcnNpc3QgYW5kIGJsb2NrIG5ldyBzY2hlZHVsaW5nLlxcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTExODYtXFx0ICovXFxuLS1cXG5rZXJuZWwvYnBmL2hlbHBlcnMuYz00NTU0PXN0YXRpYyBzdHJ1Y3QgYnBmX3Rhc2tfd29ya19jdHggKmJwZl90YXNrX3dvcmtfYWNxdWlyZV9jdHgoc3RydWN0IGJwZl90YXNrX3dvcmsgKnR3LFxcbi0tXFxua2VybmVsL2JwZi9oZWxwZXJzLmMtNDU5MS1cXHRcXHQvKiB0cmFuc2ZlciBtYXAncyByZWYgaW50byBjYW5jZWxfYW5kX2ZyZWUoKSAqL1xcbmtlcm5lbC9icGYvaGVscGVycy5jOjQ1OTI6XFx0XFx0YnBmX3Rhc2tfd29ya19jYW5jZWxfYW5kX2ZyZWUodHcpO1xcbmtlcm5lbC9icGYvaGVscGVycy5jLTQ1OTMtXFx0XFx0cmV0dXJuIEVSUl9QVFIoLUVCVVNZKTtcXG4tLVxcbmtlcm5lbC9icGYvaGVscGVycy5jPTQ3NzY9c3RhdGljIHZvaWQgYnBmX3Rhc2tfd29ya19jYW5jZWxfc2NoZWR1bGVkKHN0cnVjdCBpcnFfd29yayAqaXJxX3dvcmspXFxuLS1cXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy00NzgzLVxcbmtlcm5lbC9icGYvaGVscGVycy5jOjQ3ODQ6dm9pZCBicGZfdGFza193b3JrX2NhbmNlbF9hbmRfZnJlZSh2b2lkICp2YWwpXFxua2VybmVsL2JwZi9oZWxwZXJzLmMtNDc4NS17XFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYz04MDQ9dm9pZCBicGZfb2JqX2ZyZWVfdGFza193b3JrKGNvbnN0IHN0cnVjdCBidGZfcmVjb3JkICpyZWMsIHZvaWQgKm9iailcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTgwNy1cXHRcXHRyZXR1cm47XFxua2VybmVsL2JwZi9zeXNjYWxsLmM6ODA4OlxcdGJwZl90YXNrX3dvcmtfY2FuY2VsX2FuZF9mcmVlKG9iaiArIHJlYy1cXHUwMDNldGFza193b3JrX29mZik7XFxua2VybmVsL2JwZi9zeXNjYWxsLmMtODA5LX1cXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jPTgxNj12b2lkIGJwZl9vYmpfZnJlZV9maWVsZHMoY29uc3Qgc3RydWN0IGJ0Zl9yZWNvcmQgKnJlYywgdm9pZCAqb2JqKVxcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtODQwLVxcdFxcdGNhc2UgQlBGX1RBU0tfV09SSzpcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzo4NDE6XFx0XFx0XFx0YnBmX3Rhc2tfd29ya19jYW5jZWxfYW5kX2ZyZWUoZmllbGRfcHRyKTtcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy04NDItXFx0XFx0XFx0YnJlYWs7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI0VDE5OjM1OjIzLjkyODg2NTkyNloiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ3MTcwMTEyOTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQlBGIENvbmZpZ3VyYXRpb24gRGVlcCBEaXZlKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgaW50byB0aGUgQlBGIGNvbmZpZ3VyYXRpb24sIHNwZWNpZmljYWxseSBhcm91bmQgc29tZSBtZW1vcnkgbWFuYWdlbWVudCBjb25jZXJucy4gTXkgc3RhcnRpbmcgcG9pbnQgaXMgYEJQRl9TWVNDQUxMYCwgdGhhdCBzZWVtcyB0byBiZSB0aGUga2V5IGNvbmZpZ3VyYXRpb24gb3B0aW9uLiBCdXQsIEkgbmVlZCB0byB2ZXJpZnkgdGhhdCB0aGlzIGlzIHRoZSBvbmx5IG9uZSBuZWVkZWQgdG8gZW5hYmxlIGFsbCB0aGUgcmVsZXZhbnQgZmVhdHVyZXMuIEkgc3VzcGVjdCBpdCBpcywgYnV0IGl0J3MgYWx3YXlzIGJlc3QgdG8gYmUgdGhvcm91Z2guXG5cbk15IGZvY3VzIHJpZ2h0IG5vdyBpcyBvbiBzeW1ib2xzIHRoYXQgc2VlbSB0byBiZSByZWxhdGVkIHRvIGhhc2h0YWJsZSBlbGVtZW50IGZyZWVpbmcgYW5kIGNsZWFudXAuIFRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zIGxvb2sgaW1wb3J0YW50OiBgaHRhYl9lbGVtX2RlZmVyX2ZyZWVgLCBgaHRhYl9lbGVtX2ZyZWVfcmN1X2NiYCwgYGJwZl90YXNrX3dvcmtfY2FuY2VsX2FuZF9mcmVlYCwgYGh0YWJfbWFwX2ZyZWVgLCBgZnJlZV9odGFiX2VsZW1gLCBgaHRhYl9lbGVtX2ZyZWVgLCBhbmQgYGh0YWJfbHJ1X3B1c2hfZnJlZWAuIFRoZXNlIGxpa2VseSBob2xkIHRoZSBrZXkgdG8gdW5kZXJzdGFuZGluZyB0aGUgZnVsbCBsaWZlY3ljbGUuXG5cbkEgcXVpY2sgY3Jvc3MtcmVmZXJlbmNlIHNob3dzIHRoYXQgYGh0YWJfZWxlbV9kZWZlcl9mcmVlYCBpcyBhIHN0YXRpYyBmdW5jdGlvbiwgcmVzaWRpbmcgd2l0aGluIGBrZXJuZWwvYnBmL2hhc2h0YWIuY2AsIGFuZCBgYnBmX3Rhc2tfd29ya19jYW5jZWxfYW5kX2ZyZWVgIGlzIGxvY2F0ZWQgaW4gYGtlcm5lbC9icGYvaGVscGVycy5jYC4gVGhpcyBpcyB1c2VmdWwsIHRoaXMgY29uZmlybXMgdGhleSdyZSBpbiB0aGUgcmlnaHQgcGxhY2VzLCBidXQgZG9lc24ndCBpbW1lZGlhdGVseSB0ZWxsIG1lIHRoZSBkZXBlbmRlbmNpZXMuXG5cbk5vdywgbXkgbmV4dCBzdGVwIGlzIHRvIGNvbmZpcm0gd2hldGhlciBvciBub3QgYEJQRl9TWVNDQUxMYCBpcyB0aGUgb25seSBjb25maWcgSSBuZWVkLiBJJ2xsIG5lZWQgdG8gZGlnIGRlZXBlciBpbnRvIHRoZSBidWlsZCBzeXN0ZW0gYW5kIGRlcGVuZGVuY2llcyB0byBiZSBjb21wbGV0ZWx5IGNlcnRhaW4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjkyMjQsIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMDYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjRUMTk6MzU6MjguNjQ1ODgwNjE5WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwMDIzMjgxNTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEJQRl9TWVNDQUxMXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvS2NvbmZpZz0yNT1tZW51IFxcXCJCUEYgc3Vic3lzdGVtXFxcIlxcbmtlcm5lbC9icGYvS2NvbmZpZy0yNi1cXG5rZXJuZWwvYnBmL0tjb25maWc6Mjc6Y29uZmlnIEJQRl9TWVNDQUxMXFxua2VybmVsL2JwZi9LY29uZmlnLTI4LVxcdGJvb2wgXFxcIkVuYWJsZSBicGYoKSBzeXN0ZW0gY2FsbFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjRUMTk6MzU6MzAuNjQ4MjE0NTg5WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzc4NjE4MzgzNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBmcm9tIG15IHBlcnNwZWN0aXZlIGFzIGFuIGV4cGVydCBpbiB0aGUgZmllbGQ6XG5cbioqSW5pdGlhbCBBc3Nlc3NtZW50IG9mIEJQRiBDb25maWd1cmF0aW9uKipcblxuQWxyaWdodCwgc28gdGhlIGNvcmUgY29uZmlndXJhdGlvbiBwb2ludCBmb3IgQlBGLCB0aGUgb25lIHRvIGxvb2sgYXQgZmlyc3QgYW5kIGZvcmVtb3N0LCBpcyBkZWZpbml0ZWx5IGBCUEZfU1lTQ0FMTGAuIFRoYXQncyB0aGUgYmFzZWxpbmUsIHRoZSBjcml0aWNhbCBwaWVjZS4gQnV0LCBob2xkIG9uIGEgbWludXRlLCBsZXQncyBub3QganVtcCB0byBjb25jbHVzaW9ucy4gYGJwZl90YXNrX3dvcmtgIGlzIGEgc3BlY2lmaWMgKmZlYXR1cmUqIHdpdGhpbiB0aGUgYnJvYWRlciBCUEYgZWNvc3lzdGVtLiBNeSBleHBlcmllbmNlIHNjcmVhbXMgdGhhdCBvZnRlbiB0aGVzZSBzcGVjaWFsaXplZCBmdW5jdGlvbmFsaXRpZXMgaGF2ZSBkZXBlbmRlbmNpZXMsIGFuZCBzb21ldGltZXMgbm90IGltbWVkaWF0ZWx5IG9idmlvdXMgb25lcy5cblxuVGhlcmVmb3JlLCBiZWZvcmUgSSBnbyBhbnkgZnVydGhlciwgSSBuZWVkIHRvIHZlcmlmeSwgKmV4cGxpY2l0bHkqLCBpZiB0aGVyZSBhcmUgYW55IG90aGVyIGNvbmZpZ3VyYXRpb24ga25vYnMgcmVsYXRlZCB0byBgYnBmX3Rhc2tfd29ya2AgaXRzZWxmLiBKdXN0IGJlY2F1c2UgaXQncyBwYXJ0IG9mIEJQRiBkb2Vzbid0IGF1dG9tYXRpY2FsbHkgbWVhbiBpdCdzIGVuYWJsZWQgYnkgdGhlIHByaW1hcnkgYEJQRl9TWVNDQUxMYCBzd2l0Y2guIEl0IGNvdWxkIGJlIGNvbmRpdGlvbmFsbHkgY29tcGlsZWQgb3IgZGVwZW5kIG9uIGFub3RoZXIsIHBlcmhhcHMgbW9yZSBncmFudWxhciwgb3B0aW9uLiBJIG5lZWQgdG8gYmUgKnN1cmUqIEknbSBub3QgbWlzc2luZyBzb21ldGhpbmcgZnVuZGFtZW50YWwuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk4NjMsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yNFQxOTozNTozNC40MzQ0MDE0MTVaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5MDUxNzU0NzIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYnBmX3Rhc2tfd29ya1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJEb2N1bWVudGF0aW9uL2JwZi9rZnVuY3MucnN0PTQwMj1FeGFtcGxlIGRlY2xhcmF0aW9uOlxcbi0tXFxuRG9jdW1lbnRhdGlvbi9icGYva2Z1bmNzLnJzdC00MDUtXFxuRG9jdW1lbnRhdGlvbi9icGYva2Z1bmNzLnJzdDo0MDY6XFx0X19icGZfa2Z1bmMgaW50IGJwZl90YXNrX3dvcmtfc2NoZWR1bGVfc2lnbmFsKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywgc3RydWN0IGJwZl90YXNrX3dvcmsgKnR3LFxcbkRvY3VtZW50YXRpb24vYnBmL2tmdW5jcy5yc3Q6NDA3OlxcdFxcdFxcdFxcdFxcdFxcdCAgICAgIHZvaWQgKm1hcF9fbWFwLCBicGZfdGFza193b3JrX2NhbGxiYWNrX3QgY2FsbGJhY2ssXFxuRG9jdW1lbnRhdGlvbi9icGYva2Z1bmNzLnJzdC00MDgtXFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IGJwZl9wcm9nX2F1eCAqYXV4KSB7IC4uLiB9XFxuLS1cXG5Eb2N1bWVudGF0aW9uL2JwZi9rZnVuY3MucnN0PTQxMD1FeGFtcGxlIHVzYWdlIGluIEJQRiBwcm9ncmFtOlxcbi0tXFxuRG9jdW1lbnRhdGlvbi9icGYva2Z1bmNzLnJzdC00MTQtXFx0Lyogbm90ZSB0aGF0IHRoZSBsYXN0IGFyZ3VtZW50IGlzIG9taXR0ZWQgKi9cXG5Eb2N1bWVudGF0aW9uL2JwZi9rZnVuY3MucnN0OjQxNTogICAgICAgIGJwZl90YXNrX3dvcmtfc2NoZWR1bGVfc2lnbmFsKHRhc2ssIFxcdTAwMjZ3b3JrLVxcdTAwM2V0dywgXFx1MDAyNmFycm1hcCwgdGFza193b3JrX2NhbGxiYWNrKTtcXG5Eb2N1bWVudGF0aW9uL2JwZi9rZnVuY3MucnN0LTQxNi1cXG4tLVxcbmluY2x1ZGUvbGludXgvYnBmLmg9MzQ2PXN0YXRpYyBpbmxpbmUgY29uc3QgY2hhciAqYnRmX2ZpZWxkX3R5cGVfbmFtZShlbnVtIGJ0Zl9maWVsZF90eXBlIHR5cGUpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2JwZi5oLTM3NC1cXHRjYXNlIEJQRl9UQVNLX1dPUks6XFxuaW5jbHVkZS9saW51eC9icGYuaDozNzU6XFx0XFx0cmV0dXJuIFxcXCJicGZfdGFza193b3JrXFxcIjtcXG5pbmNsdWRlL2xpbnV4L2JwZi5oLTM3Ni1cXHRkZWZhdWx0Olxcbi0tXFxuaW5jbHVkZS9saW51eC9icGYuaD0zODg9c3RhdGljIGlubGluZSB1MzIgYnRmX2ZpZWxkX3R5cGVfc2l6ZShlbnVtIGJ0Zl9maWVsZF90eXBlIHR5cGUpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2JwZi5oLTQxNC1cXHRjYXNlIEJQRl9UQVNLX1dPUks6XFxuaW5jbHVkZS9saW51eC9icGYuaDo0MTU6XFx0XFx0cmV0dXJuIHNpemVvZihzdHJ1Y3QgYnBmX3Rhc2tfd29yayk7XFxuaW5jbHVkZS9saW51eC9icGYuaC00MTYtXFx0ZGVmYXVsdDpcXG4tLVxcbmluY2x1ZGUvbGludXgvYnBmLmg9NDIyPXN0YXRpYyBpbmxpbmUgdTMyIGJ0Zl9maWVsZF90eXBlX2FsaWduKGVudW0gYnRmX2ZpZWxkX3R5cGUgdHlwZSlcXG4tLVxcbmluY2x1ZGUvbGludXgvYnBmLmgtNDQ4LVxcdGNhc2UgQlBGX1RBU0tfV09SSzpcXG5pbmNsdWRlL2xpbnV4L2JwZi5oOjQ0OTpcXHRcXHRyZXR1cm4gX19hbGlnbm9mX18oc3RydWN0IGJwZl90YXNrX3dvcmspO1xcbmluY2x1ZGUvbGludXgvYnBmLmgtNDUwLVxcdGRlZmF1bHQ6XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2JwZi5oPTY0Nj12b2lkIGJwZl93cV9jYW5jZWxfYW5kX2ZyZWUodm9pZCAqdGltZXIpO1xcbmluY2x1ZGUvbGludXgvYnBmLmg6NjQ3OnZvaWQgYnBmX3Rhc2tfd29ya19jYW5jZWxfYW5kX2ZyZWUodm9pZCAqdGltZXIpO1xcbmluY2x1ZGUvbGludXgvYnBmLmgtNjQ4LXZvaWQgYnBmX2xpc3RfaGVhZF9mcmVlKGNvbnN0IHN0cnVjdCBidGZfZmllbGQgKmZpZWxkLCB2b2lkICpsaXN0X2hlYWQsXFxuLS1cXG5pbmNsdWRlL3VhcGkvbGludXgvYnBmLmg9NzUwMj1zdHJ1Y3QgYnBmX3RpbWVyIHtcXG4tLVxcbmluY2x1ZGUvdWFwaS9saW51eC9icGYuaC03NTA1LVxcbmluY2x1ZGUvdWFwaS9saW51eC9icGYuaDo3NTA2OnN0cnVjdCBicGZfdGFza193b3JrIHtcXG5pbmNsdWRlL3VhcGkvbGludXgvYnBmLmgtNzUwNy1cXHRfX3U2NCBfX29wYXF1ZTtcXG4tLVxcbmtlcm5lbC9icGYvYnRmLmM9MzYwNz1zdGF0aWMgaW50IGJ0Zl9nZXRfZmllbGRfdHlwZShjb25zdCBzdHJ1Y3QgYnRmICpidGYsIGNvbnN0IHN0cnVjdCBidGZfdHlwZSAqdmFyX3R5cGUsXFxuLS1cXG5rZXJuZWwvYnBmL2J0Zi5jLTM2MTgtXFx0XFx0eyBCUEZfV09SS1FVRVVFLCBcXFwiYnBmX3dxXFxcIiwgdHJ1ZSB9LFxcbmtlcm5lbC9icGYvYnRmLmM6MzYxOTpcXHRcXHR7IEJQRl9UQVNLX1dPUkssIFxcXCJicGZfdGFza193b3JrXFxcIiwgdHJ1ZSB9LFxcbmtlcm5lbC9icGYvYnRmLmMtMzYyMC1cXHRcXHR7IEJQRl9MSVNUX0hFQUQsIFxcXCJicGZfbGlzdF9oZWFkXFxcIiwgZmFsc2UgfSxcXG4tLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jPTg5Nj1zdGF0aWMgaW50IGh0YWJfbWFwX2dldF9uZXh0X2tleShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXksIHZvaWQgKm5leHRfa2V5KVxcbi0tXFxua2VybmVsL2JwZi9oYXNodGFiLmMtOTUzLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jOjk1NDovKiBEZWZlcnJlZCBodGFiX2VsZW0gZnJlZSBmb3IgYnBmX3Rhc2tfd29yayBtYXBzLiAgY2FuY2VsX2FuZF9mcmVlKClcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy05NTUtICogcmV0dXJucyB3aGlsZSB0aGUgdGFza193b3JrIGNhbGxiYWNrIG1heSBzdGlsbCBiZSBhY2Nlc3NpbmcgbWFwX3ZhbDtcXG4tLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jPTExMzg9c3RhdGljIHN0cnVjdCBodGFiX2VsZW0gKmFsbG9jX2h0YWJfZWxlbShzdHJ1Y3QgYnBmX2h0YWIgKmh0YWIsIHZvaWQgKmtleSxcXG4tLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTExODQtXFx0ICogc2tpcHMgYnRmX3JlY29yZCBmaWVsZHMsIHNvIGEgc3RhbGUgRVJSX1BUUigtRUJVU1kpIGxlZnQgYnlcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzoxMTg1OlxcdCAqIGJwZl90YXNrX3dvcmtfY2FuY2VsX2FuZF9mcmVlIHdvdWxkIHBlcnNpc3QgYW5kIGJsb2NrIG5ldyBzY2hlZHVsaW5nLlxcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTExODYtXFx0ICovXFxuLS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYz0xNjk4PXN0YXRpYyB2b2lkIGh0YWJfbWFwX2ZyZWUoc3RydWN0IGJwZl9tYXAgKm1hcClcXG4tLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTE3MTYtXFxua2VybmVsL2JwZi9oYXNodGFiLmM6MTcxNzpcXHQvKiBGb3IgYnBmX3Rhc2tfd29yayBtYXBzLCBlbGVtZW50IGZyZWVzIGRlZmVyIHJlY3ljbGluZyB0aHJvdWdoXFxua2VybmVsL2JwZi9oYXNodGFiLmMtMTcxOC1cXHQgKiBjYWxsX3JjdV90YXNrc190cmFjZSgpIHNvIHJ1bm5pbmcgY2FsbGJhY2tzIGZpbmlzaCBiZWZvcmUgcmV1c2UuXFxuLS1cXG5rZXJuZWwvYnBmL2hlbHBlcnMuYz00MzE2PV9fYnBmX2tmdW5jIGludCBicGZfdmVyaWZ5X3BrY3M3X3NpZ25hdHVyZShjb25zdCBzdHJ1Y3QgYnBmX2R5bnB0ciAqZGF0YV9wLFxcbi0tXFxua2VybmVsL2JwZi9oZWxwZXJzLmMtNDM2MC1cXG5rZXJuZWwvYnBmL2hlbHBlcnMuYzo0MzYxOnR5cGVkZWYgaW50ICgqYnBmX3Rhc2tfd29ya19jYWxsYmFja190KShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXksIHZvaWQgKnZhbHVlKTtcXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy00MzYyLVxcbmtlcm5lbC9icGYvaGVscGVycy5jOjQzNjM6ZW51bSBicGZfdGFza193b3JrX3N0YXRlIHtcXG5rZXJuZWwvYnBmL2hlbHBlcnMuYzo0MzY0OlxcdC8qIGJwZl90YXNrX3dvcmsgaXMgcmVhZHkgdG8gYmUgdXNlZCAqL1xcbmtlcm5lbC9icGYvaGVscGVycy5jLTQzNjUtXFx0QlBGX1RXX1NUQU5EQlkgPSAwLFxcbi0tXFxua2VybmVsL2JwZi9oZWxwZXJzLmMtNDM3Ny1cXG5rZXJuZWwvYnBmL2hlbHBlcnMuYzo0Mzc4OnN0cnVjdCBicGZfdGFza193b3JrX2N0eCB7XFxua2VybmVsL2JwZi9oZWxwZXJzLmM6NDM3OTpcXHRlbnVtIGJwZl90YXNrX3dvcmtfc3RhdGUgc3RhdGU7XFxua2VybmVsL2JwZi9oZWxwZXJzLmMtNDM4MC1cXHRyZWZjb3VudF90IHJlZmNudDtcXG4tLVxcbmtlcm5lbC9icGYvaGVscGVycy5jLTQzOTAtXFx0ZW51bSB0YXNrX3dvcmtfbm90aWZ5X21vZGUgbW9kZTtcXG5rZXJuZWwvYnBmL2hlbHBlcnMuYzo0MzkxOlxcdGJwZl90YXNrX3dvcmtfY2FsbGJhY2tfdCBjYWxsYmFja19mbjtcXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy00MzkyLVxcdHN0cnVjdCByY3VfaGVhZCByY3U7XFxuLS1cXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy00Mzk0LVxcbmtlcm5lbC9icGYvaGVscGVycy5jOjQzOTU6LyogQWN0dWFsIHR5cGUgZm9yIHN0cnVjdCBicGZfdGFza193b3JrICovXFxua2VybmVsL2JwZi9oZWxwZXJzLmM6NDM5NjpzdHJ1Y3QgYnBmX3Rhc2tfd29ya19rZXJuIHtcXG5rZXJuZWwvYnBmL2hlbHBlcnMuYzo0Mzk3OlxcdHN0cnVjdCBicGZfdGFza193b3JrX2N0eCAqY3R4O1xcbmtlcm5lbC9icGYvaGVscGVycy5jLTQzOTgtfTtcXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy00Mzk5LVxcbmtlcm5lbC9icGYvaGVscGVycy5jOjQ0MDA6c3RhdGljIHZvaWQgYnBmX3Rhc2tfd29ya19jdHhfcmVzZXQoc3RydWN0IGJwZl90YXNrX3dvcmtfY3R4ICpjdHgpXFxua2VybmVsL2JwZi9oZWxwZXJzLmMtNDQwMS17XFxuLS1cXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy00NDExLVxcbmtlcm5lbC9icGYvaGVscGVycy5jOjQ0MTI6c3RhdGljIGJvb2wgYnBmX3Rhc2tfd29ya19jdHhfdHJ5Z2V0KHN0cnVjdCBicGZfdGFza193b3JrX2N0eCAqY3R4KVxcbmtlcm5lbC9icGYvaGVscGVycy5jLTQ0MTMte1xcbi0tXFxua2VybmVsL2JwZi9oZWxwZXJzLmMtNDQxNi1cXG5rZXJuZWwvYnBmL2hlbHBlcnMuYzo0NDE3OnN0YXRpYyB2b2lkIGJwZl90YXNrX3dvcmtfZGVzdHJveShzdHJ1Y3QgaXJxX3dvcmsgKmlycV93b3JrKVxcbmtlcm5lbC9icGYvaGVscGVycy5jLTQ0MTgte1xcbmtlcm5lbC9icGYvaGVscGVycy5jOjQ0MTk6XFx0c3RydWN0IGJwZl90YXNrX3dvcmtfY3R4ICpjdHggPSBjb250YWluZXJfb2YoaXJxX3dvcmssIHN0cnVjdCBicGZfdGFza193b3JrX2N0eCwgaXJxX3dvcmspO1xcbmtlcm5lbC9icGYvaGVscGVycy5jLTQ0MjAtXFxua2VybmVsL2JwZi9oZWxwZXJzLmM6NDQyMTpcXHRicGZfdGFza193b3JrX2N0eF9yZXNldChjdHgpO1xcbmtlcm5lbC9icGYvaGVscGVycy5jLTQ0MjItXFx0a2ZyZWVfcmN1KGN0eCwgcmN1KTtcXG4tLVxcbmtlcm5lbC9icGYvaGVscGVycy5jLTQ0MjQtXFxua2VybmVsL2JwZi9oZWxwZXJzLmM6NDQyNTpzdGF0aWMgdm9pZCBicGZfdGFza193b3JrX2N0eF9wdXQoc3RydWN0IGJwZl90YXNrX3dvcmtfY3R4ICpjdHgpXFxua2VybmVsL2JwZi9oZWxwZXJzLmMtNDQyNi17XFxuLS1cXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy00NDMwLVxcdGlmIChpcnFzX2Rpc2FibGVkKCkpIHtcXG5rZXJuZWwvYnBmL2hlbHBlcnMuYzo0NDMxOlxcdFxcdGN0eC1cXHUwMDNlaXJxX3dvcmsgPSBJUlFfV09SS19JTklUKGJwZl90YXNrX3dvcmtfZGVzdHJveSk7XFxua2VybmVsL2JwZi9oZWxwZXJzLmMtNDQzMi1cXHRcXHRpcnFfd29ya19xdWV1ZShcXHUwMDI2Y3R4LVxcdTAwM2VpcnFfd29yayk7XFxua2VybmVsL2JwZi9oZWxwZXJzLmMtNDQzMy1cXHR9IGVsc2Uge1xcbmtlcm5lbC9icGYvaGVscGVycy5jOjQ0MzQ6XFx0XFx0YnBmX3Rhc2tfd29ya19kZXN0cm95KFxcdTAwMjZjdHgtXFx1MDAzZWlycV93b3JrKTtcXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy00NDM1LVxcdH1cXG4tLVxcbmtlcm5lbC9icGYvaGVscGVycy5jLTQ0MzctXFxua2VybmVsL2JwZi9oZWxwZXJzLmM6NDQzODpzdGF0aWMgdm9pZCBicGZfdGFza193b3JrX2NhbmNlbChzdHJ1Y3QgYnBmX3Rhc2tfd29ya19jdHggKmN0eClcXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy00NDM5LXtcXG4tLVxcbmtlcm5lbC9icGYvaGVscGVycy5jLTQ0NDYtXFx0aWYgKHRhc2tfd29ya19jYW5jZWwoY3R4LVxcdTAwM2V0YXNrLCBcXHUwMDI2Y3R4LVxcdTAwM2V3b3JrKSlcXG5rZXJuZWwvYnBmL2hlbHBlcnMuYzo0NDQ3OlxcdFxcdGJwZl90YXNrX3dvcmtfY3R4X3B1dChjdHgpO1xcbmtlcm5lbC9icGYvaGVscGVycy5jLTQ0NDgtfVxcbmtlcm5lbC9icGYvaGVscGVycy5jLTQ0NDktXFxua2VybmVsL2JwZi9oZWxwZXJzLmM6NDQ1MDpzdGF0aWMgdm9pZCBicGZfdGFza193b3JrX2NhbGxiYWNrKHN0cnVjdCBjYWxsYmFja19oZWFkICpjYilcXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy00NDUxLXtcXG5rZXJuZWwvYnBmL2hlbHBlcnMuYzo0NDUyOlxcdHN0cnVjdCBicGZfdGFza193b3JrX2N0eCAqY3R4ID0gY29udGFpbmVyX29mKGNiLCBzdHJ1Y3QgYnBmX3Rhc2tfd29ya19jdHgsIHdvcmspO1xcbmtlcm5lbC9icGYvaGVscGVycy5jOjQ0NTM6XFx0ZW51bSBicGZfdGFza193b3JrX3N0YXRlIHN0YXRlO1xcbmtlcm5lbC9icGYvaGVscGVycy5jLTQ0NTQtXFx0dTMyIGlkeDtcXG4tLVxcbmtlcm5lbC9icGYvaGVscGVycy5jLTQ0NjItXFx0LypcXG5rZXJuZWwvYnBmL2hlbHBlcnMuYzo0NDYzOlxcdCAqIFRoaXMgY2FsbGJhY2sgbWF5IHN0YXJ0IHJ1bm5pbmcgYmVmb3JlIGJwZl90YXNrX3dvcmtfaXJxKCkgc3dpdGNoZWQgdG9cXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy00NDY0LVxcdCAqIFNDSEVEVUxFRCBzdGF0ZSwgc28gaGFuZGxlIGJvdGggdHJhbnNpdGlvbiB2YXJpYW50cyBTQ0hFRFVMSU5HfFNDSEVEVUxFRCAtXFx1MDAzZSBSVU5OSU5HLlxcbi0tXFxua2VybmVsL2JwZi9oZWxwZXJzLmMtNDQ2OS1cXHRpZiAoc3RhdGUgPT0gQlBGX1RXX0ZSRUVEKSB7XFxua2VybmVsL2JwZi9oZWxwZXJzLmM6NDQ3MDpcXHRcXHRicGZfdGFza193b3JrX2N0eF9wdXQoY3R4KTtcXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy00NDcxLVxcdFxcdHJldHVybjtcXG4tLVxcbmtlcm5lbC9icGYvaGVscGVycy5jLTQ0NzktXFxua2VybmVsL2JwZi9oZWxwZXJzLmM6NDQ4MDpcXHRicGZfdGFza193b3JrX2N0eF9yZXNldChjdHgpO1xcbmtlcm5lbC9icGYvaGVscGVycy5jLTQ0ODEtXFx0KHZvaWQpY21weGNoZyhcXHUwMDI2Y3R4LVxcdTAwM2VzdGF0ZSwgQlBGX1RXX1JVTk5JTkcsIEJQRl9UV19TVEFOREJZKTtcXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy00NDgyLVxcbmtlcm5lbC9icGYvaGVscGVycy5jOjQ0ODM6XFx0YnBmX3Rhc2tfd29ya19jdHhfcHV0KGN0eCk7XFxua2VybmVsL2JwZi9oZWxwZXJzLmMtNDQ4NC19XFxua2VybmVsL2JwZi9oZWxwZXJzLmMtNDQ4NS1cXG5rZXJuZWwvYnBmL2hlbHBlcnMuYzo0NDg2OnN0YXRpYyB2b2lkIGJwZl90YXNrX3dvcmtfaXJxKHN0cnVjdCBpcnFfd29yayAqaXJxX3dvcmspXFxua2VybmVsL2JwZi9oZWxwZXJzLmMtNDQ4Ny17XFxua2VybmVsL2JwZi9oZWxwZXJzLmM6NDQ4ODpcXHRzdHJ1Y3QgYnBmX3Rhc2tfd29ya19jdHggKmN0eCA9IGNvbnRhaW5lcl9vZihpcnFfd29yaywgc3RydWN0IGJwZl90YXNrX3dvcmtfY3R4LCBpcnFfd29yayk7XFxua2VybmVsL2JwZi9oZWxwZXJzLmM6NDQ4OTpcXHRlbnVtIGJwZl90YXNrX3dvcmtfc3RhdGUgc3RhdGU7XFxua2VybmVsL2JwZi9oZWxwZXJzLmMtNDQ5MC1cXHRpbnQgZXJyO1xcbi0tXFxua2VybmVsL2JwZi9oZWxwZXJzLmMtNDQ5NC1cXHRpZiAoY21weGNoZyhcXHUwMDI2Y3R4LVxcdTAwM2VzdGF0ZSwgQlBGX1RXX1BFTkRJTkcsIEJQRl9UV19TQ0hFRFVMSU5HKSAhPSBCUEZfVFdfUEVORElORykge1xcbmtlcm5lbC9icGYvaGVscGVycy5jOjQ0OTU6XFx0XFx0YnBmX3Rhc2tfd29ya19jdHhfcHV0KGN0eCk7XFxua2VybmVsL2JwZi9oZWxwZXJzLmMtNDQ5Ni1cXHRcXHRyZXR1cm47XFxuLS1cXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy00NTAwLVxcdGlmIChlcnIpIHtcXG5rZXJuZWwvYnBmL2hlbHBlcnMuYzo0NTAxOlxcdFxcdGJwZl90YXNrX3dvcmtfY3R4X3Jlc2V0KGN0eCk7XFxua2VybmVsL2JwZi9oZWxwZXJzLmMtNDUwMi1cXHRcXHQvKlxcbi0tXFxua2VybmVsL2JwZi9oZWxwZXJzLmMtNDUwNi1cXHRcXHQodm9pZCljbXB4Y2hnKFxcdTAwMjZjdHgtXFx1MDAzZXN0YXRlLCBCUEZfVFdfU0NIRURVTElORywgQlBGX1RXX1NUQU5EQlkpO1xcbmtlcm5lbC9icGYvaGVscGVycy5jOjQ1MDc6XFx0XFx0YnBmX3Rhc2tfd29ya19jdHhfcHV0KGN0eCk7XFxua2VybmVsL2JwZi9oZWxwZXJzLmMtNDUwOC1cXHRcXHRyZXR1cm47XFxuLS1cXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy00NTE5LVxcdGlmIChzdGF0ZSA9PSBCUEZfVFdfRlJFRUQpXFxua2VybmVsL2JwZi9oZWxwZXJzLmM6NDUyMDpcXHRcXHRicGZfdGFza193b3JrX2NhbmNlbChjdHgpOyAvKiBjbGVhbiB1cCBpZiB3ZSBzd2l0Y2hlZCBpbnRvIEZSRUVEIHN0YXRlICovXFxua2VybmVsL2JwZi9oZWxwZXJzLmMtNDUyMS19XFxua2VybmVsL2JwZi9oZWxwZXJzLmMtNDUyMi1cXG5rZXJuZWwvYnBmL2hlbHBlcnMuYzo0NTIzOnN0YXRpYyBzdHJ1Y3QgYnBmX3Rhc2tfd29ya19jdHggKmJwZl90YXNrX3dvcmtfZmV0Y2hfY3R4KHN0cnVjdCBicGZfdGFza193b3JrICp0dyxcXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy00NTI0LVxcdFxcdFxcdFxcdFxcdFxcdFxcdCBzdHJ1Y3QgYnBmX21hcCAqbWFwKVxcbmtlcm5lbC9icGYvaGVscGVycy5jLTQ1MjUte1xcbmtlcm5lbC9icGYvaGVscGVycy5jOjQ1MjY6XFx0c3RydWN0IGJwZl90YXNrX3dvcmtfa2VybiAqdHdrID0gKHZvaWQgKil0dztcXG5rZXJuZWwvYnBmL2hlbHBlcnMuYzo0NTI3OlxcdHN0cnVjdCBicGZfdGFza193b3JrX2N0eCAqY3R4LCAqb2xkX2N0eDtcXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy00NTI4LVxcbi0tXFxua2VybmVsL2JwZi9oZWxwZXJzLmMtNDU1My1cXG5rZXJuZWwvYnBmL2hlbHBlcnMuYzo0NTU0OnN0YXRpYyBzdHJ1Y3QgYnBmX3Rhc2tfd29ya19jdHggKmJwZl90YXNrX3dvcmtfYWNxdWlyZV9jdHgoc3RydWN0IGJwZl90YXNrX3dvcmsgKnR3LFxcbmtlcm5lbC9icGYvaGVscGVycy5jLTQ1NTUtXFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgc3RydWN0IGJwZl9tYXAgKm1hcClcXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy00NTU2LXtcXG5rZXJuZWwvYnBmL2hlbHBlcnMuYzo0NTU3OlxcdHN0cnVjdCBicGZfdGFza193b3JrX2N0eCAqY3R4O1xcbmtlcm5lbC9icGYvaGVscGVycy5jLTQ1NTgtXFxuLS1cXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy00NTY3LVxcdHNjb3BlZF9ndWFyZChyY3UpIHtcXG5rZXJuZWwvYnBmL2hlbHBlcnMuYzo0NTY4OlxcdFxcdGN0eCA9IGJwZl90YXNrX3dvcmtfZmV0Y2hfY3R4KHR3LCBtYXApO1xcbmtlcm5lbC9icGYvaGVscGVycy5jLTQ1NjktXFx0XFx0aWYgKElTX0VSUihjdHgpKVxcbi0tXFxua2VybmVsL2JwZi9oZWxwZXJzLmMtNDU3Mi1cXHRcXHQvKiB0cnkgdG8gZ2V0IHJlZiBmb3IgdGFza193b3JrIGNhbGxiYWNrIHRvIGhvbGQgKi9cXG5rZXJuZWwvYnBmL2hlbHBlcnMuYzo0NTczOlxcdFxcdGlmICghYnBmX3Rhc2tfd29ya19jdHhfdHJ5Z2V0KGN0eCkpXFxua2VybmVsL2JwZi9oZWxwZXJzLmMtNDU3NC1cXHRcXHRcXHRyZXR1cm4gRVJSX1BUUigtRUJVU1kpO1xcbi0tXFxua2VybmVsL2JwZi9oZWxwZXJzLmMtNDU3OC1cXHRcXHQvKiBsb3N0IGFjcXVpcmluZyByYWNlIG9yIG1hcF9yZWxlYXNlX3VyZWYoKSBzdG9sZSBpdCBmcm9tIHVzLCBwdXQgcmVmIGFuZCBiYWlsICovXFxua2VybmVsL2JwZi9oZWxwZXJzLmM6NDU3OTpcXHRcXHRicGZfdGFza193b3JrX2N0eF9wdXQoY3R4KTtcXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy00NTgwLVxcdFxcdHJldHVybiBFUlJfUFRSKC1FQlVTWSk7XFxuLS1cXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy00NTg5LVxcdFxcdC8qIGRyb3AgcmVmIHdlIGp1c3QgZ290IGZvciB0YXNrX3dvcmsgY2FsbGJhY2sgaXRzZWxmICovXFxua2VybmVsL2JwZi9oZWxwZXJzLmM6NDU5MDpcXHRcXHRicGZfdGFza193b3JrX2N0eF9wdXQoY3R4KTtcXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy00NTkxLVxcdFxcdC8qIHRyYW5zZmVyIG1hcCdzIHJlZiBpbnRvIGNhbmNlbF9hbmRfZnJlZSgpICovXFxua2VybmVsL2JwZi9oZWxwZXJzLmM6NDU5MjpcXHRcXHRicGZfdGFza193b3JrX2NhbmNlbF9hbmRfZnJlZSh0dyk7XFxua2VybmVsL2JwZi9oZWxwZXJzLmMtNDU5My1cXHRcXHRyZXR1cm4gRVJSX1BUUigtRUJVU1kpO1xcbi0tXFxua2VybmVsL2JwZi9oZWxwZXJzLmMtNDU5OC1cXG5rZXJuZWwvYnBmL2hlbHBlcnMuYzo0NTk5OnN0YXRpYyBpbnQgYnBmX3Rhc2tfd29ya19zY2hlZHVsZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssIHN0cnVjdCBicGZfdGFza193b3JrICp0dyxcXG5rZXJuZWwvYnBmL2hlbHBlcnMuYzo0NjAwOlxcdFxcdFxcdFxcdCAgc3RydWN0IGJwZl9tYXAgKm1hcCwgYnBmX3Rhc2tfd29ya19jYWxsYmFja190IGNhbGxiYWNrX2ZuLFxcbmtlcm5lbC9icGYvaGVscGVycy5jLTQ2MDEtXFx0XFx0XFx0XFx0ICBzdHJ1Y3QgYnBmX3Byb2dfYXV4ICphdXgsIGVudW0gdGFza193b3JrX25vdGlmeV9tb2RlIG1vZGUpXFxuLS1cXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy00NjAzLVxcdHN0cnVjdCBicGZfcHJvZyAqcHJvZztcXG5rZXJuZWwvYnBmL2hlbHBlcnMuYzo0NjA0OlxcdHN0cnVjdCBicGZfdGFza193b3JrX2N0eCAqY3R4O1xcbmtlcm5lbC9icGYvaGVscGVycy5jLTQ2MDUtXFx0aW50IGVycjtcXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy00NjA2LVxcbmtlcm5lbC9icGYvaGVscGVycy5jOjQ2MDc6XFx0QlRGX1RZUEVfRU1JVChzdHJ1Y3QgYnBmX3Rhc2tfd29yayk7XFxua2VybmVsL2JwZi9oZWxwZXJzLmMtNDYwOC1cXG4tLVxcbmtlcm5lbC9icGYvaGVscGVycy5jLTQ2MTctXFxua2VybmVsL2JwZi9oZWxwZXJzLmM6NDYxODpcXHRjdHggPSBicGZfdGFza193b3JrX2FjcXVpcmVfY3R4KHR3LCBtYXApO1xcbmtlcm5lbC9icGYvaGVscGVycy5jLTQ2MTktXFx0aWYgKElTX0VSUihjdHgpKSB7XFxuLS1cXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy00NjI5LVxcdGN0eC1cXHUwMDNlbWFwX3ZhbCA9ICh2b2lkICopdHcgLSBtYXAtXFx1MDAzZXJlY29yZC1cXHUwMDNldGFza193b3JrX29mZjtcXG5rZXJuZWwvYnBmL2hlbHBlcnMuYzo0NjMwOlxcdGluaXRfdGFza193b3JrKFxcdTAwMjZjdHgtXFx1MDAzZXdvcmssIGJwZl90YXNrX3dvcmtfY2FsbGJhY2spO1xcbmtlcm5lbC9icGYvaGVscGVycy5jOjQ2MzE6XFx0aW5pdF9pcnFfd29yayhcXHUwMDI2Y3R4LVxcdTAwM2VpcnFfd29yaywgYnBmX3Rhc2tfd29ya19pcnEpO1xcbmtlcm5lbC9icGYvaGVscGVycy5jLTQ2MzItXFxuLS1cXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy00NjQzLS8qKlxcbmtlcm5lbC9icGYvaGVscGVycy5jOjQ2NDQ6ICogYnBmX3Rhc2tfd29ya19zY2hlZHVsZV9zaWduYWwgLSBTY2hlZHVsZSBCUEYgY2FsbGJhY2sgdXNpbmcgdGFza193b3JrX2FkZCB3aXRoIFRXQV9TSUdOQUxcXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy00NjQ1LSAqIG1vZGVcXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy00NjQ2LSAqIEB0YXNrOiBUYXNrIHN0cnVjdCBmb3Igd2hpY2ggY2FsbGJhY2sgc2hvdWxkIGJlIHNjaGVkdWxlZFxcbmtlcm5lbC9icGYvaGVscGVycy5jOjQ2NDc6ICogQHR3OiBQb2ludGVyIHRvIHN0cnVjdCBicGZfdGFza193b3JrIGluIEJQRiBtYXAgdmFsdWUgZm9yIGludGVybmFsIGJvb2trZWVwaW5nXFxua2VybmVsL2JwZi9oZWxwZXJzLmM6NDY0ODogKiBAbWFwX19tYXA6IGJwZl9tYXAgdGhhdCBlbWJlZHMgc3RydWN0IGJwZl90YXNrX3dvcmsgaW4gdGhlIHZhbHVlc1xcbmtlcm5lbC9icGYvaGVscGVycy5jLTQ2NDktICogQGNhbGxiYWNrOiBwb2ludGVyIHRvIEJQRiBzdWJwcm9ncmFtIHRvIGNhbGxcXG4tLVxcbmtlcm5lbC9icGYvaGVscGVycy5jLTQ2NTMtICovXFxua2VybmVsL2JwZi9oZWxwZXJzLmM6NDY1NDpfX2JwZl9rZnVuYyBpbnQgYnBmX3Rhc2tfd29ya19zY2hlZHVsZV9zaWduYWwoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLCBzdHJ1Y3QgYnBmX3Rhc2tfd29yayAqdHcsXFxua2VybmVsL2JwZi9oZWxwZXJzLmM6NDY1NTpcXHRcXHRcXHRcXHRcXHQgICAgICB2b2lkICptYXBfX21hcCwgYnBmX3Rhc2tfd29ya19jYWxsYmFja190IGNhbGxiYWNrLFxcbmtlcm5lbC9icGYvaGVscGVycy5jLTQ2NTYtXFx0XFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IGJwZl9wcm9nX2F1eCAqYXV4KVxcbmtlcm5lbC9icGYvaGVscGVycy5jLTQ2NTcte1xcbmtlcm5lbC9icGYvaGVscGVycy5jOjQ2NTg6XFx0cmV0dXJuIGJwZl90YXNrX3dvcmtfc2NoZWR1bGUodGFzaywgdHcsIG1hcF9fbWFwLCBjYWxsYmFjaywgYXV4LCBUV0FfU0lHTkFMKTtcXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy00NjU5LX1cXG4tLVxcbmtlcm5lbC9icGYvaGVscGVycy5jLTQ2NjEtLyoqXFxua2VybmVsL2JwZi9oZWxwZXJzLmM6NDY2MjogKiBicGZfdGFza193b3JrX3NjaGVkdWxlX3Jlc3VtZSAtIFNjaGVkdWxlIEJQRiBjYWxsYmFjayB1c2luZyB0YXNrX3dvcmtfYWRkIHdpdGggVFdBX1JFU1VNRVxcbmtlcm5lbC9icGYvaGVscGVycy5jLTQ2NjMtICogbW9kZVxcbmtlcm5lbC9icGYvaGVscGVycy5jLTQ2NjQtICogQHRhc2s6IFRhc2sgc3RydWN0IGZvciB3aGljaCBjYWxsYmFjayBzaG91bGQgYmUgc2NoZWR1bGVkXFxua2VybmVsL2JwZi9oZWxwZXJzLmM6NDY2NTogKiBAdHc6IFBvaW50ZXIgdG8gc3RydWN0IGJwZl90YXNrX3dvcmsgaW4gQlBGIG1hcCB2YWx1ZSBmb3IgaW50ZXJuYWwgYm9va2tlZXBpbmdcXG5rZXJuZWwvYnBmL2hlbHBlcnMuYzo0NjY2OiAqIEBtYXBfX21hcDogYnBmX21hcCB0aGF0IGVtYmVkcyBzdHJ1Y3QgYnBmX3Rhc2tfd29yayBpbiB0aGUgdmFsdWVzXFxua2VybmVsL2JwZi9oZWxwZXJzLmMtNDY2Ny0gKiBAY2FsbGJhY2s6IHBvaW50ZXIgdG8gQlBGIHN1YnByb2dyYW0gdG8gY2FsbFxcbi0tXFxua2VybmVsL2JwZi9oZWxwZXJzLmMtNDY3MS0gKi9cXG5rZXJuZWwvYnBmL2hlbHBlcnMuYzo0NjcyOl9fYnBmX2tmdW5jIGludCBicGZfdGFza193b3JrX3NjaGVkdWxlX3Jlc3VtZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssIHN0cnVjdCBicGZfdGFza193b3JrICp0dyxcXG5rZXJuZWwvYnBmL2hlbHBlcnMuYzo0NjczOlxcdFxcdFxcdFxcdFxcdCAgICAgIHZvaWQgKm1hcF9fbWFwLCBicGZfdGFza193b3JrX2NhbGxiYWNrX3QgY2FsbGJhY2ssXFxua2VybmVsL2JwZi9oZWxwZXJzLmMtNDY3NC1cXHRcXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3QgYnBmX3Byb2dfYXV4ICphdXgpXFxua2VybmVsL2JwZi9oZWxwZXJzLmMtNDY3NS17XFxua2VybmVsL2JwZi9oZWxwZXJzLmM6NDY3NjpcXHRyZXR1cm4gYnBmX3Rhc2tfd29ya19zY2hlZHVsZSh0YXNrLCB0dywgbWFwX19tYXAsIGNhbGxiYWNrLCBhdXgsIFRXQV9SRVNVTUUpO1xcbmtlcm5lbC9icGYvaGVscGVycy5jLTQ2NzctfVxcbi0tXFxua2VybmVsL2JwZi9oZWxwZXJzLmM9NDc3ND1fX2JwZl9rZnVuY19lbmRfZGVmcygpO1xcbmtlcm5lbC9icGYvaGVscGVycy5jLTQ3NzUtXFxua2VybmVsL2JwZi9oZWxwZXJzLmM6NDc3NjpzdGF0aWMgdm9pZCBicGZfdGFza193b3JrX2NhbmNlbF9zY2hlZHVsZWQoc3RydWN0IGlycV93b3JrICppcnFfd29yaylcXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy00Nzc3LXtcXG5rZXJuZWwvYnBmL2hlbHBlcnMuYzo0Nzc4OlxcdHN0cnVjdCBicGZfdGFza193b3JrX2N0eCAqY3R4ID0gY29udGFpbmVyX29mKGlycV93b3JrLCBzdHJ1Y3QgYnBmX3Rhc2tfd29ya19jdHgsIGlycV93b3JrKTtcXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy00Nzc5LVxcbmtlcm5lbC9icGYvaGVscGVycy5jOjQ3ODA6XFx0YnBmX3Rhc2tfd29ya19jYW5jZWwoY3R4KTsgLyogdGhpcyBtaWdodCBwdXQgdGFza193b3JrIGNhbGxiYWNrJ3MgcmVmICovXFxua2VybmVsL2JwZi9oZWxwZXJzLmM6NDc4MTpcXHRicGZfdGFza193b3JrX2N0eF9wdXQoY3R4KTsgLyogYW5kIGhlcmUgd2UgcHV0IG1hcCdzIG93biByZWYgdGhhdCB3YXMgdHJhbnNmZXJyZWQgdG8gdXMgKi9cXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy00NzgyLX1cXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy00NzgzLVxcbmtlcm5lbC9icGYvaGVscGVycy5jOjQ3ODQ6dm9pZCBicGZfdGFza193b3JrX2NhbmNlbF9hbmRfZnJlZSh2b2lkICp2YWwpXFxua2VybmVsL2JwZi9oZWxwZXJzLmMtNDc4NS17XFxua2VybmVsL2JwZi9oZWxwZXJzLmM6NDc4NjpcXHRzdHJ1Y3QgYnBmX3Rhc2tfd29ya19rZXJuICp0d2sgPSB2YWw7XFxua2VybmVsL2JwZi9oZWxwZXJzLmM6NDc4NzpcXHRzdHJ1Y3QgYnBmX3Rhc2tfd29ya19jdHggKmN0eDtcXG5rZXJuZWwvYnBmL2hlbHBlcnMuYzo0Nzg4OlxcdGVudW0gYnBmX3Rhc2tfd29ya19zdGF0ZSBzdGF0ZTtcXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy00Nzg5LVxcbi0tXFxua2VybmVsL2JwZi9oZWxwZXJzLmMtNDc5Ni1cXHRcXHQvKiBydW4gaW4gaXJxX3dvcmsgdG8gYXZvaWQgbG9ja3MgaW4gTk1JICovXFxua2VybmVsL2JwZi9oZWxwZXJzLmM6NDc5NzpcXHRcXHRpbml0X2lycV93b3JrKFxcdTAwMjZjdHgtXFx1MDAzZWlycV93b3JrLCBicGZfdGFza193b3JrX2NhbmNlbF9zY2hlZHVsZWQpO1xcbmtlcm5lbC9icGYvaGVscGVycy5jLTQ3OTgtXFx0XFx0aXJxX3dvcmtfcXVldWUoXFx1MDAyNmN0eC1cXHUwMDNlaXJxX3dvcmspO1xcbi0tXFxua2VybmVsL2JwZi9oZWxwZXJzLmMtNDgwMS1cXG5rZXJuZWwvYnBmL2hlbHBlcnMuYzo0ODAyOlxcdGJwZl90YXNrX3dvcmtfY3R4X3B1dChjdHgpOyAvKiBwdXQgYnBmIG1hcCdzIHJlZiAqL1xcbmtlcm5lbC9icGYvaGVscGVycy5jLTQ4MDMtfVxcbi0tXFxua2VybmVsL2JwZi9oZWxwZXJzLmM9NDk2OD1CVEZfSURfRkxBR1MoZnVuYywgYnBmX3N0cmVhbV9wcmludF9zdGFjaywgS0ZfSU1QTElDSVRfQVJHUylcXG5rZXJuZWwvYnBmL2hlbHBlcnMuYzo0OTY5OkJURl9JRF9GTEFHUyhmdW5jLCBicGZfdGFza193b3JrX3NjaGVkdWxlX3NpZ25hbCwgS0ZfSU1QTElDSVRfQVJHUylcXG5rZXJuZWwvYnBmL2hlbHBlcnMuYzo0OTcwOkJURl9JRF9GTEFHUyhmdW5jLCBicGZfdGFza193b3JrX3NjaGVkdWxlX3Jlc3VtZSwgS0ZfSU1QTElDSVRfQVJHUylcXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy00OTcxLUJURl9JRF9GTEFHUyhmdW5jLCBicGZfZHlucHRyX2Zyb21fZmlsZSlcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jPTgwND12b2lkIGJwZl9vYmpfZnJlZV90YXNrX3dvcmsoY29uc3Qgc3RydWN0IGJ0Zl9yZWNvcmQgKnJlYywgdm9pZCAqb2JqKVxcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtODA3LVxcdFxcdHJldHVybjtcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzo4MDg6XFx0YnBmX3Rhc2tfd29ya19jYW5jZWxfYW5kX2ZyZWUob2JqICsgcmVjLVxcdTAwM2V0YXNrX3dvcmtfb2ZmKTtcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy04MDktfVxcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmM9ODE2PXZvaWQgYnBmX29ial9mcmVlX2ZpZWxkcyhjb25zdCBzdHJ1Y3QgYnRmX3JlY29yZCAqcmVjLCB2b2lkICpvYmopXFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy04NDAtXFx0XFx0Y2FzZSBCUEZfVEFTS19XT1JLOlxcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjg0MTpcXHRcXHRcXHRicGZfdGFza193b3JrX2NhbmNlbF9hbmRfZnJlZShmaWVsZF9wdHIpO1xcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTg0Mi1cXHRcXHRcXHRicmVhaztcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz01MzA9c3RhdGljIGJvb2wgaXNfYXN5bmNfY2Jfc2xlZXBhYmxlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqaW5zbilcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy01MzUtXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjUzNjpcXHQvKiBicGZfd3EgYW5kIGJwZl90YXNrX3dvcmsgY2FsbGJhY2tzIGFyZSBhbHdheXMgc2xlZXBhYmxlLiAqL1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy01MzctXFx0aWYgKGJwZl9wc2V1ZG9fa2Z1bmNfY2FsbChpbnNuKSBcXHUwMDI2XFx1MDAyNiBpbnNuLVxcdTAwM2VvZmYgPT0gMCBcXHUwMDI2XFx1MDAyNlxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTEwODAyPUJURl9JRChzdHJ1Y3QsIGJwZl9yZXNfc3Bpbl9sb2NrKVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMDgwMzpCVEZfSUQoc3RydWN0LCBicGZfdGFza193b3JrKVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMDgwNC1CVEZfSUQoc3RydWN0LCBicGZfcHJvZ19hdXgpXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTA5ODI9ZW51bSBzcGVjaWFsX2tmdW5jX3R5cGUge1xcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTExMDQ0LVxcdEtGX19fYnBmX3RyYXAsXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjExMDQ1OlxcdEtGX2JwZl90YXNrX3dvcmtfc2NoZWR1bGVfc2lnbmFsLFxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMTA0NjpcXHRLRl9icGZfdGFza193b3JrX3NjaGVkdWxlX3Jlc3VtZSxcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTEwNDctXFx0S0ZfYnBmX2FyZW5hX2FsbG9jX3BhZ2VzLFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTExMTM3PUJURl9JRChmdW5jLCBfX2JwZl90cmFwKVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMTEzODpCVEZfSUQoZnVuYywgYnBmX3Rhc2tfd29ya19zY2hlZHVsZV9zaWduYWwpXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjExMTM5OkJURl9JRChmdW5jLCBicGZfdGFza193b3JrX3NjaGVkdWxlX3Jlc3VtZSlcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTExNDAtQlRGX0lEKGZ1bmMsIGJwZl9hcmVuYV9hbGxvY19wYWdlcylcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xMTE5Nj1zdGF0aWMgYm9vbCBpc190YXNrX3dvcmtfYWRkX2tmdW5jKHUzMiBmdW5jX2lkKVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMTE5Ny17XFxua2VybmVsL2JwZi92ZXJpZmllci5jOjExMTk4OlxcdHJldHVybiBmdW5jX2lkID09IHNwZWNpYWxfa2Z1bmNfbGlzdFtLRl9icGZfdGFza193b3JrX3NjaGVkdWxlX3NpZ25hbF0gfHxcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTExOTk6XFx0ICAgICAgIGZ1bmNfaWQgPT0gc3BlY2lhbF9rZnVuY19saXN0W0tGX2JwZl90YXNrX3dvcmtfc2NoZWR1bGVfcmVzdW1lXTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTEyMDAtfVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTExOTA2PXN0YXRpYyBpbnQgY2hlY2tfa2Z1bmNfYXJncyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2tmdW5jX2NhbGxfYXJnX21ldGEgKm1ldGEsXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTIwODAtXFx0XFx0XFx0XFx0XFx0XFx0dmVyYm9zZShlbnYsXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjEyMDgxOlxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXCJicGZfdGFza193b3JrIHBvaW50ZXIgaW4gUjIgbWFwX3VpZD0lZCBkb2Vzbid0IG1hdGNoIG1hcCBwb2ludGVyIGluIFIzIG1hcF91aWQ9JWRcXFxcblxcXCIsXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTEyMDgyLVxcdFxcdFxcdFxcdFxcdFxcdFxcdG1ldGEtXFx1MDAzZW1hcC51aWQsIHJlZy1cXHUwMDNlbWFwX3VpZCk7XFxuLS1cXG50b29scy9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmg9NzUwMj1zdHJ1Y3QgYnBmX3RpbWVyIHtcXG4tLVxcbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaC03NTA1LVxcbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaDo3NTA2OnN0cnVjdCBicGZfdGFza193b3JrIHtcXG50b29scy9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmgtNzUwNy1cXHRfX3U2NCBfX29wYXF1ZTtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3Rlc3RfdGFza193b3JrLmM9MjU9c3RydWN0IGVsZW0ge1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3Rlc3RfdGFza193b3JrLmMtMjYtXFx0Y2hhciBkYXRhWzEyOF07XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdGVzdF90YXNrX3dvcmsuYzoyNzpcXHRzdHJ1Y3QgYnBmX3Rhc2tfd29yayB0dztcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy90ZXN0X3Rhc2tfd29yay5jLTI4LX07XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvZmlsZV9yZWFkZXIuYz0yMD1zdHJ1Y3QgZWxlbSB7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2ZpbGVfcmVhZGVyLmMtMjEtXFx0c3RydWN0IGZpbGUgKmZpbGU7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2ZpbGVfcmVhZGVyLmM6MjI6XFx0c3RydWN0IGJwZl90YXNrX3dvcmsgdHc7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2ZpbGVfcmVhZGVyLmMtMjMtfTtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9maWxlX3JlYWRlci5jPTY2PWludCBvbl9vcGVuX3ZhbGlkYXRlX2ZpbGVfcmVhZCh2b2lkICpjKVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2ZpbGVfcmVhZGVyLmMtNzktXFx0fVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9maWxlX3JlYWRlci5jOjgwOlxcdGJwZl90YXNrX3dvcmtfc2NoZWR1bGVfc2lnbmFsKHRhc2ssIFxcdTAwMjZ3b3JrLVxcdTAwM2V0dywgXFx1MDAyNmFycm1hcCwgdGFza193b3JrX2NhbGxiYWNrKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvZmlsZV9yZWFkZXIuYy04MS1cXHRyZXR1cm4gMDtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90YXNrX3dvcmsuYz0xNj1zdHJ1Y3QgZWxlbSB7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rhc2tfd29yay5jLTE3LVxcdGNoYXIgZGF0YVsxMjhdO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90YXNrX3dvcmsuYzoxODpcXHRzdHJ1Y3QgYnBmX3Rhc2tfd29yayB0dztcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGFza193b3JrLmMtMTktfTtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90YXNrX3dvcmsuYz01ND1pbnQgb25jcHVfaGFzaF9tYXAoc3RydWN0IHB0X3JlZ3MgKmFyZ3MpXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGFza193b3JrLmMtNjctXFx0XFx0cmV0dXJuIDA7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rhc2tfd29yay5jOjY4OlxcdGJwZl90YXNrX3dvcmtfc2NoZWR1bGVfcmVzdW1lKHRhc2ssIFxcdTAwMjZ3b3JrLVxcdTAwM2V0dywgXFx1MDAyNmhtYXAsIHByb2Nlc3Nfd29yayk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rhc2tfd29yay5jLTY5LVxcdHJldHVybiAwO1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rhc2tfd29yay5jPTczPWludCBvbmNwdV9hcnJheV9tYXAoc3RydWN0IHB0X3JlZ3MgKmFyZ3MpXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGFza193b3JrLmMtODEtXFx0XFx0cmV0dXJuIDA7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rhc2tfd29yay5jOjgyOlxcdGJwZl90YXNrX3dvcmtfc2NoZWR1bGVfc2lnbmFsKHRhc2ssIFxcdTAwMjZ3b3JrLVxcdTAwM2V0dywgXFx1MDAyNmFycm1hcCwgcHJvY2Vzc193b3JrKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGFza193b3JrLmMtODMtXFx0cmV0dXJuIDA7XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGFza193b3JrLmM9ODc9aW50IG9uY3B1X2xydV9tYXAoc3RydWN0IHB0X3JlZ3MgKmFyZ3MpXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGFza193b3JrLmMtMTAzLVxcdFxcdHJldHVybiAwO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90YXNrX3dvcmsuYzoxMDQ6XFx0YnBmX3Rhc2tfd29ya19zY2hlZHVsZV9yZXN1bWUodGFzaywgXFx1MDAyNndvcmstXFx1MDAzZXR3LCBcXHUwMDI2bHJ1bWFwLCBwcm9jZXNzX3dvcmspO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90YXNrX3dvcmsuYy0xMDUtXFx0cmV0dXJuIDA7XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGFza193b3JrX2ZhaWwuYz0xNT1zdHJ1Y3QgZWxlbSB7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rhc2tfd29ya19mYWlsLmMtMTYtXFx0Y2hhciBkYXRhWzEyOF07XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rhc2tfd29ya19mYWlsLmM6MTc6XFx0c3RydWN0IGJwZl90YXNrX3dvcmsgdHc7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rhc2tfd29ya19mYWlsLmMtMTgtfTtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90YXNrX3dvcmtfZmFpbC5jPTQ3PWludCBtaXNtYXRjaF9tYXAoc3RydWN0IHB0X3JlZ3MgKmFyZ3MpXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGFza193b3JrX2ZhaWwuYy01NS1cXHRcXHRyZXR1cm4gMDtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGFza193b3JrX2ZhaWwuYzo1NjpcXHRicGZfdGFza193b3JrX3NjaGVkdWxlX3Jlc3VtZSh0YXNrLCBcXHUwMDI2d29yay1cXHUwMDNldHcsIFxcdTAwMjZobWFwLCBwcm9jZXNzX3dvcmspO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90YXNrX3dvcmtfZmFpbC5jLTU3LVxcdHJldHVybiAwO1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rhc2tfd29ya19mYWlsLmM9NjI9aW50IG5vX21hcF90YXNrX3dvcmsoc3RydWN0IHB0X3JlZ3MgKmFyZ3MpXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGFza193b3JrX2ZhaWwuYy02NC1cXHRzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2s7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rhc2tfd29ya19mYWlsLmM6NjU6XFx0c3RydWN0IGJwZl90YXNrX3dvcmsgdHc7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rhc2tfd29ya19mYWlsLmMtNjYtXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rhc2tfd29ya19mYWlsLmMtNjctXFx0dGFzayA9IGJwZl9nZXRfY3VycmVudF90YXNrX2J0ZigpO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90YXNrX3dvcmtfZmFpbC5jOjY4OlxcdGJwZl90YXNrX3dvcmtfc2NoZWR1bGVfcmVzdW1lKHRhc2ssIFxcdTAwMjZ0dywgXFx1MDAyNmhtYXAsIHByb2Nlc3Nfd29yayk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rhc2tfd29ya19mYWlsLmMtNjktXFx0cmV0dXJuIDA7XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGFza193b3JrX2ZhaWwuYz03ND1pbnQgdGFza193b3JrX251bGwoc3RydWN0IHB0X3JlZ3MgKmFyZ3MpXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGFza193b3JrX2ZhaWwuYy03OC1cXHR0YXNrID0gYnBmX2dldF9jdXJyZW50X3Rhc2tfYnRmKCk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rhc2tfd29ya19mYWlsLmM6Nzk6XFx0YnBmX3Rhc2tfd29ya19zY2hlZHVsZV9yZXN1bWUodGFzaywgTlVMTCwgXFx1MDAyNmhtYXAsIHByb2Nlc3Nfd29yayk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rhc2tfd29ya19mYWlsLmMtODAtXFx0cmV0dXJuIDA7XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGFza193b3JrX2ZhaWwuYz04NT1pbnQgbWFwX251bGwoc3RydWN0IHB0X3JlZ3MgKmFyZ3MpXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGFza193b3JrX2ZhaWwuYy05My1cXHRcXHRyZXR1cm4gMDtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGFza193b3JrX2ZhaWwuYzo5NDpcXHRicGZfdGFza193b3JrX3NjaGVkdWxlX3Jlc3VtZSh0YXNrLCBcXHUwMDI2d29yay1cXHUwMDNldHcsIE5VTEwsIHByb2Nlc3Nfd29yayk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rhc2tfd29ya19mYWlsLmMtOTUtXFx0cmV0dXJuIDA7XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGFza193b3JrX3N0cmVzcy5jPTIwPXN0cnVjdCBlbGVtIHtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGFza193b3JrX3N0cmVzcy5jLTIxLVxcdF9fdTMyIGNvdW50O1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90YXNrX3dvcmtfc3RyZXNzLmM6MjI6XFx0c3RydWN0IGJwZl90YXNrX3dvcmsgdHc7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rhc2tfd29ya19zdHJlc3MuYy0yMy19O1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rhc2tfd29ya19zdHJlc3MuYz00MD1pbnQgc2NoZWR1bGVfdGFza193b3JrKHZvaWQgKmN0eClcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90YXNrX3dvcmtfc3RyZXNzLmMtNTMtXFx0fVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90YXNrX3dvcmtfc3RyZXNzLmM6NTQ6XFx0ZXJyID0gYnBmX3Rhc2tfd29ya19zY2hlZHVsZV9zaWduYWwoYnBmX2dldF9jdXJyZW50X3Rhc2tfYnRmKCksIFxcdTAwMjZ3b3JrLVxcdTAwM2V0dywgXFx1MDAyNmhtYXAsXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rhc2tfd29ya19zdHJlc3MuYy01NS1cXHRcXHRcXHRcXHRcXHQgICAgcHJvY2Vzc193b3JrKTtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hc3luY19jYl9jb250ZXh0LmM9MTI0PXN0cnVjdCB0YXNrX3dvcmtfZWxlbSB7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FzeW5jX2NiX2NvbnRleHQuYzoxMjU6XFx0c3RydWN0IGJwZl90YXNrX3dvcmsgdHc7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FzeW5jX2NiX2NvbnRleHQuYy0xMjYtfTtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hc3luY19jYl9jb250ZXh0LmM9MTQ1PWludCB0YXNrX3dvcmtfbm9uX3NsZWVwYWJsZV9wcm9nKHZvaWQgKmN0eClcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hc3luY19jYl9jb250ZXh0LmMtMTU4LVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hc3luY19jYl9jb250ZXh0LmM6MTU5OlxcdGJwZl90YXNrX3dvcmtfc2NoZWR1bGVfcmVzdW1lKHRhc2ssIFxcdTAwMjZ2YWwtXFx1MDAzZXR3LCBcXHUwMDI2dGFza193b3JrX21hcCwgdGFza193b3JrX2NiKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfYXN5bmNfY2JfY29udGV4dC5jLTE2MC1cXHRyZXR1cm4gMDtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hc3luY19jYl9jb250ZXh0LmM9MTY1PWludCB0YXNrX3dvcmtfc2xlZXBhYmxlX3Byb2codm9pZCAqY3R4KVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FzeW5jX2NiX2NvbnRleHQuYy0xNzgtXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FzeW5jX2NiX2NvbnRleHQuYzoxNzk6XFx0YnBmX3Rhc2tfd29ya19zY2hlZHVsZV9yZXN1bWUodGFzaywgXFx1MDAyNnZhbC1cXHUwMDNldHcsIFxcdTAwMjZ0YXNrX3dvcmtfbWFwLCB0YXNrX3dvcmtfY2IpO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hc3luY19jYl9jb250ZXh0LmMtMTgwLVxcdHJldHVybiAwO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNFQxOTozNTozNi4zMzk1ODU1ODdaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTEyMDQyNDQ5MTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBCUEYgVGFzayBXb3JrIFBhdGNoIGZvciBGdXp6aW5nIEZvY3VzKipcblxuT2theSwgc28gd2UncmUgbG9va2luZyBhdCBgYnBmX3Rhc2tfd29ya2AsIGEgQlBGIGZlYXR1cmUuIFRoZSByZWxldmFudCBjb25maWcgaXMgYEJQRl9TWVNDQUxMYC4gVGhlIGNvcmUgb2YgdGhpcyBwYXRjaCBzZWVtcyB0byBpbnZvbHZlIGRlZmVycmVkIGZyZWVpbmcgb2YgaGFzaCB0YWJsZSBlbGVtZW50cywgc3BlY2lmaWNhbGx5IHJlbGF0ZWQgdG8gYGNhbGxfcmN1X3Rhc2tzX3RyYWNlYC4gTXkgaW5pdGlhbCB0aG91Z2h0IHdhcyB0byBsaXN0IHRoZSBwcmltYXJ5IGZ1bmN0aW9ucyBpbnZvbHZlZCBpbiB0aGUgZGVmZXJyZWQgZnJlZWluZyBhbmQgbWVtb3J5IG1hbmFnZW1lbnQuXG5cbkluaXRpYWxseSwgdGhlIGtleSBzeW1ib2xzIHRoYXQgc3ByaW5nIHRvIG1pbmQgYXJlOiBgYnBmX3Rhc2tfd29ya19jYW5jZWxfYW5kX2ZyZWVgLCBgaHRhYl9tYXBfZnJlZWAsIGBmcmVlX2h0YWJfZWxlbWAsIGBodGFiX2VsZW1fZnJlZWAsIGFuZCBgaHRhYl9scnVfcHVzaF9mcmVlYC4gSG93ZXZlciwgdGhlIHJlYWwgY3J1eCBvZiB0aGlzIHBhdGNoIGlzIHRoZSBoYW5kbGluZyBvZiB0aGUgUkNVIGNhbGxiYWNrcy4gVGhlc2Ugc3RhdGljIGZ1bmN0aW9ucywgYGh0YWJfZWxlbV9kZWZlcl9mcmVlYCBhbmQgYGh0YWJfZWxlbV9mcmVlX3JjdV9jYmAsIGFyZSB0aGUgY3JpdGljYWwgcGllY2VzLiBTeXprYWxsZXIgKmNhbiogaGFuZGxlIHN0YXRpYyBmdW5jdGlvbnMgaWYgdGhleSdyZSB1bmlxdWVseSBpZGVudGlmaWFibGUsIG9yIHdlIGNhbiBqdXN0IGxpc3QgdGhlbSBleHBsaWNpdGx5LCBhbmQgc28sIHRoYXQncyB3aGF0IEknbGwgZG8uXG5cblRoZXJlZm9yZSwgSSd2ZSBleHBhbmRlZCB0aGUgbGlzdCB0byBpbmNsdWRlOiBgaHRhYl9lbGVtX2RlZmVyX2ZyZWVgLCBgaHRhYl9lbGVtX2ZyZWVfcmN1X2NiYCwgYGJwZl90YXNrX3dvcmtfY2FuY2VsX2FuZF9mcmVlYCwgYGh0YWJfbWFwX2ZyZWVgLCBgZnJlZV9odGFiX2VsZW1gLCBgaHRhYl9lbGVtX2ZyZWVgLCBhbmQgYGh0YWJfbHJ1X3B1c2hfZnJlZWAuIFllcywgSSd2ZSBjb25maXJtZWQgdGhhdCBgaHRhYl9lbGVtX2RlZmVyX2ZyZWVgIGFuZCBgaHRhYl9lbGVtX2ZyZWVfcmN1X2NiYCBhcmUgaW5kZWVkIHN0YXRpYyBmdW5jdGlvbnMuXG5cblRoaXMgaXMgYSB1c2UtYWZ0ZXItZnJlZSBmaXgsIGFuZCB0aGF0IHdhcnJhbnRzIGFnZ3Jlc3NpdmUgZnV6emluZy4gVGhlIGdvYWwgaGVyZSBpcyB0byBlbnN1cmUgdGhlIGRlZmVycmVkIGZyZWVpbmcgZG9lc24ndCBpbnRyb2R1Y2UgYW55IG5ldyBpc3N1ZXMgb3IgbGVha3MuIFRoZXJlZm9yZSwgSSdtIHNldHRpbmcgYFdvcnRoRnV6emluZ2AgdG8gYHRydWVgLCBhbmQgSSdtIGVuYWJsaW5nIGBCUEZfU1lTQ0FMTGAgdmlhIGBFbmFibGVDb25maWdzYC5cblxuSSBuZWVkIHRvIGZvY3VzIG91ciBmdXp6aW5nIG9uIHRoZSBjcml0aWNhbCBmdW5jdGlvbnMsIHNvIEknbGwgc2V0IGBGb2N1c1N5bWJvbHNgIHRvIHRoZSBmb2xsb3dpbmc6IGBodGFiX2VsZW1fZGVmZXJfZnJlZWAsIGBodGFiX2VsZW1fZnJlZV9yY3VfY2JgLCBgYnBmX3Rhc2tfd29ya19jYW5jZWxfYW5kX2ZyZWVgLCBgaHRhYl9tYXBfZnJlZWAsIGBmcmVlX2h0YWJfZWxlbWAsIGBodGFiX2VsZW1fZnJlZWAsIGFuZCBgaHRhYl9scnVfcHVzaF9mcmVlYC5cblxuR2l2ZW4gdGhhdCBjZXJ0YWluIGZpZWxkcyBpbiB0aGUgaGFzaCB0YWJsZSBlbGVtZW50cyB3ZXJlIHJlaW5pdGlhbGl6ZWQsIEkgc2hvdWxkIGFsc28gaW5jbHVkZSB0aGUgYGFsbG9jX2h0YWJfZWxlbWAgYW5kIGBwcmVhbGxvY19scnVfcG9wYCBmdW5jdGlvbnMgYXMgcGFydCBvZiBvdXIgZnV6emluZyBmb2N1cy4gVGhpcyBzaG91bGQgcHJvdmlkZSBzdWZmaWNpZW50IGZ1enppbmcgY292ZXJhZ2UuXG5cbk9rYXksIGxldCdzIGNhbGwgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjAyNDAsIk91dHB1dFRva2VucyI6MjI0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjgwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI0VDE5OjM1OjQ3LjU0MzgzMzI2OVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkxMDMxNjc4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfU1lTQ0FMTFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImh0YWJfZWxlbV9kZWZlcl9mcmVlXCIsXG4gICAgXCJodGFiX2VsZW1fZnJlZV9yY3VfY2JcIixcbiAgICBcImJwZl90YXNrX3dvcmtfY2FuY2VsX2FuZF9mcmVlXCIsXG4gICAgXCJodGFiX21hcF9mcmVlXCIsXG4gICAgXCJmcmVlX2h0YWJfZWxlbVwiLFxuICAgIFwiaHRhYl9lbGVtX2ZyZWVcIixcbiAgICBcImh0YWJfbHJ1X3B1c2hfZnJlZVwiLFxuICAgIFwiYWxsb2NfaHRhYl9lbGVtXCIsXG4gICAgXCJwcmVhbGxvY19scnVfcG9wXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEJQRiBzdWJzeXN0ZW0gdG8gZGVmZXIgdGhlIGZyZWVpbmcgb2YgaGFzaCB0YWJsZSBlbGVtZW50cyBjb250YWluaW5nIEJQRl9UQVNLX1dPUksgZmllbGRzIHVzaW5nIGNhbGxfcmN1X3Rhc2tzX3RyYWNlLiBUaGlzIHByZXZlbnRzIGEgdXNlLWFmdGVyLWZyZWUgd2hlbiBhIHRhc2sgd29yayBjYWxsYmFjayBpcyBzdGlsbCBydW5uaW5nLiBJdCBhbHNvIHJlLWluaXRpYWxpemVzIHNwZWNpYWwgZmllbGRzIGZvciByZWN5Y2xlZCBlbGVtZW50cy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgQlBGIG1hcCBsb2dpYyBhbmQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgY29ycmVjdCBtZW1vcnkgbWFuYWdlbWVudCBhbmQgc2NoZWR1bGluZyBiZWhhdmlvci5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfU1lTQ0FMTFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImh0YWJfZWxlbV9kZWZlcl9mcmVlXCIsXG4gICAgXCJodGFiX2VsZW1fZnJlZV9yY3VfY2JcIixcbiAgICBcImJwZl90YXNrX3dvcmtfY2FuY2VsX2FuZF9mcmVlXCIsXG4gICAgXCJodGFiX21hcF9mcmVlXCIsXG4gICAgXCJmcmVlX2h0YWJfZWxlbVwiLFxuICAgIFwiaHRhYl9lbGVtX2ZyZWVcIixcbiAgICBcImh0YWJfbHJ1X3B1c2hfZnJlZVwiLFxuICAgIFwiYWxsb2NfaHRhYl9lbGVtXCIsXG4gICAgXCJwcmVhbGxvY19scnVfcG9wXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEJQRiBzdWJzeXN0ZW0gdG8gZGVmZXIgdGhlIGZyZWVpbmcgb2YgaGFzaCB0YWJsZSBlbGVtZW50cyBjb250YWluaW5nIEJQRl9UQVNLX1dPUksgZmllbGRzIHVzaW5nIGNhbGxfcmN1X3Rhc2tzX3RyYWNlLiBUaGlzIHByZXZlbnRzIGEgdXNlLWFmdGVyLWZyZWUgd2hlbiBhIHRhc2sgd29yayBjYWxsYmFjayBpcyBzdGlsbCBydW5uaW5nLiBJdCBhbHNvIHJlLWluaXRpYWxpemVzIHNwZWNpYWwgZmllbGRzIGZvciByZWN5Y2xlZCBlbGVtZW50cy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgQlBGIG1hcCBsb2dpYyBhbmQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgY29ycmVjdCBtZW1vcnkgbWFuYWdlbWVudCBhbmQgc2NoZWR1bGluZyBiZWhhdmlvci5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowbks7d[1] Phase: Succeeded StartedAt: 2026-06-24 19:35:54 +0000 UTC FinishedAt: 2026-06-24 19:35:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbks7d[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-06-24 19:35:54 +0000 UTC FinishedAt: 2026-06-24 19:35:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbks7d[2] Phase: Succeeded StartedAt: 2026-06-24 19:35:54 +0000 UTC FinishedAt: 2026-06-24 23:42:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbks7d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"840ef6c78e6a2f694b578ecb9063241c992aaa9e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["htab_elem_defer_free","htab_elem_free_rcu_cb","bpf_task_work_cancel_and_free","htab_map_free","free_htab_elem","htab_elem_free","htab_lru_push_free","alloc_htab_elem","prealloc_lru_pop"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"840ef6c78e6a2f694b578ecb9063241c992aaa9e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"6198af4e-8e12-4c90-ae16-90c7cc5d5d4c","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-06-24 19:35:54 +0000 UTC FinishedAt: 2026-06-24 23:42:45 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"840ef6c78e6a2f694b578ecb9063241c992aaa9e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["htab_elem_defer_free","htab_elem_free_rcu_cb","bpf_task_work_cancel_and_free","htab_map_free","free_htab_elem","htab_elem_free","htab_lru_push_free","alloc_htab_elem","prealloc_lru_pop"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"840ef6c78e6a2f694b578ecb9063241c992aaa9e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"6198af4e-8e12-4c90-ae16-90c7cc5d5d4c","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowbks7d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"840ef6c78e6a2f694b578ecb9063241c992aaa9e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["htab_elem_defer_free","htab_elem_free_rcu_cb","bpf_task_work_cancel_and_free","htab_map_free","free_htab_elem","htab_elem_free","htab_lru_push_free","alloc_htab_elem","prealloc_lru_pop"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"840ef6c78e6a2f694b578ecb9063241c992aaa9e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"6198af4e-8e12-4c90-ae16-90c7cc5d5d4c","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-06-24 19:35:54 +0000 UTC FinishedAt: 2026-06-24 19:36:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbks7d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"840ef6c78e6a2f694b578ecb9063241c992aaa9e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["htab_elem_defer_free","htab_elem_free_rcu_cb","bpf_task_work_cancel_and_free","htab_map_free","free_htab_elem","htab_elem_free","htab_lru_push_free","alloc_htab_elem","prealloc_lru_pop"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"840ef6c78e6a2f694b578ecb9063241c992aaa9e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"6198af4e-8e12-4c90-ae16-90c7cc5d5d4c","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-06-24 19:35:54 +0000 UTC FinishedAt: 2026-06-24 19:36:17 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"840ef6c78e6a2f694b578ecb9063241c992aaa9e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},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-workflowbks7d/series-workflowbks7d-convert-artifact-40530660/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowbks7d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"840ef6c78e6a2f694b578ecb9063241c992aaa9e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["htab_elem_defer_free","htab_elem_free_rcu_cb","bpf_task_work_cancel_and_free","htab_map_free","free_htab_elem","htab_elem_free","htab_lru_push_free","alloc_htab_elem","prealloc_lru_pop"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"840ef6c78e6a2f694b578ecb9063241c992aaa9e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"6198af4e-8e12-4c90-ae16-90c7cc5d5d4c","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-06-24 19:36:24 +0000 UTC FinishedAt: 2026-06-24 20:06:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbks7d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"840ef6c78e6a2f694b578ecb9063241c992aaa9e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["htab_elem_defer_free","htab_elem_free_rcu_cb","bpf_task_work_cancel_and_free","htab_map_free","free_htab_elem","htab_elem_free","htab_lru_push_free","alloc_htab_elem","prealloc_lru_pop"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"840ef6c78e6a2f694b578ecb9063241c992aaa9e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"6198af4e-8e12-4c90-ae16-90c7cc5d5d4c","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-06-24 19:36:24 +0000 UTC FinishedAt: 2026-06-24 20:06:16 +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:*27f784f9-2419-43d6-adaf-14f37ae8bb33,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-workflowbks7d/series-workflowbks7d-convert-artifact-40530660/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": "ce0c4d4b-1a8c-45fc-b2cb-b6355805191d", "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-workflowbks7d/series-workflowbks7d-build-action-764810018/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowbks7d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"840ef6c78e6a2f694b578ecb9063241c992aaa9e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["htab_elem_defer_free","htab_elem_free_rcu_cb","bpf_task_work_cancel_and_free","htab_map_free","free_htab_elem","htab_elem_free","htab_lru_push_free","alloc_htab_elem","prealloc_lru_pop"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"840ef6c78e6a2f694b578ecb9063241c992aaa9e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"6198af4e-8e12-4c90-ae16-90c7cc5d5d4c","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-06-24 19:36:24 +0000 UTC FinishedAt: 2026-06-24 20:05:50 +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:*27f784f9-2419-43d6-adaf-14f37ae8bb33,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-workflowbks7d/series-workflowbks7d-convert-artifact-40530660/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": "ce0c4d4b-1a8c-45fc-b2cb-b6355805191d", "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-workflowbks7d/series-workflowbks7d-build-action-764810018/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowbks7d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"840ef6c78e6a2f694b578ecb9063241c992aaa9e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["htab_elem_defer_free","htab_elem_free_rcu_cb","bpf_task_work_cancel_and_free","htab_map_free","free_htab_elem","htab_elem_free","htab_lru_push_free","alloc_htab_elem","prealloc_lru_pop"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"840ef6c78e6a2f694b578ecb9063241c992aaa9e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"6198af4e-8e12-4c90-ae16-90c7cc5d5d4c","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-06-24 20:06:16 +0000 UTC FinishedAt: 2026-06-24 20:06:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbks7d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"840ef6c78e6a2f694b578ecb9063241c992aaa9e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["htab_elem_defer_free","htab_elem_free_rcu_cb","bpf_task_work_cancel_and_free","htab_map_free","free_htab_elem","htab_elem_free","htab_lru_push_free","alloc_htab_elem","prealloc_lru_pop"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"840ef6c78e6a2f694b578ecb9063241c992aaa9e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"6198af4e-8e12-4c90-ae16-90c7cc5d5d4c","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-06-24 20:06:16 +0000 UTC FinishedAt: 2026-06-24 20:06:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbks7d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"840ef6c78e6a2f694b578ecb9063241c992aaa9e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["htab_elem_defer_free","htab_elem_free_rcu_cb","bpf_task_work_cancel_and_free","htab_map_free","free_htab_elem","htab_elem_free","htab_lru_push_free","alloc_htab_elem","prealloc_lru_pop"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"840ef6c78e6a2f694b578ecb9063241c992aaa9e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"6198af4e-8e12-4c90-ae16-90c7cc5d5d4c","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-06-24 20:06:16 +0000 UTC FinishedAt: 2026-06-24 20:06:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbks7d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"840ef6c78e6a2f694b578ecb9063241c992aaa9e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["htab_elem_defer_free","htab_elem_free_rcu_cb","bpf_task_work_cancel_and_free","htab_map_free","free_htab_elem","htab_elem_free","htab_lru_push_free","alloc_htab_elem","prealloc_lru_pop"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"840ef6c78e6a2f694b578ecb9063241c992aaa9e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"6198af4e-8e12-4c90-ae16-90c7cc5d5d4c","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-06-24 20:06:16 +0000 UTC FinishedAt: 2026-06-24 20:06:21 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"840ef6c78e6a2f694b578ecb9063241c992aaa9e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"6198af4e-8e12-4c90-ae16-90c7cc5d5d4c","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},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-workflowbks7d/series-workflowbks7d-convert-artifact-2432349411/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowbks7d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"840ef6c78e6a2f694b578ecb9063241c992aaa9e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["htab_elem_defer_free","htab_elem_free_rcu_cb","bpf_task_work_cancel_and_free","htab_map_free","free_htab_elem","htab_elem_free","htab_lru_push_free","alloc_htab_elem","prealloc_lru_pop"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"840ef6c78e6a2f694b578ecb9063241c992aaa9e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"6198af4e-8e12-4c90-ae16-90c7cc5d5d4c","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-06-24 20:06:26 +0000 UTC FinishedAt: 2026-06-24 20:08:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbks7d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"840ef6c78e6a2f694b578ecb9063241c992aaa9e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["htab_elem_defer_free","htab_elem_free_rcu_cb","bpf_task_work_cancel_and_free","htab_map_free","free_htab_elem","htab_elem_free","htab_lru_push_free","alloc_htab_elem","prealloc_lru_pop"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"840ef6c78e6a2f694b578ecb9063241c992aaa9e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"6198af4e-8e12-4c90-ae16-90c7cc5d5d4c","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-06-24 20:06:26 +0000 UTC FinishedAt: 2026-06-24 20:08:34 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*ce0c4d4b-1a8c-45fc-b2cb-b6355805191d,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-workflowbks7d/series-workflowbks7d-build-action-764810018/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-workflowbks7d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"840ef6c78e6a2f694b578ecb9063241c992aaa9e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["htab_elem_defer_free","htab_elem_free_rcu_cb","bpf_task_work_cancel_and_free","htab_map_free","free_htab_elem","htab_elem_free","htab_lru_push_free","alloc_htab_elem","prealloc_lru_pop"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"840ef6c78e6a2f694b578ecb9063241c992aaa9e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"6198af4e-8e12-4c90-ae16-90c7cc5d5d4c","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-06-24 20:08:44 +0000 UTC FinishedAt: 2026-06-24 20:08:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbks7d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"840ef6c78e6a2f694b578ecb9063241c992aaa9e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["htab_elem_defer_free","htab_elem_free_rcu_cb","bpf_task_work_cancel_and_free","htab_map_free","free_htab_elem","htab_elem_free","htab_lru_push_free","alloc_htab_elem","prealloc_lru_pop"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"840ef6c78e6a2f694b578ecb9063241c992aaa9e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"6198af4e-8e12-4c90-ae16-90c7cc5d5d4c","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-06-24 20:08:44 +0000 UTC FinishedAt: 2026-06-24 20:08:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbks7d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"840ef6c78e6a2f694b578ecb9063241c992aaa9e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["htab_elem_defer_free","htab_elem_free_rcu_cb","bpf_task_work_cancel_and_free","htab_map_free","free_htab_elem","htab_elem_free","htab_lru_push_free","alloc_htab_elem","prealloc_lru_pop"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"840ef6c78e6a2f694b578ecb9063241c992aaa9e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"6198af4e-8e12-4c90-ae16-90c7cc5d5d4c","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-06-24 20:08:44 +0000 UTC FinishedAt: 2026-06-24 20:34:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbks7d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"840ef6c78e6a2f694b578ecb9063241c992aaa9e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["htab_elem_defer_free","htab_elem_free_rcu_cb","bpf_task_work_cancel_and_free","htab_map_free","free_htab_elem","htab_elem_free","htab_lru_push_free","alloc_htab_elem","prealloc_lru_pop"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"840ef6c78e6a2f694b578ecb9063241c992aaa9e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"6198af4e-8e12-4c90-ae16-90c7cc5d5d4c","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-06-24 20:08:44 +0000 UTC FinishedAt: 2026-06-24 20:34:26 +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:*27f784f9-2419-43d6-adaf-14f37ae8bb33,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-workflowbks7d/series-workflowbks7d-convert-artifact-2432349411/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": "39a2cb70-60cb-4c10-bdfe-d13c75a68755", "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-workflowbks7d/series-workflowbks7d-build-action-521142679/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowbks7d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"840ef6c78e6a2f694b578ecb9063241c992aaa9e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["htab_elem_defer_free","htab_elem_free_rcu_cb","bpf_task_work_cancel_and_free","htab_map_free","free_htab_elem","htab_elem_free","htab_lru_push_free","alloc_htab_elem","prealloc_lru_pop"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"840ef6c78e6a2f694b578ecb9063241c992aaa9e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"6198af4e-8e12-4c90-ae16-90c7cc5d5d4c","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-06-24 20:08:44 +0000 UTC FinishedAt: 2026-06-24 20:34:16 +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:*27f784f9-2419-43d6-adaf-14f37ae8bb33,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-workflowbks7d/series-workflowbks7d-convert-artifact-2432349411/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": "39a2cb70-60cb-4c10-bdfe-d13c75a68755", "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-workflowbks7d/series-workflowbks7d-build-action-521142679/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowbks7d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"840ef6c78e6a2f694b578ecb9063241c992aaa9e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["htab_elem_defer_free","htab_elem_free_rcu_cb","bpf_task_work_cancel_and_free","htab_map_free","free_htab_elem","htab_elem_free","htab_lru_push_free","alloc_htab_elem","prealloc_lru_pop"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"840ef6c78e6a2f694b578ecb9063241c992aaa9e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"6198af4e-8e12-4c90-ae16-90c7cc5d5d4c","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-06-24 20:34:26 +0000 UTC FinishedAt: 2026-06-24 20:34:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbks7d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"840ef6c78e6a2f694b578ecb9063241c992aaa9e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["htab_elem_defer_free","htab_elem_free_rcu_cb","bpf_task_work_cancel_and_free","htab_map_free","free_htab_elem","htab_elem_free","htab_lru_push_free","alloc_htab_elem","prealloc_lru_pop"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"840ef6c78e6a2f694b578ecb9063241c992aaa9e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"6198af4e-8e12-4c90-ae16-90c7cc5d5d4c","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-06-24 20:34:26 +0000 UTC FinishedAt: 2026-06-24 20:34:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbks7d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"840ef6c78e6a2f694b578ecb9063241c992aaa9e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["htab_elem_defer_free","htab_elem_free_rcu_cb","bpf_task_work_cancel_and_free","htab_map_free","free_htab_elem","htab_elem_free","htab_lru_push_free","alloc_htab_elem","prealloc_lru_pop"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"840ef6c78e6a2f694b578ecb9063241c992aaa9e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"6198af4e-8e12-4c90-ae16-90c7cc5d5d4c","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-06-24 20:34:26 +0000 UTC FinishedAt: 2026-06-24 20:36:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbks7d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"840ef6c78e6a2f694b578ecb9063241c992aaa9e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["htab_elem_defer_free","htab_elem_free_rcu_cb","bpf_task_work_cancel_and_free","htab_map_free","free_htab_elem","htab_elem_free","htab_lru_push_free","alloc_htab_elem","prealloc_lru_pop"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"840ef6c78e6a2f694b578ecb9063241c992aaa9e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"6198af4e-8e12-4c90-ae16-90c7cc5d5d4c","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-06-24 20:34:26 +0000 UTC FinishedAt: 2026-06-24 20:36:28 +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:*39a2cb70-60cb-4c10-bdfe-d13c75a68755,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-workflowbks7d/series-workflowbks7d-build-action-521142679/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-workflowbks7d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"840ef6c78e6a2f694b578ecb9063241c992aaa9e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["htab_elem_defer_free","htab_elem_free_rcu_cb","bpf_task_work_cancel_and_free","htab_map_free","free_htab_elem","htab_elem_free","htab_lru_push_free","alloc_htab_elem","prealloc_lru_pop"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"840ef6c78e6a2f694b578ecb9063241c992aaa9e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"6198af4e-8e12-4c90-ae16-90c7cc5d5d4c","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-06-24 20:36:38 +0000 UTC FinishedAt: 2026-06-24 23:42:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbks7d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"840ef6c78e6a2f694b578ecb9063241c992aaa9e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["htab_elem_defer_free","htab_elem_free_rcu_cb","bpf_task_work_cancel_and_free","htab_map_free","free_htab_elem","htab_elem_free","htab_lru_push_free","alloc_htab_elem","prealloc_lru_pop"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"840ef6c78e6a2f694b578ecb9063241c992aaa9e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"6198af4e-8e12-4c90-ae16-90c7cc5d5d4c","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-06-24 20:36:38 +0000 UTC FinishedAt: 2026-06-24 23:42:45 +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-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["htab_elem_defer_free","htab_elem_free_rcu_cb","bpf_task_work_cancel_and_free","htab_map_free","free_htab_elem","htab_elem_free","htab_lru_push_free","alloc_htab_elem","prealloc_lru_pop"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:track,Default:nil,Value:*KASAN,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:base-build-id,Default:nil,Value:*ce0c4d4b-1a8c-45fc-b2cb-b6355805191d,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*39a2cb70-60cb-4c10-bdfe-d13c75a68755,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-workflowbks7d/series-workflowbks7d-build-action-764810018/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-workflowbks7d/series-workflowbks7d-build-action-521142679/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowbks7d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"840ef6c78e6a2f694b578ecb9063241c992aaa9e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["htab_elem_defer_free","htab_elem_free_rcu_cb","bpf_task_work_cancel_and_free","htab_map_free","free_htab_elem","htab_elem_free","htab_lru_push_free","alloc_htab_elem","prealloc_lru_pop"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"840ef6c78e6a2f694b578ecb9063241c992aaa9e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"6198af4e-8e12-4c90-ae16-90c7cc5d5d4c","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-06-24 20:36:38 +0000 UTC FinishedAt: 2026-06-24 20:36:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbks7d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"840ef6c78e6a2f694b578ecb9063241c992aaa9e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["htab_elem_defer_free","htab_elem_free_rcu_cb","bpf_task_work_cancel_and_free","htab_map_free","free_htab_elem","htab_elem_free","htab_lru_push_free","alloc_htab_elem","prealloc_lru_pop"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"840ef6c78e6a2f694b578ecb9063241c992aaa9e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"6198af4e-8e12-4c90-ae16-90c7cc5d5d4c","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-06-24 20:36:38 +0000 UTC FinishedAt: 2026-06-24 20:36:43 +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-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["htab_elem_defer_free","htab_elem_free_rcu_cb","bpf_task_work_cancel_and_free","htab_map_free","free_htab_elem","htab_elem_free","htab_lru_push_free","alloc_htab_elem","prealloc_lru_pop"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowbks7d/series-workflowbks7d-convert-artifact-3388702460/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowbks7d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"840ef6c78e6a2f694b578ecb9063241c992aaa9e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["htab_elem_defer_free","htab_elem_free_rcu_cb","bpf_task_work_cancel_and_free","htab_map_free","free_htab_elem","htab_elem_free","htab_lru_push_free","alloc_htab_elem","prealloc_lru_pop"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"840ef6c78e6a2f694b578ecb9063241c992aaa9e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"6198af4e-8e12-4c90-ae16-90c7cc5d5d4c","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-06-24 20:36:38 +0000 UTC FinishedAt: 2026-06-24 20:36:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbks7d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"840ef6c78e6a2f694b578ecb9063241c992aaa9e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["htab_elem_defer_free","htab_elem_free_rcu_cb","bpf_task_work_cancel_and_free","htab_map_free","free_htab_elem","htab_elem_free","htab_lru_push_free","alloc_htab_elem","prealloc_lru_pop"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"840ef6c78e6a2f694b578ecb9063241c992aaa9e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"6198af4e-8e12-4c90-ae16-90c7cc5d5d4c","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-06-24 20:36:38 +0000 UTC FinishedAt: 2026-06-24 20:36:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbks7d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"840ef6c78e6a2f694b578ecb9063241c992aaa9e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["htab_elem_defer_free","htab_elem_free_rcu_cb","bpf_task_work_cancel_and_free","htab_map_free","free_htab_elem","htab_elem_free","htab_lru_push_free","alloc_htab_elem","prealloc_lru_pop"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"840ef6c78e6a2f694b578ecb9063241c992aaa9e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"6198af4e-8e12-4c90-ae16-90c7cc5d5d4c","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-06-24 20:36:38 +0000 UTC FinishedAt: 2026-06-24 20:36:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbks7d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"840ef6c78e6a2f694b578ecb9063241c992aaa9e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["htab_elem_defer_free","htab_elem_free_rcu_cb","bpf_task_work_cancel_and_free","htab_map_free","free_htab_elem","htab_elem_free","htab_lru_push_free","alloc_htab_elem","prealloc_lru_pop"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"840ef6c78e6a2f694b578ecb9063241c992aaa9e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"6198af4e-8e12-4c90-ae16-90c7cc5d5d4c","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-06-24 20:36:49 +0000 UTC FinishedAt: 2026-06-24 23:42:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbks7d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"840ef6c78e6a2f694b578ecb9063241c992aaa9e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["htab_elem_defer_free","htab_elem_free_rcu_cb","bpf_task_work_cancel_and_free","htab_map_free","free_htab_elem","htab_elem_free","htab_lru_push_free","alloc_htab_elem","prealloc_lru_pop"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"840ef6c78e6a2f694b578ecb9063241c992aaa9e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"6198af4e-8e12-4c90-ae16-90c7cc5d5d4c","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-06-24 20:36:49 +0000 UTC FinishedAt: 2026-06-24 23:42:35 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*ce0c4d4b-1a8c-45fc-b2cb-b6355805191d,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*39a2cb70-60cb-4c10-bdfe-d13c75a68755,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-workflowbks7d/series-workflowbks7d-build-action-764810018/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-workflowbks7d/series-workflowbks7d-build-action-521142679/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-workflowbks7d/series-workflowbks7d-convert-artifact-3388702460/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,}