Name: series-workflowzrnhc Phase: Succeeded StartedAt: 2026-07-20 10:06:27 +0000 UTC FinishedAt: 2026-07-20 15:28:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzrnhc[0] Phase: Succeeded StartedAt: 2026-07-20 10:06:27 +0000 UTC FinishedAt: 2026-07-20 10:51:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzrnhc[0].run-triage Phase: Succeeded StartedAt: 2026-07-20 10:06:27 +0000 UTC FinishedAt: 2026-07-20 10:51:11 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "761214e5c0b14aa4e16a6b763c7a4932ce89f589", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL", "PERF_EVENTS", "BPF_EVENTS", "STACKTRACE" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "761214e5c0b14aa4e16a6b763c7a4932ce89f589", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL", "PERF_EVENTS", "BPF_EVENTS", "STACKTRACE" ], "series_id": "1f7450ef-d3af-4c90-82b2-42a5b2c958bb" }, "track": "KASAN", "fuzz": { "focus": [ "bpf" ], "focus_symbols": [ "bpf_get_stackid", "bpf_get_stackid_pe", "bpf_get_stack", "bpf_get_stack_sleepable", "bpf_get_task_stack", "bpf_get_task_stack_sleepable", "bpf_get_stack_pe", "stackid_fastpath", "stackid_new_bucket", "stackid_install", "callchain_store", "callchain_finalize", "__bpf_get_stack", "__bpf_get_stack_pe", "__bpf_get_task_stack" ], "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+CgkJCTx0ZD4yMDI2LzA3LzIwIDEwOjQ5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDssCiAgICAmIzM0O1BFUkZfRVZFTlRTJiMzNDssCiAgICAmIzM0O0JQRl9FVkVOVFMmIzM0OywKICAgICYjMzQ7U1RBQ0tUUkFDRSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2JwZl9nZXRfc3RhY2tpZCYjMzQ7LAogICAgJiMzNDticGZfZ2V0X3N0YWNraWRfcGUmIzM0OywKICAgICYjMzQ7YnBmX2dldF9zdGFjayYjMzQ7LAogICAgJiMzNDticGZfZ2V0X3N0YWNrX3NsZWVwYWJsZSYjMzQ7LAogICAgJiMzNDticGZfZ2V0X3Rhc2tfc3RhY2smIzM0OywKICAgICYjMzQ7YnBmX2dldF90YXNrX3N0YWNrX3NsZWVwYWJsZSYjMzQ7LAogICAgJiMzNDticGZfZ2V0X3N0YWNrX3BlJiMzNDssCiAgICAmIzM0O3N0YWNraWRfZmFzdHBhdGgmIzM0OywKICAgICYjMzQ7c3RhY2tpZF9uZXdfYnVja2V0JiMzNDssCiAgICAmIzM0O3N0YWNraWRfaW5zdGFsbCYjMzQ7LAogICAgJiMzNDtjYWxsY2hhaW5fc3RvcmUmIzM0OywKICAgICYjMzQ7Y2FsbGNoYWluX2ZpbmFsaXplJiMzNDssCiAgICAmIzM0O19fYnBmX2dldF9zdGFjayYjMzQ7LAogICAgJiMzNDtfX2JwZl9nZXRfc3RhY2tfcGUmIzM0OywKICAgICYjMzQ7X19icGZfZ2V0X3Rhc2tfc3RhY2smIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSBCUEYgc3RhY2ttYXAgYW5kIHN0YWNraWQgaGVscGVyIGZ1bmN0aW9ucywgaW50cm9kdWNpbmcgbmV3IGludGVybmFsIGhlbHBlciBmdW5jdGlvbnMgbGlrZSBgc3RhY2tpZF9mYXN0cGF0aGAsIGBzdGFja2lkX25ld19idWNrZXRgLCBgc3RhY2tpZF9pbnN0YWxsYCwgYGNhbGxjaGFpbl9zdG9yZWAsIGFuZCBgY2FsbGNoYWluX2ZpbmFsaXplYC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIEJQRiBzdWJzeXN0ZW0gdGhhdCBoYW5kbGVzIHN0YWNrIHRyYWNlcyBhbmQgcGVyZiBldmVudCBjYWxsY2hhaW5zLiBJdCBpcyBpbXBvcnRhbnQgdG8gZnV6eiB0aGVzZSBjaGFuZ2VzIHRvIGVuc3VyZSBubyByZWdyZXNzaW9ucywgbWVtb3J5IGxlYWtzLCBvciBjb25jdXJyZW5jeSBpc3N1ZXMgYXJlIGludHJvZHVjZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjAgMTA6NDk8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBjYWU5NTRjOTVjZTcyYmE5MjkxODA3YmEzY2M1YWRjNmNhZWY5YTk4XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBKdWwgMjAgMTA6NDk6NTYgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9zdGFja21hcC5jIGIva2VybmVsL2JwZi9zdGFja21hcC5jXG5pbmRleCA0MWZlODdkNzMwMmYyMi4uMzdmOGU0NjMxOWIzNGYgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvYnBmL3N0YWNrbWFwLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9icGYvc3RhY2ttYXAuY1xuQEAgLTUwNCw3OCAmIzQzOzUwNCwxMTYgQEAgZ2V0X2NhbGxjaGFpbl9lbnRyeV9mb3JfdGFzayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssIHUzMiBtYXhfZGVwdGgpXG4gI2VuZGlmXG4gfVxuIFxuLXN0YXRpYyBsb25nIF9fYnBmX2dldF9zdGFja2lkKHN0cnVjdCBicGZfbWFwICptYXAsXG4tXHRcdFx0ICAgICAgc3RydWN0IHBlcmZfY2FsbGNoYWluX2VudHJ5ICp0cmFjZSwgdTY0IGZsYWdzKVxuJiM0MztzdHJ1Y3Qgc3RhY2tpZCB7XG4mIzQzO1x0c3RydWN0IHN0YWNrX21hcF9idWNrZXQgKmJ1Y2tldDtcbiYjNDM7XHR1NjQgKmlwcztcbiYjNDM7XHR1MzIgIG5yO1xuJiM0MztcdHUzMiAgbGVuO1xuJiM0MztcdHUzMiAgaGFzaDtcbiYjNDM7XHR1MzIgIGlkO1xuJiM0MztcdGJvb2wgaGFzaF9tYXRjaGVzO1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7c3RhdGljIGludCBzdGFja2lkX2luaXQoc3RydWN0IHN0YWNraWQgKnN0YWNraWQsIHN0cnVjdCBicGZfbWFwICptYXAsXG4mIzQzO1x0XHRcdHN0cnVjdCBwZXJmX2NhbGxjaGFpbl9lbnRyeSAqdHJhY2UsIHU2NCBmbGFncylcbiB7XG4gXHRzdHJ1Y3QgYnBmX3N0YWNrX21hcCAqc21hcCA9IGNvbnRhaW5lcl9vZihtYXAsIHN0cnVjdCBicGZfc3RhY2tfbWFwLCBtYXApO1xuLVx0c3RydWN0IHN0YWNrX21hcF9idWNrZXQgKmJ1Y2tldCwgKm5ld19idWNrZXQsICpvbGRfYnVja2V0O1xuLVx0dTMyIGhhc2gsIGlkLCB0cmFjZV9uciwgdHJhY2VfbGVuLCBpLCBtYXhfZGVwdGg7XG4gXHR1MzIgc2tpcCA9IGZsYWdzIFx1MDAyNiBCUEZfRl9TS0lQX0ZJRUxEX01BU0s7XG4tXHRib29sIHVzZXIgPSBmbGFncyBcdTAwMjYgQlBGX0ZfVVNFUl9TVEFDSztcbi1cdHU2NCAqaXBzO1xuLVx0Ym9vbCBoYXNoX21hdGNoZXM7XG4mIzQzO1x0dTMyIG1heF9kZXB0aDtcbiBcbiBcdGlmICh0cmFjZS1cdTAwM2VuciBcdTAwM2M9IHNraXApXG4gXHRcdC8qIHNraXBwaW5nIG1vcmUgdGhhbiB1c2FibGUgc3RhY2sgdHJhY2UgKi9cbiBcdFx0cmV0dXJuIC1FRkFVTFQ7XG4gXG4gXHRtYXhfZGVwdGggPSBzdGFja19tYXBfY2FsY3VsYXRlX21heF9kZXB0aChtYXAtXHUwMDNldmFsdWVfc2l6ZSwgc3RhY2tfbWFwX2RhdGFfc2l6ZShtYXApLCBmbGFncyk7XG4tXHR0cmFjZV9uciA9IG1pbl90KHUzMiwgdHJhY2UtXHUwMDNlbnIgLSBza2lwLCBtYXhfZGVwdGggLSBza2lwKTtcbi1cdHRyYWNlX2xlbiA9IHRyYWNlX25yICogc2l6ZW9mKHU2NCk7XG4tXHRpcHMgPSB0cmFjZS1cdTAwM2VpcCAmIzQzOyBza2lwO1xuLVx0aGFzaCA9IGpoYXNoMigodTMyICopaXBzLCB0cmFjZV9sZW4gLyBzaXplb2YodTMyKSwgMCk7XG4tXHRpZCA9IGhhc2ggXHUwMDI2IChzbWFwLVx1MDAzZW5fYnVja2V0cyAtIDEpO1xuLVx0YnVja2V0ID0gUkVBRF9PTkNFKHNtYXAtXHUwMDNlYnVja2V0c1tpZF0pO1xuJiM0MztcdHN0YWNraWQtXHUwMDNlbnIgPSBtaW5fdCh1MzIsIHRyYWNlLVx1MDAzZW5yIC0gc2tpcCwgbWF4X2RlcHRoIC0gc2tpcCk7XG4mIzQzO1x0c3RhY2tpZC1cdTAwM2VsZW4gPSBzdGFja2lkLVx1MDAzZW5yICogc2l6ZW9mKHU2NCk7XG4mIzQzO1x0c3RhY2tpZC1cdTAwM2VpcHMgPSB0cmFjZS1cdTAwM2VpcCAmIzQzOyBza2lwO1xuJiM0MztcdHN0YWNraWQtXHUwMDNlaGFzaCA9IGpoYXNoMigodTMyICopc3RhY2tpZC1cdTAwM2VpcHMsIHN0YWNraWQtXHUwMDNlbGVuIC8gc2l6ZW9mKHUzMiksIDApO1xuJiM0MztcdHN0YWNraWQtXHUwMDNlaWQgPSBzdGFja2lkLVx1MDAzZWhhc2ggXHUwMDI2IChzbWFwLVx1MDAzZW5fYnVja2V0cyAtIDEpO1xuJiM0MztcdHN0YWNraWQtXHUwMDNlYnVja2V0ID0gUkVBRF9PTkNFKHNtYXAtXHUwMDNlYnVja2V0c1tzdGFja2lkLVx1MDAzZWlkXSk7XG4mIzQzO1x0c3RhY2tpZC1cdTAwM2VoYXNoX21hdGNoZXMgPSBzdGFja2lkLVx1MDAzZWJ1Y2tldCBcdTAwMjZcdTAwMjYgc3RhY2tpZC1cdTAwM2VidWNrZXQtXHUwMDNlaGFzaCA9PSBzdGFja2lkLVx1MDAzZWhhc2g7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgc3RhY2tpZF9mYXN0cGF0aChzdHJ1Y3Qgc3RhY2tpZCAqc3RhY2tpZCwgc3RydWN0IGJwZl9tYXAgKm1hcCxcbiYjNDM7XHRcdFx0ICAgIHN0cnVjdCBwZXJmX2NhbGxjaGFpbl9lbnRyeSAqdHJhY2UsIHU2NCBmbGFncylcbiYjNDM7e1xuJiM0MztcdGludCBlcnI7XG4mIzQzO1xuJiM0MztcdGVyciA9IHN0YWNraWRfaW5pdChzdGFja2lkLCBtYXAsIHRyYWNlLCBmbGFncyk7XG4mIzQzO1x0aWYgKGVycilcbiYjNDM7XHRcdHJldHVybiBlcnI7XG4gXG4tXHRoYXNoX21hdGNoZXMgPSBidWNrZXQgXHUwMDI2XHUwMDI2IGJ1Y2tldC1cdTAwM2VoYXNoID09IGhhc2g7XG4gXHQvKiBmYXN0IGNtcCAqL1xuLVx0aWYgKGhhc2hfbWF0Y2hlcyBcdTAwMjZcdTAwMjYgZmxhZ3MgXHUwMDI2IEJQRl9GX0ZBU1RfU1RBQ0tfQ01QKVxuLVx0XHRyZXR1cm4gaWQ7XG4mIzQzO1x0aWYgKHN0YWNraWQtXHUwMDNlaGFzaF9tYXRjaGVzIFx1MDAyNlx1MDAyNiBmbGFncyBcdTAwMjYgQlBGX0ZfRkFTVF9TVEFDS19DTVApXG4mIzQzO1x0XHRyZXR1cm4gc3RhY2tpZC1cdTAwM2VpZDtcbiYjNDM7XG4mIzQzO1x0aWYgKHN0YWNrX21hcF91c2VfYnVpbGRfaWQobWFwKSlcbiYjNDM7XHRcdHJldHVybiAtRU5PRU5UO1xuJiM0MztcdGlmIChzdGFja2lkLVx1MDAzZWhhc2hfbWF0Y2hlcyBcdTAwMjZcdTAwMjYgc3RhY2tpZC1cdTAwM2VidWNrZXQtXHUwMDNlbnIgPT0gc3RhY2tpZC1cdTAwM2VuciBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgbWVtY21wKHN0YWNraWQtXHUwMDNlYnVja2V0LVx1MDAzZWRhdGEsIHN0YWNraWQtXHUwMDNlaXBzLCBzdGFja2lkLVx1MDAzZWxlbikgPT0gMClcbiYjNDM7XHRcdHJldHVybiBzdGFja2lkLVx1MDAzZWlkO1xuJiM0MztcdGlmIChzdGFja2lkLVx1MDAzZWJ1Y2tldCBcdTAwMjZcdTAwMjYgIShmbGFncyBcdTAwMjYgQlBGX0ZfUkVVU0VfU1RBQ0tJRCkpXG4mIzQzO1x0XHRyZXR1cm4gLUVFWElTVDtcbiYjNDM7XHRyZXR1cm4gLUVOT0VOVDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHN0cnVjdCBzdGFja19tYXBfYnVja2V0ICpcbiYjNDM7c3RhY2tpZF9uZXdfYnVja2V0KHN0cnVjdCBzdGFja2lkICpzdGFja2lkLCBzdHJ1Y3QgYnBmX21hcCAqbWFwLFxuJiM0MztcdFx0ICAgc3RydWN0IHBlcmZfY2FsbGNoYWluX2VudHJ5ICp0cmFjZSwgdTY0IGZsYWdzKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGJwZl9zdGFja19tYXAgKnNtYXAgPSBjb250YWluZXJfb2YobWFwLCBzdHJ1Y3QgYnBmX3N0YWNrX21hcCwgbWFwKTtcbiYjNDM7XHRzdHJ1Y3QgYnBmX3N0YWNrX2J1aWxkX2lkICppZF9vZmZzO1xuJiM0MztcdHN0cnVjdCBzdGFja19tYXBfYnVja2V0ICpidWNrZXQ7XG4mIzQzO1x0dTMyIGk7XG4mIzQzO1xuJiM0MztcdGJ1Y2tldCA9IChzdHJ1Y3Qgc3RhY2tfbWFwX2J1Y2tldCAqKSBwY3B1X2ZyZWVsaXN0X3BvcChcdTAwMjZzbWFwLVx1MDAzZWZyZWVsaXN0KTtcbiYjNDM7XHRpZiAodW5saWtlbHkoIWJ1Y2tldCkpXG4mIzQzO1x0XHRyZXR1cm4gTlVMTDtcbiYjNDM7XG4mIzQzO1x0aWYgKHN0YWNrX21hcF91c2VfYnVpbGRfaWQobWFwKSkge1xuJiM0MztcdFx0aWRfb2ZmcyA9IChzdHJ1Y3QgYnBmX3N0YWNrX2J1aWxkX2lkICopYnVja2V0LVx1MDAzZWRhdGE7XG4mIzQzO1x0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBzdGFja2lkLVx1MDAzZW5yOyBpJiM0MzsmIzQzOylcbiYjNDM7XHRcdFx0aWRfb2Zmc1tpXS5pcCA9IHN0YWNraWQtXHUwMDNlaXBzW2ldO1xuJiM0MztcdH0gZWxzZSB7XG4mIzQzO1x0XHRtZW1jcHkoYnVja2V0LVx1MDAzZWRhdGEsIHN0YWNraWQtXHUwMDNlaXBzLCBzdGFja2lkLVx1MDAzZWxlbik7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRidWNrZXQtXHUwMDNlaGFzaCA9IHN0YWNraWQtXHUwMDNlaGFzaDtcbiYjNDM7XHRidWNrZXQtXHUwMDNlbnIgPSBzdGFja2lkLVx1MDAzZW5yO1xuJiM0MztcdHJldHVybiBidWNrZXQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBsb25nIHN0YWNraWRfaW5zdGFsbChzdHJ1Y3Qgc3RhY2tpZCAqc3RhY2tpZCwgc3RydWN0IGJwZl9tYXAgKm1hcCxcbiYjNDM7XHRcdFx0ICAgIHN0cnVjdCBzdGFja19tYXBfYnVja2V0ICpuZXdfYnVja2V0LCB1NjQgZmxhZ3MpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgYnBmX3N0YWNrX21hcCAqc21hcCA9IGNvbnRhaW5lcl9vZihtYXAsIHN0cnVjdCBicGZfc3RhY2tfbWFwLCBtYXApO1xuJiM0MztcdGJvb2wgdXNlciA9IGZsYWdzIFx1MDAyNiBCUEZfRl9VU0VSX1NUQUNLO1xuJiM0MztcdHN0cnVjdCBzdGFja19tYXBfYnVja2V0ICpvbGRfYnVja2V0O1xuJiM0MztcdHUzMiB0cmFjZV9sZW47XG4gXG4gXHRpZiAoc3RhY2tfbWFwX3VzZV9idWlsZF9pZChtYXApKSB7XG4gXHRcdHN0cnVjdCBicGZfc3RhY2tfYnVpbGRfaWQgKmlkX29mZnM7XG4gXG4tXHRcdC8qIGZvciBidWlsZF9pZCYjNDM7b2Zmc2V0LCBwb3AgYSBidWNrZXQgYmVmb3JlIHNsb3cgY21wICovXG4tXHRcdG5ld19idWNrZXQgPSAoc3RydWN0IHN0YWNrX21hcF9idWNrZXQgKilcbi1cdFx0XHRwY3B1X2ZyZWVsaXN0X3BvcChcdTAwMjZzbWFwLVx1MDAzZWZyZWVsaXN0KTtcbi1cdFx0aWYgKHVubGlrZWx5KCFuZXdfYnVja2V0KSlcbi1cdFx0XHRyZXR1cm4gLUVOT01FTTtcbi1cdFx0bmV3X2J1Y2tldC1cdTAwM2VuciA9IHRyYWNlX25yO1xuIFx0XHRpZF9vZmZzID0gKHN0cnVjdCBicGZfc3RhY2tfYnVpbGRfaWQgKiluZXdfYnVja2V0LVx1MDAzZWRhdGE7XG4tXHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHRyYWNlX25yOyBpJiM0MzsmIzQzOylcbi1cdFx0XHRpZF9vZmZzW2ldLmlwID0gaXBzW2ldO1xuLVx0XHRzdGFja19tYXBfZ2V0X2J1aWxkX2lkX29mZnNldChpZF9vZmZzLCB0cmFjZV9uciwgdXNlciwgZmFsc2UgLyogIW1heV9mYXVsdCAqLyk7XG4tXHRcdHRyYWNlX2xlbiA9IHRyYWNlX25yICogc2l6ZW9mKHN0cnVjdCBicGZfc3RhY2tfYnVpbGRfaWQpO1xuLVx0XHRpZiAoaGFzaF9tYXRjaGVzIFx1MDAyNlx1MDAyNiBidWNrZXQtXHUwMDNlbnIgPT0gdHJhY2VfbnIgXHUwMDI2XHUwMDI2XG4tXHRcdCAgICBtZW1jbXAoYnVja2V0LVx1MDAzZWRhdGEsIG5ld19idWNrZXQtXHUwMDNlZGF0YSwgdHJhY2VfbGVuKSA9PSAwKSB7XG4mIzQzO1x0XHRzdGFja19tYXBfZ2V0X2J1aWxkX2lkX29mZnNldChpZF9vZmZzLCBzdGFja2lkLVx1MDAzZW5yLCB1c2VyLCBmYWxzZSAvKiAhbWF5X2ZhdWx0ICovKTtcbiYjNDM7XHRcdHRyYWNlX2xlbiA9IHN0YWNraWQtXHUwMDNlbnIgKiBzaXplb2Yoc3RydWN0IGJwZl9zdGFja19idWlsZF9pZCk7XG4mIzQzO1x0XHRpZiAoc3RhY2tpZC1cdTAwM2VoYXNoX21hdGNoZXMgXHUwMDI2XHUwMDI2IHN0YWNraWQtXHUwMDNlYnVja2V0LVx1MDAzZW5yID09IHN0YWNraWQtXHUwMDNlbnIgXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHQgICAgbWVtY21wKHN0YWNraWQtXHUwMDNlYnVja2V0LVx1MDAzZWRhdGEsIG5ld19idWNrZXQtXHUwMDNlZGF0YSwgdHJhY2VfbGVuKSA9PSAwKSB7XG4gXHRcdFx0cGNwdV9mcmVlbGlzdF9wdXNoKFx1MDAyNnNtYXAtXHUwMDNlZnJlZWxpc3QsIFx1MDAyNm5ld19idWNrZXQtXHUwMDNlZm5vZGUpO1xuLVx0XHRcdHJldHVybiBpZDtcbiYjNDM7XHRcdFx0cmV0dXJuIHN0YWNraWQtXHUwMDNlaWQ7XG4gXHRcdH1cbi1cdFx0aWYgKGJ1Y2tldCBcdTAwMjZcdTAwMjYgIShmbGFncyBcdTAwMjYgQlBGX0ZfUkVVU0VfU1RBQ0tJRCkpIHtcbiYjNDM7XHRcdGlmIChzdGFja2lkLVx1MDAzZWJ1Y2tldCBcdTAwMjZcdTAwMjYgIShmbGFncyBcdTAwMjYgQlBGX0ZfUkVVU0VfU1RBQ0tJRCkpIHtcbiBcdFx0XHRwY3B1X2ZyZWVsaXN0X3B1c2goXHUwMDI2c21hcC1cdTAwM2VmcmVlbGlzdCwgXHUwMDI2bmV3X2J1Y2tldC1cdTAwM2Vmbm9kZSk7XG4gXHRcdFx0cmV0dXJuIC1FRVhJU1Q7XG4gXHRcdH1cbi1cdH0gZWxzZSB7XG4tXHRcdGlmIChoYXNoX21hdGNoZXMgXHUwMDI2XHUwMDI2IGJ1Y2tldC1cdTAwM2VuciA9PSB0cmFjZV9uciBcdTAwMjZcdTAwMjZcbi1cdFx0ICAgIG1lbWNtcChidWNrZXQtXHUwMDNlZGF0YSwgaXBzLCB0cmFjZV9sZW4pID09IDApXG4tXHRcdFx0cmV0dXJuIGlkO1xuLVx0XHRpZiAoYnVja2V0IFx1MDAyNlx1MDAyNiAhKGZsYWdzIFx1MDAyNiBCUEZfRl9SRVVTRV9TVEFDS0lEKSlcbi1cdFx0XHRyZXR1cm4gLUVFWElTVDtcbi1cbi1cdFx0bmV3X2J1Y2tldCA9IChzdHJ1Y3Qgc3RhY2tfbWFwX2J1Y2tldCAqKVxuLVx0XHRcdHBjcHVfZnJlZWxpc3RfcG9wKFx1MDAyNnNtYXAtXHUwMDNlZnJlZWxpc3QpO1xuLVx0XHRpZiAodW5saWtlbHkoIW5ld19idWNrZXQpKVxuLVx0XHRcdHJldHVybiAtRU5PTUVNO1xuLVx0XHRtZW1jcHkobmV3X2J1Y2tldC1cdTAwM2VkYXRhLCBpcHMsIHRyYWNlX2xlbik7XG4gXHR9XG4gXG4tXHRuZXdfYnVja2V0LVx1MDAzZWhhc2ggPSBoYXNoO1xuLVx0bmV3X2J1Y2tldC1cdTAwM2VuciA9IHRyYWNlX25yO1xuLVxuLVx0b2xkX2J1Y2tldCA9IHhjaGcoXHUwMDI2c21hcC1cdTAwM2VidWNrZXRzW2lkXSwgbmV3X2J1Y2tldCk7XG4mIzQzO1x0b2xkX2J1Y2tldCA9IHhjaGcoXHUwMDI2c21hcC1cdTAwM2VidWNrZXRzW3N0YWNraWQtXHUwMDNlaWRdLCBuZXdfYnVja2V0KTtcbiBcdGlmIChvbGRfYnVja2V0KVxuIFx0XHRwY3B1X2ZyZWVsaXN0X3B1c2goXHUwMDI2c21hcC1cdTAwM2VmcmVlbGlzdCwgXHUwMDI2b2xkX2J1Y2tldC1cdTAwM2Vmbm9kZSk7XG4tXHRyZXR1cm4gaWQ7XG4mIzQzO1x0cmV0dXJuIHN0YWNraWQtXHUwMDNlaWQ7XG4gfVxuIFxuIEJQRl9DQUxMXzMoYnBmX2dldF9zdGFja2lkLCBzdHJ1Y3QgcHRfcmVncyAqLCByZWdzLCBzdHJ1Y3QgYnBmX21hcCAqLCBtYXAsXG5AQCAtNTgzLDggJiM0Mzs2MjEsMTEgQEAgQlBGX0NBTExfMyhicGZfZ2V0X3N0YWNraWQsIHN0cnVjdCBwdF9yZWdzICosIHJlZ3MsIHN0cnVjdCBicGZfbWFwICosIG1hcCxcbiB7XG4gXHR1MzIgZWxlbV9zaXplID0gc3RhY2tfbWFwX2RhdGFfc2l6ZShtYXApO1xuIFx0Ym9vbCB1c2VyID0gZmxhZ3MgXHUwMDI2IEJQRl9GX1VTRVJfU1RBQ0s7XG4mIzQzO1x0c3RydWN0IHN0YWNrX21hcF9idWNrZXQgKm5ld19idWNrZXQ7XG4gXHRzdHJ1Y3QgcGVyZl9jYWxsY2hhaW5fZW50cnkgKnRyYWNlO1xuJiM0MztcdHN0cnVjdCBzdGFja2lkIHN0YWNraWQ7XG4gXHRib29sIGtlcm5lbCA9ICF1c2VyO1xuJiM0MztcdGludCBlcnIgPSAtRUZBVUxUO1xuIFx0dTMyIG1heF9kZXB0aDtcbiBcbiBcdGlmICh1bmxpa2VseShmbGFncyBcdTAwMjYgfihCUEZfRl9TS0lQX0ZJRUxEX01BU0sgfCBCUEZfRl9VU0VSX1NUQUNLIHxcbkBAIC01OTIsMTQgJiM0Mzs2MzMsMjkgQEAgQlBGX0NBTExfMyhicGZfZ2V0X3N0YWNraWQsIHN0cnVjdCBwdF9yZWdzICosIHJlZ3MsIHN0cnVjdCBicGZfbWFwICosIG1hcCxcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4gXHRtYXhfZGVwdGggPSBzdGFja19tYXBfY2FsY3VsYXRlX21heF9kZXB0aChtYXAtXHUwMDNldmFsdWVfc2l6ZSwgZWxlbV9zaXplLCBmbGFncyk7XG4mIzQzO1xuJiM0MztcdHByZWVtcHRfZGlzYWJsZSgpO1xuIFx0dHJhY2UgPSBnZXRfcGVyZl9jYWxsY2hhaW4ocmVncywga2VybmVsLCB1c2VyLCBtYXhfZGVwdGgsXG4gXHRcdFx0XHQgICBmYWxzZSwgZmFsc2UsIDApO1xuIFxuIFx0aWYgKHVubGlrZWx5KCF0cmFjZSkpXG4gXHRcdC8qIGNvdWxkbiYjMzk7dCBmZXRjaCB0aGUgc3RhY2sgdHJhY2UgKi9cbi1cdFx0cmV0dXJuIC1FRkFVTFQ7XG4mIzQzO1x0XHRnb3RvIG91dDtcbiYjNDM7XG4mIzQzO1x0ZXJyID0gc3RhY2tpZF9mYXN0cGF0aChcdTAwMjZzdGFja2lkLCBtYXAsIHRyYWNlLCBmbGFncyk7XG4mIzQzO1x0aWYgKGVyciAhPSAtRU5PRU5UKVxuJiM0MztcdFx0Z290byBvdXQ7XG4mIzQzO1xuJiM0MztcdG5ld19idWNrZXQgPSBzdGFja2lkX25ld19idWNrZXQoXHUwMDI2c3RhY2tpZCwgbWFwLCB0cmFjZSwgZmxhZ3MpO1xuJiM0MztcdGlmIChuZXdfYnVja2V0KSB7XG4mIzQzO1x0XHRwcmVlbXB0X2VuYWJsZSgpO1xuJiM0MztcdFx0cmV0dXJuIHN0YWNraWRfaW5zdGFsbChcdTAwMjZzdGFja2lkLCBtYXAsIG5ld19idWNrZXQsIGZsYWdzKTtcbiYjNDM7XHR9XG4mIzQzO1x0ZXJyID0gLUVOT01FTTtcbiBcbi1cdHJldHVybiBfX2JwZl9nZXRfc3RhY2tpZChtYXAsIHRyYWNlLCBmbGFncyk7XG4mIzQzO291dDpcbiYjNDM7XHRwcmVlbXB0X2VuYWJsZSgpO1xuJiM0MztcdHJldHVybiBlcnI7XG4gfVxuIFxuIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfZ2V0X3N0YWNraWRfcHJvdG8gPSB7XG5AQCAtNjI3LDcgJiM0Mzs2ODMsOSBAQCBCUEZfQ0FMTF8zKGJwZl9nZXRfc3RhY2tpZF9wZSwgc3RydWN0IGJwZl9wZXJmX2V2ZW50X2RhdGFfa2VybiAqLCBjdHgsXG4gXHQgICBzdHJ1Y3QgYnBmX21hcCAqLCBtYXAsIHU2NCwgZmxhZ3MpXG4ge1xuIFx0c3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50ID0gY3R4LVx1MDAzZWV2ZW50O1xuJiM0MztcdHN0cnVjdCBzdGFja19tYXBfYnVja2V0ICpuZXdfYnVja2V0O1xuIFx0c3RydWN0IHBlcmZfY2FsbGNoYWluX2VudHJ5ICp0cmFjZTtcbiYjNDM7XHRzdHJ1Y3Qgc3RhY2tpZCBzdGFja2lkO1xuIFx0Ym9vbCBrZXJuZWwsIHVzZXI7XG4gXHRfX3U2NCBucl9rZXJuZWw7XG4gXHRpbnQgcmV0O1xuQEAgLTY1Myw3ICYjNDM7NzExLDYgQEAgQlBGX0NBTExfMyhicGZfZ2V0X3N0YWNraWRfcGUsIHN0cnVjdCBicGZfcGVyZl9ldmVudF9kYXRhX2tlcm4gKiwgY3R4LFxuIFxuIFx0aWYgKGtlcm5lbCkge1xuIFx0XHR0cmFjZS1cdTAwM2VuciA9IG5yX2tlcm5lbDtcbi1cdFx0cmV0ID0gX19icGZfZ2V0X3N0YWNraWQobWFwLCB0cmFjZSwgZmxhZ3MpO1xuIFx0fSBlbHNlIHsgLyogdXNlciAqL1xuIFx0XHR1NjQgc2tpcCA9IGZsYWdzIFx1MDAyNiBCUEZfRl9TS0lQX0ZJRUxEX01BU0s7XG4gXG5AQCAtNjYyLDEyICYjNDM7NzE5LDIyIEBAIEJQRl9DQUxMXzMoYnBmX2dldF9zdGFja2lkX3BlLCBzdHJ1Y3QgYnBmX3BlcmZfZXZlbnRfZGF0YV9rZXJuICosIGN0eCxcbiBcdFx0XHRyZXR1cm4gLUVGQVVMVDtcbiBcbiBcdFx0ZmxhZ3MgPSAoZmxhZ3MgXHUwMDI2IH5CUEZfRl9TS0lQX0ZJRUxEX01BU0spIHwgc2tpcDtcbi1cdFx0cmV0ID0gX19icGZfZ2V0X3N0YWNraWQobWFwLCB0cmFjZSwgZmxhZ3MpO1xuIFx0fVxuIFxuJiM0MztcdHJldCA9IHN0YWNraWRfZmFzdHBhdGgoXHUwMDI2c3RhY2tpZCwgbWFwLCB0cmFjZSwgZmxhZ3MpO1xuJiM0MztcdGlmIChyZXQgIT0gLUVOT0VOVClcbiYjNDM7XHRcdGdvdG8gZXJyb3I7XG4mIzQzO1xuJiM0MztcdG5ld19idWNrZXQgPSBzdGFja2lkX25ld19idWNrZXQoXHUwMDI2c3RhY2tpZCwgbWFwLCB0cmFjZSwgZmxhZ3MpO1xuJiM0MztcdGlmIChuZXdfYnVja2V0KSB7XG4mIzQzO1x0XHR0cmFjZS1cdTAwM2VuciA9IG5yO1xuJiM0MztcdFx0cmV0dXJuIHN0YWNraWRfaW5zdGFsbChcdTAwMjZzdGFja2lkLCBtYXAsIG5ld19idWNrZXQsIGZsYWdzKTtcbiYjNDM7XHR9XG4mIzQzO1x0cmV0ID0gLUVOT01FTTtcbiYjNDM7XG4mIzQzO2Vycm9yOlxuIFx0LyogcmVzdG9yZSBuciAqL1xuIFx0dHJhY2UtXHUwMDNlbnIgPSBucjtcbi1cbiBcdHJldHVybiByZXQ7XG4gfVxuIFxuQEAgLTY4MCwxOSAmIzQzOzc0Nyw1MyBAQCBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX2dldF9zdGFja2lkX3Byb3RvX3BlID0ge1xuIFx0LmFyZzNfdHlwZVx0PSBBUkdfQU5ZVEhJTkcsXG4gfTtcbiBcbiYjNDM7c3RhdGljIHUzMiBjYWxsY2hhaW5fc3RvcmUoc3RydWN0IHBlcmZfY2FsbGNoYWluX2VudHJ5ICp0cmFjZSwgdm9pZCAqYnVmLCB1MzIgc2l6ZSxcbiYjNDM7XHRcdFx0ICAgdTMyIGVsZW1fc2l6ZSwgdTY0IGZsYWdzKVxuJiM0Mzt7XG4mIzQzO1x0Ym9vbCB1c2VyX2J1aWxkX2lkID0gZmxhZ3MgXHUwMDI2IEJQRl9GX1VTRVJfQlVJTERfSUQ7XG4mIzQzO1x0dTMyIHNraXAgPSBmbGFncyBcdTAwMjYgQlBGX0ZfU0tJUF9GSUVMRF9NQVNLO1xuJiM0MztcdHUzMiB0cmFjZV9uciwgY29weV9sZW47XG4mIzQzO1x0dTY0ICppcHM7XG4mIzQzO1xuJiM0MztcdHRyYWNlX25yID0gdHJhY2UtXHUwMDNlbnIgLSBza2lwO1xuJiM0MztcdGNvcHlfbGVuID0gdHJhY2VfbnIgKiBlbGVtX3NpemU7XG4mIzQzO1xuJiM0MztcdGlwcyA9IHRyYWNlLVx1MDAzZWlwICYjNDM7IHNraXA7XG4mIzQzO1x0aWYgKHVzZXJfYnVpbGRfaWQpIHtcbiYjNDM7XHRcdHN0cnVjdCBicGZfc3RhY2tfYnVpbGRfaWQgKmlkX29mZnMgPSBidWY7XG4mIzQzO1xuJiM0MztcdFx0Zm9yICh1MzIgaSA9IDA7IGkgXHUwMDNjIHRyYWNlX25yOyBpJiM0MzsmIzQzOylcbiYjNDM7XHRcdFx0aWRfb2Zmc1tpXS5pcCA9IGlwc1tpXTtcbiYjNDM7XHR9IGVsc2Uge1xuJiM0MztcdFx0bWVtY3B5KGJ1ZiwgaXBzLCBjb3B5X2xlbik7XG4mIzQzO1x0fVxuJiM0MztcdHJldHVybiB0cmFjZV9ucjtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGxvbmcgY2FsbGNoYWluX2ZpbmFsaXplKHZvaWQgKmJ1ZiwgdTMyIHNpemUsIHUzMiB0cmFjZV9uciwgdTMyIGVsZW1fc2l6ZSxcbiYjNDM7XHRcdFx0ICAgICAgIGJvb2wgdXNlcl9idWlsZF9pZCwgYm9vbCB1c2VyLCBib29sIG1heV9mYXVsdClcbiYjNDM7e1xuJiM0MztcdHUzMiBjb3B5X2xlbiA9IHRyYWNlX25yICogZWxlbV9zaXplO1xuJiM0MztcbiYjNDM7XHRpZiAodXNlcl9idWlsZF9pZClcbiYjNDM7XHRcdHN0YWNrX21hcF9nZXRfYnVpbGRfaWRfb2Zmc2V0KGJ1ZiwgdHJhY2VfbnIsIHVzZXIsIG1heV9mYXVsdCk7XG4mIzQzO1xuJiM0MztcdGlmIChzaXplIFx1MDAzZSBjb3B5X2xlbilcbiYjNDM7XHRcdG1lbXNldChidWYgJiM0MzsgY29weV9sZW4sIDAsIHNpemUgLSBjb3B5X2xlbik7XG4mIzQzO1x0cmV0dXJuIGNvcHlfbGVuO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBsb25nIF9fYnBmX2dldF9zdGFjayhzdHJ1Y3QgcHRfcmVncyAqcmVncywgc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLFxuLVx0XHRcdCAgICBzdHJ1Y3QgcGVyZl9jYWxsY2hhaW5fZW50cnkgKnRyYWNlX2luLFxuIFx0XHRcdCAgICB2b2lkICpidWYsIHUzMiBzaXplLCB1NjQgZmxhZ3MsIGJvb2wgbWF5X2ZhdWx0KVxuIHtcbi1cdHUzMiB0cmFjZV9uciwgY29weV9sZW4sIGVsZW1fc2l6ZSwgbWF4X2RlcHRoO1xuIFx0Ym9vbCB1c2VyX2J1aWxkX2lkID0gZmxhZ3MgXHUwMDI2IEJQRl9GX1VTRVJfQlVJTERfSUQ7XG4gXHRib29sIGNyb3NzdGFzayA9IHRhc2sgXHUwMDI2XHUwMDI2IHRhc2sgIT0gY3VycmVudDtcbiBcdHUzMiBza2lwID0gZmxhZ3MgXHUwMDI2IEJQRl9GX1NLSVBfRklFTERfTUFTSztcbiBcdGJvb2wgdXNlciA9IGZsYWdzIFx1MDAyNiBCUEZfRl9VU0VSX1NUQUNLO1xuIFx0c3RydWN0IHBlcmZfY2FsbGNoYWluX2VudHJ5ICp0cmFjZTtcbiYjNDM7XHR1MzIgdHJhY2VfbnIsIGVsZW1fc2l6ZSwgbWF4X2RlcHRoO1xuIFx0Ym9vbCBrZXJuZWwgPSAhdXNlcjtcbiBcdGludCBlcnIgPSAtRUlOVkFMO1xuLVx0dTY0ICppcHM7XG4gXG4gXHRpZiAodW5saWtlbHkoZmxhZ3MgXHUwMDI2IH4oQlBGX0ZfU0tJUF9GSUVMRF9NQVNLIHwgQlBGX0ZfVVNFUl9TVEFDSyB8XG4gXHRcdFx0ICAgICAgIEJQRl9GX1VTRVJfQlVJTERfSUQpKSlcbkBAIC03MTgsMTMgJiM0Mzs4MTksOSBAQCBzdGF0aWMgbG9uZyBfX2JwZl9nZXRfc3RhY2soc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzayxcbiBcbiBcdG1heF9kZXB0aCA9IHN0YWNrX21hcF9jYWxjdWxhdGVfbWF4X2RlcHRoKHNpemUsIGVsZW1fc2l6ZSwgZmxhZ3MpO1xuIFxuLVx0aWYgKG1heV9mYXVsdClcbi1cdFx0cmN1X3JlYWRfbG9jaygpOyAvKiBuZWVkIFJDVSBmb3IgcGVyZiYjMzk7cyBjYWxsY2hhaW4gYmVsb3cgKi9cbiYjNDM7XHRwcmVlbXB0X2Rpc2FibGUoKTtcbiBcbi1cdGlmICh0cmFjZV9pbikge1xuLVx0XHR0cmFjZSA9IHRyYWNlX2luO1xuLVx0XHR0cmFjZS1cdTAwM2VuciA9IG1pbl90KHUzMiwgdHJhY2UtXHUwMDNlbnIsIG1heF9kZXB0aCk7XG4tXHR9IGVsc2UgaWYgKGtlcm5lbCBcdTAwMjZcdTAwMjYgdGFzaykge1xuJiM0MztcdGlmIChrZXJuZWwgXHUwMDI2XHUwMDI2IHRhc2spIHtcbiBcdFx0dHJhY2UgPSBnZXRfY2FsbGNoYWluX2VudHJ5X2Zvcl90YXNrKHRhc2ssIG1heF9kZXB0aCk7XG4gXHR9IGVsc2Uge1xuIFx0XHR0cmFjZSA9IGdldF9wZXJmX2NhbGxjaGFpbihyZWdzLCBrZXJuZWwsIHVzZXIsIG1heF9kZXB0aCxcbkBAIC03MzIsMzUgJiM0Mzs4MjksMTYgQEAgc3RhdGljIGxvbmcgX19icGZfZ2V0X3N0YWNrKHN0cnVjdCBwdF9yZWdzICpyZWdzLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssXG4gXHR9XG4gXG4gXHRpZiAodW5saWtlbHkoIXRyYWNlKSB8fCB0cmFjZS1cdTAwM2VuciBcdTAwM2Mgc2tpcCkge1xuLVx0XHRpZiAobWF5X2ZhdWx0KVxuLVx0XHRcdHJjdV9yZWFkX3VubG9jaygpO1xuJiM0MztcdFx0cHJlZW1wdF9lbmFibGUoKTtcbiBcdFx0Z290byBlcnJfZmF1bHQ7XG4gXHR9XG4gXG4tXHR0cmFjZV9uciA9IHRyYWNlLVx1MDAzZW5yIC0gc2tpcDtcbi1cdGNvcHlfbGVuID0gdHJhY2VfbnIgKiBlbGVtX3NpemU7XG4tXG4tXHRpcHMgPSB0cmFjZS1cdTAwM2VpcCAmIzQzOyBza2lwO1xuLVx0aWYgKHVzZXJfYnVpbGRfaWQpIHtcbi1cdFx0c3RydWN0IGJwZl9zdGFja19idWlsZF9pZCAqaWRfb2ZmcyA9IGJ1Zjtcbi1cdFx0dTMyIGk7XG4tXG4tXHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHRyYWNlX25yOyBpJiM0MzsmIzQzOylcbi1cdFx0XHRpZF9vZmZzW2ldLmlwID0gaXBzW2ldO1xuLVx0fSBlbHNlIHtcbi1cdFx0bWVtY3B5KGJ1ZiwgaXBzLCBjb3B5X2xlbik7XG4tXHR9XG4tXG4tXHQvKiB0cmFjZS9pcHMgc2hvdWxkIG5vdCBiZSBkZXJlZmVyZW5jZWQgYWZ0ZXIgdGhpcyBwb2ludCAqL1xuLVx0aWYgKG1heV9mYXVsdClcbi1cdFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4mIzQzO1x0dHJhY2VfbnIgPSBjYWxsY2hhaW5fc3RvcmUodHJhY2UsIGJ1Ziwgc2l6ZSwgZWxlbV9zaXplLCBmbGFncyk7XG4gXG4tXHRpZiAodXNlcl9idWlsZF9pZClcbi1cdFx0c3RhY2tfbWFwX2dldF9idWlsZF9pZF9vZmZzZXQoYnVmLCB0cmFjZV9uciwgdXNlciwgbWF5X2ZhdWx0KTtcbiYjNDM7XHQvKiB0cmFjZSBzaG91bGQgbm90IGJlIGRlcmVmZXJlbmNlZCBhZnRlciB0aGlzIHBvaW50ICovXG4mIzQzO1x0cHJlZW1wdF9lbmFibGUoKTtcbiBcbi1cdGlmIChzaXplIFx1MDAzZSBjb3B5X2xlbilcbi1cdFx0bWVtc2V0KGJ1ZiAmIzQzOyBjb3B5X2xlbiwgMCwgc2l6ZSAtIGNvcHlfbGVuKTtcbi1cdHJldHVybiBjb3B5X2xlbjtcbiYjNDM7XHRyZXR1cm4gY2FsbGNoYWluX2ZpbmFsaXplKGJ1Ziwgc2l6ZSwgdHJhY2VfbnIsIGVsZW1fc2l6ZSwgdXNlcl9idWlsZF9pZCwgdXNlciwgbWF5X2ZhdWx0KTtcbiBcbiBlcnJfZmF1bHQ6XG4gXHRlcnIgPSAtRUZBVUxUO1xuQEAgLTc3Miw3ICYjNDM7ODUwLDcgQEAgc3RhdGljIGxvbmcgX19icGZfZ2V0X3N0YWNrKHN0cnVjdCBwdF9yZWdzICpyZWdzLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssXG4gQlBGX0NBTExfNChicGZfZ2V0X3N0YWNrLCBzdHJ1Y3QgcHRfcmVncyAqLCByZWdzLCB2b2lkICosIGJ1ZiwgdTMyLCBzaXplLFxuIFx0ICAgdTY0LCBmbGFncylcbiB7XG4tXHRyZXR1cm4gX19icGZfZ2V0X3N0YWNrKHJlZ3MsIE5VTEwsIE5VTEwsIGJ1Ziwgc2l6ZSwgZmxhZ3MsIGZhbHNlIC8qICFtYXlfZmF1bHQgKi8pO1xuJiM0MztcdHJldHVybiBfX2JwZl9nZXRfc3RhY2socmVncywgTlVMTCwgYnVmLCBzaXplLCBmbGFncywgZmFsc2UgLyogIW1heV9mYXVsdCAqLyk7XG4gfVxuIFxuIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfZ2V0X3N0YWNrX3Byb3RvID0ge1xuQEAgLTc4OCw3ICYjNDM7ODY2LDcgQEAgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9nZXRfc3RhY2tfcHJvdG8gPSB7XG4gQlBGX0NBTExfNChicGZfZ2V0X3N0YWNrX3NsZWVwYWJsZSwgc3RydWN0IHB0X3JlZ3MgKiwgcmVncywgdm9pZCAqLCBidWYsIHUzMiwgc2l6ZSxcbiBcdCAgIHU2NCwgZmxhZ3MpXG4ge1xuLVx0cmV0dXJuIF9fYnBmX2dldF9zdGFjayhyZWdzLCBOVUxMLCBOVUxMLCBidWYsIHNpemUsIGZsYWdzLCB0cnVlIC8qIG1heV9mYXVsdCAqLyk7XG4mIzQzO1x0cmV0dXJuIF9fYnBmX2dldF9zdGFjayhyZWdzLCBOVUxMLCBidWYsIHNpemUsIGZsYWdzLCB0cnVlIC8qIG1heV9mYXVsdCAqLyk7XG4gfVxuIFxuIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfZ2V0X3N0YWNrX3NsZWVwYWJsZV9wcm90byA9IHtcbkBAIC04MTIsNyAmIzQzOzg5MCw3IEBAIHN0YXRpYyBsb25nIF9fYnBmX2dldF90YXNrX3N0YWNrKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywgdm9pZCAqYnVmLCB1MzIgc2l6ZSxcbiBcbiBcdHJlZ3MgPSB0YXNrX3B0X3JlZ3ModGFzayk7XG4gXHRpZiAocmVncylcbi1cdFx0cmVzID0gX19icGZfZ2V0X3N0YWNrKHJlZ3MsIHRhc2ssIE5VTEwsIGJ1Ziwgc2l6ZSwgZmxhZ3MsIG1heV9mYXVsdCk7XG4mIzQzO1x0XHRyZXMgPSBfX2JwZl9nZXRfc3RhY2socmVncywgdGFzaywgYnVmLCBzaXplLCBmbGFncywgbWF5X2ZhdWx0KTtcbiBcdHB1dF90YXNrX3N0YWNrKHRhc2spO1xuIFxuIFx0cmV0dXJuIHJlcztcbkBAIC04NTIsNiAmIzQzOzkzMCwzMyBAQCBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX2dldF90YXNrX3N0YWNrX3NsZWVwYWJsZV9wcm90byA9IHtcbiBcdC5hcmc0X3R5cGVcdD0gQVJHX0FOWVRISU5HLFxuIH07XG4gXG4mIzQzO3N0YXRpYyBpbnQgX19icGZfZ2V0X3N0YWNrX3BlKHN0cnVjdCBwZXJmX2NhbGxjaGFpbl9lbnRyeSAqdHJhY2UsIHZvaWQgKmJ1ZiwgdTMyIHNpemUsXG4mIzQzO1x0XHRcdCAgICAgIHU2NCBmbGFncylcbiYjNDM7e1xuJiM0MztcdGJvb2wgdXNlcl9idWlsZF9pZCA9IGZsYWdzIFx1MDAyNiBCUEZfRl9VU0VSX0JVSUxEX0lEO1xuJiM0MztcdHU2NCBza2lwID0gZmxhZ3MgXHUwMDI2IEJQRl9GX1NLSVBfRklFTERfTUFTSztcbiYjNDM7XHRib29sIHVzZXIgPSBmbGFncyBcdTAwMjYgQlBGX0ZfVVNFUl9TVEFDSztcbiYjNDM7XHR1MzIgZWxlbV9zaXplLCBtYXhfZGVwdGgsIG5yX3RyYWNlO1xuJiM0MztcdGJvb2wga2VybmVsID0gIXVzZXI7XG4mIzQzO1xuJiM0MztcdGlmIChrZXJuZWwgXHUwMDI2XHUwMDI2IHVzZXJfYnVpbGRfaWQpXG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XG4mIzQzO1x0ZWxlbV9zaXplID0gdXNlcl9idWlsZF9pZCA/IHNpemVvZihzdHJ1Y3QgYnBmX3N0YWNrX2J1aWxkX2lkKSA6IHNpemVvZih1NjQpO1xuJiM0MztcdGlmICh1bmxpa2VseShzaXplICUgZWxlbV9zaXplKSlcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcbiYjNDM7XHRtYXhfZGVwdGggPSBzdGFja19tYXBfY2FsY3VsYXRlX21heF9kZXB0aChzaXplLCBlbGVtX3NpemUsIGZsYWdzKTtcbiYjNDM7XHR0cmFjZS1cdTAwM2VuciA9IG1pbl90KHUzMiwgdHJhY2UtXHUwMDNlbnIsIG1heF9kZXB0aCk7XG4mIzQzO1xuJiM0MztcdGlmICh0cmFjZS1cdTAwM2VuciBcdTAwM2Mgc2tpcClcbiYjNDM7XHRcdHJldHVybiAtRUZBVUxUO1xuJiM0MztcbiYjNDM7XHRucl90cmFjZSA9IGNhbGxjaGFpbl9zdG9yZSh0cmFjZSwgYnVmLCBzaXplLCBlbGVtX3NpemUsIGZsYWdzKTtcbiYjNDM7XHRyZXR1cm4gY2FsbGNoYWluX2ZpbmFsaXplKGJ1Ziwgc2l6ZSwgbnJfdHJhY2UsIGVsZW1fc2l6ZSwgdXNlcl9idWlsZF9pZCxcbiYjNDM7XHRcdFx0XHQgIHVzZXIsIGZhbHNlIC8qICFtYXlfZmF1bHQgKi8pO1xuJiM0Mzt9XG4mIzQzO1xuIEJQRl9DQUxMXzQoYnBmX2dldF9zdGFja19wZSwgc3RydWN0IGJwZl9wZXJmX2V2ZW50X2RhdGFfa2VybiAqLCBjdHgsXG4gXHQgICB2b2lkICosIGJ1ZiwgdTMyLCBzaXplLCB1NjQsIGZsYWdzKVxuIHtcbkBAIC04NjMsNyAmIzQzOzk2OCw3IEBAIEJQRl9DQUxMXzQoYnBmX2dldF9zdGFja19wZSwgc3RydWN0IGJwZl9wZXJmX2V2ZW50X2RhdGFfa2VybiAqLCBjdHgsXG4gXHRfX3U2NCBucl9rZXJuZWw7XG4gXG4gXHRpZiAoIShldmVudC1cdTAwM2VhdHRyLnNhbXBsZV90eXBlIFx1MDAyNiBQRVJGX1NBTVBMRV9DQUxMQ0hBSU4pKVxuLVx0XHRyZXR1cm4gX19icGZfZ2V0X3N0YWNrKHJlZ3MsIE5VTEwsIE5VTEwsIGJ1Ziwgc2l6ZSwgZmxhZ3MsIGZhbHNlIC8qICFtYXlfZmF1bHQgKi8pO1xuJiM0MztcdFx0cmV0dXJuIF9fYnBmX2dldF9zdGFjayhyZWdzLCBOVUxMLCBidWYsIHNpemUsIGZsYWdzLCBmYWxzZSAvKiAhbWF5X2ZhdWx0ICovKTtcbiBcbiBcdGlmICh1bmxpa2VseShmbGFncyBcdTAwMjYgfihCUEZfRl9TS0lQX0ZJRUxEX01BU0sgfCBCUEZfRl9VU0VSX1NUQUNLIHxcbiBcdFx0XHQgICAgICAgQlBGX0ZfVVNFUl9CVUlMRF9JRCkpKVxuQEAgLTg4Myw3ICYjNDM7OTg4LDcgQEAgQlBGX0NBTExfNChicGZfZ2V0X3N0YWNrX3BlLCBzdHJ1Y3QgYnBmX3BlcmZfZXZlbnRfZGF0YV9rZXJuICosIGN0eCxcbiBcdFx0X191NjQgbnIgPSB0cmFjZS1cdTAwM2VucjtcbiBcbiBcdFx0dHJhY2UtXHUwMDNlbnIgPSBucl9rZXJuZWw7XG4tXHRcdGVyciA9IF9fYnBmX2dldF9zdGFjayhyZWdzLCBOVUxMLCB0cmFjZSwgYnVmLCBzaXplLCBmbGFncywgZmFsc2UgLyogIW1heV9mYXVsdCAqLyk7XG4mIzQzO1x0XHRlcnIgPSBfX2JwZl9nZXRfc3RhY2tfcGUodHJhY2UsIGJ1Ziwgc2l6ZSwgZmxhZ3MpO1xuIFxuIFx0XHQvKiByZXN0b3JlIG5yICovXG4gXHRcdHRyYWNlLVx1MDAzZW5yID0gbnI7XG5AQCAtODkzLDE0ICYjNDM7OTk4LDEzIEBAIEJQRl9DQUxMXzQoYnBmX2dldF9zdGFja19wZSwgc3RydWN0IGJwZl9wZXJmX2V2ZW50X2RhdGFfa2VybiAqLCBjdHgsXG4gXHRcdHNraXAgJiM0Mzs9IG5yX2tlcm5lbDtcbiBcdFx0aWYgKHNraXAgXHUwMDNlIEJQRl9GX1NLSVBfRklFTERfTUFTSylcbiBcdFx0XHRnb3RvIGNsZWFyO1xuLVxuIFx0XHRmbGFncyA9IChmbGFncyBcdTAwMjYgfkJQRl9GX1NLSVBfRklFTERfTUFTSykgfCBza2lwO1xuLVx0XHRlcnIgPSBfX2JwZl9nZXRfc3RhY2socmVncywgTlVMTCwgdHJhY2UsIGJ1Ziwgc2l6ZSwgZmxhZ3MsIGZhbHNlIC8qICFtYXlfZmF1bHQgKi8pO1xuJiM0MztcdFx0ZXJyID0gX19icGZfZ2V0X3N0YWNrX3BlKHRyYWNlLCBidWYsIHNpemUsIGZsYWdzKTtcbiBcdH1cbi1cdHJldHVybiBlcnI7XG4gXG4gY2xlYXI6XG4tXHRtZW1zZXQoYnVmLCAwLCBzaXplKTtcbiYjNDM7XHRpZiAoZXJyIFx1MDAzYyAwKVxuJiM0MztcdFx0bWVtc2V0KGJ1ZiwgMCwgc2l6ZSk7XG4gXHRyZXR1cm4gZXJyO1xuIFxuIH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMCAxMDo0OTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCUEZfU1lTQ0FMTCYjMzQ7LAogICAgJiMzNDtQRVJGX0VWRU5UUyYjMzQ7LAogICAgJiMzNDtCUEZfRVZFTlRTJiMzNDssCiAgICAmIzM0O1NUQUNLVFJBQ0UmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDticGZfZ2V0X3N0YWNraWQmIzM0OywKICAgICYjMzQ7YnBmX2dldF9zdGFja2lkX3BlJiMzNDssCiAgICAmIzM0O2JwZl9nZXRfc3RhY2smIzM0OywKICAgICYjMzQ7YnBmX2dldF9zdGFja19zbGVlcGFibGUmIzM0OywKICAgICYjMzQ7YnBmX2dldF90YXNrX3N0YWNrJiMzNDssCiAgICAmIzM0O2JwZl9nZXRfdGFza19zdGFja19zbGVlcGFibGUmIzM0OywKICAgICYjMzQ7YnBmX2dldF9zdGFja19wZSYjMzQ7LAogICAgJiMzNDtzdGFja2lkX2Zhc3RwYXRoJiMzNDssCiAgICAmIzM0O3N0YWNraWRfbmV3X2J1Y2tldCYjMzQ7LAogICAgJiMzNDtzdGFja2lkX2luc3RhbGwmIzM0OywKICAgICYjMzQ7Y2FsbGNoYWluX3N0b3JlJiMzNDssCiAgICAmIzM0O2NhbGxjaGFpbl9maW5hbGl6ZSYjMzQ7LAogICAgJiMzNDtfX2JwZl9nZXRfc3RhY2smIzM0OywKICAgICYjMzQ7X19icGZfZ2V0X3N0YWNrX3BlJiMzNDssCiAgICAmIzM0O19fYnBmX2dldF90YXNrX3N0YWNrJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgQlBGIHN0YWNrbWFwIGFuZCBzdGFja2lkIGhlbHBlciBmdW5jdGlvbnMsIGludHJvZHVjaW5nIG5ldyBpbnRlcm5hbCBoZWxwZXIgZnVuY3Rpb25zIGxpa2UgYHN0YWNraWRfZmFzdHBhdGhgLCBgc3RhY2tpZF9uZXdfYnVja2V0YCwgYHN0YWNraWRfaW5zdGFsbGAsIGBjYWxsY2hhaW5fc3RvcmVgLCBhbmQgYGNhbGxjaGFpbl9maW5hbGl6ZWAuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBCUEYgc3Vic3lzdGVtIHRoYXQgaGFuZGxlcyBzdGFjayB0cmFjZXMgYW5kIHBlcmYgZXZlbnQgY2FsbGNoYWlucy4gSXQgaXMgaW1wb3J0YW50IHRvIGZ1enogdGhlc2UgY2hhbmdlcyB0byBlbnN1cmUgbm8gcmVncmVzc2lvbnMsIG1lbW9yeSBsZWFrcywgb3IgY29uY3VycmVuY3kgaXNzdWVzIGFyZSBpbnRyb2R1Y2VkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdAogICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksCiAgIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBjYWU5NTRjOTVjZTcyYmE5MjkxODA3YmEzY2M1YWRjNmNhZWY5YTk4CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIE1vbiBKdWwgMjAgMTA6NDk6NTYgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL3N0YWNrbWFwLmMgYi9rZXJuZWwvYnBmL3N0YWNrbWFwLmMKaW5kZXggNDFmZTg3ZDczMDJmMjIuLjM3ZjhlNDYzMTliMzRmIDEwMDY0NAotLS0gYS9rZXJuZWwvYnBmL3N0YWNrbWFwLmMKJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2JwZi9zdGFja21hcC5jCkBAIC01MDQsNzggJiM0Mzs1MDQsMTE2IEBAIGdldF9jYWxsY2hhaW5fZW50cnlfZm9yX3Rhc2soc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLCB1MzIgbWF4X2RlcHRoKQogI2VuZGlmCiB9CiAKLXN0YXRpYyBsb25nIF9fYnBmX2dldF9zdGFja2lkKHN0cnVjdCBicGZfbWFwICptYXAsCi0JCQkgICAgICBzdHJ1Y3QgcGVyZl9jYWxsY2hhaW5fZW50cnkgKnRyYWNlLCB1NjQgZmxhZ3MpCiYjNDM7c3RydWN0IHN0YWNraWQgewomIzQzOwlzdHJ1Y3Qgc3RhY2tfbWFwX2J1Y2tldCAqYnVja2V0OwomIzQzOwl1NjQgKmlwczsKJiM0MzsJdTMyICBucjsKJiM0MzsJdTMyICBsZW47CiYjNDM7CXUzMiAgaGFzaDsKJiM0MzsJdTMyICBpZDsKJiM0MzsJYm9vbCBoYXNoX21hdGNoZXM7CiYjNDM7fTsKJiM0MzsKJiM0MztzdGF0aWMgaW50IHN0YWNraWRfaW5pdChzdHJ1Y3Qgc3RhY2tpZCAqc3RhY2tpZCwgc3RydWN0IGJwZl9tYXAgKm1hcCwKJiM0MzsJCQlzdHJ1Y3QgcGVyZl9jYWxsY2hhaW5fZW50cnkgKnRyYWNlLCB1NjQgZmxhZ3MpCiB7CiAJc3RydWN0IGJwZl9zdGFja19tYXAgKnNtYXAgPSBjb250YWluZXJfb2YobWFwLCBzdHJ1Y3QgYnBmX3N0YWNrX21hcCwgbWFwKTsKLQlzdHJ1Y3Qgc3RhY2tfbWFwX2J1Y2tldCAqYnVja2V0LCAqbmV3X2J1Y2tldCwgKm9sZF9idWNrZXQ7Ci0JdTMyIGhhc2gsIGlkLCB0cmFjZV9uciwgdHJhY2VfbGVuLCBpLCBtYXhfZGVwdGg7CiAJdTMyIHNraXAgPSBmbGFncyAmYW1wOyBCUEZfRl9TS0lQX0ZJRUxEX01BU0s7Ci0JYm9vbCB1c2VyID0gZmxhZ3MgJmFtcDsgQlBGX0ZfVVNFUl9TVEFDSzsKLQl1NjQgKmlwczsKLQlib29sIGhhc2hfbWF0Y2hlczsKJiM0MzsJdTMyIG1heF9kZXB0aDsKIAogCWlmICh0cmFjZS0mZ3Q7bnIgJmx0Oz0gc2tpcCkKIAkJLyogc2tpcHBpbmcgbW9yZSB0aGFuIHVzYWJsZSBzdGFjayB0cmFjZSAqLwogCQlyZXR1cm4gLUVGQVVMVDsKIAogCW1heF9kZXB0aCA9IHN0YWNrX21hcF9jYWxjdWxhdGVfbWF4X2RlcHRoKG1hcC0mZ3Q7dmFsdWVfc2l6ZSwgc3RhY2tfbWFwX2RhdGFfc2l6ZShtYXApLCBmbGFncyk7Ci0JdHJhY2VfbnIgPSBtaW5fdCh1MzIsIHRyYWNlLSZndDtuciAtIHNraXAsIG1heF9kZXB0aCAtIHNraXApOwotCXRyYWNlX2xlbiA9IHRyYWNlX25yICogc2l6ZW9mKHU2NCk7Ci0JaXBzID0gdHJhY2UtJmd0O2lwICYjNDM7IHNraXA7Ci0JaGFzaCA9IGpoYXNoMigodTMyICopaXBzLCB0cmFjZV9sZW4gLyBzaXplb2YodTMyKSwgMCk7Ci0JaWQgPSBoYXNoICZhbXA7IChzbWFwLSZndDtuX2J1Y2tldHMgLSAxKTsKLQlidWNrZXQgPSBSRUFEX09OQ0Uoc21hcC0mZ3Q7YnVja2V0c1tpZF0pOwomIzQzOwlzdGFja2lkLSZndDtuciA9IG1pbl90KHUzMiwgdHJhY2UtJmd0O25yIC0gc2tpcCwgbWF4X2RlcHRoIC0gc2tpcCk7CiYjNDM7CXN0YWNraWQtJmd0O2xlbiA9IHN0YWNraWQtJmd0O25yICogc2l6ZW9mKHU2NCk7CiYjNDM7CXN0YWNraWQtJmd0O2lwcyA9IHRyYWNlLSZndDtpcCAmIzQzOyBza2lwOwomIzQzOwlzdGFja2lkLSZndDtoYXNoID0gamhhc2gyKCh1MzIgKilzdGFja2lkLSZndDtpcHMsIHN0YWNraWQtJmd0O2xlbiAvIHNpemVvZih1MzIpLCAwKTsKJiM0MzsJc3RhY2tpZC0mZ3Q7aWQgPSBzdGFja2lkLSZndDtoYXNoICZhbXA7IChzbWFwLSZndDtuX2J1Y2tldHMgLSAxKTsKJiM0MzsJc3RhY2tpZC0mZ3Q7YnVja2V0ID0gUkVBRF9PTkNFKHNtYXAtJmd0O2J1Y2tldHNbc3RhY2tpZC0mZ3Q7aWRdKTsKJiM0MzsJc3RhY2tpZC0mZ3Q7aGFzaF9tYXRjaGVzID0gc3RhY2tpZC0mZ3Q7YnVja2V0ICZhbXA7JmFtcDsgc3RhY2tpZC0mZ3Q7YnVja2V0LSZndDtoYXNoID09IHN0YWNraWQtJmd0O2hhc2g7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHN0YWNraWRfZmFzdHBhdGgoc3RydWN0IHN0YWNraWQgKnN0YWNraWQsIHN0cnVjdCBicGZfbWFwICptYXAsCiYjNDM7CQkJICAgIHN0cnVjdCBwZXJmX2NhbGxjaGFpbl9lbnRyeSAqdHJhY2UsIHU2NCBmbGFncykKJiM0Mzt7CiYjNDM7CWludCBlcnI7CiYjNDM7CiYjNDM7CWVyciA9IHN0YWNraWRfaW5pdChzdGFja2lkLCBtYXAsIHRyYWNlLCBmbGFncyk7CiYjNDM7CWlmIChlcnIpCiYjNDM7CQlyZXR1cm4gZXJyOwogCi0JaGFzaF9tYXRjaGVzID0gYnVja2V0ICZhbXA7JmFtcDsgYnVja2V0LSZndDtoYXNoID09IGhhc2g7CiAJLyogZmFzdCBjbXAgKi8KLQlpZiAoaGFzaF9tYXRjaGVzICZhbXA7JmFtcDsgZmxhZ3MgJmFtcDsgQlBGX0ZfRkFTVF9TVEFDS19DTVApCi0JCXJldHVybiBpZDsKJiM0MzsJaWYgKHN0YWNraWQtJmd0O2hhc2hfbWF0Y2hlcyAmYW1wOyZhbXA7IGZsYWdzICZhbXA7IEJQRl9GX0ZBU1RfU1RBQ0tfQ01QKQomIzQzOwkJcmV0dXJuIHN0YWNraWQtJmd0O2lkOwomIzQzOwomIzQzOwlpZiAoc3RhY2tfbWFwX3VzZV9idWlsZF9pZChtYXApKQomIzQzOwkJcmV0dXJuIC1FTk9FTlQ7CiYjNDM7CWlmIChzdGFja2lkLSZndDtoYXNoX21hdGNoZXMgJmFtcDsmYW1wOyBzdGFja2lkLSZndDtidWNrZXQtJmd0O25yID09IHN0YWNraWQtJmd0O25yICZhbXA7JmFtcDsKJiM0MzsJICAgIG1lbWNtcChzdGFja2lkLSZndDtidWNrZXQtJmd0O2RhdGEsIHN0YWNraWQtJmd0O2lwcywgc3RhY2tpZC0mZ3Q7bGVuKSA9PSAwKQomIzQzOwkJcmV0dXJuIHN0YWNraWQtJmd0O2lkOwomIzQzOwlpZiAoc3RhY2tpZC0mZ3Q7YnVja2V0ICZhbXA7JmFtcDsgIShmbGFncyAmYW1wOyBCUEZfRl9SRVVTRV9TVEFDS0lEKSkKJiM0MzsJCXJldHVybiAtRUVYSVNUOwomIzQzOwlyZXR1cm4gLUVOT0VOVDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHN0cnVjdCBzdGFja19tYXBfYnVja2V0ICoKJiM0MztzdGFja2lkX25ld19idWNrZXQoc3RydWN0IHN0YWNraWQgKnN0YWNraWQsIHN0cnVjdCBicGZfbWFwICptYXAsCiYjNDM7CQkgICBzdHJ1Y3QgcGVyZl9jYWxsY2hhaW5fZW50cnkgKnRyYWNlLCB1NjQgZmxhZ3MpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgYnBmX3N0YWNrX21hcCAqc21hcCA9IGNvbnRhaW5lcl9vZihtYXAsIHN0cnVjdCBicGZfc3RhY2tfbWFwLCBtYXApOwomIzQzOwlzdHJ1Y3QgYnBmX3N0YWNrX2J1aWxkX2lkICppZF9vZmZzOwomIzQzOwlzdHJ1Y3Qgc3RhY2tfbWFwX2J1Y2tldCAqYnVja2V0OwomIzQzOwl1MzIgaTsKJiM0MzsKJiM0MzsJYnVja2V0ID0gKHN0cnVjdCBzdGFja19tYXBfYnVja2V0ICopIHBjcHVfZnJlZWxpc3RfcG9wKCZhbXA7c21hcC0mZ3Q7ZnJlZWxpc3QpOwomIzQzOwlpZiAodW5saWtlbHkoIWJ1Y2tldCkpCiYjNDM7CQlyZXR1cm4gTlVMTDsKJiM0MzsKJiM0MzsJaWYgKHN0YWNrX21hcF91c2VfYnVpbGRfaWQobWFwKSkgewomIzQzOwkJaWRfb2ZmcyA9IChzdHJ1Y3QgYnBmX3N0YWNrX2J1aWxkX2lkICopYnVja2V0LSZndDtkYXRhOwomIzQzOwkJZm9yIChpID0gMDsgaSAmbHQ7IHN0YWNraWQtJmd0O25yOyBpJiM0MzsmIzQzOykKJiM0MzsJCQlpZF9vZmZzW2ldLmlwID0gc3RhY2tpZC0mZ3Q7aXBzW2ldOwomIzQzOwl9IGVsc2UgewomIzQzOwkJbWVtY3B5KGJ1Y2tldC0mZ3Q7ZGF0YSwgc3RhY2tpZC0mZ3Q7aXBzLCBzdGFja2lkLSZndDtsZW4pOwomIzQzOwl9CiYjNDM7CiYjNDM7CWJ1Y2tldC0mZ3Q7aGFzaCA9IHN0YWNraWQtJmd0O2hhc2g7CiYjNDM7CWJ1Y2tldC0mZ3Q7bnIgPSBzdGFja2lkLSZndDtucjsKJiM0MzsJcmV0dXJuIGJ1Y2tldDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGxvbmcgc3RhY2tpZF9pbnN0YWxsKHN0cnVjdCBzdGFja2lkICpzdGFja2lkLCBzdHJ1Y3QgYnBmX21hcCAqbWFwLAomIzQzOwkJCSAgICBzdHJ1Y3Qgc3RhY2tfbWFwX2J1Y2tldCAqbmV3X2J1Y2tldCwgdTY0IGZsYWdzKQomIzQzO3sKJiM0MzsJc3RydWN0IGJwZl9zdGFja19tYXAgKnNtYXAgPSBjb250YWluZXJfb2YobWFwLCBzdHJ1Y3QgYnBmX3N0YWNrX21hcCwgbWFwKTsKJiM0MzsJYm9vbCB1c2VyID0gZmxhZ3MgJmFtcDsgQlBGX0ZfVVNFUl9TVEFDSzsKJiM0MzsJc3RydWN0IHN0YWNrX21hcF9idWNrZXQgKm9sZF9idWNrZXQ7CiYjNDM7CXUzMiB0cmFjZV9sZW47CiAKIAlpZiAoc3RhY2tfbWFwX3VzZV9idWlsZF9pZChtYXApKSB7CiAJCXN0cnVjdCBicGZfc3RhY2tfYnVpbGRfaWQgKmlkX29mZnM7CiAKLQkJLyogZm9yIGJ1aWxkX2lkJiM0MztvZmZzZXQsIHBvcCBhIGJ1Y2tldCBiZWZvcmUgc2xvdyBjbXAgKi8KLQkJbmV3X2J1Y2tldCA9IChzdHJ1Y3Qgc3RhY2tfbWFwX2J1Y2tldCAqKQotCQkJcGNwdV9mcmVlbGlzdF9wb3AoJmFtcDtzbWFwLSZndDtmcmVlbGlzdCk7Ci0JCWlmICh1bmxpa2VseSghbmV3X2J1Y2tldCkpCi0JCQlyZXR1cm4gLUVOT01FTTsKLQkJbmV3X2J1Y2tldC0mZ3Q7bnIgPSB0cmFjZV9ucjsKIAkJaWRfb2ZmcyA9IChzdHJ1Y3QgYnBmX3N0YWNrX2J1aWxkX2lkICopbmV3X2J1Y2tldC0mZ3Q7ZGF0YTsKLQkJZm9yIChpID0gMDsgaSAmbHQ7IHRyYWNlX25yOyBpJiM0MzsmIzQzOykKLQkJCWlkX29mZnNbaV0uaXAgPSBpcHNbaV07Ci0JCXN0YWNrX21hcF9nZXRfYnVpbGRfaWRfb2Zmc2V0KGlkX29mZnMsIHRyYWNlX25yLCB1c2VyLCBmYWxzZSAvKiAhbWF5X2ZhdWx0ICovKTsKLQkJdHJhY2VfbGVuID0gdHJhY2VfbnIgKiBzaXplb2Yoc3RydWN0IGJwZl9zdGFja19idWlsZF9pZCk7Ci0JCWlmIChoYXNoX21hdGNoZXMgJmFtcDsmYW1wOyBidWNrZXQtJmd0O25yID09IHRyYWNlX25yICZhbXA7JmFtcDsKLQkJICAgIG1lbWNtcChidWNrZXQtJmd0O2RhdGEsIG5ld19idWNrZXQtJmd0O2RhdGEsIHRyYWNlX2xlbikgPT0gMCkgewomIzQzOwkJc3RhY2tfbWFwX2dldF9idWlsZF9pZF9vZmZzZXQoaWRfb2Zmcywgc3RhY2tpZC0mZ3Q7bnIsIHVzZXIsIGZhbHNlIC8qICFtYXlfZmF1bHQgKi8pOwomIzQzOwkJdHJhY2VfbGVuID0gc3RhY2tpZC0mZ3Q7bnIgKiBzaXplb2Yoc3RydWN0IGJwZl9zdGFja19idWlsZF9pZCk7CiYjNDM7CQlpZiAoc3RhY2tpZC0mZ3Q7aGFzaF9tYXRjaGVzICZhbXA7JmFtcDsgc3RhY2tpZC0mZ3Q7YnVja2V0LSZndDtuciA9PSBzdGFja2lkLSZndDtuciAmYW1wOyZhbXA7CiYjNDM7CQkgICAgbWVtY21wKHN0YWNraWQtJmd0O2J1Y2tldC0mZ3Q7ZGF0YSwgbmV3X2J1Y2tldC0mZ3Q7ZGF0YSwgdHJhY2VfbGVuKSA9PSAwKSB7CiAJCQlwY3B1X2ZyZWVsaXN0X3B1c2goJmFtcDtzbWFwLSZndDtmcmVlbGlzdCwgJmFtcDtuZXdfYnVja2V0LSZndDtmbm9kZSk7Ci0JCQlyZXR1cm4gaWQ7CiYjNDM7CQkJcmV0dXJuIHN0YWNraWQtJmd0O2lkOwogCQl9Ci0JCWlmIChidWNrZXQgJmFtcDsmYW1wOyAhKGZsYWdzICZhbXA7IEJQRl9GX1JFVVNFX1NUQUNLSUQpKSB7CiYjNDM7CQlpZiAoc3RhY2tpZC0mZ3Q7YnVja2V0ICZhbXA7JmFtcDsgIShmbGFncyAmYW1wOyBCUEZfRl9SRVVTRV9TVEFDS0lEKSkgewogCQkJcGNwdV9mcmVlbGlzdF9wdXNoKCZhbXA7c21hcC0mZ3Q7ZnJlZWxpc3QsICZhbXA7bmV3X2J1Y2tldC0mZ3Q7Zm5vZGUpOwogCQkJcmV0dXJuIC1FRVhJU1Q7CiAJCX0KLQl9IGVsc2UgewotCQlpZiAoaGFzaF9tYXRjaGVzICZhbXA7JmFtcDsgYnVja2V0LSZndDtuciA9PSB0cmFjZV9uciAmYW1wOyZhbXA7Ci0JCSAgICBtZW1jbXAoYnVja2V0LSZndDtkYXRhLCBpcHMsIHRyYWNlX2xlbikgPT0gMCkKLQkJCXJldHVybiBpZDsKLQkJaWYgKGJ1Y2tldCAmYW1wOyZhbXA7ICEoZmxhZ3MgJmFtcDsgQlBGX0ZfUkVVU0VfU1RBQ0tJRCkpCi0JCQlyZXR1cm4gLUVFWElTVDsKLQotCQluZXdfYnVja2V0ID0gKHN0cnVjdCBzdGFja19tYXBfYnVja2V0ICopCi0JCQlwY3B1X2ZyZWVsaXN0X3BvcCgmYW1wO3NtYXAtJmd0O2ZyZWVsaXN0KTsKLQkJaWYgKHVubGlrZWx5KCFuZXdfYnVja2V0KSkKLQkJCXJldHVybiAtRU5PTUVNOwotCQltZW1jcHkobmV3X2J1Y2tldC0mZ3Q7ZGF0YSwgaXBzLCB0cmFjZV9sZW4pOwogCX0KIAotCW5ld19idWNrZXQtJmd0O2hhc2ggPSBoYXNoOwotCW5ld19idWNrZXQtJmd0O25yID0gdHJhY2VfbnI7Ci0KLQlvbGRfYnVja2V0ID0geGNoZygmYW1wO3NtYXAtJmd0O2J1Y2tldHNbaWRdLCBuZXdfYnVja2V0KTsKJiM0MzsJb2xkX2J1Y2tldCA9IHhjaGcoJmFtcDtzbWFwLSZndDtidWNrZXRzW3N0YWNraWQtJmd0O2lkXSwgbmV3X2J1Y2tldCk7CiAJaWYgKG9sZF9idWNrZXQpCiAJCXBjcHVfZnJlZWxpc3RfcHVzaCgmYW1wO3NtYXAtJmd0O2ZyZWVsaXN0LCAmYW1wO29sZF9idWNrZXQtJmd0O2Zub2RlKTsKLQlyZXR1cm4gaWQ7CiYjNDM7CXJldHVybiBzdGFja2lkLSZndDtpZDsKIH0KIAogQlBGX0NBTExfMyhicGZfZ2V0X3N0YWNraWQsIHN0cnVjdCBwdF9yZWdzICosIHJlZ3MsIHN0cnVjdCBicGZfbWFwICosIG1hcCwKQEAgLTU4Myw4ICYjNDM7NjIxLDExIEBAIEJQRl9DQUxMXzMoYnBmX2dldF9zdGFja2lkLCBzdHJ1Y3QgcHRfcmVncyAqLCByZWdzLCBzdHJ1Y3QgYnBmX21hcCAqLCBtYXAsCiB7CiAJdTMyIGVsZW1fc2l6ZSA9IHN0YWNrX21hcF9kYXRhX3NpemUobWFwKTsKIAlib29sIHVzZXIgPSBmbGFncyAmYW1wOyBCUEZfRl9VU0VSX1NUQUNLOwomIzQzOwlzdHJ1Y3Qgc3RhY2tfbWFwX2J1Y2tldCAqbmV3X2J1Y2tldDsKIAlzdHJ1Y3QgcGVyZl9jYWxsY2hhaW5fZW50cnkgKnRyYWNlOwomIzQzOwlzdHJ1Y3Qgc3RhY2tpZCBzdGFja2lkOwogCWJvb2wga2VybmVsID0gIXVzZXI7CiYjNDM7CWludCBlcnIgPSAtRUZBVUxUOwogCXUzMiBtYXhfZGVwdGg7CiAKIAlpZiAodW5saWtlbHkoZmxhZ3MgJmFtcDsgfihCUEZfRl9TS0lQX0ZJRUxEX01BU0sgfCBCUEZfRl9VU0VSX1NUQUNLIHwKQEAgLTU5MiwxNCAmIzQzOzYzMywyOSBAQCBCUEZfQ0FMTF8zKGJwZl9nZXRfc3RhY2tpZCwgc3RydWN0IHB0X3JlZ3MgKiwgcmVncywgc3RydWN0IGJwZl9tYXAgKiwgbWFwLAogCQlyZXR1cm4gLUVJTlZBTDsKIAogCW1heF9kZXB0aCA9IHN0YWNrX21hcF9jYWxjdWxhdGVfbWF4X2RlcHRoKG1hcC0mZ3Q7dmFsdWVfc2l6ZSwgZWxlbV9zaXplLCBmbGFncyk7CiYjNDM7CiYjNDM7CXByZWVtcHRfZGlzYWJsZSgpOwogCXRyYWNlID0gZ2V0X3BlcmZfY2FsbGNoYWluKHJlZ3MsIGtlcm5lbCwgdXNlciwgbWF4X2RlcHRoLAogCQkJCSAgIGZhbHNlLCBmYWxzZSwgMCk7CiAKIAlpZiAodW5saWtlbHkoIXRyYWNlKSkKIAkJLyogY291bGRuJiMzOTt0IGZldGNoIHRoZSBzdGFjayB0cmFjZSAqLwotCQlyZXR1cm4gLUVGQVVMVDsKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwomIzQzOwllcnIgPSBzdGFja2lkX2Zhc3RwYXRoKCZhbXA7c3RhY2tpZCwgbWFwLCB0cmFjZSwgZmxhZ3MpOwomIzQzOwlpZiAoZXJyICE9IC1FTk9FTlQpCiYjNDM7CQlnb3RvIG91dDsKJiM0MzsKJiM0MzsJbmV3X2J1Y2tldCA9IHN0YWNraWRfbmV3X2J1Y2tldCgmYW1wO3N0YWNraWQsIG1hcCwgdHJhY2UsIGZsYWdzKTsKJiM0MzsJaWYgKG5ld19idWNrZXQpIHsKJiM0MzsJCXByZWVtcHRfZW5hYmxlKCk7CiYjNDM7CQlyZXR1cm4gc3RhY2tpZF9pbnN0YWxsKCZhbXA7c3RhY2tpZCwgbWFwLCBuZXdfYnVja2V0LCBmbGFncyk7CiYjNDM7CX0KJiM0MzsJZXJyID0gLUVOT01FTTsKIAotCXJldHVybiBfX2JwZl9nZXRfc3RhY2tpZChtYXAsIHRyYWNlLCBmbGFncyk7CiYjNDM7b3V0OgomIzQzOwlwcmVlbXB0X2VuYWJsZSgpOwomIzQzOwlyZXR1cm4gZXJyOwogfQogCiBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX2dldF9zdGFja2lkX3Byb3RvID0gewpAQCAtNjI3LDcgJiM0Mzs2ODMsOSBAQCBCUEZfQ0FMTF8zKGJwZl9nZXRfc3RhY2tpZF9wZSwgc3RydWN0IGJwZl9wZXJmX2V2ZW50X2RhdGFfa2VybiAqLCBjdHgsCiAJICAgc3RydWN0IGJwZl9tYXAgKiwgbWFwLCB1NjQsIGZsYWdzKQogewogCXN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCA9IGN0eC0mZ3Q7ZXZlbnQ7CiYjNDM7CXN0cnVjdCBzdGFja19tYXBfYnVja2V0ICpuZXdfYnVja2V0OwogCXN0cnVjdCBwZXJmX2NhbGxjaGFpbl9lbnRyeSAqdHJhY2U7CiYjNDM7CXN0cnVjdCBzdGFja2lkIHN0YWNraWQ7CiAJYm9vbCBrZXJuZWwsIHVzZXI7CiAJX191NjQgbnJfa2VybmVsOwogCWludCByZXQ7CkBAIC02NTMsNyAmIzQzOzcxMSw2IEBAIEJQRl9DQUxMXzMoYnBmX2dldF9zdGFja2lkX3BlLCBzdHJ1Y3QgYnBmX3BlcmZfZXZlbnRfZGF0YV9rZXJuICosIGN0eCwKIAogCWlmIChrZXJuZWwpIHsKIAkJdHJhY2UtJmd0O25yID0gbnJfa2VybmVsOwotCQlyZXQgPSBfX2JwZl9nZXRfc3RhY2tpZChtYXAsIHRyYWNlLCBmbGFncyk7CiAJfSBlbHNlIHsgLyogdXNlciAqLwogCQl1NjQgc2tpcCA9IGZsYWdzICZhbXA7IEJQRl9GX1NLSVBfRklFTERfTUFTSzsKIApAQCAtNjYyLDEyICYjNDM7NzE5LDIyIEBAIEJQRl9DQUxMXzMoYnBmX2dldF9zdGFja2lkX3BlLCBzdHJ1Y3QgYnBmX3BlcmZfZXZlbnRfZGF0YV9rZXJuICosIGN0eCwKIAkJCXJldHVybiAtRUZBVUxUOwogCiAJCWZsYWdzID0gKGZsYWdzICZhbXA7IH5CUEZfRl9TS0lQX0ZJRUxEX01BU0spIHwgc2tpcDsKLQkJcmV0ID0gX19icGZfZ2V0X3N0YWNraWQobWFwLCB0cmFjZSwgZmxhZ3MpOwogCX0KIAomIzQzOwlyZXQgPSBzdGFja2lkX2Zhc3RwYXRoKCZhbXA7c3RhY2tpZCwgbWFwLCB0cmFjZSwgZmxhZ3MpOwomIzQzOwlpZiAocmV0ICE9IC1FTk9FTlQpCiYjNDM7CQlnb3RvIGVycm9yOwomIzQzOwomIzQzOwluZXdfYnVja2V0ID0gc3RhY2tpZF9uZXdfYnVja2V0KCZhbXA7c3RhY2tpZCwgbWFwLCB0cmFjZSwgZmxhZ3MpOwomIzQzOwlpZiAobmV3X2J1Y2tldCkgewomIzQzOwkJdHJhY2UtJmd0O25yID0gbnI7CiYjNDM7CQlyZXR1cm4gc3RhY2tpZF9pbnN0YWxsKCZhbXA7c3RhY2tpZCwgbWFwLCBuZXdfYnVja2V0LCBmbGFncyk7CiYjNDM7CX0KJiM0MzsJcmV0ID0gLUVOT01FTTsKJiM0MzsKJiM0MztlcnJvcjoKIAkvKiByZXN0b3JlIG5yICovCiAJdHJhY2UtJmd0O25yID0gbnI7Ci0KIAlyZXR1cm4gcmV0OwogfQogCkBAIC02ODAsMTkgJiM0Mzs3NDcsNTMgQEAgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9nZXRfc3RhY2tpZF9wcm90b19wZSA9IHsKIAkuYXJnM190eXBlCT0gQVJHX0FOWVRISU5HLAogfTsKIAomIzQzO3N0YXRpYyB1MzIgY2FsbGNoYWluX3N0b3JlKHN0cnVjdCBwZXJmX2NhbGxjaGFpbl9lbnRyeSAqdHJhY2UsIHZvaWQgKmJ1ZiwgdTMyIHNpemUsCiYjNDM7CQkJICAgdTMyIGVsZW1fc2l6ZSwgdTY0IGZsYWdzKQomIzQzO3sKJiM0MzsJYm9vbCB1c2VyX2J1aWxkX2lkID0gZmxhZ3MgJmFtcDsgQlBGX0ZfVVNFUl9CVUlMRF9JRDsKJiM0MzsJdTMyIHNraXAgPSBmbGFncyAmYW1wOyBCUEZfRl9TS0lQX0ZJRUxEX01BU0s7CiYjNDM7CXUzMiB0cmFjZV9uciwgY29weV9sZW47CiYjNDM7CXU2NCAqaXBzOwomIzQzOwomIzQzOwl0cmFjZV9uciA9IHRyYWNlLSZndDtuciAtIHNraXA7CiYjNDM7CWNvcHlfbGVuID0gdHJhY2VfbnIgKiBlbGVtX3NpemU7CiYjNDM7CiYjNDM7CWlwcyA9IHRyYWNlLSZndDtpcCAmIzQzOyBza2lwOwomIzQzOwlpZiAodXNlcl9idWlsZF9pZCkgewomIzQzOwkJc3RydWN0IGJwZl9zdGFja19idWlsZF9pZCAqaWRfb2ZmcyA9IGJ1ZjsKJiM0MzsKJiM0MzsJCWZvciAodTMyIGkgPSAwOyBpICZsdDsgdHJhY2VfbnI7IGkmIzQzOyYjNDM7KQomIzQzOwkJCWlkX29mZnNbaV0uaXAgPSBpcHNbaV07CiYjNDM7CX0gZWxzZSB7CiYjNDM7CQltZW1jcHkoYnVmLCBpcHMsIGNvcHlfbGVuKTsKJiM0MzsJfQomIzQzOwlyZXR1cm4gdHJhY2VfbnI7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBsb25nIGNhbGxjaGFpbl9maW5hbGl6ZSh2b2lkICpidWYsIHUzMiBzaXplLCB1MzIgdHJhY2VfbnIsIHUzMiBlbGVtX3NpemUsCiYjNDM7CQkJICAgICAgIGJvb2wgdXNlcl9idWlsZF9pZCwgYm9vbCB1c2VyLCBib29sIG1heV9mYXVsdCkKJiM0Mzt7CiYjNDM7CXUzMiBjb3B5X2xlbiA9IHRyYWNlX25yICogZWxlbV9zaXplOwomIzQzOwomIzQzOwlpZiAodXNlcl9idWlsZF9pZCkKJiM0MzsJCXN0YWNrX21hcF9nZXRfYnVpbGRfaWRfb2Zmc2V0KGJ1ZiwgdHJhY2VfbnIsIHVzZXIsIG1heV9mYXVsdCk7CiYjNDM7CiYjNDM7CWlmIChzaXplICZndDsgY29weV9sZW4pCiYjNDM7CQltZW1zZXQoYnVmICYjNDM7IGNvcHlfbGVuLCAwLCBzaXplIC0gY29weV9sZW4pOwomIzQzOwlyZXR1cm4gY29weV9sZW47CiYjNDM7fQomIzQzOwogc3RhdGljIGxvbmcgX19icGZfZ2V0X3N0YWNrKHN0cnVjdCBwdF9yZWdzICpyZWdzLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssCi0JCQkgICAgc3RydWN0IHBlcmZfY2FsbGNoYWluX2VudHJ5ICp0cmFjZV9pbiwKIAkJCSAgICB2b2lkICpidWYsIHUzMiBzaXplLCB1NjQgZmxhZ3MsIGJvb2wgbWF5X2ZhdWx0KQogewotCXUzMiB0cmFjZV9uciwgY29weV9sZW4sIGVsZW1fc2l6ZSwgbWF4X2RlcHRoOwogCWJvb2wgdXNlcl9idWlsZF9pZCA9IGZsYWdzICZhbXA7IEJQRl9GX1VTRVJfQlVJTERfSUQ7CiAJYm9vbCBjcm9zc3Rhc2sgPSB0YXNrICZhbXA7JmFtcDsgdGFzayAhPSBjdXJyZW50OwogCXUzMiBza2lwID0gZmxhZ3MgJmFtcDsgQlBGX0ZfU0tJUF9GSUVMRF9NQVNLOwogCWJvb2wgdXNlciA9IGZsYWdzICZhbXA7IEJQRl9GX1VTRVJfU1RBQ0s7CiAJc3RydWN0IHBlcmZfY2FsbGNoYWluX2VudHJ5ICp0cmFjZTsKJiM0MzsJdTMyIHRyYWNlX25yLCBlbGVtX3NpemUsIG1heF9kZXB0aDsKIAlib29sIGtlcm5lbCA9ICF1c2VyOwogCWludCBlcnIgPSAtRUlOVkFMOwotCXU2NCAqaXBzOwogCiAJaWYgKHVubGlrZWx5KGZsYWdzICZhbXA7IH4oQlBGX0ZfU0tJUF9GSUVMRF9NQVNLIHwgQlBGX0ZfVVNFUl9TVEFDSyB8CiAJCQkgICAgICAgQlBGX0ZfVVNFUl9CVUlMRF9JRCkpKQpAQCAtNzE4LDEzICYjNDM7ODE5LDkgQEAgc3RhdGljIGxvbmcgX19icGZfZ2V0X3N0YWNrKHN0cnVjdCBwdF9yZWdzICpyZWdzLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssCiAKIAltYXhfZGVwdGggPSBzdGFja19tYXBfY2FsY3VsYXRlX21heF9kZXB0aChzaXplLCBlbGVtX3NpemUsIGZsYWdzKTsKIAotCWlmIChtYXlfZmF1bHQpCi0JCXJjdV9yZWFkX2xvY2soKTsgLyogbmVlZCBSQ1UgZm9yIHBlcmYmIzM5O3MgY2FsbGNoYWluIGJlbG93ICovCiYjNDM7CXByZWVtcHRfZGlzYWJsZSgpOwogCi0JaWYgKHRyYWNlX2luKSB7Ci0JCXRyYWNlID0gdHJhY2VfaW47Ci0JCXRyYWNlLSZndDtuciA9IG1pbl90KHUzMiwgdHJhY2UtJmd0O25yLCBtYXhfZGVwdGgpOwotCX0gZWxzZSBpZiAoa2VybmVsICZhbXA7JmFtcDsgdGFzaykgewomIzQzOwlpZiAoa2VybmVsICZhbXA7JmFtcDsgdGFzaykgewogCQl0cmFjZSA9IGdldF9jYWxsY2hhaW5fZW50cnlfZm9yX3Rhc2sodGFzaywgbWF4X2RlcHRoKTsKIAl9IGVsc2UgewogCQl0cmFjZSA9IGdldF9wZXJmX2NhbGxjaGFpbihyZWdzLCBrZXJuZWwsIHVzZXIsIG1heF9kZXB0aCwKQEAgLTczMiwzNSAmIzQzOzgyOSwxNiBAQCBzdGF0aWMgbG9uZyBfX2JwZl9nZXRfc3RhY2soc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywKIAl9CiAKIAlpZiAodW5saWtlbHkoIXRyYWNlKSB8fCB0cmFjZS0mZ3Q7bnIgJmx0OyBza2lwKSB7Ci0JCWlmIChtYXlfZmF1bHQpCi0JCQlyY3VfcmVhZF91bmxvY2soKTsKJiM0MzsJCXByZWVtcHRfZW5hYmxlKCk7CiAJCWdvdG8gZXJyX2ZhdWx0OwogCX0KIAotCXRyYWNlX25yID0gdHJhY2UtJmd0O25yIC0gc2tpcDsKLQljb3B5X2xlbiA9IHRyYWNlX25yICogZWxlbV9zaXplOwotCi0JaXBzID0gdHJhY2UtJmd0O2lwICYjNDM7IHNraXA7Ci0JaWYgKHVzZXJfYnVpbGRfaWQpIHsKLQkJc3RydWN0IGJwZl9zdGFja19idWlsZF9pZCAqaWRfb2ZmcyA9IGJ1ZjsKLQkJdTMyIGk7Ci0KLQkJZm9yIChpID0gMDsgaSAmbHQ7IHRyYWNlX25yOyBpJiM0MzsmIzQzOykKLQkJCWlkX29mZnNbaV0uaXAgPSBpcHNbaV07Ci0JfSBlbHNlIHsKLQkJbWVtY3B5KGJ1ZiwgaXBzLCBjb3B5X2xlbik7Ci0JfQotCi0JLyogdHJhY2UvaXBzIHNob3VsZCBub3QgYmUgZGVyZWZlcmVuY2VkIGFmdGVyIHRoaXMgcG9pbnQgKi8KLQlpZiAobWF5X2ZhdWx0KQotCQlyY3VfcmVhZF91bmxvY2soKTsKJiM0MzsJdHJhY2VfbnIgPSBjYWxsY2hhaW5fc3RvcmUodHJhY2UsIGJ1Ziwgc2l6ZSwgZWxlbV9zaXplLCBmbGFncyk7CiAKLQlpZiAodXNlcl9idWlsZF9pZCkKLQkJc3RhY2tfbWFwX2dldF9idWlsZF9pZF9vZmZzZXQoYnVmLCB0cmFjZV9uciwgdXNlciwgbWF5X2ZhdWx0KTsKJiM0MzsJLyogdHJhY2Ugc2hvdWxkIG5vdCBiZSBkZXJlZmVyZW5jZWQgYWZ0ZXIgdGhpcyBwb2ludCAqLwomIzQzOwlwcmVlbXB0X2VuYWJsZSgpOwogCi0JaWYgKHNpemUgJmd0OyBjb3B5X2xlbikKLQkJbWVtc2V0KGJ1ZiAmIzQzOyBjb3B5X2xlbiwgMCwgc2l6ZSAtIGNvcHlfbGVuKTsKLQlyZXR1cm4gY29weV9sZW47CiYjNDM7CXJldHVybiBjYWxsY2hhaW5fZmluYWxpemUoYnVmLCBzaXplLCB0cmFjZV9uciwgZWxlbV9zaXplLCB1c2VyX2J1aWxkX2lkLCB1c2VyLCBtYXlfZmF1bHQpOwogCiBlcnJfZmF1bHQ6CiAJZXJyID0gLUVGQVVMVDsKQEAgLTc3Miw3ICYjNDM7ODUwLDcgQEAgc3RhdGljIGxvbmcgX19icGZfZ2V0X3N0YWNrKHN0cnVjdCBwdF9yZWdzICpyZWdzLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssCiBCUEZfQ0FMTF80KGJwZl9nZXRfc3RhY2ssIHN0cnVjdCBwdF9yZWdzICosIHJlZ3MsIHZvaWQgKiwgYnVmLCB1MzIsIHNpemUsCiAJICAgdTY0LCBmbGFncykKIHsKLQlyZXR1cm4gX19icGZfZ2V0X3N0YWNrKHJlZ3MsIE5VTEwsIE5VTEwsIGJ1Ziwgc2l6ZSwgZmxhZ3MsIGZhbHNlIC8qICFtYXlfZmF1bHQgKi8pOwomIzQzOwlyZXR1cm4gX19icGZfZ2V0X3N0YWNrKHJlZ3MsIE5VTEwsIGJ1Ziwgc2l6ZSwgZmxhZ3MsIGZhbHNlIC8qICFtYXlfZmF1bHQgKi8pOwogfQogCiBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX2dldF9zdGFja19wcm90byA9IHsKQEAgLTc4OCw3ICYjNDM7ODY2LDcgQEAgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9nZXRfc3RhY2tfcHJvdG8gPSB7CiBCUEZfQ0FMTF80KGJwZl9nZXRfc3RhY2tfc2xlZXBhYmxlLCBzdHJ1Y3QgcHRfcmVncyAqLCByZWdzLCB2b2lkICosIGJ1ZiwgdTMyLCBzaXplLAogCSAgIHU2NCwgZmxhZ3MpCiB7Ci0JcmV0dXJuIF9fYnBmX2dldF9zdGFjayhyZWdzLCBOVUxMLCBOVUxMLCBidWYsIHNpemUsIGZsYWdzLCB0cnVlIC8qIG1heV9mYXVsdCAqLyk7CiYjNDM7CXJldHVybiBfX2JwZl9nZXRfc3RhY2socmVncywgTlVMTCwgYnVmLCBzaXplLCBmbGFncywgdHJ1ZSAvKiBtYXlfZmF1bHQgKi8pOwogfQogCiBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX2dldF9zdGFja19zbGVlcGFibGVfcHJvdG8gPSB7CkBAIC04MTIsNyAmIzQzOzg5MCw3IEBAIHN0YXRpYyBsb25nIF9fYnBmX2dldF90YXNrX3N0YWNrKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywgdm9pZCAqYnVmLCB1MzIgc2l6ZSwKIAogCXJlZ3MgPSB0YXNrX3B0X3JlZ3ModGFzayk7CiAJaWYgKHJlZ3MpCi0JCXJlcyA9IF9fYnBmX2dldF9zdGFjayhyZWdzLCB0YXNrLCBOVUxMLCBidWYsIHNpemUsIGZsYWdzLCBtYXlfZmF1bHQpOwomIzQzOwkJcmVzID0gX19icGZfZ2V0X3N0YWNrKHJlZ3MsIHRhc2ssIGJ1Ziwgc2l6ZSwgZmxhZ3MsIG1heV9mYXVsdCk7CiAJcHV0X3Rhc2tfc3RhY2sodGFzayk7CiAKIAlyZXR1cm4gcmVzOwpAQCAtODUyLDYgJiM0Mzs5MzAsMzMgQEAgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9nZXRfdGFza19zdGFja19zbGVlcGFibGVfcHJvdG8gPSB7CiAJLmFyZzRfdHlwZQk9IEFSR19BTllUSElORywKIH07CiAKJiM0MztzdGF0aWMgaW50IF9fYnBmX2dldF9zdGFja19wZShzdHJ1Y3QgcGVyZl9jYWxsY2hhaW5fZW50cnkgKnRyYWNlLCB2b2lkICpidWYsIHUzMiBzaXplLAomIzQzOwkJCSAgICAgIHU2NCBmbGFncykKJiM0Mzt7CiYjNDM7CWJvb2wgdXNlcl9idWlsZF9pZCA9IGZsYWdzICZhbXA7IEJQRl9GX1VTRVJfQlVJTERfSUQ7CiYjNDM7CXU2NCBza2lwID0gZmxhZ3MgJmFtcDsgQlBGX0ZfU0tJUF9GSUVMRF9NQVNLOwomIzQzOwlib29sIHVzZXIgPSBmbGFncyAmYW1wOyBCUEZfRl9VU0VSX1NUQUNLOwomIzQzOwl1MzIgZWxlbV9zaXplLCBtYXhfZGVwdGgsIG5yX3RyYWNlOwomIzQzOwlib29sIGtlcm5lbCA9ICF1c2VyOwomIzQzOwomIzQzOwlpZiAoa2VybmVsICZhbXA7JmFtcDsgdXNlcl9idWlsZF9pZCkKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwomIzQzOwllbGVtX3NpemUgPSB1c2VyX2J1aWxkX2lkID8gc2l6ZW9mKHN0cnVjdCBicGZfc3RhY2tfYnVpbGRfaWQpIDogc2l6ZW9mKHU2NCk7CiYjNDM7CWlmICh1bmxpa2VseShzaXplICUgZWxlbV9zaXplKSkKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwomIzQzOwltYXhfZGVwdGggPSBzdGFja19tYXBfY2FsY3VsYXRlX21heF9kZXB0aChzaXplLCBlbGVtX3NpemUsIGZsYWdzKTsKJiM0MzsJdHJhY2UtJmd0O25yID0gbWluX3QodTMyLCB0cmFjZS0mZ3Q7bnIsIG1heF9kZXB0aCk7CiYjNDM7CiYjNDM7CWlmICh0cmFjZS0mZ3Q7bnIgJmx0OyBza2lwKQomIzQzOwkJcmV0dXJuIC1FRkFVTFQ7CiYjNDM7CiYjNDM7CW5yX3RyYWNlID0gY2FsbGNoYWluX3N0b3JlKHRyYWNlLCBidWYsIHNpemUsIGVsZW1fc2l6ZSwgZmxhZ3MpOwomIzQzOwlyZXR1cm4gY2FsbGNoYWluX2ZpbmFsaXplKGJ1Ziwgc2l6ZSwgbnJfdHJhY2UsIGVsZW1fc2l6ZSwgdXNlcl9idWlsZF9pZCwKJiM0MzsJCQkJICB1c2VyLCBmYWxzZSAvKiAhbWF5X2ZhdWx0ICovKTsKJiM0Mzt9CiYjNDM7CiBCUEZfQ0FMTF80KGJwZl9nZXRfc3RhY2tfcGUsIHN0cnVjdCBicGZfcGVyZl9ldmVudF9kYXRhX2tlcm4gKiwgY3R4LAogCSAgIHZvaWQgKiwgYnVmLCB1MzIsIHNpemUsIHU2NCwgZmxhZ3MpCiB7CkBAIC04NjMsNyAmIzQzOzk2OCw3IEBAIEJQRl9DQUxMXzQoYnBmX2dldF9zdGFja19wZSwgc3RydWN0IGJwZl9wZXJmX2V2ZW50X2RhdGFfa2VybiAqLCBjdHgsCiAJX191NjQgbnJfa2VybmVsOwogCiAJaWYgKCEoZXZlbnQtJmd0O2F0dHIuc2FtcGxlX3R5cGUgJmFtcDsgUEVSRl9TQU1QTEVfQ0FMTENIQUlOKSkKLQkJcmV0dXJuIF9fYnBmX2dldF9zdGFjayhyZWdzLCBOVUxMLCBOVUxMLCBidWYsIHNpemUsIGZsYWdzLCBmYWxzZSAvKiAhbWF5X2ZhdWx0ICovKTsKJiM0MzsJCXJldHVybiBfX2JwZl9nZXRfc3RhY2socmVncywgTlVMTCwgYnVmLCBzaXplLCBmbGFncywgZmFsc2UgLyogIW1heV9mYXVsdCAqLyk7CiAKIAlpZiAodW5saWtlbHkoZmxhZ3MgJmFtcDsgfihCUEZfRl9TS0lQX0ZJRUxEX01BU0sgfCBCUEZfRl9VU0VSX1NUQUNLIHwKIAkJCSAgICAgICBCUEZfRl9VU0VSX0JVSUxEX0lEKSkpCkBAIC04ODMsNyAmIzQzOzk4OCw3IEBAIEJQRl9DQUxMXzQoYnBmX2dldF9zdGFja19wZSwgc3RydWN0IGJwZl9wZXJmX2V2ZW50X2RhdGFfa2VybiAqLCBjdHgsCiAJCV9fdTY0IG5yID0gdHJhY2UtJmd0O25yOwogCiAJCXRyYWNlLSZndDtuciA9IG5yX2tlcm5lbDsKLQkJZXJyID0gX19icGZfZ2V0X3N0YWNrKHJlZ3MsIE5VTEwsIHRyYWNlLCBidWYsIHNpemUsIGZsYWdzLCBmYWxzZSAvKiAhbWF5X2ZhdWx0ICovKTsKJiM0MzsJCWVyciA9IF9fYnBmX2dldF9zdGFja19wZSh0cmFjZSwgYnVmLCBzaXplLCBmbGFncyk7CiAKIAkJLyogcmVzdG9yZSBuciAqLwogCQl0cmFjZS0mZ3Q7bnIgPSBucjsKQEAgLTg5MywxNCAmIzQzOzk5OCwxMyBAQCBCUEZfQ0FMTF80KGJwZl9nZXRfc3RhY2tfcGUsIHN0cnVjdCBicGZfcGVyZl9ldmVudF9kYXRhX2tlcm4gKiwgY3R4LAogCQlza2lwICYjNDM7PSBucl9rZXJuZWw7CiAJCWlmIChza2lwICZndDsgQlBGX0ZfU0tJUF9GSUVMRF9NQVNLKQogCQkJZ290byBjbGVhcjsKLQogCQlmbGFncyA9IChmbGFncyAmYW1wOyB+QlBGX0ZfU0tJUF9GSUVMRF9NQVNLKSB8IHNraXA7Ci0JCWVyciA9IF9fYnBmX2dldF9zdGFjayhyZWdzLCBOVUxMLCB0cmFjZSwgYnVmLCBzaXplLCBmbGFncywgZmFsc2UgLyogIW1heV9mYXVsdCAqLyk7CiYjNDM7CQllcnIgPSBfX2JwZl9nZXRfc3RhY2tfcGUodHJhY2UsIGJ1Ziwgc2l6ZSwgZmxhZ3MpOwogCX0KLQlyZXR1cm4gZXJyOwogCiBjbGVhcjoKLQltZW1zZXQoYnVmLCAwLCBzaXplKTsKJiM0MzsJaWYgKGVyciAmbHQ7IDApCiYjNDM7CQltZW1zZXQoYnVmLCAwLCBzaXplKTsKIAlyZXR1cm4gZXJyOwogCiB9CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIwIDEwOjQ5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc5NTUKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiAyMDkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBCUEYgU3RhY2ttYXAgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7dmUgZ290IHRoaXMgcGF0Y2ggaGVyZSB0aGF04oCZcyB0b3VjaGluZyBga2VybmVsL2JwZi9zdGFja21hcC5jYC4gSW1tZWRpYXRlbHksIEkgc2VlIGl0JiMzOTtzIGEgcmVmYWN0b3JpbmcgZWZmb3J0LCBpbnRyb2R1Y2luZyBzZXZlcmFsIG5ldyBzdHJ1Y3R1cmVzIGFuZCBmdW5jdGlvbnMgcmVsYXRlZCB0byBzdGFja21hcCBoYW5kbGluZy4gYHN0cnVjdCBzdGFja2lkYCwgYHN0YWNraWRfaW5pdGAsIHRoYXQgc29ydCBvZiB0aGluZyDigJMgdGhpcyBpcyBhbGwgZGVzaWduZWQgdG8gaW1wcm92ZSBob3cgdGhlIEJQRiBzdWJzeXN0ZW0gbWFuYWdlcyBzdGFjayBkYXRhLCBzcGVjaWZpY2FsbHkgZm9yIHBlcmYgZXZlbnQgY2FsbGNoYWlucy4gV2UmIzM5O3JlIGxvb2tpbmcgYXQgc2lnbmlmaWNhbnQgY2hhbmdlcyB0byBgYnBmX2dldF9zdGFja2lkYCBhbmQgcmVsYXRlZCBmdW5jdGlvbnMgdG9vLgoKVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBhIHByZXR0eSBkZWVwIGRpdmUgaW50byBjb3JlIEJQRiBhbmQgcGVyZiBpbnRlZ3JhdGlvbiwgYW5kIHRoYXQgbWFrZXMgaXQgYSBwcmltZSB0YXJnZXQgZm9yIGZ1enppbmcuIEFueSB0aW1lIHlvdSYjMzk7cmUgdG91Y2hpbmcgc3RhY2sgbWFuaXB1bGF0aW9uLCB5b3UmIzM5O3JlIG9wZW5pbmcgdGhlIGRvb3IgdG8gcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcy4KCk5vdywgbGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIG5lZWRlZCBmb3IgdGhlIGtlcm5lbCBidWlsZC4gSSBrbm93IGBrZXJuZWwvYnBmL3N0YWNrbWFwLmNgIGlzIGNvbXBpbGVkIHdoZW4gYENPTkZJR19CUEZfU1lTQ0FMTGAgaXMgZW5hYmxlZCwgYnV0IEkmIzM5O2xsIGRvdWJsZS1jaGVjayBga2VybmVsL2JwZi9NYWtlZmlsZWAganVzdCB0byBiZSBzdXJlIHRoZXJlIGFyZW4mIzM5O3QgYW55IG90aGVyIGNvbmZpZ3VyYXRpb24gZGVwZW5kZW5jaWVzIGx1cmtpbmcgaW4gdGhlcmUuIEdvdHRhIGdldCB0aGUgZnV6emluZyBlbnZpcm9ubWVudCBzZXQgdXAgY29ycmVjdGx5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIwIDEwOjUwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3N0YWNrbWFwJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL01ha2VmaWxlPTMwPWlmZXEgKCQoQ09ORklHX1BFUkZfRVZFTlRTKSx5KVxua2VybmVsL2JwZi9NYWtlZmlsZTozMTpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBzdGFja21hcC5vXG5rZXJuZWwvYnBmL01ha2VmaWxlLTMyLWVuZGlmXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjAgMTA6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODUyMgoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDE4NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipCUEYgU3RhY2sgVHJhY2luZyBSZXF1aXJlbWVudHMqKgoKT2theSwgc28gdG8gZ2V0IHRoaXMgQlBGIHN0YWNrIHRyYWNpbmcgd29ya2luZywgSSBkZWZpbml0ZWx5IG5lZWQgYENPTkZJR19CUEZfU1lTQ0FMTGAgYW5kIGBDT05GSUdfUEVSRl9FVkVOVFNgIGVuYWJsZWQuIE5vIHN1cnByaXNlcyB0aGVyZS4gSSBzaG91bGQgcHJvYmFibHkgZG91YmxlLWNoZWNrIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgY29uZmlndXJhdGlvbiBvcHRpb25zIHRoYXQgYXJlIHJlbGV2YW50IHdoaWxlIEkmIzM5O20gYXQgaXQsIGp1c3QgdG8gYmUgdGhvcm91Z2guCgpSaWdodCwgdGhlIGZ1bmN0aW9ucyB0aGF0IGhhdmUgYmVlbiBtb2RpZmllZCBhcmU6IGBicGZfZ2V0X3N0YWNraWRgLCBgYnBmX2dldF9zdGFja2lkX3BlYCwgYGJwZl9nZXRfc3RhY2tgLCBgYnBmX2dldF9zdGFja19zbGVlcGFibGVgLCBgYnBmX2dldF90YXNrX3N0YWNrYCwgYGJwZl9nZXRfdGFza19zdGFja19zbGVlcGFibGVgLCBhbmQgYGJwZl9nZXRfc3RhY2tfcGVgLiBUaGVzZSBhcmUgYWxsIEJQRiBoZWxwZXIgZnVuY3Rpb25zLCBzbyB0aGUgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gZmlndXJlIG91dCB3aGljaCBCUEYgcHJvZ3JhbSB0eXBlcyBzdXBwb3J0IHRoZXNlIHN0YWNrIHRyYWNlIGhlbHBlcnMuCgpgYnBmX2dldF9zdGFja2lkX3Byb3RvYCBsb29rcyBpbnRlcmVzdGluZywgdGhhdCYjMzk7cyB1c2VkIGluIGBrZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmNgIGFuZCBhbHNvIGBuZXQvY29yZS9maWx0ZXIuY2AsIHNvIHRoYXQmIzM5O3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50IGZvciBleHBsb3JpbmcgdGhlIHN1cHBvcnRlZCBwcm9ncmFtIHR5cGVzIGFuZCB0aGUgdHJhY2luZyBjYXBhYmlsaXRpZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjAgMTA6NTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnBmX2dldF9zdGFja2lkX3Byb3RvJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvYnBmLmg9Mzg3Mj1leHRlcm4gY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9nZXRfY3VycmVudF9jb21tX3Byb3RvO1xuaW5jbHVkZS9saW51eC9icGYuaDozODczOmV4dGVybiBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX2dldF9zdGFja2lkX3Byb3RvO1xuaW5jbHVkZS9saW51eC9icGYuaC0zODc0LWV4dGVybiBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX2dldF9zdGFja19wcm90bztcbi0tXG5pbmNsdWRlL2xpbnV4L2JwZi5oPTM4Nzc9ZXh0ZXJuIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfZ2V0X3Rhc2tfc3RhY2tfc2xlZXBhYmxlX3Byb3RvO1xuaW5jbHVkZS9saW51eC9icGYuaDozODc4OmV4dGVybiBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX2dldF9zdGFja2lkX3Byb3RvX3BlO1xuaW5jbHVkZS9saW51eC9icGYuaC0zODc5LWV4dGVybiBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX2dldF9zdGFja19wcm90b19wZTtcbi0tXG5rZXJuZWwvYnBmL3N0YWNrbWFwLmM9NjE5PUJQRl9DQUxMXzMoYnBmX2dldF9zdGFja2lkLCBzdHJ1Y3QgcHRfcmVncyAqLCByZWdzLCBzdHJ1Y3QgYnBmX21hcCAqLCBtYXAsXG4tLVxua2VybmVsL2JwZi9zdGFja21hcC5jLTY2MC1cbmtlcm5lbC9icGYvc3RhY2ttYXAuYzo2NjE6Y29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9nZXRfc3RhY2tpZF9wcm90byA9IHtcbmtlcm5lbC9icGYvc3RhY2ttYXAuYy02NjItXHQuZnVuY1x0XHQ9IGJwZl9nZXRfc3RhY2tpZCxcbi0tXG5rZXJuZWwvYnBmL3N0YWNrbWFwLmM9NjgyPUJQRl9DQUxMXzMoYnBmX2dldF9zdGFja2lkX3BlLCBzdHJ1Y3QgYnBmX3BlcmZfZXZlbnRfZGF0YV9rZXJuICosIGN0eCxcbi0tXG5rZXJuZWwvYnBmL3N0YWNrbWFwLmMtNzQwLVxua2VybmVsL2JwZi9zdGFja21hcC5jOjc0MTpjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX2dldF9zdGFja2lkX3Byb3RvX3BlID0ge1xua2VybmVsL2JwZi9zdGFja21hcC5jLTc0Mi1cdC5mdW5jXHRcdD0gYnBmX2dldF9zdGFja2lkX3BlLFxuLS1cbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYz0xMzQzPWtwcm9iZV9wcm9nX2Z1bmNfcHJvdG8oZW51bSBicGZfZnVuY19pZCBmdW5jX2lkLCBjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXG4tLVxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTEzNDgtXHRjYXNlIEJQRl9GVU5DX2dldF9zdGFja2lkOlxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jOjEzNDk6XHRcdHJldHVybiBcdTAwMjZicGZfZ2V0X3N0YWNraWRfcHJvdG87XG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMTM1MC1cdGNhc2UgQlBGX0ZVTkNfZ2V0X3N0YWNrOlxuLS1cbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYz0xNDI3PUJQRl9DQUxMXzMoYnBmX2dldF9zdGFja2lkX3RwLCB2b2lkICosIHRwX2J1ZmYsIHN0cnVjdCBicGZfbWFwICosIG1hcCxcbi0tXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMTQ0MC1cbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYzoxNDQxOnN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX2dldF9zdGFja2lkX3Byb3RvX3RwID0ge1xua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTE0NDItXHQuZnVuY1x0XHQ9IGJwZl9nZXRfc3RhY2tpZF90cCxcbi0tXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM9MTQ3MD10cF9wcm9nX2Z1bmNfcHJvdG8oZW51bSBicGZfZnVuY19pZCBmdW5jX2lkLCBjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXG4tLVxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTE0NzUtXHRjYXNlIEJQRl9GVU5DX2dldF9zdGFja2lkOlxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jOjE0NzY6XHRcdHJldHVybiBcdTAwMjZicGZfZ2V0X3N0YWNraWRfcHJvdG9fdHA7XG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMTQ3Ny1cdGNhc2UgQlBGX0ZVTkNfZ2V0X3N0YWNrOlxuLS1cbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYz0xNTc0PXBlX3Byb2dfZnVuY19wcm90byhlbnVtIGJwZl9mdW5jX2lkIGZ1bmNfaWQsIGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZylcbi0tXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMTU3OS1cdGNhc2UgQlBGX0ZVTkNfZ2V0X3N0YWNraWQ6XG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM6MTU4MDpcdFx0cmV0dXJuIFx1MDAyNmJwZl9nZXRfc3RhY2tpZF9wcm90b19wZTtcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0xNTgxLVx0Y2FzZSBCUEZfRlVOQ19nZXRfc3RhY2s6XG4tLVxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jPTE2NTY9QlBGX0NBTExfMyhicGZfZ2V0X3N0YWNraWRfcmF3X3RwLCBzdHJ1Y3QgYnBmX3Jhd190cmFjZXBvaW50X2FyZ3MgKiwgYXJncyxcbi0tXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMTY3Mi1cbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYzoxNjczOnN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX2dldF9zdGFja2lkX3Byb3RvX3Jhd190cCA9IHtcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0xNjc0LVx0LmZ1bmNcdFx0PSBicGZfZ2V0X3N0YWNraWRfcmF3X3RwLFxuLS1cbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYz0xNzA5PXJhd190cF9wcm9nX2Z1bmNfcHJvdG8oZW51bSBicGZfZnVuY19pZCBmdW5jX2lkLCBjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXG4tLVxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTE3MTQtXHRjYXNlIEJQRl9GVU5DX2dldF9zdGFja2lkOlxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jOjE3MTU6XHRcdHJldHVybiBcdTAwMjZicGZfZ2V0X3N0YWNraWRfcHJvdG9fcmF3X3RwO1xua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTE3MTYtXHRjYXNlIEJQRl9GVU5DX2dldF9zdGFjazpcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMCAxMDo1MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDMxMgoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDMyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHNpdHVhdGlvbjoKCioqVW5kZXJzdGFuZGluZyB0aGUgQ29udGV4dCBvZiBCUEYgVHJhY2UgRnVuY3Rpb25zKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGVzZSBmdW5jdGlvbnMsIGFuZCB0aGUgZmlyc3QgdGhpbmcgdGhhdCBqdW1wcyBvdXQgaXMgdGhhdCB0aGV5JiMzOTtyZSBuZXN0bGVkIHdpdGhpbiBga2VybmVsL3RyYWNlL2JwZl90cmFjZS5jYC4gVGhhdCB0ZWxscyBtZSB0aGlzIGlzIGFsbCByZWxhdGVkIHRvIHRyYWNpbmcsIHNwZWNpZmljYWxseSB1c2luZyBlQlBGLCBzaW5jZSB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoICYjMzQ7YnBmXF90cmFjZSYjMzQ7LiBUaGUgaW1wb3J0YW50IGZsYWcgaGVyZSBpcyBgQ09ORklHX0JQRl9FVkVOVFNgLiBJIGtub3cgZnJvbSBleHBlcmllbmNlIHRoYXQgdGhpcyBmbGFnIGVuYWJsZXMgdGhlIG1vcmUgYWR2YW5jZWQgdHJhY2luZyBjYXBhYmlsaXRpZXMgd2l0aGluIHRoZSBrZXJuZWwsIHNvIHRoZSBwcmVzZW5jZSBvZiB0aGVzZSBmdW5jdGlvbnMgaXMgZGlyZWN0bHkgdGllZCB0byBhIGNvbmZpZ3VyYXRpb24gdGhhdCBtYWtlcyBlQlBGLWJhc2VkIGV2ZW50IHRyYWNpbmcgYXZhaWxhYmxlLiBUaGlzIG1lYW5zIHdlJiMzOTtyZSBwcm9iYWJseSBkZWFsaW5nIHdpdGggaW5zdHJ1bWVudGF0aW9uIHBvaW50cyB0aGF0IGxldCB1c2Vyc3BhY2UgcHJvZ3JhbXMgdGFwIGludG8ga2VybmVsIGJlaGF2aW9yIGR5bmFtaWNhbGx5LCB3aGljaCBpcyBzb21ldGhpbmcgSSBkZWFsIHdpdGggb2Z0ZW4gaW4gbXkgY3VycmVudCB3b3JrLiBHb3QgaXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjAgMTA6NTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnBmX3RyYWNlLm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvdHJhY2UvTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL3RyYWNlL01ha2VmaWxlPTU0PUtDT1ZfSU5TVFJVTUVOVF90cmFjZV9pcnFzb2ZmLm8gOj0gblxua2VybmVsL3RyYWNlL01ha2VmaWxlLTU1LVxua2VybmVsL3RyYWNlL01ha2VmaWxlOjU2OkNGTEFHU19icGZfdHJhY2UubyA6PSAtSSQoc3JjKVxua2VybmVsL3RyYWNlL01ha2VmaWxlLTU3LVxuLS1cbmtlcm5lbC90cmFjZS9NYWtlZmlsZT0xMDk9b2JqLSQoQ09ORklHX1VTRVJfRVZFTlRTKSAmIzQzOz0gdHJhY2VfZXZlbnRzX3VzZXIub1xua2VybmVsL3RyYWNlL01ha2VmaWxlOjExMDpvYmotJChDT05GSUdfQlBGX0VWRU5UUykgJiM0Mzs9IGJwZl90cmFjZS5vXG5rZXJuZWwvdHJhY2UvTWFrZWZpbGUtMTExLW9iai0kKENPTkZJR19LUFJPQkVfRVZFTlRTKSAmIzQzOz0gdHJhY2Vfa3Byb2JlLm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMCAxMDo1MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDcyMAoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDQxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipDaGVja2luZyBmb3IgQlBGIEV2ZW50IFN1cHBvcnQqKgoKQWxyaWdodCwgcmlnaHQgb2ZmIHRoZSBiYXQsIHdlJiMzOTtyZSB0YWxraW5nIGFib3V0IG5lZWRpbmcgYENPTkZJR19CUEZfRVZFTlRTYC4gVGhhdCYjMzk7cyBhIGNydWNpYWwgc3RhcnRpbmcgcG9pbnQuIE5vdywgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dCBhbmQgaG93IGl0JiMzOTtzIGJlaW5nIHVzZWQsIEkgd2FudCB0byBzZWUgaG93IGBicGZfZ2V0X3N0YWNraWRfcHJvdG9gIGlzIGJlaW5nIGxldmVyYWdlZC4gTXkgaHVuY2ggaXMgaXQmIzM5O3MgcHJvYmFibHkgcmVsYXRlZCB0byB0aGF0IGBDT05GSUdfQlBGX0VWRU5UU2AgcmVxdWlyZW1lbnQuIExldCYjMzk7cyBkaXZlIGludG8gYG5ldC9jb3JlL2ZpbHRlci5jYC4gSSYjMzk7bGwgd2FudCB0byBzZWUgaWYgdGhpcyBgYnBmX2dldF9zdGFja2lkX3Byb3RvYCBmdW5jdGlvbiBpcyBiZWluZyBjYWxsZWQgaW4gYW55IHdheS4gU2VlaW5nIGhvdyB0aGF0JiMzOTtzIHRpZWQgaW50byB0aGUgbmV0ZmlsdGVyIGZyYW1ld29yaywgb3Igb3RoZXIgbmV0d29ya2luZyBjb21wb25lbnRzIHdpbGwgZ2l2ZSB1cyBhIHN0cm9uZyBncm91bmRpbmcgaW4gdGhlIHByb2JsZW0gc3BhY2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIwIDEwOjUwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnBmX2dldF9zdGFja2lkX3Byb3RvJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2NvcmUvZmlsdGVyLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMCAxMDo1MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDk5MwoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDMyNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgQlBGIFN0YWNrIFRyYWNlIEltcGxlbWVudGF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gZGl2aW5nIGludG8gdGhpcyBCUEYgc3RhY2sgdHJhY2UgaW1wbGVtZW50YXRpb24sIGFuZCBpdCYjMzk7cyBsb29raW5nIGxpa2UgdGhlIHJlYWwgYWN0aW9uIGlzIGhhcHBlbmluZyB3aXRoaW4gdGhlIEJQRiBzdGFja21hcCBhbmQgc3RhY2tpZCBoZWxwZXJzLCBub3Qgd2hlcmUgSSBpbml0aWFsbHkgdGhvdWdodC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGUgcmVsZXZhbnQga2VybmVsIGNvbmZpZ3VyYXRpb25zIGFyZSBlbmFibGVkOiBgQlBGX1NZU0NBTExgLCBgUEVSRl9FVkVOVFNgLCBhbmQgYEJQRl9FVkVOVFNgLiBNeSBmb2N1cyBuZWVkcyB0byBiZSBvbiB0aGVzZSBmdW5jdGlvbnM6IGBicGZfZ2V0X3N0YWNraWRgLCBgYnBmX2dldF9zdGFja2lkX3BlYCwgYGJwZl9nZXRfc3RhY2tgLCBgYnBmX2dldF9zdGFja19zbGVlcGFibGVgLCBgYnBmX2dldF90YXNrX3N0YWNrYCwgYGJwZl9nZXRfdGFza19zdGFja19zbGVlcGFibGVgLCBhbmQgYGJwZl9nZXRfc3RhY2tfcGVgLgoKQWhhLCBgYnBmX2dldF9zdGFja2lkYCBpcyBhY3R1YWxseSBhIEJQRiBoZWxwZXIgaXRzZWxmLCBub3QgYSBkaXJlY3Qga2VybmVsIGZ1bmN0aW9uLiBUaGUgKmtlcm5lbCogZnVuY3Rpb25zIHRoYXQgcGVyZm9ybSB0aGUgd29yayBhcmUgdGhvc2UgSSBqdXN0IGxpc3RlZC4gTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2UgaGVscGVycyBhcmUgYWN0dWFsbHkgZXhwb3NlZCB0byBCUEYgcHJvZ3JhbXMuIEFyZSB0aGV5IGV4cG9ydGVkIHN5bWJvbHMsIG9yIGFyZSB0aGV5IGRlZmluZWQgdXNpbmcgc3RhdGljIGZ1bmN0aW9ucyBvciBCUEZfQ0FMTCBtYWNyb3M/IEkgc2VlIHRoZXkmIzM5O3JlIGRlZmluZWQgd2l0aCBgQlBGX0NBTExfM2AgYW5kIGBCUEZfQ0FMTF80YC4gVGhpcyBtZWFucyB0aGUgZnVuY3Rpb24gbmFtZXMgQlBGIHByb2dyYW1zIGFjdHVhbGx5IHNlZSBhcmUgbGlrZWx5IGBfX19fYnBmX2dldF9zdGFja2lkYCBvciBgYnBmX2dldF9zdGFja2lkYC4gTmV4dCwgSSBuZWVkIHRvIGNoZWNrIHRoZSBkZWZpbml0aW9uIG9mIGBCUEZfQ0FMTF8zYCB0byBmdWxseSB1bmRlcnN0YW5kIGhvdyB0aGVzZSBmdW5jdGlvbnMgYXJlIGJlaW5nIGludm9rZWQgZnJvbSBCUEYgcHJvZ3JhbXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIwIDEwOjUwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGVmaW5lIEJQRl9DQUxMXyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvYnBmLmgmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMCAxMDo1MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTY5OQoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDE0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHN1bW1hcml6ZWQgdGhvdWdodCBwcm9jZXNzLCBwcmVzZW50ZWQgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIGl0OgoKKipEaWdnaW5nIGludG8gdGhlIExpbnV4IEtlcm5lbCBGaWx0ZXJpbmcgTGFuZHNjYXBlKioKCkFscmlnaHQsIEkgbmVlZCB0byBnZXQgc3RhcnRlZCBvbiB0aGlzIGZpbHRlcmluZyB0YXNrLiBXaGVyZSB3b3VsZCBJIGJlZ2luPyBHaXZlbiB0aGUgZ2VuZXJhbCBuYXR1cmUgb2YgZmlsdGVyaW5nIHdpdGhpbiB0aGUga2VybmVsLCBJJiMzOTttIHByZXR0eSBzdXJlIEkgc2hvdWxkIHN0YXJ0IGJ5IGxvb2tpbmcgYXQgY29yZSBkZWZpbml0aW9ucyBhbmQgc3RydWN0dXJlcy4gVGhhdCBtYWtlcyBgaW5jbHVkZS9saW51eC9maWx0ZXIuaGAgYSBwcmltZSBjYW5kaWRhdGUuIExldCYjMzk7cyBzZWUgd2hhdCBnb29kaWVzIGFyZSBpbiB0aGVyZS4gSSYjMzk7bSBleHBlY3RpbmcgdG8gZmluZCBmb3VuZGF0aW9uYWwgZWxlbWVudHMsIHBlcmhhcHMgc29tZSBhYnN0cmFjdCBpbnRlcmZhY2VzLCBhbmQgZGVmaW5pdGVseSBzb21lIGtleSBkYXRhIHN0cnVjdHVyZXMuIFRoaXMgaXMgdGhlIGxvZ2ljYWwgc3RhcnRpbmcgcG9pbnQgZm9yIHVuZGVyc3RhbmRpbmcgaG93IHRoZSBrZXJuZWwgaGFuZGxlcyBnZW5lcmljIGZpbHRlcmluZywgYW5kIGhvcGVmdWxseSBpdCYjMzk7bGwgZ2l2ZSBtZSBhIHN0cm9uZyBmb3VuZGF0aW9uLiBMZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3MgaW4gdGhlcmUuLi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjAgMTA6NTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGVmaW5lIEJQRl9DQUxMXyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvZmlsdGVyLmgmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9maWx0ZXIuaD00MD1zdHJ1Y3QgY3RsX3RhYmxlX2hlYWRlcjtcbi0tXG5pbmNsdWRlL2xpbnV4L2ZpbHRlci5oLTg1LS8qIHVudXNlZCBvcGNvZGUgdG8gbWFyayBjYWxsIHRvIGludGVycHJldGVyIHdpdGggYXJndW1lbnRzICovXG5pbmNsdWRlL2xpbnV4L2ZpbHRlci5oOjg2OiNkZWZpbmUgQlBGX0NBTExfQVJHU1x0MHhlMFxuaW5jbHVkZS9saW51eC9maWx0ZXIuaC04Ny1cbi0tXG5pbmNsdWRlL2xpbnV4L2ZpbHRlci5oPTI2MD1zdGF0aWMgaW5saW5lIGJvb2wgaW5zbl9pc19jYXN0X3VzZXIoY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuKVxuLS1cbmluY2x1ZGUvbGludXgvZmlsdGVyLmgtNDU3LVxuaW5jbHVkZS9saW51eC9maWx0ZXIuaDo0NTg6I2RlZmluZSBCUEZfQ0FMTF9SRUwoVEdUKVx0XHRcdFx0XHRcXFxuaW5jbHVkZS9saW51eC9maWx0ZXIuaC00NTktXHQoKHN0cnVjdCBicGZfaW5zbikge1x0XHRcdFx0XHRcXFxuLS1cbmluY2x1ZGUvbGludXgvZmlsdGVyLmgtNDY3LVxuaW5jbHVkZS9saW51eC9maWx0ZXIuaDo0Njg6I2RlZmluZSBCUEZfQ0FMTF9JTU0oeClcdCgodm9pZCAqKSh4KSAtICh2b2lkICopX19icGZfY2FsbF9iYXNlKVxuaW5jbHVkZS9saW51eC9maWx0ZXIuaC00NjktXG4tLVxuaW5jbHVkZS9saW51eC9maWx0ZXIuaC00NzktXG5pbmNsdWRlL2xpbnV4L2ZpbHRlci5oOjQ4MDojZGVmaW5lIEJQRl9DQUxMX0tGVU5DKE9GRiwgSU1NKVx0XHRcdFx0XFxcbmluY2x1ZGUvbGludXgvZmlsdGVyLmgtNDgxLVx0KChzdHJ1Y3QgYnBmX2luc24pIHtcdFx0XHRcdFx0XFxcbi0tXG5pbmNsdWRlL2xpbnV4L2ZpbHRlci5oLTYxMC1cbmluY2x1ZGUvbGludXgvZmlsdGVyLmg6NjExOiNkZWZpbmUgQlBGX0NBTExfeCh4LCBhdHRyLCBuYW1lLCAuLi4pXHRcdFx0XHRcdCAgICAgICBcXFxuaW5jbHVkZS9saW51eC9maWx0ZXIuaC02MTItXHRzdGF0aWMgX19hbHdheXNfaW5saW5lXHRcdFx0XHRcdFx0ICAgICAgIFxcXG4tLVxuaW5jbHVkZS9saW51eC9maWx0ZXIuaC02MjMtI2RlZmluZSBfX05PQVRUUlxuaW5jbHVkZS9saW51eC9maWx0ZXIuaDo2MjQ6I2RlZmluZSBCUEZfQ0FMTF8wKG5hbWUsIC4uLilcdEJQRl9DQUxMX3goMCwgX19OT0FUVFIsIG5hbWUsIF9fVkFfQVJHU19fKVxuaW5jbHVkZS9saW51eC9maWx0ZXIuaDo2MjU6I2RlZmluZSBCUEZfQ0FMTF8xKG5hbWUsIC4uLilcdEJQRl9DQUxMX3goMSwgX19OT0FUVFIsIG5hbWUsIF9fVkFfQVJHU19fKVxuaW5jbHVkZS9saW51eC9maWx0ZXIuaDo2MjY6I2RlZmluZSBCUEZfQ0FMTF8yKG5hbWUsIC4uLilcdEJQRl9DQUxMX3goMiwgX19OT0FUVFIsIG5hbWUsIF9fVkFfQVJHU19fKVxuaW5jbHVkZS9saW51eC9maWx0ZXIuaDo2Mjc6I2RlZmluZSBCUEZfQ0FMTF8zKG5hbWUsIC4uLilcdEJQRl9DQUxMX3goMywgX19OT0FUVFIsIG5hbWUsIF9fVkFfQVJHU19fKVxuaW5jbHVkZS9saW51eC9maWx0ZXIuaDo2Mjg6I2RlZmluZSBCUEZfQ0FMTF80KG5hbWUsIC4uLilcdEJQRl9DQUxMX3goNCwgX19OT0FUVFIsIG5hbWUsIF9fVkFfQVJHU19fKVxuaW5jbHVkZS9saW51eC9maWx0ZXIuaDo2Mjk6I2RlZmluZSBCUEZfQ0FMTF81KG5hbWUsIC4uLilcdEJQRl9DQUxMX3goNSwgX19OT0FUVFIsIG5hbWUsIF9fVkFfQVJHU19fKVxuaW5jbHVkZS9saW51eC9maWx0ZXIuaC02MzAtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIwIDEwOjUwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyNjA1CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogNDA5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBCUEYgU3RhY2sgVHJhY2UgRnVuY3Rpb25hbGl0eSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgaG93IHRoZXNlIGBCUEZfQ0FMTF94YCBjYWxscyB3b3JrLiBUaGV5JiMzOTtyZSBnZW5lcmF0aW5nIG5hbWVzLCBzcGVjaWZpY2FsbHkgYF9fX19uYW1lYCBhbmQgYG5hbWVgIC0gdGhhdCYjMzk7cyBzdGFuZGFyZCBmb3IgdGhpcyBzb3J0IG9mIHRoaW5nLiBUaGUgYWN0dWFsIGZ1bmN0aW9uIGNhbGxzIGFyZTogYGJwZl9nZXRfc3RhY2tpZGAsIGBicGZfZ2V0X3N0YWNraWRfcGVgLCBgYnBmX2dldF9zdGFja2AsIGBicGZfZ2V0X3N0YWNrX3NsZWVwYWJsZWAsIGBicGZfZ2V0X3Rhc2tfc3RhY2tgLCBgYnBmX2dldF90YXNrX3N0YWNrX3NsZWVwYWJsZWAsIGFuZCBgYnBmX2dldF9zdGFja19wZWAuIFByZXR0eSBzdGFuZGFyZCBzdGFjayB0cmFjZSBjb2xsZWN0aW9uIHJvdXRpbmVzLgoKV2FpdCwgbG9va2luZyBkZWVwZXIsIHRoaXMgcGF0Y2ggYWxzbyBpbnRyb2R1Y2VzIGEgYnVuY2ggb2Ygc3RhdGljIGZ1bmN0aW9uczogYHN0YWNraWRfaW5pdGAsIGBzdGFja2lkX2Zhc3RwYXRoYCwgYHN0YWNraWRfbmV3X2J1Y2tldGAsIGBzdGFja2lkX2luc3RhbGxgLCBgY2FsbGNoYWluX3N0b3JlYCwgYGNhbGxjaGFpbl9maW5hbGl6ZWAsIGFuZCBgX19icGZfZ2V0X3N0YWNrX3BlYCwgYW5kIGFsc28gYF9fYnBmX2dldF9zdGFja2AuIFRoZXNlIGFyZSBpbnRlcmVzdGluZy4gU2luY2UgdGhleSYjMzk7cmUgc3RhdGljLCB0aGV5JiMzOTtyZSBnb29kIGNhbmRpZGF0ZXMgdG8gaW5jbHVkZSB3aXRoaW4gYEZvY3VzU3ltYm9sc2AgYXMgdGhleSBtYXkgbm90IGJlIGlubGluZWQuCgpIb3dldmVyLCB0aGUgcHJpbWFyeSBlbnRyeSBwb2ludHMgYXJlIGNsZWFybHkgYGJwZl9nZXRfc3RhY2tpZGAgYW5kIHRoZSBvdGhlcnMuCgpBbHJpZ2h0LCBsZXQmIzM5O3MgbWFrZSBhIGNvbXBsZXRlIGxpc3Qgb2YgdGhlIGVudHJ5IHBvaW50cyBhbmQgdGhlIHN0YXRpYyBmdW5jdGlvbnM6CgoqICAgYGJwZl9nZXRfc3RhY2tpZGAKKiAgIGBicGZfZ2V0X3N0YWNraWRfcGVgCiogICBgYnBmX2dldF9zdGFja2AKKiAgIGBicGZfZ2V0X3N0YWNrX3NsZWVwYWJsZWAKKiAgIGBicGZfZ2V0X3Rhc2tfc3RhY2tgCiogICBgYnBmX2dldF90YXNrX3N0YWNrX3NsZWVwYWJsZWAKKiAgIGBicGZfZ2V0X3N0YWNrX3BlYAoqICAgYHN0YWNraWRfaW5pdGAKKiAgIGBzdGFja2lkX2Zhc3RwYXRoYAoqICAgYHN0YWNraWRfbmV3X2J1Y2tldGAKKiAgIGBzdGFja2lkX2luc3RhbGxgCiogICBgY2FsbGNoYWluX3N0b3JlYAoqICAgYGNhbGxjaGFpbl9maW5hbGl6ZWAKKiAgIGBfX2JwZl9nZXRfc3RhY2tfcGVgCiogICBgX19icGZfZ2V0X3N0YWNrYAoKTm93LCByZWdhcmRpbmcgdGhlIG5lY2Vzc2FyeSBjb25maWd1cmF0aW9ucywgSSBuZWVkIHRvIGNoZWNrIGlmIGp1c3QgYENPTkZJR19CUEZfU1lTQ0FMTGAsIGBDT05GSUdfUEVSRl9FVkVOVFNgLCBhbmQgYENPTkZJR19CUEZfRVZFTlRTYCBhcmUgZW5vdWdoLiBZZXAsIHRob3NlIHNlZW0gdG8gY292ZXIgaXQuIEkmIzM5O2xsIGRvdWJsZS1jaGVjayB0byBiZSBjb21wbGV0ZWx5IHN1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIwIDEwOjUwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0NPTkZJR18mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvYnBmL3N0YWNrbWFwLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9zdGFja21hcC5jPTI2Nz1zdHJ1Y3Qgc3RhY2tfbWFwX3ZtYV9sb2NrIHtcbi0tXG5rZXJuZWwvYnBmL3N0YWNrbWFwLmMtMjc0LSAqXG5rZXJuZWwvYnBmL3N0YWNrbWFwLmM6Mjc1OiAqIFdpdGggQ09ORklHX1BFUl9WTUFfTE9DSz15IHRoaXMgcmV0dXJucyBhIFZNQSB3aXRoIGl0cyBwZXItVk1BIHJlYWRcbmtlcm5lbC9icGYvc3RhY2ttYXAuYy0yNzYtICogbG9jayBoZWxkIGFuZCBtbWFwX2xvY2sgZHJvcHBlZCwgc28gdGhlIGNhbGxlciBtYXkgc2xlZXAuXG5rZXJuZWwvYnBmL3N0YWNrbWFwLmMtMjc3LSAqXG5rZXJuZWwvYnBmL3N0YWNrbWFwLmM6Mjc4OiAqIFdpdGggQ09ORklHX1BFUl9WTUFfTE9DSz1uIGl0IHJldHVybnMgYSBWTUEgd2l0aCBtbWFwX2xvY2sgc3RpbGxcbmtlcm5lbC9icGYvc3RhY2ttYXAuYy0yNzktICogaGVsZDsgdGhlIGNhbGxlciBtdXN0IHNuYXBzaG90IGFueSBmaWVsZHMgaXQgbmVlZHMgYW5kIHBpbiB2bV9maWxlXG4tLVxua2VybmVsL2JwZi9zdGFja21hcC5jPTI4Nj1zdGFja19tYXBfbG9ja192bWEoc3RydWN0IHN0YWNrX21hcF92bWFfbG9jayAqbG9jaywgdW5zaWduZWQgbG9uZyBpcClcbi0tXG5rZXJuZWwvYnBmL3N0YWNrbWFwLmMtMjkwLVxua2VybmVsL2JwZi9zdGFja21hcC5jOjI5MTpcdC8qIG5vb3AgdW5kZXIgIUNPTkZJR19QRVJfVk1BX0xPQ0sgKi9cbmtlcm5lbC9icGYvc3RhY2ttYXAuYy0yOTItXHR2bWEgPSBsb2NrX3ZtYV91bmRlcl9yY3UobW0sIGlwKTtcbi0tXG5rZXJuZWwvYnBmL3N0YWNrbWFwLmMtMzEwLVxua2VybmVsL2JwZi9zdGFja21hcC5jOjMxMTojaWZkZWYgQ09ORklHX1BFUl9WTUFfTE9DS1xua2VybmVsL2JwZi9zdGFja21hcC5jLTMxMi1cdGlmICghdm1hX3N0YXJ0X3JlYWRfbG9ja2VkKHZtYSkpIHtcbi0tXG5rZXJuZWwvYnBmL3N0YWNrbWFwLmM9MzIzPXN0YXRpYyB2b2lkIHN0YWNrX21hcF91bmxvY2tfdm1hKHN0cnVjdCBzdGFja19tYXBfdm1hX2xvY2sgKmxvY2spXG5rZXJuZWwvYnBmL3N0YWNrbWFwLmMtMzI0LXtcbmtlcm5lbC9icGYvc3RhY2ttYXAuYzozMjU6I2lmZGVmIENPTkZJR19QRVJfVk1BX0xPQ0tcbmtlcm5lbC9icGYvc3RhY2ttYXAuYy0zMjYtXHR2bWFfZW5kX3JlYWQobG9jay1cdTAwM2V2bWEpO1xuLS1cbmtlcm5lbC9icGYvc3RhY2ttYXAuYz00NzE9Z2V0X2NhbGxjaGFpbl9lbnRyeV9mb3JfdGFzayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssIHUzMiBtYXhfZGVwdGgpXG5rZXJuZWwvYnBmL3N0YWNrbWFwLmMtNDcyLXtcbmtlcm5lbC9icGYvc3RhY2ttYXAuYzo0NzM6I2lmZGVmIENPTkZJR19TVEFDS1RSQUNFXG5rZXJuZWwvYnBmL3N0YWNrbWFwLmMtNDc0LVx0c3RydWN0IHBlcmZfY2FsbGNoYWluX2VudHJ5ICplbnRyeTtcbi0tXG5rZXJuZWwvYnBmL3N0YWNrbWFwLmMtNTAxLVx0cmV0dXJuIGVudHJ5O1xua2VybmVsL2JwZi9zdGFja21hcC5jOjUwMjojZWxzZSAvKiBDT05GSUdfU1RBQ0tUUkFDRSAqL1xua2VybmVsL2JwZi9zdGFja21hcC5jLTUwMy1cdHJldHVybiBOVUxMO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMCAxMDo1MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDI1MwoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDQ1NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipSZXZpZXdpbmcgQlBGIFN0YWNrIFRyYWNlIENvbmZpZ3VyYXRpb24gYW5kIFN5bWJvbHMqKgoKT2theSwgc28gSSYjMzk7bSB0aGlua2luZyB0aHJvdWdoIHRoaXMgc3RhY2sgdHJhY2UgYnVzaW5lc3MgZm9yIEJQRi4gUmlnaHQsIEkgbmVlZCBgQ09ORklHX1NUQUNLVFJBQ0VgIGZvciBgZ2V0X2NhbGxjaGFpbl9lbnRyeV9mb3JfdGFza2AgdG8gd29yay4gVGhhdCYjMzk7cyBmdW5kYW1lbnRhbCwgYW5kIHRoYXQsIGluIHR1cm4sIGlzIHVzZWQgYnkgYGJwZl9nZXRfdGFza19zdGFja2AgYW5kIGBicGZfZ2V0X3Rhc2tfc3RhY2tfc2xlZXBhYmxlYC4gSXQmIzM5O3MgcHJldHR5IHN0YW5kYXJkIHRvIGhhdmUgYENPTkZJR19TVEFDS1RSQUNFYCBlbmFibGVkLCBidXQgaXTigJlzIHN0aWxsIHNtYXJ0IHRvIHNwZWNpZnkgaXQgZXhwbGljaXRseSB0byBtYWtlIHN1cmUgZXZlcnl0aGluZyBsaW5lcyB1cC4gTGV0JiMzOTtzIG1ha2Ugc3VyZSB0aGVyZSBhcmVuJiMzOTt0IGFueSBvdGhlciBnb3RjaGFzLiBBaCB5ZXMsIGBDT05GSUdfQlBGX1NZU0NBTExgLCBgQ09ORklHX1BFUkZfRVZFTlRTYCwgYENPTkZJR19CUEZfRVZFTlRTYCwgYW5kIGBDT05GSUdfU1RBQ0tUUkFDRWAgYXJlIHRoZSBrZXkgb25lcyB0byB3YXRjaCBvdXQgZm9yLgoKTm93LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoZXNlIGBGb2N1c1N5bWJvbHNgLiBUaGUgcGF0Y2ggaXMgdG91Y2hpbmcgYGtlcm5lbC9icGYvc3RhY2ttYXAuY2AsIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQmIzM5O3MgYmVpbmcgY2hhbmdlZCBpbiB0aGF0IGFyZWEuIEkmIzM5O20gc2VlaW5nIGZ1bmN0aW9ucyBsaWtlOiBgc3RhY2tpZF9pbml0YCwgYHN0YWNraWRfZmFzdHBhdGhgLCBgc3RhY2tpZF9uZXdfYnVja2V0YCwgYHN0YWNraWRfaW5zdGFsbGAsIGBicGZfZ2V0X3N0YWNraWRgLCBgYnBmX2dldF9zdGFja2lkX3BlYCwgYGNhbGxjaGFpbl9zdG9yZWAsIGBjYWxsY2hhaW5fZmluYWxpemVgLCBgX19icGZfZ2V0X3N0YWNrYCwgYGJwZl9nZXRfc3RhY2tgLCBgYnBmX2dldF9zdGFja19zbGVlcGFibGVgLCBgX19icGZfZ2V0X3Rhc2tfc3RhY2tgLCBgYnBmX2dldF90YXNrX3N0YWNrYCwgYGJwZl9nZXRfdGFza19zdGFja19zbGVlcGFibGVgLCBgX19icGZfZ2V0X3N0YWNrX3BlYCwgYW5kIGBicGZfZ2V0X3N0YWNrX3BlYC4KClNvbWUgb2YgdGhlc2UgYXJlIHN0YXRpYywgb3RoZXJzIGFyZSBCUEZfQ0FMTCBtYWNyb3MsIHdoaWNoIG1lYW5zIHRoZXkmIzM5O3JlIHdyYXBwZXIgZnVuY3Rpb25zLiBUaGUgcXVlc3Rpb24gbm93IGlzIHdoZXRoZXIgdGhlIHZpc2libGUgbmFtZSwgYGJwZl9nZXRfc3RhY2tpZGAsIGlzIHRoZSBhY3R1YWwgZnVuY3Rpb24gbmFtZS4gTGV0JiMzOTtzIGRpZyBkZWVwZXIuIFllcCwgaXQgc2VlbXMgbGlrZSBgQlBGX0NBTExfMyhicGZfZ2V0X3N0YWNraWQsIC4uLilgIGRvZXMgaW5kZWVkIGdlbmVyYXRlIGJvdGggYGJwZl9nZXRfc3RhY2tpZGAgYW5kIGBfX19fYnBmX2dldF9zdGFja2lkYC4gU28sIGBicGZfZ2V0X3N0YWNraWRgICppcyogYSB2YWxpZCBzeW1ib2wgYXMgZmFyIGFzIHRoZSBrZXJuZWwgaXMgY29uY2VybmVkLCBhbHRob3VnaCBpdCYjMzk7cyBhY3RpbmcgYXMgYSB3cmFwcGVyLiBUaGUgY29yZSBsb2dpYyBpcyBsaWtlbHkgcmVzaWRpbmcgaW4gYF9fX19icGZfZ2V0X3N0YWNraWRgLCB0aGUgaGlkZGVuIGZ1bmN0aW9uLiBHb3R0YSBkb3VibGUtY2hlY2sgYGluY2x1ZGUvbGludXgvZmlsdGVyLmhgIGFnYWluLCBqdXN0IHRvIGJlIHN1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIwIDEwOjUwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RlZmluZSBCUEZfQ0FMTF94JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9maWx0ZXIuaCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2ZpbHRlci5oPTI2MD1zdGF0aWMgaW5saW5lIGJvb2wgaW5zbl9pc19jYXN0X3VzZXIoY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuKVxuLS1cbmluY2x1ZGUvbGludXgvZmlsdGVyLmgtNjEwLVxuaW5jbHVkZS9saW51eC9maWx0ZXIuaDo2MTE6I2RlZmluZSBCUEZfQ0FMTF94KHgsIGF0dHIsIG5hbWUsIC4uLilcdFx0XHRcdFx0ICAgICAgIFxcXG5pbmNsdWRlL2xpbnV4L2ZpbHRlci5oLTYxMi1cdHN0YXRpYyBfX2Fsd2F5c19pbmxpbmVcdFx0XHRcdFx0XHQgICAgICAgXFxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjAgMTA6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTU0MDgKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAxNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIHRoZSBCUEZfQ0FMTF94IE1hY3JvKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBob3cgYEJQRl9DQUxMX3hgIGlzIGRlZmluZWQuIEl0JiMzOTtzIHRpbWUgdG8gZGlnIGludG8gdGhlIG1hY3JvIGRlZmluaXRpb24sIGFzIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSB1bmRlcmx5aW5nIG1lY2hhbmlzbS4gSSBzdXNwZWN0IEkgbWlnaHQgYmUgZGVhbGluZyB3aXRoIGVpdGhlciBhIGhlbHBlciBmdW5jdGlvbiBvciBzb21lIGtpbmQgb2YgaW5zdHJ1Y3Rpb24gZW5jb2RpbmcsIG9yIHBlcmhhcHMgZXZlbiBhIGxheWVyIHRoYXQgYWJzdHJhY3RzIGtlcm5lbCB2ZXJzaW9ucy4gSSYjMzk7bSBlc3BlY2lhbGx5IGtlZW4gdG8gdW5kZXJzdGFuZCBob3cgdGhlIGFyZ3VtZW50cyBhcmUgaGFuZGxlZCDigJMgYXJlIHRoZXkgZGlyZWN0bHkgZW5jb2RlZCwgcGFzc2VkIHRocm91Z2ggcmVnaXN0ZXJzLCBvciBwZXJoYXBzIGEgY29tYmluYXRpb24/IEkgbmVlZCB0byBxdWlja2x5IGdyYXNwIGl0cyByb2xlIHdpdGhpbiB0aGUgYnJvYWRlciBCUEYgY29udGV4dCwgYW5kIGZpZ3VyZSBvdXQgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSBpbnN0cnVjdGlvbiBzZXQgYW5kIHZlcmlmaWVyLiBUaGUgc3BlY2lmaWNzIGFyZSBrZXkgaGVyZTogaXMgaXQgYSB3cmFwcGVyIGZvciBhIGhhcmRjb2RlZCBvcGNvZGUsIG9yIGEgbW9yZSBkeW5hbWljIGNvbnN0cnVjdD8gVGltZSB0byBzdGFydCB0cmFjaW5nIHRocm91Z2ggdGhlIGNvZGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIwIDEwOjUwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9maWx0ZXIuaCYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDYxMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNjEwOlx0XG4gNjExOlx0I2RlZmluZSBCUEZfQ0FMTF94KHgsIGF0dHIsIG5hbWUsIC4uLilcdFx0XHRcdFx0ICAgICAgIFxcXG4gNjEyOlx0XHRzdGF0aWMgX19hbHdheXNfaW5saW5lXHRcdFx0XHRcdFx0ICAgICAgIFxcXG4gNjEzOlx0XHR1NjQgX19fXyMjbmFtZShfX0JQRl9NQVAoeCwgX19CUEZfREVDTF9BUkdTLCBfX0JQRl9WLCBfX1ZBX0FSR1NfXykpOyAgIFxcXG4gNjE0Olx0XHR0eXBlZGVmIHU2NCAoKmJ0Zl8jI25hbWUpKF9fQlBGX01BUCh4LCBfX0JQRl9ERUNMX0FSR1MsIF9fQlBGX1YsIF9fVkFfQVJHU19fKSk7IFxcXG4gNjE1Olx0XHRhdHRyIHU2NCBuYW1lKF9fQlBGX1JFRyh4LCBfX0JQRl9ERUNMX1JFR1MsIF9fQlBGX04sIF9fVkFfQVJHU19fKSk7ICAgIFxcXG4gNjE2Olx0XHRhdHRyIHU2NCBuYW1lKF9fQlBGX1JFRyh4LCBfX0JQRl9ERUNMX1JFR1MsIF9fQlBGX04sIF9fVkFfQVJHU19fKSkgICAgIFxcXG4gNjE3Olx0XHR7XHRcdFx0XHRcdFx0XHRcdCAgICAgICBcXFxuIDYxODpcdFx0XHRyZXR1cm4gKChidGZfIyNuYW1lKV9fX18jI25hbWUpKF9fQlBGX01BUCh4LF9fQlBGX0NBU1QsX19CUEZfTixfX1ZBX0FSR1NfXykpO1xcXG4gNjE5Olx0XHR9XHRcdFx0XHRcdFx0XHRcdCAgICAgICBcXFxuIDYyMDpcdFx0c3RhdGljIF9fYWx3YXlzX2lubGluZVx0XHRcdFx0XHRcdCAgICAgICBcXFxuIDYyMTpcdFx0dTY0IF9fX18jI25hbWUoX19CUEZfTUFQKHgsIF9fQlBGX0RFQ0xfQVJHUywgX19CUEZfViwgX19WQV9BUkdTX18pKVxuIDYyMjpcdFxuIDYyMzpcdCNkZWZpbmUgX19OT0FUVFJcbiA2MjQ6XHQjZGVmaW5lIEJQRl9DQUxMXzAobmFtZSwgLi4uKVx0QlBGX0NBTExfeCgwLCBfX05PQVRUUiwgbmFtZSwgX19WQV9BUkdTX18pXG4gNjI1Olx0I2RlZmluZSBCUEZfQ0FMTF8xKG5hbWUsIC4uLilcdEJQRl9DQUxMX3goMSwgX19OT0FUVFIsIG5hbWUsIF9fVkFfQVJHU19fKVxuIDYyNjpcdCNkZWZpbmUgQlBGX0NBTExfMihuYW1lLCAuLi4pXHRCUEZfQ0FMTF94KDIsIF9fTk9BVFRSLCBuYW1lLCBfX1ZBX0FSR1NfXylcbiA2Mjc6XHQjZGVmaW5lIEJQRl9DQUxMXzMobmFtZSwgLi4uKVx0QlBGX0NBTExfeCgzLCBfX05PQVRUUiwgbmFtZSwgX19WQV9BUkdTX18pXG4gNjI4Olx0I2RlZmluZSBCUEZfQ0FMTF80KG5hbWUsIC4uLilcdEJQRl9DQUxMX3goNCwgX19OT0FUVFIsIG5hbWUsIF9fVkFfQVJHU19fKVxuIDYyOTpcdCNkZWZpbmUgQlBGX0NBTExfNShuYW1lLCAuLi4pXHRCUEZfQ0FMTF94KDUsIF9fTk9BVFRSLCBuYW1lLCBfX1ZBX0FSR1NfXylcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjAgMTA6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTYyNjEKCQkJCQkJCW91dHB1dDogMzA1CgkJCQkJCQl0aG91Z2h0czogOTcwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgU3RhY2ttYXAgUmVmYWN0b3JpbmcqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gRnJvbSB3aGF0IEkmIzM5O20gc2VlaW5nLCBgbmFtZWAgaXMgYWN0aW5nIGFzIHRoZSBwdWJsaWNseS12aXNpYmxlIHdyYXBwZXIsIGFuZCBgX19fX25hbWVgIGlzIHRoZSBpbnRlcm5hbCBmdW5jdGlvbi4gVGhlIGBfX19fbmFtZWAgZnVuY3Rpb25zLCBiZWluZyBkZWNsYXJlZCBgc3RhdGljIF9fYWx3YXlzX2lubGluZWAsIGFyZSBwcmltZSBjYW5kaWRhdGVzIGZvciBpbmxpbmluZywgd2hpY2ggbWVhbnMgd2UgbmVlZCB0byB0cmFjZSB0aG9zZSBjb25uZWN0aW9ucy4KClRvIGdldCBhIGhhbmRsZSBvbiB0aGlzLCBJJiMzOTt2ZSBpZGVudGlmaWVkIGEgbGlzdCBvZiBzeW1ib2xzIHRvIGZvY3VzIG9uLiBXZSYjMzk7dmUgZ290IHRoZSBCUEYgd3JhcHBlcnM6IGBicGZfZ2V0X3N0YWNraWRgLCBgYnBmX2dldF9zdGFja2lkX3BlYCwgYGJwZl9nZXRfc3RhY2tgLCBgYnBmX2dldF9zdGFja19zbGVlcGFibGVgLCBgYnBmX2dldF90YXNrX3N0YWNrYCwgYGJwZl9nZXRfdGFza19zdGFja19zbGVlcGFibGVgLCBhbmQgYGJwZl9nZXRfc3RhY2tfcGVgLiBBbHNvLCB3ZSBuZWVkIHRvIGNvbnNpZGVyIHRob3NlIHN0YXRpYyBoZWxwZXJzIHRoYXQgbWlnaHQgKm5vdCogYmUgaW5saW5lZC4KCkluaXRpYWxseSwgSSBpZGVudGlmaWVkIGEgc2V0IG9mIHN0YXRpYyBmdW5jdGlvbnM6IGBzdGFja2lkX2luaXRgLCBgc3RhY2tpZF9mYXN0cGF0aGAsIGBzdGFja2lkX25ld19idWNrZXRgLCBgc3RhY2tpZF9pbnN0YWxsYCwgYGNhbGxjaGFpbl9zdG9yZWAsIGBjYWxsY2hhaW5fZmluYWxpemVgLCBgX19icGZfZ2V0X3N0YWNrX3BlYCwgYW5kIGBfX2JwZl9nZXRfc3RhY2tgLiBJJiMzOTt2ZSBnb25lIGJhY2sgYW5kIGNoZWNrZWQgdGhlIGNhbGwgZ3JhcGggZm9yIHRoZW0gdG8gZGV0ZXJtaW5lIHdoaWNoIGFyZSBhY3R1YWxseSByZWFjaGFibGUgYW5kIHdoaWNoIGFyZSBpbmxpbmVkLiBJdCBsb29rcyBsaWtlIGBzdGFja2lkX2luaXRgIGlzIGNhbGxlZCBieSBgc3RhY2tpZF9mYXN0cGF0aGAsIHdoaWNoIGlzIGluIHR1cm4gY2FsbGVkIGZyb20gYGJwZl9nZXRfc3RhY2tpZGAgYW5kIGBicGZfZ2V0X3N0YWNraWRfcGVgLiBgc3RhY2tpZF9uZXdfYnVja2V0YCBhbmQgYHN0YWNraWRfaW5zdGFsbGAgYXJlIGFsc28gY2FsbGVkIGJ5IGBicGZfZ2V0X3N0YWNraWRgIGFuZCBgYnBmX2dldF9zdGFja2lkX3BlYC4gU2ltaWxhcmx5LCBgY2FsbGNoYWluX3N0b3JlYCBhbmQgYGNhbGxjaGFpbl9maW5hbGl6ZWAgYXJlIGNhbGxlZCBieSB0aGUgYF9fYnBmX2dldF9zdGFja2AgYW5kIGBfX2JwZl9nZXRfc3RhY2tfcGVgLiAgRmluYWxseSwgdGhlIGBfX2JwZl9nZXRfc3RhY2tgIGlzIGNhbGxlZCBieSBhIHZhcmlldHkgb2YgZnVuY3Rpb25zLCBhbmQgYF9fYnBmX2dldF90YXNrX3N0YWNrYCBpcyBjYWxsZWQgYnkgdGhlIGBicGZfZ2V0X3Rhc2tfc3RhY2tgIHZhcmlhbnRzLgoKU28sIHRoZSBmb2N1cyBzeW1ib2xzIGFyZToKYGJwZl9nZXRfc3RhY2tpZGAKYGJwZl9nZXRfc3RhY2tpZF9wZWAKYGJwZl9nZXRfc3RhY2tgCmBicGZfZ2V0X3N0YWNrX3NsZWVwYWJsZWAKYGJwZl9nZXRfdGFza19zdGFja2AKYGJwZl9nZXRfdGFza19zdGFja19zbGVlcGFibGVgCmBicGZfZ2V0X3N0YWNrX3BlYApgc3RhY2tpZF9mYXN0cGF0aGAKYHN0YWNraWRfbmV3X2J1Y2tldGAKYHN0YWNraWRfaW5zdGFsbGAKYGNhbGxjaGFpbl9zdG9yZWAKYGNhbGxjaGFpbl9maW5hbGl6ZWAKYF9fYnBmX2dldF9zdGFja2AKYF9fYnBmX2dldF9zdGFja19wZWAKYF9fYnBmX2dldF90YXNrX3N0YWNrYAoKT2theSwgdGhhdCYjMzk7cyBhIGdvb2Qgc3RhcnRpbmcgbGlzdC4KCk5vdywgbGV0JiMzOTtzIGNvbnNpZGVyIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9ucy4gV2UmIzM5O3ZlIGdvdCBgQlBGX1NZU0NBTExgLCBgUEVSRl9FVkVOVFNgLCBgQlBGX0VWRU5UU2AsIGFuZCBgU1RBQ0tUUkFDRWAuIGBDT05GSUdfQlBGX1NZU0NBTExgIGlzLCBvZiBjb3Vyc2UsIHRoZSBtYWluIG9uZS4gYENPTkZJR19QRVJGX0VWRU5UU2AgaXMgZXhwbGljaXRseSByZXF1aXJlZCBmb3IgYGtlcm5lbC9icGYvc3RhY2ttYXAuY2AgdG8gY29tcGlsZSBhbmQgYENPTkZJR19CUEZfRVZFTlRTYCBpcyByZXF1aXJlZCBmb3IgYGtlcm5lbC90cmFjZS9icGZfdHJhY2UuY2AgYW5kIHJlZ2lzdGVyaW5nIEJQRiBoZWxwZXJzLiBgQ09ORklHX1NUQUNLVFJBQ0VgIGlzIHRoZXJlIGJlY2F1c2Ugb2YgYGdldF9jYWxsY2hhaW5fZW50cnlfZm9yX3Rhc2tgLiBJIGRvbiYjMzk7dCB0aGluayBgQ09ORklHX1RSQUNJTkdgIGlzIHN0cmljdGx5IG5lZWRlZCwgYXMgYEJQRl9FVkVOVFNgIHVzdWFsbHkgY292ZXJzIGl0LgoKTG9va2luZyBhdCB0aGUgZmlsZSBtb2RpZmljYXRpb25zLCBpdCYjMzk7cyBqdXN0IGBrZXJuZWwvYnBmL3N0YWNrbWFwLmNgLCBpbmRpY2F0aW5nIHRoaXMgaXMgYSBsb2NhbGl6ZWQgY2hhbmdlLgoKVGhlIGNvcmUgb2YgdGhpcyBwYXRjaCBzZWVtcyB0byBiZSByZWZhY3RvcmluZyB0aGUgc3RhY2ttYXAgY29kZS4gVGhleSYjMzk7cmUgcHVsbGluZyBvdXQgY29tbW9uIGxvZ2ljIGludG8gaGVscGVyIGZ1bmN0aW9ucywgbWVhbmluZyB0aGlzIHJlZmFjdG9yaW5nIHNob3VsZCBub3QgY2hhbmdlIHRoZSBleHRlcm5hbCBiZWhhdmlvciwgYnV0IGl0IGRvZXMgc2lnbmlmaWNhbnRseSBhbHRlciB0aGUgaW50ZXJuYWwgd29ya2luZ3MuIFRoaXMgaXMgYSBjbGFzc2ljIGNhc2Ugd2hlcmUgZnV6emluZyBpcyAqZXNzZW50aWFsKi4gRXZlbiBpZiBpdCBzZWVtcyBoYXJtbGVzcyBvbiB0aGUgc3VyZmFjZSwgcmVmYWN0b3JpbmdzIGxpa2UgdGhpcyBhcmUgcHJpbWUgY2FuZGlkYXRlcyBmb3IgaW50cm9kdWNpbmcgcmVncmVzc2lvbnMgb3IgbWVtb3J5IGxlYWtzLiBXZSBuZWVkIHRvIGJlIHRob3JvdWdoLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMCAxMDo1MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OywKICAgICYjMzQ7UEVSRl9FVkVOVFMmIzM0OywKICAgICYjMzQ7QlBGX0VWRU5UUyYjMzQ7LAogICAgJiMzNDtTVEFDS1RSQUNFJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YnBmX2dldF9zdGFja2lkJiMzNDssCiAgICAmIzM0O2JwZl9nZXRfc3RhY2tpZF9wZSYjMzQ7LAogICAgJiMzNDticGZfZ2V0X3N0YWNrJiMzNDssCiAgICAmIzM0O2JwZl9nZXRfc3RhY2tfc2xlZXBhYmxlJiMzNDssCiAgICAmIzM0O2JwZl9nZXRfdGFza19zdGFjayYjMzQ7LAogICAgJiMzNDticGZfZ2V0X3Rhc2tfc3RhY2tfc2xlZXBhYmxlJiMzNDssCiAgICAmIzM0O2JwZl9nZXRfc3RhY2tfcGUmIzM0OywKICAgICYjMzQ7c3RhY2tpZF9mYXN0cGF0aCYjMzQ7LAogICAgJiMzNDtzdGFja2lkX25ld19idWNrZXQmIzM0OywKICAgICYjMzQ7c3RhY2tpZF9pbnN0YWxsJiMzNDssCiAgICAmIzM0O2NhbGxjaGFpbl9zdG9yZSYjMzQ7LAogICAgJiMzNDtjYWxsY2hhaW5fZmluYWxpemUmIzM0OywKICAgICYjMzQ7X19icGZfZ2V0X3N0YWNrJiMzNDssCiAgICAmIzM0O19fYnBmX2dldF9zdGFja19wZSYjMzQ7LAogICAgJiMzNDtfX2JwZl9nZXRfdGFza19zdGFjayYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZWZhY3RvcnMgdGhlIEJQRiBzdGFja21hcCBhbmQgc3RhY2tpZCBoZWxwZXIgZnVuY3Rpb25zLCBpbnRyb2R1Y2luZyBuZXcgaW50ZXJuYWwgaGVscGVyIGZ1bmN0aW9ucyBsaWtlIGBzdGFja2lkX2Zhc3RwYXRoYCwgYHN0YWNraWRfbmV3X2J1Y2tldGAsIGBzdGFja2lkX2luc3RhbGxgLCBgY2FsbGNoYWluX3N0b3JlYCwgYW5kIGBjYWxsY2hhaW5fZmluYWxpemVgLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgQlBGIHN1YnN5c3RlbSB0aGF0IGhhbmRsZXMgc3RhY2sgdHJhY2VzIGFuZCBwZXJmIGV2ZW50IGNhbGxjaGFpbnMuIEl0IGlzIGltcG9ydGFudCB0byBmdXp6IHRoZXNlIGNoYW5nZXMgdG8gZW5zdXJlIG5vIHJlZ3Jlc3Npb25zLCBtZW1vcnkgbGVha3MsIG9yIGNvbmN1cnJlbmN5IGlzc3VlcyBhcmUgaW50cm9kdWNlZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OywKICAgICYjMzQ7UEVSRl9FVkVOVFMmIzM0OywKICAgICYjMzQ7QlBGX0VWRU5UUyYjMzQ7LAogICAgJiMzNDtTVEFDS1RSQUNFJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YnBmX2dldF9zdGFja2lkJiMzNDssCiAgICAmIzM0O2JwZl9nZXRfc3RhY2tpZF9wZSYjMzQ7LAogICAgJiMzNDticGZfZ2V0X3N0YWNrJiMzNDssCiAgICAmIzM0O2JwZl9nZXRfc3RhY2tfc2xlZXBhYmxlJiMzNDssCiAgICAmIzM0O2JwZl9nZXRfdGFza19zdGFjayYjMzQ7LAogICAgJiMzNDticGZfZ2V0X3Rhc2tfc3RhY2tfc2xlZXBhYmxlJiMzNDssCiAgICAmIzM0O2JwZl9nZXRfc3RhY2tfcGUmIzM0OywKICAgICYjMzQ7c3RhY2tpZF9mYXN0cGF0aCYjMzQ7LAogICAgJiMzNDtzdGFja2lkX25ld19idWNrZXQmIzM0OywKICAgICYjMzQ7c3RhY2tpZF9pbnN0YWxsJiMzNDssCiAgICAmIzM0O2NhbGxjaGFpbl9zdG9yZSYjMzQ7LAogICAgJiMzNDtjYWxsY2hhaW5fZmluYWxpemUmIzM0OywKICAgICYjMzQ7X19icGZfZ2V0X3N0YWNrJiMzNDssCiAgICAmIzM0O19fYnBmX2dldF9zdGFja19wZSYjMzQ7LAogICAgJiMzNDtfX2JwZl9nZXRfdGFza19zdGFjayYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZWZhY3RvcnMgdGhlIEJQRiBzdGFja21hcCBhbmQgc3RhY2tpZCBoZWxwZXIgZnVuY3Rpb25zLCBpbnRyb2R1Y2luZyBuZXcgaW50ZXJuYWwgaGVscGVyIGZ1bmN0aW9ucyBsaWtlIGBzdGFja2lkX2Zhc3RwYXRoYCwgYHN0YWNraWRfbmV3X2J1Y2tldGAsIGBzdGFja2lkX2luc3RhbGxgLCBgY2FsbGNoYWluX3N0b3JlYCwgYW5kIGBjYWxsY2hhaW5fZmluYWxpemVgLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgQlBGIHN1YnN5c3RlbSB0aGF0IGhhbmRsZXMgc3RhY2sgdHJhY2VzIGFuZCBwZXJmIGV2ZW50IGNhbGxjaGFpbnMuIEl0IGlzIGltcG9ydGFudCB0byBmdXp6IHRoZXNlIGNoYW5nZXMgdG8gZW5zdXJlIG5vIHJlZ3Jlc3Npb25zLCBtZW1vcnkgbGVha3MsIG9yIGNvbmN1cnJlbmN5IGlzc3VlcyBhcmUgaW50cm9kdWNlZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIwVDEwOjQ5OjU4LjE2MDM5MDgwNloiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYyMDA4NzUzNzE3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9TWVNDQUxMXCIsXG4gICAgXCJQRVJGX0VWRU5UU1wiLFxuICAgIFwiQlBGX0VWRU5UU1wiLFxuICAgIFwiU1RBQ0tUUkFDRVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJwZl9nZXRfc3RhY2tpZFwiLFxuICAgIFwiYnBmX2dldF9zdGFja2lkX3BlXCIsXG4gICAgXCJicGZfZ2V0X3N0YWNrXCIsXG4gICAgXCJicGZfZ2V0X3N0YWNrX3NsZWVwYWJsZVwiLFxuICAgIFwiYnBmX2dldF90YXNrX3N0YWNrXCIsXG4gICAgXCJicGZfZ2V0X3Rhc2tfc3RhY2tfc2xlZXBhYmxlXCIsXG4gICAgXCJicGZfZ2V0X3N0YWNrX3BlXCIsXG4gICAgXCJzdGFja2lkX2Zhc3RwYXRoXCIsXG4gICAgXCJzdGFja2lkX25ld19idWNrZXRcIixcbiAgICBcInN0YWNraWRfaW5zdGFsbFwiLFxuICAgIFwiY2FsbGNoYWluX3N0b3JlXCIsXG4gICAgXCJjYWxsY2hhaW5fZmluYWxpemVcIixcbiAgICBcIl9fYnBmX2dldF9zdGFja1wiLFxuICAgIFwiX19icGZfZ2V0X3N0YWNrX3BlXCIsXG4gICAgXCJfX2JwZl9nZXRfdGFza19zdGFja1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgQlBGIHN0YWNrbWFwIGFuZCBzdGFja2lkIGhlbHBlciBmdW5jdGlvbnMsIGludHJvZHVjaW5nIG5ldyBpbnRlcm5hbCBoZWxwZXIgZnVuY3Rpb25zIGxpa2UgYHN0YWNraWRfZmFzdHBhdGhgLCBgc3RhY2tpZF9uZXdfYnVja2V0YCwgYHN0YWNraWRfaW5zdGFsbGAsIGBjYWxsY2hhaW5fc3RvcmVgLCBhbmQgYGNhbGxjaGFpbl9maW5hbGl6ZWAuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBCUEYgc3Vic3lzdGVtIHRoYXQgaGFuZGxlcyBzdGFjayB0cmFjZXMgYW5kIHBlcmYgZXZlbnQgY2FsbGNoYWlucy4gSXQgaXMgaW1wb3J0YW50IHRvIGZ1enogdGhlc2UgY2hhbmdlcyB0byBlbnN1cmUgbm8gcmVncmVzc2lvbnMsIG1lbW9yeSBsZWFrcywgb3IgY29uY3VycmVuY3kgaXNzdWVzIGFyZSBpbnRyb2R1Y2VkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMFQxMDo0OTo1OC4xNjAzOTk2MDZaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4MTUzNzYyOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGNhZTk1NGM5NWNlNzJiYTkyOTE4MDdiYTNjYzVhZGM2Y2FlZjlhOThcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIE1vbiBKdWwgMjAgMTA6NDk6NTYgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9zdGFja21hcC5jIGIva2VybmVsL2JwZi9zdGFja21hcC5jXFxuaW5kZXggNDFmZTg3ZDczMDJmMjIuLjM3ZjhlNDYzMTliMzRmIDEwMDY0NFxcbi0tLSBhL2tlcm5lbC9icGYvc3RhY2ttYXAuY1xcbisrKyBiL2tlcm5lbC9icGYvc3RhY2ttYXAuY1xcbkBAIC01MDQsNzggKzUwNCwxMTYgQEAgZ2V0X2NhbGxjaGFpbl9lbnRyeV9mb3JfdGFzayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssIHUzMiBtYXhfZGVwdGgpXFxuICNlbmRpZlxcbiB9XFxuIFxcbi1zdGF0aWMgbG9uZyBfX2JwZl9nZXRfc3RhY2tpZChzdHJ1Y3QgYnBmX21hcCAqbWFwLFxcbi1cXHRcXHRcXHQgICAgICBzdHJ1Y3QgcGVyZl9jYWxsY2hhaW5fZW50cnkgKnRyYWNlLCB1NjQgZmxhZ3MpXFxuK3N0cnVjdCBzdGFja2lkIHtcXG4rXFx0c3RydWN0IHN0YWNrX21hcF9idWNrZXQgKmJ1Y2tldDtcXG4rXFx0dTY0ICppcHM7XFxuK1xcdHUzMiAgbnI7XFxuK1xcdHUzMiAgbGVuO1xcbitcXHR1MzIgIGhhc2g7XFxuK1xcdHUzMiAgaWQ7XFxuK1xcdGJvb2wgaGFzaF9tYXRjaGVzO1xcbit9O1xcbitcXG4rc3RhdGljIGludCBzdGFja2lkX2luaXQoc3RydWN0IHN0YWNraWQgKnN0YWNraWQsIHN0cnVjdCBicGZfbWFwICptYXAsXFxuK1xcdFxcdFxcdHN0cnVjdCBwZXJmX2NhbGxjaGFpbl9lbnRyeSAqdHJhY2UsIHU2NCBmbGFncylcXG4ge1xcbiBcXHRzdHJ1Y3QgYnBmX3N0YWNrX21hcCAqc21hcCA9IGNvbnRhaW5lcl9vZihtYXAsIHN0cnVjdCBicGZfc3RhY2tfbWFwLCBtYXApO1xcbi1cXHRzdHJ1Y3Qgc3RhY2tfbWFwX2J1Y2tldCAqYnVja2V0LCAqbmV3X2J1Y2tldCwgKm9sZF9idWNrZXQ7XFxuLVxcdHUzMiBoYXNoLCBpZCwgdHJhY2VfbnIsIHRyYWNlX2xlbiwgaSwgbWF4X2RlcHRoO1xcbiBcXHR1MzIgc2tpcCA9IGZsYWdzIFxcdTAwMjYgQlBGX0ZfU0tJUF9GSUVMRF9NQVNLO1xcbi1cXHRib29sIHVzZXIgPSBmbGFncyBcXHUwMDI2IEJQRl9GX1VTRVJfU1RBQ0s7XFxuLVxcdHU2NCAqaXBzO1xcbi1cXHRib29sIGhhc2hfbWF0Y2hlcztcXG4rXFx0dTMyIG1heF9kZXB0aDtcXG4gXFxuIFxcdGlmICh0cmFjZS1cXHUwMDNlbnIgXFx1MDAzYz0gc2tpcClcXG4gXFx0XFx0Lyogc2tpcHBpbmcgbW9yZSB0aGFuIHVzYWJsZSBzdGFjayB0cmFjZSAqL1xcbiBcXHRcXHRyZXR1cm4gLUVGQVVMVDtcXG4gXFxuIFxcdG1heF9kZXB0aCA9IHN0YWNrX21hcF9jYWxjdWxhdGVfbWF4X2RlcHRoKG1hcC1cXHUwMDNldmFsdWVfc2l6ZSwgc3RhY2tfbWFwX2RhdGFfc2l6ZShtYXApLCBmbGFncyk7XFxuLVxcdHRyYWNlX25yID0gbWluX3QodTMyLCB0cmFjZS1cXHUwMDNlbnIgLSBza2lwLCBtYXhfZGVwdGggLSBza2lwKTtcXG4tXFx0dHJhY2VfbGVuID0gdHJhY2VfbnIgKiBzaXplb2YodTY0KTtcXG4tXFx0aXBzID0gdHJhY2UtXFx1MDAzZWlwICsgc2tpcDtcXG4tXFx0aGFzaCA9IGpoYXNoMigodTMyICopaXBzLCB0cmFjZV9sZW4gLyBzaXplb2YodTMyKSwgMCk7XFxuLVxcdGlkID0gaGFzaCBcXHUwMDI2IChzbWFwLVxcdTAwM2VuX2J1Y2tldHMgLSAxKTtcXG4tXFx0YnVja2V0ID0gUkVBRF9PTkNFKHNtYXAtXFx1MDAzZWJ1Y2tldHNbaWRdKTtcXG4rXFx0c3RhY2tpZC1cXHUwMDNlbnIgPSBtaW5fdCh1MzIsIHRyYWNlLVxcdTAwM2VuciAtIHNraXAsIG1heF9kZXB0aCAtIHNraXApO1xcbitcXHRzdGFja2lkLVxcdTAwM2VsZW4gPSBzdGFja2lkLVxcdTAwM2VuciAqIHNpemVvZih1NjQpO1xcbitcXHRzdGFja2lkLVxcdTAwM2VpcHMgPSB0cmFjZS1cXHUwMDNlaXAgKyBza2lwO1xcbitcXHRzdGFja2lkLVxcdTAwM2VoYXNoID0gamhhc2gyKCh1MzIgKilzdGFja2lkLVxcdTAwM2VpcHMsIHN0YWNraWQtXFx1MDAzZWxlbiAvIHNpemVvZih1MzIpLCAwKTtcXG4rXFx0c3RhY2tpZC1cXHUwMDNlaWQgPSBzdGFja2lkLVxcdTAwM2VoYXNoIFxcdTAwMjYgKHNtYXAtXFx1MDAzZW5fYnVja2V0cyAtIDEpO1xcbitcXHRzdGFja2lkLVxcdTAwM2VidWNrZXQgPSBSRUFEX09OQ0Uoc21hcC1cXHUwMDNlYnVja2V0c1tzdGFja2lkLVxcdTAwM2VpZF0pO1xcbitcXHRzdGFja2lkLVxcdTAwM2VoYXNoX21hdGNoZXMgPSBzdGFja2lkLVxcdTAwM2VidWNrZXQgXFx1MDAyNlxcdTAwMjYgc3RhY2tpZC1cXHUwMDNlYnVja2V0LVxcdTAwM2VoYXNoID09IHN0YWNraWQtXFx1MDAzZWhhc2g7XFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IHN0YWNraWRfZmFzdHBhdGgoc3RydWN0IHN0YWNraWQgKnN0YWNraWQsIHN0cnVjdCBicGZfbWFwICptYXAsXFxuK1xcdFxcdFxcdCAgICBzdHJ1Y3QgcGVyZl9jYWxsY2hhaW5fZW50cnkgKnRyYWNlLCB1NjQgZmxhZ3MpXFxuK3tcXG4rXFx0aW50IGVycjtcXG4rXFxuK1xcdGVyciA9IHN0YWNraWRfaW5pdChzdGFja2lkLCBtYXAsIHRyYWNlLCBmbGFncyk7XFxuK1xcdGlmIChlcnIpXFxuK1xcdFxcdHJldHVybiBlcnI7XFxuIFxcbi1cXHRoYXNoX21hdGNoZXMgPSBidWNrZXQgXFx1MDAyNlxcdTAwMjYgYnVja2V0LVxcdTAwM2VoYXNoID09IGhhc2g7XFxuIFxcdC8qIGZhc3QgY21wICovXFxuLVxcdGlmIChoYXNoX21hdGNoZXMgXFx1MDAyNlxcdTAwMjYgZmxhZ3MgXFx1MDAyNiBCUEZfRl9GQVNUX1NUQUNLX0NNUClcXG4tXFx0XFx0cmV0dXJuIGlkO1xcbitcXHRpZiAoc3RhY2tpZC1cXHUwMDNlaGFzaF9tYXRjaGVzIFxcdTAwMjZcXHUwMDI2IGZsYWdzIFxcdTAwMjYgQlBGX0ZfRkFTVF9TVEFDS19DTVApXFxuK1xcdFxcdHJldHVybiBzdGFja2lkLVxcdTAwM2VpZDtcXG4rXFxuK1xcdGlmIChzdGFja19tYXBfdXNlX2J1aWxkX2lkKG1hcCkpXFxuK1xcdFxcdHJldHVybiAtRU5PRU5UO1xcbitcXHRpZiAoc3RhY2tpZC1cXHUwMDNlaGFzaF9tYXRjaGVzIFxcdTAwMjZcXHUwMDI2IHN0YWNraWQtXFx1MDAzZWJ1Y2tldC1cXHUwMDNlbnIgPT0gc3RhY2tpZC1cXHUwMDNlbnIgXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgIG1lbWNtcChzdGFja2lkLVxcdTAwM2VidWNrZXQtXFx1MDAzZWRhdGEsIHN0YWNraWQtXFx1MDAzZWlwcywgc3RhY2tpZC1cXHUwMDNlbGVuKSA9PSAwKVxcbitcXHRcXHRyZXR1cm4gc3RhY2tpZC1cXHUwMDNlaWQ7XFxuK1xcdGlmIChzdGFja2lkLVxcdTAwM2VidWNrZXQgXFx1MDAyNlxcdTAwMjYgIShmbGFncyBcXHUwMDI2IEJQRl9GX1JFVVNFX1NUQUNLSUQpKVxcbitcXHRcXHRyZXR1cm4gLUVFWElTVDtcXG4rXFx0cmV0dXJuIC1FTk9FTlQ7XFxuK31cXG4rXFxuK3N0YXRpYyBzdHJ1Y3Qgc3RhY2tfbWFwX2J1Y2tldCAqXFxuK3N0YWNraWRfbmV3X2J1Y2tldChzdHJ1Y3Qgc3RhY2tpZCAqc3RhY2tpZCwgc3RydWN0IGJwZl9tYXAgKm1hcCxcXG4rXFx0XFx0ICAgc3RydWN0IHBlcmZfY2FsbGNoYWluX2VudHJ5ICp0cmFjZSwgdTY0IGZsYWdzKVxcbit7XFxuK1xcdHN0cnVjdCBicGZfc3RhY2tfbWFwICpzbWFwID0gY29udGFpbmVyX29mKG1hcCwgc3RydWN0IGJwZl9zdGFja19tYXAsIG1hcCk7XFxuK1xcdHN0cnVjdCBicGZfc3RhY2tfYnVpbGRfaWQgKmlkX29mZnM7XFxuK1xcdHN0cnVjdCBzdGFja19tYXBfYnVja2V0ICpidWNrZXQ7XFxuK1xcdHUzMiBpO1xcbitcXG4rXFx0YnVja2V0ID0gKHN0cnVjdCBzdGFja19tYXBfYnVja2V0ICopIHBjcHVfZnJlZWxpc3RfcG9wKFxcdTAwMjZzbWFwLVxcdTAwM2VmcmVlbGlzdCk7XFxuK1xcdGlmICh1bmxpa2VseSghYnVja2V0KSlcXG4rXFx0XFx0cmV0dXJuIE5VTEw7XFxuK1xcbitcXHRpZiAoc3RhY2tfbWFwX3VzZV9idWlsZF9pZChtYXApKSB7XFxuK1xcdFxcdGlkX29mZnMgPSAoc3RydWN0IGJwZl9zdGFja19idWlsZF9pZCAqKWJ1Y2tldC1cXHUwMDNlZGF0YTtcXG4rXFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIHN0YWNraWQtXFx1MDAzZW5yOyBpKyspXFxuK1xcdFxcdFxcdGlkX29mZnNbaV0uaXAgPSBzdGFja2lkLVxcdTAwM2VpcHNbaV07XFxuK1xcdH0gZWxzZSB7XFxuK1xcdFxcdG1lbWNweShidWNrZXQtXFx1MDAzZWRhdGEsIHN0YWNraWQtXFx1MDAzZWlwcywgc3RhY2tpZC1cXHUwMDNlbGVuKTtcXG4rXFx0fVxcbitcXG4rXFx0YnVja2V0LVxcdTAwM2VoYXNoID0gc3RhY2tpZC1cXHUwMDNlaGFzaDtcXG4rXFx0YnVja2V0LVxcdTAwM2VuciA9IHN0YWNraWQtXFx1MDAzZW5yO1xcbitcXHRyZXR1cm4gYnVja2V0O1xcbit9XFxuK1xcbitzdGF0aWMgbG9uZyBzdGFja2lkX2luc3RhbGwoc3RydWN0IHN0YWNraWQgKnN0YWNraWQsIHN0cnVjdCBicGZfbWFwICptYXAsXFxuK1xcdFxcdFxcdCAgICBzdHJ1Y3Qgc3RhY2tfbWFwX2J1Y2tldCAqbmV3X2J1Y2tldCwgdTY0IGZsYWdzKVxcbit7XFxuK1xcdHN0cnVjdCBicGZfc3RhY2tfbWFwICpzbWFwID0gY29udGFpbmVyX29mKG1hcCwgc3RydWN0IGJwZl9zdGFja19tYXAsIG1hcCk7XFxuK1xcdGJvb2wgdXNlciA9IGZsYWdzIFxcdTAwMjYgQlBGX0ZfVVNFUl9TVEFDSztcXG4rXFx0c3RydWN0IHN0YWNrX21hcF9idWNrZXQgKm9sZF9idWNrZXQ7XFxuK1xcdHUzMiB0cmFjZV9sZW47XFxuIFxcbiBcXHRpZiAoc3RhY2tfbWFwX3VzZV9idWlsZF9pZChtYXApKSB7XFxuIFxcdFxcdHN0cnVjdCBicGZfc3RhY2tfYnVpbGRfaWQgKmlkX29mZnM7XFxuIFxcbi1cXHRcXHQvKiBmb3IgYnVpbGRfaWQrb2Zmc2V0LCBwb3AgYSBidWNrZXQgYmVmb3JlIHNsb3cgY21wICovXFxuLVxcdFxcdG5ld19idWNrZXQgPSAoc3RydWN0IHN0YWNrX21hcF9idWNrZXQgKilcXG4tXFx0XFx0XFx0cGNwdV9mcmVlbGlzdF9wb3AoXFx1MDAyNnNtYXAtXFx1MDAzZWZyZWVsaXN0KTtcXG4tXFx0XFx0aWYgKHVubGlrZWx5KCFuZXdfYnVja2V0KSlcXG4tXFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuLVxcdFxcdG5ld19idWNrZXQtXFx1MDAzZW5yID0gdHJhY2VfbnI7XFxuIFxcdFxcdGlkX29mZnMgPSAoc3RydWN0IGJwZl9zdGFja19idWlsZF9pZCAqKW5ld19idWNrZXQtXFx1MDAzZWRhdGE7XFxuLVxcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyB0cmFjZV9ucjsgaSsrKVxcbi1cXHRcXHRcXHRpZF9vZmZzW2ldLmlwID0gaXBzW2ldO1xcbi1cXHRcXHRzdGFja19tYXBfZ2V0X2J1aWxkX2lkX29mZnNldChpZF9vZmZzLCB0cmFjZV9uciwgdXNlciwgZmFsc2UgLyogIW1heV9mYXVsdCAqLyk7XFxuLVxcdFxcdHRyYWNlX2xlbiA9IHRyYWNlX25yICogc2l6ZW9mKHN0cnVjdCBicGZfc3RhY2tfYnVpbGRfaWQpO1xcbi1cXHRcXHRpZiAoaGFzaF9tYXRjaGVzIFxcdTAwMjZcXHUwMDI2IGJ1Y2tldC1cXHUwMDNlbnIgPT0gdHJhY2VfbnIgXFx1MDAyNlxcdTAwMjZcXG4tXFx0XFx0ICAgIG1lbWNtcChidWNrZXQtXFx1MDAzZWRhdGEsIG5ld19idWNrZXQtXFx1MDAzZWRhdGEsIHRyYWNlX2xlbikgPT0gMCkge1xcbitcXHRcXHRzdGFja19tYXBfZ2V0X2J1aWxkX2lkX29mZnNldChpZF9vZmZzLCBzdGFja2lkLVxcdTAwM2VuciwgdXNlciwgZmFsc2UgLyogIW1heV9mYXVsdCAqLyk7XFxuK1xcdFxcdHRyYWNlX2xlbiA9IHN0YWNraWQtXFx1MDAzZW5yICogc2l6ZW9mKHN0cnVjdCBicGZfc3RhY2tfYnVpbGRfaWQpO1xcbitcXHRcXHRpZiAoc3RhY2tpZC1cXHUwMDNlaGFzaF9tYXRjaGVzIFxcdTAwMjZcXHUwMDI2IHN0YWNraWQtXFx1MDAzZWJ1Y2tldC1cXHUwMDNlbnIgPT0gc3RhY2tpZC1cXHUwMDNlbnIgXFx1MDAyNlxcdTAwMjZcXG4rXFx0XFx0ICAgIG1lbWNtcChzdGFja2lkLVxcdTAwM2VidWNrZXQtXFx1MDAzZWRhdGEsIG5ld19idWNrZXQtXFx1MDAzZWRhdGEsIHRyYWNlX2xlbikgPT0gMCkge1xcbiBcXHRcXHRcXHRwY3B1X2ZyZWVsaXN0X3B1c2goXFx1MDAyNnNtYXAtXFx1MDAzZWZyZWVsaXN0LCBcXHUwMDI2bmV3X2J1Y2tldC1cXHUwMDNlZm5vZGUpO1xcbi1cXHRcXHRcXHRyZXR1cm4gaWQ7XFxuK1xcdFxcdFxcdHJldHVybiBzdGFja2lkLVxcdTAwM2VpZDtcXG4gXFx0XFx0fVxcbi1cXHRcXHRpZiAoYnVja2V0IFxcdTAwMjZcXHUwMDI2ICEoZmxhZ3MgXFx1MDAyNiBCUEZfRl9SRVVTRV9TVEFDS0lEKSkge1xcbitcXHRcXHRpZiAoc3RhY2tpZC1cXHUwMDNlYnVja2V0IFxcdTAwMjZcXHUwMDI2ICEoZmxhZ3MgXFx1MDAyNiBCUEZfRl9SRVVTRV9TVEFDS0lEKSkge1xcbiBcXHRcXHRcXHRwY3B1X2ZyZWVsaXN0X3B1c2goXFx1MDAyNnNtYXAtXFx1MDAzZWZyZWVsaXN0LCBcXHUwMDI2bmV3X2J1Y2tldC1cXHUwMDNlZm5vZGUpO1xcbiBcXHRcXHRcXHRyZXR1cm4gLUVFWElTVDtcXG4gXFx0XFx0fVxcbi1cXHR9IGVsc2Uge1xcbi1cXHRcXHRpZiAoaGFzaF9tYXRjaGVzIFxcdTAwMjZcXHUwMDI2IGJ1Y2tldC1cXHUwMDNlbnIgPT0gdHJhY2VfbnIgXFx1MDAyNlxcdTAwMjZcXG4tXFx0XFx0ICAgIG1lbWNtcChidWNrZXQtXFx1MDAzZWRhdGEsIGlwcywgdHJhY2VfbGVuKSA9PSAwKVxcbi1cXHRcXHRcXHRyZXR1cm4gaWQ7XFxuLVxcdFxcdGlmIChidWNrZXQgXFx1MDAyNlxcdTAwMjYgIShmbGFncyBcXHUwMDI2IEJQRl9GX1JFVVNFX1NUQUNLSUQpKVxcbi1cXHRcXHRcXHRyZXR1cm4gLUVFWElTVDtcXG4tXFxuLVxcdFxcdG5ld19idWNrZXQgPSAoc3RydWN0IHN0YWNrX21hcF9idWNrZXQgKilcXG4tXFx0XFx0XFx0cGNwdV9mcmVlbGlzdF9wb3AoXFx1MDAyNnNtYXAtXFx1MDAzZWZyZWVsaXN0KTtcXG4tXFx0XFx0aWYgKHVubGlrZWx5KCFuZXdfYnVja2V0KSlcXG4tXFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuLVxcdFxcdG1lbWNweShuZXdfYnVja2V0LVxcdTAwM2VkYXRhLCBpcHMsIHRyYWNlX2xlbik7XFxuIFxcdH1cXG4gXFxuLVxcdG5ld19idWNrZXQtXFx1MDAzZWhhc2ggPSBoYXNoO1xcbi1cXHRuZXdfYnVja2V0LVxcdTAwM2VuciA9IHRyYWNlX25yO1xcbi1cXG4tXFx0b2xkX2J1Y2tldCA9IHhjaGcoXFx1MDAyNnNtYXAtXFx1MDAzZWJ1Y2tldHNbaWRdLCBuZXdfYnVja2V0KTtcXG4rXFx0b2xkX2J1Y2tldCA9IHhjaGcoXFx1MDAyNnNtYXAtXFx1MDAzZWJ1Y2tldHNbc3RhY2tpZC1cXHUwMDNlaWRdLCBuZXdfYnVja2V0KTtcXG4gXFx0aWYgKG9sZF9idWNrZXQpXFxuIFxcdFxcdHBjcHVfZnJlZWxpc3RfcHVzaChcXHUwMDI2c21hcC1cXHUwMDNlZnJlZWxpc3QsIFxcdTAwMjZvbGRfYnVja2V0LVxcdTAwM2Vmbm9kZSk7XFxuLVxcdHJldHVybiBpZDtcXG4rXFx0cmV0dXJuIHN0YWNraWQtXFx1MDAzZWlkO1xcbiB9XFxuIFxcbiBCUEZfQ0FMTF8zKGJwZl9nZXRfc3RhY2tpZCwgc3RydWN0IHB0X3JlZ3MgKiwgcmVncywgc3RydWN0IGJwZl9tYXAgKiwgbWFwLFxcbkBAIC01ODMsOCArNjIxLDExIEBAIEJQRl9DQUxMXzMoYnBmX2dldF9zdGFja2lkLCBzdHJ1Y3QgcHRfcmVncyAqLCByZWdzLCBzdHJ1Y3QgYnBmX21hcCAqLCBtYXAsXFxuIHtcXG4gXFx0dTMyIGVsZW1fc2l6ZSA9IHN0YWNrX21hcF9kYXRhX3NpemUobWFwKTtcXG4gXFx0Ym9vbCB1c2VyID0gZmxhZ3MgXFx1MDAyNiBCUEZfRl9VU0VSX1NUQUNLO1xcbitcXHRzdHJ1Y3Qgc3RhY2tfbWFwX2J1Y2tldCAqbmV3X2J1Y2tldDtcXG4gXFx0c3RydWN0IHBlcmZfY2FsbGNoYWluX2VudHJ5ICp0cmFjZTtcXG4rXFx0c3RydWN0IHN0YWNraWQgc3RhY2tpZDtcXG4gXFx0Ym9vbCBrZXJuZWwgPSAhdXNlcjtcXG4rXFx0aW50IGVyciA9IC1FRkFVTFQ7XFxuIFxcdHUzMiBtYXhfZGVwdGg7XFxuIFxcbiBcXHRpZiAodW5saWtlbHkoZmxhZ3MgXFx1MDAyNiB+KEJQRl9GX1NLSVBfRklFTERfTUFTSyB8IEJQRl9GX1VTRVJfU1RBQ0sgfFxcbkBAIC01OTIsMTQgKzYzMywyOSBAQCBCUEZfQ0FMTF8zKGJwZl9nZXRfc3RhY2tpZCwgc3RydWN0IHB0X3JlZ3MgKiwgcmVncywgc3RydWN0IGJwZl9tYXAgKiwgbWFwLFxcbiBcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gXFxuIFxcdG1heF9kZXB0aCA9IHN0YWNrX21hcF9jYWxjdWxhdGVfbWF4X2RlcHRoKG1hcC1cXHUwMDNldmFsdWVfc2l6ZSwgZWxlbV9zaXplLCBmbGFncyk7XFxuK1xcbitcXHRwcmVlbXB0X2Rpc2FibGUoKTtcXG4gXFx0dHJhY2UgPSBnZXRfcGVyZl9jYWxsY2hhaW4ocmVncywga2VybmVsLCB1c2VyLCBtYXhfZGVwdGgsXFxuIFxcdFxcdFxcdFxcdCAgIGZhbHNlLCBmYWxzZSwgMCk7XFxuIFxcbiBcXHRpZiAodW5saWtlbHkoIXRyYWNlKSlcXG4gXFx0XFx0LyogY291bGRuJ3QgZmV0Y2ggdGhlIHN0YWNrIHRyYWNlICovXFxuLVxcdFxcdHJldHVybiAtRUZBVUxUO1xcbitcXHRcXHRnb3RvIG91dDtcXG4rXFxuK1xcdGVyciA9IHN0YWNraWRfZmFzdHBhdGgoXFx1MDAyNnN0YWNraWQsIG1hcCwgdHJhY2UsIGZsYWdzKTtcXG4rXFx0aWYgKGVyciAhPSAtRU5PRU5UKVxcbitcXHRcXHRnb3RvIG91dDtcXG4rXFxuK1xcdG5ld19idWNrZXQgPSBzdGFja2lkX25ld19idWNrZXQoXFx1MDAyNnN0YWNraWQsIG1hcCwgdHJhY2UsIGZsYWdzKTtcXG4rXFx0aWYgKG5ld19idWNrZXQpIHtcXG4rXFx0XFx0cHJlZW1wdF9lbmFibGUoKTtcXG4rXFx0XFx0cmV0dXJuIHN0YWNraWRfaW5zdGFsbChcXHUwMDI2c3RhY2tpZCwgbWFwLCBuZXdfYnVja2V0LCBmbGFncyk7XFxuK1xcdH1cXG4rXFx0ZXJyID0gLUVOT01FTTtcXG4gXFxuLVxcdHJldHVybiBfX2JwZl9nZXRfc3RhY2tpZChtYXAsIHRyYWNlLCBmbGFncyk7XFxuK291dDpcXG4rXFx0cHJlZW1wdF9lbmFibGUoKTtcXG4rXFx0cmV0dXJuIGVycjtcXG4gfVxcbiBcXG4gY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9nZXRfc3RhY2tpZF9wcm90byA9IHtcXG5AQCAtNjI3LDcgKzY4Myw5IEBAIEJQRl9DQUxMXzMoYnBmX2dldF9zdGFja2lkX3BlLCBzdHJ1Y3QgYnBmX3BlcmZfZXZlbnRfZGF0YV9rZXJuICosIGN0eCxcXG4gXFx0ICAgc3RydWN0IGJwZl9tYXAgKiwgbWFwLCB1NjQsIGZsYWdzKVxcbiB7XFxuIFxcdHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCA9IGN0eC1cXHUwMDNlZXZlbnQ7XFxuK1xcdHN0cnVjdCBzdGFja19tYXBfYnVja2V0ICpuZXdfYnVja2V0O1xcbiBcXHRzdHJ1Y3QgcGVyZl9jYWxsY2hhaW5fZW50cnkgKnRyYWNlO1xcbitcXHRzdHJ1Y3Qgc3RhY2tpZCBzdGFja2lkO1xcbiBcXHRib29sIGtlcm5lbCwgdXNlcjtcXG4gXFx0X191NjQgbnJfa2VybmVsO1xcbiBcXHRpbnQgcmV0O1xcbkBAIC02NTMsNyArNzExLDYgQEAgQlBGX0NBTExfMyhicGZfZ2V0X3N0YWNraWRfcGUsIHN0cnVjdCBicGZfcGVyZl9ldmVudF9kYXRhX2tlcm4gKiwgY3R4LFxcbiBcXG4gXFx0aWYgKGtlcm5lbCkge1xcbiBcXHRcXHR0cmFjZS1cXHUwMDNlbnIgPSBucl9rZXJuZWw7XFxuLVxcdFxcdHJldCA9IF9fYnBmX2dldF9zdGFja2lkKG1hcCwgdHJhY2UsIGZsYWdzKTtcXG4gXFx0fSBlbHNlIHsgLyogdXNlciAqL1xcbiBcXHRcXHR1NjQgc2tpcCA9IGZsYWdzIFxcdTAwMjYgQlBGX0ZfU0tJUF9GSUVMRF9NQVNLO1xcbiBcXG5AQCAtNjYyLDEyICs3MTksMjIgQEAgQlBGX0NBTExfMyhicGZfZ2V0X3N0YWNraWRfcGUsIHN0cnVjdCBicGZfcGVyZl9ldmVudF9kYXRhX2tlcm4gKiwgY3R4LFxcbiBcXHRcXHRcXHRyZXR1cm4gLUVGQVVMVDtcXG4gXFxuIFxcdFxcdGZsYWdzID0gKGZsYWdzIFxcdTAwMjYgfkJQRl9GX1NLSVBfRklFTERfTUFTSykgfCBza2lwO1xcbi1cXHRcXHRyZXQgPSBfX2JwZl9nZXRfc3RhY2tpZChtYXAsIHRyYWNlLCBmbGFncyk7XFxuIFxcdH1cXG4gXFxuK1xcdHJldCA9IHN0YWNraWRfZmFzdHBhdGgoXFx1MDAyNnN0YWNraWQsIG1hcCwgdHJhY2UsIGZsYWdzKTtcXG4rXFx0aWYgKHJldCAhPSAtRU5PRU5UKVxcbitcXHRcXHRnb3RvIGVycm9yO1xcbitcXG4rXFx0bmV3X2J1Y2tldCA9IHN0YWNraWRfbmV3X2J1Y2tldChcXHUwMDI2c3RhY2tpZCwgbWFwLCB0cmFjZSwgZmxhZ3MpO1xcbitcXHRpZiAobmV3X2J1Y2tldCkge1xcbitcXHRcXHR0cmFjZS1cXHUwMDNlbnIgPSBucjtcXG4rXFx0XFx0cmV0dXJuIHN0YWNraWRfaW5zdGFsbChcXHUwMDI2c3RhY2tpZCwgbWFwLCBuZXdfYnVja2V0LCBmbGFncyk7XFxuK1xcdH1cXG4rXFx0cmV0ID0gLUVOT01FTTtcXG4rXFxuK2Vycm9yOlxcbiBcXHQvKiByZXN0b3JlIG5yICovXFxuIFxcdHRyYWNlLVxcdTAwM2VuciA9IG5yO1xcbi1cXG4gXFx0cmV0dXJuIHJldDtcXG4gfVxcbiBcXG5AQCAtNjgwLDE5ICs3NDcsNTMgQEAgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9nZXRfc3RhY2tpZF9wcm90b19wZSA9IHtcXG4gXFx0LmFyZzNfdHlwZVxcdD0gQVJHX0FOWVRISU5HLFxcbiB9O1xcbiBcXG4rc3RhdGljIHUzMiBjYWxsY2hhaW5fc3RvcmUoc3RydWN0IHBlcmZfY2FsbGNoYWluX2VudHJ5ICp0cmFjZSwgdm9pZCAqYnVmLCB1MzIgc2l6ZSxcXG4rXFx0XFx0XFx0ICAgdTMyIGVsZW1fc2l6ZSwgdTY0IGZsYWdzKVxcbit7XFxuK1xcdGJvb2wgdXNlcl9idWlsZF9pZCA9IGZsYWdzIFxcdTAwMjYgQlBGX0ZfVVNFUl9CVUlMRF9JRDtcXG4rXFx0dTMyIHNraXAgPSBmbGFncyBcXHUwMDI2IEJQRl9GX1NLSVBfRklFTERfTUFTSztcXG4rXFx0dTMyIHRyYWNlX25yLCBjb3B5X2xlbjtcXG4rXFx0dTY0ICppcHM7XFxuK1xcbitcXHR0cmFjZV9uciA9IHRyYWNlLVxcdTAwM2VuciAtIHNraXA7XFxuK1xcdGNvcHlfbGVuID0gdHJhY2VfbnIgKiBlbGVtX3NpemU7XFxuK1xcbitcXHRpcHMgPSB0cmFjZS1cXHUwMDNlaXAgKyBza2lwO1xcbitcXHRpZiAodXNlcl9idWlsZF9pZCkge1xcbitcXHRcXHRzdHJ1Y3QgYnBmX3N0YWNrX2J1aWxkX2lkICppZF9vZmZzID0gYnVmO1xcbitcXG4rXFx0XFx0Zm9yICh1MzIgaSA9IDA7IGkgXFx1MDAzYyB0cmFjZV9ucjsgaSsrKVxcbitcXHRcXHRcXHRpZF9vZmZzW2ldLmlwID0gaXBzW2ldO1xcbitcXHR9IGVsc2Uge1xcbitcXHRcXHRtZW1jcHkoYnVmLCBpcHMsIGNvcHlfbGVuKTtcXG4rXFx0fVxcbitcXHRyZXR1cm4gdHJhY2VfbnI7XFxuK31cXG4rXFxuK3N0YXRpYyBsb25nIGNhbGxjaGFpbl9maW5hbGl6ZSh2b2lkICpidWYsIHUzMiBzaXplLCB1MzIgdHJhY2VfbnIsIHUzMiBlbGVtX3NpemUsXFxuK1xcdFxcdFxcdCAgICAgICBib29sIHVzZXJfYnVpbGRfaWQsIGJvb2wgdXNlciwgYm9vbCBtYXlfZmF1bHQpXFxuK3tcXG4rXFx0dTMyIGNvcHlfbGVuID0gdHJhY2VfbnIgKiBlbGVtX3NpemU7XFxuK1xcbitcXHRpZiAodXNlcl9idWlsZF9pZClcXG4rXFx0XFx0c3RhY2tfbWFwX2dldF9idWlsZF9pZF9vZmZzZXQoYnVmLCB0cmFjZV9uciwgdXNlciwgbWF5X2ZhdWx0KTtcXG4rXFxuK1xcdGlmIChzaXplIFxcdTAwM2UgY29weV9sZW4pXFxuK1xcdFxcdG1lbXNldChidWYgKyBjb3B5X2xlbiwgMCwgc2l6ZSAtIGNvcHlfbGVuKTtcXG4rXFx0cmV0dXJuIGNvcHlfbGVuO1xcbit9XFxuK1xcbiBzdGF0aWMgbG9uZyBfX2JwZl9nZXRfc3RhY2soc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzayxcXG4tXFx0XFx0XFx0ICAgIHN0cnVjdCBwZXJmX2NhbGxjaGFpbl9lbnRyeSAqdHJhY2VfaW4sXFxuIFxcdFxcdFxcdCAgICB2b2lkICpidWYsIHUzMiBzaXplLCB1NjQgZmxhZ3MsIGJvb2wgbWF5X2ZhdWx0KVxcbiB7XFxuLVxcdHUzMiB0cmFjZV9uciwgY29weV9sZW4sIGVsZW1fc2l6ZSwgbWF4X2RlcHRoO1xcbiBcXHRib29sIHVzZXJfYnVpbGRfaWQgPSBmbGFncyBcXHUwMDI2IEJQRl9GX1VTRVJfQlVJTERfSUQ7XFxuIFxcdGJvb2wgY3Jvc3N0YXNrID0gdGFzayBcXHUwMDI2XFx1MDAyNiB0YXNrICE9IGN1cnJlbnQ7XFxuIFxcdHUzMiBza2lwID0gZmxhZ3MgXFx1MDAyNiBCUEZfRl9TS0lQX0ZJRUxEX01BU0s7XFxuIFxcdGJvb2wgdXNlciA9IGZsYWdzIFxcdTAwMjYgQlBGX0ZfVVNFUl9TVEFDSztcXG4gXFx0c3RydWN0IHBlcmZfY2FsbGNoYWluX2VudHJ5ICp0cmFjZTtcXG4rXFx0dTMyIHRyYWNlX25yLCBlbGVtX3NpemUsIG1heF9kZXB0aDtcXG4gXFx0Ym9vbCBrZXJuZWwgPSAhdXNlcjtcXG4gXFx0aW50IGVyciA9IC1FSU5WQUw7XFxuLVxcdHU2NCAqaXBzO1xcbiBcXG4gXFx0aWYgKHVubGlrZWx5KGZsYWdzIFxcdTAwMjYgfihCUEZfRl9TS0lQX0ZJRUxEX01BU0sgfCBCUEZfRl9VU0VSX1NUQUNLIHxcXG4gXFx0XFx0XFx0ICAgICAgIEJQRl9GX1VTRVJfQlVJTERfSUQpKSlcXG5AQCAtNzE4LDEzICs4MTksOSBAQCBzdGF0aWMgbG9uZyBfX2JwZl9nZXRfc3RhY2soc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzayxcXG4gXFxuIFxcdG1heF9kZXB0aCA9IHN0YWNrX21hcF9jYWxjdWxhdGVfbWF4X2RlcHRoKHNpemUsIGVsZW1fc2l6ZSwgZmxhZ3MpO1xcbiBcXG4tXFx0aWYgKG1heV9mYXVsdClcXG4tXFx0XFx0cmN1X3JlYWRfbG9jaygpOyAvKiBuZWVkIFJDVSBmb3IgcGVyZidzIGNhbGxjaGFpbiBiZWxvdyAqL1xcbitcXHRwcmVlbXB0X2Rpc2FibGUoKTtcXG4gXFxuLVxcdGlmICh0cmFjZV9pbikge1xcbi1cXHRcXHR0cmFjZSA9IHRyYWNlX2luO1xcbi1cXHRcXHR0cmFjZS1cXHUwMDNlbnIgPSBtaW5fdCh1MzIsIHRyYWNlLVxcdTAwM2VuciwgbWF4X2RlcHRoKTtcXG4tXFx0fSBlbHNlIGlmIChrZXJuZWwgXFx1MDAyNlxcdTAwMjYgdGFzaykge1xcbitcXHRpZiAoa2VybmVsIFxcdTAwMjZcXHUwMDI2IHRhc2spIHtcXG4gXFx0XFx0dHJhY2UgPSBnZXRfY2FsbGNoYWluX2VudHJ5X2Zvcl90YXNrKHRhc2ssIG1heF9kZXB0aCk7XFxuIFxcdH0gZWxzZSB7XFxuIFxcdFxcdHRyYWNlID0gZ2V0X3BlcmZfY2FsbGNoYWluKHJlZ3MsIGtlcm5lbCwgdXNlciwgbWF4X2RlcHRoLFxcbkBAIC03MzIsMzUgKzgyOSwxNiBAQCBzdGF0aWMgbG9uZyBfX2JwZl9nZXRfc3RhY2soc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzayxcXG4gXFx0fVxcbiBcXG4gXFx0aWYgKHVubGlrZWx5KCF0cmFjZSkgfHwgdHJhY2UtXFx1MDAzZW5yIFxcdTAwM2Mgc2tpcCkge1xcbi1cXHRcXHRpZiAobWF5X2ZhdWx0KVxcbi1cXHRcXHRcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4rXFx0XFx0cHJlZW1wdF9lbmFibGUoKTtcXG4gXFx0XFx0Z290byBlcnJfZmF1bHQ7XFxuIFxcdH1cXG4gXFxuLVxcdHRyYWNlX25yID0gdHJhY2UtXFx1MDAzZW5yIC0gc2tpcDtcXG4tXFx0Y29weV9sZW4gPSB0cmFjZV9uciAqIGVsZW1fc2l6ZTtcXG4tXFxuLVxcdGlwcyA9IHRyYWNlLVxcdTAwM2VpcCArIHNraXA7XFxuLVxcdGlmICh1c2VyX2J1aWxkX2lkKSB7XFxuLVxcdFxcdHN0cnVjdCBicGZfc3RhY2tfYnVpbGRfaWQgKmlkX29mZnMgPSBidWY7XFxuLVxcdFxcdHUzMiBpO1xcbi1cXG4tXFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIHRyYWNlX25yOyBpKyspXFxuLVxcdFxcdFxcdGlkX29mZnNbaV0uaXAgPSBpcHNbaV07XFxuLVxcdH0gZWxzZSB7XFxuLVxcdFxcdG1lbWNweShidWYsIGlwcywgY29weV9sZW4pO1xcbi1cXHR9XFxuLVxcbi1cXHQvKiB0cmFjZS9pcHMgc2hvdWxkIG5vdCBiZSBkZXJlZmVyZW5jZWQgYWZ0ZXIgdGhpcyBwb2ludCAqL1xcbi1cXHRpZiAobWF5X2ZhdWx0KVxcbi1cXHRcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4rXFx0dHJhY2VfbnIgPSBjYWxsY2hhaW5fc3RvcmUodHJhY2UsIGJ1Ziwgc2l6ZSwgZWxlbV9zaXplLCBmbGFncyk7XFxuIFxcbi1cXHRpZiAodXNlcl9idWlsZF9pZClcXG4tXFx0XFx0c3RhY2tfbWFwX2dldF9idWlsZF9pZF9vZmZzZXQoYnVmLCB0cmFjZV9uciwgdXNlciwgbWF5X2ZhdWx0KTtcXG4rXFx0LyogdHJhY2Ugc2hvdWxkIG5vdCBiZSBkZXJlZmVyZW5jZWQgYWZ0ZXIgdGhpcyBwb2ludCAqL1xcbitcXHRwcmVlbXB0X2VuYWJsZSgpO1xcbiBcXG4tXFx0aWYgKHNpemUgXFx1MDAzZSBjb3B5X2xlbilcXG4tXFx0XFx0bWVtc2V0KGJ1ZiArIGNvcHlfbGVuLCAwLCBzaXplIC0gY29weV9sZW4pO1xcbi1cXHRyZXR1cm4gY29weV9sZW47XFxuK1xcdHJldHVybiBjYWxsY2hhaW5fZmluYWxpemUoYnVmLCBzaXplLCB0cmFjZV9uciwgZWxlbV9zaXplLCB1c2VyX2J1aWxkX2lkLCB1c2VyLCBtYXlfZmF1bHQpO1xcbiBcXG4gZXJyX2ZhdWx0OlxcbiBcXHRlcnIgPSAtRUZBVUxUO1xcbkBAIC03NzIsNyArODUwLDcgQEAgc3RhdGljIGxvbmcgX19icGZfZ2V0X3N0YWNrKHN0cnVjdCBwdF9yZWdzICpyZWdzLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssXFxuIEJQRl9DQUxMXzQoYnBmX2dldF9zdGFjaywgc3RydWN0IHB0X3JlZ3MgKiwgcmVncywgdm9pZCAqLCBidWYsIHUzMiwgc2l6ZSxcXG4gXFx0ICAgdTY0LCBmbGFncylcXG4ge1xcbi1cXHRyZXR1cm4gX19icGZfZ2V0X3N0YWNrKHJlZ3MsIE5VTEwsIE5VTEwsIGJ1Ziwgc2l6ZSwgZmxhZ3MsIGZhbHNlIC8qICFtYXlfZmF1bHQgKi8pO1xcbitcXHRyZXR1cm4gX19icGZfZ2V0X3N0YWNrKHJlZ3MsIE5VTEwsIGJ1Ziwgc2l6ZSwgZmxhZ3MsIGZhbHNlIC8qICFtYXlfZmF1bHQgKi8pO1xcbiB9XFxuIFxcbiBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX2dldF9zdGFja19wcm90byA9IHtcXG5AQCAtNzg4LDcgKzg2Niw3IEBAIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfZ2V0X3N0YWNrX3Byb3RvID0ge1xcbiBCUEZfQ0FMTF80KGJwZl9nZXRfc3RhY2tfc2xlZXBhYmxlLCBzdHJ1Y3QgcHRfcmVncyAqLCByZWdzLCB2b2lkICosIGJ1ZiwgdTMyLCBzaXplLFxcbiBcXHQgICB1NjQsIGZsYWdzKVxcbiB7XFxuLVxcdHJldHVybiBfX2JwZl9nZXRfc3RhY2socmVncywgTlVMTCwgTlVMTCwgYnVmLCBzaXplLCBmbGFncywgdHJ1ZSAvKiBtYXlfZmF1bHQgKi8pO1xcbitcXHRyZXR1cm4gX19icGZfZ2V0X3N0YWNrKHJlZ3MsIE5VTEwsIGJ1Ziwgc2l6ZSwgZmxhZ3MsIHRydWUgLyogbWF5X2ZhdWx0ICovKTtcXG4gfVxcbiBcXG4gY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9nZXRfc3RhY2tfc2xlZXBhYmxlX3Byb3RvID0ge1xcbkBAIC04MTIsNyArODkwLDcgQEAgc3RhdGljIGxvbmcgX19icGZfZ2V0X3Rhc2tfc3RhY2soc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLCB2b2lkICpidWYsIHUzMiBzaXplLFxcbiBcXG4gXFx0cmVncyA9IHRhc2tfcHRfcmVncyh0YXNrKTtcXG4gXFx0aWYgKHJlZ3MpXFxuLVxcdFxcdHJlcyA9IF9fYnBmX2dldF9zdGFjayhyZWdzLCB0YXNrLCBOVUxMLCBidWYsIHNpemUsIGZsYWdzLCBtYXlfZmF1bHQpO1xcbitcXHRcXHRyZXMgPSBfX2JwZl9nZXRfc3RhY2socmVncywgdGFzaywgYnVmLCBzaXplLCBmbGFncywgbWF5X2ZhdWx0KTtcXG4gXFx0cHV0X3Rhc2tfc3RhY2sodGFzayk7XFxuIFxcbiBcXHRyZXR1cm4gcmVzO1xcbkBAIC04NTIsNiArOTMwLDMzIEBAIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfZ2V0X3Rhc2tfc3RhY2tfc2xlZXBhYmxlX3Byb3RvID0ge1xcbiBcXHQuYXJnNF90eXBlXFx0PSBBUkdfQU5ZVEhJTkcsXFxuIH07XFxuIFxcbitzdGF0aWMgaW50IF9fYnBmX2dldF9zdGFja19wZShzdHJ1Y3QgcGVyZl9jYWxsY2hhaW5fZW50cnkgKnRyYWNlLCB2b2lkICpidWYsIHUzMiBzaXplLFxcbitcXHRcXHRcXHQgICAgICB1NjQgZmxhZ3MpXFxuK3tcXG4rXFx0Ym9vbCB1c2VyX2J1aWxkX2lkID0gZmxhZ3MgXFx1MDAyNiBCUEZfRl9VU0VSX0JVSUxEX0lEO1xcbitcXHR1NjQgc2tpcCA9IGZsYWdzIFxcdTAwMjYgQlBGX0ZfU0tJUF9GSUVMRF9NQVNLO1xcbitcXHRib29sIHVzZXIgPSBmbGFncyBcXHUwMDI2IEJQRl9GX1VTRVJfU1RBQ0s7XFxuK1xcdHUzMiBlbGVtX3NpemUsIG1heF9kZXB0aCwgbnJfdHJhY2U7XFxuK1xcdGJvb2wga2VybmVsID0gIXVzZXI7XFxuK1xcbitcXHRpZiAoa2VybmVsIFxcdTAwMjZcXHUwMDI2IHVzZXJfYnVpbGRfaWQpXFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXG4rXFx0ZWxlbV9zaXplID0gdXNlcl9idWlsZF9pZCA/IHNpemVvZihzdHJ1Y3QgYnBmX3N0YWNrX2J1aWxkX2lkKSA6IHNpemVvZih1NjQpO1xcbitcXHRpZiAodW5saWtlbHkoc2l6ZSAlIGVsZW1fc2l6ZSkpXFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXG4rXFx0bWF4X2RlcHRoID0gc3RhY2tfbWFwX2NhbGN1bGF0ZV9tYXhfZGVwdGgoc2l6ZSwgZWxlbV9zaXplLCBmbGFncyk7XFxuK1xcdHRyYWNlLVxcdTAwM2VuciA9IG1pbl90KHUzMiwgdHJhY2UtXFx1MDAzZW5yLCBtYXhfZGVwdGgpO1xcbitcXG4rXFx0aWYgKHRyYWNlLVxcdTAwM2VuciBcXHUwMDNjIHNraXApXFxuK1xcdFxcdHJldHVybiAtRUZBVUxUO1xcbitcXG4rXFx0bnJfdHJhY2UgPSBjYWxsY2hhaW5fc3RvcmUodHJhY2UsIGJ1Ziwgc2l6ZSwgZWxlbV9zaXplLCBmbGFncyk7XFxuK1xcdHJldHVybiBjYWxsY2hhaW5fZmluYWxpemUoYnVmLCBzaXplLCBucl90cmFjZSwgZWxlbV9zaXplLCB1c2VyX2J1aWxkX2lkLFxcbitcXHRcXHRcXHRcXHQgIHVzZXIsIGZhbHNlIC8qICFtYXlfZmF1bHQgKi8pO1xcbit9XFxuK1xcbiBCUEZfQ0FMTF80KGJwZl9nZXRfc3RhY2tfcGUsIHN0cnVjdCBicGZfcGVyZl9ldmVudF9kYXRhX2tlcm4gKiwgY3R4LFxcbiBcXHQgICB2b2lkICosIGJ1ZiwgdTMyLCBzaXplLCB1NjQsIGZsYWdzKVxcbiB7XFxuQEAgLTg2Myw3ICs5NjgsNyBAQCBCUEZfQ0FMTF80KGJwZl9nZXRfc3RhY2tfcGUsIHN0cnVjdCBicGZfcGVyZl9ldmVudF9kYXRhX2tlcm4gKiwgY3R4LFxcbiBcXHRfX3U2NCBucl9rZXJuZWw7XFxuIFxcbiBcXHRpZiAoIShldmVudC1cXHUwMDNlYXR0ci5zYW1wbGVfdHlwZSBcXHUwMDI2IFBFUkZfU0FNUExFX0NBTExDSEFJTikpXFxuLVxcdFxcdHJldHVybiBfX2JwZl9nZXRfc3RhY2socmVncywgTlVMTCwgTlVMTCwgYnVmLCBzaXplLCBmbGFncywgZmFsc2UgLyogIW1heV9mYXVsdCAqLyk7XFxuK1xcdFxcdHJldHVybiBfX2JwZl9nZXRfc3RhY2socmVncywgTlVMTCwgYnVmLCBzaXplLCBmbGFncywgZmFsc2UgLyogIW1heV9mYXVsdCAqLyk7XFxuIFxcbiBcXHRpZiAodW5saWtlbHkoZmxhZ3MgXFx1MDAyNiB+KEJQRl9GX1NLSVBfRklFTERfTUFTSyB8IEJQRl9GX1VTRVJfU1RBQ0sgfFxcbiBcXHRcXHRcXHQgICAgICAgQlBGX0ZfVVNFUl9CVUlMRF9JRCkpKVxcbkBAIC04ODMsNyArOTg4LDcgQEAgQlBGX0NBTExfNChicGZfZ2V0X3N0YWNrX3BlLCBzdHJ1Y3QgYnBmX3BlcmZfZXZlbnRfZGF0YV9rZXJuICosIGN0eCxcXG4gXFx0XFx0X191NjQgbnIgPSB0cmFjZS1cXHUwMDNlbnI7XFxuIFxcbiBcXHRcXHR0cmFjZS1cXHUwMDNlbnIgPSBucl9rZXJuZWw7XFxuLVxcdFxcdGVyciA9IF9fYnBmX2dldF9zdGFjayhyZWdzLCBOVUxMLCB0cmFjZSwgYnVmLCBzaXplLCBmbGFncywgZmFsc2UgLyogIW1heV9mYXVsdCAqLyk7XFxuK1xcdFxcdGVyciA9IF9fYnBmX2dldF9zdGFja19wZSh0cmFjZSwgYnVmLCBzaXplLCBmbGFncyk7XFxuIFxcbiBcXHRcXHQvKiByZXN0b3JlIG5yICovXFxuIFxcdFxcdHRyYWNlLVxcdTAwM2VuciA9IG5yO1xcbkBAIC04OTMsMTQgKzk5OCwxMyBAQCBCUEZfQ0FMTF80KGJwZl9nZXRfc3RhY2tfcGUsIHN0cnVjdCBicGZfcGVyZl9ldmVudF9kYXRhX2tlcm4gKiwgY3R4LFxcbiBcXHRcXHRza2lwICs9IG5yX2tlcm5lbDtcXG4gXFx0XFx0aWYgKHNraXAgXFx1MDAzZSBCUEZfRl9TS0lQX0ZJRUxEX01BU0spXFxuIFxcdFxcdFxcdGdvdG8gY2xlYXI7XFxuLVxcbiBcXHRcXHRmbGFncyA9IChmbGFncyBcXHUwMDI2IH5CUEZfRl9TS0lQX0ZJRUxEX01BU0spIHwgc2tpcDtcXG4tXFx0XFx0ZXJyID0gX19icGZfZ2V0X3N0YWNrKHJlZ3MsIE5VTEwsIHRyYWNlLCBidWYsIHNpemUsIGZsYWdzLCBmYWxzZSAvKiAhbWF5X2ZhdWx0ICovKTtcXG4rXFx0XFx0ZXJyID0gX19icGZfZ2V0X3N0YWNrX3BlKHRyYWNlLCBidWYsIHNpemUsIGZsYWdzKTtcXG4gXFx0fVxcbi1cXHRyZXR1cm4gZXJyO1xcbiBcXG4gY2xlYXI6XFxuLVxcdG1lbXNldChidWYsIDAsIHNpemUpO1xcbitcXHRpZiAoZXJyIFxcdTAwM2MgMClcXG4rXFx0XFx0bWVtc2V0KGJ1ZiwgMCwgc2l6ZSk7XFxuIFxcdHJldHVybiBlcnI7XFxuIFxcbiB9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIwVDEwOjQ5OjU4LjY0Mjc3MDYyNVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjE1MjYzNjMyNjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX1NZU0NBTExcIixcbiAgICBcIlBFUkZfRVZFTlRTXCIsXG4gICAgXCJCUEZfRVZFTlRTXCIsXG4gICAgXCJTVEFDS1RSQUNFXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYnBmX2dldF9zdGFja2lkXCIsXG4gICAgXCJicGZfZ2V0X3N0YWNraWRfcGVcIixcbiAgICBcImJwZl9nZXRfc3RhY2tcIixcbiAgICBcImJwZl9nZXRfc3RhY2tfc2xlZXBhYmxlXCIsXG4gICAgXCJicGZfZ2V0X3Rhc2tfc3RhY2tcIixcbiAgICBcImJwZl9nZXRfdGFza19zdGFja19zbGVlcGFibGVcIixcbiAgICBcImJwZl9nZXRfc3RhY2tfcGVcIixcbiAgICBcInN0YWNraWRfZmFzdHBhdGhcIixcbiAgICBcInN0YWNraWRfbmV3X2J1Y2tldFwiLFxuICAgIFwic3RhY2tpZF9pbnN0YWxsXCIsXG4gICAgXCJjYWxsY2hhaW5fc3RvcmVcIixcbiAgICBcImNhbGxjaGFpbl9maW5hbGl6ZVwiLFxuICAgIFwiX19icGZfZ2V0X3N0YWNrXCIsXG4gICAgXCJfX2JwZl9nZXRfc3RhY2tfcGVcIixcbiAgICBcIl9fYnBmX2dldF90YXNrX3N0YWNrXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSBCUEYgc3RhY2ttYXAgYW5kIHN0YWNraWQgaGVscGVyIGZ1bmN0aW9ucywgaW50cm9kdWNpbmcgbmV3IGludGVybmFsIGhlbHBlciBmdW5jdGlvbnMgbGlrZSBgc3RhY2tpZF9mYXN0cGF0aGAsIGBzdGFja2lkX25ld19idWNrZXRgLCBgc3RhY2tpZF9pbnN0YWxsYCwgYGNhbGxjaGFpbl9zdG9yZWAsIGFuZCBgY2FsbGNoYWluX2ZpbmFsaXplYC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIEJQRiBzdWJzeXN0ZW0gdGhhdCBoYW5kbGVzIHN0YWNrIHRyYWNlcyBhbmQgcGVyZiBldmVudCBjYWxsY2hhaW5zLiBJdCBpcyBpbXBvcnRhbnQgdG8gZnV6eiB0aGVzZSBjaGFuZ2VzIHRvIGVuc3VyZSBubyByZWdyZXNzaW9ucywgbWVtb3J5IGxlYWtzLCBvciBjb25jdXJyZW5jeSBpc3N1ZXMgYXJlIGludHJvZHVjZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXRcbiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSxcbiAgIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgY2FlOTU0Yzk1Y2U3MmJhOTI5MTgwN2JhM2NjNWFkYzZjYWVmOWE5OFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gSnVsIDIwIDEwOjQ5OjU2IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9zdGFja21hcC5jIGIva2VybmVsL2JwZi9zdGFja21hcC5jXG5pbmRleCA0MWZlODdkNzMwMmYyMi4uMzdmOGU0NjMxOWIzNGYgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvYnBmL3N0YWNrbWFwLmNcbisrKyBiL2tlcm5lbC9icGYvc3RhY2ttYXAuY1xuQEAgLTUwNCw3OCArNTA0LDExNiBAQCBnZXRfY2FsbGNoYWluX2VudHJ5X2Zvcl90YXNrKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywgdTMyIG1heF9kZXB0aClcbiAjZW5kaWZcbiB9XG4gXG4tc3RhdGljIGxvbmcgX19icGZfZ2V0X3N0YWNraWQoc3RydWN0IGJwZl9tYXAgKm1hcCxcbi1cdFx0XHQgICAgICBzdHJ1Y3QgcGVyZl9jYWxsY2hhaW5fZW50cnkgKnRyYWNlLCB1NjQgZmxhZ3MpXG4rc3RydWN0IHN0YWNraWQge1xuK1x0c3RydWN0IHN0YWNrX21hcF9idWNrZXQgKmJ1Y2tldDtcbitcdHU2NCAqaXBzO1xuK1x0dTMyICBucjtcbitcdHUzMiAgbGVuO1xuK1x0dTMyICBoYXNoO1xuK1x0dTMyICBpZDtcbitcdGJvb2wgaGFzaF9tYXRjaGVzO1xuK307XG4rXG4rc3RhdGljIGludCBzdGFja2lkX2luaXQoc3RydWN0IHN0YWNraWQgKnN0YWNraWQsIHN0cnVjdCBicGZfbWFwICptYXAsXG4rXHRcdFx0c3RydWN0IHBlcmZfY2FsbGNoYWluX2VudHJ5ICp0cmFjZSwgdTY0IGZsYWdzKVxuIHtcbiBcdHN0cnVjdCBicGZfc3RhY2tfbWFwICpzbWFwID0gY29udGFpbmVyX29mKG1hcCwgc3RydWN0IGJwZl9zdGFja19tYXAsIG1hcCk7XG4tXHRzdHJ1Y3Qgc3RhY2tfbWFwX2J1Y2tldCAqYnVja2V0LCAqbmV3X2J1Y2tldCwgKm9sZF9idWNrZXQ7XG4tXHR1MzIgaGFzaCwgaWQsIHRyYWNlX25yLCB0cmFjZV9sZW4sIGksIG1heF9kZXB0aDtcbiBcdHUzMiBza2lwID0gZmxhZ3MgXHUwMDI2IEJQRl9GX1NLSVBfRklFTERfTUFTSztcbi1cdGJvb2wgdXNlciA9IGZsYWdzIFx1MDAyNiBCUEZfRl9VU0VSX1NUQUNLO1xuLVx0dTY0ICppcHM7XG4tXHRib29sIGhhc2hfbWF0Y2hlcztcbitcdHUzMiBtYXhfZGVwdGg7XG4gXG4gXHRpZiAodHJhY2UtXHUwMDNlbnIgXHUwMDNjPSBza2lwKVxuIFx0XHQvKiBza2lwcGluZyBtb3JlIHRoYW4gdXNhYmxlIHN0YWNrIHRyYWNlICovXG4gXHRcdHJldHVybiAtRUZBVUxUO1xuIFxuIFx0bWF4X2RlcHRoID0gc3RhY2tfbWFwX2NhbGN1bGF0ZV9tYXhfZGVwdGgobWFwLVx1MDAzZXZhbHVlX3NpemUsIHN0YWNrX21hcF9kYXRhX3NpemUobWFwKSwgZmxhZ3MpO1xuLVx0dHJhY2VfbnIgPSBtaW5fdCh1MzIsIHRyYWNlLVx1MDAzZW5yIC0gc2tpcCwgbWF4X2RlcHRoIC0gc2tpcCk7XG4tXHR0cmFjZV9sZW4gPSB0cmFjZV9uciAqIHNpemVvZih1NjQpO1xuLVx0aXBzID0gdHJhY2UtXHUwMDNlaXAgKyBza2lwO1xuLVx0aGFzaCA9IGpoYXNoMigodTMyICopaXBzLCB0cmFjZV9sZW4gLyBzaXplb2YodTMyKSwgMCk7XG4tXHRpZCA9IGhhc2ggXHUwMDI2IChzbWFwLVx1MDAzZW5fYnVja2V0cyAtIDEpO1xuLVx0YnVja2V0ID0gUkVBRF9PTkNFKHNtYXAtXHUwMDNlYnVja2V0c1tpZF0pO1xuK1x0c3RhY2tpZC1cdTAwM2VuciA9IG1pbl90KHUzMiwgdHJhY2UtXHUwMDNlbnIgLSBza2lwLCBtYXhfZGVwdGggLSBza2lwKTtcbitcdHN0YWNraWQtXHUwMDNlbGVuID0gc3RhY2tpZC1cdTAwM2VuciAqIHNpemVvZih1NjQpO1xuK1x0c3RhY2tpZC1cdTAwM2VpcHMgPSB0cmFjZS1cdTAwM2VpcCArIHNraXA7XG4rXHRzdGFja2lkLVx1MDAzZWhhc2ggPSBqaGFzaDIoKHUzMiAqKXN0YWNraWQtXHUwMDNlaXBzLCBzdGFja2lkLVx1MDAzZWxlbiAvIHNpemVvZih1MzIpLCAwKTtcbitcdHN0YWNraWQtXHUwMDNlaWQgPSBzdGFja2lkLVx1MDAzZWhhc2ggXHUwMDI2IChzbWFwLVx1MDAzZW5fYnVja2V0cyAtIDEpO1xuK1x0c3RhY2tpZC1cdTAwM2VidWNrZXQgPSBSRUFEX09OQ0Uoc21hcC1cdTAwM2VidWNrZXRzW3N0YWNraWQtXHUwMDNlaWRdKTtcbitcdHN0YWNraWQtXHUwMDNlaGFzaF9tYXRjaGVzID0gc3RhY2tpZC1cdTAwM2VidWNrZXQgXHUwMDI2XHUwMDI2IHN0YWNraWQtXHUwMDNlYnVja2V0LVx1MDAzZWhhc2ggPT0gc3RhY2tpZC1cdTAwM2VoYXNoO1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyBpbnQgc3RhY2tpZF9mYXN0cGF0aChzdHJ1Y3Qgc3RhY2tpZCAqc3RhY2tpZCwgc3RydWN0IGJwZl9tYXAgKm1hcCxcbitcdFx0XHQgICAgc3RydWN0IHBlcmZfY2FsbGNoYWluX2VudHJ5ICp0cmFjZSwgdTY0IGZsYWdzKVxuK3tcbitcdGludCBlcnI7XG4rXG4rXHRlcnIgPSBzdGFja2lkX2luaXQoc3RhY2tpZCwgbWFwLCB0cmFjZSwgZmxhZ3MpO1xuK1x0aWYgKGVycilcbitcdFx0cmV0dXJuIGVycjtcbiBcbi1cdGhhc2hfbWF0Y2hlcyA9IGJ1Y2tldCBcdTAwMjZcdTAwMjYgYnVja2V0LVx1MDAzZWhhc2ggPT0gaGFzaDtcbiBcdC8qIGZhc3QgY21wICovXG4tXHRpZiAoaGFzaF9tYXRjaGVzIFx1MDAyNlx1MDAyNiBmbGFncyBcdTAwMjYgQlBGX0ZfRkFTVF9TVEFDS19DTVApXG4tXHRcdHJldHVybiBpZDtcbitcdGlmIChzdGFja2lkLVx1MDAzZWhhc2hfbWF0Y2hlcyBcdTAwMjZcdTAwMjYgZmxhZ3MgXHUwMDI2IEJQRl9GX0ZBU1RfU1RBQ0tfQ01QKVxuK1x0XHRyZXR1cm4gc3RhY2tpZC1cdTAwM2VpZDtcbitcbitcdGlmIChzdGFja19tYXBfdXNlX2J1aWxkX2lkKG1hcCkpXG4rXHRcdHJldHVybiAtRU5PRU5UO1xuK1x0aWYgKHN0YWNraWQtXHUwMDNlaGFzaF9tYXRjaGVzIFx1MDAyNlx1MDAyNiBzdGFja2lkLVx1MDAzZWJ1Y2tldC1cdTAwM2VuciA9PSBzdGFja2lkLVx1MDAzZW5yIFx1MDAyNlx1MDAyNlxuK1x0ICAgIG1lbWNtcChzdGFja2lkLVx1MDAzZWJ1Y2tldC1cdTAwM2VkYXRhLCBzdGFja2lkLVx1MDAzZWlwcywgc3RhY2tpZC1cdTAwM2VsZW4pID09IDApXG4rXHRcdHJldHVybiBzdGFja2lkLVx1MDAzZWlkO1xuK1x0aWYgKHN0YWNraWQtXHUwMDNlYnVja2V0IFx1MDAyNlx1MDAyNiAhKGZsYWdzIFx1MDAyNiBCUEZfRl9SRVVTRV9TVEFDS0lEKSlcbitcdFx0cmV0dXJuIC1FRVhJU1Q7XG4rXHRyZXR1cm4gLUVOT0VOVDtcbit9XG4rXG4rc3RhdGljIHN0cnVjdCBzdGFja19tYXBfYnVja2V0ICpcbitzdGFja2lkX25ld19idWNrZXQoc3RydWN0IHN0YWNraWQgKnN0YWNraWQsIHN0cnVjdCBicGZfbWFwICptYXAsXG4rXHRcdCAgIHN0cnVjdCBwZXJmX2NhbGxjaGFpbl9lbnRyeSAqdHJhY2UsIHU2NCBmbGFncylcbit7XG4rXHRzdHJ1Y3QgYnBmX3N0YWNrX21hcCAqc21hcCA9IGNvbnRhaW5lcl9vZihtYXAsIHN0cnVjdCBicGZfc3RhY2tfbWFwLCBtYXApO1xuK1x0c3RydWN0IGJwZl9zdGFja19idWlsZF9pZCAqaWRfb2ZmcztcbitcdHN0cnVjdCBzdGFja19tYXBfYnVja2V0ICpidWNrZXQ7XG4rXHR1MzIgaTtcbitcbitcdGJ1Y2tldCA9IChzdHJ1Y3Qgc3RhY2tfbWFwX2J1Y2tldCAqKSBwY3B1X2ZyZWVsaXN0X3BvcChcdTAwMjZzbWFwLVx1MDAzZWZyZWVsaXN0KTtcbitcdGlmICh1bmxpa2VseSghYnVja2V0KSlcbitcdFx0cmV0dXJuIE5VTEw7XG4rXG4rXHRpZiAoc3RhY2tfbWFwX3VzZV9idWlsZF9pZChtYXApKSB7XG4rXHRcdGlkX29mZnMgPSAoc3RydWN0IGJwZl9zdGFja19idWlsZF9pZCAqKWJ1Y2tldC1cdTAwM2VkYXRhO1xuK1x0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBzdGFja2lkLVx1MDAzZW5yOyBpKyspXG4rXHRcdFx0aWRfb2Zmc1tpXS5pcCA9IHN0YWNraWQtXHUwMDNlaXBzW2ldO1xuK1x0fSBlbHNlIHtcbitcdFx0bWVtY3B5KGJ1Y2tldC1cdTAwM2VkYXRhLCBzdGFja2lkLVx1MDAzZWlwcywgc3RhY2tpZC1cdTAwM2VsZW4pO1xuK1x0fVxuK1xuK1x0YnVja2V0LVx1MDAzZWhhc2ggPSBzdGFja2lkLVx1MDAzZWhhc2g7XG4rXHRidWNrZXQtXHUwMDNlbnIgPSBzdGFja2lkLVx1MDAzZW5yO1xuK1x0cmV0dXJuIGJ1Y2tldDtcbit9XG4rXG4rc3RhdGljIGxvbmcgc3RhY2tpZF9pbnN0YWxsKHN0cnVjdCBzdGFja2lkICpzdGFja2lkLCBzdHJ1Y3QgYnBmX21hcCAqbWFwLFxuK1x0XHRcdCAgICBzdHJ1Y3Qgc3RhY2tfbWFwX2J1Y2tldCAqbmV3X2J1Y2tldCwgdTY0IGZsYWdzKVxuK3tcbitcdHN0cnVjdCBicGZfc3RhY2tfbWFwICpzbWFwID0gY29udGFpbmVyX29mKG1hcCwgc3RydWN0IGJwZl9zdGFja19tYXAsIG1hcCk7XG4rXHRib29sIHVzZXIgPSBmbGFncyBcdTAwMjYgQlBGX0ZfVVNFUl9TVEFDSztcbitcdHN0cnVjdCBzdGFja19tYXBfYnVja2V0ICpvbGRfYnVja2V0O1xuK1x0dTMyIHRyYWNlX2xlbjtcbiBcbiBcdGlmIChzdGFja19tYXBfdXNlX2J1aWxkX2lkKG1hcCkpIHtcbiBcdFx0c3RydWN0IGJwZl9zdGFja19idWlsZF9pZCAqaWRfb2ZmcztcbiBcbi1cdFx0LyogZm9yIGJ1aWxkX2lkK29mZnNldCwgcG9wIGEgYnVja2V0IGJlZm9yZSBzbG93IGNtcCAqL1xuLVx0XHRuZXdfYnVja2V0ID0gKHN0cnVjdCBzdGFja19tYXBfYnVja2V0ICopXG4tXHRcdFx0cGNwdV9mcmVlbGlzdF9wb3AoXHUwMDI2c21hcC1cdTAwM2VmcmVlbGlzdCk7XG4tXHRcdGlmICh1bmxpa2VseSghbmV3X2J1Y2tldCkpXG4tXHRcdFx0cmV0dXJuIC1FTk9NRU07XG4tXHRcdG5ld19idWNrZXQtXHUwMDNlbnIgPSB0cmFjZV9ucjtcbiBcdFx0aWRfb2ZmcyA9IChzdHJ1Y3QgYnBmX3N0YWNrX2J1aWxkX2lkICopbmV3X2J1Y2tldC1cdTAwM2VkYXRhO1xuLVx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyB0cmFjZV9ucjsgaSsrKVxuLVx0XHRcdGlkX29mZnNbaV0uaXAgPSBpcHNbaV07XG4tXHRcdHN0YWNrX21hcF9nZXRfYnVpbGRfaWRfb2Zmc2V0KGlkX29mZnMsIHRyYWNlX25yLCB1c2VyLCBmYWxzZSAvKiAhbWF5X2ZhdWx0ICovKTtcbi1cdFx0dHJhY2VfbGVuID0gdHJhY2VfbnIgKiBzaXplb2Yoc3RydWN0IGJwZl9zdGFja19idWlsZF9pZCk7XG4tXHRcdGlmIChoYXNoX21hdGNoZXMgXHUwMDI2XHUwMDI2IGJ1Y2tldC1cdTAwM2VuciA9PSB0cmFjZV9uciBcdTAwMjZcdTAwMjZcbi1cdFx0ICAgIG1lbWNtcChidWNrZXQtXHUwMDNlZGF0YSwgbmV3X2J1Y2tldC1cdTAwM2VkYXRhLCB0cmFjZV9sZW4pID09IDApIHtcbitcdFx0c3RhY2tfbWFwX2dldF9idWlsZF9pZF9vZmZzZXQoaWRfb2Zmcywgc3RhY2tpZC1cdTAwM2VuciwgdXNlciwgZmFsc2UgLyogIW1heV9mYXVsdCAqLyk7XG4rXHRcdHRyYWNlX2xlbiA9IHN0YWNraWQtXHUwMDNlbnIgKiBzaXplb2Yoc3RydWN0IGJwZl9zdGFja19idWlsZF9pZCk7XG4rXHRcdGlmIChzdGFja2lkLVx1MDAzZWhhc2hfbWF0Y2hlcyBcdTAwMjZcdTAwMjYgc3RhY2tpZC1cdTAwM2VidWNrZXQtXHUwMDNlbnIgPT0gc3RhY2tpZC1cdTAwM2VuciBcdTAwMjZcdTAwMjZcbitcdFx0ICAgIG1lbWNtcChzdGFja2lkLVx1MDAzZWJ1Y2tldC1cdTAwM2VkYXRhLCBuZXdfYnVja2V0LVx1MDAzZWRhdGEsIHRyYWNlX2xlbikgPT0gMCkge1xuIFx0XHRcdHBjcHVfZnJlZWxpc3RfcHVzaChcdTAwMjZzbWFwLVx1MDAzZWZyZWVsaXN0LCBcdTAwMjZuZXdfYnVja2V0LVx1MDAzZWZub2RlKTtcbi1cdFx0XHRyZXR1cm4gaWQ7XG4rXHRcdFx0cmV0dXJuIHN0YWNraWQtXHUwMDNlaWQ7XG4gXHRcdH1cbi1cdFx0aWYgKGJ1Y2tldCBcdTAwMjZcdTAwMjYgIShmbGFncyBcdTAwMjYgQlBGX0ZfUkVVU0VfU1RBQ0tJRCkpIHtcbitcdFx0aWYgKHN0YWNraWQtXHUwMDNlYnVja2V0IFx1MDAyNlx1MDAyNiAhKGZsYWdzIFx1MDAyNiBCUEZfRl9SRVVTRV9TVEFDS0lEKSkge1xuIFx0XHRcdHBjcHVfZnJlZWxpc3RfcHVzaChcdTAwMjZzbWFwLVx1MDAzZWZyZWVsaXN0LCBcdTAwMjZuZXdfYnVja2V0LVx1MDAzZWZub2RlKTtcbiBcdFx0XHRyZXR1cm4gLUVFWElTVDtcbiBcdFx0fVxuLVx0fSBlbHNlIHtcbi1cdFx0aWYgKGhhc2hfbWF0Y2hlcyBcdTAwMjZcdTAwMjYgYnVja2V0LVx1MDAzZW5yID09IHRyYWNlX25yIFx1MDAyNlx1MDAyNlxuLVx0XHQgICAgbWVtY21wKGJ1Y2tldC1cdTAwM2VkYXRhLCBpcHMsIHRyYWNlX2xlbikgPT0gMClcbi1cdFx0XHRyZXR1cm4gaWQ7XG4tXHRcdGlmIChidWNrZXQgXHUwMDI2XHUwMDI2ICEoZmxhZ3MgXHUwMDI2IEJQRl9GX1JFVVNFX1NUQUNLSUQpKVxuLVx0XHRcdHJldHVybiAtRUVYSVNUO1xuLVxuLVx0XHRuZXdfYnVja2V0ID0gKHN0cnVjdCBzdGFja19tYXBfYnVja2V0ICopXG4tXHRcdFx0cGNwdV9mcmVlbGlzdF9wb3AoXHUwMDI2c21hcC1cdTAwM2VmcmVlbGlzdCk7XG4tXHRcdGlmICh1bmxpa2VseSghbmV3X2J1Y2tldCkpXG4tXHRcdFx0cmV0dXJuIC1FTk9NRU07XG4tXHRcdG1lbWNweShuZXdfYnVja2V0LVx1MDAzZWRhdGEsIGlwcywgdHJhY2VfbGVuKTtcbiBcdH1cbiBcbi1cdG5ld19idWNrZXQtXHUwMDNlaGFzaCA9IGhhc2g7XG4tXHRuZXdfYnVja2V0LVx1MDAzZW5yID0gdHJhY2VfbnI7XG4tXG4tXHRvbGRfYnVja2V0ID0geGNoZyhcdTAwMjZzbWFwLVx1MDAzZWJ1Y2tldHNbaWRdLCBuZXdfYnVja2V0KTtcbitcdG9sZF9idWNrZXQgPSB4Y2hnKFx1MDAyNnNtYXAtXHUwMDNlYnVja2V0c1tzdGFja2lkLVx1MDAzZWlkXSwgbmV3X2J1Y2tldCk7XG4gXHRpZiAob2xkX2J1Y2tldClcbiBcdFx0cGNwdV9mcmVlbGlzdF9wdXNoKFx1MDAyNnNtYXAtXHUwMDNlZnJlZWxpc3QsIFx1MDAyNm9sZF9idWNrZXQtXHUwMDNlZm5vZGUpO1xuLVx0cmV0dXJuIGlkO1xuK1x0cmV0dXJuIHN0YWNraWQtXHUwMDNlaWQ7XG4gfVxuIFxuIEJQRl9DQUxMXzMoYnBmX2dldF9zdGFja2lkLCBzdHJ1Y3QgcHRfcmVncyAqLCByZWdzLCBzdHJ1Y3QgYnBmX21hcCAqLCBtYXAsXG5AQCAtNTgzLDggKzYyMSwxMSBAQCBCUEZfQ0FMTF8zKGJwZl9nZXRfc3RhY2tpZCwgc3RydWN0IHB0X3JlZ3MgKiwgcmVncywgc3RydWN0IGJwZl9tYXAgKiwgbWFwLFxuIHtcbiBcdHUzMiBlbGVtX3NpemUgPSBzdGFja19tYXBfZGF0YV9zaXplKG1hcCk7XG4gXHRib29sIHVzZXIgPSBmbGFncyBcdTAwMjYgQlBGX0ZfVVNFUl9TVEFDSztcbitcdHN0cnVjdCBzdGFja19tYXBfYnVja2V0ICpuZXdfYnVja2V0O1xuIFx0c3RydWN0IHBlcmZfY2FsbGNoYWluX2VudHJ5ICp0cmFjZTtcbitcdHN0cnVjdCBzdGFja2lkIHN0YWNraWQ7XG4gXHRib29sIGtlcm5lbCA9ICF1c2VyO1xuK1x0aW50IGVyciA9IC1FRkFVTFQ7XG4gXHR1MzIgbWF4X2RlcHRoO1xuIFxuIFx0aWYgKHVubGlrZWx5KGZsYWdzIFx1MDAyNiB+KEJQRl9GX1NLSVBfRklFTERfTUFTSyB8IEJQRl9GX1VTRVJfU1RBQ0sgfFxuQEAgLTU5MiwxNCArNjMzLDI5IEBAIEJQRl9DQUxMXzMoYnBmX2dldF9zdGFja2lkLCBzdHJ1Y3QgcHRfcmVncyAqLCByZWdzLCBzdHJ1Y3QgYnBmX21hcCAqLCBtYXAsXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFxuIFx0bWF4X2RlcHRoID0gc3RhY2tfbWFwX2NhbGN1bGF0ZV9tYXhfZGVwdGgobWFwLVx1MDAzZXZhbHVlX3NpemUsIGVsZW1fc2l6ZSwgZmxhZ3MpO1xuK1xuK1x0cHJlZW1wdF9kaXNhYmxlKCk7XG4gXHR0cmFjZSA9IGdldF9wZXJmX2NhbGxjaGFpbihyZWdzLCBrZXJuZWwsIHVzZXIsIG1heF9kZXB0aCxcbiBcdFx0XHRcdCAgIGZhbHNlLCBmYWxzZSwgMCk7XG4gXG4gXHRpZiAodW5saWtlbHkoIXRyYWNlKSlcbiBcdFx0LyogY291bGRuJ3QgZmV0Y2ggdGhlIHN0YWNrIHRyYWNlICovXG4tXHRcdHJldHVybiAtRUZBVUxUO1xuK1x0XHRnb3RvIG91dDtcbitcbitcdGVyciA9IHN0YWNraWRfZmFzdHBhdGgoXHUwMDI2c3RhY2tpZCwgbWFwLCB0cmFjZSwgZmxhZ3MpO1xuK1x0aWYgKGVyciAhPSAtRU5PRU5UKVxuK1x0XHRnb3RvIG91dDtcbitcbitcdG5ld19idWNrZXQgPSBzdGFja2lkX25ld19idWNrZXQoXHUwMDI2c3RhY2tpZCwgbWFwLCB0cmFjZSwgZmxhZ3MpO1xuK1x0aWYgKG5ld19idWNrZXQpIHtcbitcdFx0cHJlZW1wdF9lbmFibGUoKTtcbitcdFx0cmV0dXJuIHN0YWNraWRfaW5zdGFsbChcdTAwMjZzdGFja2lkLCBtYXAsIG5ld19idWNrZXQsIGZsYWdzKTtcbitcdH1cbitcdGVyciA9IC1FTk9NRU07XG4gXG4tXHRyZXR1cm4gX19icGZfZ2V0X3N0YWNraWQobWFwLCB0cmFjZSwgZmxhZ3MpO1xuK291dDpcbitcdHByZWVtcHRfZW5hYmxlKCk7XG4rXHRyZXR1cm4gZXJyO1xuIH1cbiBcbiBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX2dldF9zdGFja2lkX3Byb3RvID0ge1xuQEAgLTYyNyw3ICs2ODMsOSBAQCBCUEZfQ0FMTF8zKGJwZl9nZXRfc3RhY2tpZF9wZSwgc3RydWN0IGJwZl9wZXJmX2V2ZW50X2RhdGFfa2VybiAqLCBjdHgsXG4gXHQgICBzdHJ1Y3QgYnBmX21hcCAqLCBtYXAsIHU2NCwgZmxhZ3MpXG4ge1xuIFx0c3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50ID0gY3R4LVx1MDAzZWV2ZW50O1xuK1x0c3RydWN0IHN0YWNrX21hcF9idWNrZXQgKm5ld19idWNrZXQ7XG4gXHRzdHJ1Y3QgcGVyZl9jYWxsY2hhaW5fZW50cnkgKnRyYWNlO1xuK1x0c3RydWN0IHN0YWNraWQgc3RhY2tpZDtcbiBcdGJvb2wga2VybmVsLCB1c2VyO1xuIFx0X191NjQgbnJfa2VybmVsO1xuIFx0aW50IHJldDtcbkBAIC02NTMsNyArNzExLDYgQEAgQlBGX0NBTExfMyhicGZfZ2V0X3N0YWNraWRfcGUsIHN0cnVjdCBicGZfcGVyZl9ldmVudF9kYXRhX2tlcm4gKiwgY3R4LFxuIFxuIFx0aWYgKGtlcm5lbCkge1xuIFx0XHR0cmFjZS1cdTAwM2VuciA9IG5yX2tlcm5lbDtcbi1cdFx0cmV0ID0gX19icGZfZ2V0X3N0YWNraWQobWFwLCB0cmFjZSwgZmxhZ3MpO1xuIFx0fSBlbHNlIHsgLyogdXNlciAqL1xuIFx0XHR1NjQgc2tpcCA9IGZsYWdzIFx1MDAyNiBCUEZfRl9TS0lQX0ZJRUxEX01BU0s7XG4gXG5AQCAtNjYyLDEyICs3MTksMjIgQEAgQlBGX0NBTExfMyhicGZfZ2V0X3N0YWNraWRfcGUsIHN0cnVjdCBicGZfcGVyZl9ldmVudF9kYXRhX2tlcm4gKiwgY3R4LFxuIFx0XHRcdHJldHVybiAtRUZBVUxUO1xuIFxuIFx0XHRmbGFncyA9IChmbGFncyBcdTAwMjYgfkJQRl9GX1NLSVBfRklFTERfTUFTSykgfCBza2lwO1xuLVx0XHRyZXQgPSBfX2JwZl9nZXRfc3RhY2tpZChtYXAsIHRyYWNlLCBmbGFncyk7XG4gXHR9XG4gXG4rXHRyZXQgPSBzdGFja2lkX2Zhc3RwYXRoKFx1MDAyNnN0YWNraWQsIG1hcCwgdHJhY2UsIGZsYWdzKTtcbitcdGlmIChyZXQgIT0gLUVOT0VOVClcbitcdFx0Z290byBlcnJvcjtcbitcbitcdG5ld19idWNrZXQgPSBzdGFja2lkX25ld19idWNrZXQoXHUwMDI2c3RhY2tpZCwgbWFwLCB0cmFjZSwgZmxhZ3MpO1xuK1x0aWYgKG5ld19idWNrZXQpIHtcbitcdFx0dHJhY2UtXHUwMDNlbnIgPSBucjtcbitcdFx0cmV0dXJuIHN0YWNraWRfaW5zdGFsbChcdTAwMjZzdGFja2lkLCBtYXAsIG5ld19idWNrZXQsIGZsYWdzKTtcbitcdH1cbitcdHJldCA9IC1FTk9NRU07XG4rXG4rZXJyb3I6XG4gXHQvKiByZXN0b3JlIG5yICovXG4gXHR0cmFjZS1cdTAwM2VuciA9IG5yO1xuLVxuIFx0cmV0dXJuIHJldDtcbiB9XG4gXG5AQCAtNjgwLDE5ICs3NDcsNTMgQEAgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9nZXRfc3RhY2tpZF9wcm90b19wZSA9IHtcbiBcdC5hcmczX3R5cGVcdD0gQVJHX0FOWVRISU5HLFxuIH07XG4gXG4rc3RhdGljIHUzMiBjYWxsY2hhaW5fc3RvcmUoc3RydWN0IHBlcmZfY2FsbGNoYWluX2VudHJ5ICp0cmFjZSwgdm9pZCAqYnVmLCB1MzIgc2l6ZSxcbitcdFx0XHQgICB1MzIgZWxlbV9zaXplLCB1NjQgZmxhZ3MpXG4re1xuK1x0Ym9vbCB1c2VyX2J1aWxkX2lkID0gZmxhZ3MgXHUwMDI2IEJQRl9GX1VTRVJfQlVJTERfSUQ7XG4rXHR1MzIgc2tpcCA9IGZsYWdzIFx1MDAyNiBCUEZfRl9TS0lQX0ZJRUxEX01BU0s7XG4rXHR1MzIgdHJhY2VfbnIsIGNvcHlfbGVuO1xuK1x0dTY0ICppcHM7XG4rXG4rXHR0cmFjZV9uciA9IHRyYWNlLVx1MDAzZW5yIC0gc2tpcDtcbitcdGNvcHlfbGVuID0gdHJhY2VfbnIgKiBlbGVtX3NpemU7XG4rXG4rXHRpcHMgPSB0cmFjZS1cdTAwM2VpcCArIHNraXA7XG4rXHRpZiAodXNlcl9idWlsZF9pZCkge1xuK1x0XHRzdHJ1Y3QgYnBmX3N0YWNrX2J1aWxkX2lkICppZF9vZmZzID0gYnVmO1xuK1xuK1x0XHRmb3IgKHUzMiBpID0gMDsgaSBcdTAwM2MgdHJhY2VfbnI7IGkrKylcbitcdFx0XHRpZF9vZmZzW2ldLmlwID0gaXBzW2ldO1xuK1x0fSBlbHNlIHtcbitcdFx0bWVtY3B5KGJ1ZiwgaXBzLCBjb3B5X2xlbik7XG4rXHR9XG4rXHRyZXR1cm4gdHJhY2VfbnI7XG4rfVxuK1xuK3N0YXRpYyBsb25nIGNhbGxjaGFpbl9maW5hbGl6ZSh2b2lkICpidWYsIHUzMiBzaXplLCB1MzIgdHJhY2VfbnIsIHUzMiBlbGVtX3NpemUsXG4rXHRcdFx0ICAgICAgIGJvb2wgdXNlcl9idWlsZF9pZCwgYm9vbCB1c2VyLCBib29sIG1heV9mYXVsdClcbit7XG4rXHR1MzIgY29weV9sZW4gPSB0cmFjZV9uciAqIGVsZW1fc2l6ZTtcbitcbitcdGlmICh1c2VyX2J1aWxkX2lkKVxuK1x0XHRzdGFja19tYXBfZ2V0X2J1aWxkX2lkX29mZnNldChidWYsIHRyYWNlX25yLCB1c2VyLCBtYXlfZmF1bHQpO1xuK1xuK1x0aWYgKHNpemUgXHUwMDNlIGNvcHlfbGVuKVxuK1x0XHRtZW1zZXQoYnVmICsgY29weV9sZW4sIDAsIHNpemUgLSBjb3B5X2xlbik7XG4rXHRyZXR1cm4gY29weV9sZW47XG4rfVxuK1xuIHN0YXRpYyBsb25nIF9fYnBmX2dldF9zdGFjayhzdHJ1Y3QgcHRfcmVncyAqcmVncywgc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLFxuLVx0XHRcdCAgICBzdHJ1Y3QgcGVyZl9jYWxsY2hhaW5fZW50cnkgKnRyYWNlX2luLFxuIFx0XHRcdCAgICB2b2lkICpidWYsIHUzMiBzaXplLCB1NjQgZmxhZ3MsIGJvb2wgbWF5X2ZhdWx0KVxuIHtcbi1cdHUzMiB0cmFjZV9uciwgY29weV9sZW4sIGVsZW1fc2l6ZSwgbWF4X2RlcHRoO1xuIFx0Ym9vbCB1c2VyX2J1aWxkX2lkID0gZmxhZ3MgXHUwMDI2IEJQRl9GX1VTRVJfQlVJTERfSUQ7XG4gXHRib29sIGNyb3NzdGFzayA9IHRhc2sgXHUwMDI2XHUwMDI2IHRhc2sgIT0gY3VycmVudDtcbiBcdHUzMiBza2lwID0gZmxhZ3MgXHUwMDI2IEJQRl9GX1NLSVBfRklFTERfTUFTSztcbiBcdGJvb2wgdXNlciA9IGZsYWdzIFx1MDAyNiBCUEZfRl9VU0VSX1NUQUNLO1xuIFx0c3RydWN0IHBlcmZfY2FsbGNoYWluX2VudHJ5ICp0cmFjZTtcbitcdHUzMiB0cmFjZV9uciwgZWxlbV9zaXplLCBtYXhfZGVwdGg7XG4gXHRib29sIGtlcm5lbCA9ICF1c2VyO1xuIFx0aW50IGVyciA9IC1FSU5WQUw7XG4tXHR1NjQgKmlwcztcbiBcbiBcdGlmICh1bmxpa2VseShmbGFncyBcdTAwMjYgfihCUEZfRl9TS0lQX0ZJRUxEX01BU0sgfCBCUEZfRl9VU0VSX1NUQUNLIHxcbiBcdFx0XHQgICAgICAgQlBGX0ZfVVNFUl9CVUlMRF9JRCkpKVxuQEAgLTcxOCwxMyArODE5LDkgQEAgc3RhdGljIGxvbmcgX19icGZfZ2V0X3N0YWNrKHN0cnVjdCBwdF9yZWdzICpyZWdzLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssXG4gXG4gXHRtYXhfZGVwdGggPSBzdGFja19tYXBfY2FsY3VsYXRlX21heF9kZXB0aChzaXplLCBlbGVtX3NpemUsIGZsYWdzKTtcbiBcbi1cdGlmIChtYXlfZmF1bHQpXG4tXHRcdHJjdV9yZWFkX2xvY2soKTsgLyogbmVlZCBSQ1UgZm9yIHBlcmYncyBjYWxsY2hhaW4gYmVsb3cgKi9cbitcdHByZWVtcHRfZGlzYWJsZSgpO1xuIFxuLVx0aWYgKHRyYWNlX2luKSB7XG4tXHRcdHRyYWNlID0gdHJhY2VfaW47XG4tXHRcdHRyYWNlLVx1MDAzZW5yID0gbWluX3QodTMyLCB0cmFjZS1cdTAwM2VuciwgbWF4X2RlcHRoKTtcbi1cdH0gZWxzZSBpZiAoa2VybmVsIFx1MDAyNlx1MDAyNiB0YXNrKSB7XG4rXHRpZiAoa2VybmVsIFx1MDAyNlx1MDAyNiB0YXNrKSB7XG4gXHRcdHRyYWNlID0gZ2V0X2NhbGxjaGFpbl9lbnRyeV9mb3JfdGFzayh0YXNrLCBtYXhfZGVwdGgpO1xuIFx0fSBlbHNlIHtcbiBcdFx0dHJhY2UgPSBnZXRfcGVyZl9jYWxsY2hhaW4ocmVncywga2VybmVsLCB1c2VyLCBtYXhfZGVwdGgsXG5AQCAtNzMyLDM1ICs4MjksMTYgQEAgc3RhdGljIGxvbmcgX19icGZfZ2V0X3N0YWNrKHN0cnVjdCBwdF9yZWdzICpyZWdzLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssXG4gXHR9XG4gXG4gXHRpZiAodW5saWtlbHkoIXRyYWNlKSB8fCB0cmFjZS1cdTAwM2VuciBcdTAwM2Mgc2tpcCkge1xuLVx0XHRpZiAobWF5X2ZhdWx0KVxuLVx0XHRcdHJjdV9yZWFkX3VubG9jaygpO1xuK1x0XHRwcmVlbXB0X2VuYWJsZSgpO1xuIFx0XHRnb3RvIGVycl9mYXVsdDtcbiBcdH1cbiBcbi1cdHRyYWNlX25yID0gdHJhY2UtXHUwMDNlbnIgLSBza2lwO1xuLVx0Y29weV9sZW4gPSB0cmFjZV9uciAqIGVsZW1fc2l6ZTtcbi1cbi1cdGlwcyA9IHRyYWNlLVx1MDAzZWlwICsgc2tpcDtcbi1cdGlmICh1c2VyX2J1aWxkX2lkKSB7XG4tXHRcdHN0cnVjdCBicGZfc3RhY2tfYnVpbGRfaWQgKmlkX29mZnMgPSBidWY7XG4tXHRcdHUzMiBpO1xuLVxuLVx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyB0cmFjZV9ucjsgaSsrKVxuLVx0XHRcdGlkX29mZnNbaV0uaXAgPSBpcHNbaV07XG4tXHR9IGVsc2Uge1xuLVx0XHRtZW1jcHkoYnVmLCBpcHMsIGNvcHlfbGVuKTtcbi1cdH1cbi1cbi1cdC8qIHRyYWNlL2lwcyBzaG91bGQgbm90IGJlIGRlcmVmZXJlbmNlZCBhZnRlciB0aGlzIHBvaW50ICovXG4tXHRpZiAobWF5X2ZhdWx0KVxuLVx0XHRyY3VfcmVhZF91bmxvY2soKTtcbitcdHRyYWNlX25yID0gY2FsbGNoYWluX3N0b3JlKHRyYWNlLCBidWYsIHNpemUsIGVsZW1fc2l6ZSwgZmxhZ3MpO1xuIFxuLVx0aWYgKHVzZXJfYnVpbGRfaWQpXG4tXHRcdHN0YWNrX21hcF9nZXRfYnVpbGRfaWRfb2Zmc2V0KGJ1ZiwgdHJhY2VfbnIsIHVzZXIsIG1heV9mYXVsdCk7XG4rXHQvKiB0cmFjZSBzaG91bGQgbm90IGJlIGRlcmVmZXJlbmNlZCBhZnRlciB0aGlzIHBvaW50ICovXG4rXHRwcmVlbXB0X2VuYWJsZSgpO1xuIFxuLVx0aWYgKHNpemUgXHUwMDNlIGNvcHlfbGVuKVxuLVx0XHRtZW1zZXQoYnVmICsgY29weV9sZW4sIDAsIHNpemUgLSBjb3B5X2xlbik7XG4tXHRyZXR1cm4gY29weV9sZW47XG4rXHRyZXR1cm4gY2FsbGNoYWluX2ZpbmFsaXplKGJ1Ziwgc2l6ZSwgdHJhY2VfbnIsIGVsZW1fc2l6ZSwgdXNlcl9idWlsZF9pZCwgdXNlciwgbWF5X2ZhdWx0KTtcbiBcbiBlcnJfZmF1bHQ6XG4gXHRlcnIgPSAtRUZBVUxUO1xuQEAgLTc3Miw3ICs4NTAsNyBAQCBzdGF0aWMgbG9uZyBfX2JwZl9nZXRfc3RhY2soc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzayxcbiBCUEZfQ0FMTF80KGJwZl9nZXRfc3RhY2ssIHN0cnVjdCBwdF9yZWdzICosIHJlZ3MsIHZvaWQgKiwgYnVmLCB1MzIsIHNpemUsXG4gXHQgICB1NjQsIGZsYWdzKVxuIHtcbi1cdHJldHVybiBfX2JwZl9nZXRfc3RhY2socmVncywgTlVMTCwgTlVMTCwgYnVmLCBzaXplLCBmbGFncywgZmFsc2UgLyogIW1heV9mYXVsdCAqLyk7XG4rXHRyZXR1cm4gX19icGZfZ2V0X3N0YWNrKHJlZ3MsIE5VTEwsIGJ1Ziwgc2l6ZSwgZmxhZ3MsIGZhbHNlIC8qICFtYXlfZmF1bHQgKi8pO1xuIH1cbiBcbiBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX2dldF9zdGFja19wcm90byA9IHtcbkBAIC03ODgsNyArODY2LDcgQEAgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9nZXRfc3RhY2tfcHJvdG8gPSB7XG4gQlBGX0NBTExfNChicGZfZ2V0X3N0YWNrX3NsZWVwYWJsZSwgc3RydWN0IHB0X3JlZ3MgKiwgcmVncywgdm9pZCAqLCBidWYsIHUzMiwgc2l6ZSxcbiBcdCAgIHU2NCwgZmxhZ3MpXG4ge1xuLVx0cmV0dXJuIF9fYnBmX2dldF9zdGFjayhyZWdzLCBOVUxMLCBOVUxMLCBidWYsIHNpemUsIGZsYWdzLCB0cnVlIC8qIG1heV9mYXVsdCAqLyk7XG4rXHRyZXR1cm4gX19icGZfZ2V0X3N0YWNrKHJlZ3MsIE5VTEwsIGJ1Ziwgc2l6ZSwgZmxhZ3MsIHRydWUgLyogbWF5X2ZhdWx0ICovKTtcbiB9XG4gXG4gY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9nZXRfc3RhY2tfc2xlZXBhYmxlX3Byb3RvID0ge1xuQEAgLTgxMiw3ICs4OTAsNyBAQCBzdGF0aWMgbG9uZyBfX2JwZl9nZXRfdGFza19zdGFjayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssIHZvaWQgKmJ1ZiwgdTMyIHNpemUsXG4gXG4gXHRyZWdzID0gdGFza19wdF9yZWdzKHRhc2spO1xuIFx0aWYgKHJlZ3MpXG4tXHRcdHJlcyA9IF9fYnBmX2dldF9zdGFjayhyZWdzLCB0YXNrLCBOVUxMLCBidWYsIHNpemUsIGZsYWdzLCBtYXlfZmF1bHQpO1xuK1x0XHRyZXMgPSBfX2JwZl9nZXRfc3RhY2socmVncywgdGFzaywgYnVmLCBzaXplLCBmbGFncywgbWF5X2ZhdWx0KTtcbiBcdHB1dF90YXNrX3N0YWNrKHRhc2spO1xuIFxuIFx0cmV0dXJuIHJlcztcbkBAIC04NTIsNiArOTMwLDMzIEBAIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfZ2V0X3Rhc2tfc3RhY2tfc2xlZXBhYmxlX3Byb3RvID0ge1xuIFx0LmFyZzRfdHlwZVx0PSBBUkdfQU5ZVEhJTkcsXG4gfTtcbiBcbitzdGF0aWMgaW50IF9fYnBmX2dldF9zdGFja19wZShzdHJ1Y3QgcGVyZl9jYWxsY2hhaW5fZW50cnkgKnRyYWNlLCB2b2lkICpidWYsIHUzMiBzaXplLFxuK1x0XHRcdCAgICAgIHU2NCBmbGFncylcbit7XG4rXHRib29sIHVzZXJfYnVpbGRfaWQgPSBmbGFncyBcdTAwMjYgQlBGX0ZfVVNFUl9CVUlMRF9JRDtcbitcdHU2NCBza2lwID0gZmxhZ3MgXHUwMDI2IEJQRl9GX1NLSVBfRklFTERfTUFTSztcbitcdGJvb2wgdXNlciA9IGZsYWdzIFx1MDAyNiBCUEZfRl9VU0VSX1NUQUNLO1xuK1x0dTMyIGVsZW1fc2l6ZSwgbWF4X2RlcHRoLCBucl90cmFjZTtcbitcdGJvb2wga2VybmVsID0gIXVzZXI7XG4rXG4rXHRpZiAoa2VybmVsIFx1MDAyNlx1MDAyNiB1c2VyX2J1aWxkX2lkKVxuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcbitcdGVsZW1fc2l6ZSA9IHVzZXJfYnVpbGRfaWQgPyBzaXplb2Yoc3RydWN0IGJwZl9zdGFja19idWlsZF9pZCkgOiBzaXplb2YodTY0KTtcbitcdGlmICh1bmxpa2VseShzaXplICUgZWxlbV9zaXplKSlcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXG4rXHRtYXhfZGVwdGggPSBzdGFja19tYXBfY2FsY3VsYXRlX21heF9kZXB0aChzaXplLCBlbGVtX3NpemUsIGZsYWdzKTtcbitcdHRyYWNlLVx1MDAzZW5yID0gbWluX3QodTMyLCB0cmFjZS1cdTAwM2VuciwgbWF4X2RlcHRoKTtcbitcbitcdGlmICh0cmFjZS1cdTAwM2VuciBcdTAwM2Mgc2tpcClcbitcdFx0cmV0dXJuIC1FRkFVTFQ7XG4rXG4rXHRucl90cmFjZSA9IGNhbGxjaGFpbl9zdG9yZSh0cmFjZSwgYnVmLCBzaXplLCBlbGVtX3NpemUsIGZsYWdzKTtcbitcdHJldHVybiBjYWxsY2hhaW5fZmluYWxpemUoYnVmLCBzaXplLCBucl90cmFjZSwgZWxlbV9zaXplLCB1c2VyX2J1aWxkX2lkLFxuK1x0XHRcdFx0ICB1c2VyLCBmYWxzZSAvKiAhbWF5X2ZhdWx0ICovKTtcbit9XG4rXG4gQlBGX0NBTExfNChicGZfZ2V0X3N0YWNrX3BlLCBzdHJ1Y3QgYnBmX3BlcmZfZXZlbnRfZGF0YV9rZXJuICosIGN0eCxcbiBcdCAgIHZvaWQgKiwgYnVmLCB1MzIsIHNpemUsIHU2NCwgZmxhZ3MpXG4ge1xuQEAgLTg2Myw3ICs5NjgsNyBAQCBCUEZfQ0FMTF80KGJwZl9nZXRfc3RhY2tfcGUsIHN0cnVjdCBicGZfcGVyZl9ldmVudF9kYXRhX2tlcm4gKiwgY3R4LFxuIFx0X191NjQgbnJfa2VybmVsO1xuIFxuIFx0aWYgKCEoZXZlbnQtXHUwMDNlYXR0ci5zYW1wbGVfdHlwZSBcdTAwMjYgUEVSRl9TQU1QTEVfQ0FMTENIQUlOKSlcbi1cdFx0cmV0dXJuIF9fYnBmX2dldF9zdGFjayhyZWdzLCBOVUxMLCBOVUxMLCBidWYsIHNpemUsIGZsYWdzLCBmYWxzZSAvKiAhbWF5X2ZhdWx0ICovKTtcbitcdFx0cmV0dXJuIF9fYnBmX2dldF9zdGFjayhyZWdzLCBOVUxMLCBidWYsIHNpemUsIGZsYWdzLCBmYWxzZSAvKiAhbWF5X2ZhdWx0ICovKTtcbiBcbiBcdGlmICh1bmxpa2VseShmbGFncyBcdTAwMjYgfihCUEZfRl9TS0lQX0ZJRUxEX01BU0sgfCBCUEZfRl9VU0VSX1NUQUNLIHxcbiBcdFx0XHQgICAgICAgQlBGX0ZfVVNFUl9CVUlMRF9JRCkpKVxuQEAgLTg4Myw3ICs5ODgsNyBAQCBCUEZfQ0FMTF80KGJwZl9nZXRfc3RhY2tfcGUsIHN0cnVjdCBicGZfcGVyZl9ldmVudF9kYXRhX2tlcm4gKiwgY3R4LFxuIFx0XHRfX3U2NCBuciA9IHRyYWNlLVx1MDAzZW5yO1xuIFxuIFx0XHR0cmFjZS1cdTAwM2VuciA9IG5yX2tlcm5lbDtcbi1cdFx0ZXJyID0gX19icGZfZ2V0X3N0YWNrKHJlZ3MsIE5VTEwsIHRyYWNlLCBidWYsIHNpemUsIGZsYWdzLCBmYWxzZSAvKiAhbWF5X2ZhdWx0ICovKTtcbitcdFx0ZXJyID0gX19icGZfZ2V0X3N0YWNrX3BlKHRyYWNlLCBidWYsIHNpemUsIGZsYWdzKTtcbiBcbiBcdFx0LyogcmVzdG9yZSBuciAqL1xuIFx0XHR0cmFjZS1cdTAwM2VuciA9IG5yO1xuQEAgLTg5MywxNCArOTk4LDEzIEBAIEJQRl9DQUxMXzQoYnBmX2dldF9zdGFja19wZSwgc3RydWN0IGJwZl9wZXJmX2V2ZW50X2RhdGFfa2VybiAqLCBjdHgsXG4gXHRcdHNraXAgKz0gbnJfa2VybmVsO1xuIFx0XHRpZiAoc2tpcCBcdTAwM2UgQlBGX0ZfU0tJUF9GSUVMRF9NQVNLKVxuIFx0XHRcdGdvdG8gY2xlYXI7XG4tXG4gXHRcdGZsYWdzID0gKGZsYWdzIFx1MDAyNiB+QlBGX0ZfU0tJUF9GSUVMRF9NQVNLKSB8IHNraXA7XG4tXHRcdGVyciA9IF9fYnBmX2dldF9zdGFjayhyZWdzLCBOVUxMLCB0cmFjZSwgYnVmLCBzaXplLCBmbGFncywgZmFsc2UgLyogIW1heV9mYXVsdCAqLyk7XG4rXHRcdGVyciA9IF9fYnBmX2dldF9zdGFja19wZSh0cmFjZSwgYnVmLCBzaXplLCBmbGFncyk7XG4gXHR9XG4tXHRyZXR1cm4gZXJyO1xuIFxuIGNsZWFyOlxuLVx0bWVtc2V0KGJ1ZiwgMCwgc2l6ZSk7XG4rXHRpZiAoZXJyIFx1MDAzYyAwKVxuK1x0XHRtZW1zZXQoYnVmLCAwLCBzaXplKTtcbiBcdHJldHVybiBlcnI7XG4gXG4gfVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjBUMTA6NDk6NTguNjQyNzczMDY1WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTEwMzk1MjkyOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEJQRiBTdGFja21hcCBQYXRjaCoqXG5cbk9rYXksIHNvIEkndmUgZ290IHRoaXMgcGF0Y2ggaGVyZSB0aGF04oCZcyB0b3VjaGluZyBga2VybmVsL2JwZi9zdGFja21hcC5jYC4gSW1tZWRpYXRlbHksIEkgc2VlIGl0J3MgYSByZWZhY3RvcmluZyBlZmZvcnQsIGludHJvZHVjaW5nIHNldmVyYWwgbmV3IHN0cnVjdHVyZXMgYW5kIGZ1bmN0aW9ucyByZWxhdGVkIHRvIHN0YWNrbWFwIGhhbmRsaW5nLiBgc3RydWN0IHN0YWNraWRgLCBgc3RhY2tpZF9pbml0YCwgdGhhdCBzb3J0IG9mIHRoaW5nIOKAkyB0aGlzIGlzIGFsbCBkZXNpZ25lZCB0byBpbXByb3ZlIGhvdyB0aGUgQlBGIHN1YnN5c3RlbSBtYW5hZ2VzIHN0YWNrIGRhdGEsIHNwZWNpZmljYWxseSBmb3IgcGVyZiBldmVudCBjYWxsY2hhaW5zLiBXZSdyZSBsb29raW5nIGF0IHNpZ25pZmljYW50IGNoYW5nZXMgdG8gYGJwZl9nZXRfc3RhY2tpZGAgYW5kIHJlbGF0ZWQgZnVuY3Rpb25zIHRvby5cblxuVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBhIHByZXR0eSBkZWVwIGRpdmUgaW50byBjb3JlIEJQRiBhbmQgcGVyZiBpbnRlZ3JhdGlvbiwgYW5kIHRoYXQgbWFrZXMgaXQgYSBwcmltZSB0YXJnZXQgZm9yIGZ1enppbmcuIEFueSB0aW1lIHlvdSdyZSB0b3VjaGluZyBzdGFjayBtYW5pcHVsYXRpb24sIHlvdSdyZSBvcGVuaW5nIHRoZSBkb29yIHRvIHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXMuXG5cbk5vdywgbGV0J3Mgc2VlIHdoYXQncyBuZWVkZWQgZm9yIHRoZSBrZXJuZWwgYnVpbGQuIEkga25vdyBga2VybmVsL2JwZi9zdGFja21hcC5jYCBpcyBjb21waWxlZCB3aGVuIGBDT05GSUdfQlBGX1NZU0NBTExgIGlzIGVuYWJsZWQsIGJ1dCBJJ2xsIGRvdWJsZS1jaGVjayBga2VybmVsL2JwZi9NYWtlZmlsZWAganVzdCB0byBiZSBzdXJlIHRoZXJlIGFyZW4ndCBhbnkgb3RoZXIgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMgbHVya2luZyBpbiB0aGVyZS4gR290dGEgZ2V0IHRoZSBmdXp6aW5nIGVudmlyb25tZW50IHNldCB1cCBjb3JyZWN0bHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc5NTUsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMDksIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMFQxMDo1MDowMy43NDY3MjgyODNaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjU2MDMxNTQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic3RhY2ttYXBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2JwZi9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL01ha2VmaWxlPTMwPWlmZXEgKCQoQ09ORklHX1BFUkZfRVZFTlRTKSx5KVxcbmtlcm5lbC9icGYvTWFrZWZpbGU6MzE6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBzdGFja21hcC5vXFxua2VybmVsL2JwZi9NYWtlZmlsZS0zMi1lbmRpZlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMFQxMDo1MDowMy44MTIzNDUyNjdaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NTE0MzIwMDMzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkJQRiBTdGFjayBUcmFjaW5nIFJlcXVpcmVtZW50cyoqXG5cbk9rYXksIHNvIHRvIGdldCB0aGlzIEJQRiBzdGFjayB0cmFjaW5nIHdvcmtpbmcsIEkgZGVmaW5pdGVseSBuZWVkIGBDT05GSUdfQlBGX1NZU0NBTExgIGFuZCBgQ09ORklHX1BFUkZfRVZFTlRTYCBlbmFibGVkLiBObyBzdXJwcmlzZXMgdGhlcmUuIEkgc2hvdWxkIHByb2JhYmx5IGRvdWJsZS1jaGVjayBpZiB0aGVyZSBhcmUgYW55IG90aGVyIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0aGF0IGFyZSByZWxldmFudCB3aGlsZSBJJ20gYXQgaXQsIGp1c3QgdG8gYmUgdGhvcm91Z2guXG5cblJpZ2h0LCB0aGUgZnVuY3Rpb25zIHRoYXQgaGF2ZSBiZWVuIG1vZGlmaWVkIGFyZTogYGJwZl9nZXRfc3RhY2tpZGAsIGBicGZfZ2V0X3N0YWNraWRfcGVgLCBgYnBmX2dldF9zdGFja2AsIGBicGZfZ2V0X3N0YWNrX3NsZWVwYWJsZWAsIGBicGZfZ2V0X3Rhc2tfc3RhY2tgLCBgYnBmX2dldF90YXNrX3N0YWNrX3NsZWVwYWJsZWAsIGFuZCBgYnBmX2dldF9zdGFja19wZWAuIFRoZXNlIGFyZSBhbGwgQlBGIGhlbHBlciBmdW5jdGlvbnMsIHNvIHRoZSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byBmaWd1cmUgb3V0IHdoaWNoIEJQRiBwcm9ncmFtIHR5cGVzIHN1cHBvcnQgdGhlc2Ugc3RhY2sgdHJhY2UgaGVscGVycy5cblxuYGJwZl9nZXRfc3RhY2tpZF9wcm90b2AgbG9va3MgaW50ZXJlc3RpbmcsIHRoYXQncyB1c2VkIGluIGBrZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmNgIGFuZCBhbHNvIGBuZXQvY29yZS9maWx0ZXIuY2AsIHNvIHRoYXQncyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgZm9yIGV4cGxvcmluZyB0aGUgc3VwcG9ydGVkIHByb2dyYW0gdHlwZXMgYW5kIHRoZSB0cmFjaW5nIGNhcGFiaWxpdGllcy5cblxuXG4iLCJJbnB1dFRva2VucyI6ODUyMiwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yMFQxMDo1MDowOC4zMjY2NjgxM1oiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNTU1OTEyNjkzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJwZl9nZXRfc3RhY2tpZF9wcm90b1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9icGYuaD0zODcyPWV4dGVybiBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX2dldF9jdXJyZW50X2NvbW1fcHJvdG87XFxuaW5jbHVkZS9saW51eC9icGYuaDozODczOmV4dGVybiBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX2dldF9zdGFja2lkX3Byb3RvO1xcbmluY2x1ZGUvbGludXgvYnBmLmgtMzg3NC1leHRlcm4gY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9nZXRfc3RhY2tfcHJvdG87XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2JwZi5oPTM4Nzc9ZXh0ZXJuIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfZ2V0X3Rhc2tfc3RhY2tfc2xlZXBhYmxlX3Byb3RvO1xcbmluY2x1ZGUvbGludXgvYnBmLmg6Mzg3ODpleHRlcm4gY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9nZXRfc3RhY2tpZF9wcm90b19wZTtcXG5pbmNsdWRlL2xpbnV4L2JwZi5oLTM4NzktZXh0ZXJuIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfZ2V0X3N0YWNrX3Byb3RvX3BlO1xcbi0tXFxua2VybmVsL2JwZi9zdGFja21hcC5jPTYxOT1CUEZfQ0FMTF8zKGJwZl9nZXRfc3RhY2tpZCwgc3RydWN0IHB0X3JlZ3MgKiwgcmVncywgc3RydWN0IGJwZl9tYXAgKiwgbWFwLFxcbi0tXFxua2VybmVsL2JwZi9zdGFja21hcC5jLTY2MC1cXG5rZXJuZWwvYnBmL3N0YWNrbWFwLmM6NjYxOmNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfZ2V0X3N0YWNraWRfcHJvdG8gPSB7XFxua2VybmVsL2JwZi9zdGFja21hcC5jLTY2Mi1cXHQuZnVuY1xcdFxcdD0gYnBmX2dldF9zdGFja2lkLFxcbi0tXFxua2VybmVsL2JwZi9zdGFja21hcC5jPTY4Mj1CUEZfQ0FMTF8zKGJwZl9nZXRfc3RhY2tpZF9wZSwgc3RydWN0IGJwZl9wZXJmX2V2ZW50X2RhdGFfa2VybiAqLCBjdHgsXFxuLS1cXG5rZXJuZWwvYnBmL3N0YWNrbWFwLmMtNzQwLVxcbmtlcm5lbC9icGYvc3RhY2ttYXAuYzo3NDE6Y29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9nZXRfc3RhY2tpZF9wcm90b19wZSA9IHtcXG5rZXJuZWwvYnBmL3N0YWNrbWFwLmMtNzQyLVxcdC5mdW5jXFx0XFx0PSBicGZfZ2V0X3N0YWNraWRfcGUsXFxuLS1cXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM9MTM0Mz1rcHJvYmVfcHJvZ19mdW5jX3Byb3RvKGVudW0gYnBmX2Z1bmNfaWQgZnVuY19pZCwgY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxcbi0tXFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTEzNDgtXFx0Y2FzZSBCUEZfRlVOQ19nZXRfc3RhY2tpZDpcXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM6MTM0OTpcXHRcXHRyZXR1cm4gXFx1MDAyNmJwZl9nZXRfc3RhY2tpZF9wcm90bztcXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMTM1MC1cXHRjYXNlIEJQRl9GVU5DX2dldF9zdGFjazpcXG4tLVxcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYz0xNDI3PUJQRl9DQUxMXzMoYnBmX2dldF9zdGFja2lkX3RwLCB2b2lkICosIHRwX2J1ZmYsIHN0cnVjdCBicGZfbWFwICosIG1hcCxcXG4tLVxcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0xNDQwLVxcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYzoxNDQxOnN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX2dldF9zdGFja2lkX3Byb3RvX3RwID0ge1xcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0xNDQyLVxcdC5mdW5jXFx0XFx0PSBicGZfZ2V0X3N0YWNraWRfdHAsXFxuLS1cXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM9MTQ3MD10cF9wcm9nX2Z1bmNfcHJvdG8oZW51bSBicGZfZnVuY19pZCBmdW5jX2lkLCBjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXFxuLS1cXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMTQ3NS1cXHRjYXNlIEJQRl9GVU5DX2dldF9zdGFja2lkOlxcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYzoxNDc2OlxcdFxcdHJldHVybiBcXHUwMDI2YnBmX2dldF9zdGFja2lkX3Byb3RvX3RwO1xcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0xNDc3LVxcdGNhc2UgQlBGX0ZVTkNfZ2V0X3N0YWNrOlxcbi0tXFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jPTE1NzQ9cGVfcHJvZ19mdW5jX3Byb3RvKGVudW0gYnBmX2Z1bmNfaWQgZnVuY19pZCwgY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxcbi0tXFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTE1NzktXFx0Y2FzZSBCUEZfRlVOQ19nZXRfc3RhY2tpZDpcXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM6MTU4MDpcXHRcXHRyZXR1cm4gXFx1MDAyNmJwZl9nZXRfc3RhY2tpZF9wcm90b19wZTtcXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMTU4MS1cXHRjYXNlIEJQRl9GVU5DX2dldF9zdGFjazpcXG4tLVxcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYz0xNjU2PUJQRl9DQUxMXzMoYnBmX2dldF9zdGFja2lkX3Jhd190cCwgc3RydWN0IGJwZl9yYXdfdHJhY2Vwb2ludF9hcmdzICosIGFyZ3MsXFxuLS1cXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMTY3Mi1cXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM6MTY3MzpzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9nZXRfc3RhY2tpZF9wcm90b19yYXdfdHAgPSB7XFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTE2NzQtXFx0LmZ1bmNcXHRcXHQ9IGJwZl9nZXRfc3RhY2tpZF9yYXdfdHAsXFxuLS1cXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM9MTcwOT1yYXdfdHBfcHJvZ19mdW5jX3Byb3RvKGVudW0gYnBmX2Z1bmNfaWQgZnVuY19pZCwgY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxcbi0tXFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTE3MTQtXFx0Y2FzZSBCUEZfRlVOQ19nZXRfc3RhY2tpZDpcXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM6MTcxNTpcXHRcXHRyZXR1cm4gXFx1MDAyNmJwZl9nZXRfc3RhY2tpZF9wcm90b19yYXdfdHA7XFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTE3MTYtXFx0Y2FzZSBCUEZfRlVOQ19nZXRfc3RhY2s6XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIwVDEwOjUwOjEwLjg4MjU4ODkzNFoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQzNzkwMDMxODcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSBzaXR1YXRpb246XG5cbioqVW5kZXJzdGFuZGluZyB0aGUgQ29udGV4dCBvZiBCUEYgVHJhY2UgRnVuY3Rpb25zKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhlc2UgZnVuY3Rpb25zLCBhbmQgdGhlIGZpcnN0IHRoaW5nIHRoYXQganVtcHMgb3V0IGlzIHRoYXQgdGhleSdyZSBuZXN0bGVkIHdpdGhpbiBga2VybmVsL3RyYWNlL2JwZl90cmFjZS5jYC4gVGhhdCB0ZWxscyBtZSB0aGlzIGlzIGFsbCByZWxhdGVkIHRvIHRyYWNpbmcsIHNwZWNpZmljYWxseSB1c2luZyBlQlBGLCBzaW5jZSB3ZSdyZSBkZWFsaW5nIHdpdGggXCJicGZcXF90cmFjZVwiLiBUaGUgaW1wb3J0YW50IGZsYWcgaGVyZSBpcyBgQ09ORklHX0JQRl9FVkVOVFNgLiBJIGtub3cgZnJvbSBleHBlcmllbmNlIHRoYXQgdGhpcyBmbGFnIGVuYWJsZXMgdGhlIG1vcmUgYWR2YW5jZWQgdHJhY2luZyBjYXBhYmlsaXRpZXMgd2l0aGluIHRoZSBrZXJuZWwsIHNvIHRoZSBwcmVzZW5jZSBvZiB0aGVzZSBmdW5jdGlvbnMgaXMgZGlyZWN0bHkgdGllZCB0byBhIGNvbmZpZ3VyYXRpb24gdGhhdCBtYWtlcyBlQlBGLWJhc2VkIGV2ZW50IHRyYWNpbmcgYXZhaWxhYmxlLiBUaGlzIG1lYW5zIHdlJ3JlIHByb2JhYmx5IGRlYWxpbmcgd2l0aCBpbnN0cnVtZW50YXRpb24gcG9pbnRzIHRoYXQgbGV0IHVzZXJzcGFjZSBwcm9ncmFtcyB0YXAgaW50byBrZXJuZWwgYmVoYXZpb3IgZHluYW1pY2FsbHksIHdoaWNoIGlzIHNvbWV0aGluZyBJIGRlYWwgd2l0aCBvZnRlbiBpbiBteSBjdXJyZW50IHdvcmsuIEdvdCBpdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTAzMTIsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yMFQxMDo1MDoxNS4yNjE1OTU3MTFaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjExNDE1OTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYnBmX3RyYWNlLm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL3RyYWNlL01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC90cmFjZS9NYWtlZmlsZT01ND1LQ09WX0lOU1RSVU1FTlRfdHJhY2VfaXJxc29mZi5vIDo9IG5cXG5rZXJuZWwvdHJhY2UvTWFrZWZpbGUtNTUtXFxua2VybmVsL3RyYWNlL01ha2VmaWxlOjU2OkNGTEFHU19icGZfdHJhY2UubyA6PSAtSSQoc3JjKVxcbmtlcm5lbC90cmFjZS9NYWtlZmlsZS01Ny1cXG4tLVxcbmtlcm5lbC90cmFjZS9NYWtlZmlsZT0xMDk9b2JqLSQoQ09ORklHX1VTRVJfRVZFTlRTKSArPSB0cmFjZV9ldmVudHNfdXNlci5vXFxua2VybmVsL3RyYWNlL01ha2VmaWxlOjExMDpvYmotJChDT05GSUdfQlBGX0VWRU5UUykgKz0gYnBmX3RyYWNlLm9cXG5rZXJuZWwvdHJhY2UvTWFrZWZpbGUtMTExLW9iai0kKENPTkZJR19LUFJPQkVfRVZFTlRTKSArPSB0cmFjZV9rcHJvYmUub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMFQxMDo1MDoxNS4zMjI3NDM0MzdaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTczNDM4OTkyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipDaGVja2luZyBmb3IgQlBGIEV2ZW50IFN1cHBvcnQqKlxuXG5BbHJpZ2h0LCByaWdodCBvZmYgdGhlIGJhdCwgd2UncmUgdGFsa2luZyBhYm91dCBuZWVkaW5nIGBDT05GSUdfQlBGX0VWRU5UU2AuIFRoYXQncyBhIGNydWNpYWwgc3RhcnRpbmcgcG9pbnQuIE5vdywgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dCBhbmQgaG93IGl0J3MgYmVpbmcgdXNlZCwgSSB3YW50IHRvIHNlZSBob3cgYGJwZl9nZXRfc3RhY2tpZF9wcm90b2AgaXMgYmVpbmcgbGV2ZXJhZ2VkLiBNeSBodW5jaCBpcyBpdCdzIHByb2JhYmx5IHJlbGF0ZWQgdG8gdGhhdCBgQ09ORklHX0JQRl9FVkVOVFNgIHJlcXVpcmVtZW50LiBMZXQncyBkaXZlIGludG8gYG5ldC9jb3JlL2ZpbHRlci5jYC4gSSdsbCB3YW50IHRvIHNlZSBpZiB0aGlzIGBicGZfZ2V0X3N0YWNraWRfcHJvdG9gIGZ1bmN0aW9uIGlzIGJlaW5nIGNhbGxlZCBpbiBhbnkgd2F5LiBTZWVpbmcgaG93IHRoYXQncyB0aWVkIGludG8gdGhlIG5ldGZpbHRlciBmcmFtZXdvcmssIG9yIG90aGVyIG5ldHdvcmtpbmcgY29tcG9uZW50cyB3aWxsIGdpdmUgdXMgYSBzdHJvbmcgZ3JvdW5kaW5nIGluIHRoZSBwcm9ibGVtIHNwYWNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDcyMCwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIwVDEwOjUwOjE4LjQ5NjE4NTUwOVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjI3NzE5ODUsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJwZl9nZXRfc3RhY2tpZF9wcm90b1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvY29yZS9maWx0ZXIuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjBUMTA6NTA6MTguNTU4OTgyMDk0WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU3NTU3ODk2NzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIEJQRiBTdGFjayBUcmFjZSBJbXBsZW1lbnRhdGlvbioqXG5cbk9rYXksIHNvIEknbSBkaXZpbmcgaW50byB0aGlzIEJQRiBzdGFjayB0cmFjZSBpbXBsZW1lbnRhdGlvbiwgYW5kIGl0J3MgbG9va2luZyBsaWtlIHRoZSByZWFsIGFjdGlvbiBpcyBoYXBwZW5pbmcgd2l0aGluIHRoZSBCUEYgc3RhY2ttYXAgYW5kIHN0YWNraWQgaGVscGVycywgbm90IHdoZXJlIEkgaW5pdGlhbGx5IHRob3VnaHQuIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhlIHJlbGV2YW50IGtlcm5lbCBjb25maWd1cmF0aW9ucyBhcmUgZW5hYmxlZDogYEJQRl9TWVNDQUxMYCwgYFBFUkZfRVZFTlRTYCwgYW5kIGBCUEZfRVZFTlRTYC4gTXkgZm9jdXMgbmVlZHMgdG8gYmUgb24gdGhlc2UgZnVuY3Rpb25zOiBgYnBmX2dldF9zdGFja2lkYCwgYGJwZl9nZXRfc3RhY2tpZF9wZWAsIGBicGZfZ2V0X3N0YWNrYCwgYGJwZl9nZXRfc3RhY2tfc2xlZXBhYmxlYCwgYGJwZl9nZXRfdGFza19zdGFja2AsIGBicGZfZ2V0X3Rhc2tfc3RhY2tfc2xlZXBhYmxlYCwgYW5kIGBicGZfZ2V0X3N0YWNrX3BlYC5cblxuQWhhLCBgYnBmX2dldF9zdGFja2lkYCBpcyBhY3R1YWxseSBhIEJQRiBoZWxwZXIgaXRzZWxmLCBub3QgYSBkaXJlY3Qga2VybmVsIGZ1bmN0aW9uLiBUaGUgKmtlcm5lbCogZnVuY3Rpb25zIHRoYXQgcGVyZm9ybSB0aGUgd29yayBhcmUgdGhvc2UgSSBqdXN0IGxpc3RlZC4gTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2UgaGVscGVycyBhcmUgYWN0dWFsbHkgZXhwb3NlZCB0byBCUEYgcHJvZ3JhbXMuIEFyZSB0aGV5IGV4cG9ydGVkIHN5bWJvbHMsIG9yIGFyZSB0aGV5IGRlZmluZWQgdXNpbmcgc3RhdGljIGZ1bmN0aW9ucyBvciBCUEZfQ0FMTCBtYWNyb3M/IEkgc2VlIHRoZXkncmUgZGVmaW5lZCB3aXRoIGBCUEZfQ0FMTF8zYCBhbmQgYEJQRl9DQUxMXzRgLiBUaGlzIG1lYW5zIHRoZSBmdW5jdGlvbiBuYW1lcyBCUEYgcHJvZ3JhbXMgYWN0dWFsbHkgc2VlIGFyZSBsaWtlbHkgYF9fX19icGZfZ2V0X3N0YWNraWRgIG9yIGBicGZfZ2V0X3N0YWNraWRgLiBOZXh0LCBJIG5lZWQgdG8gY2hlY2sgdGhlIGRlZmluaXRpb24gb2YgYEJQRl9DQUxMXzNgIHRvIGZ1bGx5IHVuZGVyc3RhbmQgaG93IHRoZXNlIGZ1bmN0aW9ucyBhcmUgYmVpbmcgaW52b2tlZCBmcm9tIEJQRiBwcm9ncmFtcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA5OTMsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMjUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjBUMTA6NTA6MjQuMzE0Nzc0MDk5WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NTIzOTExNSwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGVmaW5lIEJQRl9DQUxMX1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpbmNsdWRlL2xpbnV4L2JwZi5oXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMFQxMDo1MDoyNC4zODAwNDcxMjRaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzA4NzA0NTE4NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHN1bW1hcml6ZWQgdGhvdWdodCBwcm9jZXNzLCBwcmVzZW50ZWQgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIGl0OlxuXG4qKkRpZ2dpbmcgaW50byB0aGUgTGludXggS2VybmVsIEZpbHRlcmluZyBMYW5kc2NhcGUqKlxuXG5BbHJpZ2h0LCBJIG5lZWQgdG8gZ2V0IHN0YXJ0ZWQgb24gdGhpcyBmaWx0ZXJpbmcgdGFzay4gV2hlcmUgd291bGQgSSBiZWdpbj8gR2l2ZW4gdGhlIGdlbmVyYWwgbmF0dXJlIG9mIGZpbHRlcmluZyB3aXRoaW4gdGhlIGtlcm5lbCwgSSdtIHByZXR0eSBzdXJlIEkgc2hvdWxkIHN0YXJ0IGJ5IGxvb2tpbmcgYXQgY29yZSBkZWZpbml0aW9ucyBhbmQgc3RydWN0dXJlcy4gVGhhdCBtYWtlcyBgaW5jbHVkZS9saW51eC9maWx0ZXIuaGAgYSBwcmltZSBjYW5kaWRhdGUuIExldCdzIHNlZSB3aGF0IGdvb2RpZXMgYXJlIGluIHRoZXJlLiBJJ20gZXhwZWN0aW5nIHRvIGZpbmQgZm91bmRhdGlvbmFsIGVsZW1lbnRzLCBwZXJoYXBzIHNvbWUgYWJzdHJhY3QgaW50ZXJmYWNlcywgYW5kIGRlZmluaXRlbHkgc29tZSBrZXkgZGF0YSBzdHJ1Y3R1cmVzLiBUaGlzIGlzIHRoZSBsb2dpY2FsIHN0YXJ0aW5nIHBvaW50IGZvciB1bmRlcnN0YW5kaW5nIGhvdyB0aGUga2VybmVsIGhhbmRsZXMgZ2VuZXJpYyBmaWx0ZXJpbmcsIGFuZCBob3BlZnVsbHkgaXQnbGwgZ2l2ZSBtZSBhIHN0cm9uZyBmb3VuZGF0aW9uLiBMZXQncyBzZWUgd2hhdCdzIGluIHRoZXJlLi4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExNjk5LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjBUMTA6NTA6MjcuNDY3MDk1NTE5WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NTE4ODc0NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkZWZpbmUgQlBGX0NBTExfXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImluY2x1ZGUvbGludXgvZmlsdGVyLmhcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9maWx0ZXIuaD00MD1zdHJ1Y3QgY3RsX3RhYmxlX2hlYWRlcjtcXG4tLVxcbmluY2x1ZGUvbGludXgvZmlsdGVyLmgtODUtLyogdW51c2VkIG9wY29kZSB0byBtYXJrIGNhbGwgdG8gaW50ZXJwcmV0ZXIgd2l0aCBhcmd1bWVudHMgKi9cXG5pbmNsdWRlL2xpbnV4L2ZpbHRlci5oOjg2OiNkZWZpbmUgQlBGX0NBTExfQVJHU1xcdDB4ZTBcXG5pbmNsdWRlL2xpbnV4L2ZpbHRlci5oLTg3LVxcbi0tXFxuaW5jbHVkZS9saW51eC9maWx0ZXIuaD0yNjA9c3RhdGljIGlubGluZSBib29sIGluc25faXNfY2FzdF91c2VyKGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqaW5zbilcXG4tLVxcbmluY2x1ZGUvbGludXgvZmlsdGVyLmgtNDU3LVxcbmluY2x1ZGUvbGludXgvZmlsdGVyLmg6NDU4OiNkZWZpbmUgQlBGX0NBTExfUkVMKFRHVClcXHRcXHRcXHRcXHRcXHRcXFxcXFxuaW5jbHVkZS9saW51eC9maWx0ZXIuaC00NTktXFx0KChzdHJ1Y3QgYnBmX2luc24pIHtcXHRcXHRcXHRcXHRcXHRcXFxcXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2ZpbHRlci5oLTQ2Ny1cXG5pbmNsdWRlL2xpbnV4L2ZpbHRlci5oOjQ2ODojZGVmaW5lIEJQRl9DQUxMX0lNTSh4KVxcdCgodm9pZCAqKSh4KSAtICh2b2lkICopX19icGZfY2FsbF9iYXNlKVxcbmluY2x1ZGUvbGludXgvZmlsdGVyLmgtNDY5LVxcbi0tXFxuaW5jbHVkZS9saW51eC9maWx0ZXIuaC00NzktXFxuaW5jbHVkZS9saW51eC9maWx0ZXIuaDo0ODA6I2RlZmluZSBCUEZfQ0FMTF9LRlVOQyhPRkYsIElNTSlcXHRcXHRcXHRcXHRcXFxcXFxuaW5jbHVkZS9saW51eC9maWx0ZXIuaC00ODEtXFx0KChzdHJ1Y3QgYnBmX2luc24pIHtcXHRcXHRcXHRcXHRcXHRcXFxcXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2ZpbHRlci5oLTYxMC1cXG5pbmNsdWRlL2xpbnV4L2ZpbHRlci5oOjYxMTojZGVmaW5lIEJQRl9DQUxMX3goeCwgYXR0ciwgbmFtZSwgLi4uKVxcdFxcdFxcdFxcdFxcdCAgICAgICBcXFxcXFxuaW5jbHVkZS9saW51eC9maWx0ZXIuaC02MTItXFx0c3RhdGljIF9fYWx3YXlzX2lubGluZVxcdFxcdFxcdFxcdFxcdFxcdCAgICAgICBcXFxcXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2ZpbHRlci5oLTYyMy0jZGVmaW5lIF9fTk9BVFRSXFxuaW5jbHVkZS9saW51eC9maWx0ZXIuaDo2MjQ6I2RlZmluZSBCUEZfQ0FMTF8wKG5hbWUsIC4uLilcXHRCUEZfQ0FMTF94KDAsIF9fTk9BVFRSLCBuYW1lLCBfX1ZBX0FSR1NfXylcXG5pbmNsdWRlL2xpbnV4L2ZpbHRlci5oOjYyNTojZGVmaW5lIEJQRl9DQUxMXzEobmFtZSwgLi4uKVxcdEJQRl9DQUxMX3goMSwgX19OT0FUVFIsIG5hbWUsIF9fVkFfQVJHU19fKVxcbmluY2x1ZGUvbGludXgvZmlsdGVyLmg6NjI2OiNkZWZpbmUgQlBGX0NBTExfMihuYW1lLCAuLi4pXFx0QlBGX0NBTExfeCgyLCBfX05PQVRUUiwgbmFtZSwgX19WQV9BUkdTX18pXFxuaW5jbHVkZS9saW51eC9maWx0ZXIuaDo2Mjc6I2RlZmluZSBCUEZfQ0FMTF8zKG5hbWUsIC4uLilcXHRCUEZfQ0FMTF94KDMsIF9fTk9BVFRSLCBuYW1lLCBfX1ZBX0FSR1NfXylcXG5pbmNsdWRlL2xpbnV4L2ZpbHRlci5oOjYyODojZGVmaW5lIEJQRl9DQUxMXzQobmFtZSwgLi4uKVxcdEJQRl9DQUxMX3goNCwgX19OT0FUVFIsIG5hbWUsIF9fVkFfQVJHU19fKVxcbmluY2x1ZGUvbGludXgvZmlsdGVyLmg6NjI5OiNkZWZpbmUgQlBGX0NBTExfNShuYW1lLCAuLi4pXFx0QlBGX0NBTExfeCg1LCBfX05PQVRUUiwgbmFtZSwgX19WQV9BUkdTX18pXFxuaW5jbHVkZS9saW51eC9maWx0ZXIuaC02MzAtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIwVDEwOjUwOjI3LjUzMjI5MzM2NFoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3MjA1ODcwNDU0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBCUEYgU3RhY2sgVHJhY2UgRnVuY3Rpb25hbGl0eSoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGhvdyB0aGVzZSBgQlBGX0NBTExfeGAgY2FsbHMgd29yay4gVGhleSdyZSBnZW5lcmF0aW5nIG5hbWVzLCBzcGVjaWZpY2FsbHkgYF9fX19uYW1lYCBhbmQgYG5hbWVgIC0gdGhhdCdzIHN0YW5kYXJkIGZvciB0aGlzIHNvcnQgb2YgdGhpbmcuIFRoZSBhY3R1YWwgZnVuY3Rpb24gY2FsbHMgYXJlOiBgYnBmX2dldF9zdGFja2lkYCwgYGJwZl9nZXRfc3RhY2tpZF9wZWAsIGBicGZfZ2V0X3N0YWNrYCwgYGJwZl9nZXRfc3RhY2tfc2xlZXBhYmxlYCwgYGJwZl9nZXRfdGFza19zdGFja2AsIGBicGZfZ2V0X3Rhc2tfc3RhY2tfc2xlZXBhYmxlYCwgYW5kIGBicGZfZ2V0X3N0YWNrX3BlYC4gUHJldHR5IHN0YW5kYXJkIHN0YWNrIHRyYWNlIGNvbGxlY3Rpb24gcm91dGluZXMuXG5cbldhaXQsIGxvb2tpbmcgZGVlcGVyLCB0aGlzIHBhdGNoIGFsc28gaW50cm9kdWNlcyBhIGJ1bmNoIG9mIHN0YXRpYyBmdW5jdGlvbnM6IGBzdGFja2lkX2luaXRgLCBgc3RhY2tpZF9mYXN0cGF0aGAsIGBzdGFja2lkX25ld19idWNrZXRgLCBgc3RhY2tpZF9pbnN0YWxsYCwgYGNhbGxjaGFpbl9zdG9yZWAsIGBjYWxsY2hhaW5fZmluYWxpemVgLCBhbmQgYF9fYnBmX2dldF9zdGFja19wZWAsIGFuZCBhbHNvIGBfX2JwZl9nZXRfc3RhY2tgLiBUaGVzZSBhcmUgaW50ZXJlc3RpbmcuIFNpbmNlIHRoZXkncmUgc3RhdGljLCB0aGV5J3JlIGdvb2QgY2FuZGlkYXRlcyB0byBpbmNsdWRlIHdpdGhpbiBgRm9jdXNTeW1ib2xzYCBhcyB0aGV5IG1heSBub3QgYmUgaW5saW5lZC5cblxuSG93ZXZlciwgdGhlIHByaW1hcnkgZW50cnkgcG9pbnRzIGFyZSBjbGVhcmx5IGBicGZfZ2V0X3N0YWNraWRgIGFuZCB0aGUgb3RoZXJzLlxuXG5BbHJpZ2h0LCBsZXQncyBtYWtlIGEgY29tcGxldGUgbGlzdCBvZiB0aGUgZW50cnkgcG9pbnRzIGFuZCB0aGUgc3RhdGljIGZ1bmN0aW9uczpcblxuKiAgIGBicGZfZ2V0X3N0YWNraWRgXG4qICAgYGJwZl9nZXRfc3RhY2tpZF9wZWBcbiogICBgYnBmX2dldF9zdGFja2BcbiogICBgYnBmX2dldF9zdGFja19zbGVlcGFibGVgXG4qICAgYGJwZl9nZXRfdGFza19zdGFja2BcbiogICBgYnBmX2dldF90YXNrX3N0YWNrX3NsZWVwYWJsZWBcbiogICBgYnBmX2dldF9zdGFja19wZWBcbiogICBgc3RhY2tpZF9pbml0YFxuKiAgIGBzdGFja2lkX2Zhc3RwYXRoYFxuKiAgIGBzdGFja2lkX25ld19idWNrZXRgXG4qICAgYHN0YWNraWRfaW5zdGFsbGBcbiogICBgY2FsbGNoYWluX3N0b3JlYFxuKiAgIGBjYWxsY2hhaW5fZmluYWxpemVgXG4qICAgYF9fYnBmX2dldF9zdGFja19wZWBcbiogICBgX19icGZfZ2V0X3N0YWNrYFxuXG5Ob3csIHJlZ2FyZGluZyB0aGUgbmVjZXNzYXJ5IGNvbmZpZ3VyYXRpb25zLCBJIG5lZWQgdG8gY2hlY2sgaWYganVzdCBgQ09ORklHX0JQRl9TWVNDQUxMYCwgYENPTkZJR19QRVJGX0VWRU5UU2AsIGFuZCBgQ09ORklHX0JQRl9FVkVOVFNgIGFyZSBlbm91Z2guIFllcCwgdGhvc2Ugc2VlbSB0byBjb3ZlciBpdC4gSSdsbCBkb3VibGUtY2hlY2sgdG8gYmUgY29tcGxldGVseSBzdXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjYwNSwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQwOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yMFQxMDo1MDozNC43MzgxNjY5NzhaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYzMTkzNDM1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkNPTkZJR19cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2JwZi9zdGFja21hcC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvc3RhY2ttYXAuYz0yNjc9c3RydWN0IHN0YWNrX21hcF92bWFfbG9jayB7XFxuLS1cXG5rZXJuZWwvYnBmL3N0YWNrbWFwLmMtMjc0LSAqXFxua2VybmVsL2JwZi9zdGFja21hcC5jOjI3NTogKiBXaXRoIENPTkZJR19QRVJfVk1BX0xPQ0s9eSB0aGlzIHJldHVybnMgYSBWTUEgd2l0aCBpdHMgcGVyLVZNQSByZWFkXFxua2VybmVsL2JwZi9zdGFja21hcC5jLTI3Ni0gKiBsb2NrIGhlbGQgYW5kIG1tYXBfbG9jayBkcm9wcGVkLCBzbyB0aGUgY2FsbGVyIG1heSBzbGVlcC5cXG5rZXJuZWwvYnBmL3N0YWNrbWFwLmMtMjc3LSAqXFxua2VybmVsL2JwZi9zdGFja21hcC5jOjI3ODogKiBXaXRoIENPTkZJR19QRVJfVk1BX0xPQ0s9biBpdCByZXR1cm5zIGEgVk1BIHdpdGggbW1hcF9sb2NrIHN0aWxsXFxua2VybmVsL2JwZi9zdGFja21hcC5jLTI3OS0gKiBoZWxkOyB0aGUgY2FsbGVyIG11c3Qgc25hcHNob3QgYW55IGZpZWxkcyBpdCBuZWVkcyBhbmQgcGluIHZtX2ZpbGVcXG4tLVxcbmtlcm5lbC9icGYvc3RhY2ttYXAuYz0yODY9c3RhY2tfbWFwX2xvY2tfdm1hKHN0cnVjdCBzdGFja19tYXBfdm1hX2xvY2sgKmxvY2ssIHVuc2lnbmVkIGxvbmcgaXApXFxuLS1cXG5rZXJuZWwvYnBmL3N0YWNrbWFwLmMtMjkwLVxcbmtlcm5lbC9icGYvc3RhY2ttYXAuYzoyOTE6XFx0Lyogbm9vcCB1bmRlciAhQ09ORklHX1BFUl9WTUFfTE9DSyAqL1xcbmtlcm5lbC9icGYvc3RhY2ttYXAuYy0yOTItXFx0dm1hID0gbG9ja192bWFfdW5kZXJfcmN1KG1tLCBpcCk7XFxuLS1cXG5rZXJuZWwvYnBmL3N0YWNrbWFwLmMtMzEwLVxcbmtlcm5lbC9icGYvc3RhY2ttYXAuYzozMTE6I2lmZGVmIENPTkZJR19QRVJfVk1BX0xPQ0tcXG5rZXJuZWwvYnBmL3N0YWNrbWFwLmMtMzEyLVxcdGlmICghdm1hX3N0YXJ0X3JlYWRfbG9ja2VkKHZtYSkpIHtcXG4tLVxcbmtlcm5lbC9icGYvc3RhY2ttYXAuYz0zMjM9c3RhdGljIHZvaWQgc3RhY2tfbWFwX3VubG9ja192bWEoc3RydWN0IHN0YWNrX21hcF92bWFfbG9jayAqbG9jaylcXG5rZXJuZWwvYnBmL3N0YWNrbWFwLmMtMzI0LXtcXG5rZXJuZWwvYnBmL3N0YWNrbWFwLmM6MzI1OiNpZmRlZiBDT05GSUdfUEVSX1ZNQV9MT0NLXFxua2VybmVsL2JwZi9zdGFja21hcC5jLTMyNi1cXHR2bWFfZW5kX3JlYWQobG9jay1cXHUwMDNldm1hKTtcXG4tLVxcbmtlcm5lbC9icGYvc3RhY2ttYXAuYz00NzE9Z2V0X2NhbGxjaGFpbl9lbnRyeV9mb3JfdGFzayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssIHUzMiBtYXhfZGVwdGgpXFxua2VybmVsL2JwZi9zdGFja21hcC5jLTQ3Mi17XFxua2VybmVsL2JwZi9zdGFja21hcC5jOjQ3MzojaWZkZWYgQ09ORklHX1NUQUNLVFJBQ0VcXG5rZXJuZWwvYnBmL3N0YWNrbWFwLmMtNDc0LVxcdHN0cnVjdCBwZXJmX2NhbGxjaGFpbl9lbnRyeSAqZW50cnk7XFxuLS1cXG5rZXJuZWwvYnBmL3N0YWNrbWFwLmMtNTAxLVxcdHJldHVybiBlbnRyeTtcXG5rZXJuZWwvYnBmL3N0YWNrbWFwLmM6NTAyOiNlbHNlIC8qIENPTkZJR19TVEFDS1RSQUNFICovXFxua2VybmVsL2JwZi9zdGFja21hcC5jLTUwMy1cXHRyZXR1cm4gTlVMTDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjBUMTA6NTA6MzQuODAxMzY5MzEzWiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc1NjE3NDAxMDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqUmV2aWV3aW5nIEJQRiBTdGFjayBUcmFjZSBDb25maWd1cmF0aW9uIGFuZCBTeW1ib2xzKipcblxuT2theSwgc28gSSdtIHRoaW5raW5nIHRocm91Z2ggdGhpcyBzdGFjayB0cmFjZSBidXNpbmVzcyBmb3IgQlBGLiBSaWdodCwgSSBuZWVkIGBDT05GSUdfU1RBQ0tUUkFDRWAgZm9yIGBnZXRfY2FsbGNoYWluX2VudHJ5X2Zvcl90YXNrYCB0byB3b3JrLiBUaGF0J3MgZnVuZGFtZW50YWwsIGFuZCB0aGF0LCBpbiB0dXJuLCBpcyB1c2VkIGJ5IGBicGZfZ2V0X3Rhc2tfc3RhY2tgIGFuZCBgYnBmX2dldF90YXNrX3N0YWNrX3NsZWVwYWJsZWAuIEl0J3MgcHJldHR5IHN0YW5kYXJkIHRvIGhhdmUgYENPTkZJR19TVEFDS1RSQUNFYCBlbmFibGVkLCBidXQgaXTigJlzIHN0aWxsIHNtYXJ0IHRvIHNwZWNpZnkgaXQgZXhwbGljaXRseSB0byBtYWtlIHN1cmUgZXZlcnl0aGluZyBsaW5lcyB1cC4gTGV0J3MgbWFrZSBzdXJlIHRoZXJlIGFyZW4ndCBhbnkgb3RoZXIgZ290Y2hhcy4gQWggeWVzLCBgQ09ORklHX0JQRl9TWVNDQUxMYCwgYENPTkZJR19QRVJGX0VWRU5UU2AsIGBDT05GSUdfQlBGX0VWRU5UU2AsIGFuZCBgQ09ORklHX1NUQUNLVFJBQ0VgIGFyZSB0aGUga2V5IG9uZXMgdG8gd2F0Y2ggb3V0IGZvci5cblxuTm93LCBsZXQncyBkaXZlIGludG8gdGhlc2UgYEZvY3VzU3ltYm9sc2AuIFRoZSBwYXRjaCBpcyB0b3VjaGluZyBga2VybmVsL2JwZi9zdGFja21hcC5jYCwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCdzIGJlaW5nIGNoYW5nZWQgaW4gdGhhdCBhcmVhLiBJJ20gc2VlaW5nIGZ1bmN0aW9ucyBsaWtlOiBgc3RhY2tpZF9pbml0YCwgYHN0YWNraWRfZmFzdHBhdGhgLCBgc3RhY2tpZF9uZXdfYnVja2V0YCwgYHN0YWNraWRfaW5zdGFsbGAsIGBicGZfZ2V0X3N0YWNraWRgLCBgYnBmX2dldF9zdGFja2lkX3BlYCwgYGNhbGxjaGFpbl9zdG9yZWAsIGBjYWxsY2hhaW5fZmluYWxpemVgLCBgX19icGZfZ2V0X3N0YWNrYCwgYGJwZl9nZXRfc3RhY2tgLCBgYnBmX2dldF9zdGFja19zbGVlcGFibGVgLCBgX19icGZfZ2V0X3Rhc2tfc3RhY2tgLCBgYnBmX2dldF90YXNrX3N0YWNrYCwgYGJwZl9nZXRfdGFza19zdGFja19zbGVlcGFibGVgLCBgX19icGZfZ2V0X3N0YWNrX3BlYCwgYW5kIGBicGZfZ2V0X3N0YWNrX3BlYC5cblxuU29tZSBvZiB0aGVzZSBhcmUgc3RhdGljLCBvdGhlcnMgYXJlIEJQRl9DQUxMIG1hY3Jvcywgd2hpY2ggbWVhbnMgdGhleSdyZSB3cmFwcGVyIGZ1bmN0aW9ucy4gVGhlIHF1ZXN0aW9uIG5vdyBpcyB3aGV0aGVyIHRoZSB2aXNpYmxlIG5hbWUsIGBicGZfZ2V0X3N0YWNraWRgLCBpcyB0aGUgYWN0dWFsIGZ1bmN0aW9uIG5hbWUuIExldCdzIGRpZyBkZWVwZXIuIFllcCwgaXQgc2VlbXMgbGlrZSBgQlBGX0NBTExfMyhicGZfZ2V0X3N0YWNraWQsIC4uLilgIGRvZXMgaW5kZWVkIGdlbmVyYXRlIGJvdGggYGJwZl9nZXRfc3RhY2tpZGAgYW5kIGBfX19fYnBmX2dldF9zdGFja2lkYC4gU28sIGBicGZfZ2V0X3N0YWNraWRgICppcyogYSB2YWxpZCBzeW1ib2wgYXMgZmFyIGFzIHRoZSBrZXJuZWwgaXMgY29uY2VybmVkLCBhbHRob3VnaCBpdCdzIGFjdGluZyBhcyBhIHdyYXBwZXIuIFRoZSBjb3JlIGxvZ2ljIGlzIGxpa2VseSByZXNpZGluZyBpbiBgX19fX2JwZl9nZXRfc3RhY2tpZGAsIHRoZSBoaWRkZW4gZnVuY3Rpb24uIEdvdHRhIGRvdWJsZS1jaGVjayBgaW5jbHVkZS9saW51eC9maWx0ZXIuaGAgYWdhaW4sIGp1c3QgdG8gYmUgc3VyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQyNTMsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjBUMTA6NTA6NDIuMzYzMTEyOTA4WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2ODA1MzE3NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkZWZpbmUgQlBGX0NBTExfeFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpbmNsdWRlL2xpbnV4L2ZpbHRlci5oXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvZmlsdGVyLmg9MjYwPXN0YXRpYyBpbmxpbmUgYm9vbCBpbnNuX2lzX2Nhc3RfdXNlcihjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24pXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2ZpbHRlci5oLTYxMC1cXG5pbmNsdWRlL2xpbnV4L2ZpbHRlci5oOjYxMTojZGVmaW5lIEJQRl9DQUxMX3goeCwgYXR0ciwgbmFtZSwgLi4uKVxcdFxcdFxcdFxcdFxcdCAgICAgICBcXFxcXFxuaW5jbHVkZS9saW51eC9maWx0ZXIuaC02MTItXFx0c3RhdGljIF9fYWx3YXlzX2lubGluZVxcdFxcdFxcdFxcdFxcdFxcdCAgICAgICBcXFxcXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIwVDEwOjUwOjQyLjQzMTE3NDIwMloiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDQwNTM0NTQzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBCUEZfQ0FMTF94IE1hY3JvKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgaG93IGBCUEZfQ0FMTF94YCBpcyBkZWZpbmVkLiBJdCdzIHRpbWUgdG8gZGlnIGludG8gdGhlIG1hY3JvIGRlZmluaXRpb24sIGFzIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSB1bmRlcmx5aW5nIG1lY2hhbmlzbS4gSSBzdXNwZWN0IEkgbWlnaHQgYmUgZGVhbGluZyB3aXRoIGVpdGhlciBhIGhlbHBlciBmdW5jdGlvbiBvciBzb21lIGtpbmQgb2YgaW5zdHJ1Y3Rpb24gZW5jb2RpbmcsIG9yIHBlcmhhcHMgZXZlbiBhIGxheWVyIHRoYXQgYWJzdHJhY3RzIGtlcm5lbCB2ZXJzaW9ucy4gSSdtIGVzcGVjaWFsbHkga2VlbiB0byB1bmRlcnN0YW5kIGhvdyB0aGUgYXJndW1lbnRzIGFyZSBoYW5kbGVkIOKAkyBhcmUgdGhleSBkaXJlY3RseSBlbmNvZGVkLCBwYXNzZWQgdGhyb3VnaCByZWdpc3RlcnMsIG9yIHBlcmhhcHMgYSBjb21iaW5hdGlvbj8gSSBuZWVkIHRvIHF1aWNrbHkgZ3Jhc3AgaXRzIHJvbGUgd2l0aGluIHRoZSBicm9hZGVyIEJQRiBjb250ZXh0LCBhbmQgZmlndXJlIG91dCBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIGluc3RydWN0aW9uIHNldCBhbmQgdmVyaWZpZXIuIFRoZSBzcGVjaWZpY3MgYXJlIGtleSBoZXJlOiBpcyBpdCBhIHdyYXBwZXIgZm9yIGEgaGFyZGNvZGVkIG9wY29kZSwgb3IgYSBtb3JlIGR5bmFtaWMgY29uc3RydWN0PyBUaW1lIHRvIHN0YXJ0IHRyYWNpbmcgdGhyb3VnaCB0aGUgY29kZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTU0MDgsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yMFQxMDo1MDo0NS40NzE3MTE2NjVaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjI4MzcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImluY2x1ZGUvbGludXgvZmlsdGVyLmhcIixcbiAgXCJGaXJzdExpbmVcIjogNjEwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNjEwOlxcdFxcbiA2MTE6XFx0I2RlZmluZSBCUEZfQ0FMTF94KHgsIGF0dHIsIG5hbWUsIC4uLilcXHRcXHRcXHRcXHRcXHQgICAgICAgXFxcXFxcbiA2MTI6XFx0XFx0c3RhdGljIF9fYWx3YXlzX2lubGluZVxcdFxcdFxcdFxcdFxcdFxcdCAgICAgICBcXFxcXFxuIDYxMzpcXHRcXHR1NjQgX19fXyMjbmFtZShfX0JQRl9NQVAoeCwgX19CUEZfREVDTF9BUkdTLCBfX0JQRl9WLCBfX1ZBX0FSR1NfXykpOyAgIFxcXFxcXG4gNjE0OlxcdFxcdHR5cGVkZWYgdTY0ICgqYnRmXyMjbmFtZSkoX19CUEZfTUFQKHgsIF9fQlBGX0RFQ0xfQVJHUywgX19CUEZfViwgX19WQV9BUkdTX18pKTsgXFxcXFxcbiA2MTU6XFx0XFx0YXR0ciB1NjQgbmFtZShfX0JQRl9SRUcoeCwgX19CUEZfREVDTF9SRUdTLCBfX0JQRl9OLCBfX1ZBX0FSR1NfXykpOyAgICBcXFxcXFxuIDYxNjpcXHRcXHRhdHRyIHU2NCBuYW1lKF9fQlBGX1JFRyh4LCBfX0JQRl9ERUNMX1JFR1MsIF9fQlBGX04sIF9fVkFfQVJHU19fKSkgICAgIFxcXFxcXG4gNjE3OlxcdFxcdHtcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgXFxcXFxcbiA2MTg6XFx0XFx0XFx0cmV0dXJuICgoYnRmXyMjbmFtZSlfX19fIyNuYW1lKShfX0JQRl9NQVAoeCxfX0JQRl9DQVNULF9fQlBGX04sX19WQV9BUkdTX18pKTtcXFxcXFxuIDYxOTpcXHRcXHR9XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgIFxcXFxcXG4gNjIwOlxcdFxcdHN0YXRpYyBfX2Fsd2F5c19pbmxpbmVcXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgXFxcXFxcbiA2MjE6XFx0XFx0dTY0IF9fX18jI25hbWUoX19CUEZfTUFQKHgsIF9fQlBGX0RFQ0xfQVJHUywgX19CUEZfViwgX19WQV9BUkdTX18pKVxcbiA2MjI6XFx0XFxuIDYyMzpcXHQjZGVmaW5lIF9fTk9BVFRSXFxuIDYyNDpcXHQjZGVmaW5lIEJQRl9DQUxMXzAobmFtZSwgLi4uKVxcdEJQRl9DQUxMX3goMCwgX19OT0FUVFIsIG5hbWUsIF9fVkFfQVJHU19fKVxcbiA2MjU6XFx0I2RlZmluZSBCUEZfQ0FMTF8xKG5hbWUsIC4uLilcXHRCUEZfQ0FMTF94KDEsIF9fTk9BVFRSLCBuYW1lLCBfX1ZBX0FSR1NfXylcXG4gNjI2OlxcdCNkZWZpbmUgQlBGX0NBTExfMihuYW1lLCAuLi4pXFx0QlBGX0NBTExfeCgyLCBfX05PQVRUUiwgbmFtZSwgX19WQV9BUkdTX18pXFxuIDYyNzpcXHQjZGVmaW5lIEJQRl9DQUxMXzMobmFtZSwgLi4uKVxcdEJQRl9DQUxMX3goMywgX19OT0FUVFIsIG5hbWUsIF9fVkFfQVJHU19fKVxcbiA2Mjg6XFx0I2RlZmluZSBCUEZfQ0FMTF80KG5hbWUsIC4uLilcXHRCUEZfQ0FMTF94KDQsIF9fTk9BVFRSLCBuYW1lLCBfX1ZBX0FSR1NfXylcXG4gNjI5OlxcdCNkZWZpbmUgQlBGX0NBTExfNShuYW1lLCAuLi4pXFx0QlBGX0NBTExfeCg1LCBfX05PQVRUUiwgbmFtZSwgX19WQV9BUkdTX18pXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIwVDEwOjUwOjQ1LjQ3MTk0MjE1NVoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNDYxMDA0MzM2MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFN0YWNrbWFwIFJlZmFjdG9yaW5nKipcblxuQWxyaWdodCwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBGcm9tIHdoYXQgSSdtIHNlZWluZywgYG5hbWVgIGlzIGFjdGluZyBhcyB0aGUgcHVibGljbHktdmlzaWJsZSB3cmFwcGVyLCBhbmQgYF9fX19uYW1lYCBpcyB0aGUgaW50ZXJuYWwgZnVuY3Rpb24uIFRoZSBgX19fX25hbWVgIGZ1bmN0aW9ucywgYmVpbmcgZGVjbGFyZWQgYHN0YXRpYyBfX2Fsd2F5c19pbmxpbmVgLCBhcmUgcHJpbWUgY2FuZGlkYXRlcyBmb3IgaW5saW5pbmcsIHdoaWNoIG1lYW5zIHdlIG5lZWQgdG8gdHJhY2UgdGhvc2UgY29ubmVjdGlvbnMuXG5cblRvIGdldCBhIGhhbmRsZSBvbiB0aGlzLCBJJ3ZlIGlkZW50aWZpZWQgYSBsaXN0IG9mIHN5bWJvbHMgdG8gZm9jdXMgb24uIFdlJ3ZlIGdvdCB0aGUgQlBGIHdyYXBwZXJzOiBgYnBmX2dldF9zdGFja2lkYCwgYGJwZl9nZXRfc3RhY2tpZF9wZWAsIGBicGZfZ2V0X3N0YWNrYCwgYGJwZl9nZXRfc3RhY2tfc2xlZXBhYmxlYCwgYGJwZl9nZXRfdGFza19zdGFja2AsIGBicGZfZ2V0X3Rhc2tfc3RhY2tfc2xlZXBhYmxlYCwgYW5kIGBicGZfZ2V0X3N0YWNrX3BlYC4gQWxzbywgd2UgbmVlZCB0byBjb25zaWRlciB0aG9zZSBzdGF0aWMgaGVscGVycyB0aGF0IG1pZ2h0ICpub3QqIGJlIGlubGluZWQuXG5cbkluaXRpYWxseSwgSSBpZGVudGlmaWVkIGEgc2V0IG9mIHN0YXRpYyBmdW5jdGlvbnM6IGBzdGFja2lkX2luaXRgLCBgc3RhY2tpZF9mYXN0cGF0aGAsIGBzdGFja2lkX25ld19idWNrZXRgLCBgc3RhY2tpZF9pbnN0YWxsYCwgYGNhbGxjaGFpbl9zdG9yZWAsIGBjYWxsY2hhaW5fZmluYWxpemVgLCBgX19icGZfZ2V0X3N0YWNrX3BlYCwgYW5kIGBfX2JwZl9nZXRfc3RhY2tgLiBJJ3ZlIGdvbmUgYmFjayBhbmQgY2hlY2tlZCB0aGUgY2FsbCBncmFwaCBmb3IgdGhlbSB0byBkZXRlcm1pbmUgd2hpY2ggYXJlIGFjdHVhbGx5IHJlYWNoYWJsZSBhbmQgd2hpY2ggYXJlIGlubGluZWQuIEl0IGxvb2tzIGxpa2UgYHN0YWNraWRfaW5pdGAgaXMgY2FsbGVkIGJ5IGBzdGFja2lkX2Zhc3RwYXRoYCwgd2hpY2ggaXMgaW4gdHVybiBjYWxsZWQgZnJvbSBgYnBmX2dldF9zdGFja2lkYCBhbmQgYGJwZl9nZXRfc3RhY2tpZF9wZWAuIGBzdGFja2lkX25ld19idWNrZXRgIGFuZCBgc3RhY2tpZF9pbnN0YWxsYCBhcmUgYWxzbyBjYWxsZWQgYnkgYGJwZl9nZXRfc3RhY2tpZGAgYW5kIGBicGZfZ2V0X3N0YWNraWRfcGVgLiBTaW1pbGFybHksIGBjYWxsY2hhaW5fc3RvcmVgIGFuZCBgY2FsbGNoYWluX2ZpbmFsaXplYCBhcmUgY2FsbGVkIGJ5IHRoZSBgX19icGZfZ2V0X3N0YWNrYCBhbmQgYF9fYnBmX2dldF9zdGFja19wZWAuICBGaW5hbGx5LCB0aGUgYF9fYnBmX2dldF9zdGFja2AgaXMgY2FsbGVkIGJ5IGEgdmFyaWV0eSBvZiBmdW5jdGlvbnMsIGFuZCBgX19icGZfZ2V0X3Rhc2tfc3RhY2tgIGlzIGNhbGxlZCBieSB0aGUgYGJwZl9nZXRfdGFza19zdGFja2AgdmFyaWFudHMuXG5cblNvLCB0aGUgZm9jdXMgc3ltYm9scyBhcmU6XG5gYnBmX2dldF9zdGFja2lkYFxuYGJwZl9nZXRfc3RhY2tpZF9wZWBcbmBicGZfZ2V0X3N0YWNrYFxuYGJwZl9nZXRfc3RhY2tfc2xlZXBhYmxlYFxuYGJwZl9nZXRfdGFza19zdGFja2BcbmBicGZfZ2V0X3Rhc2tfc3RhY2tfc2xlZXBhYmxlYFxuYGJwZl9nZXRfc3RhY2tfcGVgXG5gc3RhY2tpZF9mYXN0cGF0aGBcbmBzdGFja2lkX25ld19idWNrZXRgXG5gc3RhY2tpZF9pbnN0YWxsYFxuYGNhbGxjaGFpbl9zdG9yZWBcbmBjYWxsY2hhaW5fZmluYWxpemVgXG5gX19icGZfZ2V0X3N0YWNrYFxuYF9fYnBmX2dldF9zdGFja19wZWBcbmBfX2JwZl9nZXRfdGFza19zdGFja2BcblxuT2theSwgdGhhdCdzIGEgZ29vZCBzdGFydGluZyBsaXN0LlxuXG5Ob3csIGxldCdzIGNvbnNpZGVyIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9ucy4gV2UndmUgZ290IGBCUEZfU1lTQ0FMTGAsIGBQRVJGX0VWRU5UU2AsIGBCUEZfRVZFTlRTYCwgYW5kIGBTVEFDS1RSQUNFYC4gYENPTkZJR19CUEZfU1lTQ0FMTGAgaXMsIG9mIGNvdXJzZSwgdGhlIG1haW4gb25lLiBgQ09ORklHX1BFUkZfRVZFTlRTYCBpcyBleHBsaWNpdGx5IHJlcXVpcmVkIGZvciBga2VybmVsL2JwZi9zdGFja21hcC5jYCB0byBjb21waWxlIGFuZCBgQ09ORklHX0JQRl9FVkVOVFNgIGlzIHJlcXVpcmVkIGZvciBga2VybmVsL3RyYWNlL2JwZl90cmFjZS5jYCBhbmQgcmVnaXN0ZXJpbmcgQlBGIGhlbHBlcnMuIGBDT05GSUdfU1RBQ0tUUkFDRWAgaXMgdGhlcmUgYmVjYXVzZSBvZiBgZ2V0X2NhbGxjaGFpbl9lbnRyeV9mb3JfdGFza2AuIEkgZG9uJ3QgdGhpbmsgYENPTkZJR19UUkFDSU5HYCBpcyBzdHJpY3RseSBuZWVkZWQsIGFzIGBCUEZfRVZFTlRTYCB1c3VhbGx5IGNvdmVycyBpdC5cblxuTG9va2luZyBhdCB0aGUgZmlsZSBtb2RpZmljYXRpb25zLCBpdCdzIGp1c3QgYGtlcm5lbC9icGYvc3RhY2ttYXAuY2AsIGluZGljYXRpbmcgdGhpcyBpcyBhIGxvY2FsaXplZCBjaGFuZ2UuXG5cblRoZSBjb3JlIG9mIHRoaXMgcGF0Y2ggc2VlbXMgdG8gYmUgcmVmYWN0b3JpbmcgdGhlIHN0YWNrbWFwIGNvZGUuIFRoZXkncmUgcHVsbGluZyBvdXQgY29tbW9uIGxvZ2ljIGludG8gaGVscGVyIGZ1bmN0aW9ucywgbWVhbmluZyB0aGlzIHJlZmFjdG9yaW5nIHNob3VsZCBub3QgY2hhbmdlIHRoZSBleHRlcm5hbCBiZWhhdmlvciwgYnV0IGl0IGRvZXMgc2lnbmlmaWNhbnRseSBhbHRlciB0aGUgaW50ZXJuYWwgd29ya2luZ3MuIFRoaXMgaXMgYSBjbGFzc2ljIGNhc2Ugd2hlcmUgZnV6emluZyBpcyAqZXNzZW50aWFsKi4gRXZlbiBpZiBpdCBzZWVtcyBoYXJtbGVzcyBvbiB0aGUgc3VyZmFjZSwgcmVmYWN0b3JpbmdzIGxpa2UgdGhpcyBhcmUgcHJpbWUgY2FuZGlkYXRlcyBmb3IgaW50cm9kdWNpbmcgcmVncmVzc2lvbnMgb3IgbWVtb3J5IGxlYWtzLiBXZSBuZWVkIHRvIGJlIHRob3JvdWdoLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjI2MSwiT3V0cHV0VG9rZW5zIjozMDUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5NzAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yMFQxMDo1MTowMC4wODE5ODgzMjdaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NzEzODU0NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX1NZU0NBTExcIixcbiAgICBcIlBFUkZfRVZFTlRTXCIsXG4gICAgXCJCUEZfRVZFTlRTXCIsXG4gICAgXCJTVEFDS1RSQUNFXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYnBmX2dldF9zdGFja2lkXCIsXG4gICAgXCJicGZfZ2V0X3N0YWNraWRfcGVcIixcbiAgICBcImJwZl9nZXRfc3RhY2tcIixcbiAgICBcImJwZl9nZXRfc3RhY2tfc2xlZXBhYmxlXCIsXG4gICAgXCJicGZfZ2V0X3Rhc2tfc3RhY2tcIixcbiAgICBcImJwZl9nZXRfdGFza19zdGFja19zbGVlcGFibGVcIixcbiAgICBcImJwZl9nZXRfc3RhY2tfcGVcIixcbiAgICBcInN0YWNraWRfZmFzdHBhdGhcIixcbiAgICBcInN0YWNraWRfbmV3X2J1Y2tldFwiLFxuICAgIFwic3RhY2tpZF9pbnN0YWxsXCIsXG4gICAgXCJjYWxsY2hhaW5fc3RvcmVcIixcbiAgICBcImNhbGxjaGFpbl9maW5hbGl6ZVwiLFxuICAgIFwiX19icGZfZ2V0X3N0YWNrXCIsXG4gICAgXCJfX2JwZl9nZXRfc3RhY2tfcGVcIixcbiAgICBcIl9fYnBmX2dldF90YXNrX3N0YWNrXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSBCUEYgc3RhY2ttYXAgYW5kIHN0YWNraWQgaGVscGVyIGZ1bmN0aW9ucywgaW50cm9kdWNpbmcgbmV3IGludGVybmFsIGhlbHBlciBmdW5jdGlvbnMgbGlrZSBgc3RhY2tpZF9mYXN0cGF0aGAsIGBzdGFja2lkX25ld19idWNrZXRgLCBgc3RhY2tpZF9pbnN0YWxsYCwgYGNhbGxjaGFpbl9zdG9yZWAsIGFuZCBgY2FsbGNoYWluX2ZpbmFsaXplYC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIEJQRiBzdWJzeXN0ZW0gdGhhdCBoYW5kbGVzIHN0YWNrIHRyYWNlcyBhbmQgcGVyZiBldmVudCBjYWxsY2hhaW5zLiBJdCBpcyBpbXBvcnRhbnQgdG8gZnV6eiB0aGVzZSBjaGFuZ2VzIHRvIGVuc3VyZSBubyByZWdyZXNzaW9ucywgbWVtb3J5IGxlYWtzLCBvciBjb25jdXJyZW5jeSBpc3N1ZXMgYXJlIGludHJvZHVjZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX1NZU0NBTExcIixcbiAgICBcIlBFUkZfRVZFTlRTXCIsXG4gICAgXCJCUEZfRVZFTlRTXCIsXG4gICAgXCJTVEFDS1RSQUNFXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYnBmX2dldF9zdGFja2lkXCIsXG4gICAgXCJicGZfZ2V0X3N0YWNraWRfcGVcIixcbiAgICBcImJwZl9nZXRfc3RhY2tcIixcbiAgICBcImJwZl9nZXRfc3RhY2tfc2xlZXBhYmxlXCIsXG4gICAgXCJicGZfZ2V0X3Rhc2tfc3RhY2tcIixcbiAgICBcImJwZl9nZXRfdGFza19zdGFja19zbGVlcGFibGVcIixcbiAgICBcImJwZl9nZXRfc3RhY2tfcGVcIixcbiAgICBcInN0YWNraWRfZmFzdHBhdGhcIixcbiAgICBcInN0YWNraWRfbmV3X2J1Y2tldFwiLFxuICAgIFwic3RhY2tpZF9pbnN0YWxsXCIsXG4gICAgXCJjYWxsY2hhaW5fc3RvcmVcIixcbiAgICBcImNhbGxjaGFpbl9maW5hbGl6ZVwiLFxuICAgIFwiX19icGZfZ2V0X3N0YWNrXCIsXG4gICAgXCJfX2JwZl9nZXRfc3RhY2tfcGVcIixcbiAgICBcIl9fYnBmX2dldF90YXNrX3N0YWNrXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSBCUEYgc3RhY2ttYXAgYW5kIHN0YWNraWQgaGVscGVyIGZ1bmN0aW9ucywgaW50cm9kdWNpbmcgbmV3IGludGVybmFsIGhlbHBlciBmdW5jdGlvbnMgbGlrZSBgc3RhY2tpZF9mYXN0cGF0aGAsIGBzdGFja2lkX25ld19idWNrZXRgLCBgc3RhY2tpZF9pbnN0YWxsYCwgYGNhbGxjaGFpbl9zdG9yZWAsIGFuZCBgY2FsbGNoYWluX2ZpbmFsaXplYC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIEJQRiBzdWJzeXN0ZW0gdGhhdCBoYW5kbGVzIHN0YWNrIHRyYWNlcyBhbmQgcGVyZiBldmVudCBjYWxsY2hhaW5zLiBJdCBpcyBpbXBvcnRhbnQgdG8gZnV6eiB0aGVzZSBjaGFuZ2VzIHRvIGVuc3VyZSBubyByZWdyZXNzaW9ucywgbWVtb3J5IGxlYWtzLCBvciBjb25jdXJyZW5jeSBpc3N1ZXMgYXJlIGludHJvZHVjZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowzrnhc[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-20 10:06:27 +0000 UTC FinishedAt: 2026-07-20 10:51:02 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "761214e5c0b14aa4e16a6b763c7a4932ce89f589", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL", "PERF_EVENTS", "BPF_EVENTS", "STACKTRACE" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "761214e5c0b14aa4e16a6b763c7a4932ce89f589", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL", "PERF_EVENTS", "BPF_EVENTS", "STACKTRACE" ], "series_id": "1f7450ef-d3af-4c90-82b2-42a5b2c958bb" }, "track": "KASAN", "fuzz": { "focus": [ "bpf" ], "focus_symbols": [ "bpf_get_stackid", "bpf_get_stackid_pe", "bpf_get_stack", "bpf_get_stack_sleepable", "bpf_get_task_stack", "bpf_get_task_stack_sleepable", "bpf_get_stack_pe", "stackid_fastpath", "stackid_new_bucket", "stackid_install", "callchain_store", "callchain_finalize", "__bpf_get_stack", "__bpf_get_stack_pe", "__bpf_get_task_stack" ], "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+CgkJCTx0ZD4yMDI2LzA3LzIwIDEwOjQ5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDssCiAgICAmIzM0O1BFUkZfRVZFTlRTJiMzNDssCiAgICAmIzM0O0JQRl9FVkVOVFMmIzM0OywKICAgICYjMzQ7U1RBQ0tUUkFDRSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2JwZl9nZXRfc3RhY2tpZCYjMzQ7LAogICAgJiMzNDticGZfZ2V0X3N0YWNraWRfcGUmIzM0OywKICAgICYjMzQ7YnBmX2dldF9zdGFjayYjMzQ7LAogICAgJiMzNDticGZfZ2V0X3N0YWNrX3NsZWVwYWJsZSYjMzQ7LAogICAgJiMzNDticGZfZ2V0X3Rhc2tfc3RhY2smIzM0OywKICAgICYjMzQ7YnBmX2dldF90YXNrX3N0YWNrX3NsZWVwYWJsZSYjMzQ7LAogICAgJiMzNDticGZfZ2V0X3N0YWNrX3BlJiMzNDssCiAgICAmIzM0O3N0YWNraWRfZmFzdHBhdGgmIzM0OywKICAgICYjMzQ7c3RhY2tpZF9uZXdfYnVja2V0JiMzNDssCiAgICAmIzM0O3N0YWNraWRfaW5zdGFsbCYjMzQ7LAogICAgJiMzNDtjYWxsY2hhaW5fc3RvcmUmIzM0OywKICAgICYjMzQ7Y2FsbGNoYWluX2ZpbmFsaXplJiMzNDssCiAgICAmIzM0O19fYnBmX2dldF9zdGFjayYjMzQ7LAogICAgJiMzNDtfX2JwZl9nZXRfc3RhY2tfcGUmIzM0OywKICAgICYjMzQ7X19icGZfZ2V0X3Rhc2tfc3RhY2smIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSBCUEYgc3RhY2ttYXAgYW5kIHN0YWNraWQgaGVscGVyIGZ1bmN0aW9ucywgaW50cm9kdWNpbmcgbmV3IGludGVybmFsIGhlbHBlciBmdW5jdGlvbnMgbGlrZSBgc3RhY2tpZF9mYXN0cGF0aGAsIGBzdGFja2lkX25ld19idWNrZXRgLCBgc3RhY2tpZF9pbnN0YWxsYCwgYGNhbGxjaGFpbl9zdG9yZWAsIGFuZCBgY2FsbGNoYWluX2ZpbmFsaXplYC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIEJQRiBzdWJzeXN0ZW0gdGhhdCBoYW5kbGVzIHN0YWNrIHRyYWNlcyBhbmQgcGVyZiBldmVudCBjYWxsY2hhaW5zLiBJdCBpcyBpbXBvcnRhbnQgdG8gZnV6eiB0aGVzZSBjaGFuZ2VzIHRvIGVuc3VyZSBubyByZWdyZXNzaW9ucywgbWVtb3J5IGxlYWtzLCBvciBjb25jdXJyZW5jeSBpc3N1ZXMgYXJlIGludHJvZHVjZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjAgMTA6NDk8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBjYWU5NTRjOTVjZTcyYmE5MjkxODA3YmEzY2M1YWRjNmNhZWY5YTk4XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBKdWwgMjAgMTA6NDk6NTYgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9zdGFja21hcC5jIGIva2VybmVsL2JwZi9zdGFja21hcC5jXG5pbmRleCA0MWZlODdkNzMwMmYyMi4uMzdmOGU0NjMxOWIzNGYgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvYnBmL3N0YWNrbWFwLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9icGYvc3RhY2ttYXAuY1xuQEAgLTUwNCw3OCAmIzQzOzUwNCwxMTYgQEAgZ2V0X2NhbGxjaGFpbl9lbnRyeV9mb3JfdGFzayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssIHUzMiBtYXhfZGVwdGgpXG4gI2VuZGlmXG4gfVxuIFxuLXN0YXRpYyBsb25nIF9fYnBmX2dldF9zdGFja2lkKHN0cnVjdCBicGZfbWFwICptYXAsXG4tXHRcdFx0ICAgICAgc3RydWN0IHBlcmZfY2FsbGNoYWluX2VudHJ5ICp0cmFjZSwgdTY0IGZsYWdzKVxuJiM0MztzdHJ1Y3Qgc3RhY2tpZCB7XG4mIzQzO1x0c3RydWN0IHN0YWNrX21hcF9idWNrZXQgKmJ1Y2tldDtcbiYjNDM7XHR1NjQgKmlwcztcbiYjNDM7XHR1MzIgIG5yO1xuJiM0MztcdHUzMiAgbGVuO1xuJiM0MztcdHUzMiAgaGFzaDtcbiYjNDM7XHR1MzIgIGlkO1xuJiM0MztcdGJvb2wgaGFzaF9tYXRjaGVzO1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7c3RhdGljIGludCBzdGFja2lkX2luaXQoc3RydWN0IHN0YWNraWQgKnN0YWNraWQsIHN0cnVjdCBicGZfbWFwICptYXAsXG4mIzQzO1x0XHRcdHN0cnVjdCBwZXJmX2NhbGxjaGFpbl9lbnRyeSAqdHJhY2UsIHU2NCBmbGFncylcbiB7XG4gXHRzdHJ1Y3QgYnBmX3N0YWNrX21hcCAqc21hcCA9IGNvbnRhaW5lcl9vZihtYXAsIHN0cnVjdCBicGZfc3RhY2tfbWFwLCBtYXApO1xuLVx0c3RydWN0IHN0YWNrX21hcF9idWNrZXQgKmJ1Y2tldCwgKm5ld19idWNrZXQsICpvbGRfYnVja2V0O1xuLVx0dTMyIGhhc2gsIGlkLCB0cmFjZV9uciwgdHJhY2VfbGVuLCBpLCBtYXhfZGVwdGg7XG4gXHR1MzIgc2tpcCA9IGZsYWdzIFx1MDAyNiBCUEZfRl9TS0lQX0ZJRUxEX01BU0s7XG4tXHRib29sIHVzZXIgPSBmbGFncyBcdTAwMjYgQlBGX0ZfVVNFUl9TVEFDSztcbi1cdHU2NCAqaXBzO1xuLVx0Ym9vbCBoYXNoX21hdGNoZXM7XG4mIzQzO1x0dTMyIG1heF9kZXB0aDtcbiBcbiBcdGlmICh0cmFjZS1cdTAwM2VuciBcdTAwM2M9IHNraXApXG4gXHRcdC8qIHNraXBwaW5nIG1vcmUgdGhhbiB1c2FibGUgc3RhY2sgdHJhY2UgKi9cbiBcdFx0cmV0dXJuIC1FRkFVTFQ7XG4gXG4gXHRtYXhfZGVwdGggPSBzdGFja19tYXBfY2FsY3VsYXRlX21heF9kZXB0aChtYXAtXHUwMDNldmFsdWVfc2l6ZSwgc3RhY2tfbWFwX2RhdGFfc2l6ZShtYXApLCBmbGFncyk7XG4tXHR0cmFjZV9uciA9IG1pbl90KHUzMiwgdHJhY2UtXHUwMDNlbnIgLSBza2lwLCBtYXhfZGVwdGggLSBza2lwKTtcbi1cdHRyYWNlX2xlbiA9IHRyYWNlX25yICogc2l6ZW9mKHU2NCk7XG4tXHRpcHMgPSB0cmFjZS1cdTAwM2VpcCAmIzQzOyBza2lwO1xuLVx0aGFzaCA9IGpoYXNoMigodTMyICopaXBzLCB0cmFjZV9sZW4gLyBzaXplb2YodTMyKSwgMCk7XG4tXHRpZCA9IGhhc2ggXHUwMDI2IChzbWFwLVx1MDAzZW5fYnVja2V0cyAtIDEpO1xuLVx0YnVja2V0ID0gUkVBRF9PTkNFKHNtYXAtXHUwMDNlYnVja2V0c1tpZF0pO1xuJiM0MztcdHN0YWNraWQtXHUwMDNlbnIgPSBtaW5fdCh1MzIsIHRyYWNlLVx1MDAzZW5yIC0gc2tpcCwgbWF4X2RlcHRoIC0gc2tpcCk7XG4mIzQzO1x0c3RhY2tpZC1cdTAwM2VsZW4gPSBzdGFja2lkLVx1MDAzZW5yICogc2l6ZW9mKHU2NCk7XG4mIzQzO1x0c3RhY2tpZC1cdTAwM2VpcHMgPSB0cmFjZS1cdTAwM2VpcCAmIzQzOyBza2lwO1xuJiM0MztcdHN0YWNraWQtXHUwMDNlaGFzaCA9IGpoYXNoMigodTMyICopc3RhY2tpZC1cdTAwM2VpcHMsIHN0YWNraWQtXHUwMDNlbGVuIC8gc2l6ZW9mKHUzMiksIDApO1xuJiM0MztcdHN0YWNraWQtXHUwMDNlaWQgPSBzdGFja2lkLVx1MDAzZWhhc2ggXHUwMDI2IChzbWFwLVx1MDAzZW5fYnVja2V0cyAtIDEpO1xuJiM0MztcdHN0YWNraWQtXHUwMDNlYnVja2V0ID0gUkVBRF9PTkNFKHNtYXAtXHUwMDNlYnVja2V0c1tzdGFja2lkLVx1MDAzZWlkXSk7XG4mIzQzO1x0c3RhY2tpZC1cdTAwM2VoYXNoX21hdGNoZXMgPSBzdGFja2lkLVx1MDAzZWJ1Y2tldCBcdTAwMjZcdTAwMjYgc3RhY2tpZC1cdTAwM2VidWNrZXQtXHUwMDNlaGFzaCA9PSBzdGFja2lkLVx1MDAzZWhhc2g7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgc3RhY2tpZF9mYXN0cGF0aChzdHJ1Y3Qgc3RhY2tpZCAqc3RhY2tpZCwgc3RydWN0IGJwZl9tYXAgKm1hcCxcbiYjNDM7XHRcdFx0ICAgIHN0cnVjdCBwZXJmX2NhbGxjaGFpbl9lbnRyeSAqdHJhY2UsIHU2NCBmbGFncylcbiYjNDM7e1xuJiM0MztcdGludCBlcnI7XG4mIzQzO1xuJiM0MztcdGVyciA9IHN0YWNraWRfaW5pdChzdGFja2lkLCBtYXAsIHRyYWNlLCBmbGFncyk7XG4mIzQzO1x0aWYgKGVycilcbiYjNDM7XHRcdHJldHVybiBlcnI7XG4gXG4tXHRoYXNoX21hdGNoZXMgPSBidWNrZXQgXHUwMDI2XHUwMDI2IGJ1Y2tldC1cdTAwM2VoYXNoID09IGhhc2g7XG4gXHQvKiBmYXN0IGNtcCAqL1xuLVx0aWYgKGhhc2hfbWF0Y2hlcyBcdTAwMjZcdTAwMjYgZmxhZ3MgXHUwMDI2IEJQRl9GX0ZBU1RfU1RBQ0tfQ01QKVxuLVx0XHRyZXR1cm4gaWQ7XG4mIzQzO1x0aWYgKHN0YWNraWQtXHUwMDNlaGFzaF9tYXRjaGVzIFx1MDAyNlx1MDAyNiBmbGFncyBcdTAwMjYgQlBGX0ZfRkFTVF9TVEFDS19DTVApXG4mIzQzO1x0XHRyZXR1cm4gc3RhY2tpZC1cdTAwM2VpZDtcbiYjNDM7XG4mIzQzO1x0aWYgKHN0YWNrX21hcF91c2VfYnVpbGRfaWQobWFwKSlcbiYjNDM7XHRcdHJldHVybiAtRU5PRU5UO1xuJiM0MztcdGlmIChzdGFja2lkLVx1MDAzZWhhc2hfbWF0Y2hlcyBcdTAwMjZcdTAwMjYgc3RhY2tpZC1cdTAwM2VidWNrZXQtXHUwMDNlbnIgPT0gc3RhY2tpZC1cdTAwM2VuciBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgbWVtY21wKHN0YWNraWQtXHUwMDNlYnVja2V0LVx1MDAzZWRhdGEsIHN0YWNraWQtXHUwMDNlaXBzLCBzdGFja2lkLVx1MDAzZWxlbikgPT0gMClcbiYjNDM7XHRcdHJldHVybiBzdGFja2lkLVx1MDAzZWlkO1xuJiM0MztcdGlmIChzdGFja2lkLVx1MDAzZWJ1Y2tldCBcdTAwMjZcdTAwMjYgIShmbGFncyBcdTAwMjYgQlBGX0ZfUkVVU0VfU1RBQ0tJRCkpXG4mIzQzO1x0XHRyZXR1cm4gLUVFWElTVDtcbiYjNDM7XHRyZXR1cm4gLUVOT0VOVDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHN0cnVjdCBzdGFja19tYXBfYnVja2V0ICpcbiYjNDM7c3RhY2tpZF9uZXdfYnVja2V0KHN0cnVjdCBzdGFja2lkICpzdGFja2lkLCBzdHJ1Y3QgYnBmX21hcCAqbWFwLFxuJiM0MztcdFx0ICAgc3RydWN0IHBlcmZfY2FsbGNoYWluX2VudHJ5ICp0cmFjZSwgdTY0IGZsYWdzKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGJwZl9zdGFja19tYXAgKnNtYXAgPSBjb250YWluZXJfb2YobWFwLCBzdHJ1Y3QgYnBmX3N0YWNrX21hcCwgbWFwKTtcbiYjNDM7XHRzdHJ1Y3QgYnBmX3N0YWNrX2J1aWxkX2lkICppZF9vZmZzO1xuJiM0MztcdHN0cnVjdCBzdGFja19tYXBfYnVja2V0ICpidWNrZXQ7XG4mIzQzO1x0dTMyIGk7XG4mIzQzO1xuJiM0MztcdGJ1Y2tldCA9IChzdHJ1Y3Qgc3RhY2tfbWFwX2J1Y2tldCAqKSBwY3B1X2ZyZWVsaXN0X3BvcChcdTAwMjZzbWFwLVx1MDAzZWZyZWVsaXN0KTtcbiYjNDM7XHRpZiAodW5saWtlbHkoIWJ1Y2tldCkpXG4mIzQzO1x0XHRyZXR1cm4gTlVMTDtcbiYjNDM7XG4mIzQzO1x0aWYgKHN0YWNrX21hcF91c2VfYnVpbGRfaWQobWFwKSkge1xuJiM0MztcdFx0aWRfb2ZmcyA9IChzdHJ1Y3QgYnBmX3N0YWNrX2J1aWxkX2lkICopYnVja2V0LVx1MDAzZWRhdGE7XG4mIzQzO1x0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBzdGFja2lkLVx1MDAzZW5yOyBpJiM0MzsmIzQzOylcbiYjNDM7XHRcdFx0aWRfb2Zmc1tpXS5pcCA9IHN0YWNraWQtXHUwMDNlaXBzW2ldO1xuJiM0MztcdH0gZWxzZSB7XG4mIzQzO1x0XHRtZW1jcHkoYnVja2V0LVx1MDAzZWRhdGEsIHN0YWNraWQtXHUwMDNlaXBzLCBzdGFja2lkLVx1MDAzZWxlbik7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRidWNrZXQtXHUwMDNlaGFzaCA9IHN0YWNraWQtXHUwMDNlaGFzaDtcbiYjNDM7XHRidWNrZXQtXHUwMDNlbnIgPSBzdGFja2lkLVx1MDAzZW5yO1xuJiM0MztcdHJldHVybiBidWNrZXQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBsb25nIHN0YWNraWRfaW5zdGFsbChzdHJ1Y3Qgc3RhY2tpZCAqc3RhY2tpZCwgc3RydWN0IGJwZl9tYXAgKm1hcCxcbiYjNDM7XHRcdFx0ICAgIHN0cnVjdCBzdGFja19tYXBfYnVja2V0ICpuZXdfYnVja2V0LCB1NjQgZmxhZ3MpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgYnBmX3N0YWNrX21hcCAqc21hcCA9IGNvbnRhaW5lcl9vZihtYXAsIHN0cnVjdCBicGZfc3RhY2tfbWFwLCBtYXApO1xuJiM0MztcdGJvb2wgdXNlciA9IGZsYWdzIFx1MDAyNiBCUEZfRl9VU0VSX1NUQUNLO1xuJiM0MztcdHN0cnVjdCBzdGFja19tYXBfYnVja2V0ICpvbGRfYnVja2V0O1xuJiM0MztcdHUzMiB0cmFjZV9sZW47XG4gXG4gXHRpZiAoc3RhY2tfbWFwX3VzZV9idWlsZF9pZChtYXApKSB7XG4gXHRcdHN0cnVjdCBicGZfc3RhY2tfYnVpbGRfaWQgKmlkX29mZnM7XG4gXG4tXHRcdC8qIGZvciBidWlsZF9pZCYjNDM7b2Zmc2V0LCBwb3AgYSBidWNrZXQgYmVmb3JlIHNsb3cgY21wICovXG4tXHRcdG5ld19idWNrZXQgPSAoc3RydWN0IHN0YWNrX21hcF9idWNrZXQgKilcbi1cdFx0XHRwY3B1X2ZyZWVsaXN0X3BvcChcdTAwMjZzbWFwLVx1MDAzZWZyZWVsaXN0KTtcbi1cdFx0aWYgKHVubGlrZWx5KCFuZXdfYnVja2V0KSlcbi1cdFx0XHRyZXR1cm4gLUVOT01FTTtcbi1cdFx0bmV3X2J1Y2tldC1cdTAwM2VuciA9IHRyYWNlX25yO1xuIFx0XHRpZF9vZmZzID0gKHN0cnVjdCBicGZfc3RhY2tfYnVpbGRfaWQgKiluZXdfYnVja2V0LVx1MDAzZWRhdGE7XG4tXHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHRyYWNlX25yOyBpJiM0MzsmIzQzOylcbi1cdFx0XHRpZF9vZmZzW2ldLmlwID0gaXBzW2ldO1xuLVx0XHRzdGFja19tYXBfZ2V0X2J1aWxkX2lkX29mZnNldChpZF9vZmZzLCB0cmFjZV9uciwgdXNlciwgZmFsc2UgLyogIW1heV9mYXVsdCAqLyk7XG4tXHRcdHRyYWNlX2xlbiA9IHRyYWNlX25yICogc2l6ZW9mKHN0cnVjdCBicGZfc3RhY2tfYnVpbGRfaWQpO1xuLVx0XHRpZiAoaGFzaF9tYXRjaGVzIFx1MDAyNlx1MDAyNiBidWNrZXQtXHUwMDNlbnIgPT0gdHJhY2VfbnIgXHUwMDI2XHUwMDI2XG4tXHRcdCAgICBtZW1jbXAoYnVja2V0LVx1MDAzZWRhdGEsIG5ld19idWNrZXQtXHUwMDNlZGF0YSwgdHJhY2VfbGVuKSA9PSAwKSB7XG4mIzQzO1x0XHRzdGFja19tYXBfZ2V0X2J1aWxkX2lkX29mZnNldChpZF9vZmZzLCBzdGFja2lkLVx1MDAzZW5yLCB1c2VyLCBmYWxzZSAvKiAhbWF5X2ZhdWx0ICovKTtcbiYjNDM7XHRcdHRyYWNlX2xlbiA9IHN0YWNraWQtXHUwMDNlbnIgKiBzaXplb2Yoc3RydWN0IGJwZl9zdGFja19idWlsZF9pZCk7XG4mIzQzO1x0XHRpZiAoc3RhY2tpZC1cdTAwM2VoYXNoX21hdGNoZXMgXHUwMDI2XHUwMDI2IHN0YWNraWQtXHUwMDNlYnVja2V0LVx1MDAzZW5yID09IHN0YWNraWQtXHUwMDNlbnIgXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHQgICAgbWVtY21wKHN0YWNraWQtXHUwMDNlYnVja2V0LVx1MDAzZWRhdGEsIG5ld19idWNrZXQtXHUwMDNlZGF0YSwgdHJhY2VfbGVuKSA9PSAwKSB7XG4gXHRcdFx0cGNwdV9mcmVlbGlzdF9wdXNoKFx1MDAyNnNtYXAtXHUwMDNlZnJlZWxpc3QsIFx1MDAyNm5ld19idWNrZXQtXHUwMDNlZm5vZGUpO1xuLVx0XHRcdHJldHVybiBpZDtcbiYjNDM7XHRcdFx0cmV0dXJuIHN0YWNraWQtXHUwMDNlaWQ7XG4gXHRcdH1cbi1cdFx0aWYgKGJ1Y2tldCBcdTAwMjZcdTAwMjYgIShmbGFncyBcdTAwMjYgQlBGX0ZfUkVVU0VfU1RBQ0tJRCkpIHtcbiYjNDM7XHRcdGlmIChzdGFja2lkLVx1MDAzZWJ1Y2tldCBcdTAwMjZcdTAwMjYgIShmbGFncyBcdTAwMjYgQlBGX0ZfUkVVU0VfU1RBQ0tJRCkpIHtcbiBcdFx0XHRwY3B1X2ZyZWVsaXN0X3B1c2goXHUwMDI2c21hcC1cdTAwM2VmcmVlbGlzdCwgXHUwMDI2bmV3X2J1Y2tldC1cdTAwM2Vmbm9kZSk7XG4gXHRcdFx0cmV0dXJuIC1FRVhJU1Q7XG4gXHRcdH1cbi1cdH0gZWxzZSB7XG4tXHRcdGlmIChoYXNoX21hdGNoZXMgXHUwMDI2XHUwMDI2IGJ1Y2tldC1cdTAwM2VuciA9PSB0cmFjZV9uciBcdTAwMjZcdTAwMjZcbi1cdFx0ICAgIG1lbWNtcChidWNrZXQtXHUwMDNlZGF0YSwgaXBzLCB0cmFjZV9sZW4pID09IDApXG4tXHRcdFx0cmV0dXJuIGlkO1xuLVx0XHRpZiAoYnVja2V0IFx1MDAyNlx1MDAyNiAhKGZsYWdzIFx1MDAyNiBCUEZfRl9SRVVTRV9TVEFDS0lEKSlcbi1cdFx0XHRyZXR1cm4gLUVFWElTVDtcbi1cbi1cdFx0bmV3X2J1Y2tldCA9IChzdHJ1Y3Qgc3RhY2tfbWFwX2J1Y2tldCAqKVxuLVx0XHRcdHBjcHVfZnJlZWxpc3RfcG9wKFx1MDAyNnNtYXAtXHUwMDNlZnJlZWxpc3QpO1xuLVx0XHRpZiAodW5saWtlbHkoIW5ld19idWNrZXQpKVxuLVx0XHRcdHJldHVybiAtRU5PTUVNO1xuLVx0XHRtZW1jcHkobmV3X2J1Y2tldC1cdTAwM2VkYXRhLCBpcHMsIHRyYWNlX2xlbik7XG4gXHR9XG4gXG4tXHRuZXdfYnVja2V0LVx1MDAzZWhhc2ggPSBoYXNoO1xuLVx0bmV3X2J1Y2tldC1cdTAwM2VuciA9IHRyYWNlX25yO1xuLVxuLVx0b2xkX2J1Y2tldCA9IHhjaGcoXHUwMDI2c21hcC1cdTAwM2VidWNrZXRzW2lkXSwgbmV3X2J1Y2tldCk7XG4mIzQzO1x0b2xkX2J1Y2tldCA9IHhjaGcoXHUwMDI2c21hcC1cdTAwM2VidWNrZXRzW3N0YWNraWQtXHUwMDNlaWRdLCBuZXdfYnVja2V0KTtcbiBcdGlmIChvbGRfYnVja2V0KVxuIFx0XHRwY3B1X2ZyZWVsaXN0X3B1c2goXHUwMDI2c21hcC1cdTAwM2VmcmVlbGlzdCwgXHUwMDI2b2xkX2J1Y2tldC1cdTAwM2Vmbm9kZSk7XG4tXHRyZXR1cm4gaWQ7XG4mIzQzO1x0cmV0dXJuIHN0YWNraWQtXHUwMDNlaWQ7XG4gfVxuIFxuIEJQRl9DQUxMXzMoYnBmX2dldF9zdGFja2lkLCBzdHJ1Y3QgcHRfcmVncyAqLCByZWdzLCBzdHJ1Y3QgYnBmX21hcCAqLCBtYXAsXG5AQCAtNTgzLDggJiM0Mzs2MjEsMTEgQEAgQlBGX0NBTExfMyhicGZfZ2V0X3N0YWNraWQsIHN0cnVjdCBwdF9yZWdzICosIHJlZ3MsIHN0cnVjdCBicGZfbWFwICosIG1hcCxcbiB7XG4gXHR1MzIgZWxlbV9zaXplID0gc3RhY2tfbWFwX2RhdGFfc2l6ZShtYXApO1xuIFx0Ym9vbCB1c2VyID0gZmxhZ3MgXHUwMDI2IEJQRl9GX1VTRVJfU1RBQ0s7XG4mIzQzO1x0c3RydWN0IHN0YWNrX21hcF9idWNrZXQgKm5ld19idWNrZXQ7XG4gXHRzdHJ1Y3QgcGVyZl9jYWxsY2hhaW5fZW50cnkgKnRyYWNlO1xuJiM0MztcdHN0cnVjdCBzdGFja2lkIHN0YWNraWQ7XG4gXHRib29sIGtlcm5lbCA9ICF1c2VyO1xuJiM0MztcdGludCBlcnIgPSAtRUZBVUxUO1xuIFx0dTMyIG1heF9kZXB0aDtcbiBcbiBcdGlmICh1bmxpa2VseShmbGFncyBcdTAwMjYgfihCUEZfRl9TS0lQX0ZJRUxEX01BU0sgfCBCUEZfRl9VU0VSX1NUQUNLIHxcbkBAIC01OTIsMTQgJiM0Mzs2MzMsMjkgQEAgQlBGX0NBTExfMyhicGZfZ2V0X3N0YWNraWQsIHN0cnVjdCBwdF9yZWdzICosIHJlZ3MsIHN0cnVjdCBicGZfbWFwICosIG1hcCxcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4gXHRtYXhfZGVwdGggPSBzdGFja19tYXBfY2FsY3VsYXRlX21heF9kZXB0aChtYXAtXHUwMDNldmFsdWVfc2l6ZSwgZWxlbV9zaXplLCBmbGFncyk7XG4mIzQzO1xuJiM0MztcdHByZWVtcHRfZGlzYWJsZSgpO1xuIFx0dHJhY2UgPSBnZXRfcGVyZl9jYWxsY2hhaW4ocmVncywga2VybmVsLCB1c2VyLCBtYXhfZGVwdGgsXG4gXHRcdFx0XHQgICBmYWxzZSwgZmFsc2UsIDApO1xuIFxuIFx0aWYgKHVubGlrZWx5KCF0cmFjZSkpXG4gXHRcdC8qIGNvdWxkbiYjMzk7dCBmZXRjaCB0aGUgc3RhY2sgdHJhY2UgKi9cbi1cdFx0cmV0dXJuIC1FRkFVTFQ7XG4mIzQzO1x0XHRnb3RvIG91dDtcbiYjNDM7XG4mIzQzO1x0ZXJyID0gc3RhY2tpZF9mYXN0cGF0aChcdTAwMjZzdGFja2lkLCBtYXAsIHRyYWNlLCBmbGFncyk7XG4mIzQzO1x0aWYgKGVyciAhPSAtRU5PRU5UKVxuJiM0MztcdFx0Z290byBvdXQ7XG4mIzQzO1xuJiM0MztcdG5ld19idWNrZXQgPSBzdGFja2lkX25ld19idWNrZXQoXHUwMDI2c3RhY2tpZCwgbWFwLCB0cmFjZSwgZmxhZ3MpO1xuJiM0MztcdGlmIChuZXdfYnVja2V0KSB7XG4mIzQzO1x0XHRwcmVlbXB0X2VuYWJsZSgpO1xuJiM0MztcdFx0cmV0dXJuIHN0YWNraWRfaW5zdGFsbChcdTAwMjZzdGFja2lkLCBtYXAsIG5ld19idWNrZXQsIGZsYWdzKTtcbiYjNDM7XHR9XG4mIzQzO1x0ZXJyID0gLUVOT01FTTtcbiBcbi1cdHJldHVybiBfX2JwZl9nZXRfc3RhY2tpZChtYXAsIHRyYWNlLCBmbGFncyk7XG4mIzQzO291dDpcbiYjNDM7XHRwcmVlbXB0X2VuYWJsZSgpO1xuJiM0MztcdHJldHVybiBlcnI7XG4gfVxuIFxuIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfZ2V0X3N0YWNraWRfcHJvdG8gPSB7XG5AQCAtNjI3LDcgJiM0Mzs2ODMsOSBAQCBCUEZfQ0FMTF8zKGJwZl9nZXRfc3RhY2tpZF9wZSwgc3RydWN0IGJwZl9wZXJmX2V2ZW50X2RhdGFfa2VybiAqLCBjdHgsXG4gXHQgICBzdHJ1Y3QgYnBmX21hcCAqLCBtYXAsIHU2NCwgZmxhZ3MpXG4ge1xuIFx0c3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50ID0gY3R4LVx1MDAzZWV2ZW50O1xuJiM0MztcdHN0cnVjdCBzdGFja19tYXBfYnVja2V0ICpuZXdfYnVja2V0O1xuIFx0c3RydWN0IHBlcmZfY2FsbGNoYWluX2VudHJ5ICp0cmFjZTtcbiYjNDM7XHRzdHJ1Y3Qgc3RhY2tpZCBzdGFja2lkO1xuIFx0Ym9vbCBrZXJuZWwsIHVzZXI7XG4gXHRfX3U2NCBucl9rZXJuZWw7XG4gXHRpbnQgcmV0O1xuQEAgLTY1Myw3ICYjNDM7NzExLDYgQEAgQlBGX0NBTExfMyhicGZfZ2V0X3N0YWNraWRfcGUsIHN0cnVjdCBicGZfcGVyZl9ldmVudF9kYXRhX2tlcm4gKiwgY3R4LFxuIFxuIFx0aWYgKGtlcm5lbCkge1xuIFx0XHR0cmFjZS1cdTAwM2VuciA9IG5yX2tlcm5lbDtcbi1cdFx0cmV0ID0gX19icGZfZ2V0X3N0YWNraWQobWFwLCB0cmFjZSwgZmxhZ3MpO1xuIFx0fSBlbHNlIHsgLyogdXNlciAqL1xuIFx0XHR1NjQgc2tpcCA9IGZsYWdzIFx1MDAyNiBCUEZfRl9TS0lQX0ZJRUxEX01BU0s7XG4gXG5AQCAtNjYyLDEyICYjNDM7NzE5LDIyIEBAIEJQRl9DQUxMXzMoYnBmX2dldF9zdGFja2lkX3BlLCBzdHJ1Y3QgYnBmX3BlcmZfZXZlbnRfZGF0YV9rZXJuICosIGN0eCxcbiBcdFx0XHRyZXR1cm4gLUVGQVVMVDtcbiBcbiBcdFx0ZmxhZ3MgPSAoZmxhZ3MgXHUwMDI2IH5CUEZfRl9TS0lQX0ZJRUxEX01BU0spIHwgc2tpcDtcbi1cdFx0cmV0ID0gX19icGZfZ2V0X3N0YWNraWQobWFwLCB0cmFjZSwgZmxhZ3MpO1xuIFx0fVxuIFxuJiM0MztcdHJldCA9IHN0YWNraWRfZmFzdHBhdGgoXHUwMDI2c3RhY2tpZCwgbWFwLCB0cmFjZSwgZmxhZ3MpO1xuJiM0MztcdGlmIChyZXQgIT0gLUVOT0VOVClcbiYjNDM7XHRcdGdvdG8gZXJyb3I7XG4mIzQzO1xuJiM0MztcdG5ld19idWNrZXQgPSBzdGFja2lkX25ld19idWNrZXQoXHUwMDI2c3RhY2tpZCwgbWFwLCB0cmFjZSwgZmxhZ3MpO1xuJiM0MztcdGlmIChuZXdfYnVja2V0KSB7XG4mIzQzO1x0XHR0cmFjZS1cdTAwM2VuciA9IG5yO1xuJiM0MztcdFx0cmV0dXJuIHN0YWNraWRfaW5zdGFsbChcdTAwMjZzdGFja2lkLCBtYXAsIG5ld19idWNrZXQsIGZsYWdzKTtcbiYjNDM7XHR9XG4mIzQzO1x0cmV0ID0gLUVOT01FTTtcbiYjNDM7XG4mIzQzO2Vycm9yOlxuIFx0LyogcmVzdG9yZSBuciAqL1xuIFx0dHJhY2UtXHUwMDNlbnIgPSBucjtcbi1cbiBcdHJldHVybiByZXQ7XG4gfVxuIFxuQEAgLTY4MCwxOSAmIzQzOzc0Nyw1MyBAQCBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX2dldF9zdGFja2lkX3Byb3RvX3BlID0ge1xuIFx0LmFyZzNfdHlwZVx0PSBBUkdfQU5ZVEhJTkcsXG4gfTtcbiBcbiYjNDM7c3RhdGljIHUzMiBjYWxsY2hhaW5fc3RvcmUoc3RydWN0IHBlcmZfY2FsbGNoYWluX2VudHJ5ICp0cmFjZSwgdm9pZCAqYnVmLCB1MzIgc2l6ZSxcbiYjNDM7XHRcdFx0ICAgdTMyIGVsZW1fc2l6ZSwgdTY0IGZsYWdzKVxuJiM0Mzt7XG4mIzQzO1x0Ym9vbCB1c2VyX2J1aWxkX2lkID0gZmxhZ3MgXHUwMDI2IEJQRl9GX1VTRVJfQlVJTERfSUQ7XG4mIzQzO1x0dTMyIHNraXAgPSBmbGFncyBcdTAwMjYgQlBGX0ZfU0tJUF9GSUVMRF9NQVNLO1xuJiM0MztcdHUzMiB0cmFjZV9uciwgY29weV9sZW47XG4mIzQzO1x0dTY0ICppcHM7XG4mIzQzO1xuJiM0MztcdHRyYWNlX25yID0gdHJhY2UtXHUwMDNlbnIgLSBza2lwO1xuJiM0MztcdGNvcHlfbGVuID0gdHJhY2VfbnIgKiBlbGVtX3NpemU7XG4mIzQzO1xuJiM0MztcdGlwcyA9IHRyYWNlLVx1MDAzZWlwICYjNDM7IHNraXA7XG4mIzQzO1x0aWYgKHVzZXJfYnVpbGRfaWQpIHtcbiYjNDM7XHRcdHN0cnVjdCBicGZfc3RhY2tfYnVpbGRfaWQgKmlkX29mZnMgPSBidWY7XG4mIzQzO1xuJiM0MztcdFx0Zm9yICh1MzIgaSA9IDA7IGkgXHUwMDNjIHRyYWNlX25yOyBpJiM0MzsmIzQzOylcbiYjNDM7XHRcdFx0aWRfb2Zmc1tpXS5pcCA9IGlwc1tpXTtcbiYjNDM7XHR9IGVsc2Uge1xuJiM0MztcdFx0bWVtY3B5KGJ1ZiwgaXBzLCBjb3B5X2xlbik7XG4mIzQzO1x0fVxuJiM0MztcdHJldHVybiB0cmFjZV9ucjtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGxvbmcgY2FsbGNoYWluX2ZpbmFsaXplKHZvaWQgKmJ1ZiwgdTMyIHNpemUsIHUzMiB0cmFjZV9uciwgdTMyIGVsZW1fc2l6ZSxcbiYjNDM7XHRcdFx0ICAgICAgIGJvb2wgdXNlcl9idWlsZF9pZCwgYm9vbCB1c2VyLCBib29sIG1heV9mYXVsdClcbiYjNDM7e1xuJiM0MztcdHUzMiBjb3B5X2xlbiA9IHRyYWNlX25yICogZWxlbV9zaXplO1xuJiM0MztcbiYjNDM7XHRpZiAodXNlcl9idWlsZF9pZClcbiYjNDM7XHRcdHN0YWNrX21hcF9nZXRfYnVpbGRfaWRfb2Zmc2V0KGJ1ZiwgdHJhY2VfbnIsIHVzZXIsIG1heV9mYXVsdCk7XG4mIzQzO1xuJiM0MztcdGlmIChzaXplIFx1MDAzZSBjb3B5X2xlbilcbiYjNDM7XHRcdG1lbXNldChidWYgJiM0MzsgY29weV9sZW4sIDAsIHNpemUgLSBjb3B5X2xlbik7XG4mIzQzO1x0cmV0dXJuIGNvcHlfbGVuO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBsb25nIF9fYnBmX2dldF9zdGFjayhzdHJ1Y3QgcHRfcmVncyAqcmVncywgc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLFxuLVx0XHRcdCAgICBzdHJ1Y3QgcGVyZl9jYWxsY2hhaW5fZW50cnkgKnRyYWNlX2luLFxuIFx0XHRcdCAgICB2b2lkICpidWYsIHUzMiBzaXplLCB1NjQgZmxhZ3MsIGJvb2wgbWF5X2ZhdWx0KVxuIHtcbi1cdHUzMiB0cmFjZV9uciwgY29weV9sZW4sIGVsZW1fc2l6ZSwgbWF4X2RlcHRoO1xuIFx0Ym9vbCB1c2VyX2J1aWxkX2lkID0gZmxhZ3MgXHUwMDI2IEJQRl9GX1VTRVJfQlVJTERfSUQ7XG4gXHRib29sIGNyb3NzdGFzayA9IHRhc2sgXHUwMDI2XHUwMDI2IHRhc2sgIT0gY3VycmVudDtcbiBcdHUzMiBza2lwID0gZmxhZ3MgXHUwMDI2IEJQRl9GX1NLSVBfRklFTERfTUFTSztcbiBcdGJvb2wgdXNlciA9IGZsYWdzIFx1MDAyNiBCUEZfRl9VU0VSX1NUQUNLO1xuIFx0c3RydWN0IHBlcmZfY2FsbGNoYWluX2VudHJ5ICp0cmFjZTtcbiYjNDM7XHR1MzIgdHJhY2VfbnIsIGVsZW1fc2l6ZSwgbWF4X2RlcHRoO1xuIFx0Ym9vbCBrZXJuZWwgPSAhdXNlcjtcbiBcdGludCBlcnIgPSAtRUlOVkFMO1xuLVx0dTY0ICppcHM7XG4gXG4gXHRpZiAodW5saWtlbHkoZmxhZ3MgXHUwMDI2IH4oQlBGX0ZfU0tJUF9GSUVMRF9NQVNLIHwgQlBGX0ZfVVNFUl9TVEFDSyB8XG4gXHRcdFx0ICAgICAgIEJQRl9GX1VTRVJfQlVJTERfSUQpKSlcbkBAIC03MTgsMTMgJiM0Mzs4MTksOSBAQCBzdGF0aWMgbG9uZyBfX2JwZl9nZXRfc3RhY2soc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzayxcbiBcbiBcdG1heF9kZXB0aCA9IHN0YWNrX21hcF9jYWxjdWxhdGVfbWF4X2RlcHRoKHNpemUsIGVsZW1fc2l6ZSwgZmxhZ3MpO1xuIFxuLVx0aWYgKG1heV9mYXVsdClcbi1cdFx0cmN1X3JlYWRfbG9jaygpOyAvKiBuZWVkIFJDVSBmb3IgcGVyZiYjMzk7cyBjYWxsY2hhaW4gYmVsb3cgKi9cbiYjNDM7XHRwcmVlbXB0X2Rpc2FibGUoKTtcbiBcbi1cdGlmICh0cmFjZV9pbikge1xuLVx0XHR0cmFjZSA9IHRyYWNlX2luO1xuLVx0XHR0cmFjZS1cdTAwM2VuciA9IG1pbl90KHUzMiwgdHJhY2UtXHUwMDNlbnIsIG1heF9kZXB0aCk7XG4tXHR9IGVsc2UgaWYgKGtlcm5lbCBcdTAwMjZcdTAwMjYgdGFzaykge1xuJiM0MztcdGlmIChrZXJuZWwgXHUwMDI2XHUwMDI2IHRhc2spIHtcbiBcdFx0dHJhY2UgPSBnZXRfY2FsbGNoYWluX2VudHJ5X2Zvcl90YXNrKHRhc2ssIG1heF9kZXB0aCk7XG4gXHR9IGVsc2Uge1xuIFx0XHR0cmFjZSA9IGdldF9wZXJmX2NhbGxjaGFpbihyZWdzLCBrZXJuZWwsIHVzZXIsIG1heF9kZXB0aCxcbkBAIC03MzIsMzUgJiM0Mzs4MjksMTYgQEAgc3RhdGljIGxvbmcgX19icGZfZ2V0X3N0YWNrKHN0cnVjdCBwdF9yZWdzICpyZWdzLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssXG4gXHR9XG4gXG4gXHRpZiAodW5saWtlbHkoIXRyYWNlKSB8fCB0cmFjZS1cdTAwM2VuciBcdTAwM2Mgc2tpcCkge1xuLVx0XHRpZiAobWF5X2ZhdWx0KVxuLVx0XHRcdHJjdV9yZWFkX3VubG9jaygpO1xuJiM0MztcdFx0cHJlZW1wdF9lbmFibGUoKTtcbiBcdFx0Z290byBlcnJfZmF1bHQ7XG4gXHR9XG4gXG4tXHR0cmFjZV9uciA9IHRyYWNlLVx1MDAzZW5yIC0gc2tpcDtcbi1cdGNvcHlfbGVuID0gdHJhY2VfbnIgKiBlbGVtX3NpemU7XG4tXG4tXHRpcHMgPSB0cmFjZS1cdTAwM2VpcCAmIzQzOyBza2lwO1xuLVx0aWYgKHVzZXJfYnVpbGRfaWQpIHtcbi1cdFx0c3RydWN0IGJwZl9zdGFja19idWlsZF9pZCAqaWRfb2ZmcyA9IGJ1Zjtcbi1cdFx0dTMyIGk7XG4tXG4tXHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHRyYWNlX25yOyBpJiM0MzsmIzQzOylcbi1cdFx0XHRpZF9vZmZzW2ldLmlwID0gaXBzW2ldO1xuLVx0fSBlbHNlIHtcbi1cdFx0bWVtY3B5KGJ1ZiwgaXBzLCBjb3B5X2xlbik7XG4tXHR9XG4tXG4tXHQvKiB0cmFjZS9pcHMgc2hvdWxkIG5vdCBiZSBkZXJlZmVyZW5jZWQgYWZ0ZXIgdGhpcyBwb2ludCAqL1xuLVx0aWYgKG1heV9mYXVsdClcbi1cdFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4mIzQzO1x0dHJhY2VfbnIgPSBjYWxsY2hhaW5fc3RvcmUodHJhY2UsIGJ1Ziwgc2l6ZSwgZWxlbV9zaXplLCBmbGFncyk7XG4gXG4tXHRpZiAodXNlcl9idWlsZF9pZClcbi1cdFx0c3RhY2tfbWFwX2dldF9idWlsZF9pZF9vZmZzZXQoYnVmLCB0cmFjZV9uciwgdXNlciwgbWF5X2ZhdWx0KTtcbiYjNDM7XHQvKiB0cmFjZSBzaG91bGQgbm90IGJlIGRlcmVmZXJlbmNlZCBhZnRlciB0aGlzIHBvaW50ICovXG4mIzQzO1x0cHJlZW1wdF9lbmFibGUoKTtcbiBcbi1cdGlmIChzaXplIFx1MDAzZSBjb3B5X2xlbilcbi1cdFx0bWVtc2V0KGJ1ZiAmIzQzOyBjb3B5X2xlbiwgMCwgc2l6ZSAtIGNvcHlfbGVuKTtcbi1cdHJldHVybiBjb3B5X2xlbjtcbiYjNDM7XHRyZXR1cm4gY2FsbGNoYWluX2ZpbmFsaXplKGJ1Ziwgc2l6ZSwgdHJhY2VfbnIsIGVsZW1fc2l6ZSwgdXNlcl9idWlsZF9pZCwgdXNlciwgbWF5X2ZhdWx0KTtcbiBcbiBlcnJfZmF1bHQ6XG4gXHRlcnIgPSAtRUZBVUxUO1xuQEAgLTc3Miw3ICYjNDM7ODUwLDcgQEAgc3RhdGljIGxvbmcgX19icGZfZ2V0X3N0YWNrKHN0cnVjdCBwdF9yZWdzICpyZWdzLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssXG4gQlBGX0NBTExfNChicGZfZ2V0X3N0YWNrLCBzdHJ1Y3QgcHRfcmVncyAqLCByZWdzLCB2b2lkICosIGJ1ZiwgdTMyLCBzaXplLFxuIFx0ICAgdTY0LCBmbGFncylcbiB7XG4tXHRyZXR1cm4gX19icGZfZ2V0X3N0YWNrKHJlZ3MsIE5VTEwsIE5VTEwsIGJ1Ziwgc2l6ZSwgZmxhZ3MsIGZhbHNlIC8qICFtYXlfZmF1bHQgKi8pO1xuJiM0MztcdHJldHVybiBfX2JwZl9nZXRfc3RhY2socmVncywgTlVMTCwgYnVmLCBzaXplLCBmbGFncywgZmFsc2UgLyogIW1heV9mYXVsdCAqLyk7XG4gfVxuIFxuIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfZ2V0X3N0YWNrX3Byb3RvID0ge1xuQEAgLTc4OCw3ICYjNDM7ODY2LDcgQEAgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9nZXRfc3RhY2tfcHJvdG8gPSB7XG4gQlBGX0NBTExfNChicGZfZ2V0X3N0YWNrX3NsZWVwYWJsZSwgc3RydWN0IHB0X3JlZ3MgKiwgcmVncywgdm9pZCAqLCBidWYsIHUzMiwgc2l6ZSxcbiBcdCAgIHU2NCwgZmxhZ3MpXG4ge1xuLVx0cmV0dXJuIF9fYnBmX2dldF9zdGFjayhyZWdzLCBOVUxMLCBOVUxMLCBidWYsIHNpemUsIGZsYWdzLCB0cnVlIC8qIG1heV9mYXVsdCAqLyk7XG4mIzQzO1x0cmV0dXJuIF9fYnBmX2dldF9zdGFjayhyZWdzLCBOVUxMLCBidWYsIHNpemUsIGZsYWdzLCB0cnVlIC8qIG1heV9mYXVsdCAqLyk7XG4gfVxuIFxuIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfZ2V0X3N0YWNrX3NsZWVwYWJsZV9wcm90byA9IHtcbkBAIC04MTIsNyAmIzQzOzg5MCw3IEBAIHN0YXRpYyBsb25nIF9fYnBmX2dldF90YXNrX3N0YWNrKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywgdm9pZCAqYnVmLCB1MzIgc2l6ZSxcbiBcbiBcdHJlZ3MgPSB0YXNrX3B0X3JlZ3ModGFzayk7XG4gXHRpZiAocmVncylcbi1cdFx0cmVzID0gX19icGZfZ2V0X3N0YWNrKHJlZ3MsIHRhc2ssIE5VTEwsIGJ1Ziwgc2l6ZSwgZmxhZ3MsIG1heV9mYXVsdCk7XG4mIzQzO1x0XHRyZXMgPSBfX2JwZl9nZXRfc3RhY2socmVncywgdGFzaywgYnVmLCBzaXplLCBmbGFncywgbWF5X2ZhdWx0KTtcbiBcdHB1dF90YXNrX3N0YWNrKHRhc2spO1xuIFxuIFx0cmV0dXJuIHJlcztcbkBAIC04NTIsNiAmIzQzOzkzMCwzMyBAQCBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX2dldF90YXNrX3N0YWNrX3NsZWVwYWJsZV9wcm90byA9IHtcbiBcdC5hcmc0X3R5cGVcdD0gQVJHX0FOWVRISU5HLFxuIH07XG4gXG4mIzQzO3N0YXRpYyBpbnQgX19icGZfZ2V0X3N0YWNrX3BlKHN0cnVjdCBwZXJmX2NhbGxjaGFpbl9lbnRyeSAqdHJhY2UsIHZvaWQgKmJ1ZiwgdTMyIHNpemUsXG4mIzQzO1x0XHRcdCAgICAgIHU2NCBmbGFncylcbiYjNDM7e1xuJiM0MztcdGJvb2wgdXNlcl9idWlsZF9pZCA9IGZsYWdzIFx1MDAyNiBCUEZfRl9VU0VSX0JVSUxEX0lEO1xuJiM0MztcdHU2NCBza2lwID0gZmxhZ3MgXHUwMDI2IEJQRl9GX1NLSVBfRklFTERfTUFTSztcbiYjNDM7XHRib29sIHVzZXIgPSBmbGFncyBcdTAwMjYgQlBGX0ZfVVNFUl9TVEFDSztcbiYjNDM7XHR1MzIgZWxlbV9zaXplLCBtYXhfZGVwdGgsIG5yX3RyYWNlO1xuJiM0MztcdGJvb2wga2VybmVsID0gIXVzZXI7XG4mIzQzO1xuJiM0MztcdGlmIChrZXJuZWwgXHUwMDI2XHUwMDI2IHVzZXJfYnVpbGRfaWQpXG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XG4mIzQzO1x0ZWxlbV9zaXplID0gdXNlcl9idWlsZF9pZCA/IHNpemVvZihzdHJ1Y3QgYnBmX3N0YWNrX2J1aWxkX2lkKSA6IHNpemVvZih1NjQpO1xuJiM0MztcdGlmICh1bmxpa2VseShzaXplICUgZWxlbV9zaXplKSlcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcbiYjNDM7XHRtYXhfZGVwdGggPSBzdGFja19tYXBfY2FsY3VsYXRlX21heF9kZXB0aChzaXplLCBlbGVtX3NpemUsIGZsYWdzKTtcbiYjNDM7XHR0cmFjZS1cdTAwM2VuciA9IG1pbl90KHUzMiwgdHJhY2UtXHUwMDNlbnIsIG1heF9kZXB0aCk7XG4mIzQzO1xuJiM0MztcdGlmICh0cmFjZS1cdTAwM2VuciBcdTAwM2Mgc2tpcClcbiYjNDM7XHRcdHJldHVybiAtRUZBVUxUO1xuJiM0MztcbiYjNDM7XHRucl90cmFjZSA9IGNhbGxjaGFpbl9zdG9yZSh0cmFjZSwgYnVmLCBzaXplLCBlbGVtX3NpemUsIGZsYWdzKTtcbiYjNDM7XHRyZXR1cm4gY2FsbGNoYWluX2ZpbmFsaXplKGJ1Ziwgc2l6ZSwgbnJfdHJhY2UsIGVsZW1fc2l6ZSwgdXNlcl9idWlsZF9pZCxcbiYjNDM7XHRcdFx0XHQgIHVzZXIsIGZhbHNlIC8qICFtYXlfZmF1bHQgKi8pO1xuJiM0Mzt9XG4mIzQzO1xuIEJQRl9DQUxMXzQoYnBmX2dldF9zdGFja19wZSwgc3RydWN0IGJwZl9wZXJmX2V2ZW50X2RhdGFfa2VybiAqLCBjdHgsXG4gXHQgICB2b2lkICosIGJ1ZiwgdTMyLCBzaXplLCB1NjQsIGZsYWdzKVxuIHtcbkBAIC04NjMsNyAmIzQzOzk2OCw3IEBAIEJQRl9DQUxMXzQoYnBmX2dldF9zdGFja19wZSwgc3RydWN0IGJwZl9wZXJmX2V2ZW50X2RhdGFfa2VybiAqLCBjdHgsXG4gXHRfX3U2NCBucl9rZXJuZWw7XG4gXG4gXHRpZiAoIShldmVudC1cdTAwM2VhdHRyLnNhbXBsZV90eXBlIFx1MDAyNiBQRVJGX1NBTVBMRV9DQUxMQ0hBSU4pKVxuLVx0XHRyZXR1cm4gX19icGZfZ2V0X3N0YWNrKHJlZ3MsIE5VTEwsIE5VTEwsIGJ1Ziwgc2l6ZSwgZmxhZ3MsIGZhbHNlIC8qICFtYXlfZmF1bHQgKi8pO1xuJiM0MztcdFx0cmV0dXJuIF9fYnBmX2dldF9zdGFjayhyZWdzLCBOVUxMLCBidWYsIHNpemUsIGZsYWdzLCBmYWxzZSAvKiAhbWF5X2ZhdWx0ICovKTtcbiBcbiBcdGlmICh1bmxpa2VseShmbGFncyBcdTAwMjYgfihCUEZfRl9TS0lQX0ZJRUxEX01BU0sgfCBCUEZfRl9VU0VSX1NUQUNLIHxcbiBcdFx0XHQgICAgICAgQlBGX0ZfVVNFUl9CVUlMRF9JRCkpKVxuQEAgLTg4Myw3ICYjNDM7OTg4LDcgQEAgQlBGX0NBTExfNChicGZfZ2V0X3N0YWNrX3BlLCBzdHJ1Y3QgYnBmX3BlcmZfZXZlbnRfZGF0YV9rZXJuICosIGN0eCxcbiBcdFx0X191NjQgbnIgPSB0cmFjZS1cdTAwM2VucjtcbiBcbiBcdFx0dHJhY2UtXHUwMDNlbnIgPSBucl9rZXJuZWw7XG4tXHRcdGVyciA9IF9fYnBmX2dldF9zdGFjayhyZWdzLCBOVUxMLCB0cmFjZSwgYnVmLCBzaXplLCBmbGFncywgZmFsc2UgLyogIW1heV9mYXVsdCAqLyk7XG4mIzQzO1x0XHRlcnIgPSBfX2JwZl9nZXRfc3RhY2tfcGUodHJhY2UsIGJ1Ziwgc2l6ZSwgZmxhZ3MpO1xuIFxuIFx0XHQvKiByZXN0b3JlIG5yICovXG4gXHRcdHRyYWNlLVx1MDAzZW5yID0gbnI7XG5AQCAtODkzLDE0ICYjNDM7OTk4LDEzIEBAIEJQRl9DQUxMXzQoYnBmX2dldF9zdGFja19wZSwgc3RydWN0IGJwZl9wZXJmX2V2ZW50X2RhdGFfa2VybiAqLCBjdHgsXG4gXHRcdHNraXAgJiM0Mzs9IG5yX2tlcm5lbDtcbiBcdFx0aWYgKHNraXAgXHUwMDNlIEJQRl9GX1NLSVBfRklFTERfTUFTSylcbiBcdFx0XHRnb3RvIGNsZWFyO1xuLVxuIFx0XHRmbGFncyA9IChmbGFncyBcdTAwMjYgfkJQRl9GX1NLSVBfRklFTERfTUFTSykgfCBza2lwO1xuLVx0XHRlcnIgPSBfX2JwZl9nZXRfc3RhY2socmVncywgTlVMTCwgdHJhY2UsIGJ1Ziwgc2l6ZSwgZmxhZ3MsIGZhbHNlIC8qICFtYXlfZmF1bHQgKi8pO1xuJiM0MztcdFx0ZXJyID0gX19icGZfZ2V0X3N0YWNrX3BlKHRyYWNlLCBidWYsIHNpemUsIGZsYWdzKTtcbiBcdH1cbi1cdHJldHVybiBlcnI7XG4gXG4gY2xlYXI6XG4tXHRtZW1zZXQoYnVmLCAwLCBzaXplKTtcbiYjNDM7XHRpZiAoZXJyIFx1MDAzYyAwKVxuJiM0MztcdFx0bWVtc2V0KGJ1ZiwgMCwgc2l6ZSk7XG4gXHRyZXR1cm4gZXJyO1xuIFxuIH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMCAxMDo0OTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCUEZfU1lTQ0FMTCYjMzQ7LAogICAgJiMzNDtQRVJGX0VWRU5UUyYjMzQ7LAogICAgJiMzNDtCUEZfRVZFTlRTJiMzNDssCiAgICAmIzM0O1NUQUNLVFJBQ0UmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDticGZfZ2V0X3N0YWNraWQmIzM0OywKICAgICYjMzQ7YnBmX2dldF9zdGFja2lkX3BlJiMzNDssCiAgICAmIzM0O2JwZl9nZXRfc3RhY2smIzM0OywKICAgICYjMzQ7YnBmX2dldF9zdGFja19zbGVlcGFibGUmIzM0OywKICAgICYjMzQ7YnBmX2dldF90YXNrX3N0YWNrJiMzNDssCiAgICAmIzM0O2JwZl9nZXRfdGFza19zdGFja19zbGVlcGFibGUmIzM0OywKICAgICYjMzQ7YnBmX2dldF9zdGFja19wZSYjMzQ7LAogICAgJiMzNDtzdGFja2lkX2Zhc3RwYXRoJiMzNDssCiAgICAmIzM0O3N0YWNraWRfbmV3X2J1Y2tldCYjMzQ7LAogICAgJiMzNDtzdGFja2lkX2luc3RhbGwmIzM0OywKICAgICYjMzQ7Y2FsbGNoYWluX3N0b3JlJiMzNDssCiAgICAmIzM0O2NhbGxjaGFpbl9maW5hbGl6ZSYjMzQ7LAogICAgJiMzNDtfX2JwZl9nZXRfc3RhY2smIzM0OywKICAgICYjMzQ7X19icGZfZ2V0X3N0YWNrX3BlJiMzNDssCiAgICAmIzM0O19fYnBmX2dldF90YXNrX3N0YWNrJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgQlBGIHN0YWNrbWFwIGFuZCBzdGFja2lkIGhlbHBlciBmdW5jdGlvbnMsIGludHJvZHVjaW5nIG5ldyBpbnRlcm5hbCBoZWxwZXIgZnVuY3Rpb25zIGxpa2UgYHN0YWNraWRfZmFzdHBhdGhgLCBgc3RhY2tpZF9uZXdfYnVja2V0YCwgYHN0YWNraWRfaW5zdGFsbGAsIGBjYWxsY2hhaW5fc3RvcmVgLCBhbmQgYGNhbGxjaGFpbl9maW5hbGl6ZWAuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBCUEYgc3Vic3lzdGVtIHRoYXQgaGFuZGxlcyBzdGFjayB0cmFjZXMgYW5kIHBlcmYgZXZlbnQgY2FsbGNoYWlucy4gSXQgaXMgaW1wb3J0YW50IHRvIGZ1enogdGhlc2UgY2hhbmdlcyB0byBlbnN1cmUgbm8gcmVncmVzc2lvbnMsIG1lbW9yeSBsZWFrcywgb3IgY29uY3VycmVuY3kgaXNzdWVzIGFyZSBpbnRyb2R1Y2VkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdAogICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksCiAgIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBjYWU5NTRjOTVjZTcyYmE5MjkxODA3YmEzY2M1YWRjNmNhZWY5YTk4CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIE1vbiBKdWwgMjAgMTA6NDk6NTYgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL3N0YWNrbWFwLmMgYi9rZXJuZWwvYnBmL3N0YWNrbWFwLmMKaW5kZXggNDFmZTg3ZDczMDJmMjIuLjM3ZjhlNDYzMTliMzRmIDEwMDY0NAotLS0gYS9rZXJuZWwvYnBmL3N0YWNrbWFwLmMKJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2JwZi9zdGFja21hcC5jCkBAIC01MDQsNzggJiM0Mzs1MDQsMTE2IEBAIGdldF9jYWxsY2hhaW5fZW50cnlfZm9yX3Rhc2soc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLCB1MzIgbWF4X2RlcHRoKQogI2VuZGlmCiB9CiAKLXN0YXRpYyBsb25nIF9fYnBmX2dldF9zdGFja2lkKHN0cnVjdCBicGZfbWFwICptYXAsCi0JCQkgICAgICBzdHJ1Y3QgcGVyZl9jYWxsY2hhaW5fZW50cnkgKnRyYWNlLCB1NjQgZmxhZ3MpCiYjNDM7c3RydWN0IHN0YWNraWQgewomIzQzOwlzdHJ1Y3Qgc3RhY2tfbWFwX2J1Y2tldCAqYnVja2V0OwomIzQzOwl1NjQgKmlwczsKJiM0MzsJdTMyICBucjsKJiM0MzsJdTMyICBsZW47CiYjNDM7CXUzMiAgaGFzaDsKJiM0MzsJdTMyICBpZDsKJiM0MzsJYm9vbCBoYXNoX21hdGNoZXM7CiYjNDM7fTsKJiM0MzsKJiM0MztzdGF0aWMgaW50IHN0YWNraWRfaW5pdChzdHJ1Y3Qgc3RhY2tpZCAqc3RhY2tpZCwgc3RydWN0IGJwZl9tYXAgKm1hcCwKJiM0MzsJCQlzdHJ1Y3QgcGVyZl9jYWxsY2hhaW5fZW50cnkgKnRyYWNlLCB1NjQgZmxhZ3MpCiB7CiAJc3RydWN0IGJwZl9zdGFja19tYXAgKnNtYXAgPSBjb250YWluZXJfb2YobWFwLCBzdHJ1Y3QgYnBmX3N0YWNrX21hcCwgbWFwKTsKLQlzdHJ1Y3Qgc3RhY2tfbWFwX2J1Y2tldCAqYnVja2V0LCAqbmV3X2J1Y2tldCwgKm9sZF9idWNrZXQ7Ci0JdTMyIGhhc2gsIGlkLCB0cmFjZV9uciwgdHJhY2VfbGVuLCBpLCBtYXhfZGVwdGg7CiAJdTMyIHNraXAgPSBmbGFncyAmYW1wOyBCUEZfRl9TS0lQX0ZJRUxEX01BU0s7Ci0JYm9vbCB1c2VyID0gZmxhZ3MgJmFtcDsgQlBGX0ZfVVNFUl9TVEFDSzsKLQl1NjQgKmlwczsKLQlib29sIGhhc2hfbWF0Y2hlczsKJiM0MzsJdTMyIG1heF9kZXB0aDsKIAogCWlmICh0cmFjZS0mZ3Q7bnIgJmx0Oz0gc2tpcCkKIAkJLyogc2tpcHBpbmcgbW9yZSB0aGFuIHVzYWJsZSBzdGFjayB0cmFjZSAqLwogCQlyZXR1cm4gLUVGQVVMVDsKIAogCW1heF9kZXB0aCA9IHN0YWNrX21hcF9jYWxjdWxhdGVfbWF4X2RlcHRoKG1hcC0mZ3Q7dmFsdWVfc2l6ZSwgc3RhY2tfbWFwX2RhdGFfc2l6ZShtYXApLCBmbGFncyk7Ci0JdHJhY2VfbnIgPSBtaW5fdCh1MzIsIHRyYWNlLSZndDtuciAtIHNraXAsIG1heF9kZXB0aCAtIHNraXApOwotCXRyYWNlX2xlbiA9IHRyYWNlX25yICogc2l6ZW9mKHU2NCk7Ci0JaXBzID0gdHJhY2UtJmd0O2lwICYjNDM7IHNraXA7Ci0JaGFzaCA9IGpoYXNoMigodTMyICopaXBzLCB0cmFjZV9sZW4gLyBzaXplb2YodTMyKSwgMCk7Ci0JaWQgPSBoYXNoICZhbXA7IChzbWFwLSZndDtuX2J1Y2tldHMgLSAxKTsKLQlidWNrZXQgPSBSRUFEX09OQ0Uoc21hcC0mZ3Q7YnVja2V0c1tpZF0pOwomIzQzOwlzdGFja2lkLSZndDtuciA9IG1pbl90KHUzMiwgdHJhY2UtJmd0O25yIC0gc2tpcCwgbWF4X2RlcHRoIC0gc2tpcCk7CiYjNDM7CXN0YWNraWQtJmd0O2xlbiA9IHN0YWNraWQtJmd0O25yICogc2l6ZW9mKHU2NCk7CiYjNDM7CXN0YWNraWQtJmd0O2lwcyA9IHRyYWNlLSZndDtpcCAmIzQzOyBza2lwOwomIzQzOwlzdGFja2lkLSZndDtoYXNoID0gamhhc2gyKCh1MzIgKilzdGFja2lkLSZndDtpcHMsIHN0YWNraWQtJmd0O2xlbiAvIHNpemVvZih1MzIpLCAwKTsKJiM0MzsJc3RhY2tpZC0mZ3Q7aWQgPSBzdGFja2lkLSZndDtoYXNoICZhbXA7IChzbWFwLSZndDtuX2J1Y2tldHMgLSAxKTsKJiM0MzsJc3RhY2tpZC0mZ3Q7YnVja2V0ID0gUkVBRF9PTkNFKHNtYXAtJmd0O2J1Y2tldHNbc3RhY2tpZC0mZ3Q7aWRdKTsKJiM0MzsJc3RhY2tpZC0mZ3Q7aGFzaF9tYXRjaGVzID0gc3RhY2tpZC0mZ3Q7YnVja2V0ICZhbXA7JmFtcDsgc3RhY2tpZC0mZ3Q7YnVja2V0LSZndDtoYXNoID09IHN0YWNraWQtJmd0O2hhc2g7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHN0YWNraWRfZmFzdHBhdGgoc3RydWN0IHN0YWNraWQgKnN0YWNraWQsIHN0cnVjdCBicGZfbWFwICptYXAsCiYjNDM7CQkJICAgIHN0cnVjdCBwZXJmX2NhbGxjaGFpbl9lbnRyeSAqdHJhY2UsIHU2NCBmbGFncykKJiM0Mzt7CiYjNDM7CWludCBlcnI7CiYjNDM7CiYjNDM7CWVyciA9IHN0YWNraWRfaW5pdChzdGFja2lkLCBtYXAsIHRyYWNlLCBmbGFncyk7CiYjNDM7CWlmIChlcnIpCiYjNDM7CQlyZXR1cm4gZXJyOwogCi0JaGFzaF9tYXRjaGVzID0gYnVja2V0ICZhbXA7JmFtcDsgYnVja2V0LSZndDtoYXNoID09IGhhc2g7CiAJLyogZmFzdCBjbXAgKi8KLQlpZiAoaGFzaF9tYXRjaGVzICZhbXA7JmFtcDsgZmxhZ3MgJmFtcDsgQlBGX0ZfRkFTVF9TVEFDS19DTVApCi0JCXJldHVybiBpZDsKJiM0MzsJaWYgKHN0YWNraWQtJmd0O2hhc2hfbWF0Y2hlcyAmYW1wOyZhbXA7IGZsYWdzICZhbXA7IEJQRl9GX0ZBU1RfU1RBQ0tfQ01QKQomIzQzOwkJcmV0dXJuIHN0YWNraWQtJmd0O2lkOwomIzQzOwomIzQzOwlpZiAoc3RhY2tfbWFwX3VzZV9idWlsZF9pZChtYXApKQomIzQzOwkJcmV0dXJuIC1FTk9FTlQ7CiYjNDM7CWlmIChzdGFja2lkLSZndDtoYXNoX21hdGNoZXMgJmFtcDsmYW1wOyBzdGFja2lkLSZndDtidWNrZXQtJmd0O25yID09IHN0YWNraWQtJmd0O25yICZhbXA7JmFtcDsKJiM0MzsJICAgIG1lbWNtcChzdGFja2lkLSZndDtidWNrZXQtJmd0O2RhdGEsIHN0YWNraWQtJmd0O2lwcywgc3RhY2tpZC0mZ3Q7bGVuKSA9PSAwKQomIzQzOwkJcmV0dXJuIHN0YWNraWQtJmd0O2lkOwomIzQzOwlpZiAoc3RhY2tpZC0mZ3Q7YnVja2V0ICZhbXA7JmFtcDsgIShmbGFncyAmYW1wOyBCUEZfRl9SRVVTRV9TVEFDS0lEKSkKJiM0MzsJCXJldHVybiAtRUVYSVNUOwomIzQzOwlyZXR1cm4gLUVOT0VOVDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHN0cnVjdCBzdGFja19tYXBfYnVja2V0ICoKJiM0MztzdGFja2lkX25ld19idWNrZXQoc3RydWN0IHN0YWNraWQgKnN0YWNraWQsIHN0cnVjdCBicGZfbWFwICptYXAsCiYjNDM7CQkgICBzdHJ1Y3QgcGVyZl9jYWxsY2hhaW5fZW50cnkgKnRyYWNlLCB1NjQgZmxhZ3MpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgYnBmX3N0YWNrX21hcCAqc21hcCA9IGNvbnRhaW5lcl9vZihtYXAsIHN0cnVjdCBicGZfc3RhY2tfbWFwLCBtYXApOwomIzQzOwlzdHJ1Y3QgYnBmX3N0YWNrX2J1aWxkX2lkICppZF9vZmZzOwomIzQzOwlzdHJ1Y3Qgc3RhY2tfbWFwX2J1Y2tldCAqYnVja2V0OwomIzQzOwl1MzIgaTsKJiM0MzsKJiM0MzsJYnVja2V0ID0gKHN0cnVjdCBzdGFja19tYXBfYnVja2V0ICopIHBjcHVfZnJlZWxpc3RfcG9wKCZhbXA7c21hcC0mZ3Q7ZnJlZWxpc3QpOwomIzQzOwlpZiAodW5saWtlbHkoIWJ1Y2tldCkpCiYjNDM7CQlyZXR1cm4gTlVMTDsKJiM0MzsKJiM0MzsJaWYgKHN0YWNrX21hcF91c2VfYnVpbGRfaWQobWFwKSkgewomIzQzOwkJaWRfb2ZmcyA9IChzdHJ1Y3QgYnBmX3N0YWNrX2J1aWxkX2lkICopYnVja2V0LSZndDtkYXRhOwomIzQzOwkJZm9yIChpID0gMDsgaSAmbHQ7IHN0YWNraWQtJmd0O25yOyBpJiM0MzsmIzQzOykKJiM0MzsJCQlpZF9vZmZzW2ldLmlwID0gc3RhY2tpZC0mZ3Q7aXBzW2ldOwomIzQzOwl9IGVsc2UgewomIzQzOwkJbWVtY3B5KGJ1Y2tldC0mZ3Q7ZGF0YSwgc3RhY2tpZC0mZ3Q7aXBzLCBzdGFja2lkLSZndDtsZW4pOwomIzQzOwl9CiYjNDM7CiYjNDM7CWJ1Y2tldC0mZ3Q7aGFzaCA9IHN0YWNraWQtJmd0O2hhc2g7CiYjNDM7CWJ1Y2tldC0mZ3Q7bnIgPSBzdGFja2lkLSZndDtucjsKJiM0MzsJcmV0dXJuIGJ1Y2tldDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGxvbmcgc3RhY2tpZF9pbnN0YWxsKHN0cnVjdCBzdGFja2lkICpzdGFja2lkLCBzdHJ1Y3QgYnBmX21hcCAqbWFwLAomIzQzOwkJCSAgICBzdHJ1Y3Qgc3RhY2tfbWFwX2J1Y2tldCAqbmV3X2J1Y2tldCwgdTY0IGZsYWdzKQomIzQzO3sKJiM0MzsJc3RydWN0IGJwZl9zdGFja19tYXAgKnNtYXAgPSBjb250YWluZXJfb2YobWFwLCBzdHJ1Y3QgYnBmX3N0YWNrX21hcCwgbWFwKTsKJiM0MzsJYm9vbCB1c2VyID0gZmxhZ3MgJmFtcDsgQlBGX0ZfVVNFUl9TVEFDSzsKJiM0MzsJc3RydWN0IHN0YWNrX21hcF9idWNrZXQgKm9sZF9idWNrZXQ7CiYjNDM7CXUzMiB0cmFjZV9sZW47CiAKIAlpZiAoc3RhY2tfbWFwX3VzZV9idWlsZF9pZChtYXApKSB7CiAJCXN0cnVjdCBicGZfc3RhY2tfYnVpbGRfaWQgKmlkX29mZnM7CiAKLQkJLyogZm9yIGJ1aWxkX2lkJiM0MztvZmZzZXQsIHBvcCBhIGJ1Y2tldCBiZWZvcmUgc2xvdyBjbXAgKi8KLQkJbmV3X2J1Y2tldCA9IChzdHJ1Y3Qgc3RhY2tfbWFwX2J1Y2tldCAqKQotCQkJcGNwdV9mcmVlbGlzdF9wb3AoJmFtcDtzbWFwLSZndDtmcmVlbGlzdCk7Ci0JCWlmICh1bmxpa2VseSghbmV3X2J1Y2tldCkpCi0JCQlyZXR1cm4gLUVOT01FTTsKLQkJbmV3X2J1Y2tldC0mZ3Q7bnIgPSB0cmFjZV9ucjsKIAkJaWRfb2ZmcyA9IChzdHJ1Y3QgYnBmX3N0YWNrX2J1aWxkX2lkICopbmV3X2J1Y2tldC0mZ3Q7ZGF0YTsKLQkJZm9yIChpID0gMDsgaSAmbHQ7IHRyYWNlX25yOyBpJiM0MzsmIzQzOykKLQkJCWlkX29mZnNbaV0uaXAgPSBpcHNbaV07Ci0JCXN0YWNrX21hcF9nZXRfYnVpbGRfaWRfb2Zmc2V0KGlkX29mZnMsIHRyYWNlX25yLCB1c2VyLCBmYWxzZSAvKiAhbWF5X2ZhdWx0ICovKTsKLQkJdHJhY2VfbGVuID0gdHJhY2VfbnIgKiBzaXplb2Yoc3RydWN0IGJwZl9zdGFja19idWlsZF9pZCk7Ci0JCWlmIChoYXNoX21hdGNoZXMgJmFtcDsmYW1wOyBidWNrZXQtJmd0O25yID09IHRyYWNlX25yICZhbXA7JmFtcDsKLQkJICAgIG1lbWNtcChidWNrZXQtJmd0O2RhdGEsIG5ld19idWNrZXQtJmd0O2RhdGEsIHRyYWNlX2xlbikgPT0gMCkgewomIzQzOwkJc3RhY2tfbWFwX2dldF9idWlsZF9pZF9vZmZzZXQoaWRfb2Zmcywgc3RhY2tpZC0mZ3Q7bnIsIHVzZXIsIGZhbHNlIC8qICFtYXlfZmF1bHQgKi8pOwomIzQzOwkJdHJhY2VfbGVuID0gc3RhY2tpZC0mZ3Q7bnIgKiBzaXplb2Yoc3RydWN0IGJwZl9zdGFja19idWlsZF9pZCk7CiYjNDM7CQlpZiAoc3RhY2tpZC0mZ3Q7aGFzaF9tYXRjaGVzICZhbXA7JmFtcDsgc3RhY2tpZC0mZ3Q7YnVja2V0LSZndDtuciA9PSBzdGFja2lkLSZndDtuciAmYW1wOyZhbXA7CiYjNDM7CQkgICAgbWVtY21wKHN0YWNraWQtJmd0O2J1Y2tldC0mZ3Q7ZGF0YSwgbmV3X2J1Y2tldC0mZ3Q7ZGF0YSwgdHJhY2VfbGVuKSA9PSAwKSB7CiAJCQlwY3B1X2ZyZWVsaXN0X3B1c2goJmFtcDtzbWFwLSZndDtmcmVlbGlzdCwgJmFtcDtuZXdfYnVja2V0LSZndDtmbm9kZSk7Ci0JCQlyZXR1cm4gaWQ7CiYjNDM7CQkJcmV0dXJuIHN0YWNraWQtJmd0O2lkOwogCQl9Ci0JCWlmIChidWNrZXQgJmFtcDsmYW1wOyAhKGZsYWdzICZhbXA7IEJQRl9GX1JFVVNFX1NUQUNLSUQpKSB7CiYjNDM7CQlpZiAoc3RhY2tpZC0mZ3Q7YnVja2V0ICZhbXA7JmFtcDsgIShmbGFncyAmYW1wOyBCUEZfRl9SRVVTRV9TVEFDS0lEKSkgewogCQkJcGNwdV9mcmVlbGlzdF9wdXNoKCZhbXA7c21hcC0mZ3Q7ZnJlZWxpc3QsICZhbXA7bmV3X2J1Y2tldC0mZ3Q7Zm5vZGUpOwogCQkJcmV0dXJuIC1FRVhJU1Q7CiAJCX0KLQl9IGVsc2UgewotCQlpZiAoaGFzaF9tYXRjaGVzICZhbXA7JmFtcDsgYnVja2V0LSZndDtuciA9PSB0cmFjZV9uciAmYW1wOyZhbXA7Ci0JCSAgICBtZW1jbXAoYnVja2V0LSZndDtkYXRhLCBpcHMsIHRyYWNlX2xlbikgPT0gMCkKLQkJCXJldHVybiBpZDsKLQkJaWYgKGJ1Y2tldCAmYW1wOyZhbXA7ICEoZmxhZ3MgJmFtcDsgQlBGX0ZfUkVVU0VfU1RBQ0tJRCkpCi0JCQlyZXR1cm4gLUVFWElTVDsKLQotCQluZXdfYnVja2V0ID0gKHN0cnVjdCBzdGFja19tYXBfYnVja2V0ICopCi0JCQlwY3B1X2ZyZWVsaXN0X3BvcCgmYW1wO3NtYXAtJmd0O2ZyZWVsaXN0KTsKLQkJaWYgKHVubGlrZWx5KCFuZXdfYnVja2V0KSkKLQkJCXJldHVybiAtRU5PTUVNOwotCQltZW1jcHkobmV3X2J1Y2tldC0mZ3Q7ZGF0YSwgaXBzLCB0cmFjZV9sZW4pOwogCX0KIAotCW5ld19idWNrZXQtJmd0O2hhc2ggPSBoYXNoOwotCW5ld19idWNrZXQtJmd0O25yID0gdHJhY2VfbnI7Ci0KLQlvbGRfYnVja2V0ID0geGNoZygmYW1wO3NtYXAtJmd0O2J1Y2tldHNbaWRdLCBuZXdfYnVja2V0KTsKJiM0MzsJb2xkX2J1Y2tldCA9IHhjaGcoJmFtcDtzbWFwLSZndDtidWNrZXRzW3N0YWNraWQtJmd0O2lkXSwgbmV3X2J1Y2tldCk7CiAJaWYgKG9sZF9idWNrZXQpCiAJCXBjcHVfZnJlZWxpc3RfcHVzaCgmYW1wO3NtYXAtJmd0O2ZyZWVsaXN0LCAmYW1wO29sZF9idWNrZXQtJmd0O2Zub2RlKTsKLQlyZXR1cm4gaWQ7CiYjNDM7CXJldHVybiBzdGFja2lkLSZndDtpZDsKIH0KIAogQlBGX0NBTExfMyhicGZfZ2V0X3N0YWNraWQsIHN0cnVjdCBwdF9yZWdzICosIHJlZ3MsIHN0cnVjdCBicGZfbWFwICosIG1hcCwKQEAgLTU4Myw4ICYjNDM7NjIxLDExIEBAIEJQRl9DQUxMXzMoYnBmX2dldF9zdGFja2lkLCBzdHJ1Y3QgcHRfcmVncyAqLCByZWdzLCBzdHJ1Y3QgYnBmX21hcCAqLCBtYXAsCiB7CiAJdTMyIGVsZW1fc2l6ZSA9IHN0YWNrX21hcF9kYXRhX3NpemUobWFwKTsKIAlib29sIHVzZXIgPSBmbGFncyAmYW1wOyBCUEZfRl9VU0VSX1NUQUNLOwomIzQzOwlzdHJ1Y3Qgc3RhY2tfbWFwX2J1Y2tldCAqbmV3X2J1Y2tldDsKIAlzdHJ1Y3QgcGVyZl9jYWxsY2hhaW5fZW50cnkgKnRyYWNlOwomIzQzOwlzdHJ1Y3Qgc3RhY2tpZCBzdGFja2lkOwogCWJvb2wga2VybmVsID0gIXVzZXI7CiYjNDM7CWludCBlcnIgPSAtRUZBVUxUOwogCXUzMiBtYXhfZGVwdGg7CiAKIAlpZiAodW5saWtlbHkoZmxhZ3MgJmFtcDsgfihCUEZfRl9TS0lQX0ZJRUxEX01BU0sgfCBCUEZfRl9VU0VSX1NUQUNLIHwKQEAgLTU5MiwxNCAmIzQzOzYzMywyOSBAQCBCUEZfQ0FMTF8zKGJwZl9nZXRfc3RhY2tpZCwgc3RydWN0IHB0X3JlZ3MgKiwgcmVncywgc3RydWN0IGJwZl9tYXAgKiwgbWFwLAogCQlyZXR1cm4gLUVJTlZBTDsKIAogCW1heF9kZXB0aCA9IHN0YWNrX21hcF9jYWxjdWxhdGVfbWF4X2RlcHRoKG1hcC0mZ3Q7dmFsdWVfc2l6ZSwgZWxlbV9zaXplLCBmbGFncyk7CiYjNDM7CiYjNDM7CXByZWVtcHRfZGlzYWJsZSgpOwogCXRyYWNlID0gZ2V0X3BlcmZfY2FsbGNoYWluKHJlZ3MsIGtlcm5lbCwgdXNlciwgbWF4X2RlcHRoLAogCQkJCSAgIGZhbHNlLCBmYWxzZSwgMCk7CiAKIAlpZiAodW5saWtlbHkoIXRyYWNlKSkKIAkJLyogY291bGRuJiMzOTt0IGZldGNoIHRoZSBzdGFjayB0cmFjZSAqLwotCQlyZXR1cm4gLUVGQVVMVDsKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwomIzQzOwllcnIgPSBzdGFja2lkX2Zhc3RwYXRoKCZhbXA7c3RhY2tpZCwgbWFwLCB0cmFjZSwgZmxhZ3MpOwomIzQzOwlpZiAoZXJyICE9IC1FTk9FTlQpCiYjNDM7CQlnb3RvIG91dDsKJiM0MzsKJiM0MzsJbmV3X2J1Y2tldCA9IHN0YWNraWRfbmV3X2J1Y2tldCgmYW1wO3N0YWNraWQsIG1hcCwgdHJhY2UsIGZsYWdzKTsKJiM0MzsJaWYgKG5ld19idWNrZXQpIHsKJiM0MzsJCXByZWVtcHRfZW5hYmxlKCk7CiYjNDM7CQlyZXR1cm4gc3RhY2tpZF9pbnN0YWxsKCZhbXA7c3RhY2tpZCwgbWFwLCBuZXdfYnVja2V0LCBmbGFncyk7CiYjNDM7CX0KJiM0MzsJZXJyID0gLUVOT01FTTsKIAotCXJldHVybiBfX2JwZl9nZXRfc3RhY2tpZChtYXAsIHRyYWNlLCBmbGFncyk7CiYjNDM7b3V0OgomIzQzOwlwcmVlbXB0X2VuYWJsZSgpOwomIzQzOwlyZXR1cm4gZXJyOwogfQogCiBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX2dldF9zdGFja2lkX3Byb3RvID0gewpAQCAtNjI3LDcgJiM0Mzs2ODMsOSBAQCBCUEZfQ0FMTF8zKGJwZl9nZXRfc3RhY2tpZF9wZSwgc3RydWN0IGJwZl9wZXJmX2V2ZW50X2RhdGFfa2VybiAqLCBjdHgsCiAJICAgc3RydWN0IGJwZl9tYXAgKiwgbWFwLCB1NjQsIGZsYWdzKQogewogCXN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCA9IGN0eC0mZ3Q7ZXZlbnQ7CiYjNDM7CXN0cnVjdCBzdGFja19tYXBfYnVja2V0ICpuZXdfYnVja2V0OwogCXN0cnVjdCBwZXJmX2NhbGxjaGFpbl9lbnRyeSAqdHJhY2U7CiYjNDM7CXN0cnVjdCBzdGFja2lkIHN0YWNraWQ7CiAJYm9vbCBrZXJuZWwsIHVzZXI7CiAJX191NjQgbnJfa2VybmVsOwogCWludCByZXQ7CkBAIC02NTMsNyAmIzQzOzcxMSw2IEBAIEJQRl9DQUxMXzMoYnBmX2dldF9zdGFja2lkX3BlLCBzdHJ1Y3QgYnBmX3BlcmZfZXZlbnRfZGF0YV9rZXJuICosIGN0eCwKIAogCWlmIChrZXJuZWwpIHsKIAkJdHJhY2UtJmd0O25yID0gbnJfa2VybmVsOwotCQlyZXQgPSBfX2JwZl9nZXRfc3RhY2tpZChtYXAsIHRyYWNlLCBmbGFncyk7CiAJfSBlbHNlIHsgLyogdXNlciAqLwogCQl1NjQgc2tpcCA9IGZsYWdzICZhbXA7IEJQRl9GX1NLSVBfRklFTERfTUFTSzsKIApAQCAtNjYyLDEyICYjNDM7NzE5LDIyIEBAIEJQRl9DQUxMXzMoYnBmX2dldF9zdGFja2lkX3BlLCBzdHJ1Y3QgYnBmX3BlcmZfZXZlbnRfZGF0YV9rZXJuICosIGN0eCwKIAkJCXJldHVybiAtRUZBVUxUOwogCiAJCWZsYWdzID0gKGZsYWdzICZhbXA7IH5CUEZfRl9TS0lQX0ZJRUxEX01BU0spIHwgc2tpcDsKLQkJcmV0ID0gX19icGZfZ2V0X3N0YWNraWQobWFwLCB0cmFjZSwgZmxhZ3MpOwogCX0KIAomIzQzOwlyZXQgPSBzdGFja2lkX2Zhc3RwYXRoKCZhbXA7c3RhY2tpZCwgbWFwLCB0cmFjZSwgZmxhZ3MpOwomIzQzOwlpZiAocmV0ICE9IC1FTk9FTlQpCiYjNDM7CQlnb3RvIGVycm9yOwomIzQzOwomIzQzOwluZXdfYnVja2V0ID0gc3RhY2tpZF9uZXdfYnVja2V0KCZhbXA7c3RhY2tpZCwgbWFwLCB0cmFjZSwgZmxhZ3MpOwomIzQzOwlpZiAobmV3X2J1Y2tldCkgewomIzQzOwkJdHJhY2UtJmd0O25yID0gbnI7CiYjNDM7CQlyZXR1cm4gc3RhY2tpZF9pbnN0YWxsKCZhbXA7c3RhY2tpZCwgbWFwLCBuZXdfYnVja2V0LCBmbGFncyk7CiYjNDM7CX0KJiM0MzsJcmV0ID0gLUVOT01FTTsKJiM0MzsKJiM0MztlcnJvcjoKIAkvKiByZXN0b3JlIG5yICovCiAJdHJhY2UtJmd0O25yID0gbnI7Ci0KIAlyZXR1cm4gcmV0OwogfQogCkBAIC02ODAsMTkgJiM0Mzs3NDcsNTMgQEAgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9nZXRfc3RhY2tpZF9wcm90b19wZSA9IHsKIAkuYXJnM190eXBlCT0gQVJHX0FOWVRISU5HLAogfTsKIAomIzQzO3N0YXRpYyB1MzIgY2FsbGNoYWluX3N0b3JlKHN0cnVjdCBwZXJmX2NhbGxjaGFpbl9lbnRyeSAqdHJhY2UsIHZvaWQgKmJ1ZiwgdTMyIHNpemUsCiYjNDM7CQkJICAgdTMyIGVsZW1fc2l6ZSwgdTY0IGZsYWdzKQomIzQzO3sKJiM0MzsJYm9vbCB1c2VyX2J1aWxkX2lkID0gZmxhZ3MgJmFtcDsgQlBGX0ZfVVNFUl9CVUlMRF9JRDsKJiM0MzsJdTMyIHNraXAgPSBmbGFncyAmYW1wOyBCUEZfRl9TS0lQX0ZJRUxEX01BU0s7CiYjNDM7CXUzMiB0cmFjZV9uciwgY29weV9sZW47CiYjNDM7CXU2NCAqaXBzOwomIzQzOwomIzQzOwl0cmFjZV9uciA9IHRyYWNlLSZndDtuciAtIHNraXA7CiYjNDM7CWNvcHlfbGVuID0gdHJhY2VfbnIgKiBlbGVtX3NpemU7CiYjNDM7CiYjNDM7CWlwcyA9IHRyYWNlLSZndDtpcCAmIzQzOyBza2lwOwomIzQzOwlpZiAodXNlcl9idWlsZF9pZCkgewomIzQzOwkJc3RydWN0IGJwZl9zdGFja19idWlsZF9pZCAqaWRfb2ZmcyA9IGJ1ZjsKJiM0MzsKJiM0MzsJCWZvciAodTMyIGkgPSAwOyBpICZsdDsgdHJhY2VfbnI7IGkmIzQzOyYjNDM7KQomIzQzOwkJCWlkX29mZnNbaV0uaXAgPSBpcHNbaV07CiYjNDM7CX0gZWxzZSB7CiYjNDM7CQltZW1jcHkoYnVmLCBpcHMsIGNvcHlfbGVuKTsKJiM0MzsJfQomIzQzOwlyZXR1cm4gdHJhY2VfbnI7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBsb25nIGNhbGxjaGFpbl9maW5hbGl6ZSh2b2lkICpidWYsIHUzMiBzaXplLCB1MzIgdHJhY2VfbnIsIHUzMiBlbGVtX3NpemUsCiYjNDM7CQkJICAgICAgIGJvb2wgdXNlcl9idWlsZF9pZCwgYm9vbCB1c2VyLCBib29sIG1heV9mYXVsdCkKJiM0Mzt7CiYjNDM7CXUzMiBjb3B5X2xlbiA9IHRyYWNlX25yICogZWxlbV9zaXplOwomIzQzOwomIzQzOwlpZiAodXNlcl9idWlsZF9pZCkKJiM0MzsJCXN0YWNrX21hcF9nZXRfYnVpbGRfaWRfb2Zmc2V0KGJ1ZiwgdHJhY2VfbnIsIHVzZXIsIG1heV9mYXVsdCk7CiYjNDM7CiYjNDM7CWlmIChzaXplICZndDsgY29weV9sZW4pCiYjNDM7CQltZW1zZXQoYnVmICYjNDM7IGNvcHlfbGVuLCAwLCBzaXplIC0gY29weV9sZW4pOwomIzQzOwlyZXR1cm4gY29weV9sZW47CiYjNDM7fQomIzQzOwogc3RhdGljIGxvbmcgX19icGZfZ2V0X3N0YWNrKHN0cnVjdCBwdF9yZWdzICpyZWdzLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssCi0JCQkgICAgc3RydWN0IHBlcmZfY2FsbGNoYWluX2VudHJ5ICp0cmFjZV9pbiwKIAkJCSAgICB2b2lkICpidWYsIHUzMiBzaXplLCB1NjQgZmxhZ3MsIGJvb2wgbWF5X2ZhdWx0KQogewotCXUzMiB0cmFjZV9uciwgY29weV9sZW4sIGVsZW1fc2l6ZSwgbWF4X2RlcHRoOwogCWJvb2wgdXNlcl9idWlsZF9pZCA9IGZsYWdzICZhbXA7IEJQRl9GX1VTRVJfQlVJTERfSUQ7CiAJYm9vbCBjcm9zc3Rhc2sgPSB0YXNrICZhbXA7JmFtcDsgdGFzayAhPSBjdXJyZW50OwogCXUzMiBza2lwID0gZmxhZ3MgJmFtcDsgQlBGX0ZfU0tJUF9GSUVMRF9NQVNLOwogCWJvb2wgdXNlciA9IGZsYWdzICZhbXA7IEJQRl9GX1VTRVJfU1RBQ0s7CiAJc3RydWN0IHBlcmZfY2FsbGNoYWluX2VudHJ5ICp0cmFjZTsKJiM0MzsJdTMyIHRyYWNlX25yLCBlbGVtX3NpemUsIG1heF9kZXB0aDsKIAlib29sIGtlcm5lbCA9ICF1c2VyOwogCWludCBlcnIgPSAtRUlOVkFMOwotCXU2NCAqaXBzOwogCiAJaWYgKHVubGlrZWx5KGZsYWdzICZhbXA7IH4oQlBGX0ZfU0tJUF9GSUVMRF9NQVNLIHwgQlBGX0ZfVVNFUl9TVEFDSyB8CiAJCQkgICAgICAgQlBGX0ZfVVNFUl9CVUlMRF9JRCkpKQpAQCAtNzE4LDEzICYjNDM7ODE5LDkgQEAgc3RhdGljIGxvbmcgX19icGZfZ2V0X3N0YWNrKHN0cnVjdCBwdF9yZWdzICpyZWdzLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssCiAKIAltYXhfZGVwdGggPSBzdGFja19tYXBfY2FsY3VsYXRlX21heF9kZXB0aChzaXplLCBlbGVtX3NpemUsIGZsYWdzKTsKIAotCWlmIChtYXlfZmF1bHQpCi0JCXJjdV9yZWFkX2xvY2soKTsgLyogbmVlZCBSQ1UgZm9yIHBlcmYmIzM5O3MgY2FsbGNoYWluIGJlbG93ICovCiYjNDM7CXByZWVtcHRfZGlzYWJsZSgpOwogCi0JaWYgKHRyYWNlX2luKSB7Ci0JCXRyYWNlID0gdHJhY2VfaW47Ci0JCXRyYWNlLSZndDtuciA9IG1pbl90KHUzMiwgdHJhY2UtJmd0O25yLCBtYXhfZGVwdGgpOwotCX0gZWxzZSBpZiAoa2VybmVsICZhbXA7JmFtcDsgdGFzaykgewomIzQzOwlpZiAoa2VybmVsICZhbXA7JmFtcDsgdGFzaykgewogCQl0cmFjZSA9IGdldF9jYWxsY2hhaW5fZW50cnlfZm9yX3Rhc2sodGFzaywgbWF4X2RlcHRoKTsKIAl9IGVsc2UgewogCQl0cmFjZSA9IGdldF9wZXJmX2NhbGxjaGFpbihyZWdzLCBrZXJuZWwsIHVzZXIsIG1heF9kZXB0aCwKQEAgLTczMiwzNSAmIzQzOzgyOSwxNiBAQCBzdGF0aWMgbG9uZyBfX2JwZl9nZXRfc3RhY2soc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywKIAl9CiAKIAlpZiAodW5saWtlbHkoIXRyYWNlKSB8fCB0cmFjZS0mZ3Q7bnIgJmx0OyBza2lwKSB7Ci0JCWlmIChtYXlfZmF1bHQpCi0JCQlyY3VfcmVhZF91bmxvY2soKTsKJiM0MzsJCXByZWVtcHRfZW5hYmxlKCk7CiAJCWdvdG8gZXJyX2ZhdWx0OwogCX0KIAotCXRyYWNlX25yID0gdHJhY2UtJmd0O25yIC0gc2tpcDsKLQljb3B5X2xlbiA9IHRyYWNlX25yICogZWxlbV9zaXplOwotCi0JaXBzID0gdHJhY2UtJmd0O2lwICYjNDM7IHNraXA7Ci0JaWYgKHVzZXJfYnVpbGRfaWQpIHsKLQkJc3RydWN0IGJwZl9zdGFja19idWlsZF9pZCAqaWRfb2ZmcyA9IGJ1ZjsKLQkJdTMyIGk7Ci0KLQkJZm9yIChpID0gMDsgaSAmbHQ7IHRyYWNlX25yOyBpJiM0MzsmIzQzOykKLQkJCWlkX29mZnNbaV0uaXAgPSBpcHNbaV07Ci0JfSBlbHNlIHsKLQkJbWVtY3B5KGJ1ZiwgaXBzLCBjb3B5X2xlbik7Ci0JfQotCi0JLyogdHJhY2UvaXBzIHNob3VsZCBub3QgYmUgZGVyZWZlcmVuY2VkIGFmdGVyIHRoaXMgcG9pbnQgKi8KLQlpZiAobWF5X2ZhdWx0KQotCQlyY3VfcmVhZF91bmxvY2soKTsKJiM0MzsJdHJhY2VfbnIgPSBjYWxsY2hhaW5fc3RvcmUodHJhY2UsIGJ1Ziwgc2l6ZSwgZWxlbV9zaXplLCBmbGFncyk7CiAKLQlpZiAodXNlcl9idWlsZF9pZCkKLQkJc3RhY2tfbWFwX2dldF9idWlsZF9pZF9vZmZzZXQoYnVmLCB0cmFjZV9uciwgdXNlciwgbWF5X2ZhdWx0KTsKJiM0MzsJLyogdHJhY2Ugc2hvdWxkIG5vdCBiZSBkZXJlZmVyZW5jZWQgYWZ0ZXIgdGhpcyBwb2ludCAqLwomIzQzOwlwcmVlbXB0X2VuYWJsZSgpOwogCi0JaWYgKHNpemUgJmd0OyBjb3B5X2xlbikKLQkJbWVtc2V0KGJ1ZiAmIzQzOyBjb3B5X2xlbiwgMCwgc2l6ZSAtIGNvcHlfbGVuKTsKLQlyZXR1cm4gY29weV9sZW47CiYjNDM7CXJldHVybiBjYWxsY2hhaW5fZmluYWxpemUoYnVmLCBzaXplLCB0cmFjZV9uciwgZWxlbV9zaXplLCB1c2VyX2J1aWxkX2lkLCB1c2VyLCBtYXlfZmF1bHQpOwogCiBlcnJfZmF1bHQ6CiAJZXJyID0gLUVGQVVMVDsKQEAgLTc3Miw3ICYjNDM7ODUwLDcgQEAgc3RhdGljIGxvbmcgX19icGZfZ2V0X3N0YWNrKHN0cnVjdCBwdF9yZWdzICpyZWdzLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssCiBCUEZfQ0FMTF80KGJwZl9nZXRfc3RhY2ssIHN0cnVjdCBwdF9yZWdzICosIHJlZ3MsIHZvaWQgKiwgYnVmLCB1MzIsIHNpemUsCiAJICAgdTY0LCBmbGFncykKIHsKLQlyZXR1cm4gX19icGZfZ2V0X3N0YWNrKHJlZ3MsIE5VTEwsIE5VTEwsIGJ1Ziwgc2l6ZSwgZmxhZ3MsIGZhbHNlIC8qICFtYXlfZmF1bHQgKi8pOwomIzQzOwlyZXR1cm4gX19icGZfZ2V0X3N0YWNrKHJlZ3MsIE5VTEwsIGJ1Ziwgc2l6ZSwgZmxhZ3MsIGZhbHNlIC8qICFtYXlfZmF1bHQgKi8pOwogfQogCiBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX2dldF9zdGFja19wcm90byA9IHsKQEAgLTc4OCw3ICYjNDM7ODY2LDcgQEAgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9nZXRfc3RhY2tfcHJvdG8gPSB7CiBCUEZfQ0FMTF80KGJwZl9nZXRfc3RhY2tfc2xlZXBhYmxlLCBzdHJ1Y3QgcHRfcmVncyAqLCByZWdzLCB2b2lkICosIGJ1ZiwgdTMyLCBzaXplLAogCSAgIHU2NCwgZmxhZ3MpCiB7Ci0JcmV0dXJuIF9fYnBmX2dldF9zdGFjayhyZWdzLCBOVUxMLCBOVUxMLCBidWYsIHNpemUsIGZsYWdzLCB0cnVlIC8qIG1heV9mYXVsdCAqLyk7CiYjNDM7CXJldHVybiBfX2JwZl9nZXRfc3RhY2socmVncywgTlVMTCwgYnVmLCBzaXplLCBmbGFncywgdHJ1ZSAvKiBtYXlfZmF1bHQgKi8pOwogfQogCiBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX2dldF9zdGFja19zbGVlcGFibGVfcHJvdG8gPSB7CkBAIC04MTIsNyAmIzQzOzg5MCw3IEBAIHN0YXRpYyBsb25nIF9fYnBmX2dldF90YXNrX3N0YWNrKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywgdm9pZCAqYnVmLCB1MzIgc2l6ZSwKIAogCXJlZ3MgPSB0YXNrX3B0X3JlZ3ModGFzayk7CiAJaWYgKHJlZ3MpCi0JCXJlcyA9IF9fYnBmX2dldF9zdGFjayhyZWdzLCB0YXNrLCBOVUxMLCBidWYsIHNpemUsIGZsYWdzLCBtYXlfZmF1bHQpOwomIzQzOwkJcmVzID0gX19icGZfZ2V0X3N0YWNrKHJlZ3MsIHRhc2ssIGJ1Ziwgc2l6ZSwgZmxhZ3MsIG1heV9mYXVsdCk7CiAJcHV0X3Rhc2tfc3RhY2sodGFzayk7CiAKIAlyZXR1cm4gcmVzOwpAQCAtODUyLDYgJiM0Mzs5MzAsMzMgQEAgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9nZXRfdGFza19zdGFja19zbGVlcGFibGVfcHJvdG8gPSB7CiAJLmFyZzRfdHlwZQk9IEFSR19BTllUSElORywKIH07CiAKJiM0MztzdGF0aWMgaW50IF9fYnBmX2dldF9zdGFja19wZShzdHJ1Y3QgcGVyZl9jYWxsY2hhaW5fZW50cnkgKnRyYWNlLCB2b2lkICpidWYsIHUzMiBzaXplLAomIzQzOwkJCSAgICAgIHU2NCBmbGFncykKJiM0Mzt7CiYjNDM7CWJvb2wgdXNlcl9idWlsZF9pZCA9IGZsYWdzICZhbXA7IEJQRl9GX1VTRVJfQlVJTERfSUQ7CiYjNDM7CXU2NCBza2lwID0gZmxhZ3MgJmFtcDsgQlBGX0ZfU0tJUF9GSUVMRF9NQVNLOwomIzQzOwlib29sIHVzZXIgPSBmbGFncyAmYW1wOyBCUEZfRl9VU0VSX1NUQUNLOwomIzQzOwl1MzIgZWxlbV9zaXplLCBtYXhfZGVwdGgsIG5yX3RyYWNlOwomIzQzOwlib29sIGtlcm5lbCA9ICF1c2VyOwomIzQzOwomIzQzOwlpZiAoa2VybmVsICZhbXA7JmFtcDsgdXNlcl9idWlsZF9pZCkKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwomIzQzOwllbGVtX3NpemUgPSB1c2VyX2J1aWxkX2lkID8gc2l6ZW9mKHN0cnVjdCBicGZfc3RhY2tfYnVpbGRfaWQpIDogc2l6ZW9mKHU2NCk7CiYjNDM7CWlmICh1bmxpa2VseShzaXplICUgZWxlbV9zaXplKSkKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwomIzQzOwltYXhfZGVwdGggPSBzdGFja19tYXBfY2FsY3VsYXRlX21heF9kZXB0aChzaXplLCBlbGVtX3NpemUsIGZsYWdzKTsKJiM0MzsJdHJhY2UtJmd0O25yID0gbWluX3QodTMyLCB0cmFjZS0mZ3Q7bnIsIG1heF9kZXB0aCk7CiYjNDM7CiYjNDM7CWlmICh0cmFjZS0mZ3Q7bnIgJmx0OyBza2lwKQomIzQzOwkJcmV0dXJuIC1FRkFVTFQ7CiYjNDM7CiYjNDM7CW5yX3RyYWNlID0gY2FsbGNoYWluX3N0b3JlKHRyYWNlLCBidWYsIHNpemUsIGVsZW1fc2l6ZSwgZmxhZ3MpOwomIzQzOwlyZXR1cm4gY2FsbGNoYWluX2ZpbmFsaXplKGJ1Ziwgc2l6ZSwgbnJfdHJhY2UsIGVsZW1fc2l6ZSwgdXNlcl9idWlsZF9pZCwKJiM0MzsJCQkJICB1c2VyLCBmYWxzZSAvKiAhbWF5X2ZhdWx0ICovKTsKJiM0Mzt9CiYjNDM7CiBCUEZfQ0FMTF80KGJwZl9nZXRfc3RhY2tfcGUsIHN0cnVjdCBicGZfcGVyZl9ldmVudF9kYXRhX2tlcm4gKiwgY3R4LAogCSAgIHZvaWQgKiwgYnVmLCB1MzIsIHNpemUsIHU2NCwgZmxhZ3MpCiB7CkBAIC04NjMsNyAmIzQzOzk2OCw3IEBAIEJQRl9DQUxMXzQoYnBmX2dldF9zdGFja19wZSwgc3RydWN0IGJwZl9wZXJmX2V2ZW50X2RhdGFfa2VybiAqLCBjdHgsCiAJX191NjQgbnJfa2VybmVsOwogCiAJaWYgKCEoZXZlbnQtJmd0O2F0dHIuc2FtcGxlX3R5cGUgJmFtcDsgUEVSRl9TQU1QTEVfQ0FMTENIQUlOKSkKLQkJcmV0dXJuIF9fYnBmX2dldF9zdGFjayhyZWdzLCBOVUxMLCBOVUxMLCBidWYsIHNpemUsIGZsYWdzLCBmYWxzZSAvKiAhbWF5X2ZhdWx0ICovKTsKJiM0MzsJCXJldHVybiBfX2JwZl9nZXRfc3RhY2socmVncywgTlVMTCwgYnVmLCBzaXplLCBmbGFncywgZmFsc2UgLyogIW1heV9mYXVsdCAqLyk7CiAKIAlpZiAodW5saWtlbHkoZmxhZ3MgJmFtcDsgfihCUEZfRl9TS0lQX0ZJRUxEX01BU0sgfCBCUEZfRl9VU0VSX1NUQUNLIHwKIAkJCSAgICAgICBCUEZfRl9VU0VSX0JVSUxEX0lEKSkpCkBAIC04ODMsNyAmIzQzOzk4OCw3IEBAIEJQRl9DQUxMXzQoYnBmX2dldF9zdGFja19wZSwgc3RydWN0IGJwZl9wZXJmX2V2ZW50X2RhdGFfa2VybiAqLCBjdHgsCiAJCV9fdTY0IG5yID0gdHJhY2UtJmd0O25yOwogCiAJCXRyYWNlLSZndDtuciA9IG5yX2tlcm5lbDsKLQkJZXJyID0gX19icGZfZ2V0X3N0YWNrKHJlZ3MsIE5VTEwsIHRyYWNlLCBidWYsIHNpemUsIGZsYWdzLCBmYWxzZSAvKiAhbWF5X2ZhdWx0ICovKTsKJiM0MzsJCWVyciA9IF9fYnBmX2dldF9zdGFja19wZSh0cmFjZSwgYnVmLCBzaXplLCBmbGFncyk7CiAKIAkJLyogcmVzdG9yZSBuciAqLwogCQl0cmFjZS0mZ3Q7bnIgPSBucjsKQEAgLTg5MywxNCAmIzQzOzk5OCwxMyBAQCBCUEZfQ0FMTF80KGJwZl9nZXRfc3RhY2tfcGUsIHN0cnVjdCBicGZfcGVyZl9ldmVudF9kYXRhX2tlcm4gKiwgY3R4LAogCQlza2lwICYjNDM7PSBucl9rZXJuZWw7CiAJCWlmIChza2lwICZndDsgQlBGX0ZfU0tJUF9GSUVMRF9NQVNLKQogCQkJZ290byBjbGVhcjsKLQogCQlmbGFncyA9IChmbGFncyAmYW1wOyB+QlBGX0ZfU0tJUF9GSUVMRF9NQVNLKSB8IHNraXA7Ci0JCWVyciA9IF9fYnBmX2dldF9zdGFjayhyZWdzLCBOVUxMLCB0cmFjZSwgYnVmLCBzaXplLCBmbGFncywgZmFsc2UgLyogIW1heV9mYXVsdCAqLyk7CiYjNDM7CQllcnIgPSBfX2JwZl9nZXRfc3RhY2tfcGUodHJhY2UsIGJ1Ziwgc2l6ZSwgZmxhZ3MpOwogCX0KLQlyZXR1cm4gZXJyOwogCiBjbGVhcjoKLQltZW1zZXQoYnVmLCAwLCBzaXplKTsKJiM0MzsJaWYgKGVyciAmbHQ7IDApCiYjNDM7CQltZW1zZXQoYnVmLCAwLCBzaXplKTsKIAlyZXR1cm4gZXJyOwogCiB9CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIwIDEwOjQ5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc5NTUKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiAyMDkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBCUEYgU3RhY2ttYXAgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7dmUgZ290IHRoaXMgcGF0Y2ggaGVyZSB0aGF04oCZcyB0b3VjaGluZyBga2VybmVsL2JwZi9zdGFja21hcC5jYC4gSW1tZWRpYXRlbHksIEkgc2VlIGl0JiMzOTtzIGEgcmVmYWN0b3JpbmcgZWZmb3J0LCBpbnRyb2R1Y2luZyBzZXZlcmFsIG5ldyBzdHJ1Y3R1cmVzIGFuZCBmdW5jdGlvbnMgcmVsYXRlZCB0byBzdGFja21hcCBoYW5kbGluZy4gYHN0cnVjdCBzdGFja2lkYCwgYHN0YWNraWRfaW5pdGAsIHRoYXQgc29ydCBvZiB0aGluZyDigJMgdGhpcyBpcyBhbGwgZGVzaWduZWQgdG8gaW1wcm92ZSBob3cgdGhlIEJQRiBzdWJzeXN0ZW0gbWFuYWdlcyBzdGFjayBkYXRhLCBzcGVjaWZpY2FsbHkgZm9yIHBlcmYgZXZlbnQgY2FsbGNoYWlucy4gV2UmIzM5O3JlIGxvb2tpbmcgYXQgc2lnbmlmaWNhbnQgY2hhbmdlcyB0byBgYnBmX2dldF9zdGFja2lkYCBhbmQgcmVsYXRlZCBmdW5jdGlvbnMgdG9vLgoKVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBhIHByZXR0eSBkZWVwIGRpdmUgaW50byBjb3JlIEJQRiBhbmQgcGVyZiBpbnRlZ3JhdGlvbiwgYW5kIHRoYXQgbWFrZXMgaXQgYSBwcmltZSB0YXJnZXQgZm9yIGZ1enppbmcuIEFueSB0aW1lIHlvdSYjMzk7cmUgdG91Y2hpbmcgc3RhY2sgbWFuaXB1bGF0aW9uLCB5b3UmIzM5O3JlIG9wZW5pbmcgdGhlIGRvb3IgdG8gcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcy4KCk5vdywgbGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIG5lZWRlZCBmb3IgdGhlIGtlcm5lbCBidWlsZC4gSSBrbm93IGBrZXJuZWwvYnBmL3N0YWNrbWFwLmNgIGlzIGNvbXBpbGVkIHdoZW4gYENPTkZJR19CUEZfU1lTQ0FMTGAgaXMgZW5hYmxlZCwgYnV0IEkmIzM5O2xsIGRvdWJsZS1jaGVjayBga2VybmVsL2JwZi9NYWtlZmlsZWAganVzdCB0byBiZSBzdXJlIHRoZXJlIGFyZW4mIzM5O3QgYW55IG90aGVyIGNvbmZpZ3VyYXRpb24gZGVwZW5kZW5jaWVzIGx1cmtpbmcgaW4gdGhlcmUuIEdvdHRhIGdldCB0aGUgZnV6emluZyBlbnZpcm9ubWVudCBzZXQgdXAgY29ycmVjdGx5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIwIDEwOjUwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3N0YWNrbWFwJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL01ha2VmaWxlPTMwPWlmZXEgKCQoQ09ORklHX1BFUkZfRVZFTlRTKSx5KVxua2VybmVsL2JwZi9NYWtlZmlsZTozMTpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBzdGFja21hcC5vXG5rZXJuZWwvYnBmL01ha2VmaWxlLTMyLWVuZGlmXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjAgMTA6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODUyMgoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDE4NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipCUEYgU3RhY2sgVHJhY2luZyBSZXF1aXJlbWVudHMqKgoKT2theSwgc28gdG8gZ2V0IHRoaXMgQlBGIHN0YWNrIHRyYWNpbmcgd29ya2luZywgSSBkZWZpbml0ZWx5IG5lZWQgYENPTkZJR19CUEZfU1lTQ0FMTGAgYW5kIGBDT05GSUdfUEVSRl9FVkVOVFNgIGVuYWJsZWQuIE5vIHN1cnByaXNlcyB0aGVyZS4gSSBzaG91bGQgcHJvYmFibHkgZG91YmxlLWNoZWNrIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgY29uZmlndXJhdGlvbiBvcHRpb25zIHRoYXQgYXJlIHJlbGV2YW50IHdoaWxlIEkmIzM5O20gYXQgaXQsIGp1c3QgdG8gYmUgdGhvcm91Z2guCgpSaWdodCwgdGhlIGZ1bmN0aW9ucyB0aGF0IGhhdmUgYmVlbiBtb2RpZmllZCBhcmU6IGBicGZfZ2V0X3N0YWNraWRgLCBgYnBmX2dldF9zdGFja2lkX3BlYCwgYGJwZl9nZXRfc3RhY2tgLCBgYnBmX2dldF9zdGFja19zbGVlcGFibGVgLCBgYnBmX2dldF90YXNrX3N0YWNrYCwgYGJwZl9nZXRfdGFza19zdGFja19zbGVlcGFibGVgLCBhbmQgYGJwZl9nZXRfc3RhY2tfcGVgLiBUaGVzZSBhcmUgYWxsIEJQRiBoZWxwZXIgZnVuY3Rpb25zLCBzbyB0aGUgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gZmlndXJlIG91dCB3aGljaCBCUEYgcHJvZ3JhbSB0eXBlcyBzdXBwb3J0IHRoZXNlIHN0YWNrIHRyYWNlIGhlbHBlcnMuCgpgYnBmX2dldF9zdGFja2lkX3Byb3RvYCBsb29rcyBpbnRlcmVzdGluZywgdGhhdCYjMzk7cyB1c2VkIGluIGBrZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmNgIGFuZCBhbHNvIGBuZXQvY29yZS9maWx0ZXIuY2AsIHNvIHRoYXQmIzM5O3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50IGZvciBleHBsb3JpbmcgdGhlIHN1cHBvcnRlZCBwcm9ncmFtIHR5cGVzIGFuZCB0aGUgdHJhY2luZyBjYXBhYmlsaXRpZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjAgMTA6NTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnBmX2dldF9zdGFja2lkX3Byb3RvJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvYnBmLmg9Mzg3Mj1leHRlcm4gY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9nZXRfY3VycmVudF9jb21tX3Byb3RvO1xuaW5jbHVkZS9saW51eC9icGYuaDozODczOmV4dGVybiBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX2dldF9zdGFja2lkX3Byb3RvO1xuaW5jbHVkZS9saW51eC9icGYuaC0zODc0LWV4dGVybiBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX2dldF9zdGFja19wcm90bztcbi0tXG5pbmNsdWRlL2xpbnV4L2JwZi5oPTM4Nzc9ZXh0ZXJuIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfZ2V0X3Rhc2tfc3RhY2tfc2xlZXBhYmxlX3Byb3RvO1xuaW5jbHVkZS9saW51eC9icGYuaDozODc4OmV4dGVybiBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX2dldF9zdGFja2lkX3Byb3RvX3BlO1xuaW5jbHVkZS9saW51eC9icGYuaC0zODc5LWV4dGVybiBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX2dldF9zdGFja19wcm90b19wZTtcbi0tXG5rZXJuZWwvYnBmL3N0YWNrbWFwLmM9NjE5PUJQRl9DQUxMXzMoYnBmX2dldF9zdGFja2lkLCBzdHJ1Y3QgcHRfcmVncyAqLCByZWdzLCBzdHJ1Y3QgYnBmX21hcCAqLCBtYXAsXG4tLVxua2VybmVsL2JwZi9zdGFja21hcC5jLTY2MC1cbmtlcm5lbC9icGYvc3RhY2ttYXAuYzo2NjE6Y29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9nZXRfc3RhY2tpZF9wcm90byA9IHtcbmtlcm5lbC9icGYvc3RhY2ttYXAuYy02NjItXHQuZnVuY1x0XHQ9IGJwZl9nZXRfc3RhY2tpZCxcbi0tXG5rZXJuZWwvYnBmL3N0YWNrbWFwLmM9NjgyPUJQRl9DQUxMXzMoYnBmX2dldF9zdGFja2lkX3BlLCBzdHJ1Y3QgYnBmX3BlcmZfZXZlbnRfZGF0YV9rZXJuICosIGN0eCxcbi0tXG5rZXJuZWwvYnBmL3N0YWNrbWFwLmMtNzQwLVxua2VybmVsL2JwZi9zdGFja21hcC5jOjc0MTpjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX2dldF9zdGFja2lkX3Byb3RvX3BlID0ge1xua2VybmVsL2JwZi9zdGFja21hcC5jLTc0Mi1cdC5mdW5jXHRcdD0gYnBmX2dldF9zdGFja2lkX3BlLFxuLS1cbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYz0xMzQzPWtwcm9iZV9wcm9nX2Z1bmNfcHJvdG8oZW51bSBicGZfZnVuY19pZCBmdW5jX2lkLCBjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXG4tLVxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTEzNDgtXHRjYXNlIEJQRl9GVU5DX2dldF9zdGFja2lkOlxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jOjEzNDk6XHRcdHJldHVybiBcdTAwMjZicGZfZ2V0X3N0YWNraWRfcHJvdG87XG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMTM1MC1cdGNhc2UgQlBGX0ZVTkNfZ2V0X3N0YWNrOlxuLS1cbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYz0xNDI3PUJQRl9DQUxMXzMoYnBmX2dldF9zdGFja2lkX3RwLCB2b2lkICosIHRwX2J1ZmYsIHN0cnVjdCBicGZfbWFwICosIG1hcCxcbi0tXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMTQ0MC1cbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYzoxNDQxOnN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX2dldF9zdGFja2lkX3Byb3RvX3RwID0ge1xua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTE0NDItXHQuZnVuY1x0XHQ9IGJwZl9nZXRfc3RhY2tpZF90cCxcbi0tXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM9MTQ3MD10cF9wcm9nX2Z1bmNfcHJvdG8oZW51bSBicGZfZnVuY19pZCBmdW5jX2lkLCBjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXG4tLVxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTE0NzUtXHRjYXNlIEJQRl9GVU5DX2dldF9zdGFja2lkOlxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jOjE0NzY6XHRcdHJldHVybiBcdTAwMjZicGZfZ2V0X3N0YWNraWRfcHJvdG9fdHA7XG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMTQ3Ny1cdGNhc2UgQlBGX0ZVTkNfZ2V0X3N0YWNrOlxuLS1cbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYz0xNTc0PXBlX3Byb2dfZnVuY19wcm90byhlbnVtIGJwZl9mdW5jX2lkIGZ1bmNfaWQsIGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZylcbi0tXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMTU3OS1cdGNhc2UgQlBGX0ZVTkNfZ2V0X3N0YWNraWQ6XG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM6MTU4MDpcdFx0cmV0dXJuIFx1MDAyNmJwZl9nZXRfc3RhY2tpZF9wcm90b19wZTtcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0xNTgxLVx0Y2FzZSBCUEZfRlVOQ19nZXRfc3RhY2s6XG4tLVxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jPTE2NTY9QlBGX0NBTExfMyhicGZfZ2V0X3N0YWNraWRfcmF3X3RwLCBzdHJ1Y3QgYnBmX3Jhd190cmFjZXBvaW50X2FyZ3MgKiwgYXJncyxcbi0tXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMTY3Mi1cbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYzoxNjczOnN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX2dldF9zdGFja2lkX3Byb3RvX3Jhd190cCA9IHtcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0xNjc0LVx0LmZ1bmNcdFx0PSBicGZfZ2V0X3N0YWNraWRfcmF3X3RwLFxuLS1cbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYz0xNzA5PXJhd190cF9wcm9nX2Z1bmNfcHJvdG8oZW51bSBicGZfZnVuY19pZCBmdW5jX2lkLCBjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXG4tLVxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTE3MTQtXHRjYXNlIEJQRl9GVU5DX2dldF9zdGFja2lkOlxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jOjE3MTU6XHRcdHJldHVybiBcdTAwMjZicGZfZ2V0X3N0YWNraWRfcHJvdG9fcmF3X3RwO1xua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTE3MTYtXHRjYXNlIEJQRl9GVU5DX2dldF9zdGFjazpcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMCAxMDo1MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDMxMgoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDMyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHNpdHVhdGlvbjoKCioqVW5kZXJzdGFuZGluZyB0aGUgQ29udGV4dCBvZiBCUEYgVHJhY2UgRnVuY3Rpb25zKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGVzZSBmdW5jdGlvbnMsIGFuZCB0aGUgZmlyc3QgdGhpbmcgdGhhdCBqdW1wcyBvdXQgaXMgdGhhdCB0aGV5JiMzOTtyZSBuZXN0bGVkIHdpdGhpbiBga2VybmVsL3RyYWNlL2JwZl90cmFjZS5jYC4gVGhhdCB0ZWxscyBtZSB0aGlzIGlzIGFsbCByZWxhdGVkIHRvIHRyYWNpbmcsIHNwZWNpZmljYWxseSB1c2luZyBlQlBGLCBzaW5jZSB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoICYjMzQ7YnBmXF90cmFjZSYjMzQ7LiBUaGUgaW1wb3J0YW50IGZsYWcgaGVyZSBpcyBgQ09ORklHX0JQRl9FVkVOVFNgLiBJIGtub3cgZnJvbSBleHBlcmllbmNlIHRoYXQgdGhpcyBmbGFnIGVuYWJsZXMgdGhlIG1vcmUgYWR2YW5jZWQgdHJhY2luZyBjYXBhYmlsaXRpZXMgd2l0aGluIHRoZSBrZXJuZWwsIHNvIHRoZSBwcmVzZW5jZSBvZiB0aGVzZSBmdW5jdGlvbnMgaXMgZGlyZWN0bHkgdGllZCB0byBhIGNvbmZpZ3VyYXRpb24gdGhhdCBtYWtlcyBlQlBGLWJhc2VkIGV2ZW50IHRyYWNpbmcgYXZhaWxhYmxlLiBUaGlzIG1lYW5zIHdlJiMzOTtyZSBwcm9iYWJseSBkZWFsaW5nIHdpdGggaW5zdHJ1bWVudGF0aW9uIHBvaW50cyB0aGF0IGxldCB1c2Vyc3BhY2UgcHJvZ3JhbXMgdGFwIGludG8ga2VybmVsIGJlaGF2aW9yIGR5bmFtaWNhbGx5LCB3aGljaCBpcyBzb21ldGhpbmcgSSBkZWFsIHdpdGggb2Z0ZW4gaW4gbXkgY3VycmVudCB3b3JrLiBHb3QgaXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjAgMTA6NTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnBmX3RyYWNlLm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvdHJhY2UvTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL3RyYWNlL01ha2VmaWxlPTU0PUtDT1ZfSU5TVFJVTUVOVF90cmFjZV9pcnFzb2ZmLm8gOj0gblxua2VybmVsL3RyYWNlL01ha2VmaWxlLTU1LVxua2VybmVsL3RyYWNlL01ha2VmaWxlOjU2OkNGTEFHU19icGZfdHJhY2UubyA6PSAtSSQoc3JjKVxua2VybmVsL3RyYWNlL01ha2VmaWxlLTU3LVxuLS1cbmtlcm5lbC90cmFjZS9NYWtlZmlsZT0xMDk9b2JqLSQoQ09ORklHX1VTRVJfRVZFTlRTKSAmIzQzOz0gdHJhY2VfZXZlbnRzX3VzZXIub1xua2VybmVsL3RyYWNlL01ha2VmaWxlOjExMDpvYmotJChDT05GSUdfQlBGX0VWRU5UUykgJiM0Mzs9IGJwZl90cmFjZS5vXG5rZXJuZWwvdHJhY2UvTWFrZWZpbGUtMTExLW9iai0kKENPTkZJR19LUFJPQkVfRVZFTlRTKSAmIzQzOz0gdHJhY2Vfa3Byb2JlLm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMCAxMDo1MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDcyMAoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDQxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipDaGVja2luZyBmb3IgQlBGIEV2ZW50IFN1cHBvcnQqKgoKQWxyaWdodCwgcmlnaHQgb2ZmIHRoZSBiYXQsIHdlJiMzOTtyZSB0YWxraW5nIGFib3V0IG5lZWRpbmcgYENPTkZJR19CUEZfRVZFTlRTYC4gVGhhdCYjMzk7cyBhIGNydWNpYWwgc3RhcnRpbmcgcG9pbnQuIE5vdywgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dCBhbmQgaG93IGl0JiMzOTtzIGJlaW5nIHVzZWQsIEkgd2FudCB0byBzZWUgaG93IGBicGZfZ2V0X3N0YWNraWRfcHJvdG9gIGlzIGJlaW5nIGxldmVyYWdlZC4gTXkgaHVuY2ggaXMgaXQmIzM5O3MgcHJvYmFibHkgcmVsYXRlZCB0byB0aGF0IGBDT05GSUdfQlBGX0VWRU5UU2AgcmVxdWlyZW1lbnQuIExldCYjMzk7cyBkaXZlIGludG8gYG5ldC9jb3JlL2ZpbHRlci5jYC4gSSYjMzk7bGwgd2FudCB0byBzZWUgaWYgdGhpcyBgYnBmX2dldF9zdGFja2lkX3Byb3RvYCBmdW5jdGlvbiBpcyBiZWluZyBjYWxsZWQgaW4gYW55IHdheS4gU2VlaW5nIGhvdyB0aGF0JiMzOTtzIHRpZWQgaW50byB0aGUgbmV0ZmlsdGVyIGZyYW1ld29yaywgb3Igb3RoZXIgbmV0d29ya2luZyBjb21wb25lbnRzIHdpbGwgZ2l2ZSB1cyBhIHN0cm9uZyBncm91bmRpbmcgaW4gdGhlIHByb2JsZW0gc3BhY2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIwIDEwOjUwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnBmX2dldF9zdGFja2lkX3Byb3RvJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2NvcmUvZmlsdGVyLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMCAxMDo1MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDk5MwoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDMyNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgQlBGIFN0YWNrIFRyYWNlIEltcGxlbWVudGF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gZGl2aW5nIGludG8gdGhpcyBCUEYgc3RhY2sgdHJhY2UgaW1wbGVtZW50YXRpb24sIGFuZCBpdCYjMzk7cyBsb29raW5nIGxpa2UgdGhlIHJlYWwgYWN0aW9uIGlzIGhhcHBlbmluZyB3aXRoaW4gdGhlIEJQRiBzdGFja21hcCBhbmQgc3RhY2tpZCBoZWxwZXJzLCBub3Qgd2hlcmUgSSBpbml0aWFsbHkgdGhvdWdodC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGUgcmVsZXZhbnQga2VybmVsIGNvbmZpZ3VyYXRpb25zIGFyZSBlbmFibGVkOiBgQlBGX1NZU0NBTExgLCBgUEVSRl9FVkVOVFNgLCBhbmQgYEJQRl9FVkVOVFNgLiBNeSBmb2N1cyBuZWVkcyB0byBiZSBvbiB0aGVzZSBmdW5jdGlvbnM6IGBicGZfZ2V0X3N0YWNraWRgLCBgYnBmX2dldF9zdGFja2lkX3BlYCwgYGJwZl9nZXRfc3RhY2tgLCBgYnBmX2dldF9zdGFja19zbGVlcGFibGVgLCBgYnBmX2dldF90YXNrX3N0YWNrYCwgYGJwZl9nZXRfdGFza19zdGFja19zbGVlcGFibGVgLCBhbmQgYGJwZl9nZXRfc3RhY2tfcGVgLgoKQWhhLCBgYnBmX2dldF9zdGFja2lkYCBpcyBhY3R1YWxseSBhIEJQRiBoZWxwZXIgaXRzZWxmLCBub3QgYSBkaXJlY3Qga2VybmVsIGZ1bmN0aW9uLiBUaGUgKmtlcm5lbCogZnVuY3Rpb25zIHRoYXQgcGVyZm9ybSB0aGUgd29yayBhcmUgdGhvc2UgSSBqdXN0IGxpc3RlZC4gTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2UgaGVscGVycyBhcmUgYWN0dWFsbHkgZXhwb3NlZCB0byBCUEYgcHJvZ3JhbXMuIEFyZSB0aGV5IGV4cG9ydGVkIHN5bWJvbHMsIG9yIGFyZSB0aGV5IGRlZmluZWQgdXNpbmcgc3RhdGljIGZ1bmN0aW9ucyBvciBCUEZfQ0FMTCBtYWNyb3M/IEkgc2VlIHRoZXkmIzM5O3JlIGRlZmluZWQgd2l0aCBgQlBGX0NBTExfM2AgYW5kIGBCUEZfQ0FMTF80YC4gVGhpcyBtZWFucyB0aGUgZnVuY3Rpb24gbmFtZXMgQlBGIHByb2dyYW1zIGFjdHVhbGx5IHNlZSBhcmUgbGlrZWx5IGBfX19fYnBmX2dldF9zdGFja2lkYCBvciBgYnBmX2dldF9zdGFja2lkYC4gTmV4dCwgSSBuZWVkIHRvIGNoZWNrIHRoZSBkZWZpbml0aW9uIG9mIGBCUEZfQ0FMTF8zYCB0byBmdWxseSB1bmRlcnN0YW5kIGhvdyB0aGVzZSBmdW5jdGlvbnMgYXJlIGJlaW5nIGludm9rZWQgZnJvbSBCUEYgcHJvZ3JhbXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIwIDEwOjUwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGVmaW5lIEJQRl9DQUxMXyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvYnBmLmgmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMCAxMDo1MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTY5OQoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDE0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHN1bW1hcml6ZWQgdGhvdWdodCBwcm9jZXNzLCBwcmVzZW50ZWQgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIGl0OgoKKipEaWdnaW5nIGludG8gdGhlIExpbnV4IEtlcm5lbCBGaWx0ZXJpbmcgTGFuZHNjYXBlKioKCkFscmlnaHQsIEkgbmVlZCB0byBnZXQgc3RhcnRlZCBvbiB0aGlzIGZpbHRlcmluZyB0YXNrLiBXaGVyZSB3b3VsZCBJIGJlZ2luPyBHaXZlbiB0aGUgZ2VuZXJhbCBuYXR1cmUgb2YgZmlsdGVyaW5nIHdpdGhpbiB0aGUga2VybmVsLCBJJiMzOTttIHByZXR0eSBzdXJlIEkgc2hvdWxkIHN0YXJ0IGJ5IGxvb2tpbmcgYXQgY29yZSBkZWZpbml0aW9ucyBhbmQgc3RydWN0dXJlcy4gVGhhdCBtYWtlcyBgaW5jbHVkZS9saW51eC9maWx0ZXIuaGAgYSBwcmltZSBjYW5kaWRhdGUuIExldCYjMzk7cyBzZWUgd2hhdCBnb29kaWVzIGFyZSBpbiB0aGVyZS4gSSYjMzk7bSBleHBlY3RpbmcgdG8gZmluZCBmb3VuZGF0aW9uYWwgZWxlbWVudHMsIHBlcmhhcHMgc29tZSBhYnN0cmFjdCBpbnRlcmZhY2VzLCBhbmQgZGVmaW5pdGVseSBzb21lIGtleSBkYXRhIHN0cnVjdHVyZXMuIFRoaXMgaXMgdGhlIGxvZ2ljYWwgc3RhcnRpbmcgcG9pbnQgZm9yIHVuZGVyc3RhbmRpbmcgaG93IHRoZSBrZXJuZWwgaGFuZGxlcyBnZW5lcmljIGZpbHRlcmluZywgYW5kIGhvcGVmdWxseSBpdCYjMzk7bGwgZ2l2ZSBtZSBhIHN0cm9uZyBmb3VuZGF0aW9uLiBMZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3MgaW4gdGhlcmUuLi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjAgMTA6NTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGVmaW5lIEJQRl9DQUxMXyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvZmlsdGVyLmgmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9maWx0ZXIuaD00MD1zdHJ1Y3QgY3RsX3RhYmxlX2hlYWRlcjtcbi0tXG5pbmNsdWRlL2xpbnV4L2ZpbHRlci5oLTg1LS8qIHVudXNlZCBvcGNvZGUgdG8gbWFyayBjYWxsIHRvIGludGVycHJldGVyIHdpdGggYXJndW1lbnRzICovXG5pbmNsdWRlL2xpbnV4L2ZpbHRlci5oOjg2OiNkZWZpbmUgQlBGX0NBTExfQVJHU1x0MHhlMFxuaW5jbHVkZS9saW51eC9maWx0ZXIuaC04Ny1cbi0tXG5pbmNsdWRlL2xpbnV4L2ZpbHRlci5oPTI2MD1zdGF0aWMgaW5saW5lIGJvb2wgaW5zbl9pc19jYXN0X3VzZXIoY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuKVxuLS1cbmluY2x1ZGUvbGludXgvZmlsdGVyLmgtNDU3LVxuaW5jbHVkZS9saW51eC9maWx0ZXIuaDo0NTg6I2RlZmluZSBCUEZfQ0FMTF9SRUwoVEdUKVx0XHRcdFx0XHRcXFxuaW5jbHVkZS9saW51eC9maWx0ZXIuaC00NTktXHQoKHN0cnVjdCBicGZfaW5zbikge1x0XHRcdFx0XHRcXFxuLS1cbmluY2x1ZGUvbGludXgvZmlsdGVyLmgtNDY3LVxuaW5jbHVkZS9saW51eC9maWx0ZXIuaDo0Njg6I2RlZmluZSBCUEZfQ0FMTF9JTU0oeClcdCgodm9pZCAqKSh4KSAtICh2b2lkICopX19icGZfY2FsbF9iYXNlKVxuaW5jbHVkZS9saW51eC9maWx0ZXIuaC00NjktXG4tLVxuaW5jbHVkZS9saW51eC9maWx0ZXIuaC00NzktXG5pbmNsdWRlL2xpbnV4L2ZpbHRlci5oOjQ4MDojZGVmaW5lIEJQRl9DQUxMX0tGVU5DKE9GRiwgSU1NKVx0XHRcdFx0XFxcbmluY2x1ZGUvbGludXgvZmlsdGVyLmgtNDgxLVx0KChzdHJ1Y3QgYnBmX2luc24pIHtcdFx0XHRcdFx0XFxcbi0tXG5pbmNsdWRlL2xpbnV4L2ZpbHRlci5oLTYxMC1cbmluY2x1ZGUvbGludXgvZmlsdGVyLmg6NjExOiNkZWZpbmUgQlBGX0NBTExfeCh4LCBhdHRyLCBuYW1lLCAuLi4pXHRcdFx0XHRcdCAgICAgICBcXFxuaW5jbHVkZS9saW51eC9maWx0ZXIuaC02MTItXHRzdGF0aWMgX19hbHdheXNfaW5saW5lXHRcdFx0XHRcdFx0ICAgICAgIFxcXG4tLVxuaW5jbHVkZS9saW51eC9maWx0ZXIuaC02MjMtI2RlZmluZSBfX05PQVRUUlxuaW5jbHVkZS9saW51eC9maWx0ZXIuaDo2MjQ6I2RlZmluZSBCUEZfQ0FMTF8wKG5hbWUsIC4uLilcdEJQRl9DQUxMX3goMCwgX19OT0FUVFIsIG5hbWUsIF9fVkFfQVJHU19fKVxuaW5jbHVkZS9saW51eC9maWx0ZXIuaDo2MjU6I2RlZmluZSBCUEZfQ0FMTF8xKG5hbWUsIC4uLilcdEJQRl9DQUxMX3goMSwgX19OT0FUVFIsIG5hbWUsIF9fVkFfQVJHU19fKVxuaW5jbHVkZS9saW51eC9maWx0ZXIuaDo2MjY6I2RlZmluZSBCUEZfQ0FMTF8yKG5hbWUsIC4uLilcdEJQRl9DQUxMX3goMiwgX19OT0FUVFIsIG5hbWUsIF9fVkFfQVJHU19fKVxuaW5jbHVkZS9saW51eC9maWx0ZXIuaDo2Mjc6I2RlZmluZSBCUEZfQ0FMTF8zKG5hbWUsIC4uLilcdEJQRl9DQUxMX3goMywgX19OT0FUVFIsIG5hbWUsIF9fVkFfQVJHU19fKVxuaW5jbHVkZS9saW51eC9maWx0ZXIuaDo2Mjg6I2RlZmluZSBCUEZfQ0FMTF80KG5hbWUsIC4uLilcdEJQRl9DQUxMX3goNCwgX19OT0FUVFIsIG5hbWUsIF9fVkFfQVJHU19fKVxuaW5jbHVkZS9saW51eC9maWx0ZXIuaDo2Mjk6I2RlZmluZSBCUEZfQ0FMTF81KG5hbWUsIC4uLilcdEJQRl9DQUxMX3goNSwgX19OT0FUVFIsIG5hbWUsIF9fVkFfQVJHU19fKVxuaW5jbHVkZS9saW51eC9maWx0ZXIuaC02MzAtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIwIDEwOjUwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyNjA1CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogNDA5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBCUEYgU3RhY2sgVHJhY2UgRnVuY3Rpb25hbGl0eSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgaG93IHRoZXNlIGBCUEZfQ0FMTF94YCBjYWxscyB3b3JrLiBUaGV5JiMzOTtyZSBnZW5lcmF0aW5nIG5hbWVzLCBzcGVjaWZpY2FsbHkgYF9fX19uYW1lYCBhbmQgYG5hbWVgIC0gdGhhdCYjMzk7cyBzdGFuZGFyZCBmb3IgdGhpcyBzb3J0IG9mIHRoaW5nLiBUaGUgYWN0dWFsIGZ1bmN0aW9uIGNhbGxzIGFyZTogYGJwZl9nZXRfc3RhY2tpZGAsIGBicGZfZ2V0X3N0YWNraWRfcGVgLCBgYnBmX2dldF9zdGFja2AsIGBicGZfZ2V0X3N0YWNrX3NsZWVwYWJsZWAsIGBicGZfZ2V0X3Rhc2tfc3RhY2tgLCBgYnBmX2dldF90YXNrX3N0YWNrX3NsZWVwYWJsZWAsIGFuZCBgYnBmX2dldF9zdGFja19wZWAuIFByZXR0eSBzdGFuZGFyZCBzdGFjayB0cmFjZSBjb2xsZWN0aW9uIHJvdXRpbmVzLgoKV2FpdCwgbG9va2luZyBkZWVwZXIsIHRoaXMgcGF0Y2ggYWxzbyBpbnRyb2R1Y2VzIGEgYnVuY2ggb2Ygc3RhdGljIGZ1bmN0aW9uczogYHN0YWNraWRfaW5pdGAsIGBzdGFja2lkX2Zhc3RwYXRoYCwgYHN0YWNraWRfbmV3X2J1Y2tldGAsIGBzdGFja2lkX2luc3RhbGxgLCBgY2FsbGNoYWluX3N0b3JlYCwgYGNhbGxjaGFpbl9maW5hbGl6ZWAsIGFuZCBgX19icGZfZ2V0X3N0YWNrX3BlYCwgYW5kIGFsc28gYF9fYnBmX2dldF9zdGFja2AuIFRoZXNlIGFyZSBpbnRlcmVzdGluZy4gU2luY2UgdGhleSYjMzk7cmUgc3RhdGljLCB0aGV5JiMzOTtyZSBnb29kIGNhbmRpZGF0ZXMgdG8gaW5jbHVkZSB3aXRoaW4gYEZvY3VzU3ltYm9sc2AgYXMgdGhleSBtYXkgbm90IGJlIGlubGluZWQuCgpIb3dldmVyLCB0aGUgcHJpbWFyeSBlbnRyeSBwb2ludHMgYXJlIGNsZWFybHkgYGJwZl9nZXRfc3RhY2tpZGAgYW5kIHRoZSBvdGhlcnMuCgpBbHJpZ2h0LCBsZXQmIzM5O3MgbWFrZSBhIGNvbXBsZXRlIGxpc3Qgb2YgdGhlIGVudHJ5IHBvaW50cyBhbmQgdGhlIHN0YXRpYyBmdW5jdGlvbnM6CgoqICAgYGJwZl9nZXRfc3RhY2tpZGAKKiAgIGBicGZfZ2V0X3N0YWNraWRfcGVgCiogICBgYnBmX2dldF9zdGFja2AKKiAgIGBicGZfZ2V0X3N0YWNrX3NsZWVwYWJsZWAKKiAgIGBicGZfZ2V0X3Rhc2tfc3RhY2tgCiogICBgYnBmX2dldF90YXNrX3N0YWNrX3NsZWVwYWJsZWAKKiAgIGBicGZfZ2V0X3N0YWNrX3BlYAoqICAgYHN0YWNraWRfaW5pdGAKKiAgIGBzdGFja2lkX2Zhc3RwYXRoYAoqICAgYHN0YWNraWRfbmV3X2J1Y2tldGAKKiAgIGBzdGFja2lkX2luc3RhbGxgCiogICBgY2FsbGNoYWluX3N0b3JlYAoqICAgYGNhbGxjaGFpbl9maW5hbGl6ZWAKKiAgIGBfX2JwZl9nZXRfc3RhY2tfcGVgCiogICBgX19icGZfZ2V0X3N0YWNrYAoKTm93LCByZWdhcmRpbmcgdGhlIG5lY2Vzc2FyeSBjb25maWd1cmF0aW9ucywgSSBuZWVkIHRvIGNoZWNrIGlmIGp1c3QgYENPTkZJR19CUEZfU1lTQ0FMTGAsIGBDT05GSUdfUEVSRl9FVkVOVFNgLCBhbmQgYENPTkZJR19CUEZfRVZFTlRTYCBhcmUgZW5vdWdoLiBZZXAsIHRob3NlIHNlZW0gdG8gY292ZXIgaXQuIEkmIzM5O2xsIGRvdWJsZS1jaGVjayB0byBiZSBjb21wbGV0ZWx5IHN1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIwIDEwOjUwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0NPTkZJR18mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvYnBmL3N0YWNrbWFwLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9zdGFja21hcC5jPTI2Nz1zdHJ1Y3Qgc3RhY2tfbWFwX3ZtYV9sb2NrIHtcbi0tXG5rZXJuZWwvYnBmL3N0YWNrbWFwLmMtMjc0LSAqXG5rZXJuZWwvYnBmL3N0YWNrbWFwLmM6Mjc1OiAqIFdpdGggQ09ORklHX1BFUl9WTUFfTE9DSz15IHRoaXMgcmV0dXJucyBhIFZNQSB3aXRoIGl0cyBwZXItVk1BIHJlYWRcbmtlcm5lbC9icGYvc3RhY2ttYXAuYy0yNzYtICogbG9jayBoZWxkIGFuZCBtbWFwX2xvY2sgZHJvcHBlZCwgc28gdGhlIGNhbGxlciBtYXkgc2xlZXAuXG5rZXJuZWwvYnBmL3N0YWNrbWFwLmMtMjc3LSAqXG5rZXJuZWwvYnBmL3N0YWNrbWFwLmM6Mjc4OiAqIFdpdGggQ09ORklHX1BFUl9WTUFfTE9DSz1uIGl0IHJldHVybnMgYSBWTUEgd2l0aCBtbWFwX2xvY2sgc3RpbGxcbmtlcm5lbC9icGYvc3RhY2ttYXAuYy0yNzktICogaGVsZDsgdGhlIGNhbGxlciBtdXN0IHNuYXBzaG90IGFueSBmaWVsZHMgaXQgbmVlZHMgYW5kIHBpbiB2bV9maWxlXG4tLVxua2VybmVsL2JwZi9zdGFja21hcC5jPTI4Nj1zdGFja19tYXBfbG9ja192bWEoc3RydWN0IHN0YWNrX21hcF92bWFfbG9jayAqbG9jaywgdW5zaWduZWQgbG9uZyBpcClcbi0tXG5rZXJuZWwvYnBmL3N0YWNrbWFwLmMtMjkwLVxua2VybmVsL2JwZi9zdGFja21hcC5jOjI5MTpcdC8qIG5vb3AgdW5kZXIgIUNPTkZJR19QRVJfVk1BX0xPQ0sgKi9cbmtlcm5lbC9icGYvc3RhY2ttYXAuYy0yOTItXHR2bWEgPSBsb2NrX3ZtYV91bmRlcl9yY3UobW0sIGlwKTtcbi0tXG5rZXJuZWwvYnBmL3N0YWNrbWFwLmMtMzEwLVxua2VybmVsL2JwZi9zdGFja21hcC5jOjMxMTojaWZkZWYgQ09ORklHX1BFUl9WTUFfTE9DS1xua2VybmVsL2JwZi9zdGFja21hcC5jLTMxMi1cdGlmICghdm1hX3N0YXJ0X3JlYWRfbG9ja2VkKHZtYSkpIHtcbi0tXG5rZXJuZWwvYnBmL3N0YWNrbWFwLmM9MzIzPXN0YXRpYyB2b2lkIHN0YWNrX21hcF91bmxvY2tfdm1hKHN0cnVjdCBzdGFja19tYXBfdm1hX2xvY2sgKmxvY2spXG5rZXJuZWwvYnBmL3N0YWNrbWFwLmMtMzI0LXtcbmtlcm5lbC9icGYvc3RhY2ttYXAuYzozMjU6I2lmZGVmIENPTkZJR19QRVJfVk1BX0xPQ0tcbmtlcm5lbC9icGYvc3RhY2ttYXAuYy0zMjYtXHR2bWFfZW5kX3JlYWQobG9jay1cdTAwM2V2bWEpO1xuLS1cbmtlcm5lbC9icGYvc3RhY2ttYXAuYz00NzE9Z2V0X2NhbGxjaGFpbl9lbnRyeV9mb3JfdGFzayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssIHUzMiBtYXhfZGVwdGgpXG5rZXJuZWwvYnBmL3N0YWNrbWFwLmMtNDcyLXtcbmtlcm5lbC9icGYvc3RhY2ttYXAuYzo0NzM6I2lmZGVmIENPTkZJR19TVEFDS1RSQUNFXG5rZXJuZWwvYnBmL3N0YWNrbWFwLmMtNDc0LVx0c3RydWN0IHBlcmZfY2FsbGNoYWluX2VudHJ5ICplbnRyeTtcbi0tXG5rZXJuZWwvYnBmL3N0YWNrbWFwLmMtNTAxLVx0cmV0dXJuIGVudHJ5O1xua2VybmVsL2JwZi9zdGFja21hcC5jOjUwMjojZWxzZSAvKiBDT05GSUdfU1RBQ0tUUkFDRSAqL1xua2VybmVsL2JwZi9zdGFja21hcC5jLTUwMy1cdHJldHVybiBOVUxMO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMCAxMDo1MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDI1MwoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDQ1NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipSZXZpZXdpbmcgQlBGIFN0YWNrIFRyYWNlIENvbmZpZ3VyYXRpb24gYW5kIFN5bWJvbHMqKgoKT2theSwgc28gSSYjMzk7bSB0aGlua2luZyB0aHJvdWdoIHRoaXMgc3RhY2sgdHJhY2UgYnVzaW5lc3MgZm9yIEJQRi4gUmlnaHQsIEkgbmVlZCBgQ09ORklHX1NUQUNLVFJBQ0VgIGZvciBgZ2V0X2NhbGxjaGFpbl9lbnRyeV9mb3JfdGFza2AgdG8gd29yay4gVGhhdCYjMzk7cyBmdW5kYW1lbnRhbCwgYW5kIHRoYXQsIGluIHR1cm4sIGlzIHVzZWQgYnkgYGJwZl9nZXRfdGFza19zdGFja2AgYW5kIGBicGZfZ2V0X3Rhc2tfc3RhY2tfc2xlZXBhYmxlYC4gSXQmIzM5O3MgcHJldHR5IHN0YW5kYXJkIHRvIGhhdmUgYENPTkZJR19TVEFDS1RSQUNFYCBlbmFibGVkLCBidXQgaXTigJlzIHN0aWxsIHNtYXJ0IHRvIHNwZWNpZnkgaXQgZXhwbGljaXRseSB0byBtYWtlIHN1cmUgZXZlcnl0aGluZyBsaW5lcyB1cC4gTGV0JiMzOTtzIG1ha2Ugc3VyZSB0aGVyZSBhcmVuJiMzOTt0IGFueSBvdGhlciBnb3RjaGFzLiBBaCB5ZXMsIGBDT05GSUdfQlBGX1NZU0NBTExgLCBgQ09ORklHX1BFUkZfRVZFTlRTYCwgYENPTkZJR19CUEZfRVZFTlRTYCwgYW5kIGBDT05GSUdfU1RBQ0tUUkFDRWAgYXJlIHRoZSBrZXkgb25lcyB0byB3YXRjaCBvdXQgZm9yLgoKTm93LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoZXNlIGBGb2N1c1N5bWJvbHNgLiBUaGUgcGF0Y2ggaXMgdG91Y2hpbmcgYGtlcm5lbC9icGYvc3RhY2ttYXAuY2AsIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQmIzM5O3MgYmVpbmcgY2hhbmdlZCBpbiB0aGF0IGFyZWEuIEkmIzM5O20gc2VlaW5nIGZ1bmN0aW9ucyBsaWtlOiBgc3RhY2tpZF9pbml0YCwgYHN0YWNraWRfZmFzdHBhdGhgLCBgc3RhY2tpZF9uZXdfYnVja2V0YCwgYHN0YWNraWRfaW5zdGFsbGAsIGBicGZfZ2V0X3N0YWNraWRgLCBgYnBmX2dldF9zdGFja2lkX3BlYCwgYGNhbGxjaGFpbl9zdG9yZWAsIGBjYWxsY2hhaW5fZmluYWxpemVgLCBgX19icGZfZ2V0X3N0YWNrYCwgYGJwZl9nZXRfc3RhY2tgLCBgYnBmX2dldF9zdGFja19zbGVlcGFibGVgLCBgX19icGZfZ2V0X3Rhc2tfc3RhY2tgLCBgYnBmX2dldF90YXNrX3N0YWNrYCwgYGJwZl9nZXRfdGFza19zdGFja19zbGVlcGFibGVgLCBgX19icGZfZ2V0X3N0YWNrX3BlYCwgYW5kIGBicGZfZ2V0X3N0YWNrX3BlYC4KClNvbWUgb2YgdGhlc2UgYXJlIHN0YXRpYywgb3RoZXJzIGFyZSBCUEZfQ0FMTCBtYWNyb3MsIHdoaWNoIG1lYW5zIHRoZXkmIzM5O3JlIHdyYXBwZXIgZnVuY3Rpb25zLiBUaGUgcXVlc3Rpb24gbm93IGlzIHdoZXRoZXIgdGhlIHZpc2libGUgbmFtZSwgYGJwZl9nZXRfc3RhY2tpZGAsIGlzIHRoZSBhY3R1YWwgZnVuY3Rpb24gbmFtZS4gTGV0JiMzOTtzIGRpZyBkZWVwZXIuIFllcCwgaXQgc2VlbXMgbGlrZSBgQlBGX0NBTExfMyhicGZfZ2V0X3N0YWNraWQsIC4uLilgIGRvZXMgaW5kZWVkIGdlbmVyYXRlIGJvdGggYGJwZl9nZXRfc3RhY2tpZGAgYW5kIGBfX19fYnBmX2dldF9zdGFja2lkYC4gU28sIGBicGZfZ2V0X3N0YWNraWRgICppcyogYSB2YWxpZCBzeW1ib2wgYXMgZmFyIGFzIHRoZSBrZXJuZWwgaXMgY29uY2VybmVkLCBhbHRob3VnaCBpdCYjMzk7cyBhY3RpbmcgYXMgYSB3cmFwcGVyLiBUaGUgY29yZSBsb2dpYyBpcyBsaWtlbHkgcmVzaWRpbmcgaW4gYF9fX19icGZfZ2V0X3N0YWNraWRgLCB0aGUgaGlkZGVuIGZ1bmN0aW9uLiBHb3R0YSBkb3VibGUtY2hlY2sgYGluY2x1ZGUvbGludXgvZmlsdGVyLmhgIGFnYWluLCBqdXN0IHRvIGJlIHN1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIwIDEwOjUwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RlZmluZSBCUEZfQ0FMTF94JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9maWx0ZXIuaCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2ZpbHRlci5oPTI2MD1zdGF0aWMgaW5saW5lIGJvb2wgaW5zbl9pc19jYXN0X3VzZXIoY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuKVxuLS1cbmluY2x1ZGUvbGludXgvZmlsdGVyLmgtNjEwLVxuaW5jbHVkZS9saW51eC9maWx0ZXIuaDo2MTE6I2RlZmluZSBCUEZfQ0FMTF94KHgsIGF0dHIsIG5hbWUsIC4uLilcdFx0XHRcdFx0ICAgICAgIFxcXG5pbmNsdWRlL2xpbnV4L2ZpbHRlci5oLTYxMi1cdHN0YXRpYyBfX2Fsd2F5c19pbmxpbmVcdFx0XHRcdFx0XHQgICAgICAgXFxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjAgMTA6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTU0MDgKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAxNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIHRoZSBCUEZfQ0FMTF94IE1hY3JvKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBob3cgYEJQRl9DQUxMX3hgIGlzIGRlZmluZWQuIEl0JiMzOTtzIHRpbWUgdG8gZGlnIGludG8gdGhlIG1hY3JvIGRlZmluaXRpb24sIGFzIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSB1bmRlcmx5aW5nIG1lY2hhbmlzbS4gSSBzdXNwZWN0IEkgbWlnaHQgYmUgZGVhbGluZyB3aXRoIGVpdGhlciBhIGhlbHBlciBmdW5jdGlvbiBvciBzb21lIGtpbmQgb2YgaW5zdHJ1Y3Rpb24gZW5jb2RpbmcsIG9yIHBlcmhhcHMgZXZlbiBhIGxheWVyIHRoYXQgYWJzdHJhY3RzIGtlcm5lbCB2ZXJzaW9ucy4gSSYjMzk7bSBlc3BlY2lhbGx5IGtlZW4gdG8gdW5kZXJzdGFuZCBob3cgdGhlIGFyZ3VtZW50cyBhcmUgaGFuZGxlZCDigJMgYXJlIHRoZXkgZGlyZWN0bHkgZW5jb2RlZCwgcGFzc2VkIHRocm91Z2ggcmVnaXN0ZXJzLCBvciBwZXJoYXBzIGEgY29tYmluYXRpb24/IEkgbmVlZCB0byBxdWlja2x5IGdyYXNwIGl0cyByb2xlIHdpdGhpbiB0aGUgYnJvYWRlciBCUEYgY29udGV4dCwgYW5kIGZpZ3VyZSBvdXQgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSBpbnN0cnVjdGlvbiBzZXQgYW5kIHZlcmlmaWVyLiBUaGUgc3BlY2lmaWNzIGFyZSBrZXkgaGVyZTogaXMgaXQgYSB3cmFwcGVyIGZvciBhIGhhcmRjb2RlZCBvcGNvZGUsIG9yIGEgbW9yZSBkeW5hbWljIGNvbnN0cnVjdD8gVGltZSB0byBzdGFydCB0cmFjaW5nIHRocm91Z2ggdGhlIGNvZGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIwIDEwOjUwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9maWx0ZXIuaCYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDYxMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNjEwOlx0XG4gNjExOlx0I2RlZmluZSBCUEZfQ0FMTF94KHgsIGF0dHIsIG5hbWUsIC4uLilcdFx0XHRcdFx0ICAgICAgIFxcXG4gNjEyOlx0XHRzdGF0aWMgX19hbHdheXNfaW5saW5lXHRcdFx0XHRcdFx0ICAgICAgIFxcXG4gNjEzOlx0XHR1NjQgX19fXyMjbmFtZShfX0JQRl9NQVAoeCwgX19CUEZfREVDTF9BUkdTLCBfX0JQRl9WLCBfX1ZBX0FSR1NfXykpOyAgIFxcXG4gNjE0Olx0XHR0eXBlZGVmIHU2NCAoKmJ0Zl8jI25hbWUpKF9fQlBGX01BUCh4LCBfX0JQRl9ERUNMX0FSR1MsIF9fQlBGX1YsIF9fVkFfQVJHU19fKSk7IFxcXG4gNjE1Olx0XHRhdHRyIHU2NCBuYW1lKF9fQlBGX1JFRyh4LCBfX0JQRl9ERUNMX1JFR1MsIF9fQlBGX04sIF9fVkFfQVJHU19fKSk7ICAgIFxcXG4gNjE2Olx0XHRhdHRyIHU2NCBuYW1lKF9fQlBGX1JFRyh4LCBfX0JQRl9ERUNMX1JFR1MsIF9fQlBGX04sIF9fVkFfQVJHU19fKSkgICAgIFxcXG4gNjE3Olx0XHR7XHRcdFx0XHRcdFx0XHRcdCAgICAgICBcXFxuIDYxODpcdFx0XHRyZXR1cm4gKChidGZfIyNuYW1lKV9fX18jI25hbWUpKF9fQlBGX01BUCh4LF9fQlBGX0NBU1QsX19CUEZfTixfX1ZBX0FSR1NfXykpO1xcXG4gNjE5Olx0XHR9XHRcdFx0XHRcdFx0XHRcdCAgICAgICBcXFxuIDYyMDpcdFx0c3RhdGljIF9fYWx3YXlzX2lubGluZVx0XHRcdFx0XHRcdCAgICAgICBcXFxuIDYyMTpcdFx0dTY0IF9fX18jI25hbWUoX19CUEZfTUFQKHgsIF9fQlBGX0RFQ0xfQVJHUywgX19CUEZfViwgX19WQV9BUkdTX18pKVxuIDYyMjpcdFxuIDYyMzpcdCNkZWZpbmUgX19OT0FUVFJcbiA2MjQ6XHQjZGVmaW5lIEJQRl9DQUxMXzAobmFtZSwgLi4uKVx0QlBGX0NBTExfeCgwLCBfX05PQVRUUiwgbmFtZSwgX19WQV9BUkdTX18pXG4gNjI1Olx0I2RlZmluZSBCUEZfQ0FMTF8xKG5hbWUsIC4uLilcdEJQRl9DQUxMX3goMSwgX19OT0FUVFIsIG5hbWUsIF9fVkFfQVJHU19fKVxuIDYyNjpcdCNkZWZpbmUgQlBGX0NBTExfMihuYW1lLCAuLi4pXHRCUEZfQ0FMTF94KDIsIF9fTk9BVFRSLCBuYW1lLCBfX1ZBX0FSR1NfXylcbiA2Mjc6XHQjZGVmaW5lIEJQRl9DQUxMXzMobmFtZSwgLi4uKVx0QlBGX0NBTExfeCgzLCBfX05PQVRUUiwgbmFtZSwgX19WQV9BUkdTX18pXG4gNjI4Olx0I2RlZmluZSBCUEZfQ0FMTF80KG5hbWUsIC4uLilcdEJQRl9DQUxMX3goNCwgX19OT0FUVFIsIG5hbWUsIF9fVkFfQVJHU19fKVxuIDYyOTpcdCNkZWZpbmUgQlBGX0NBTExfNShuYW1lLCAuLi4pXHRCUEZfQ0FMTF94KDUsIF9fTk9BVFRSLCBuYW1lLCBfX1ZBX0FSR1NfXylcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjAgMTA6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTYyNjEKCQkJCQkJCW91dHB1dDogMzA1CgkJCQkJCQl0aG91Z2h0czogOTcwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgU3RhY2ttYXAgUmVmYWN0b3JpbmcqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gRnJvbSB3aGF0IEkmIzM5O20gc2VlaW5nLCBgbmFtZWAgaXMgYWN0aW5nIGFzIHRoZSBwdWJsaWNseS12aXNpYmxlIHdyYXBwZXIsIGFuZCBgX19fX25hbWVgIGlzIHRoZSBpbnRlcm5hbCBmdW5jdGlvbi4gVGhlIGBfX19fbmFtZWAgZnVuY3Rpb25zLCBiZWluZyBkZWNsYXJlZCBgc3RhdGljIF9fYWx3YXlzX2lubGluZWAsIGFyZSBwcmltZSBjYW5kaWRhdGVzIGZvciBpbmxpbmluZywgd2hpY2ggbWVhbnMgd2UgbmVlZCB0byB0cmFjZSB0aG9zZSBjb25uZWN0aW9ucy4KClRvIGdldCBhIGhhbmRsZSBvbiB0aGlzLCBJJiMzOTt2ZSBpZGVudGlmaWVkIGEgbGlzdCBvZiBzeW1ib2xzIHRvIGZvY3VzIG9uLiBXZSYjMzk7dmUgZ290IHRoZSBCUEYgd3JhcHBlcnM6IGBicGZfZ2V0X3N0YWNraWRgLCBgYnBmX2dldF9zdGFja2lkX3BlYCwgYGJwZl9nZXRfc3RhY2tgLCBgYnBmX2dldF9zdGFja19zbGVlcGFibGVgLCBgYnBmX2dldF90YXNrX3N0YWNrYCwgYGJwZl9nZXRfdGFza19zdGFja19zbGVlcGFibGVgLCBhbmQgYGJwZl9nZXRfc3RhY2tfcGVgLiBBbHNvLCB3ZSBuZWVkIHRvIGNvbnNpZGVyIHRob3NlIHN0YXRpYyBoZWxwZXJzIHRoYXQgbWlnaHQgKm5vdCogYmUgaW5saW5lZC4KCkluaXRpYWxseSwgSSBpZGVudGlmaWVkIGEgc2V0IG9mIHN0YXRpYyBmdW5jdGlvbnM6IGBzdGFja2lkX2luaXRgLCBgc3RhY2tpZF9mYXN0cGF0aGAsIGBzdGFja2lkX25ld19idWNrZXRgLCBgc3RhY2tpZF9pbnN0YWxsYCwgYGNhbGxjaGFpbl9zdG9yZWAsIGBjYWxsY2hhaW5fZmluYWxpemVgLCBgX19icGZfZ2V0X3N0YWNrX3BlYCwgYW5kIGBfX2JwZl9nZXRfc3RhY2tgLiBJJiMzOTt2ZSBnb25lIGJhY2sgYW5kIGNoZWNrZWQgdGhlIGNhbGwgZ3JhcGggZm9yIHRoZW0gdG8gZGV0ZXJtaW5lIHdoaWNoIGFyZSBhY3R1YWxseSByZWFjaGFibGUgYW5kIHdoaWNoIGFyZSBpbmxpbmVkLiBJdCBsb29rcyBsaWtlIGBzdGFja2lkX2luaXRgIGlzIGNhbGxlZCBieSBgc3RhY2tpZF9mYXN0cGF0aGAsIHdoaWNoIGlzIGluIHR1cm4gY2FsbGVkIGZyb20gYGJwZl9nZXRfc3RhY2tpZGAgYW5kIGBicGZfZ2V0X3N0YWNraWRfcGVgLiBgc3RhY2tpZF9uZXdfYnVja2V0YCBhbmQgYHN0YWNraWRfaW5zdGFsbGAgYXJlIGFsc28gY2FsbGVkIGJ5IGBicGZfZ2V0X3N0YWNraWRgIGFuZCBgYnBmX2dldF9zdGFja2lkX3BlYC4gU2ltaWxhcmx5LCBgY2FsbGNoYWluX3N0b3JlYCBhbmQgYGNhbGxjaGFpbl9maW5hbGl6ZWAgYXJlIGNhbGxlZCBieSB0aGUgYF9fYnBmX2dldF9zdGFja2AgYW5kIGBfX2JwZl9nZXRfc3RhY2tfcGVgLiAgRmluYWxseSwgdGhlIGBfX2JwZl9nZXRfc3RhY2tgIGlzIGNhbGxlZCBieSBhIHZhcmlldHkgb2YgZnVuY3Rpb25zLCBhbmQgYF9fYnBmX2dldF90YXNrX3N0YWNrYCBpcyBjYWxsZWQgYnkgdGhlIGBicGZfZ2V0X3Rhc2tfc3RhY2tgIHZhcmlhbnRzLgoKU28sIHRoZSBmb2N1cyBzeW1ib2xzIGFyZToKYGJwZl9nZXRfc3RhY2tpZGAKYGJwZl9nZXRfc3RhY2tpZF9wZWAKYGJwZl9nZXRfc3RhY2tgCmBicGZfZ2V0X3N0YWNrX3NsZWVwYWJsZWAKYGJwZl9nZXRfdGFza19zdGFja2AKYGJwZl9nZXRfdGFza19zdGFja19zbGVlcGFibGVgCmBicGZfZ2V0X3N0YWNrX3BlYApgc3RhY2tpZF9mYXN0cGF0aGAKYHN0YWNraWRfbmV3X2J1Y2tldGAKYHN0YWNraWRfaW5zdGFsbGAKYGNhbGxjaGFpbl9zdG9yZWAKYGNhbGxjaGFpbl9maW5hbGl6ZWAKYF9fYnBmX2dldF9zdGFja2AKYF9fYnBmX2dldF9zdGFja19wZWAKYF9fYnBmX2dldF90YXNrX3N0YWNrYAoKT2theSwgdGhhdCYjMzk7cyBhIGdvb2Qgc3RhcnRpbmcgbGlzdC4KCk5vdywgbGV0JiMzOTtzIGNvbnNpZGVyIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9ucy4gV2UmIzM5O3ZlIGdvdCBgQlBGX1NZU0NBTExgLCBgUEVSRl9FVkVOVFNgLCBgQlBGX0VWRU5UU2AsIGFuZCBgU1RBQ0tUUkFDRWAuIGBDT05GSUdfQlBGX1NZU0NBTExgIGlzLCBvZiBjb3Vyc2UsIHRoZSBtYWluIG9uZS4gYENPTkZJR19QRVJGX0VWRU5UU2AgaXMgZXhwbGljaXRseSByZXF1aXJlZCBmb3IgYGtlcm5lbC9icGYvc3RhY2ttYXAuY2AgdG8gY29tcGlsZSBhbmQgYENPTkZJR19CUEZfRVZFTlRTYCBpcyByZXF1aXJlZCBmb3IgYGtlcm5lbC90cmFjZS9icGZfdHJhY2UuY2AgYW5kIHJlZ2lzdGVyaW5nIEJQRiBoZWxwZXJzLiBgQ09ORklHX1NUQUNLVFJBQ0VgIGlzIHRoZXJlIGJlY2F1c2Ugb2YgYGdldF9jYWxsY2hhaW5fZW50cnlfZm9yX3Rhc2tgLiBJIGRvbiYjMzk7dCB0aGluayBgQ09ORklHX1RSQUNJTkdgIGlzIHN0cmljdGx5IG5lZWRlZCwgYXMgYEJQRl9FVkVOVFNgIHVzdWFsbHkgY292ZXJzIGl0LgoKTG9va2luZyBhdCB0aGUgZmlsZSBtb2RpZmljYXRpb25zLCBpdCYjMzk7cyBqdXN0IGBrZXJuZWwvYnBmL3N0YWNrbWFwLmNgLCBpbmRpY2F0aW5nIHRoaXMgaXMgYSBsb2NhbGl6ZWQgY2hhbmdlLgoKVGhlIGNvcmUgb2YgdGhpcyBwYXRjaCBzZWVtcyB0byBiZSByZWZhY3RvcmluZyB0aGUgc3RhY2ttYXAgY29kZS4gVGhleSYjMzk7cmUgcHVsbGluZyBvdXQgY29tbW9uIGxvZ2ljIGludG8gaGVscGVyIGZ1bmN0aW9ucywgbWVhbmluZyB0aGlzIHJlZmFjdG9yaW5nIHNob3VsZCBub3QgY2hhbmdlIHRoZSBleHRlcm5hbCBiZWhhdmlvciwgYnV0IGl0IGRvZXMgc2lnbmlmaWNhbnRseSBhbHRlciB0aGUgaW50ZXJuYWwgd29ya2luZ3MuIFRoaXMgaXMgYSBjbGFzc2ljIGNhc2Ugd2hlcmUgZnV6emluZyBpcyAqZXNzZW50aWFsKi4gRXZlbiBpZiBpdCBzZWVtcyBoYXJtbGVzcyBvbiB0aGUgc3VyZmFjZSwgcmVmYWN0b3JpbmdzIGxpa2UgdGhpcyBhcmUgcHJpbWUgY2FuZGlkYXRlcyBmb3IgaW50cm9kdWNpbmcgcmVncmVzc2lvbnMgb3IgbWVtb3J5IGxlYWtzLiBXZSBuZWVkIHRvIGJlIHRob3JvdWdoLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMCAxMDo1MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OywKICAgICYjMzQ7UEVSRl9FVkVOVFMmIzM0OywKICAgICYjMzQ7QlBGX0VWRU5UUyYjMzQ7LAogICAgJiMzNDtTVEFDS1RSQUNFJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YnBmX2dldF9zdGFja2lkJiMzNDssCiAgICAmIzM0O2JwZl9nZXRfc3RhY2tpZF9wZSYjMzQ7LAogICAgJiMzNDticGZfZ2V0X3N0YWNrJiMzNDssCiAgICAmIzM0O2JwZl9nZXRfc3RhY2tfc2xlZXBhYmxlJiMzNDssCiAgICAmIzM0O2JwZl9nZXRfdGFza19zdGFjayYjMzQ7LAogICAgJiMzNDticGZfZ2V0X3Rhc2tfc3RhY2tfc2xlZXBhYmxlJiMzNDssCiAgICAmIzM0O2JwZl9nZXRfc3RhY2tfcGUmIzM0OywKICAgICYjMzQ7c3RhY2tpZF9mYXN0cGF0aCYjMzQ7LAogICAgJiMzNDtzdGFja2lkX25ld19idWNrZXQmIzM0OywKICAgICYjMzQ7c3RhY2tpZF9pbnN0YWxsJiMzNDssCiAgICAmIzM0O2NhbGxjaGFpbl9zdG9yZSYjMzQ7LAogICAgJiMzNDtjYWxsY2hhaW5fZmluYWxpemUmIzM0OywKICAgICYjMzQ7X19icGZfZ2V0X3N0YWNrJiMzNDssCiAgICAmIzM0O19fYnBmX2dldF9zdGFja19wZSYjMzQ7LAogICAgJiMzNDtfX2JwZl9nZXRfdGFza19zdGFjayYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZWZhY3RvcnMgdGhlIEJQRiBzdGFja21hcCBhbmQgc3RhY2tpZCBoZWxwZXIgZnVuY3Rpb25zLCBpbnRyb2R1Y2luZyBuZXcgaW50ZXJuYWwgaGVscGVyIGZ1bmN0aW9ucyBsaWtlIGBzdGFja2lkX2Zhc3RwYXRoYCwgYHN0YWNraWRfbmV3X2J1Y2tldGAsIGBzdGFja2lkX2luc3RhbGxgLCBgY2FsbGNoYWluX3N0b3JlYCwgYW5kIGBjYWxsY2hhaW5fZmluYWxpemVgLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgQlBGIHN1YnN5c3RlbSB0aGF0IGhhbmRsZXMgc3RhY2sgdHJhY2VzIGFuZCBwZXJmIGV2ZW50IGNhbGxjaGFpbnMuIEl0IGlzIGltcG9ydGFudCB0byBmdXp6IHRoZXNlIGNoYW5nZXMgdG8gZW5zdXJlIG5vIHJlZ3Jlc3Npb25zLCBtZW1vcnkgbGVha3MsIG9yIGNvbmN1cnJlbmN5IGlzc3VlcyBhcmUgaW50cm9kdWNlZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OywKICAgICYjMzQ7UEVSRl9FVkVOVFMmIzM0OywKICAgICYjMzQ7QlBGX0VWRU5UUyYjMzQ7LAogICAgJiMzNDtTVEFDS1RSQUNFJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YnBmX2dldF9zdGFja2lkJiMzNDssCiAgICAmIzM0O2JwZl9nZXRfc3RhY2tpZF9wZSYjMzQ7LAogICAgJiMzNDticGZfZ2V0X3N0YWNrJiMzNDssCiAgICAmIzM0O2JwZl9nZXRfc3RhY2tfc2xlZXBhYmxlJiMzNDssCiAgICAmIzM0O2JwZl9nZXRfdGFza19zdGFjayYjMzQ7LAogICAgJiMzNDticGZfZ2V0X3Rhc2tfc3RhY2tfc2xlZXBhYmxlJiMzNDssCiAgICAmIzM0O2JwZl9nZXRfc3RhY2tfcGUmIzM0OywKICAgICYjMzQ7c3RhY2tpZF9mYXN0cGF0aCYjMzQ7LAogICAgJiMzNDtzdGFja2lkX25ld19idWNrZXQmIzM0OywKICAgICYjMzQ7c3RhY2tpZF9pbnN0YWxsJiMzNDssCiAgICAmIzM0O2NhbGxjaGFpbl9zdG9yZSYjMzQ7LAogICAgJiMzNDtjYWxsY2hhaW5fZmluYWxpemUmIzM0OywKICAgICYjMzQ7X19icGZfZ2V0X3N0YWNrJiMzNDssCiAgICAmIzM0O19fYnBmX2dldF9zdGFja19wZSYjMzQ7LAogICAgJiMzNDtfX2JwZl9nZXRfdGFza19zdGFjayYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZWZhY3RvcnMgdGhlIEJQRiBzdGFja21hcCBhbmQgc3RhY2tpZCBoZWxwZXIgZnVuY3Rpb25zLCBpbnRyb2R1Y2luZyBuZXcgaW50ZXJuYWwgaGVscGVyIGZ1bmN0aW9ucyBsaWtlIGBzdGFja2lkX2Zhc3RwYXRoYCwgYHN0YWNraWRfbmV3X2J1Y2tldGAsIGBzdGFja2lkX2luc3RhbGxgLCBgY2FsbGNoYWluX3N0b3JlYCwgYW5kIGBjYWxsY2hhaW5fZmluYWxpemVgLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgQlBGIHN1YnN5c3RlbSB0aGF0IGhhbmRsZXMgc3RhY2sgdHJhY2VzIGFuZCBwZXJmIGV2ZW50IGNhbGxjaGFpbnMuIEl0IGlzIGltcG9ydGFudCB0byBmdXp6IHRoZXNlIGNoYW5nZXMgdG8gZW5zdXJlIG5vIHJlZ3Jlc3Npb25zLCBtZW1vcnkgbGVha3MsIG9yIGNvbmN1cnJlbmN5IGlzc3VlcyBhcmUgaW50cm9kdWNlZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIwVDEwOjQ5OjU4LjE2MDM5MDgwNloiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYyMDA4NzUzNzE3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9TWVNDQUxMXCIsXG4gICAgXCJQRVJGX0VWRU5UU1wiLFxuICAgIFwiQlBGX0VWRU5UU1wiLFxuICAgIFwiU1RBQ0tUUkFDRVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJwZl9nZXRfc3RhY2tpZFwiLFxuICAgIFwiYnBmX2dldF9zdGFja2lkX3BlXCIsXG4gICAgXCJicGZfZ2V0X3N0YWNrXCIsXG4gICAgXCJicGZfZ2V0X3N0YWNrX3NsZWVwYWJsZVwiLFxuICAgIFwiYnBmX2dldF90YXNrX3N0YWNrXCIsXG4gICAgXCJicGZfZ2V0X3Rhc2tfc3RhY2tfc2xlZXBhYmxlXCIsXG4gICAgXCJicGZfZ2V0X3N0YWNrX3BlXCIsXG4gICAgXCJzdGFja2lkX2Zhc3RwYXRoXCIsXG4gICAgXCJzdGFja2lkX25ld19idWNrZXRcIixcbiAgICBcInN0YWNraWRfaW5zdGFsbFwiLFxuICAgIFwiY2FsbGNoYWluX3N0b3JlXCIsXG4gICAgXCJjYWxsY2hhaW5fZmluYWxpemVcIixcbiAgICBcIl9fYnBmX2dldF9zdGFja1wiLFxuICAgIFwiX19icGZfZ2V0X3N0YWNrX3BlXCIsXG4gICAgXCJfX2JwZl9nZXRfdGFza19zdGFja1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgQlBGIHN0YWNrbWFwIGFuZCBzdGFja2lkIGhlbHBlciBmdW5jdGlvbnMsIGludHJvZHVjaW5nIG5ldyBpbnRlcm5hbCBoZWxwZXIgZnVuY3Rpb25zIGxpa2UgYHN0YWNraWRfZmFzdHBhdGhgLCBgc3RhY2tpZF9uZXdfYnVja2V0YCwgYHN0YWNraWRfaW5zdGFsbGAsIGBjYWxsY2hhaW5fc3RvcmVgLCBhbmQgYGNhbGxjaGFpbl9maW5hbGl6ZWAuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBCUEYgc3Vic3lzdGVtIHRoYXQgaGFuZGxlcyBzdGFjayB0cmFjZXMgYW5kIHBlcmYgZXZlbnQgY2FsbGNoYWlucy4gSXQgaXMgaW1wb3J0YW50IHRvIGZ1enogdGhlc2UgY2hhbmdlcyB0byBlbnN1cmUgbm8gcmVncmVzc2lvbnMsIG1lbW9yeSBsZWFrcywgb3IgY29uY3VycmVuY3kgaXNzdWVzIGFyZSBpbnRyb2R1Y2VkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMFQxMDo0OTo1OC4xNjAzOTk2MDZaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4MTUzNzYyOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGNhZTk1NGM5NWNlNzJiYTkyOTE4MDdiYTNjYzVhZGM2Y2FlZjlhOThcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIE1vbiBKdWwgMjAgMTA6NDk6NTYgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9zdGFja21hcC5jIGIva2VybmVsL2JwZi9zdGFja21hcC5jXFxuaW5kZXggNDFmZTg3ZDczMDJmMjIuLjM3ZjhlNDYzMTliMzRmIDEwMDY0NFxcbi0tLSBhL2tlcm5lbC9icGYvc3RhY2ttYXAuY1xcbisrKyBiL2tlcm5lbC9icGYvc3RhY2ttYXAuY1xcbkBAIC01MDQsNzggKzUwNCwxMTYgQEAgZ2V0X2NhbGxjaGFpbl9lbnRyeV9mb3JfdGFzayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssIHUzMiBtYXhfZGVwdGgpXFxuICNlbmRpZlxcbiB9XFxuIFxcbi1zdGF0aWMgbG9uZyBfX2JwZl9nZXRfc3RhY2tpZChzdHJ1Y3QgYnBmX21hcCAqbWFwLFxcbi1cXHRcXHRcXHQgICAgICBzdHJ1Y3QgcGVyZl9jYWxsY2hhaW5fZW50cnkgKnRyYWNlLCB1NjQgZmxhZ3MpXFxuK3N0cnVjdCBzdGFja2lkIHtcXG4rXFx0c3RydWN0IHN0YWNrX21hcF9idWNrZXQgKmJ1Y2tldDtcXG4rXFx0dTY0ICppcHM7XFxuK1xcdHUzMiAgbnI7XFxuK1xcdHUzMiAgbGVuO1xcbitcXHR1MzIgIGhhc2g7XFxuK1xcdHUzMiAgaWQ7XFxuK1xcdGJvb2wgaGFzaF9tYXRjaGVzO1xcbit9O1xcbitcXG4rc3RhdGljIGludCBzdGFja2lkX2luaXQoc3RydWN0IHN0YWNraWQgKnN0YWNraWQsIHN0cnVjdCBicGZfbWFwICptYXAsXFxuK1xcdFxcdFxcdHN0cnVjdCBwZXJmX2NhbGxjaGFpbl9lbnRyeSAqdHJhY2UsIHU2NCBmbGFncylcXG4ge1xcbiBcXHRzdHJ1Y3QgYnBmX3N0YWNrX21hcCAqc21hcCA9IGNvbnRhaW5lcl9vZihtYXAsIHN0cnVjdCBicGZfc3RhY2tfbWFwLCBtYXApO1xcbi1cXHRzdHJ1Y3Qgc3RhY2tfbWFwX2J1Y2tldCAqYnVja2V0LCAqbmV3X2J1Y2tldCwgKm9sZF9idWNrZXQ7XFxuLVxcdHUzMiBoYXNoLCBpZCwgdHJhY2VfbnIsIHRyYWNlX2xlbiwgaSwgbWF4X2RlcHRoO1xcbiBcXHR1MzIgc2tpcCA9IGZsYWdzIFxcdTAwMjYgQlBGX0ZfU0tJUF9GSUVMRF9NQVNLO1xcbi1cXHRib29sIHVzZXIgPSBmbGFncyBcXHUwMDI2IEJQRl9GX1VTRVJfU1RBQ0s7XFxuLVxcdHU2NCAqaXBzO1xcbi1cXHRib29sIGhhc2hfbWF0Y2hlcztcXG4rXFx0dTMyIG1heF9kZXB0aDtcXG4gXFxuIFxcdGlmICh0cmFjZS1cXHUwMDNlbnIgXFx1MDAzYz0gc2tpcClcXG4gXFx0XFx0Lyogc2tpcHBpbmcgbW9yZSB0aGFuIHVzYWJsZSBzdGFjayB0cmFjZSAqL1xcbiBcXHRcXHRyZXR1cm4gLUVGQVVMVDtcXG4gXFxuIFxcdG1heF9kZXB0aCA9IHN0YWNrX21hcF9jYWxjdWxhdGVfbWF4X2RlcHRoKG1hcC1cXHUwMDNldmFsdWVfc2l6ZSwgc3RhY2tfbWFwX2RhdGFfc2l6ZShtYXApLCBmbGFncyk7XFxuLVxcdHRyYWNlX25yID0gbWluX3QodTMyLCB0cmFjZS1cXHUwMDNlbnIgLSBza2lwLCBtYXhfZGVwdGggLSBza2lwKTtcXG4tXFx0dHJhY2VfbGVuID0gdHJhY2VfbnIgKiBzaXplb2YodTY0KTtcXG4tXFx0aXBzID0gdHJhY2UtXFx1MDAzZWlwICsgc2tpcDtcXG4tXFx0aGFzaCA9IGpoYXNoMigodTMyICopaXBzLCB0cmFjZV9sZW4gLyBzaXplb2YodTMyKSwgMCk7XFxuLVxcdGlkID0gaGFzaCBcXHUwMDI2IChzbWFwLVxcdTAwM2VuX2J1Y2tldHMgLSAxKTtcXG4tXFx0YnVja2V0ID0gUkVBRF9PTkNFKHNtYXAtXFx1MDAzZWJ1Y2tldHNbaWRdKTtcXG4rXFx0c3RhY2tpZC1cXHUwMDNlbnIgPSBtaW5fdCh1MzIsIHRyYWNlLVxcdTAwM2VuciAtIHNraXAsIG1heF9kZXB0aCAtIHNraXApO1xcbitcXHRzdGFja2lkLVxcdTAwM2VsZW4gPSBzdGFja2lkLVxcdTAwM2VuciAqIHNpemVvZih1NjQpO1xcbitcXHRzdGFja2lkLVxcdTAwM2VpcHMgPSB0cmFjZS1cXHUwMDNlaXAgKyBza2lwO1xcbitcXHRzdGFja2lkLVxcdTAwM2VoYXNoID0gamhhc2gyKCh1MzIgKilzdGFja2lkLVxcdTAwM2VpcHMsIHN0YWNraWQtXFx1MDAzZWxlbiAvIHNpemVvZih1MzIpLCAwKTtcXG4rXFx0c3RhY2tpZC1cXHUwMDNlaWQgPSBzdGFja2lkLVxcdTAwM2VoYXNoIFxcdTAwMjYgKHNtYXAtXFx1MDAzZW5fYnVja2V0cyAtIDEpO1xcbitcXHRzdGFja2lkLVxcdTAwM2VidWNrZXQgPSBSRUFEX09OQ0Uoc21hcC1cXHUwMDNlYnVja2V0c1tzdGFja2lkLVxcdTAwM2VpZF0pO1xcbitcXHRzdGFja2lkLVxcdTAwM2VoYXNoX21hdGNoZXMgPSBzdGFja2lkLVxcdTAwM2VidWNrZXQgXFx1MDAyNlxcdTAwMjYgc3RhY2tpZC1cXHUwMDNlYnVja2V0LVxcdTAwM2VoYXNoID09IHN0YWNraWQtXFx1MDAzZWhhc2g7XFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IHN0YWNraWRfZmFzdHBhdGgoc3RydWN0IHN0YWNraWQgKnN0YWNraWQsIHN0cnVjdCBicGZfbWFwICptYXAsXFxuK1xcdFxcdFxcdCAgICBzdHJ1Y3QgcGVyZl9jYWxsY2hhaW5fZW50cnkgKnRyYWNlLCB1NjQgZmxhZ3MpXFxuK3tcXG4rXFx0aW50IGVycjtcXG4rXFxuK1xcdGVyciA9IHN0YWNraWRfaW5pdChzdGFja2lkLCBtYXAsIHRyYWNlLCBmbGFncyk7XFxuK1xcdGlmIChlcnIpXFxuK1xcdFxcdHJldHVybiBlcnI7XFxuIFxcbi1cXHRoYXNoX21hdGNoZXMgPSBidWNrZXQgXFx1MDAyNlxcdTAwMjYgYnVja2V0LVxcdTAwM2VoYXNoID09IGhhc2g7XFxuIFxcdC8qIGZhc3QgY21wICovXFxuLVxcdGlmIChoYXNoX21hdGNoZXMgXFx1MDAyNlxcdTAwMjYgZmxhZ3MgXFx1MDAyNiBCUEZfRl9GQVNUX1NUQUNLX0NNUClcXG4tXFx0XFx0cmV0dXJuIGlkO1xcbitcXHRpZiAoc3RhY2tpZC1cXHUwMDNlaGFzaF9tYXRjaGVzIFxcdTAwMjZcXHUwMDI2IGZsYWdzIFxcdTAwMjYgQlBGX0ZfRkFTVF9TVEFDS19DTVApXFxuK1xcdFxcdHJldHVybiBzdGFja2lkLVxcdTAwM2VpZDtcXG4rXFxuK1xcdGlmIChzdGFja19tYXBfdXNlX2J1aWxkX2lkKG1hcCkpXFxuK1xcdFxcdHJldHVybiAtRU5PRU5UO1xcbitcXHRpZiAoc3RhY2tpZC1cXHUwMDNlaGFzaF9tYXRjaGVzIFxcdTAwMjZcXHUwMDI2IHN0YWNraWQtXFx1MDAzZWJ1Y2tldC1cXHUwMDNlbnIgPT0gc3RhY2tpZC1cXHUwMDNlbnIgXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgIG1lbWNtcChzdGFja2lkLVxcdTAwM2VidWNrZXQtXFx1MDAzZWRhdGEsIHN0YWNraWQtXFx1MDAzZWlwcywgc3RhY2tpZC1cXHUwMDNlbGVuKSA9PSAwKVxcbitcXHRcXHRyZXR1cm4gc3RhY2tpZC1cXHUwMDNlaWQ7XFxuK1xcdGlmIChzdGFja2lkLVxcdTAwM2VidWNrZXQgXFx1MDAyNlxcdTAwMjYgIShmbGFncyBcXHUwMDI2IEJQRl9GX1JFVVNFX1NUQUNLSUQpKVxcbitcXHRcXHRyZXR1cm4gLUVFWElTVDtcXG4rXFx0cmV0dXJuIC1FTk9FTlQ7XFxuK31cXG4rXFxuK3N0YXRpYyBzdHJ1Y3Qgc3RhY2tfbWFwX2J1Y2tldCAqXFxuK3N0YWNraWRfbmV3X2J1Y2tldChzdHJ1Y3Qgc3RhY2tpZCAqc3RhY2tpZCwgc3RydWN0IGJwZl9tYXAgKm1hcCxcXG4rXFx0XFx0ICAgc3RydWN0IHBlcmZfY2FsbGNoYWluX2VudHJ5ICp0cmFjZSwgdTY0IGZsYWdzKVxcbit7XFxuK1xcdHN0cnVjdCBicGZfc3RhY2tfbWFwICpzbWFwID0gY29udGFpbmVyX29mKG1hcCwgc3RydWN0IGJwZl9zdGFja19tYXAsIG1hcCk7XFxuK1xcdHN0cnVjdCBicGZfc3RhY2tfYnVpbGRfaWQgKmlkX29mZnM7XFxuK1xcdHN0cnVjdCBzdGFja19tYXBfYnVja2V0ICpidWNrZXQ7XFxuK1xcdHUzMiBpO1xcbitcXG4rXFx0YnVja2V0ID0gKHN0cnVjdCBzdGFja19tYXBfYnVja2V0ICopIHBjcHVfZnJlZWxpc3RfcG9wKFxcdTAwMjZzbWFwLVxcdTAwM2VmcmVlbGlzdCk7XFxuK1xcdGlmICh1bmxpa2VseSghYnVja2V0KSlcXG4rXFx0XFx0cmV0dXJuIE5VTEw7XFxuK1xcbitcXHRpZiAoc3RhY2tfbWFwX3VzZV9idWlsZF9pZChtYXApKSB7XFxuK1xcdFxcdGlkX29mZnMgPSAoc3RydWN0IGJwZl9zdGFja19idWlsZF9pZCAqKWJ1Y2tldC1cXHUwMDNlZGF0YTtcXG4rXFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIHN0YWNraWQtXFx1MDAzZW5yOyBpKyspXFxuK1xcdFxcdFxcdGlkX29mZnNbaV0uaXAgPSBzdGFja2lkLVxcdTAwM2VpcHNbaV07XFxuK1xcdH0gZWxzZSB7XFxuK1xcdFxcdG1lbWNweShidWNrZXQtXFx1MDAzZWRhdGEsIHN0YWNraWQtXFx1MDAzZWlwcywgc3RhY2tpZC1cXHUwMDNlbGVuKTtcXG4rXFx0fVxcbitcXG4rXFx0YnVja2V0LVxcdTAwM2VoYXNoID0gc3RhY2tpZC1cXHUwMDNlaGFzaDtcXG4rXFx0YnVja2V0LVxcdTAwM2VuciA9IHN0YWNraWQtXFx1MDAzZW5yO1xcbitcXHRyZXR1cm4gYnVja2V0O1xcbit9XFxuK1xcbitzdGF0aWMgbG9uZyBzdGFja2lkX2luc3RhbGwoc3RydWN0IHN0YWNraWQgKnN0YWNraWQsIHN0cnVjdCBicGZfbWFwICptYXAsXFxuK1xcdFxcdFxcdCAgICBzdHJ1Y3Qgc3RhY2tfbWFwX2J1Y2tldCAqbmV3X2J1Y2tldCwgdTY0IGZsYWdzKVxcbit7XFxuK1xcdHN0cnVjdCBicGZfc3RhY2tfbWFwICpzbWFwID0gY29udGFpbmVyX29mKG1hcCwgc3RydWN0IGJwZl9zdGFja19tYXAsIG1hcCk7XFxuK1xcdGJvb2wgdXNlciA9IGZsYWdzIFxcdTAwMjYgQlBGX0ZfVVNFUl9TVEFDSztcXG4rXFx0c3RydWN0IHN0YWNrX21hcF9idWNrZXQgKm9sZF9idWNrZXQ7XFxuK1xcdHUzMiB0cmFjZV9sZW47XFxuIFxcbiBcXHRpZiAoc3RhY2tfbWFwX3VzZV9idWlsZF9pZChtYXApKSB7XFxuIFxcdFxcdHN0cnVjdCBicGZfc3RhY2tfYnVpbGRfaWQgKmlkX29mZnM7XFxuIFxcbi1cXHRcXHQvKiBmb3IgYnVpbGRfaWQrb2Zmc2V0LCBwb3AgYSBidWNrZXQgYmVmb3JlIHNsb3cgY21wICovXFxuLVxcdFxcdG5ld19idWNrZXQgPSAoc3RydWN0IHN0YWNrX21hcF9idWNrZXQgKilcXG4tXFx0XFx0XFx0cGNwdV9mcmVlbGlzdF9wb3AoXFx1MDAyNnNtYXAtXFx1MDAzZWZyZWVsaXN0KTtcXG4tXFx0XFx0aWYgKHVubGlrZWx5KCFuZXdfYnVja2V0KSlcXG4tXFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuLVxcdFxcdG5ld19idWNrZXQtXFx1MDAzZW5yID0gdHJhY2VfbnI7XFxuIFxcdFxcdGlkX29mZnMgPSAoc3RydWN0IGJwZl9zdGFja19idWlsZF9pZCAqKW5ld19idWNrZXQtXFx1MDAzZWRhdGE7XFxuLVxcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyB0cmFjZV9ucjsgaSsrKVxcbi1cXHRcXHRcXHRpZF9vZmZzW2ldLmlwID0gaXBzW2ldO1xcbi1cXHRcXHRzdGFja19tYXBfZ2V0X2J1aWxkX2lkX29mZnNldChpZF9vZmZzLCB0cmFjZV9uciwgdXNlciwgZmFsc2UgLyogIW1heV9mYXVsdCAqLyk7XFxuLVxcdFxcdHRyYWNlX2xlbiA9IHRyYWNlX25yICogc2l6ZW9mKHN0cnVjdCBicGZfc3RhY2tfYnVpbGRfaWQpO1xcbi1cXHRcXHRpZiAoaGFzaF9tYXRjaGVzIFxcdTAwMjZcXHUwMDI2IGJ1Y2tldC1cXHUwMDNlbnIgPT0gdHJhY2VfbnIgXFx1MDAyNlxcdTAwMjZcXG4tXFx0XFx0ICAgIG1lbWNtcChidWNrZXQtXFx1MDAzZWRhdGEsIG5ld19idWNrZXQtXFx1MDAzZWRhdGEsIHRyYWNlX2xlbikgPT0gMCkge1xcbitcXHRcXHRzdGFja19tYXBfZ2V0X2J1aWxkX2lkX29mZnNldChpZF9vZmZzLCBzdGFja2lkLVxcdTAwM2VuciwgdXNlciwgZmFsc2UgLyogIW1heV9mYXVsdCAqLyk7XFxuK1xcdFxcdHRyYWNlX2xlbiA9IHN0YWNraWQtXFx1MDAzZW5yICogc2l6ZW9mKHN0cnVjdCBicGZfc3RhY2tfYnVpbGRfaWQpO1xcbitcXHRcXHRpZiAoc3RhY2tpZC1cXHUwMDNlaGFzaF9tYXRjaGVzIFxcdTAwMjZcXHUwMDI2IHN0YWNraWQtXFx1MDAzZWJ1Y2tldC1cXHUwMDNlbnIgPT0gc3RhY2tpZC1cXHUwMDNlbnIgXFx1MDAyNlxcdTAwMjZcXG4rXFx0XFx0ICAgIG1lbWNtcChzdGFja2lkLVxcdTAwM2VidWNrZXQtXFx1MDAzZWRhdGEsIG5ld19idWNrZXQtXFx1MDAzZWRhdGEsIHRyYWNlX2xlbikgPT0gMCkge1xcbiBcXHRcXHRcXHRwY3B1X2ZyZWVsaXN0X3B1c2goXFx1MDAyNnNtYXAtXFx1MDAzZWZyZWVsaXN0LCBcXHUwMDI2bmV3X2J1Y2tldC1cXHUwMDNlZm5vZGUpO1xcbi1cXHRcXHRcXHRyZXR1cm4gaWQ7XFxuK1xcdFxcdFxcdHJldHVybiBzdGFja2lkLVxcdTAwM2VpZDtcXG4gXFx0XFx0fVxcbi1cXHRcXHRpZiAoYnVja2V0IFxcdTAwMjZcXHUwMDI2ICEoZmxhZ3MgXFx1MDAyNiBCUEZfRl9SRVVTRV9TVEFDS0lEKSkge1xcbitcXHRcXHRpZiAoc3RhY2tpZC1cXHUwMDNlYnVja2V0IFxcdTAwMjZcXHUwMDI2ICEoZmxhZ3MgXFx1MDAyNiBCUEZfRl9SRVVTRV9TVEFDS0lEKSkge1xcbiBcXHRcXHRcXHRwY3B1X2ZyZWVsaXN0X3B1c2goXFx1MDAyNnNtYXAtXFx1MDAzZWZyZWVsaXN0LCBcXHUwMDI2bmV3X2J1Y2tldC1cXHUwMDNlZm5vZGUpO1xcbiBcXHRcXHRcXHRyZXR1cm4gLUVFWElTVDtcXG4gXFx0XFx0fVxcbi1cXHR9IGVsc2Uge1xcbi1cXHRcXHRpZiAoaGFzaF9tYXRjaGVzIFxcdTAwMjZcXHUwMDI2IGJ1Y2tldC1cXHUwMDNlbnIgPT0gdHJhY2VfbnIgXFx1MDAyNlxcdTAwMjZcXG4tXFx0XFx0ICAgIG1lbWNtcChidWNrZXQtXFx1MDAzZWRhdGEsIGlwcywgdHJhY2VfbGVuKSA9PSAwKVxcbi1cXHRcXHRcXHRyZXR1cm4gaWQ7XFxuLVxcdFxcdGlmIChidWNrZXQgXFx1MDAyNlxcdTAwMjYgIShmbGFncyBcXHUwMDI2IEJQRl9GX1JFVVNFX1NUQUNLSUQpKVxcbi1cXHRcXHRcXHRyZXR1cm4gLUVFWElTVDtcXG4tXFxuLVxcdFxcdG5ld19idWNrZXQgPSAoc3RydWN0IHN0YWNrX21hcF9idWNrZXQgKilcXG4tXFx0XFx0XFx0cGNwdV9mcmVlbGlzdF9wb3AoXFx1MDAyNnNtYXAtXFx1MDAzZWZyZWVsaXN0KTtcXG4tXFx0XFx0aWYgKHVubGlrZWx5KCFuZXdfYnVja2V0KSlcXG4tXFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuLVxcdFxcdG1lbWNweShuZXdfYnVja2V0LVxcdTAwM2VkYXRhLCBpcHMsIHRyYWNlX2xlbik7XFxuIFxcdH1cXG4gXFxuLVxcdG5ld19idWNrZXQtXFx1MDAzZWhhc2ggPSBoYXNoO1xcbi1cXHRuZXdfYnVja2V0LVxcdTAwM2VuciA9IHRyYWNlX25yO1xcbi1cXG4tXFx0b2xkX2J1Y2tldCA9IHhjaGcoXFx1MDAyNnNtYXAtXFx1MDAzZWJ1Y2tldHNbaWRdLCBuZXdfYnVja2V0KTtcXG4rXFx0b2xkX2J1Y2tldCA9IHhjaGcoXFx1MDAyNnNtYXAtXFx1MDAzZWJ1Y2tldHNbc3RhY2tpZC1cXHUwMDNlaWRdLCBuZXdfYnVja2V0KTtcXG4gXFx0aWYgKG9sZF9idWNrZXQpXFxuIFxcdFxcdHBjcHVfZnJlZWxpc3RfcHVzaChcXHUwMDI2c21hcC1cXHUwMDNlZnJlZWxpc3QsIFxcdTAwMjZvbGRfYnVja2V0LVxcdTAwM2Vmbm9kZSk7XFxuLVxcdHJldHVybiBpZDtcXG4rXFx0cmV0dXJuIHN0YWNraWQtXFx1MDAzZWlkO1xcbiB9XFxuIFxcbiBCUEZfQ0FMTF8zKGJwZl9nZXRfc3RhY2tpZCwgc3RydWN0IHB0X3JlZ3MgKiwgcmVncywgc3RydWN0IGJwZl9tYXAgKiwgbWFwLFxcbkBAIC01ODMsOCArNjIxLDExIEBAIEJQRl9DQUxMXzMoYnBmX2dldF9zdGFja2lkLCBzdHJ1Y3QgcHRfcmVncyAqLCByZWdzLCBzdHJ1Y3QgYnBmX21hcCAqLCBtYXAsXFxuIHtcXG4gXFx0dTMyIGVsZW1fc2l6ZSA9IHN0YWNrX21hcF9kYXRhX3NpemUobWFwKTtcXG4gXFx0Ym9vbCB1c2VyID0gZmxhZ3MgXFx1MDAyNiBCUEZfRl9VU0VSX1NUQUNLO1xcbitcXHRzdHJ1Y3Qgc3RhY2tfbWFwX2J1Y2tldCAqbmV3X2J1Y2tldDtcXG4gXFx0c3RydWN0IHBlcmZfY2FsbGNoYWluX2VudHJ5ICp0cmFjZTtcXG4rXFx0c3RydWN0IHN0YWNraWQgc3RhY2tpZDtcXG4gXFx0Ym9vbCBrZXJuZWwgPSAhdXNlcjtcXG4rXFx0aW50IGVyciA9IC1FRkFVTFQ7XFxuIFxcdHUzMiBtYXhfZGVwdGg7XFxuIFxcbiBcXHRpZiAodW5saWtlbHkoZmxhZ3MgXFx1MDAyNiB+KEJQRl9GX1NLSVBfRklFTERfTUFTSyB8IEJQRl9GX1VTRVJfU1RBQ0sgfFxcbkBAIC01OTIsMTQgKzYzMywyOSBAQCBCUEZfQ0FMTF8zKGJwZl9nZXRfc3RhY2tpZCwgc3RydWN0IHB0X3JlZ3MgKiwgcmVncywgc3RydWN0IGJwZl9tYXAgKiwgbWFwLFxcbiBcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gXFxuIFxcdG1heF9kZXB0aCA9IHN0YWNrX21hcF9jYWxjdWxhdGVfbWF4X2RlcHRoKG1hcC1cXHUwMDNldmFsdWVfc2l6ZSwgZWxlbV9zaXplLCBmbGFncyk7XFxuK1xcbitcXHRwcmVlbXB0X2Rpc2FibGUoKTtcXG4gXFx0dHJhY2UgPSBnZXRfcGVyZl9jYWxsY2hhaW4ocmVncywga2VybmVsLCB1c2VyLCBtYXhfZGVwdGgsXFxuIFxcdFxcdFxcdFxcdCAgIGZhbHNlLCBmYWxzZSwgMCk7XFxuIFxcbiBcXHRpZiAodW5saWtlbHkoIXRyYWNlKSlcXG4gXFx0XFx0LyogY291bGRuJ3QgZmV0Y2ggdGhlIHN0YWNrIHRyYWNlICovXFxuLVxcdFxcdHJldHVybiAtRUZBVUxUO1xcbitcXHRcXHRnb3RvIG91dDtcXG4rXFxuK1xcdGVyciA9IHN0YWNraWRfZmFzdHBhdGgoXFx1MDAyNnN0YWNraWQsIG1hcCwgdHJhY2UsIGZsYWdzKTtcXG4rXFx0aWYgKGVyciAhPSAtRU5PRU5UKVxcbitcXHRcXHRnb3RvIG91dDtcXG4rXFxuK1xcdG5ld19idWNrZXQgPSBzdGFja2lkX25ld19idWNrZXQoXFx1MDAyNnN0YWNraWQsIG1hcCwgdHJhY2UsIGZsYWdzKTtcXG4rXFx0aWYgKG5ld19idWNrZXQpIHtcXG4rXFx0XFx0cHJlZW1wdF9lbmFibGUoKTtcXG4rXFx0XFx0cmV0dXJuIHN0YWNraWRfaW5zdGFsbChcXHUwMDI2c3RhY2tpZCwgbWFwLCBuZXdfYnVja2V0LCBmbGFncyk7XFxuK1xcdH1cXG4rXFx0ZXJyID0gLUVOT01FTTtcXG4gXFxuLVxcdHJldHVybiBfX2JwZl9nZXRfc3RhY2tpZChtYXAsIHRyYWNlLCBmbGFncyk7XFxuK291dDpcXG4rXFx0cHJlZW1wdF9lbmFibGUoKTtcXG4rXFx0cmV0dXJuIGVycjtcXG4gfVxcbiBcXG4gY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9nZXRfc3RhY2tpZF9wcm90byA9IHtcXG5AQCAtNjI3LDcgKzY4Myw5IEBAIEJQRl9DQUxMXzMoYnBmX2dldF9zdGFja2lkX3BlLCBzdHJ1Y3QgYnBmX3BlcmZfZXZlbnRfZGF0YV9rZXJuICosIGN0eCxcXG4gXFx0ICAgc3RydWN0IGJwZl9tYXAgKiwgbWFwLCB1NjQsIGZsYWdzKVxcbiB7XFxuIFxcdHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCA9IGN0eC1cXHUwMDNlZXZlbnQ7XFxuK1xcdHN0cnVjdCBzdGFja19tYXBfYnVja2V0ICpuZXdfYnVja2V0O1xcbiBcXHRzdHJ1Y3QgcGVyZl9jYWxsY2hhaW5fZW50cnkgKnRyYWNlO1xcbitcXHRzdHJ1Y3Qgc3RhY2tpZCBzdGFja2lkO1xcbiBcXHRib29sIGtlcm5lbCwgdXNlcjtcXG4gXFx0X191NjQgbnJfa2VybmVsO1xcbiBcXHRpbnQgcmV0O1xcbkBAIC02NTMsNyArNzExLDYgQEAgQlBGX0NBTExfMyhicGZfZ2V0X3N0YWNraWRfcGUsIHN0cnVjdCBicGZfcGVyZl9ldmVudF9kYXRhX2tlcm4gKiwgY3R4LFxcbiBcXG4gXFx0aWYgKGtlcm5lbCkge1xcbiBcXHRcXHR0cmFjZS1cXHUwMDNlbnIgPSBucl9rZXJuZWw7XFxuLVxcdFxcdHJldCA9IF9fYnBmX2dldF9zdGFja2lkKG1hcCwgdHJhY2UsIGZsYWdzKTtcXG4gXFx0fSBlbHNlIHsgLyogdXNlciAqL1xcbiBcXHRcXHR1NjQgc2tpcCA9IGZsYWdzIFxcdTAwMjYgQlBGX0ZfU0tJUF9GSUVMRF9NQVNLO1xcbiBcXG5AQCAtNjYyLDEyICs3MTksMjIgQEAgQlBGX0NBTExfMyhicGZfZ2V0X3N0YWNraWRfcGUsIHN0cnVjdCBicGZfcGVyZl9ldmVudF9kYXRhX2tlcm4gKiwgY3R4LFxcbiBcXHRcXHRcXHRyZXR1cm4gLUVGQVVMVDtcXG4gXFxuIFxcdFxcdGZsYWdzID0gKGZsYWdzIFxcdTAwMjYgfkJQRl9GX1NLSVBfRklFTERfTUFTSykgfCBza2lwO1xcbi1cXHRcXHRyZXQgPSBfX2JwZl9nZXRfc3RhY2tpZChtYXAsIHRyYWNlLCBmbGFncyk7XFxuIFxcdH1cXG4gXFxuK1xcdHJldCA9IHN0YWNraWRfZmFzdHBhdGgoXFx1MDAyNnN0YWNraWQsIG1hcCwgdHJhY2UsIGZsYWdzKTtcXG4rXFx0aWYgKHJldCAhPSAtRU5PRU5UKVxcbitcXHRcXHRnb3RvIGVycm9yO1xcbitcXG4rXFx0bmV3X2J1Y2tldCA9IHN0YWNraWRfbmV3X2J1Y2tldChcXHUwMDI2c3RhY2tpZCwgbWFwLCB0cmFjZSwgZmxhZ3MpO1xcbitcXHRpZiAobmV3X2J1Y2tldCkge1xcbitcXHRcXHR0cmFjZS1cXHUwMDNlbnIgPSBucjtcXG4rXFx0XFx0cmV0dXJuIHN0YWNraWRfaW5zdGFsbChcXHUwMDI2c3RhY2tpZCwgbWFwLCBuZXdfYnVja2V0LCBmbGFncyk7XFxuK1xcdH1cXG4rXFx0cmV0ID0gLUVOT01FTTtcXG4rXFxuK2Vycm9yOlxcbiBcXHQvKiByZXN0b3JlIG5yICovXFxuIFxcdHRyYWNlLVxcdTAwM2VuciA9IG5yO1xcbi1cXG4gXFx0cmV0dXJuIHJldDtcXG4gfVxcbiBcXG5AQCAtNjgwLDE5ICs3NDcsNTMgQEAgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9nZXRfc3RhY2tpZF9wcm90b19wZSA9IHtcXG4gXFx0LmFyZzNfdHlwZVxcdD0gQVJHX0FOWVRISU5HLFxcbiB9O1xcbiBcXG4rc3RhdGljIHUzMiBjYWxsY2hhaW5fc3RvcmUoc3RydWN0IHBlcmZfY2FsbGNoYWluX2VudHJ5ICp0cmFjZSwgdm9pZCAqYnVmLCB1MzIgc2l6ZSxcXG4rXFx0XFx0XFx0ICAgdTMyIGVsZW1fc2l6ZSwgdTY0IGZsYWdzKVxcbit7XFxuK1xcdGJvb2wgdXNlcl9idWlsZF9pZCA9IGZsYWdzIFxcdTAwMjYgQlBGX0ZfVVNFUl9CVUlMRF9JRDtcXG4rXFx0dTMyIHNraXAgPSBmbGFncyBcXHUwMDI2IEJQRl9GX1NLSVBfRklFTERfTUFTSztcXG4rXFx0dTMyIHRyYWNlX25yLCBjb3B5X2xlbjtcXG4rXFx0dTY0ICppcHM7XFxuK1xcbitcXHR0cmFjZV9uciA9IHRyYWNlLVxcdTAwM2VuciAtIHNraXA7XFxuK1xcdGNvcHlfbGVuID0gdHJhY2VfbnIgKiBlbGVtX3NpemU7XFxuK1xcbitcXHRpcHMgPSB0cmFjZS1cXHUwMDNlaXAgKyBza2lwO1xcbitcXHRpZiAodXNlcl9idWlsZF9pZCkge1xcbitcXHRcXHRzdHJ1Y3QgYnBmX3N0YWNrX2J1aWxkX2lkICppZF9vZmZzID0gYnVmO1xcbitcXG4rXFx0XFx0Zm9yICh1MzIgaSA9IDA7IGkgXFx1MDAzYyB0cmFjZV9ucjsgaSsrKVxcbitcXHRcXHRcXHRpZF9vZmZzW2ldLmlwID0gaXBzW2ldO1xcbitcXHR9IGVsc2Uge1xcbitcXHRcXHRtZW1jcHkoYnVmLCBpcHMsIGNvcHlfbGVuKTtcXG4rXFx0fVxcbitcXHRyZXR1cm4gdHJhY2VfbnI7XFxuK31cXG4rXFxuK3N0YXRpYyBsb25nIGNhbGxjaGFpbl9maW5hbGl6ZSh2b2lkICpidWYsIHUzMiBzaXplLCB1MzIgdHJhY2VfbnIsIHUzMiBlbGVtX3NpemUsXFxuK1xcdFxcdFxcdCAgICAgICBib29sIHVzZXJfYnVpbGRfaWQsIGJvb2wgdXNlciwgYm9vbCBtYXlfZmF1bHQpXFxuK3tcXG4rXFx0dTMyIGNvcHlfbGVuID0gdHJhY2VfbnIgKiBlbGVtX3NpemU7XFxuK1xcbitcXHRpZiAodXNlcl9idWlsZF9pZClcXG4rXFx0XFx0c3RhY2tfbWFwX2dldF9idWlsZF9pZF9vZmZzZXQoYnVmLCB0cmFjZV9uciwgdXNlciwgbWF5X2ZhdWx0KTtcXG4rXFxuK1xcdGlmIChzaXplIFxcdTAwM2UgY29weV9sZW4pXFxuK1xcdFxcdG1lbXNldChidWYgKyBjb3B5X2xlbiwgMCwgc2l6ZSAtIGNvcHlfbGVuKTtcXG4rXFx0cmV0dXJuIGNvcHlfbGVuO1xcbit9XFxuK1xcbiBzdGF0aWMgbG9uZyBfX2JwZl9nZXRfc3RhY2soc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzayxcXG4tXFx0XFx0XFx0ICAgIHN0cnVjdCBwZXJmX2NhbGxjaGFpbl9lbnRyeSAqdHJhY2VfaW4sXFxuIFxcdFxcdFxcdCAgICB2b2lkICpidWYsIHUzMiBzaXplLCB1NjQgZmxhZ3MsIGJvb2wgbWF5X2ZhdWx0KVxcbiB7XFxuLVxcdHUzMiB0cmFjZV9uciwgY29weV9sZW4sIGVsZW1fc2l6ZSwgbWF4X2RlcHRoO1xcbiBcXHRib29sIHVzZXJfYnVpbGRfaWQgPSBmbGFncyBcXHUwMDI2IEJQRl9GX1VTRVJfQlVJTERfSUQ7XFxuIFxcdGJvb2wgY3Jvc3N0YXNrID0gdGFzayBcXHUwMDI2XFx1MDAyNiB0YXNrICE9IGN1cnJlbnQ7XFxuIFxcdHUzMiBza2lwID0gZmxhZ3MgXFx1MDAyNiBCUEZfRl9TS0lQX0ZJRUxEX01BU0s7XFxuIFxcdGJvb2wgdXNlciA9IGZsYWdzIFxcdTAwMjYgQlBGX0ZfVVNFUl9TVEFDSztcXG4gXFx0c3RydWN0IHBlcmZfY2FsbGNoYWluX2VudHJ5ICp0cmFjZTtcXG4rXFx0dTMyIHRyYWNlX25yLCBlbGVtX3NpemUsIG1heF9kZXB0aDtcXG4gXFx0Ym9vbCBrZXJuZWwgPSAhdXNlcjtcXG4gXFx0aW50IGVyciA9IC1FSU5WQUw7XFxuLVxcdHU2NCAqaXBzO1xcbiBcXG4gXFx0aWYgKHVubGlrZWx5KGZsYWdzIFxcdTAwMjYgfihCUEZfRl9TS0lQX0ZJRUxEX01BU0sgfCBCUEZfRl9VU0VSX1NUQUNLIHxcXG4gXFx0XFx0XFx0ICAgICAgIEJQRl9GX1VTRVJfQlVJTERfSUQpKSlcXG5AQCAtNzE4LDEzICs4MTksOSBAQCBzdGF0aWMgbG9uZyBfX2JwZl9nZXRfc3RhY2soc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzayxcXG4gXFxuIFxcdG1heF9kZXB0aCA9IHN0YWNrX21hcF9jYWxjdWxhdGVfbWF4X2RlcHRoKHNpemUsIGVsZW1fc2l6ZSwgZmxhZ3MpO1xcbiBcXG4tXFx0aWYgKG1heV9mYXVsdClcXG4tXFx0XFx0cmN1X3JlYWRfbG9jaygpOyAvKiBuZWVkIFJDVSBmb3IgcGVyZidzIGNhbGxjaGFpbiBiZWxvdyAqL1xcbitcXHRwcmVlbXB0X2Rpc2FibGUoKTtcXG4gXFxuLVxcdGlmICh0cmFjZV9pbikge1xcbi1cXHRcXHR0cmFjZSA9IHRyYWNlX2luO1xcbi1cXHRcXHR0cmFjZS1cXHUwMDNlbnIgPSBtaW5fdCh1MzIsIHRyYWNlLVxcdTAwM2VuciwgbWF4X2RlcHRoKTtcXG4tXFx0fSBlbHNlIGlmIChrZXJuZWwgXFx1MDAyNlxcdTAwMjYgdGFzaykge1xcbitcXHRpZiAoa2VybmVsIFxcdTAwMjZcXHUwMDI2IHRhc2spIHtcXG4gXFx0XFx0dHJhY2UgPSBnZXRfY2FsbGNoYWluX2VudHJ5X2Zvcl90YXNrKHRhc2ssIG1heF9kZXB0aCk7XFxuIFxcdH0gZWxzZSB7XFxuIFxcdFxcdHRyYWNlID0gZ2V0X3BlcmZfY2FsbGNoYWluKHJlZ3MsIGtlcm5lbCwgdXNlciwgbWF4X2RlcHRoLFxcbkBAIC03MzIsMzUgKzgyOSwxNiBAQCBzdGF0aWMgbG9uZyBfX2JwZl9nZXRfc3RhY2soc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzayxcXG4gXFx0fVxcbiBcXG4gXFx0aWYgKHVubGlrZWx5KCF0cmFjZSkgfHwgdHJhY2UtXFx1MDAzZW5yIFxcdTAwM2Mgc2tpcCkge1xcbi1cXHRcXHRpZiAobWF5X2ZhdWx0KVxcbi1cXHRcXHRcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4rXFx0XFx0cHJlZW1wdF9lbmFibGUoKTtcXG4gXFx0XFx0Z290byBlcnJfZmF1bHQ7XFxuIFxcdH1cXG4gXFxuLVxcdHRyYWNlX25yID0gdHJhY2UtXFx1MDAzZW5yIC0gc2tpcDtcXG4tXFx0Y29weV9sZW4gPSB0cmFjZV9uciAqIGVsZW1fc2l6ZTtcXG4tXFxuLVxcdGlwcyA9IHRyYWNlLVxcdTAwM2VpcCArIHNraXA7XFxuLVxcdGlmICh1c2VyX2J1aWxkX2lkKSB7XFxuLVxcdFxcdHN0cnVjdCBicGZfc3RhY2tfYnVpbGRfaWQgKmlkX29mZnMgPSBidWY7XFxuLVxcdFxcdHUzMiBpO1xcbi1cXG4tXFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIHRyYWNlX25yOyBpKyspXFxuLVxcdFxcdFxcdGlkX29mZnNbaV0uaXAgPSBpcHNbaV07XFxuLVxcdH0gZWxzZSB7XFxuLVxcdFxcdG1lbWNweShidWYsIGlwcywgY29weV9sZW4pO1xcbi1cXHR9XFxuLVxcbi1cXHQvKiB0cmFjZS9pcHMgc2hvdWxkIG5vdCBiZSBkZXJlZmVyZW5jZWQgYWZ0ZXIgdGhpcyBwb2ludCAqL1xcbi1cXHRpZiAobWF5X2ZhdWx0KVxcbi1cXHRcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4rXFx0dHJhY2VfbnIgPSBjYWxsY2hhaW5fc3RvcmUodHJhY2UsIGJ1Ziwgc2l6ZSwgZWxlbV9zaXplLCBmbGFncyk7XFxuIFxcbi1cXHRpZiAodXNlcl9idWlsZF9pZClcXG4tXFx0XFx0c3RhY2tfbWFwX2dldF9idWlsZF9pZF9vZmZzZXQoYnVmLCB0cmFjZV9uciwgdXNlciwgbWF5X2ZhdWx0KTtcXG4rXFx0LyogdHJhY2Ugc2hvdWxkIG5vdCBiZSBkZXJlZmVyZW5jZWQgYWZ0ZXIgdGhpcyBwb2ludCAqL1xcbitcXHRwcmVlbXB0X2VuYWJsZSgpO1xcbiBcXG4tXFx0aWYgKHNpemUgXFx1MDAzZSBjb3B5X2xlbilcXG4tXFx0XFx0bWVtc2V0KGJ1ZiArIGNvcHlfbGVuLCAwLCBzaXplIC0gY29weV9sZW4pO1xcbi1cXHRyZXR1cm4gY29weV9sZW47XFxuK1xcdHJldHVybiBjYWxsY2hhaW5fZmluYWxpemUoYnVmLCBzaXplLCB0cmFjZV9uciwgZWxlbV9zaXplLCB1c2VyX2J1aWxkX2lkLCB1c2VyLCBtYXlfZmF1bHQpO1xcbiBcXG4gZXJyX2ZhdWx0OlxcbiBcXHRlcnIgPSAtRUZBVUxUO1xcbkBAIC03NzIsNyArODUwLDcgQEAgc3RhdGljIGxvbmcgX19icGZfZ2V0X3N0YWNrKHN0cnVjdCBwdF9yZWdzICpyZWdzLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssXFxuIEJQRl9DQUxMXzQoYnBmX2dldF9zdGFjaywgc3RydWN0IHB0X3JlZ3MgKiwgcmVncywgdm9pZCAqLCBidWYsIHUzMiwgc2l6ZSxcXG4gXFx0ICAgdTY0LCBmbGFncylcXG4ge1xcbi1cXHRyZXR1cm4gX19icGZfZ2V0X3N0YWNrKHJlZ3MsIE5VTEwsIE5VTEwsIGJ1Ziwgc2l6ZSwgZmxhZ3MsIGZhbHNlIC8qICFtYXlfZmF1bHQgKi8pO1xcbitcXHRyZXR1cm4gX19icGZfZ2V0X3N0YWNrKHJlZ3MsIE5VTEwsIGJ1Ziwgc2l6ZSwgZmxhZ3MsIGZhbHNlIC8qICFtYXlfZmF1bHQgKi8pO1xcbiB9XFxuIFxcbiBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX2dldF9zdGFja19wcm90byA9IHtcXG5AQCAtNzg4LDcgKzg2Niw3IEBAIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfZ2V0X3N0YWNrX3Byb3RvID0ge1xcbiBCUEZfQ0FMTF80KGJwZl9nZXRfc3RhY2tfc2xlZXBhYmxlLCBzdHJ1Y3QgcHRfcmVncyAqLCByZWdzLCB2b2lkICosIGJ1ZiwgdTMyLCBzaXplLFxcbiBcXHQgICB1NjQsIGZsYWdzKVxcbiB7XFxuLVxcdHJldHVybiBfX2JwZl9nZXRfc3RhY2socmVncywgTlVMTCwgTlVMTCwgYnVmLCBzaXplLCBmbGFncywgdHJ1ZSAvKiBtYXlfZmF1bHQgKi8pO1xcbitcXHRyZXR1cm4gX19icGZfZ2V0X3N0YWNrKHJlZ3MsIE5VTEwsIGJ1Ziwgc2l6ZSwgZmxhZ3MsIHRydWUgLyogbWF5X2ZhdWx0ICovKTtcXG4gfVxcbiBcXG4gY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9nZXRfc3RhY2tfc2xlZXBhYmxlX3Byb3RvID0ge1xcbkBAIC04MTIsNyArODkwLDcgQEAgc3RhdGljIGxvbmcgX19icGZfZ2V0X3Rhc2tfc3RhY2soc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLCB2b2lkICpidWYsIHUzMiBzaXplLFxcbiBcXG4gXFx0cmVncyA9IHRhc2tfcHRfcmVncyh0YXNrKTtcXG4gXFx0aWYgKHJlZ3MpXFxuLVxcdFxcdHJlcyA9IF9fYnBmX2dldF9zdGFjayhyZWdzLCB0YXNrLCBOVUxMLCBidWYsIHNpemUsIGZsYWdzLCBtYXlfZmF1bHQpO1xcbitcXHRcXHRyZXMgPSBfX2JwZl9nZXRfc3RhY2socmVncywgdGFzaywgYnVmLCBzaXplLCBmbGFncywgbWF5X2ZhdWx0KTtcXG4gXFx0cHV0X3Rhc2tfc3RhY2sodGFzayk7XFxuIFxcbiBcXHRyZXR1cm4gcmVzO1xcbkBAIC04NTIsNiArOTMwLDMzIEBAIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfZ2V0X3Rhc2tfc3RhY2tfc2xlZXBhYmxlX3Byb3RvID0ge1xcbiBcXHQuYXJnNF90eXBlXFx0PSBBUkdfQU5ZVEhJTkcsXFxuIH07XFxuIFxcbitzdGF0aWMgaW50IF9fYnBmX2dldF9zdGFja19wZShzdHJ1Y3QgcGVyZl9jYWxsY2hhaW5fZW50cnkgKnRyYWNlLCB2b2lkICpidWYsIHUzMiBzaXplLFxcbitcXHRcXHRcXHQgICAgICB1NjQgZmxhZ3MpXFxuK3tcXG4rXFx0Ym9vbCB1c2VyX2J1aWxkX2lkID0gZmxhZ3MgXFx1MDAyNiBCUEZfRl9VU0VSX0JVSUxEX0lEO1xcbitcXHR1NjQgc2tpcCA9IGZsYWdzIFxcdTAwMjYgQlBGX0ZfU0tJUF9GSUVMRF9NQVNLO1xcbitcXHRib29sIHVzZXIgPSBmbGFncyBcXHUwMDI2IEJQRl9GX1VTRVJfU1RBQ0s7XFxuK1xcdHUzMiBlbGVtX3NpemUsIG1heF9kZXB0aCwgbnJfdHJhY2U7XFxuK1xcdGJvb2wga2VybmVsID0gIXVzZXI7XFxuK1xcbitcXHRpZiAoa2VybmVsIFxcdTAwMjZcXHUwMDI2IHVzZXJfYnVpbGRfaWQpXFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXG4rXFx0ZWxlbV9zaXplID0gdXNlcl9idWlsZF9pZCA/IHNpemVvZihzdHJ1Y3QgYnBmX3N0YWNrX2J1aWxkX2lkKSA6IHNpemVvZih1NjQpO1xcbitcXHRpZiAodW5saWtlbHkoc2l6ZSAlIGVsZW1fc2l6ZSkpXFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXG4rXFx0bWF4X2RlcHRoID0gc3RhY2tfbWFwX2NhbGN1bGF0ZV9tYXhfZGVwdGgoc2l6ZSwgZWxlbV9zaXplLCBmbGFncyk7XFxuK1xcdHRyYWNlLVxcdTAwM2VuciA9IG1pbl90KHUzMiwgdHJhY2UtXFx1MDAzZW5yLCBtYXhfZGVwdGgpO1xcbitcXG4rXFx0aWYgKHRyYWNlLVxcdTAwM2VuciBcXHUwMDNjIHNraXApXFxuK1xcdFxcdHJldHVybiAtRUZBVUxUO1xcbitcXG4rXFx0bnJfdHJhY2UgPSBjYWxsY2hhaW5fc3RvcmUodHJhY2UsIGJ1Ziwgc2l6ZSwgZWxlbV9zaXplLCBmbGFncyk7XFxuK1xcdHJldHVybiBjYWxsY2hhaW5fZmluYWxpemUoYnVmLCBzaXplLCBucl90cmFjZSwgZWxlbV9zaXplLCB1c2VyX2J1aWxkX2lkLFxcbitcXHRcXHRcXHRcXHQgIHVzZXIsIGZhbHNlIC8qICFtYXlfZmF1bHQgKi8pO1xcbit9XFxuK1xcbiBCUEZfQ0FMTF80KGJwZl9nZXRfc3RhY2tfcGUsIHN0cnVjdCBicGZfcGVyZl9ldmVudF9kYXRhX2tlcm4gKiwgY3R4LFxcbiBcXHQgICB2b2lkICosIGJ1ZiwgdTMyLCBzaXplLCB1NjQsIGZsYWdzKVxcbiB7XFxuQEAgLTg2Myw3ICs5NjgsNyBAQCBCUEZfQ0FMTF80KGJwZl9nZXRfc3RhY2tfcGUsIHN0cnVjdCBicGZfcGVyZl9ldmVudF9kYXRhX2tlcm4gKiwgY3R4LFxcbiBcXHRfX3U2NCBucl9rZXJuZWw7XFxuIFxcbiBcXHRpZiAoIShldmVudC1cXHUwMDNlYXR0ci5zYW1wbGVfdHlwZSBcXHUwMDI2IFBFUkZfU0FNUExFX0NBTExDSEFJTikpXFxuLVxcdFxcdHJldHVybiBfX2JwZl9nZXRfc3RhY2socmVncywgTlVMTCwgTlVMTCwgYnVmLCBzaXplLCBmbGFncywgZmFsc2UgLyogIW1heV9mYXVsdCAqLyk7XFxuK1xcdFxcdHJldHVybiBfX2JwZl9nZXRfc3RhY2socmVncywgTlVMTCwgYnVmLCBzaXplLCBmbGFncywgZmFsc2UgLyogIW1heV9mYXVsdCAqLyk7XFxuIFxcbiBcXHRpZiAodW5saWtlbHkoZmxhZ3MgXFx1MDAyNiB+KEJQRl9GX1NLSVBfRklFTERfTUFTSyB8IEJQRl9GX1VTRVJfU1RBQ0sgfFxcbiBcXHRcXHRcXHQgICAgICAgQlBGX0ZfVVNFUl9CVUlMRF9JRCkpKVxcbkBAIC04ODMsNyArOTg4LDcgQEAgQlBGX0NBTExfNChicGZfZ2V0X3N0YWNrX3BlLCBzdHJ1Y3QgYnBmX3BlcmZfZXZlbnRfZGF0YV9rZXJuICosIGN0eCxcXG4gXFx0XFx0X191NjQgbnIgPSB0cmFjZS1cXHUwMDNlbnI7XFxuIFxcbiBcXHRcXHR0cmFjZS1cXHUwMDNlbnIgPSBucl9rZXJuZWw7XFxuLVxcdFxcdGVyciA9IF9fYnBmX2dldF9zdGFjayhyZWdzLCBOVUxMLCB0cmFjZSwgYnVmLCBzaXplLCBmbGFncywgZmFsc2UgLyogIW1heV9mYXVsdCAqLyk7XFxuK1xcdFxcdGVyciA9IF9fYnBmX2dldF9zdGFja19wZSh0cmFjZSwgYnVmLCBzaXplLCBmbGFncyk7XFxuIFxcbiBcXHRcXHQvKiByZXN0b3JlIG5yICovXFxuIFxcdFxcdHRyYWNlLVxcdTAwM2VuciA9IG5yO1xcbkBAIC04OTMsMTQgKzk5OCwxMyBAQCBCUEZfQ0FMTF80KGJwZl9nZXRfc3RhY2tfcGUsIHN0cnVjdCBicGZfcGVyZl9ldmVudF9kYXRhX2tlcm4gKiwgY3R4LFxcbiBcXHRcXHRza2lwICs9IG5yX2tlcm5lbDtcXG4gXFx0XFx0aWYgKHNraXAgXFx1MDAzZSBCUEZfRl9TS0lQX0ZJRUxEX01BU0spXFxuIFxcdFxcdFxcdGdvdG8gY2xlYXI7XFxuLVxcbiBcXHRcXHRmbGFncyA9IChmbGFncyBcXHUwMDI2IH5CUEZfRl9TS0lQX0ZJRUxEX01BU0spIHwgc2tpcDtcXG4tXFx0XFx0ZXJyID0gX19icGZfZ2V0X3N0YWNrKHJlZ3MsIE5VTEwsIHRyYWNlLCBidWYsIHNpemUsIGZsYWdzLCBmYWxzZSAvKiAhbWF5X2ZhdWx0ICovKTtcXG4rXFx0XFx0ZXJyID0gX19icGZfZ2V0X3N0YWNrX3BlKHRyYWNlLCBidWYsIHNpemUsIGZsYWdzKTtcXG4gXFx0fVxcbi1cXHRyZXR1cm4gZXJyO1xcbiBcXG4gY2xlYXI6XFxuLVxcdG1lbXNldChidWYsIDAsIHNpemUpO1xcbitcXHRpZiAoZXJyIFxcdTAwM2MgMClcXG4rXFx0XFx0bWVtc2V0KGJ1ZiwgMCwgc2l6ZSk7XFxuIFxcdHJldHVybiBlcnI7XFxuIFxcbiB9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIwVDEwOjQ5OjU4LjY0Mjc3MDYyNVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjE1MjYzNjMyNjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX1NZU0NBTExcIixcbiAgICBcIlBFUkZfRVZFTlRTXCIsXG4gICAgXCJCUEZfRVZFTlRTXCIsXG4gICAgXCJTVEFDS1RSQUNFXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYnBmX2dldF9zdGFja2lkXCIsXG4gICAgXCJicGZfZ2V0X3N0YWNraWRfcGVcIixcbiAgICBcImJwZl9nZXRfc3RhY2tcIixcbiAgICBcImJwZl9nZXRfc3RhY2tfc2xlZXBhYmxlXCIsXG4gICAgXCJicGZfZ2V0X3Rhc2tfc3RhY2tcIixcbiAgICBcImJwZl9nZXRfdGFza19zdGFja19zbGVlcGFibGVcIixcbiAgICBcImJwZl9nZXRfc3RhY2tfcGVcIixcbiAgICBcInN0YWNraWRfZmFzdHBhdGhcIixcbiAgICBcInN0YWNraWRfbmV3X2J1Y2tldFwiLFxuICAgIFwic3RhY2tpZF9pbnN0YWxsXCIsXG4gICAgXCJjYWxsY2hhaW5fc3RvcmVcIixcbiAgICBcImNhbGxjaGFpbl9maW5hbGl6ZVwiLFxuICAgIFwiX19icGZfZ2V0X3N0YWNrXCIsXG4gICAgXCJfX2JwZl9nZXRfc3RhY2tfcGVcIixcbiAgICBcIl9fYnBmX2dldF90YXNrX3N0YWNrXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSBCUEYgc3RhY2ttYXAgYW5kIHN0YWNraWQgaGVscGVyIGZ1bmN0aW9ucywgaW50cm9kdWNpbmcgbmV3IGludGVybmFsIGhlbHBlciBmdW5jdGlvbnMgbGlrZSBgc3RhY2tpZF9mYXN0cGF0aGAsIGBzdGFja2lkX25ld19idWNrZXRgLCBgc3RhY2tpZF9pbnN0YWxsYCwgYGNhbGxjaGFpbl9zdG9yZWAsIGFuZCBgY2FsbGNoYWluX2ZpbmFsaXplYC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIEJQRiBzdWJzeXN0ZW0gdGhhdCBoYW5kbGVzIHN0YWNrIHRyYWNlcyBhbmQgcGVyZiBldmVudCBjYWxsY2hhaW5zLiBJdCBpcyBpbXBvcnRhbnQgdG8gZnV6eiB0aGVzZSBjaGFuZ2VzIHRvIGVuc3VyZSBubyByZWdyZXNzaW9ucywgbWVtb3J5IGxlYWtzLCBvciBjb25jdXJyZW5jeSBpc3N1ZXMgYXJlIGludHJvZHVjZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXRcbiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSxcbiAgIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgY2FlOTU0Yzk1Y2U3MmJhOTI5MTgwN2JhM2NjNWFkYzZjYWVmOWE5OFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gSnVsIDIwIDEwOjQ5OjU2IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9zdGFja21hcC5jIGIva2VybmVsL2JwZi9zdGFja21hcC5jXG5pbmRleCA0MWZlODdkNzMwMmYyMi4uMzdmOGU0NjMxOWIzNGYgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvYnBmL3N0YWNrbWFwLmNcbisrKyBiL2tlcm5lbC9icGYvc3RhY2ttYXAuY1xuQEAgLTUwNCw3OCArNTA0LDExNiBAQCBnZXRfY2FsbGNoYWluX2VudHJ5X2Zvcl90YXNrKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywgdTMyIG1heF9kZXB0aClcbiAjZW5kaWZcbiB9XG4gXG4tc3RhdGljIGxvbmcgX19icGZfZ2V0X3N0YWNraWQoc3RydWN0IGJwZl9tYXAgKm1hcCxcbi1cdFx0XHQgICAgICBzdHJ1Y3QgcGVyZl9jYWxsY2hhaW5fZW50cnkgKnRyYWNlLCB1NjQgZmxhZ3MpXG4rc3RydWN0IHN0YWNraWQge1xuK1x0c3RydWN0IHN0YWNrX21hcF9idWNrZXQgKmJ1Y2tldDtcbitcdHU2NCAqaXBzO1xuK1x0dTMyICBucjtcbitcdHUzMiAgbGVuO1xuK1x0dTMyICBoYXNoO1xuK1x0dTMyICBpZDtcbitcdGJvb2wgaGFzaF9tYXRjaGVzO1xuK307XG4rXG4rc3RhdGljIGludCBzdGFja2lkX2luaXQoc3RydWN0IHN0YWNraWQgKnN0YWNraWQsIHN0cnVjdCBicGZfbWFwICptYXAsXG4rXHRcdFx0c3RydWN0IHBlcmZfY2FsbGNoYWluX2VudHJ5ICp0cmFjZSwgdTY0IGZsYWdzKVxuIHtcbiBcdHN0cnVjdCBicGZfc3RhY2tfbWFwICpzbWFwID0gY29udGFpbmVyX29mKG1hcCwgc3RydWN0IGJwZl9zdGFja19tYXAsIG1hcCk7XG4tXHRzdHJ1Y3Qgc3RhY2tfbWFwX2J1Y2tldCAqYnVja2V0LCAqbmV3X2J1Y2tldCwgKm9sZF9idWNrZXQ7XG4tXHR1MzIgaGFzaCwgaWQsIHRyYWNlX25yLCB0cmFjZV9sZW4sIGksIG1heF9kZXB0aDtcbiBcdHUzMiBza2lwID0gZmxhZ3MgXHUwMDI2IEJQRl9GX1NLSVBfRklFTERfTUFTSztcbi1cdGJvb2wgdXNlciA9IGZsYWdzIFx1MDAyNiBCUEZfRl9VU0VSX1NUQUNLO1xuLVx0dTY0ICppcHM7XG4tXHRib29sIGhhc2hfbWF0Y2hlcztcbitcdHUzMiBtYXhfZGVwdGg7XG4gXG4gXHRpZiAodHJhY2UtXHUwMDNlbnIgXHUwMDNjPSBza2lwKVxuIFx0XHQvKiBza2lwcGluZyBtb3JlIHRoYW4gdXNhYmxlIHN0YWNrIHRyYWNlICovXG4gXHRcdHJldHVybiAtRUZBVUxUO1xuIFxuIFx0bWF4X2RlcHRoID0gc3RhY2tfbWFwX2NhbGN1bGF0ZV9tYXhfZGVwdGgobWFwLVx1MDAzZXZhbHVlX3NpemUsIHN0YWNrX21hcF9kYXRhX3NpemUobWFwKSwgZmxhZ3MpO1xuLVx0dHJhY2VfbnIgPSBtaW5fdCh1MzIsIHRyYWNlLVx1MDAzZW5yIC0gc2tpcCwgbWF4X2RlcHRoIC0gc2tpcCk7XG4tXHR0cmFjZV9sZW4gPSB0cmFjZV9uciAqIHNpemVvZih1NjQpO1xuLVx0aXBzID0gdHJhY2UtXHUwMDNlaXAgKyBza2lwO1xuLVx0aGFzaCA9IGpoYXNoMigodTMyICopaXBzLCB0cmFjZV9sZW4gLyBzaXplb2YodTMyKSwgMCk7XG4tXHRpZCA9IGhhc2ggXHUwMDI2IChzbWFwLVx1MDAzZW5fYnVja2V0cyAtIDEpO1xuLVx0YnVja2V0ID0gUkVBRF9PTkNFKHNtYXAtXHUwMDNlYnVja2V0c1tpZF0pO1xuK1x0c3RhY2tpZC1cdTAwM2VuciA9IG1pbl90KHUzMiwgdHJhY2UtXHUwMDNlbnIgLSBza2lwLCBtYXhfZGVwdGggLSBza2lwKTtcbitcdHN0YWNraWQtXHUwMDNlbGVuID0gc3RhY2tpZC1cdTAwM2VuciAqIHNpemVvZih1NjQpO1xuK1x0c3RhY2tpZC1cdTAwM2VpcHMgPSB0cmFjZS1cdTAwM2VpcCArIHNraXA7XG4rXHRzdGFja2lkLVx1MDAzZWhhc2ggPSBqaGFzaDIoKHUzMiAqKXN0YWNraWQtXHUwMDNlaXBzLCBzdGFja2lkLVx1MDAzZWxlbiAvIHNpemVvZih1MzIpLCAwKTtcbitcdHN0YWNraWQtXHUwMDNlaWQgPSBzdGFja2lkLVx1MDAzZWhhc2ggXHUwMDI2IChzbWFwLVx1MDAzZW5fYnVja2V0cyAtIDEpO1xuK1x0c3RhY2tpZC1cdTAwM2VidWNrZXQgPSBSRUFEX09OQ0Uoc21hcC1cdTAwM2VidWNrZXRzW3N0YWNraWQtXHUwMDNlaWRdKTtcbitcdHN0YWNraWQtXHUwMDNlaGFzaF9tYXRjaGVzID0gc3RhY2tpZC1cdTAwM2VidWNrZXQgXHUwMDI2XHUwMDI2IHN0YWNraWQtXHUwMDNlYnVja2V0LVx1MDAzZWhhc2ggPT0gc3RhY2tpZC1cdTAwM2VoYXNoO1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyBpbnQgc3RhY2tpZF9mYXN0cGF0aChzdHJ1Y3Qgc3RhY2tpZCAqc3RhY2tpZCwgc3RydWN0IGJwZl9tYXAgKm1hcCxcbitcdFx0XHQgICAgc3RydWN0IHBlcmZfY2FsbGNoYWluX2VudHJ5ICp0cmFjZSwgdTY0IGZsYWdzKVxuK3tcbitcdGludCBlcnI7XG4rXG4rXHRlcnIgPSBzdGFja2lkX2luaXQoc3RhY2tpZCwgbWFwLCB0cmFjZSwgZmxhZ3MpO1xuK1x0aWYgKGVycilcbitcdFx0cmV0dXJuIGVycjtcbiBcbi1cdGhhc2hfbWF0Y2hlcyA9IGJ1Y2tldCBcdTAwMjZcdTAwMjYgYnVja2V0LVx1MDAzZWhhc2ggPT0gaGFzaDtcbiBcdC8qIGZhc3QgY21wICovXG4tXHRpZiAoaGFzaF9tYXRjaGVzIFx1MDAyNlx1MDAyNiBmbGFncyBcdTAwMjYgQlBGX0ZfRkFTVF9TVEFDS19DTVApXG4tXHRcdHJldHVybiBpZDtcbitcdGlmIChzdGFja2lkLVx1MDAzZWhhc2hfbWF0Y2hlcyBcdTAwMjZcdTAwMjYgZmxhZ3MgXHUwMDI2IEJQRl9GX0ZBU1RfU1RBQ0tfQ01QKVxuK1x0XHRyZXR1cm4gc3RhY2tpZC1cdTAwM2VpZDtcbitcbitcdGlmIChzdGFja19tYXBfdXNlX2J1aWxkX2lkKG1hcCkpXG4rXHRcdHJldHVybiAtRU5PRU5UO1xuK1x0aWYgKHN0YWNraWQtXHUwMDNlaGFzaF9tYXRjaGVzIFx1MDAyNlx1MDAyNiBzdGFja2lkLVx1MDAzZWJ1Y2tldC1cdTAwM2VuciA9PSBzdGFja2lkLVx1MDAzZW5yIFx1MDAyNlx1MDAyNlxuK1x0ICAgIG1lbWNtcChzdGFja2lkLVx1MDAzZWJ1Y2tldC1cdTAwM2VkYXRhLCBzdGFja2lkLVx1MDAzZWlwcywgc3RhY2tpZC1cdTAwM2VsZW4pID09IDApXG4rXHRcdHJldHVybiBzdGFja2lkLVx1MDAzZWlkO1xuK1x0aWYgKHN0YWNraWQtXHUwMDNlYnVja2V0IFx1MDAyNlx1MDAyNiAhKGZsYWdzIFx1MDAyNiBCUEZfRl9SRVVTRV9TVEFDS0lEKSlcbitcdFx0cmV0dXJuIC1FRVhJU1Q7XG4rXHRyZXR1cm4gLUVOT0VOVDtcbit9XG4rXG4rc3RhdGljIHN0cnVjdCBzdGFja19tYXBfYnVja2V0ICpcbitzdGFja2lkX25ld19idWNrZXQoc3RydWN0IHN0YWNraWQgKnN0YWNraWQsIHN0cnVjdCBicGZfbWFwICptYXAsXG4rXHRcdCAgIHN0cnVjdCBwZXJmX2NhbGxjaGFpbl9lbnRyeSAqdHJhY2UsIHU2NCBmbGFncylcbit7XG4rXHRzdHJ1Y3QgYnBmX3N0YWNrX21hcCAqc21hcCA9IGNvbnRhaW5lcl9vZihtYXAsIHN0cnVjdCBicGZfc3RhY2tfbWFwLCBtYXApO1xuK1x0c3RydWN0IGJwZl9zdGFja19idWlsZF9pZCAqaWRfb2ZmcztcbitcdHN0cnVjdCBzdGFja19tYXBfYnVja2V0ICpidWNrZXQ7XG4rXHR1MzIgaTtcbitcbitcdGJ1Y2tldCA9IChzdHJ1Y3Qgc3RhY2tfbWFwX2J1Y2tldCAqKSBwY3B1X2ZyZWVsaXN0X3BvcChcdTAwMjZzbWFwLVx1MDAzZWZyZWVsaXN0KTtcbitcdGlmICh1bmxpa2VseSghYnVja2V0KSlcbitcdFx0cmV0dXJuIE5VTEw7XG4rXG4rXHRpZiAoc3RhY2tfbWFwX3VzZV9idWlsZF9pZChtYXApKSB7XG4rXHRcdGlkX29mZnMgPSAoc3RydWN0IGJwZl9zdGFja19idWlsZF9pZCAqKWJ1Y2tldC1cdTAwM2VkYXRhO1xuK1x0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBzdGFja2lkLVx1MDAzZW5yOyBpKyspXG4rXHRcdFx0aWRfb2Zmc1tpXS5pcCA9IHN0YWNraWQtXHUwMDNlaXBzW2ldO1xuK1x0fSBlbHNlIHtcbitcdFx0bWVtY3B5KGJ1Y2tldC1cdTAwM2VkYXRhLCBzdGFja2lkLVx1MDAzZWlwcywgc3RhY2tpZC1cdTAwM2VsZW4pO1xuK1x0fVxuK1xuK1x0YnVja2V0LVx1MDAzZWhhc2ggPSBzdGFja2lkLVx1MDAzZWhhc2g7XG4rXHRidWNrZXQtXHUwMDNlbnIgPSBzdGFja2lkLVx1MDAzZW5yO1xuK1x0cmV0dXJuIGJ1Y2tldDtcbit9XG4rXG4rc3RhdGljIGxvbmcgc3RhY2tpZF9pbnN0YWxsKHN0cnVjdCBzdGFja2lkICpzdGFja2lkLCBzdHJ1Y3QgYnBmX21hcCAqbWFwLFxuK1x0XHRcdCAgICBzdHJ1Y3Qgc3RhY2tfbWFwX2J1Y2tldCAqbmV3X2J1Y2tldCwgdTY0IGZsYWdzKVxuK3tcbitcdHN0cnVjdCBicGZfc3RhY2tfbWFwICpzbWFwID0gY29udGFpbmVyX29mKG1hcCwgc3RydWN0IGJwZl9zdGFja19tYXAsIG1hcCk7XG4rXHRib29sIHVzZXIgPSBmbGFncyBcdTAwMjYgQlBGX0ZfVVNFUl9TVEFDSztcbitcdHN0cnVjdCBzdGFja19tYXBfYnVja2V0ICpvbGRfYnVja2V0O1xuK1x0dTMyIHRyYWNlX2xlbjtcbiBcbiBcdGlmIChzdGFja19tYXBfdXNlX2J1aWxkX2lkKG1hcCkpIHtcbiBcdFx0c3RydWN0IGJwZl9zdGFja19idWlsZF9pZCAqaWRfb2ZmcztcbiBcbi1cdFx0LyogZm9yIGJ1aWxkX2lkK29mZnNldCwgcG9wIGEgYnVja2V0IGJlZm9yZSBzbG93IGNtcCAqL1xuLVx0XHRuZXdfYnVja2V0ID0gKHN0cnVjdCBzdGFja19tYXBfYnVja2V0ICopXG4tXHRcdFx0cGNwdV9mcmVlbGlzdF9wb3AoXHUwMDI2c21hcC1cdTAwM2VmcmVlbGlzdCk7XG4tXHRcdGlmICh1bmxpa2VseSghbmV3X2J1Y2tldCkpXG4tXHRcdFx0cmV0dXJuIC1FTk9NRU07XG4tXHRcdG5ld19idWNrZXQtXHUwMDNlbnIgPSB0cmFjZV9ucjtcbiBcdFx0aWRfb2ZmcyA9IChzdHJ1Y3QgYnBmX3N0YWNrX2J1aWxkX2lkICopbmV3X2J1Y2tldC1cdTAwM2VkYXRhO1xuLVx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyB0cmFjZV9ucjsgaSsrKVxuLVx0XHRcdGlkX29mZnNbaV0uaXAgPSBpcHNbaV07XG4tXHRcdHN0YWNrX21hcF9nZXRfYnVpbGRfaWRfb2Zmc2V0KGlkX29mZnMsIHRyYWNlX25yLCB1c2VyLCBmYWxzZSAvKiAhbWF5X2ZhdWx0ICovKTtcbi1cdFx0dHJhY2VfbGVuID0gdHJhY2VfbnIgKiBzaXplb2Yoc3RydWN0IGJwZl9zdGFja19idWlsZF9pZCk7XG4tXHRcdGlmIChoYXNoX21hdGNoZXMgXHUwMDI2XHUwMDI2IGJ1Y2tldC1cdTAwM2VuciA9PSB0cmFjZV9uciBcdTAwMjZcdTAwMjZcbi1cdFx0ICAgIG1lbWNtcChidWNrZXQtXHUwMDNlZGF0YSwgbmV3X2J1Y2tldC1cdTAwM2VkYXRhLCB0cmFjZV9sZW4pID09IDApIHtcbitcdFx0c3RhY2tfbWFwX2dldF9idWlsZF9pZF9vZmZzZXQoaWRfb2Zmcywgc3RhY2tpZC1cdTAwM2VuciwgdXNlciwgZmFsc2UgLyogIW1heV9mYXVsdCAqLyk7XG4rXHRcdHRyYWNlX2xlbiA9IHN0YWNraWQtXHUwMDNlbnIgKiBzaXplb2Yoc3RydWN0IGJwZl9zdGFja19idWlsZF9pZCk7XG4rXHRcdGlmIChzdGFja2lkLVx1MDAzZWhhc2hfbWF0Y2hlcyBcdTAwMjZcdTAwMjYgc3RhY2tpZC1cdTAwM2VidWNrZXQtXHUwMDNlbnIgPT0gc3RhY2tpZC1cdTAwM2VuciBcdTAwMjZcdTAwMjZcbitcdFx0ICAgIG1lbWNtcChzdGFja2lkLVx1MDAzZWJ1Y2tldC1cdTAwM2VkYXRhLCBuZXdfYnVja2V0LVx1MDAzZWRhdGEsIHRyYWNlX2xlbikgPT0gMCkge1xuIFx0XHRcdHBjcHVfZnJlZWxpc3RfcHVzaChcdTAwMjZzbWFwLVx1MDAzZWZyZWVsaXN0LCBcdTAwMjZuZXdfYnVja2V0LVx1MDAzZWZub2RlKTtcbi1cdFx0XHRyZXR1cm4gaWQ7XG4rXHRcdFx0cmV0dXJuIHN0YWNraWQtXHUwMDNlaWQ7XG4gXHRcdH1cbi1cdFx0aWYgKGJ1Y2tldCBcdTAwMjZcdTAwMjYgIShmbGFncyBcdTAwMjYgQlBGX0ZfUkVVU0VfU1RBQ0tJRCkpIHtcbitcdFx0aWYgKHN0YWNraWQtXHUwMDNlYnVja2V0IFx1MDAyNlx1MDAyNiAhKGZsYWdzIFx1MDAyNiBCUEZfRl9SRVVTRV9TVEFDS0lEKSkge1xuIFx0XHRcdHBjcHVfZnJlZWxpc3RfcHVzaChcdTAwMjZzbWFwLVx1MDAzZWZyZWVsaXN0LCBcdTAwMjZuZXdfYnVja2V0LVx1MDAzZWZub2RlKTtcbiBcdFx0XHRyZXR1cm4gLUVFWElTVDtcbiBcdFx0fVxuLVx0fSBlbHNlIHtcbi1cdFx0aWYgKGhhc2hfbWF0Y2hlcyBcdTAwMjZcdTAwMjYgYnVja2V0LVx1MDAzZW5yID09IHRyYWNlX25yIFx1MDAyNlx1MDAyNlxuLVx0XHQgICAgbWVtY21wKGJ1Y2tldC1cdTAwM2VkYXRhLCBpcHMsIHRyYWNlX2xlbikgPT0gMClcbi1cdFx0XHRyZXR1cm4gaWQ7XG4tXHRcdGlmIChidWNrZXQgXHUwMDI2XHUwMDI2ICEoZmxhZ3MgXHUwMDI2IEJQRl9GX1JFVVNFX1NUQUNLSUQpKVxuLVx0XHRcdHJldHVybiAtRUVYSVNUO1xuLVxuLVx0XHRuZXdfYnVja2V0ID0gKHN0cnVjdCBzdGFja19tYXBfYnVja2V0ICopXG4tXHRcdFx0cGNwdV9mcmVlbGlzdF9wb3AoXHUwMDI2c21hcC1cdTAwM2VmcmVlbGlzdCk7XG4tXHRcdGlmICh1bmxpa2VseSghbmV3X2J1Y2tldCkpXG4tXHRcdFx0cmV0dXJuIC1FTk9NRU07XG4tXHRcdG1lbWNweShuZXdfYnVja2V0LVx1MDAzZWRhdGEsIGlwcywgdHJhY2VfbGVuKTtcbiBcdH1cbiBcbi1cdG5ld19idWNrZXQtXHUwMDNlaGFzaCA9IGhhc2g7XG4tXHRuZXdfYnVja2V0LVx1MDAzZW5yID0gdHJhY2VfbnI7XG4tXG4tXHRvbGRfYnVja2V0ID0geGNoZyhcdTAwMjZzbWFwLVx1MDAzZWJ1Y2tldHNbaWRdLCBuZXdfYnVja2V0KTtcbitcdG9sZF9idWNrZXQgPSB4Y2hnKFx1MDAyNnNtYXAtXHUwMDNlYnVja2V0c1tzdGFja2lkLVx1MDAzZWlkXSwgbmV3X2J1Y2tldCk7XG4gXHRpZiAob2xkX2J1Y2tldClcbiBcdFx0cGNwdV9mcmVlbGlzdF9wdXNoKFx1MDAyNnNtYXAtXHUwMDNlZnJlZWxpc3QsIFx1MDAyNm9sZF9idWNrZXQtXHUwMDNlZm5vZGUpO1xuLVx0cmV0dXJuIGlkO1xuK1x0cmV0dXJuIHN0YWNraWQtXHUwMDNlaWQ7XG4gfVxuIFxuIEJQRl9DQUxMXzMoYnBmX2dldF9zdGFja2lkLCBzdHJ1Y3QgcHRfcmVncyAqLCByZWdzLCBzdHJ1Y3QgYnBmX21hcCAqLCBtYXAsXG5AQCAtNTgzLDggKzYyMSwxMSBAQCBCUEZfQ0FMTF8zKGJwZl9nZXRfc3RhY2tpZCwgc3RydWN0IHB0X3JlZ3MgKiwgcmVncywgc3RydWN0IGJwZl9tYXAgKiwgbWFwLFxuIHtcbiBcdHUzMiBlbGVtX3NpemUgPSBzdGFja19tYXBfZGF0YV9zaXplKG1hcCk7XG4gXHRib29sIHVzZXIgPSBmbGFncyBcdTAwMjYgQlBGX0ZfVVNFUl9TVEFDSztcbitcdHN0cnVjdCBzdGFja19tYXBfYnVja2V0ICpuZXdfYnVja2V0O1xuIFx0c3RydWN0IHBlcmZfY2FsbGNoYWluX2VudHJ5ICp0cmFjZTtcbitcdHN0cnVjdCBzdGFja2lkIHN0YWNraWQ7XG4gXHRib29sIGtlcm5lbCA9ICF1c2VyO1xuK1x0aW50IGVyciA9IC1FRkFVTFQ7XG4gXHR1MzIgbWF4X2RlcHRoO1xuIFxuIFx0aWYgKHVubGlrZWx5KGZsYWdzIFx1MDAyNiB+KEJQRl9GX1NLSVBfRklFTERfTUFTSyB8IEJQRl9GX1VTRVJfU1RBQ0sgfFxuQEAgLTU5MiwxNCArNjMzLDI5IEBAIEJQRl9DQUxMXzMoYnBmX2dldF9zdGFja2lkLCBzdHJ1Y3QgcHRfcmVncyAqLCByZWdzLCBzdHJ1Y3QgYnBmX21hcCAqLCBtYXAsXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFxuIFx0bWF4X2RlcHRoID0gc3RhY2tfbWFwX2NhbGN1bGF0ZV9tYXhfZGVwdGgobWFwLVx1MDAzZXZhbHVlX3NpemUsIGVsZW1fc2l6ZSwgZmxhZ3MpO1xuK1xuK1x0cHJlZW1wdF9kaXNhYmxlKCk7XG4gXHR0cmFjZSA9IGdldF9wZXJmX2NhbGxjaGFpbihyZWdzLCBrZXJuZWwsIHVzZXIsIG1heF9kZXB0aCxcbiBcdFx0XHRcdCAgIGZhbHNlLCBmYWxzZSwgMCk7XG4gXG4gXHRpZiAodW5saWtlbHkoIXRyYWNlKSlcbiBcdFx0LyogY291bGRuJ3QgZmV0Y2ggdGhlIHN0YWNrIHRyYWNlICovXG4tXHRcdHJldHVybiAtRUZBVUxUO1xuK1x0XHRnb3RvIG91dDtcbitcbitcdGVyciA9IHN0YWNraWRfZmFzdHBhdGgoXHUwMDI2c3RhY2tpZCwgbWFwLCB0cmFjZSwgZmxhZ3MpO1xuK1x0aWYgKGVyciAhPSAtRU5PRU5UKVxuK1x0XHRnb3RvIG91dDtcbitcbitcdG5ld19idWNrZXQgPSBzdGFja2lkX25ld19idWNrZXQoXHUwMDI2c3RhY2tpZCwgbWFwLCB0cmFjZSwgZmxhZ3MpO1xuK1x0aWYgKG5ld19idWNrZXQpIHtcbitcdFx0cHJlZW1wdF9lbmFibGUoKTtcbitcdFx0cmV0dXJuIHN0YWNraWRfaW5zdGFsbChcdTAwMjZzdGFja2lkLCBtYXAsIG5ld19idWNrZXQsIGZsYWdzKTtcbitcdH1cbitcdGVyciA9IC1FTk9NRU07XG4gXG4tXHRyZXR1cm4gX19icGZfZ2V0X3N0YWNraWQobWFwLCB0cmFjZSwgZmxhZ3MpO1xuK291dDpcbitcdHByZWVtcHRfZW5hYmxlKCk7XG4rXHRyZXR1cm4gZXJyO1xuIH1cbiBcbiBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX2dldF9zdGFja2lkX3Byb3RvID0ge1xuQEAgLTYyNyw3ICs2ODMsOSBAQCBCUEZfQ0FMTF8zKGJwZl9nZXRfc3RhY2tpZF9wZSwgc3RydWN0IGJwZl9wZXJmX2V2ZW50X2RhdGFfa2VybiAqLCBjdHgsXG4gXHQgICBzdHJ1Y3QgYnBmX21hcCAqLCBtYXAsIHU2NCwgZmxhZ3MpXG4ge1xuIFx0c3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50ID0gY3R4LVx1MDAzZWV2ZW50O1xuK1x0c3RydWN0IHN0YWNrX21hcF9idWNrZXQgKm5ld19idWNrZXQ7XG4gXHRzdHJ1Y3QgcGVyZl9jYWxsY2hhaW5fZW50cnkgKnRyYWNlO1xuK1x0c3RydWN0IHN0YWNraWQgc3RhY2tpZDtcbiBcdGJvb2wga2VybmVsLCB1c2VyO1xuIFx0X191NjQgbnJfa2VybmVsO1xuIFx0aW50IHJldDtcbkBAIC02NTMsNyArNzExLDYgQEAgQlBGX0NBTExfMyhicGZfZ2V0X3N0YWNraWRfcGUsIHN0cnVjdCBicGZfcGVyZl9ldmVudF9kYXRhX2tlcm4gKiwgY3R4LFxuIFxuIFx0aWYgKGtlcm5lbCkge1xuIFx0XHR0cmFjZS1cdTAwM2VuciA9IG5yX2tlcm5lbDtcbi1cdFx0cmV0ID0gX19icGZfZ2V0X3N0YWNraWQobWFwLCB0cmFjZSwgZmxhZ3MpO1xuIFx0fSBlbHNlIHsgLyogdXNlciAqL1xuIFx0XHR1NjQgc2tpcCA9IGZsYWdzIFx1MDAyNiBCUEZfRl9TS0lQX0ZJRUxEX01BU0s7XG4gXG5AQCAtNjYyLDEyICs3MTksMjIgQEAgQlBGX0NBTExfMyhicGZfZ2V0X3N0YWNraWRfcGUsIHN0cnVjdCBicGZfcGVyZl9ldmVudF9kYXRhX2tlcm4gKiwgY3R4LFxuIFx0XHRcdHJldHVybiAtRUZBVUxUO1xuIFxuIFx0XHRmbGFncyA9IChmbGFncyBcdTAwMjYgfkJQRl9GX1NLSVBfRklFTERfTUFTSykgfCBza2lwO1xuLVx0XHRyZXQgPSBfX2JwZl9nZXRfc3RhY2tpZChtYXAsIHRyYWNlLCBmbGFncyk7XG4gXHR9XG4gXG4rXHRyZXQgPSBzdGFja2lkX2Zhc3RwYXRoKFx1MDAyNnN0YWNraWQsIG1hcCwgdHJhY2UsIGZsYWdzKTtcbitcdGlmIChyZXQgIT0gLUVOT0VOVClcbitcdFx0Z290byBlcnJvcjtcbitcbitcdG5ld19idWNrZXQgPSBzdGFja2lkX25ld19idWNrZXQoXHUwMDI2c3RhY2tpZCwgbWFwLCB0cmFjZSwgZmxhZ3MpO1xuK1x0aWYgKG5ld19idWNrZXQpIHtcbitcdFx0dHJhY2UtXHUwMDNlbnIgPSBucjtcbitcdFx0cmV0dXJuIHN0YWNraWRfaW5zdGFsbChcdTAwMjZzdGFja2lkLCBtYXAsIG5ld19idWNrZXQsIGZsYWdzKTtcbitcdH1cbitcdHJldCA9IC1FTk9NRU07XG4rXG4rZXJyb3I6XG4gXHQvKiByZXN0b3JlIG5yICovXG4gXHR0cmFjZS1cdTAwM2VuciA9IG5yO1xuLVxuIFx0cmV0dXJuIHJldDtcbiB9XG4gXG5AQCAtNjgwLDE5ICs3NDcsNTMgQEAgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9nZXRfc3RhY2tpZF9wcm90b19wZSA9IHtcbiBcdC5hcmczX3R5cGVcdD0gQVJHX0FOWVRISU5HLFxuIH07XG4gXG4rc3RhdGljIHUzMiBjYWxsY2hhaW5fc3RvcmUoc3RydWN0IHBlcmZfY2FsbGNoYWluX2VudHJ5ICp0cmFjZSwgdm9pZCAqYnVmLCB1MzIgc2l6ZSxcbitcdFx0XHQgICB1MzIgZWxlbV9zaXplLCB1NjQgZmxhZ3MpXG4re1xuK1x0Ym9vbCB1c2VyX2J1aWxkX2lkID0gZmxhZ3MgXHUwMDI2IEJQRl9GX1VTRVJfQlVJTERfSUQ7XG4rXHR1MzIgc2tpcCA9IGZsYWdzIFx1MDAyNiBCUEZfRl9TS0lQX0ZJRUxEX01BU0s7XG4rXHR1MzIgdHJhY2VfbnIsIGNvcHlfbGVuO1xuK1x0dTY0ICppcHM7XG4rXG4rXHR0cmFjZV9uciA9IHRyYWNlLVx1MDAzZW5yIC0gc2tpcDtcbitcdGNvcHlfbGVuID0gdHJhY2VfbnIgKiBlbGVtX3NpemU7XG4rXG4rXHRpcHMgPSB0cmFjZS1cdTAwM2VpcCArIHNraXA7XG4rXHRpZiAodXNlcl9idWlsZF9pZCkge1xuK1x0XHRzdHJ1Y3QgYnBmX3N0YWNrX2J1aWxkX2lkICppZF9vZmZzID0gYnVmO1xuK1xuK1x0XHRmb3IgKHUzMiBpID0gMDsgaSBcdTAwM2MgdHJhY2VfbnI7IGkrKylcbitcdFx0XHRpZF9vZmZzW2ldLmlwID0gaXBzW2ldO1xuK1x0fSBlbHNlIHtcbitcdFx0bWVtY3B5KGJ1ZiwgaXBzLCBjb3B5X2xlbik7XG4rXHR9XG4rXHRyZXR1cm4gdHJhY2VfbnI7XG4rfVxuK1xuK3N0YXRpYyBsb25nIGNhbGxjaGFpbl9maW5hbGl6ZSh2b2lkICpidWYsIHUzMiBzaXplLCB1MzIgdHJhY2VfbnIsIHUzMiBlbGVtX3NpemUsXG4rXHRcdFx0ICAgICAgIGJvb2wgdXNlcl9idWlsZF9pZCwgYm9vbCB1c2VyLCBib29sIG1heV9mYXVsdClcbit7XG4rXHR1MzIgY29weV9sZW4gPSB0cmFjZV9uciAqIGVsZW1fc2l6ZTtcbitcbitcdGlmICh1c2VyX2J1aWxkX2lkKVxuK1x0XHRzdGFja19tYXBfZ2V0X2J1aWxkX2lkX29mZnNldChidWYsIHRyYWNlX25yLCB1c2VyLCBtYXlfZmF1bHQpO1xuK1xuK1x0aWYgKHNpemUgXHUwMDNlIGNvcHlfbGVuKVxuK1x0XHRtZW1zZXQoYnVmICsgY29weV9sZW4sIDAsIHNpemUgLSBjb3B5X2xlbik7XG4rXHRyZXR1cm4gY29weV9sZW47XG4rfVxuK1xuIHN0YXRpYyBsb25nIF9fYnBmX2dldF9zdGFjayhzdHJ1Y3QgcHRfcmVncyAqcmVncywgc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLFxuLVx0XHRcdCAgICBzdHJ1Y3QgcGVyZl9jYWxsY2hhaW5fZW50cnkgKnRyYWNlX2luLFxuIFx0XHRcdCAgICB2b2lkICpidWYsIHUzMiBzaXplLCB1NjQgZmxhZ3MsIGJvb2wgbWF5X2ZhdWx0KVxuIHtcbi1cdHUzMiB0cmFjZV9uciwgY29weV9sZW4sIGVsZW1fc2l6ZSwgbWF4X2RlcHRoO1xuIFx0Ym9vbCB1c2VyX2J1aWxkX2lkID0gZmxhZ3MgXHUwMDI2IEJQRl9GX1VTRVJfQlVJTERfSUQ7XG4gXHRib29sIGNyb3NzdGFzayA9IHRhc2sgXHUwMDI2XHUwMDI2IHRhc2sgIT0gY3VycmVudDtcbiBcdHUzMiBza2lwID0gZmxhZ3MgXHUwMDI2IEJQRl9GX1NLSVBfRklFTERfTUFTSztcbiBcdGJvb2wgdXNlciA9IGZsYWdzIFx1MDAyNiBCUEZfRl9VU0VSX1NUQUNLO1xuIFx0c3RydWN0IHBlcmZfY2FsbGNoYWluX2VudHJ5ICp0cmFjZTtcbitcdHUzMiB0cmFjZV9uciwgZWxlbV9zaXplLCBtYXhfZGVwdGg7XG4gXHRib29sIGtlcm5lbCA9ICF1c2VyO1xuIFx0aW50IGVyciA9IC1FSU5WQUw7XG4tXHR1NjQgKmlwcztcbiBcbiBcdGlmICh1bmxpa2VseShmbGFncyBcdTAwMjYgfihCUEZfRl9TS0lQX0ZJRUxEX01BU0sgfCBCUEZfRl9VU0VSX1NUQUNLIHxcbiBcdFx0XHQgICAgICAgQlBGX0ZfVVNFUl9CVUlMRF9JRCkpKVxuQEAgLTcxOCwxMyArODE5LDkgQEAgc3RhdGljIGxvbmcgX19icGZfZ2V0X3N0YWNrKHN0cnVjdCBwdF9yZWdzICpyZWdzLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssXG4gXG4gXHRtYXhfZGVwdGggPSBzdGFja19tYXBfY2FsY3VsYXRlX21heF9kZXB0aChzaXplLCBlbGVtX3NpemUsIGZsYWdzKTtcbiBcbi1cdGlmIChtYXlfZmF1bHQpXG4tXHRcdHJjdV9yZWFkX2xvY2soKTsgLyogbmVlZCBSQ1UgZm9yIHBlcmYncyBjYWxsY2hhaW4gYmVsb3cgKi9cbitcdHByZWVtcHRfZGlzYWJsZSgpO1xuIFxuLVx0aWYgKHRyYWNlX2luKSB7XG4tXHRcdHRyYWNlID0gdHJhY2VfaW47XG4tXHRcdHRyYWNlLVx1MDAzZW5yID0gbWluX3QodTMyLCB0cmFjZS1cdTAwM2VuciwgbWF4X2RlcHRoKTtcbi1cdH0gZWxzZSBpZiAoa2VybmVsIFx1MDAyNlx1MDAyNiB0YXNrKSB7XG4rXHRpZiAoa2VybmVsIFx1MDAyNlx1MDAyNiB0YXNrKSB7XG4gXHRcdHRyYWNlID0gZ2V0X2NhbGxjaGFpbl9lbnRyeV9mb3JfdGFzayh0YXNrLCBtYXhfZGVwdGgpO1xuIFx0fSBlbHNlIHtcbiBcdFx0dHJhY2UgPSBnZXRfcGVyZl9jYWxsY2hhaW4ocmVncywga2VybmVsLCB1c2VyLCBtYXhfZGVwdGgsXG5AQCAtNzMyLDM1ICs4MjksMTYgQEAgc3RhdGljIGxvbmcgX19icGZfZ2V0X3N0YWNrKHN0cnVjdCBwdF9yZWdzICpyZWdzLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssXG4gXHR9XG4gXG4gXHRpZiAodW5saWtlbHkoIXRyYWNlKSB8fCB0cmFjZS1cdTAwM2VuciBcdTAwM2Mgc2tpcCkge1xuLVx0XHRpZiAobWF5X2ZhdWx0KVxuLVx0XHRcdHJjdV9yZWFkX3VubG9jaygpO1xuK1x0XHRwcmVlbXB0X2VuYWJsZSgpO1xuIFx0XHRnb3RvIGVycl9mYXVsdDtcbiBcdH1cbiBcbi1cdHRyYWNlX25yID0gdHJhY2UtXHUwMDNlbnIgLSBza2lwO1xuLVx0Y29weV9sZW4gPSB0cmFjZV9uciAqIGVsZW1fc2l6ZTtcbi1cbi1cdGlwcyA9IHRyYWNlLVx1MDAzZWlwICsgc2tpcDtcbi1cdGlmICh1c2VyX2J1aWxkX2lkKSB7XG4tXHRcdHN0cnVjdCBicGZfc3RhY2tfYnVpbGRfaWQgKmlkX29mZnMgPSBidWY7XG4tXHRcdHUzMiBpO1xuLVxuLVx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyB0cmFjZV9ucjsgaSsrKVxuLVx0XHRcdGlkX29mZnNbaV0uaXAgPSBpcHNbaV07XG4tXHR9IGVsc2Uge1xuLVx0XHRtZW1jcHkoYnVmLCBpcHMsIGNvcHlfbGVuKTtcbi1cdH1cbi1cbi1cdC8qIHRyYWNlL2lwcyBzaG91bGQgbm90IGJlIGRlcmVmZXJlbmNlZCBhZnRlciB0aGlzIHBvaW50ICovXG4tXHRpZiAobWF5X2ZhdWx0KVxuLVx0XHRyY3VfcmVhZF91bmxvY2soKTtcbitcdHRyYWNlX25yID0gY2FsbGNoYWluX3N0b3JlKHRyYWNlLCBidWYsIHNpemUsIGVsZW1fc2l6ZSwgZmxhZ3MpO1xuIFxuLVx0aWYgKHVzZXJfYnVpbGRfaWQpXG4tXHRcdHN0YWNrX21hcF9nZXRfYnVpbGRfaWRfb2Zmc2V0KGJ1ZiwgdHJhY2VfbnIsIHVzZXIsIG1heV9mYXVsdCk7XG4rXHQvKiB0cmFjZSBzaG91bGQgbm90IGJlIGRlcmVmZXJlbmNlZCBhZnRlciB0aGlzIHBvaW50ICovXG4rXHRwcmVlbXB0X2VuYWJsZSgpO1xuIFxuLVx0aWYgKHNpemUgXHUwMDNlIGNvcHlfbGVuKVxuLVx0XHRtZW1zZXQoYnVmICsgY29weV9sZW4sIDAsIHNpemUgLSBjb3B5X2xlbik7XG4tXHRyZXR1cm4gY29weV9sZW47XG4rXHRyZXR1cm4gY2FsbGNoYWluX2ZpbmFsaXplKGJ1Ziwgc2l6ZSwgdHJhY2VfbnIsIGVsZW1fc2l6ZSwgdXNlcl9idWlsZF9pZCwgdXNlciwgbWF5X2ZhdWx0KTtcbiBcbiBlcnJfZmF1bHQ6XG4gXHRlcnIgPSAtRUZBVUxUO1xuQEAgLTc3Miw3ICs4NTAsNyBAQCBzdGF0aWMgbG9uZyBfX2JwZl9nZXRfc3RhY2soc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzayxcbiBCUEZfQ0FMTF80KGJwZl9nZXRfc3RhY2ssIHN0cnVjdCBwdF9yZWdzICosIHJlZ3MsIHZvaWQgKiwgYnVmLCB1MzIsIHNpemUsXG4gXHQgICB1NjQsIGZsYWdzKVxuIHtcbi1cdHJldHVybiBfX2JwZl9nZXRfc3RhY2socmVncywgTlVMTCwgTlVMTCwgYnVmLCBzaXplLCBmbGFncywgZmFsc2UgLyogIW1heV9mYXVsdCAqLyk7XG4rXHRyZXR1cm4gX19icGZfZ2V0X3N0YWNrKHJlZ3MsIE5VTEwsIGJ1Ziwgc2l6ZSwgZmxhZ3MsIGZhbHNlIC8qICFtYXlfZmF1bHQgKi8pO1xuIH1cbiBcbiBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX2dldF9zdGFja19wcm90byA9IHtcbkBAIC03ODgsNyArODY2LDcgQEAgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9nZXRfc3RhY2tfcHJvdG8gPSB7XG4gQlBGX0NBTExfNChicGZfZ2V0X3N0YWNrX3NsZWVwYWJsZSwgc3RydWN0IHB0X3JlZ3MgKiwgcmVncywgdm9pZCAqLCBidWYsIHUzMiwgc2l6ZSxcbiBcdCAgIHU2NCwgZmxhZ3MpXG4ge1xuLVx0cmV0dXJuIF9fYnBmX2dldF9zdGFjayhyZWdzLCBOVUxMLCBOVUxMLCBidWYsIHNpemUsIGZsYWdzLCB0cnVlIC8qIG1heV9mYXVsdCAqLyk7XG4rXHRyZXR1cm4gX19icGZfZ2V0X3N0YWNrKHJlZ3MsIE5VTEwsIGJ1Ziwgc2l6ZSwgZmxhZ3MsIHRydWUgLyogbWF5X2ZhdWx0ICovKTtcbiB9XG4gXG4gY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9nZXRfc3RhY2tfc2xlZXBhYmxlX3Byb3RvID0ge1xuQEAgLTgxMiw3ICs4OTAsNyBAQCBzdGF0aWMgbG9uZyBfX2JwZl9nZXRfdGFza19zdGFjayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssIHZvaWQgKmJ1ZiwgdTMyIHNpemUsXG4gXG4gXHRyZWdzID0gdGFza19wdF9yZWdzKHRhc2spO1xuIFx0aWYgKHJlZ3MpXG4tXHRcdHJlcyA9IF9fYnBmX2dldF9zdGFjayhyZWdzLCB0YXNrLCBOVUxMLCBidWYsIHNpemUsIGZsYWdzLCBtYXlfZmF1bHQpO1xuK1x0XHRyZXMgPSBfX2JwZl9nZXRfc3RhY2socmVncywgdGFzaywgYnVmLCBzaXplLCBmbGFncywgbWF5X2ZhdWx0KTtcbiBcdHB1dF90YXNrX3N0YWNrKHRhc2spO1xuIFxuIFx0cmV0dXJuIHJlcztcbkBAIC04NTIsNiArOTMwLDMzIEBAIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfZ2V0X3Rhc2tfc3RhY2tfc2xlZXBhYmxlX3Byb3RvID0ge1xuIFx0LmFyZzRfdHlwZVx0PSBBUkdfQU5ZVEhJTkcsXG4gfTtcbiBcbitzdGF0aWMgaW50IF9fYnBmX2dldF9zdGFja19wZShzdHJ1Y3QgcGVyZl9jYWxsY2hhaW5fZW50cnkgKnRyYWNlLCB2b2lkICpidWYsIHUzMiBzaXplLFxuK1x0XHRcdCAgICAgIHU2NCBmbGFncylcbit7XG4rXHRib29sIHVzZXJfYnVpbGRfaWQgPSBmbGFncyBcdTAwMjYgQlBGX0ZfVVNFUl9CVUlMRF9JRDtcbitcdHU2NCBza2lwID0gZmxhZ3MgXHUwMDI2IEJQRl9GX1NLSVBfRklFTERfTUFTSztcbitcdGJvb2wgdXNlciA9IGZsYWdzIFx1MDAyNiBCUEZfRl9VU0VSX1NUQUNLO1xuK1x0dTMyIGVsZW1fc2l6ZSwgbWF4X2RlcHRoLCBucl90cmFjZTtcbitcdGJvb2wga2VybmVsID0gIXVzZXI7XG4rXG4rXHRpZiAoa2VybmVsIFx1MDAyNlx1MDAyNiB1c2VyX2J1aWxkX2lkKVxuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcbitcdGVsZW1fc2l6ZSA9IHVzZXJfYnVpbGRfaWQgPyBzaXplb2Yoc3RydWN0IGJwZl9zdGFja19idWlsZF9pZCkgOiBzaXplb2YodTY0KTtcbitcdGlmICh1bmxpa2VseShzaXplICUgZWxlbV9zaXplKSlcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXG4rXHRtYXhfZGVwdGggPSBzdGFja19tYXBfY2FsY3VsYXRlX21heF9kZXB0aChzaXplLCBlbGVtX3NpemUsIGZsYWdzKTtcbitcdHRyYWNlLVx1MDAzZW5yID0gbWluX3QodTMyLCB0cmFjZS1cdTAwM2VuciwgbWF4X2RlcHRoKTtcbitcbitcdGlmICh0cmFjZS1cdTAwM2VuciBcdTAwM2Mgc2tpcClcbitcdFx0cmV0dXJuIC1FRkFVTFQ7XG4rXG4rXHRucl90cmFjZSA9IGNhbGxjaGFpbl9zdG9yZSh0cmFjZSwgYnVmLCBzaXplLCBlbGVtX3NpemUsIGZsYWdzKTtcbitcdHJldHVybiBjYWxsY2hhaW5fZmluYWxpemUoYnVmLCBzaXplLCBucl90cmFjZSwgZWxlbV9zaXplLCB1c2VyX2J1aWxkX2lkLFxuK1x0XHRcdFx0ICB1c2VyLCBmYWxzZSAvKiAhbWF5X2ZhdWx0ICovKTtcbit9XG4rXG4gQlBGX0NBTExfNChicGZfZ2V0X3N0YWNrX3BlLCBzdHJ1Y3QgYnBmX3BlcmZfZXZlbnRfZGF0YV9rZXJuICosIGN0eCxcbiBcdCAgIHZvaWQgKiwgYnVmLCB1MzIsIHNpemUsIHU2NCwgZmxhZ3MpXG4ge1xuQEAgLTg2Myw3ICs5NjgsNyBAQCBCUEZfQ0FMTF80KGJwZl9nZXRfc3RhY2tfcGUsIHN0cnVjdCBicGZfcGVyZl9ldmVudF9kYXRhX2tlcm4gKiwgY3R4LFxuIFx0X191NjQgbnJfa2VybmVsO1xuIFxuIFx0aWYgKCEoZXZlbnQtXHUwMDNlYXR0ci5zYW1wbGVfdHlwZSBcdTAwMjYgUEVSRl9TQU1QTEVfQ0FMTENIQUlOKSlcbi1cdFx0cmV0dXJuIF9fYnBmX2dldF9zdGFjayhyZWdzLCBOVUxMLCBOVUxMLCBidWYsIHNpemUsIGZsYWdzLCBmYWxzZSAvKiAhbWF5X2ZhdWx0ICovKTtcbitcdFx0cmV0dXJuIF9fYnBmX2dldF9zdGFjayhyZWdzLCBOVUxMLCBidWYsIHNpemUsIGZsYWdzLCBmYWxzZSAvKiAhbWF5X2ZhdWx0ICovKTtcbiBcbiBcdGlmICh1bmxpa2VseShmbGFncyBcdTAwMjYgfihCUEZfRl9TS0lQX0ZJRUxEX01BU0sgfCBCUEZfRl9VU0VSX1NUQUNLIHxcbiBcdFx0XHQgICAgICAgQlBGX0ZfVVNFUl9CVUlMRF9JRCkpKVxuQEAgLTg4Myw3ICs5ODgsNyBAQCBCUEZfQ0FMTF80KGJwZl9nZXRfc3RhY2tfcGUsIHN0cnVjdCBicGZfcGVyZl9ldmVudF9kYXRhX2tlcm4gKiwgY3R4LFxuIFx0XHRfX3U2NCBuciA9IHRyYWNlLVx1MDAzZW5yO1xuIFxuIFx0XHR0cmFjZS1cdTAwM2VuciA9IG5yX2tlcm5lbDtcbi1cdFx0ZXJyID0gX19icGZfZ2V0X3N0YWNrKHJlZ3MsIE5VTEwsIHRyYWNlLCBidWYsIHNpemUsIGZsYWdzLCBmYWxzZSAvKiAhbWF5X2ZhdWx0ICovKTtcbitcdFx0ZXJyID0gX19icGZfZ2V0X3N0YWNrX3BlKHRyYWNlLCBidWYsIHNpemUsIGZsYWdzKTtcbiBcbiBcdFx0LyogcmVzdG9yZSBuciAqL1xuIFx0XHR0cmFjZS1cdTAwM2VuciA9IG5yO1xuQEAgLTg5MywxNCArOTk4LDEzIEBAIEJQRl9DQUxMXzQoYnBmX2dldF9zdGFja19wZSwgc3RydWN0IGJwZl9wZXJmX2V2ZW50X2RhdGFfa2VybiAqLCBjdHgsXG4gXHRcdHNraXAgKz0gbnJfa2VybmVsO1xuIFx0XHRpZiAoc2tpcCBcdTAwM2UgQlBGX0ZfU0tJUF9GSUVMRF9NQVNLKVxuIFx0XHRcdGdvdG8gY2xlYXI7XG4tXG4gXHRcdGZsYWdzID0gKGZsYWdzIFx1MDAyNiB+QlBGX0ZfU0tJUF9GSUVMRF9NQVNLKSB8IHNraXA7XG4tXHRcdGVyciA9IF9fYnBmX2dldF9zdGFjayhyZWdzLCBOVUxMLCB0cmFjZSwgYnVmLCBzaXplLCBmbGFncywgZmFsc2UgLyogIW1heV9mYXVsdCAqLyk7XG4rXHRcdGVyciA9IF9fYnBmX2dldF9zdGFja19wZSh0cmFjZSwgYnVmLCBzaXplLCBmbGFncyk7XG4gXHR9XG4tXHRyZXR1cm4gZXJyO1xuIFxuIGNsZWFyOlxuLVx0bWVtc2V0KGJ1ZiwgMCwgc2l6ZSk7XG4rXHRpZiAoZXJyIFx1MDAzYyAwKVxuK1x0XHRtZW1zZXQoYnVmLCAwLCBzaXplKTtcbiBcdHJldHVybiBlcnI7XG4gXG4gfVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjBUMTA6NDk6NTguNjQyNzczMDY1WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTEwMzk1MjkyOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEJQRiBTdGFja21hcCBQYXRjaCoqXG5cbk9rYXksIHNvIEkndmUgZ290IHRoaXMgcGF0Y2ggaGVyZSB0aGF04oCZcyB0b3VjaGluZyBga2VybmVsL2JwZi9zdGFja21hcC5jYC4gSW1tZWRpYXRlbHksIEkgc2VlIGl0J3MgYSByZWZhY3RvcmluZyBlZmZvcnQsIGludHJvZHVjaW5nIHNldmVyYWwgbmV3IHN0cnVjdHVyZXMgYW5kIGZ1bmN0aW9ucyByZWxhdGVkIHRvIHN0YWNrbWFwIGhhbmRsaW5nLiBgc3RydWN0IHN0YWNraWRgLCBgc3RhY2tpZF9pbml0YCwgdGhhdCBzb3J0IG9mIHRoaW5nIOKAkyB0aGlzIGlzIGFsbCBkZXNpZ25lZCB0byBpbXByb3ZlIGhvdyB0aGUgQlBGIHN1YnN5c3RlbSBtYW5hZ2VzIHN0YWNrIGRhdGEsIHNwZWNpZmljYWxseSBmb3IgcGVyZiBldmVudCBjYWxsY2hhaW5zLiBXZSdyZSBsb29raW5nIGF0IHNpZ25pZmljYW50IGNoYW5nZXMgdG8gYGJwZl9nZXRfc3RhY2tpZGAgYW5kIHJlbGF0ZWQgZnVuY3Rpb25zIHRvby5cblxuVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBhIHByZXR0eSBkZWVwIGRpdmUgaW50byBjb3JlIEJQRiBhbmQgcGVyZiBpbnRlZ3JhdGlvbiwgYW5kIHRoYXQgbWFrZXMgaXQgYSBwcmltZSB0YXJnZXQgZm9yIGZ1enppbmcuIEFueSB0aW1lIHlvdSdyZSB0b3VjaGluZyBzdGFjayBtYW5pcHVsYXRpb24sIHlvdSdyZSBvcGVuaW5nIHRoZSBkb29yIHRvIHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXMuXG5cbk5vdywgbGV0J3Mgc2VlIHdoYXQncyBuZWVkZWQgZm9yIHRoZSBrZXJuZWwgYnVpbGQuIEkga25vdyBga2VybmVsL2JwZi9zdGFja21hcC5jYCBpcyBjb21waWxlZCB3aGVuIGBDT05GSUdfQlBGX1NZU0NBTExgIGlzIGVuYWJsZWQsIGJ1dCBJJ2xsIGRvdWJsZS1jaGVjayBga2VybmVsL2JwZi9NYWtlZmlsZWAganVzdCB0byBiZSBzdXJlIHRoZXJlIGFyZW4ndCBhbnkgb3RoZXIgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMgbHVya2luZyBpbiB0aGVyZS4gR290dGEgZ2V0IHRoZSBmdXp6aW5nIGVudmlyb25tZW50IHNldCB1cCBjb3JyZWN0bHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc5NTUsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMDksIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMFQxMDo1MDowMy43NDY3MjgyODNaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjU2MDMxNTQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic3RhY2ttYXBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2JwZi9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL01ha2VmaWxlPTMwPWlmZXEgKCQoQ09ORklHX1BFUkZfRVZFTlRTKSx5KVxcbmtlcm5lbC9icGYvTWFrZWZpbGU6MzE6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBzdGFja21hcC5vXFxua2VybmVsL2JwZi9NYWtlZmlsZS0zMi1lbmRpZlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMFQxMDo1MDowMy44MTIzNDUyNjdaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NTE0MzIwMDMzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkJQRiBTdGFjayBUcmFjaW5nIFJlcXVpcmVtZW50cyoqXG5cbk9rYXksIHNvIHRvIGdldCB0aGlzIEJQRiBzdGFjayB0cmFjaW5nIHdvcmtpbmcsIEkgZGVmaW5pdGVseSBuZWVkIGBDT05GSUdfQlBGX1NZU0NBTExgIGFuZCBgQ09ORklHX1BFUkZfRVZFTlRTYCBlbmFibGVkLiBObyBzdXJwcmlzZXMgdGhlcmUuIEkgc2hvdWxkIHByb2JhYmx5IGRvdWJsZS1jaGVjayBpZiB0aGVyZSBhcmUgYW55IG90aGVyIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0aGF0IGFyZSByZWxldmFudCB3aGlsZSBJJ20gYXQgaXQsIGp1c3QgdG8gYmUgdGhvcm91Z2guXG5cblJpZ2h0LCB0aGUgZnVuY3Rpb25zIHRoYXQgaGF2ZSBiZWVuIG1vZGlmaWVkIGFyZTogYGJwZl9nZXRfc3RhY2tpZGAsIGBicGZfZ2V0X3N0YWNraWRfcGVgLCBgYnBmX2dldF9zdGFja2AsIGBicGZfZ2V0X3N0YWNrX3NsZWVwYWJsZWAsIGBicGZfZ2V0X3Rhc2tfc3RhY2tgLCBgYnBmX2dldF90YXNrX3N0YWNrX3NsZWVwYWJsZWAsIGFuZCBgYnBmX2dldF9zdGFja19wZWAuIFRoZXNlIGFyZSBhbGwgQlBGIGhlbHBlciBmdW5jdGlvbnMsIHNvIHRoZSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byBmaWd1cmUgb3V0IHdoaWNoIEJQRiBwcm9ncmFtIHR5cGVzIHN1cHBvcnQgdGhlc2Ugc3RhY2sgdHJhY2UgaGVscGVycy5cblxuYGJwZl9nZXRfc3RhY2tpZF9wcm90b2AgbG9va3MgaW50ZXJlc3RpbmcsIHRoYXQncyB1c2VkIGluIGBrZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmNgIGFuZCBhbHNvIGBuZXQvY29yZS9maWx0ZXIuY2AsIHNvIHRoYXQncyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgZm9yIGV4cGxvcmluZyB0aGUgc3VwcG9ydGVkIHByb2dyYW0gdHlwZXMgYW5kIHRoZSB0cmFjaW5nIGNhcGFiaWxpdGllcy5cblxuXG4iLCJJbnB1dFRva2VucyI6ODUyMiwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yMFQxMDo1MDowOC4zMjY2NjgxM1oiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNTU1OTEyNjkzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJwZl9nZXRfc3RhY2tpZF9wcm90b1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9icGYuaD0zODcyPWV4dGVybiBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX2dldF9jdXJyZW50X2NvbW1fcHJvdG87XFxuaW5jbHVkZS9saW51eC9icGYuaDozODczOmV4dGVybiBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX2dldF9zdGFja2lkX3Byb3RvO1xcbmluY2x1ZGUvbGludXgvYnBmLmgtMzg3NC1leHRlcm4gY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9nZXRfc3RhY2tfcHJvdG87XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2JwZi5oPTM4Nzc9ZXh0ZXJuIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfZ2V0X3Rhc2tfc3RhY2tfc2xlZXBhYmxlX3Byb3RvO1xcbmluY2x1ZGUvbGludXgvYnBmLmg6Mzg3ODpleHRlcm4gY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9nZXRfc3RhY2tpZF9wcm90b19wZTtcXG5pbmNsdWRlL2xpbnV4L2JwZi5oLTM4NzktZXh0ZXJuIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfZ2V0X3N0YWNrX3Byb3RvX3BlO1xcbi0tXFxua2VybmVsL2JwZi9zdGFja21hcC5jPTYxOT1CUEZfQ0FMTF8zKGJwZl9nZXRfc3RhY2tpZCwgc3RydWN0IHB0X3JlZ3MgKiwgcmVncywgc3RydWN0IGJwZl9tYXAgKiwgbWFwLFxcbi0tXFxua2VybmVsL2JwZi9zdGFja21hcC5jLTY2MC1cXG5rZXJuZWwvYnBmL3N0YWNrbWFwLmM6NjYxOmNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfZ2V0X3N0YWNraWRfcHJvdG8gPSB7XFxua2VybmVsL2JwZi9zdGFja21hcC5jLTY2Mi1cXHQuZnVuY1xcdFxcdD0gYnBmX2dldF9zdGFja2lkLFxcbi0tXFxua2VybmVsL2JwZi9zdGFja21hcC5jPTY4Mj1CUEZfQ0FMTF8zKGJwZl9nZXRfc3RhY2tpZF9wZSwgc3RydWN0IGJwZl9wZXJmX2V2ZW50X2RhdGFfa2VybiAqLCBjdHgsXFxuLS1cXG5rZXJuZWwvYnBmL3N0YWNrbWFwLmMtNzQwLVxcbmtlcm5lbC9icGYvc3RhY2ttYXAuYzo3NDE6Y29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9nZXRfc3RhY2tpZF9wcm90b19wZSA9IHtcXG5rZXJuZWwvYnBmL3N0YWNrbWFwLmMtNzQyLVxcdC5mdW5jXFx0XFx0PSBicGZfZ2V0X3N0YWNraWRfcGUsXFxuLS1cXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM9MTM0Mz1rcHJvYmVfcHJvZ19mdW5jX3Byb3RvKGVudW0gYnBmX2Z1bmNfaWQgZnVuY19pZCwgY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxcbi0tXFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTEzNDgtXFx0Y2FzZSBCUEZfRlVOQ19nZXRfc3RhY2tpZDpcXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM6MTM0OTpcXHRcXHRyZXR1cm4gXFx1MDAyNmJwZl9nZXRfc3RhY2tpZF9wcm90bztcXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMTM1MC1cXHRjYXNlIEJQRl9GVU5DX2dldF9zdGFjazpcXG4tLVxcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYz0xNDI3PUJQRl9DQUxMXzMoYnBmX2dldF9zdGFja2lkX3RwLCB2b2lkICosIHRwX2J1ZmYsIHN0cnVjdCBicGZfbWFwICosIG1hcCxcXG4tLVxcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0xNDQwLVxcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYzoxNDQxOnN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX2dldF9zdGFja2lkX3Byb3RvX3RwID0ge1xcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0xNDQyLVxcdC5mdW5jXFx0XFx0PSBicGZfZ2V0X3N0YWNraWRfdHAsXFxuLS1cXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM9MTQ3MD10cF9wcm9nX2Z1bmNfcHJvdG8oZW51bSBicGZfZnVuY19pZCBmdW5jX2lkLCBjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXFxuLS1cXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMTQ3NS1cXHRjYXNlIEJQRl9GVU5DX2dldF9zdGFja2lkOlxcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYzoxNDc2OlxcdFxcdHJldHVybiBcXHUwMDI2YnBmX2dldF9zdGFja2lkX3Byb3RvX3RwO1xcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0xNDc3LVxcdGNhc2UgQlBGX0ZVTkNfZ2V0X3N0YWNrOlxcbi0tXFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jPTE1NzQ9cGVfcHJvZ19mdW5jX3Byb3RvKGVudW0gYnBmX2Z1bmNfaWQgZnVuY19pZCwgY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxcbi0tXFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTE1NzktXFx0Y2FzZSBCUEZfRlVOQ19nZXRfc3RhY2tpZDpcXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM6MTU4MDpcXHRcXHRyZXR1cm4gXFx1MDAyNmJwZl9nZXRfc3RhY2tpZF9wcm90b19wZTtcXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMTU4MS1cXHRjYXNlIEJQRl9GVU5DX2dldF9zdGFjazpcXG4tLVxcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYz0xNjU2PUJQRl9DQUxMXzMoYnBmX2dldF9zdGFja2lkX3Jhd190cCwgc3RydWN0IGJwZl9yYXdfdHJhY2Vwb2ludF9hcmdzICosIGFyZ3MsXFxuLS1cXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMTY3Mi1cXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM6MTY3MzpzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9nZXRfc3RhY2tpZF9wcm90b19yYXdfdHAgPSB7XFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTE2NzQtXFx0LmZ1bmNcXHRcXHQ9IGJwZl9nZXRfc3RhY2tpZF9yYXdfdHAsXFxuLS1cXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM9MTcwOT1yYXdfdHBfcHJvZ19mdW5jX3Byb3RvKGVudW0gYnBmX2Z1bmNfaWQgZnVuY19pZCwgY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxcbi0tXFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTE3MTQtXFx0Y2FzZSBCUEZfRlVOQ19nZXRfc3RhY2tpZDpcXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM6MTcxNTpcXHRcXHRyZXR1cm4gXFx1MDAyNmJwZl9nZXRfc3RhY2tpZF9wcm90b19yYXdfdHA7XFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTE3MTYtXFx0Y2FzZSBCUEZfRlVOQ19nZXRfc3RhY2s6XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIwVDEwOjUwOjEwLjg4MjU4ODkzNFoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQzNzkwMDMxODcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSBzaXR1YXRpb246XG5cbioqVW5kZXJzdGFuZGluZyB0aGUgQ29udGV4dCBvZiBCUEYgVHJhY2UgRnVuY3Rpb25zKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhlc2UgZnVuY3Rpb25zLCBhbmQgdGhlIGZpcnN0IHRoaW5nIHRoYXQganVtcHMgb3V0IGlzIHRoYXQgdGhleSdyZSBuZXN0bGVkIHdpdGhpbiBga2VybmVsL3RyYWNlL2JwZl90cmFjZS5jYC4gVGhhdCB0ZWxscyBtZSB0aGlzIGlzIGFsbCByZWxhdGVkIHRvIHRyYWNpbmcsIHNwZWNpZmljYWxseSB1c2luZyBlQlBGLCBzaW5jZSB3ZSdyZSBkZWFsaW5nIHdpdGggXCJicGZcXF90cmFjZVwiLiBUaGUgaW1wb3J0YW50IGZsYWcgaGVyZSBpcyBgQ09ORklHX0JQRl9FVkVOVFNgLiBJIGtub3cgZnJvbSBleHBlcmllbmNlIHRoYXQgdGhpcyBmbGFnIGVuYWJsZXMgdGhlIG1vcmUgYWR2YW5jZWQgdHJhY2luZyBjYXBhYmlsaXRpZXMgd2l0aGluIHRoZSBrZXJuZWwsIHNvIHRoZSBwcmVzZW5jZSBvZiB0aGVzZSBmdW5jdGlvbnMgaXMgZGlyZWN0bHkgdGllZCB0byBhIGNvbmZpZ3VyYXRpb24gdGhhdCBtYWtlcyBlQlBGLWJhc2VkIGV2ZW50IHRyYWNpbmcgYXZhaWxhYmxlLiBUaGlzIG1lYW5zIHdlJ3JlIHByb2JhYmx5IGRlYWxpbmcgd2l0aCBpbnN0cnVtZW50YXRpb24gcG9pbnRzIHRoYXQgbGV0IHVzZXJzcGFjZSBwcm9ncmFtcyB0YXAgaW50byBrZXJuZWwgYmVoYXZpb3IgZHluYW1pY2FsbHksIHdoaWNoIGlzIHNvbWV0aGluZyBJIGRlYWwgd2l0aCBvZnRlbiBpbiBteSBjdXJyZW50IHdvcmsuIEdvdCBpdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTAzMTIsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yMFQxMDo1MDoxNS4yNjE1OTU3MTFaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjExNDE1OTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYnBmX3RyYWNlLm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL3RyYWNlL01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC90cmFjZS9NYWtlZmlsZT01ND1LQ09WX0lOU1RSVU1FTlRfdHJhY2VfaXJxc29mZi5vIDo9IG5cXG5rZXJuZWwvdHJhY2UvTWFrZWZpbGUtNTUtXFxua2VybmVsL3RyYWNlL01ha2VmaWxlOjU2OkNGTEFHU19icGZfdHJhY2UubyA6PSAtSSQoc3JjKVxcbmtlcm5lbC90cmFjZS9NYWtlZmlsZS01Ny1cXG4tLVxcbmtlcm5lbC90cmFjZS9NYWtlZmlsZT0xMDk9b2JqLSQoQ09ORklHX1VTRVJfRVZFTlRTKSArPSB0cmFjZV9ldmVudHNfdXNlci5vXFxua2VybmVsL3RyYWNlL01ha2VmaWxlOjExMDpvYmotJChDT05GSUdfQlBGX0VWRU5UUykgKz0gYnBmX3RyYWNlLm9cXG5rZXJuZWwvdHJhY2UvTWFrZWZpbGUtMTExLW9iai0kKENPTkZJR19LUFJPQkVfRVZFTlRTKSArPSB0cmFjZV9rcHJvYmUub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMFQxMDo1MDoxNS4zMjI3NDM0MzdaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTczNDM4OTkyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipDaGVja2luZyBmb3IgQlBGIEV2ZW50IFN1cHBvcnQqKlxuXG5BbHJpZ2h0LCByaWdodCBvZmYgdGhlIGJhdCwgd2UncmUgdGFsa2luZyBhYm91dCBuZWVkaW5nIGBDT05GSUdfQlBGX0VWRU5UU2AuIFRoYXQncyBhIGNydWNpYWwgc3RhcnRpbmcgcG9pbnQuIE5vdywgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dCBhbmQgaG93IGl0J3MgYmVpbmcgdXNlZCwgSSB3YW50IHRvIHNlZSBob3cgYGJwZl9nZXRfc3RhY2tpZF9wcm90b2AgaXMgYmVpbmcgbGV2ZXJhZ2VkLiBNeSBodW5jaCBpcyBpdCdzIHByb2JhYmx5IHJlbGF0ZWQgdG8gdGhhdCBgQ09ORklHX0JQRl9FVkVOVFNgIHJlcXVpcmVtZW50LiBMZXQncyBkaXZlIGludG8gYG5ldC9jb3JlL2ZpbHRlci5jYC4gSSdsbCB3YW50IHRvIHNlZSBpZiB0aGlzIGBicGZfZ2V0X3N0YWNraWRfcHJvdG9gIGZ1bmN0aW9uIGlzIGJlaW5nIGNhbGxlZCBpbiBhbnkgd2F5LiBTZWVpbmcgaG93IHRoYXQncyB0aWVkIGludG8gdGhlIG5ldGZpbHRlciBmcmFtZXdvcmssIG9yIG90aGVyIG5ldHdvcmtpbmcgY29tcG9uZW50cyB3aWxsIGdpdmUgdXMgYSBzdHJvbmcgZ3JvdW5kaW5nIGluIHRoZSBwcm9ibGVtIHNwYWNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDcyMCwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIwVDEwOjUwOjE4LjQ5NjE4NTUwOVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjI3NzE5ODUsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJwZl9nZXRfc3RhY2tpZF9wcm90b1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvY29yZS9maWx0ZXIuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjBUMTA6NTA6MTguNTU4OTgyMDk0WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU3NTU3ODk2NzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIEJQRiBTdGFjayBUcmFjZSBJbXBsZW1lbnRhdGlvbioqXG5cbk9rYXksIHNvIEknbSBkaXZpbmcgaW50byB0aGlzIEJQRiBzdGFjayB0cmFjZSBpbXBsZW1lbnRhdGlvbiwgYW5kIGl0J3MgbG9va2luZyBsaWtlIHRoZSByZWFsIGFjdGlvbiBpcyBoYXBwZW5pbmcgd2l0aGluIHRoZSBCUEYgc3RhY2ttYXAgYW5kIHN0YWNraWQgaGVscGVycywgbm90IHdoZXJlIEkgaW5pdGlhbGx5IHRob3VnaHQuIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhlIHJlbGV2YW50IGtlcm5lbCBjb25maWd1cmF0aW9ucyBhcmUgZW5hYmxlZDogYEJQRl9TWVNDQUxMYCwgYFBFUkZfRVZFTlRTYCwgYW5kIGBCUEZfRVZFTlRTYC4gTXkgZm9jdXMgbmVlZHMgdG8gYmUgb24gdGhlc2UgZnVuY3Rpb25zOiBgYnBmX2dldF9zdGFja2lkYCwgYGJwZl9nZXRfc3RhY2tpZF9wZWAsIGBicGZfZ2V0X3N0YWNrYCwgYGJwZl9nZXRfc3RhY2tfc2xlZXBhYmxlYCwgYGJwZl9nZXRfdGFza19zdGFja2AsIGBicGZfZ2V0X3Rhc2tfc3RhY2tfc2xlZXBhYmxlYCwgYW5kIGBicGZfZ2V0X3N0YWNrX3BlYC5cblxuQWhhLCBgYnBmX2dldF9zdGFja2lkYCBpcyBhY3R1YWxseSBhIEJQRiBoZWxwZXIgaXRzZWxmLCBub3QgYSBkaXJlY3Qga2VybmVsIGZ1bmN0aW9uLiBUaGUgKmtlcm5lbCogZnVuY3Rpb25zIHRoYXQgcGVyZm9ybSB0aGUgd29yayBhcmUgdGhvc2UgSSBqdXN0IGxpc3RlZC4gTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2UgaGVscGVycyBhcmUgYWN0dWFsbHkgZXhwb3NlZCB0byBCUEYgcHJvZ3JhbXMuIEFyZSB0aGV5IGV4cG9ydGVkIHN5bWJvbHMsIG9yIGFyZSB0aGV5IGRlZmluZWQgdXNpbmcgc3RhdGljIGZ1bmN0aW9ucyBvciBCUEZfQ0FMTCBtYWNyb3M/IEkgc2VlIHRoZXkncmUgZGVmaW5lZCB3aXRoIGBCUEZfQ0FMTF8zYCBhbmQgYEJQRl9DQUxMXzRgLiBUaGlzIG1lYW5zIHRoZSBmdW5jdGlvbiBuYW1lcyBCUEYgcHJvZ3JhbXMgYWN0dWFsbHkgc2VlIGFyZSBsaWtlbHkgYF9fX19icGZfZ2V0X3N0YWNraWRgIG9yIGBicGZfZ2V0X3N0YWNraWRgLiBOZXh0LCBJIG5lZWQgdG8gY2hlY2sgdGhlIGRlZmluaXRpb24gb2YgYEJQRl9DQUxMXzNgIHRvIGZ1bGx5IHVuZGVyc3RhbmQgaG93IHRoZXNlIGZ1bmN0aW9ucyBhcmUgYmVpbmcgaW52b2tlZCBmcm9tIEJQRiBwcm9ncmFtcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA5OTMsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMjUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjBUMTA6NTA6MjQuMzE0Nzc0MDk5WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NTIzOTExNSwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGVmaW5lIEJQRl9DQUxMX1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpbmNsdWRlL2xpbnV4L2JwZi5oXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMFQxMDo1MDoyNC4zODAwNDcxMjRaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzA4NzA0NTE4NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHN1bW1hcml6ZWQgdGhvdWdodCBwcm9jZXNzLCBwcmVzZW50ZWQgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIGl0OlxuXG4qKkRpZ2dpbmcgaW50byB0aGUgTGludXggS2VybmVsIEZpbHRlcmluZyBMYW5kc2NhcGUqKlxuXG5BbHJpZ2h0LCBJIG5lZWQgdG8gZ2V0IHN0YXJ0ZWQgb24gdGhpcyBmaWx0ZXJpbmcgdGFzay4gV2hlcmUgd291bGQgSSBiZWdpbj8gR2l2ZW4gdGhlIGdlbmVyYWwgbmF0dXJlIG9mIGZpbHRlcmluZyB3aXRoaW4gdGhlIGtlcm5lbCwgSSdtIHByZXR0eSBzdXJlIEkgc2hvdWxkIHN0YXJ0IGJ5IGxvb2tpbmcgYXQgY29yZSBkZWZpbml0aW9ucyBhbmQgc3RydWN0dXJlcy4gVGhhdCBtYWtlcyBgaW5jbHVkZS9saW51eC9maWx0ZXIuaGAgYSBwcmltZSBjYW5kaWRhdGUuIExldCdzIHNlZSB3aGF0IGdvb2RpZXMgYXJlIGluIHRoZXJlLiBJJ20gZXhwZWN0aW5nIHRvIGZpbmQgZm91bmRhdGlvbmFsIGVsZW1lbnRzLCBwZXJoYXBzIHNvbWUgYWJzdHJhY3QgaW50ZXJmYWNlcywgYW5kIGRlZmluaXRlbHkgc29tZSBrZXkgZGF0YSBzdHJ1Y3R1cmVzLiBUaGlzIGlzIHRoZSBsb2dpY2FsIHN0YXJ0aW5nIHBvaW50IGZvciB1bmRlcnN0YW5kaW5nIGhvdyB0aGUga2VybmVsIGhhbmRsZXMgZ2VuZXJpYyBmaWx0ZXJpbmcsIGFuZCBob3BlZnVsbHkgaXQnbGwgZ2l2ZSBtZSBhIHN0cm9uZyBmb3VuZGF0aW9uLiBMZXQncyBzZWUgd2hhdCdzIGluIHRoZXJlLi4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExNjk5LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjBUMTA6NTA6MjcuNDY3MDk1NTE5WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NTE4ODc0NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkZWZpbmUgQlBGX0NBTExfXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImluY2x1ZGUvbGludXgvZmlsdGVyLmhcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9maWx0ZXIuaD00MD1zdHJ1Y3QgY3RsX3RhYmxlX2hlYWRlcjtcXG4tLVxcbmluY2x1ZGUvbGludXgvZmlsdGVyLmgtODUtLyogdW51c2VkIG9wY29kZSB0byBtYXJrIGNhbGwgdG8gaW50ZXJwcmV0ZXIgd2l0aCBhcmd1bWVudHMgKi9cXG5pbmNsdWRlL2xpbnV4L2ZpbHRlci5oOjg2OiNkZWZpbmUgQlBGX0NBTExfQVJHU1xcdDB4ZTBcXG5pbmNsdWRlL2xpbnV4L2ZpbHRlci5oLTg3LVxcbi0tXFxuaW5jbHVkZS9saW51eC9maWx0ZXIuaD0yNjA9c3RhdGljIGlubGluZSBib29sIGluc25faXNfY2FzdF91c2VyKGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqaW5zbilcXG4tLVxcbmluY2x1ZGUvbGludXgvZmlsdGVyLmgtNDU3LVxcbmluY2x1ZGUvbGludXgvZmlsdGVyLmg6NDU4OiNkZWZpbmUgQlBGX0NBTExfUkVMKFRHVClcXHRcXHRcXHRcXHRcXHRcXFxcXFxuaW5jbHVkZS9saW51eC9maWx0ZXIuaC00NTktXFx0KChzdHJ1Y3QgYnBmX2luc24pIHtcXHRcXHRcXHRcXHRcXHRcXFxcXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2ZpbHRlci5oLTQ2Ny1cXG5pbmNsdWRlL2xpbnV4L2ZpbHRlci5oOjQ2ODojZGVmaW5lIEJQRl9DQUxMX0lNTSh4KVxcdCgodm9pZCAqKSh4KSAtICh2b2lkICopX19icGZfY2FsbF9iYXNlKVxcbmluY2x1ZGUvbGludXgvZmlsdGVyLmgtNDY5LVxcbi0tXFxuaW5jbHVkZS9saW51eC9maWx0ZXIuaC00NzktXFxuaW5jbHVkZS9saW51eC9maWx0ZXIuaDo0ODA6I2RlZmluZSBCUEZfQ0FMTF9LRlVOQyhPRkYsIElNTSlcXHRcXHRcXHRcXHRcXFxcXFxuaW5jbHVkZS9saW51eC9maWx0ZXIuaC00ODEtXFx0KChzdHJ1Y3QgYnBmX2luc24pIHtcXHRcXHRcXHRcXHRcXHRcXFxcXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2ZpbHRlci5oLTYxMC1cXG5pbmNsdWRlL2xpbnV4L2ZpbHRlci5oOjYxMTojZGVmaW5lIEJQRl9DQUxMX3goeCwgYXR0ciwgbmFtZSwgLi4uKVxcdFxcdFxcdFxcdFxcdCAgICAgICBcXFxcXFxuaW5jbHVkZS9saW51eC9maWx0ZXIuaC02MTItXFx0c3RhdGljIF9fYWx3YXlzX2lubGluZVxcdFxcdFxcdFxcdFxcdFxcdCAgICAgICBcXFxcXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2ZpbHRlci5oLTYyMy0jZGVmaW5lIF9fTk9BVFRSXFxuaW5jbHVkZS9saW51eC9maWx0ZXIuaDo2MjQ6I2RlZmluZSBCUEZfQ0FMTF8wKG5hbWUsIC4uLilcXHRCUEZfQ0FMTF94KDAsIF9fTk9BVFRSLCBuYW1lLCBfX1ZBX0FSR1NfXylcXG5pbmNsdWRlL2xpbnV4L2ZpbHRlci5oOjYyNTojZGVmaW5lIEJQRl9DQUxMXzEobmFtZSwgLi4uKVxcdEJQRl9DQUxMX3goMSwgX19OT0FUVFIsIG5hbWUsIF9fVkFfQVJHU19fKVxcbmluY2x1ZGUvbGludXgvZmlsdGVyLmg6NjI2OiNkZWZpbmUgQlBGX0NBTExfMihuYW1lLCAuLi4pXFx0QlBGX0NBTExfeCgyLCBfX05PQVRUUiwgbmFtZSwgX19WQV9BUkdTX18pXFxuaW5jbHVkZS9saW51eC9maWx0ZXIuaDo2Mjc6I2RlZmluZSBCUEZfQ0FMTF8zKG5hbWUsIC4uLilcXHRCUEZfQ0FMTF94KDMsIF9fTk9BVFRSLCBuYW1lLCBfX1ZBX0FSR1NfXylcXG5pbmNsdWRlL2xpbnV4L2ZpbHRlci5oOjYyODojZGVmaW5lIEJQRl9DQUxMXzQobmFtZSwgLi4uKVxcdEJQRl9DQUxMX3goNCwgX19OT0FUVFIsIG5hbWUsIF9fVkFfQVJHU19fKVxcbmluY2x1ZGUvbGludXgvZmlsdGVyLmg6NjI5OiNkZWZpbmUgQlBGX0NBTExfNShuYW1lLCAuLi4pXFx0QlBGX0NBTExfeCg1LCBfX05PQVRUUiwgbmFtZSwgX19WQV9BUkdTX18pXFxuaW5jbHVkZS9saW51eC9maWx0ZXIuaC02MzAtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIwVDEwOjUwOjI3LjUzMjI5MzM2NFoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3MjA1ODcwNDU0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBCUEYgU3RhY2sgVHJhY2UgRnVuY3Rpb25hbGl0eSoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGhvdyB0aGVzZSBgQlBGX0NBTExfeGAgY2FsbHMgd29yay4gVGhleSdyZSBnZW5lcmF0aW5nIG5hbWVzLCBzcGVjaWZpY2FsbHkgYF9fX19uYW1lYCBhbmQgYG5hbWVgIC0gdGhhdCdzIHN0YW5kYXJkIGZvciB0aGlzIHNvcnQgb2YgdGhpbmcuIFRoZSBhY3R1YWwgZnVuY3Rpb24gY2FsbHMgYXJlOiBgYnBmX2dldF9zdGFja2lkYCwgYGJwZl9nZXRfc3RhY2tpZF9wZWAsIGBicGZfZ2V0X3N0YWNrYCwgYGJwZl9nZXRfc3RhY2tfc2xlZXBhYmxlYCwgYGJwZl9nZXRfdGFza19zdGFja2AsIGBicGZfZ2V0X3Rhc2tfc3RhY2tfc2xlZXBhYmxlYCwgYW5kIGBicGZfZ2V0X3N0YWNrX3BlYC4gUHJldHR5IHN0YW5kYXJkIHN0YWNrIHRyYWNlIGNvbGxlY3Rpb24gcm91dGluZXMuXG5cbldhaXQsIGxvb2tpbmcgZGVlcGVyLCB0aGlzIHBhdGNoIGFsc28gaW50cm9kdWNlcyBhIGJ1bmNoIG9mIHN0YXRpYyBmdW5jdGlvbnM6IGBzdGFja2lkX2luaXRgLCBgc3RhY2tpZF9mYXN0cGF0aGAsIGBzdGFja2lkX25ld19idWNrZXRgLCBgc3RhY2tpZF9pbnN0YWxsYCwgYGNhbGxjaGFpbl9zdG9yZWAsIGBjYWxsY2hhaW5fZmluYWxpemVgLCBhbmQgYF9fYnBmX2dldF9zdGFja19wZWAsIGFuZCBhbHNvIGBfX2JwZl9nZXRfc3RhY2tgLiBUaGVzZSBhcmUgaW50ZXJlc3RpbmcuIFNpbmNlIHRoZXkncmUgc3RhdGljLCB0aGV5J3JlIGdvb2QgY2FuZGlkYXRlcyB0byBpbmNsdWRlIHdpdGhpbiBgRm9jdXNTeW1ib2xzYCBhcyB0aGV5IG1heSBub3QgYmUgaW5saW5lZC5cblxuSG93ZXZlciwgdGhlIHByaW1hcnkgZW50cnkgcG9pbnRzIGFyZSBjbGVhcmx5IGBicGZfZ2V0X3N0YWNraWRgIGFuZCB0aGUgb3RoZXJzLlxuXG5BbHJpZ2h0LCBsZXQncyBtYWtlIGEgY29tcGxldGUgbGlzdCBvZiB0aGUgZW50cnkgcG9pbnRzIGFuZCB0aGUgc3RhdGljIGZ1bmN0aW9uczpcblxuKiAgIGBicGZfZ2V0X3N0YWNraWRgXG4qICAgYGJwZl9nZXRfc3RhY2tpZF9wZWBcbiogICBgYnBmX2dldF9zdGFja2BcbiogICBgYnBmX2dldF9zdGFja19zbGVlcGFibGVgXG4qICAgYGJwZl9nZXRfdGFza19zdGFja2BcbiogICBgYnBmX2dldF90YXNrX3N0YWNrX3NsZWVwYWJsZWBcbiogICBgYnBmX2dldF9zdGFja19wZWBcbiogICBgc3RhY2tpZF9pbml0YFxuKiAgIGBzdGFja2lkX2Zhc3RwYXRoYFxuKiAgIGBzdGFja2lkX25ld19idWNrZXRgXG4qICAgYHN0YWNraWRfaW5zdGFsbGBcbiogICBgY2FsbGNoYWluX3N0b3JlYFxuKiAgIGBjYWxsY2hhaW5fZmluYWxpemVgXG4qICAgYF9fYnBmX2dldF9zdGFja19wZWBcbiogICBgX19icGZfZ2V0X3N0YWNrYFxuXG5Ob3csIHJlZ2FyZGluZyB0aGUgbmVjZXNzYXJ5IGNvbmZpZ3VyYXRpb25zLCBJIG5lZWQgdG8gY2hlY2sgaWYganVzdCBgQ09ORklHX0JQRl9TWVNDQUxMYCwgYENPTkZJR19QRVJGX0VWRU5UU2AsIGFuZCBgQ09ORklHX0JQRl9FVkVOVFNgIGFyZSBlbm91Z2guIFllcCwgdGhvc2Ugc2VlbSB0byBjb3ZlciBpdC4gSSdsbCBkb3VibGUtY2hlY2sgdG8gYmUgY29tcGxldGVseSBzdXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjYwNSwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQwOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yMFQxMDo1MDozNC43MzgxNjY5NzhaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYzMTkzNDM1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkNPTkZJR19cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2JwZi9zdGFja21hcC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvc3RhY2ttYXAuYz0yNjc9c3RydWN0IHN0YWNrX21hcF92bWFfbG9jayB7XFxuLS1cXG5rZXJuZWwvYnBmL3N0YWNrbWFwLmMtMjc0LSAqXFxua2VybmVsL2JwZi9zdGFja21hcC5jOjI3NTogKiBXaXRoIENPTkZJR19QRVJfVk1BX0xPQ0s9eSB0aGlzIHJldHVybnMgYSBWTUEgd2l0aCBpdHMgcGVyLVZNQSByZWFkXFxua2VybmVsL2JwZi9zdGFja21hcC5jLTI3Ni0gKiBsb2NrIGhlbGQgYW5kIG1tYXBfbG9jayBkcm9wcGVkLCBzbyB0aGUgY2FsbGVyIG1heSBzbGVlcC5cXG5rZXJuZWwvYnBmL3N0YWNrbWFwLmMtMjc3LSAqXFxua2VybmVsL2JwZi9zdGFja21hcC5jOjI3ODogKiBXaXRoIENPTkZJR19QRVJfVk1BX0xPQ0s9biBpdCByZXR1cm5zIGEgVk1BIHdpdGggbW1hcF9sb2NrIHN0aWxsXFxua2VybmVsL2JwZi9zdGFja21hcC5jLTI3OS0gKiBoZWxkOyB0aGUgY2FsbGVyIG11c3Qgc25hcHNob3QgYW55IGZpZWxkcyBpdCBuZWVkcyBhbmQgcGluIHZtX2ZpbGVcXG4tLVxcbmtlcm5lbC9icGYvc3RhY2ttYXAuYz0yODY9c3RhY2tfbWFwX2xvY2tfdm1hKHN0cnVjdCBzdGFja19tYXBfdm1hX2xvY2sgKmxvY2ssIHVuc2lnbmVkIGxvbmcgaXApXFxuLS1cXG5rZXJuZWwvYnBmL3N0YWNrbWFwLmMtMjkwLVxcbmtlcm5lbC9icGYvc3RhY2ttYXAuYzoyOTE6XFx0Lyogbm9vcCB1bmRlciAhQ09ORklHX1BFUl9WTUFfTE9DSyAqL1xcbmtlcm5lbC9icGYvc3RhY2ttYXAuYy0yOTItXFx0dm1hID0gbG9ja192bWFfdW5kZXJfcmN1KG1tLCBpcCk7XFxuLS1cXG5rZXJuZWwvYnBmL3N0YWNrbWFwLmMtMzEwLVxcbmtlcm5lbC9icGYvc3RhY2ttYXAuYzozMTE6I2lmZGVmIENPTkZJR19QRVJfVk1BX0xPQ0tcXG5rZXJuZWwvYnBmL3N0YWNrbWFwLmMtMzEyLVxcdGlmICghdm1hX3N0YXJ0X3JlYWRfbG9ja2VkKHZtYSkpIHtcXG4tLVxcbmtlcm5lbC9icGYvc3RhY2ttYXAuYz0zMjM9c3RhdGljIHZvaWQgc3RhY2tfbWFwX3VubG9ja192bWEoc3RydWN0IHN0YWNrX21hcF92bWFfbG9jayAqbG9jaylcXG5rZXJuZWwvYnBmL3N0YWNrbWFwLmMtMzI0LXtcXG5rZXJuZWwvYnBmL3N0YWNrbWFwLmM6MzI1OiNpZmRlZiBDT05GSUdfUEVSX1ZNQV9MT0NLXFxua2VybmVsL2JwZi9zdGFja21hcC5jLTMyNi1cXHR2bWFfZW5kX3JlYWQobG9jay1cXHUwMDNldm1hKTtcXG4tLVxcbmtlcm5lbC9icGYvc3RhY2ttYXAuYz00NzE9Z2V0X2NhbGxjaGFpbl9lbnRyeV9mb3JfdGFzayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssIHUzMiBtYXhfZGVwdGgpXFxua2VybmVsL2JwZi9zdGFja21hcC5jLTQ3Mi17XFxua2VybmVsL2JwZi9zdGFja21hcC5jOjQ3MzojaWZkZWYgQ09ORklHX1NUQUNLVFJBQ0VcXG5rZXJuZWwvYnBmL3N0YWNrbWFwLmMtNDc0LVxcdHN0cnVjdCBwZXJmX2NhbGxjaGFpbl9lbnRyeSAqZW50cnk7XFxuLS1cXG5rZXJuZWwvYnBmL3N0YWNrbWFwLmMtNTAxLVxcdHJldHVybiBlbnRyeTtcXG5rZXJuZWwvYnBmL3N0YWNrbWFwLmM6NTAyOiNlbHNlIC8qIENPTkZJR19TVEFDS1RSQUNFICovXFxua2VybmVsL2JwZi9zdGFja21hcC5jLTUwMy1cXHRyZXR1cm4gTlVMTDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjBUMTA6NTA6MzQuODAxMzY5MzEzWiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc1NjE3NDAxMDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqUmV2aWV3aW5nIEJQRiBTdGFjayBUcmFjZSBDb25maWd1cmF0aW9uIGFuZCBTeW1ib2xzKipcblxuT2theSwgc28gSSdtIHRoaW5raW5nIHRocm91Z2ggdGhpcyBzdGFjayB0cmFjZSBidXNpbmVzcyBmb3IgQlBGLiBSaWdodCwgSSBuZWVkIGBDT05GSUdfU1RBQ0tUUkFDRWAgZm9yIGBnZXRfY2FsbGNoYWluX2VudHJ5X2Zvcl90YXNrYCB0byB3b3JrLiBUaGF0J3MgZnVuZGFtZW50YWwsIGFuZCB0aGF0LCBpbiB0dXJuLCBpcyB1c2VkIGJ5IGBicGZfZ2V0X3Rhc2tfc3RhY2tgIGFuZCBgYnBmX2dldF90YXNrX3N0YWNrX3NsZWVwYWJsZWAuIEl0J3MgcHJldHR5IHN0YW5kYXJkIHRvIGhhdmUgYENPTkZJR19TVEFDS1RSQUNFYCBlbmFibGVkLCBidXQgaXTigJlzIHN0aWxsIHNtYXJ0IHRvIHNwZWNpZnkgaXQgZXhwbGljaXRseSB0byBtYWtlIHN1cmUgZXZlcnl0aGluZyBsaW5lcyB1cC4gTGV0J3MgbWFrZSBzdXJlIHRoZXJlIGFyZW4ndCBhbnkgb3RoZXIgZ290Y2hhcy4gQWggeWVzLCBgQ09ORklHX0JQRl9TWVNDQUxMYCwgYENPTkZJR19QRVJGX0VWRU5UU2AsIGBDT05GSUdfQlBGX0VWRU5UU2AsIGFuZCBgQ09ORklHX1NUQUNLVFJBQ0VgIGFyZSB0aGUga2V5IG9uZXMgdG8gd2F0Y2ggb3V0IGZvci5cblxuTm93LCBsZXQncyBkaXZlIGludG8gdGhlc2UgYEZvY3VzU3ltYm9sc2AuIFRoZSBwYXRjaCBpcyB0b3VjaGluZyBga2VybmVsL2JwZi9zdGFja21hcC5jYCwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCdzIGJlaW5nIGNoYW5nZWQgaW4gdGhhdCBhcmVhLiBJJ20gc2VlaW5nIGZ1bmN0aW9ucyBsaWtlOiBgc3RhY2tpZF9pbml0YCwgYHN0YWNraWRfZmFzdHBhdGhgLCBgc3RhY2tpZF9uZXdfYnVja2V0YCwgYHN0YWNraWRfaW5zdGFsbGAsIGBicGZfZ2V0X3N0YWNraWRgLCBgYnBmX2dldF9zdGFja2lkX3BlYCwgYGNhbGxjaGFpbl9zdG9yZWAsIGBjYWxsY2hhaW5fZmluYWxpemVgLCBgX19icGZfZ2V0X3N0YWNrYCwgYGJwZl9nZXRfc3RhY2tgLCBgYnBmX2dldF9zdGFja19zbGVlcGFibGVgLCBgX19icGZfZ2V0X3Rhc2tfc3RhY2tgLCBgYnBmX2dldF90YXNrX3N0YWNrYCwgYGJwZl9nZXRfdGFza19zdGFja19zbGVlcGFibGVgLCBgX19icGZfZ2V0X3N0YWNrX3BlYCwgYW5kIGBicGZfZ2V0X3N0YWNrX3BlYC5cblxuU29tZSBvZiB0aGVzZSBhcmUgc3RhdGljLCBvdGhlcnMgYXJlIEJQRl9DQUxMIG1hY3Jvcywgd2hpY2ggbWVhbnMgdGhleSdyZSB3cmFwcGVyIGZ1bmN0aW9ucy4gVGhlIHF1ZXN0aW9uIG5vdyBpcyB3aGV0aGVyIHRoZSB2aXNpYmxlIG5hbWUsIGBicGZfZ2V0X3N0YWNraWRgLCBpcyB0aGUgYWN0dWFsIGZ1bmN0aW9uIG5hbWUuIExldCdzIGRpZyBkZWVwZXIuIFllcCwgaXQgc2VlbXMgbGlrZSBgQlBGX0NBTExfMyhicGZfZ2V0X3N0YWNraWQsIC4uLilgIGRvZXMgaW5kZWVkIGdlbmVyYXRlIGJvdGggYGJwZl9nZXRfc3RhY2tpZGAgYW5kIGBfX19fYnBmX2dldF9zdGFja2lkYC4gU28sIGBicGZfZ2V0X3N0YWNraWRgICppcyogYSB2YWxpZCBzeW1ib2wgYXMgZmFyIGFzIHRoZSBrZXJuZWwgaXMgY29uY2VybmVkLCBhbHRob3VnaCBpdCdzIGFjdGluZyBhcyBhIHdyYXBwZXIuIFRoZSBjb3JlIGxvZ2ljIGlzIGxpa2VseSByZXNpZGluZyBpbiBgX19fX2JwZl9nZXRfc3RhY2tpZGAsIHRoZSBoaWRkZW4gZnVuY3Rpb24uIEdvdHRhIGRvdWJsZS1jaGVjayBgaW5jbHVkZS9saW51eC9maWx0ZXIuaGAgYWdhaW4sIGp1c3QgdG8gYmUgc3VyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQyNTMsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjBUMTA6NTA6NDIuMzYzMTEyOTA4WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2ODA1MzE3NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkZWZpbmUgQlBGX0NBTExfeFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpbmNsdWRlL2xpbnV4L2ZpbHRlci5oXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvZmlsdGVyLmg9MjYwPXN0YXRpYyBpbmxpbmUgYm9vbCBpbnNuX2lzX2Nhc3RfdXNlcihjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24pXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2ZpbHRlci5oLTYxMC1cXG5pbmNsdWRlL2xpbnV4L2ZpbHRlci5oOjYxMTojZGVmaW5lIEJQRl9DQUxMX3goeCwgYXR0ciwgbmFtZSwgLi4uKVxcdFxcdFxcdFxcdFxcdCAgICAgICBcXFxcXFxuaW5jbHVkZS9saW51eC9maWx0ZXIuaC02MTItXFx0c3RhdGljIF9fYWx3YXlzX2lubGluZVxcdFxcdFxcdFxcdFxcdFxcdCAgICAgICBcXFxcXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIwVDEwOjUwOjQyLjQzMTE3NDIwMloiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDQwNTM0NTQzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBCUEZfQ0FMTF94IE1hY3JvKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgaG93IGBCUEZfQ0FMTF94YCBpcyBkZWZpbmVkLiBJdCdzIHRpbWUgdG8gZGlnIGludG8gdGhlIG1hY3JvIGRlZmluaXRpb24sIGFzIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSB1bmRlcmx5aW5nIG1lY2hhbmlzbS4gSSBzdXNwZWN0IEkgbWlnaHQgYmUgZGVhbGluZyB3aXRoIGVpdGhlciBhIGhlbHBlciBmdW5jdGlvbiBvciBzb21lIGtpbmQgb2YgaW5zdHJ1Y3Rpb24gZW5jb2RpbmcsIG9yIHBlcmhhcHMgZXZlbiBhIGxheWVyIHRoYXQgYWJzdHJhY3RzIGtlcm5lbCB2ZXJzaW9ucy4gSSdtIGVzcGVjaWFsbHkga2VlbiB0byB1bmRlcnN0YW5kIGhvdyB0aGUgYXJndW1lbnRzIGFyZSBoYW5kbGVkIOKAkyBhcmUgdGhleSBkaXJlY3RseSBlbmNvZGVkLCBwYXNzZWQgdGhyb3VnaCByZWdpc3RlcnMsIG9yIHBlcmhhcHMgYSBjb21iaW5hdGlvbj8gSSBuZWVkIHRvIHF1aWNrbHkgZ3Jhc3AgaXRzIHJvbGUgd2l0aGluIHRoZSBicm9hZGVyIEJQRiBjb250ZXh0LCBhbmQgZmlndXJlIG91dCBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIGluc3RydWN0aW9uIHNldCBhbmQgdmVyaWZpZXIuIFRoZSBzcGVjaWZpY3MgYXJlIGtleSBoZXJlOiBpcyBpdCBhIHdyYXBwZXIgZm9yIGEgaGFyZGNvZGVkIG9wY29kZSwgb3IgYSBtb3JlIGR5bmFtaWMgY29uc3RydWN0PyBUaW1lIHRvIHN0YXJ0IHRyYWNpbmcgdGhyb3VnaCB0aGUgY29kZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTU0MDgsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yMFQxMDo1MDo0NS40NzE3MTE2NjVaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjI4MzcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImluY2x1ZGUvbGludXgvZmlsdGVyLmhcIixcbiAgXCJGaXJzdExpbmVcIjogNjEwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNjEwOlxcdFxcbiA2MTE6XFx0I2RlZmluZSBCUEZfQ0FMTF94KHgsIGF0dHIsIG5hbWUsIC4uLilcXHRcXHRcXHRcXHRcXHQgICAgICAgXFxcXFxcbiA2MTI6XFx0XFx0c3RhdGljIF9fYWx3YXlzX2lubGluZVxcdFxcdFxcdFxcdFxcdFxcdCAgICAgICBcXFxcXFxuIDYxMzpcXHRcXHR1NjQgX19fXyMjbmFtZShfX0JQRl9NQVAoeCwgX19CUEZfREVDTF9BUkdTLCBfX0JQRl9WLCBfX1ZBX0FSR1NfXykpOyAgIFxcXFxcXG4gNjE0OlxcdFxcdHR5cGVkZWYgdTY0ICgqYnRmXyMjbmFtZSkoX19CUEZfTUFQKHgsIF9fQlBGX0RFQ0xfQVJHUywgX19CUEZfViwgX19WQV9BUkdTX18pKTsgXFxcXFxcbiA2MTU6XFx0XFx0YXR0ciB1NjQgbmFtZShfX0JQRl9SRUcoeCwgX19CUEZfREVDTF9SRUdTLCBfX0JQRl9OLCBfX1ZBX0FSR1NfXykpOyAgICBcXFxcXFxuIDYxNjpcXHRcXHRhdHRyIHU2NCBuYW1lKF9fQlBGX1JFRyh4LCBfX0JQRl9ERUNMX1JFR1MsIF9fQlBGX04sIF9fVkFfQVJHU19fKSkgICAgIFxcXFxcXG4gNjE3OlxcdFxcdHtcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgXFxcXFxcbiA2MTg6XFx0XFx0XFx0cmV0dXJuICgoYnRmXyMjbmFtZSlfX19fIyNuYW1lKShfX0JQRl9NQVAoeCxfX0JQRl9DQVNULF9fQlBGX04sX19WQV9BUkdTX18pKTtcXFxcXFxuIDYxOTpcXHRcXHR9XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgIFxcXFxcXG4gNjIwOlxcdFxcdHN0YXRpYyBfX2Fsd2F5c19pbmxpbmVcXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgXFxcXFxcbiA2MjE6XFx0XFx0dTY0IF9fX18jI25hbWUoX19CUEZfTUFQKHgsIF9fQlBGX0RFQ0xfQVJHUywgX19CUEZfViwgX19WQV9BUkdTX18pKVxcbiA2MjI6XFx0XFxuIDYyMzpcXHQjZGVmaW5lIF9fTk9BVFRSXFxuIDYyNDpcXHQjZGVmaW5lIEJQRl9DQUxMXzAobmFtZSwgLi4uKVxcdEJQRl9DQUxMX3goMCwgX19OT0FUVFIsIG5hbWUsIF9fVkFfQVJHU19fKVxcbiA2MjU6XFx0I2RlZmluZSBCUEZfQ0FMTF8xKG5hbWUsIC4uLilcXHRCUEZfQ0FMTF94KDEsIF9fTk9BVFRSLCBuYW1lLCBfX1ZBX0FSR1NfXylcXG4gNjI2OlxcdCNkZWZpbmUgQlBGX0NBTExfMihuYW1lLCAuLi4pXFx0QlBGX0NBTExfeCgyLCBfX05PQVRUUiwgbmFtZSwgX19WQV9BUkdTX18pXFxuIDYyNzpcXHQjZGVmaW5lIEJQRl9DQUxMXzMobmFtZSwgLi4uKVxcdEJQRl9DQUxMX3goMywgX19OT0FUVFIsIG5hbWUsIF9fVkFfQVJHU19fKVxcbiA2Mjg6XFx0I2RlZmluZSBCUEZfQ0FMTF80KG5hbWUsIC4uLilcXHRCUEZfQ0FMTF94KDQsIF9fTk9BVFRSLCBuYW1lLCBfX1ZBX0FSR1NfXylcXG4gNjI5OlxcdCNkZWZpbmUgQlBGX0NBTExfNShuYW1lLCAuLi4pXFx0QlBGX0NBTExfeCg1LCBfX05PQVRUUiwgbmFtZSwgX19WQV9BUkdTX18pXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIwVDEwOjUwOjQ1LjQ3MTk0MjE1NVoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNDYxMDA0MzM2MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFN0YWNrbWFwIFJlZmFjdG9yaW5nKipcblxuQWxyaWdodCwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBGcm9tIHdoYXQgSSdtIHNlZWluZywgYG5hbWVgIGlzIGFjdGluZyBhcyB0aGUgcHVibGljbHktdmlzaWJsZSB3cmFwcGVyLCBhbmQgYF9fX19uYW1lYCBpcyB0aGUgaW50ZXJuYWwgZnVuY3Rpb24uIFRoZSBgX19fX25hbWVgIGZ1bmN0aW9ucywgYmVpbmcgZGVjbGFyZWQgYHN0YXRpYyBfX2Fsd2F5c19pbmxpbmVgLCBhcmUgcHJpbWUgY2FuZGlkYXRlcyBmb3IgaW5saW5pbmcsIHdoaWNoIG1lYW5zIHdlIG5lZWQgdG8gdHJhY2UgdGhvc2UgY29ubmVjdGlvbnMuXG5cblRvIGdldCBhIGhhbmRsZSBvbiB0aGlzLCBJJ3ZlIGlkZW50aWZpZWQgYSBsaXN0IG9mIHN5bWJvbHMgdG8gZm9jdXMgb24uIFdlJ3ZlIGdvdCB0aGUgQlBGIHdyYXBwZXJzOiBgYnBmX2dldF9zdGFja2lkYCwgYGJwZl9nZXRfc3RhY2tpZF9wZWAsIGBicGZfZ2V0X3N0YWNrYCwgYGJwZl9nZXRfc3RhY2tfc2xlZXBhYmxlYCwgYGJwZl9nZXRfdGFza19zdGFja2AsIGBicGZfZ2V0X3Rhc2tfc3RhY2tfc2xlZXBhYmxlYCwgYW5kIGBicGZfZ2V0X3N0YWNrX3BlYC4gQWxzbywgd2UgbmVlZCB0byBjb25zaWRlciB0aG9zZSBzdGF0aWMgaGVscGVycyB0aGF0IG1pZ2h0ICpub3QqIGJlIGlubGluZWQuXG5cbkluaXRpYWxseSwgSSBpZGVudGlmaWVkIGEgc2V0IG9mIHN0YXRpYyBmdW5jdGlvbnM6IGBzdGFja2lkX2luaXRgLCBgc3RhY2tpZF9mYXN0cGF0aGAsIGBzdGFja2lkX25ld19idWNrZXRgLCBgc3RhY2tpZF9pbnN0YWxsYCwgYGNhbGxjaGFpbl9zdG9yZWAsIGBjYWxsY2hhaW5fZmluYWxpemVgLCBgX19icGZfZ2V0X3N0YWNrX3BlYCwgYW5kIGBfX2JwZl9nZXRfc3RhY2tgLiBJJ3ZlIGdvbmUgYmFjayBhbmQgY2hlY2tlZCB0aGUgY2FsbCBncmFwaCBmb3IgdGhlbSB0byBkZXRlcm1pbmUgd2hpY2ggYXJlIGFjdHVhbGx5IHJlYWNoYWJsZSBhbmQgd2hpY2ggYXJlIGlubGluZWQuIEl0IGxvb2tzIGxpa2UgYHN0YWNraWRfaW5pdGAgaXMgY2FsbGVkIGJ5IGBzdGFja2lkX2Zhc3RwYXRoYCwgd2hpY2ggaXMgaW4gdHVybiBjYWxsZWQgZnJvbSBgYnBmX2dldF9zdGFja2lkYCBhbmQgYGJwZl9nZXRfc3RhY2tpZF9wZWAuIGBzdGFja2lkX25ld19idWNrZXRgIGFuZCBgc3RhY2tpZF9pbnN0YWxsYCBhcmUgYWxzbyBjYWxsZWQgYnkgYGJwZl9nZXRfc3RhY2tpZGAgYW5kIGBicGZfZ2V0X3N0YWNraWRfcGVgLiBTaW1pbGFybHksIGBjYWxsY2hhaW5fc3RvcmVgIGFuZCBgY2FsbGNoYWluX2ZpbmFsaXplYCBhcmUgY2FsbGVkIGJ5IHRoZSBgX19icGZfZ2V0X3N0YWNrYCBhbmQgYF9fYnBmX2dldF9zdGFja19wZWAuICBGaW5hbGx5LCB0aGUgYF9fYnBmX2dldF9zdGFja2AgaXMgY2FsbGVkIGJ5IGEgdmFyaWV0eSBvZiBmdW5jdGlvbnMsIGFuZCBgX19icGZfZ2V0X3Rhc2tfc3RhY2tgIGlzIGNhbGxlZCBieSB0aGUgYGJwZl9nZXRfdGFza19zdGFja2AgdmFyaWFudHMuXG5cblNvLCB0aGUgZm9jdXMgc3ltYm9scyBhcmU6XG5gYnBmX2dldF9zdGFja2lkYFxuYGJwZl9nZXRfc3RhY2tpZF9wZWBcbmBicGZfZ2V0X3N0YWNrYFxuYGJwZl9nZXRfc3RhY2tfc2xlZXBhYmxlYFxuYGJwZl9nZXRfdGFza19zdGFja2BcbmBicGZfZ2V0X3Rhc2tfc3RhY2tfc2xlZXBhYmxlYFxuYGJwZl9nZXRfc3RhY2tfcGVgXG5gc3RhY2tpZF9mYXN0cGF0aGBcbmBzdGFja2lkX25ld19idWNrZXRgXG5gc3RhY2tpZF9pbnN0YWxsYFxuYGNhbGxjaGFpbl9zdG9yZWBcbmBjYWxsY2hhaW5fZmluYWxpemVgXG5gX19icGZfZ2V0X3N0YWNrYFxuYF9fYnBmX2dldF9zdGFja19wZWBcbmBfX2JwZl9nZXRfdGFza19zdGFja2BcblxuT2theSwgdGhhdCdzIGEgZ29vZCBzdGFydGluZyBsaXN0LlxuXG5Ob3csIGxldCdzIGNvbnNpZGVyIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9ucy4gV2UndmUgZ290IGBCUEZfU1lTQ0FMTGAsIGBQRVJGX0VWRU5UU2AsIGBCUEZfRVZFTlRTYCwgYW5kIGBTVEFDS1RSQUNFYC4gYENPTkZJR19CUEZfU1lTQ0FMTGAgaXMsIG9mIGNvdXJzZSwgdGhlIG1haW4gb25lLiBgQ09ORklHX1BFUkZfRVZFTlRTYCBpcyBleHBsaWNpdGx5IHJlcXVpcmVkIGZvciBga2VybmVsL2JwZi9zdGFja21hcC5jYCB0byBjb21waWxlIGFuZCBgQ09ORklHX0JQRl9FVkVOVFNgIGlzIHJlcXVpcmVkIGZvciBga2VybmVsL3RyYWNlL2JwZl90cmFjZS5jYCBhbmQgcmVnaXN0ZXJpbmcgQlBGIGhlbHBlcnMuIGBDT05GSUdfU1RBQ0tUUkFDRWAgaXMgdGhlcmUgYmVjYXVzZSBvZiBgZ2V0X2NhbGxjaGFpbl9lbnRyeV9mb3JfdGFza2AuIEkgZG9uJ3QgdGhpbmsgYENPTkZJR19UUkFDSU5HYCBpcyBzdHJpY3RseSBuZWVkZWQsIGFzIGBCUEZfRVZFTlRTYCB1c3VhbGx5IGNvdmVycyBpdC5cblxuTG9va2luZyBhdCB0aGUgZmlsZSBtb2RpZmljYXRpb25zLCBpdCdzIGp1c3QgYGtlcm5lbC9icGYvc3RhY2ttYXAuY2AsIGluZGljYXRpbmcgdGhpcyBpcyBhIGxvY2FsaXplZCBjaGFuZ2UuXG5cblRoZSBjb3JlIG9mIHRoaXMgcGF0Y2ggc2VlbXMgdG8gYmUgcmVmYWN0b3JpbmcgdGhlIHN0YWNrbWFwIGNvZGUuIFRoZXkncmUgcHVsbGluZyBvdXQgY29tbW9uIGxvZ2ljIGludG8gaGVscGVyIGZ1bmN0aW9ucywgbWVhbmluZyB0aGlzIHJlZmFjdG9yaW5nIHNob3VsZCBub3QgY2hhbmdlIHRoZSBleHRlcm5hbCBiZWhhdmlvciwgYnV0IGl0IGRvZXMgc2lnbmlmaWNhbnRseSBhbHRlciB0aGUgaW50ZXJuYWwgd29ya2luZ3MuIFRoaXMgaXMgYSBjbGFzc2ljIGNhc2Ugd2hlcmUgZnV6emluZyBpcyAqZXNzZW50aWFsKi4gRXZlbiBpZiBpdCBzZWVtcyBoYXJtbGVzcyBvbiB0aGUgc3VyZmFjZSwgcmVmYWN0b3JpbmdzIGxpa2UgdGhpcyBhcmUgcHJpbWUgY2FuZGlkYXRlcyBmb3IgaW50cm9kdWNpbmcgcmVncmVzc2lvbnMgb3IgbWVtb3J5IGxlYWtzLiBXZSBuZWVkIHRvIGJlIHRob3JvdWdoLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjI2MSwiT3V0cHV0VG9rZW5zIjozMDUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5NzAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yMFQxMDo1MTowMC4wODE5ODgzMjdaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NzEzODU0NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX1NZU0NBTExcIixcbiAgICBcIlBFUkZfRVZFTlRTXCIsXG4gICAgXCJCUEZfRVZFTlRTXCIsXG4gICAgXCJTVEFDS1RSQUNFXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYnBmX2dldF9zdGFja2lkXCIsXG4gICAgXCJicGZfZ2V0X3N0YWNraWRfcGVcIixcbiAgICBcImJwZl9nZXRfc3RhY2tcIixcbiAgICBcImJwZl9nZXRfc3RhY2tfc2xlZXBhYmxlXCIsXG4gICAgXCJicGZfZ2V0X3Rhc2tfc3RhY2tcIixcbiAgICBcImJwZl9nZXRfdGFza19zdGFja19zbGVlcGFibGVcIixcbiAgICBcImJwZl9nZXRfc3RhY2tfcGVcIixcbiAgICBcInN0YWNraWRfZmFzdHBhdGhcIixcbiAgICBcInN0YWNraWRfbmV3X2J1Y2tldFwiLFxuICAgIFwic3RhY2tpZF9pbnN0YWxsXCIsXG4gICAgXCJjYWxsY2hhaW5fc3RvcmVcIixcbiAgICBcImNhbGxjaGFpbl9maW5hbGl6ZVwiLFxuICAgIFwiX19icGZfZ2V0X3N0YWNrXCIsXG4gICAgXCJfX2JwZl9nZXRfc3RhY2tfcGVcIixcbiAgICBcIl9fYnBmX2dldF90YXNrX3N0YWNrXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSBCUEYgc3RhY2ttYXAgYW5kIHN0YWNraWQgaGVscGVyIGZ1bmN0aW9ucywgaW50cm9kdWNpbmcgbmV3IGludGVybmFsIGhlbHBlciBmdW5jdGlvbnMgbGlrZSBgc3RhY2tpZF9mYXN0cGF0aGAsIGBzdGFja2lkX25ld19idWNrZXRgLCBgc3RhY2tpZF9pbnN0YWxsYCwgYGNhbGxjaGFpbl9zdG9yZWAsIGFuZCBgY2FsbGNoYWluX2ZpbmFsaXplYC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIEJQRiBzdWJzeXN0ZW0gdGhhdCBoYW5kbGVzIHN0YWNrIHRyYWNlcyBhbmQgcGVyZiBldmVudCBjYWxsY2hhaW5zLiBJdCBpcyBpbXBvcnRhbnQgdG8gZnV6eiB0aGVzZSBjaGFuZ2VzIHRvIGVuc3VyZSBubyByZWdyZXNzaW9ucywgbWVtb3J5IGxlYWtzLCBvciBjb25jdXJyZW5jeSBpc3N1ZXMgYXJlIGludHJvZHVjZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX1NZU0NBTExcIixcbiAgICBcIlBFUkZfRVZFTlRTXCIsXG4gICAgXCJCUEZfRVZFTlRTXCIsXG4gICAgXCJTVEFDS1RSQUNFXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYnBmX2dldF9zdGFja2lkXCIsXG4gICAgXCJicGZfZ2V0X3N0YWNraWRfcGVcIixcbiAgICBcImJwZl9nZXRfc3RhY2tcIixcbiAgICBcImJwZl9nZXRfc3RhY2tfc2xlZXBhYmxlXCIsXG4gICAgXCJicGZfZ2V0X3Rhc2tfc3RhY2tcIixcbiAgICBcImJwZl9nZXRfdGFza19zdGFja19zbGVlcGFibGVcIixcbiAgICBcImJwZl9nZXRfc3RhY2tfcGVcIixcbiAgICBcInN0YWNraWRfZmFzdHBhdGhcIixcbiAgICBcInN0YWNraWRfbmV3X2J1Y2tldFwiLFxuICAgIFwic3RhY2tpZF9pbnN0YWxsXCIsXG4gICAgXCJjYWxsY2hhaW5fc3RvcmVcIixcbiAgICBcImNhbGxjaGFpbl9maW5hbGl6ZVwiLFxuICAgIFwiX19icGZfZ2V0X3N0YWNrXCIsXG4gICAgXCJfX2JwZl9nZXRfc3RhY2tfcGVcIixcbiAgICBcIl9fYnBmX2dldF90YXNrX3N0YWNrXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSBCUEYgc3RhY2ttYXAgYW5kIHN0YWNraWQgaGVscGVyIGZ1bmN0aW9ucywgaW50cm9kdWNpbmcgbmV3IGludGVybmFsIGhlbHBlciBmdW5jdGlvbnMgbGlrZSBgc3RhY2tpZF9mYXN0cGF0aGAsIGBzdGFja2lkX25ld19idWNrZXRgLCBgc3RhY2tpZF9pbnN0YWxsYCwgYGNhbGxjaGFpbl9zdG9yZWAsIGFuZCBgY2FsbGNoYWluX2ZpbmFsaXplYC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIEJQRiBzdWJzeXN0ZW0gdGhhdCBoYW5kbGVzIHN0YWNrIHRyYWNlcyBhbmQgcGVyZiBldmVudCBjYWxsY2hhaW5zLiBJdCBpcyBpbXBvcnRhbnQgdG8gZnV6eiB0aGVzZSBjaGFuZ2VzIHRvIGVuc3VyZSBubyByZWdyZXNzaW9ucywgbWVtb3J5IGxlYWtzLCBvciBjb25jdXJyZW5jeSBpc3N1ZXMgYXJlIGludHJvZHVjZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowzrnhc[1] Phase: Succeeded StartedAt: 2026-07-20 10:51:11 +0000 UTC FinishedAt: 2026-07-20 10:51:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzrnhc[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-20 10:51:11 +0000 UTC FinishedAt: 2026-07-20 10:51:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzrnhc[2] Phase: Succeeded StartedAt: 2026-07-20 10:51:11 +0000 UTC FinishedAt: 2026-07-20 15:28:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzrnhc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"761214e5c0b14aa4e16a6b763c7a4932ce89f589","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","PERF_EVENTS","BPF_EVENTS","STACKTRACE"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_get_stackid","bpf_get_stackid_pe","bpf_get_stack","bpf_get_stack_sleepable","bpf_get_task_stack","bpf_get_task_stack_sleepable","bpf_get_stack_pe","stackid_fastpath","stackid_new_bucket","stackid_install","callchain_store","callchain_finalize","__bpf_get_stack","__bpf_get_stack_pe","__bpf_get_task_stack"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"761214e5c0b14aa4e16a6b763c7a4932ce89f589","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","PERF_EVENTS","BPF_EVENTS","STACKTRACE"],"series_id":"1f7450ef-d3af-4c90-82b2-42a5b2c958bb","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-07-20 10:51:11 +0000 UTC FinishedAt: 2026-07-20 15:28:11 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"761214e5c0b14aa4e16a6b763c7a4932ce89f589","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","PERF_EVENTS","BPF_EVENTS","STACKTRACE"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_get_stackid","bpf_get_stackid_pe","bpf_get_stack","bpf_get_stack_sleepable","bpf_get_task_stack","bpf_get_task_stack_sleepable","bpf_get_stack_pe","stackid_fastpath","stackid_new_bucket","stackid_install","callchain_store","callchain_finalize","__bpf_get_stack","__bpf_get_stack_pe","__bpf_get_task_stack"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"761214e5c0b14aa4e16a6b763c7a4932ce89f589","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","PERF_EVENTS","BPF_EVENTS","STACKTRACE"],"series_id":"1f7450ef-d3af-4c90-82b2-42a5b2c958bb","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowzrnhc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"761214e5c0b14aa4e16a6b763c7a4932ce89f589","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","PERF_EVENTS","BPF_EVENTS","STACKTRACE"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_get_stackid","bpf_get_stackid_pe","bpf_get_stack","bpf_get_stack_sleepable","bpf_get_task_stack","bpf_get_task_stack_sleepable","bpf_get_stack_pe","stackid_fastpath","stackid_new_bucket","stackid_install","callchain_store","callchain_finalize","__bpf_get_stack","__bpf_get_stack_pe","__bpf_get_task_stack"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"761214e5c0b14aa4e16a6b763c7a4932ce89f589","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","PERF_EVENTS","BPF_EVENTS","STACKTRACE"],"series_id":"1f7450ef-d3af-4c90-82b2-42a5b2c958bb","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-07-20 10:51:11 +0000 UTC FinishedAt: 2026-07-20 10:51:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzrnhc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"761214e5c0b14aa4e16a6b763c7a4932ce89f589","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","PERF_EVENTS","BPF_EVENTS","STACKTRACE"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_get_stackid","bpf_get_stackid_pe","bpf_get_stack","bpf_get_stack_sleepable","bpf_get_task_stack","bpf_get_task_stack_sleepable","bpf_get_stack_pe","stackid_fastpath","stackid_new_bucket","stackid_install","callchain_store","callchain_finalize","__bpf_get_stack","__bpf_get_stack_pe","__bpf_get_task_stack"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"761214e5c0b14aa4e16a6b763c7a4932ce89f589","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","PERF_EVENTS","BPF_EVENTS","STACKTRACE"],"series_id":"1f7450ef-d3af-4c90-82b2-42a5b2c958bb","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-07-20 10:51:11 +0000 UTC FinishedAt: 2026-07-20 10:51:18 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"761214e5c0b14aa4e16a6b763c7a4932ce89f589","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","PERF_EVENTS","BPF_EVENTS","STACKTRACE"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowzrnhc/series-workflowzrnhc-convert-artifact-4093453445/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowzrnhc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"761214e5c0b14aa4e16a6b763c7a4932ce89f589","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","PERF_EVENTS","BPF_EVENTS","STACKTRACE"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_get_stackid","bpf_get_stackid_pe","bpf_get_stack","bpf_get_stack_sleepable","bpf_get_task_stack","bpf_get_task_stack_sleepable","bpf_get_stack_pe","stackid_fastpath","stackid_new_bucket","stackid_install","callchain_store","callchain_finalize","__bpf_get_stack","__bpf_get_stack_pe","__bpf_get_task_stack"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"761214e5c0b14aa4e16a6b763c7a4932ce89f589","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","PERF_EVENTS","BPF_EVENTS","STACKTRACE"],"series_id":"1f7450ef-d3af-4c90-82b2-42a5b2c958bb","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-07-20 10:51:22 +0000 UTC FinishedAt: 2026-07-20 11:41:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzrnhc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"761214e5c0b14aa4e16a6b763c7a4932ce89f589","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","PERF_EVENTS","BPF_EVENTS","STACKTRACE"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_get_stackid","bpf_get_stackid_pe","bpf_get_stack","bpf_get_stack_sleepable","bpf_get_task_stack","bpf_get_task_stack_sleepable","bpf_get_stack_pe","stackid_fastpath","stackid_new_bucket","stackid_install","callchain_store","callchain_finalize","__bpf_get_stack","__bpf_get_stack_pe","__bpf_get_task_stack"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"761214e5c0b14aa4e16a6b763c7a4932ce89f589","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","PERF_EVENTS","BPF_EVENTS","STACKTRACE"],"series_id":"1f7450ef-d3af-4c90-82b2-42a5b2c958bb","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-07-20 10:51:22 +0000 UTC FinishedAt: 2026-07-20 11:41:02 +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:*f061425d-81f4-4613-b9b7-0debf06ae3ad,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-workflowzrnhc/series-workflowzrnhc-convert-artifact-4093453445/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": "86f405d6-8bce-4962-ad77-f149dcedafca", "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-workflowzrnhc/series-workflowzrnhc-build-action-3837517867/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowzrnhc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"761214e5c0b14aa4e16a6b763c7a4932ce89f589","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","PERF_EVENTS","BPF_EVENTS","STACKTRACE"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_get_stackid","bpf_get_stackid_pe","bpf_get_stack","bpf_get_stack_sleepable","bpf_get_task_stack","bpf_get_task_stack_sleepable","bpf_get_stack_pe","stackid_fastpath","stackid_new_bucket","stackid_install","callchain_store","callchain_finalize","__bpf_get_stack","__bpf_get_stack_pe","__bpf_get_task_stack"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"761214e5c0b14aa4e16a6b763c7a4932ce89f589","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","PERF_EVENTS","BPF_EVENTS","STACKTRACE"],"series_id":"1f7450ef-d3af-4c90-82b2-42a5b2c958bb","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-07-20 10:51:22 +0000 UTC FinishedAt: 2026-07-20 11:40:52 +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:*f061425d-81f4-4613-b9b7-0debf06ae3ad,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-workflowzrnhc/series-workflowzrnhc-convert-artifact-4093453445/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": "86f405d6-8bce-4962-ad77-f149dcedafca", "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-workflowzrnhc/series-workflowzrnhc-build-action-3837517867/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowzrnhc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"761214e5c0b14aa4e16a6b763c7a4932ce89f589","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","PERF_EVENTS","BPF_EVENTS","STACKTRACE"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_get_stackid","bpf_get_stackid_pe","bpf_get_stack","bpf_get_stack_sleepable","bpf_get_task_stack","bpf_get_task_stack_sleepable","bpf_get_stack_pe","stackid_fastpath","stackid_new_bucket","stackid_install","callchain_store","callchain_finalize","__bpf_get_stack","__bpf_get_stack_pe","__bpf_get_task_stack"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"761214e5c0b14aa4e16a6b763c7a4932ce89f589","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","PERF_EVENTS","BPF_EVENTS","STACKTRACE"],"series_id":"1f7450ef-d3af-4c90-82b2-42a5b2c958bb","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-07-20 11:41:02 +0000 UTC FinishedAt: 2026-07-20 11:41:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzrnhc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"761214e5c0b14aa4e16a6b763c7a4932ce89f589","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","PERF_EVENTS","BPF_EVENTS","STACKTRACE"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_get_stackid","bpf_get_stackid_pe","bpf_get_stack","bpf_get_stack_sleepable","bpf_get_task_stack","bpf_get_task_stack_sleepable","bpf_get_stack_pe","stackid_fastpath","stackid_new_bucket","stackid_install","callchain_store","callchain_finalize","__bpf_get_stack","__bpf_get_stack_pe","__bpf_get_task_stack"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"761214e5c0b14aa4e16a6b763c7a4932ce89f589","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","PERF_EVENTS","BPF_EVENTS","STACKTRACE"],"series_id":"1f7450ef-d3af-4c90-82b2-42a5b2c958bb","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-07-20 11:41:02 +0000 UTC FinishedAt: 2026-07-20 11:41:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzrnhc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"761214e5c0b14aa4e16a6b763c7a4932ce89f589","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","PERF_EVENTS","BPF_EVENTS","STACKTRACE"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_get_stackid","bpf_get_stackid_pe","bpf_get_stack","bpf_get_stack_sleepable","bpf_get_task_stack","bpf_get_task_stack_sleepable","bpf_get_stack_pe","stackid_fastpath","stackid_new_bucket","stackid_install","callchain_store","callchain_finalize","__bpf_get_stack","__bpf_get_stack_pe","__bpf_get_task_stack"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"761214e5c0b14aa4e16a6b763c7a4932ce89f589","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","PERF_EVENTS","BPF_EVENTS","STACKTRACE"],"series_id":"1f7450ef-d3af-4c90-82b2-42a5b2c958bb","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-07-20 11:41:02 +0000 UTC FinishedAt: 2026-07-20 11:41:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzrnhc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"761214e5c0b14aa4e16a6b763c7a4932ce89f589","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","PERF_EVENTS","BPF_EVENTS","STACKTRACE"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_get_stackid","bpf_get_stackid_pe","bpf_get_stack","bpf_get_stack_sleepable","bpf_get_task_stack","bpf_get_task_stack_sleepable","bpf_get_stack_pe","stackid_fastpath","stackid_new_bucket","stackid_install","callchain_store","callchain_finalize","__bpf_get_stack","__bpf_get_stack_pe","__bpf_get_task_stack"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"761214e5c0b14aa4e16a6b763c7a4932ce89f589","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","PERF_EVENTS","BPF_EVENTS","STACKTRACE"],"series_id":"1f7450ef-d3af-4c90-82b2-42a5b2c958bb","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-07-20 11:41:02 +0000 UTC FinishedAt: 2026-07-20 11:41:09 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"761214e5c0b14aa4e16a6b763c7a4932ce89f589","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","PERF_EVENTS","BPF_EVENTS","STACKTRACE"],"series_id":"1f7450ef-d3af-4c90-82b2-42a5b2c958bb","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowzrnhc/series-workflowzrnhc-convert-artifact-1566393184/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowzrnhc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"761214e5c0b14aa4e16a6b763c7a4932ce89f589","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","PERF_EVENTS","BPF_EVENTS","STACKTRACE"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_get_stackid","bpf_get_stackid_pe","bpf_get_stack","bpf_get_stack_sleepable","bpf_get_task_stack","bpf_get_task_stack_sleepable","bpf_get_stack_pe","stackid_fastpath","stackid_new_bucket","stackid_install","callchain_store","callchain_finalize","__bpf_get_stack","__bpf_get_stack_pe","__bpf_get_task_stack"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"761214e5c0b14aa4e16a6b763c7a4932ce89f589","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","PERF_EVENTS","BPF_EVENTS","STACKTRACE"],"series_id":"1f7450ef-d3af-4c90-82b2-42a5b2c958bb","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-07-20 11:41:12 +0000 UTC FinishedAt: 2026-07-20 11:43:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzrnhc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"761214e5c0b14aa4e16a6b763c7a4932ce89f589","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","PERF_EVENTS","BPF_EVENTS","STACKTRACE"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_get_stackid","bpf_get_stackid_pe","bpf_get_stack","bpf_get_stack_sleepable","bpf_get_task_stack","bpf_get_task_stack_sleepable","bpf_get_stack_pe","stackid_fastpath","stackid_new_bucket","stackid_install","callchain_store","callchain_finalize","__bpf_get_stack","__bpf_get_stack_pe","__bpf_get_task_stack"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"761214e5c0b14aa4e16a6b763c7a4932ce89f589","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","PERF_EVENTS","BPF_EVENTS","STACKTRACE"],"series_id":"1f7450ef-d3af-4c90-82b2-42a5b2c958bb","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-07-20 11:41:12 +0000 UTC FinishedAt: 2026-07-20 11:43:03 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*86f405d6-8bce-4962-ad77-f149dcedafca,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-workflowzrnhc/series-workflowzrnhc-build-action-3837517867/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-workflowzrnhc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"761214e5c0b14aa4e16a6b763c7a4932ce89f589","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","PERF_EVENTS","BPF_EVENTS","STACKTRACE"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_get_stackid","bpf_get_stackid_pe","bpf_get_stack","bpf_get_stack_sleepable","bpf_get_task_stack","bpf_get_task_stack_sleepable","bpf_get_stack_pe","stackid_fastpath","stackid_new_bucket","stackid_install","callchain_store","callchain_finalize","__bpf_get_stack","__bpf_get_stack_pe","__bpf_get_task_stack"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"761214e5c0b14aa4e16a6b763c7a4932ce89f589","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","PERF_EVENTS","BPF_EVENTS","STACKTRACE"],"series_id":"1f7450ef-d3af-4c90-82b2-42a5b2c958bb","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-07-20 11:43:13 +0000 UTC FinishedAt: 2026-07-20 11:43:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzrnhc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"761214e5c0b14aa4e16a6b763c7a4932ce89f589","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","PERF_EVENTS","BPF_EVENTS","STACKTRACE"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_get_stackid","bpf_get_stackid_pe","bpf_get_stack","bpf_get_stack_sleepable","bpf_get_task_stack","bpf_get_task_stack_sleepable","bpf_get_stack_pe","stackid_fastpath","stackid_new_bucket","stackid_install","callchain_store","callchain_finalize","__bpf_get_stack","__bpf_get_stack_pe","__bpf_get_task_stack"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"761214e5c0b14aa4e16a6b763c7a4932ce89f589","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","PERF_EVENTS","BPF_EVENTS","STACKTRACE"],"series_id":"1f7450ef-d3af-4c90-82b2-42a5b2c958bb","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-07-20 11:43:13 +0000 UTC FinishedAt: 2026-07-20 11:43:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzrnhc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"761214e5c0b14aa4e16a6b763c7a4932ce89f589","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","PERF_EVENTS","BPF_EVENTS","STACKTRACE"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_get_stackid","bpf_get_stackid_pe","bpf_get_stack","bpf_get_stack_sleepable","bpf_get_task_stack","bpf_get_task_stack_sleepable","bpf_get_stack_pe","stackid_fastpath","stackid_new_bucket","stackid_install","callchain_store","callchain_finalize","__bpf_get_stack","__bpf_get_stack_pe","__bpf_get_task_stack"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"761214e5c0b14aa4e16a6b763c7a4932ce89f589","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","PERF_EVENTS","BPF_EVENTS","STACKTRACE"],"series_id":"1f7450ef-d3af-4c90-82b2-42a5b2c958bb","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-07-20 11:43:13 +0000 UTC FinishedAt: 2026-07-20 12:23:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzrnhc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"761214e5c0b14aa4e16a6b763c7a4932ce89f589","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","PERF_EVENTS","BPF_EVENTS","STACKTRACE"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_get_stackid","bpf_get_stackid_pe","bpf_get_stack","bpf_get_stack_sleepable","bpf_get_task_stack","bpf_get_task_stack_sleepable","bpf_get_stack_pe","stackid_fastpath","stackid_new_bucket","stackid_install","callchain_store","callchain_finalize","__bpf_get_stack","__bpf_get_stack_pe","__bpf_get_task_stack"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"761214e5c0b14aa4e16a6b763c7a4932ce89f589","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","PERF_EVENTS","BPF_EVENTS","STACKTRACE"],"series_id":"1f7450ef-d3af-4c90-82b2-42a5b2c958bb","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-07-20 11:43:13 +0000 UTC FinishedAt: 2026-07-20 12:23:57 +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:*f061425d-81f4-4613-b9b7-0debf06ae3ad,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-workflowzrnhc/series-workflowzrnhc-convert-artifact-1566393184/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": "e606f7ac-d30f-4a30-97eb-878527137af5", "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-workflowzrnhc/series-workflowzrnhc-build-action-3083841564/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowzrnhc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"761214e5c0b14aa4e16a6b763c7a4932ce89f589","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","PERF_EVENTS","BPF_EVENTS","STACKTRACE"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_get_stackid","bpf_get_stackid_pe","bpf_get_stack","bpf_get_stack_sleepable","bpf_get_task_stack","bpf_get_task_stack_sleepable","bpf_get_stack_pe","stackid_fastpath","stackid_new_bucket","stackid_install","callchain_store","callchain_finalize","__bpf_get_stack","__bpf_get_stack_pe","__bpf_get_task_stack"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"761214e5c0b14aa4e16a6b763c7a4932ce89f589","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","PERF_EVENTS","BPF_EVENTS","STACKTRACE"],"series_id":"1f7450ef-d3af-4c90-82b2-42a5b2c958bb","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-07-20 11:43:13 +0000 UTC FinishedAt: 2026-07-20 12:23:47 +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:*f061425d-81f4-4613-b9b7-0debf06ae3ad,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-workflowzrnhc/series-workflowzrnhc-convert-artifact-1566393184/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": "e606f7ac-d30f-4a30-97eb-878527137af5", "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-workflowzrnhc/series-workflowzrnhc-build-action-3083841564/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowzrnhc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"761214e5c0b14aa4e16a6b763c7a4932ce89f589","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","PERF_EVENTS","BPF_EVENTS","STACKTRACE"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_get_stackid","bpf_get_stackid_pe","bpf_get_stack","bpf_get_stack_sleepable","bpf_get_task_stack","bpf_get_task_stack_sleepable","bpf_get_stack_pe","stackid_fastpath","stackid_new_bucket","stackid_install","callchain_store","callchain_finalize","__bpf_get_stack","__bpf_get_stack_pe","__bpf_get_task_stack"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"761214e5c0b14aa4e16a6b763c7a4932ce89f589","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","PERF_EVENTS","BPF_EVENTS","STACKTRACE"],"series_id":"1f7450ef-d3af-4c90-82b2-42a5b2c958bb","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-07-20 12:23:57 +0000 UTC FinishedAt: 2026-07-20 12:23:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzrnhc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"761214e5c0b14aa4e16a6b763c7a4932ce89f589","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","PERF_EVENTS","BPF_EVENTS","STACKTRACE"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_get_stackid","bpf_get_stackid_pe","bpf_get_stack","bpf_get_stack_sleepable","bpf_get_task_stack","bpf_get_task_stack_sleepable","bpf_get_stack_pe","stackid_fastpath","stackid_new_bucket","stackid_install","callchain_store","callchain_finalize","__bpf_get_stack","__bpf_get_stack_pe","__bpf_get_task_stack"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"761214e5c0b14aa4e16a6b763c7a4932ce89f589","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","PERF_EVENTS","BPF_EVENTS","STACKTRACE"],"series_id":"1f7450ef-d3af-4c90-82b2-42a5b2c958bb","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-07-20 12:23:57 +0000 UTC FinishedAt: 2026-07-20 12:23:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzrnhc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"761214e5c0b14aa4e16a6b763c7a4932ce89f589","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","PERF_EVENTS","BPF_EVENTS","STACKTRACE"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_get_stackid","bpf_get_stackid_pe","bpf_get_stack","bpf_get_stack_sleepable","bpf_get_task_stack","bpf_get_task_stack_sleepable","bpf_get_stack_pe","stackid_fastpath","stackid_new_bucket","stackid_install","callchain_store","callchain_finalize","__bpf_get_stack","__bpf_get_stack_pe","__bpf_get_task_stack"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"761214e5c0b14aa4e16a6b763c7a4932ce89f589","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","PERF_EVENTS","BPF_EVENTS","STACKTRACE"],"series_id":"1f7450ef-d3af-4c90-82b2-42a5b2c958bb","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-07-20 12:23:57 +0000 UTC FinishedAt: 2026-07-20 12:25:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzrnhc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"761214e5c0b14aa4e16a6b763c7a4932ce89f589","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","PERF_EVENTS","BPF_EVENTS","STACKTRACE"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_get_stackid","bpf_get_stackid_pe","bpf_get_stack","bpf_get_stack_sleepable","bpf_get_task_stack","bpf_get_task_stack_sleepable","bpf_get_stack_pe","stackid_fastpath","stackid_new_bucket","stackid_install","callchain_store","callchain_finalize","__bpf_get_stack","__bpf_get_stack_pe","__bpf_get_task_stack"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"761214e5c0b14aa4e16a6b763c7a4932ce89f589","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","PERF_EVENTS","BPF_EVENTS","STACKTRACE"],"series_id":"1f7450ef-d3af-4c90-82b2-42a5b2c958bb","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-07-20 12:23:57 +0000 UTC FinishedAt: 2026-07-20 12:25:38 +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:*e606f7ac-d30f-4a30-97eb-878527137af5,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-workflowzrnhc/series-workflowzrnhc-build-action-3083841564/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-workflowzrnhc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"761214e5c0b14aa4e16a6b763c7a4932ce89f589","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","PERF_EVENTS","BPF_EVENTS","STACKTRACE"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_get_stackid","bpf_get_stackid_pe","bpf_get_stack","bpf_get_stack_sleepable","bpf_get_task_stack","bpf_get_task_stack_sleepable","bpf_get_stack_pe","stackid_fastpath","stackid_new_bucket","stackid_install","callchain_store","callchain_finalize","__bpf_get_stack","__bpf_get_stack_pe","__bpf_get_task_stack"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"761214e5c0b14aa4e16a6b763c7a4932ce89f589","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","PERF_EVENTS","BPF_EVENTS","STACKTRACE"],"series_id":"1f7450ef-d3af-4c90-82b2-42a5b2c958bb","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-07-20 12:25:47 +0000 UTC FinishedAt: 2026-07-20 15:28:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzrnhc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"761214e5c0b14aa4e16a6b763c7a4932ce89f589","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","PERF_EVENTS","BPF_EVENTS","STACKTRACE"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_get_stackid","bpf_get_stackid_pe","bpf_get_stack","bpf_get_stack_sleepable","bpf_get_task_stack","bpf_get_task_stack_sleepable","bpf_get_stack_pe","stackid_fastpath","stackid_new_bucket","stackid_install","callchain_store","callchain_finalize","__bpf_get_stack","__bpf_get_stack_pe","__bpf_get_task_stack"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"761214e5c0b14aa4e16a6b763c7a4932ce89f589","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","PERF_EVENTS","BPF_EVENTS","STACKTRACE"],"series_id":"1f7450ef-d3af-4c90-82b2-42a5b2c958bb","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-07-20 12:25:47 +0000 UTC FinishedAt: 2026-07-20 15:28:11 +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":["bpf_get_stackid","bpf_get_stackid_pe","bpf_get_stack","bpf_get_stack_sleepable","bpf_get_task_stack","bpf_get_task_stack_sleepable","bpf_get_stack_pe","stackid_fastpath","stackid_new_bucket","stackid_install","callchain_store","callchain_finalize","__bpf_get_stack","__bpf_get_stack_pe","__bpf_get_task_stack"],"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:*86f405d6-8bce-4962-ad77-f149dcedafca,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*e606f7ac-d30f-4a30-97eb-878527137af5,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-workflowzrnhc/series-workflowzrnhc-build-action-3837517867/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-workflowzrnhc/series-workflowzrnhc-build-action-3083841564/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowzrnhc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"761214e5c0b14aa4e16a6b763c7a4932ce89f589","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","PERF_EVENTS","BPF_EVENTS","STACKTRACE"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_get_stackid","bpf_get_stackid_pe","bpf_get_stack","bpf_get_stack_sleepable","bpf_get_task_stack","bpf_get_task_stack_sleepable","bpf_get_stack_pe","stackid_fastpath","stackid_new_bucket","stackid_install","callchain_store","callchain_finalize","__bpf_get_stack","__bpf_get_stack_pe","__bpf_get_task_stack"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"761214e5c0b14aa4e16a6b763c7a4932ce89f589","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","PERF_EVENTS","BPF_EVENTS","STACKTRACE"],"series_id":"1f7450ef-d3af-4c90-82b2-42a5b2c958bb","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-07-20 12:25:47 +0000 UTC FinishedAt: 2026-07-20 12:25:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzrnhc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"761214e5c0b14aa4e16a6b763c7a4932ce89f589","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","PERF_EVENTS","BPF_EVENTS","STACKTRACE"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_get_stackid","bpf_get_stackid_pe","bpf_get_stack","bpf_get_stack_sleepable","bpf_get_task_stack","bpf_get_task_stack_sleepable","bpf_get_stack_pe","stackid_fastpath","stackid_new_bucket","stackid_install","callchain_store","callchain_finalize","__bpf_get_stack","__bpf_get_stack_pe","__bpf_get_task_stack"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"761214e5c0b14aa4e16a6b763c7a4932ce89f589","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","PERF_EVENTS","BPF_EVENTS","STACKTRACE"],"series_id":"1f7450ef-d3af-4c90-82b2-42a5b2c958bb","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-07-20 12:25:47 +0000 UTC FinishedAt: 2026-07-20 12:25:52 +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":["bpf_get_stackid","bpf_get_stackid_pe","bpf_get_stack","bpf_get_stack_sleepable","bpf_get_task_stack","bpf_get_task_stack_sleepable","bpf_get_stack_pe","stackid_fastpath","stackid_new_bucket","stackid_install","callchain_store","callchain_finalize","__bpf_get_stack","__bpf_get_stack_pe","__bpf_get_task_stack"],"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-workflowzrnhc/series-workflowzrnhc-convert-artifact-2043195321/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowzrnhc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"761214e5c0b14aa4e16a6b763c7a4932ce89f589","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","PERF_EVENTS","BPF_EVENTS","STACKTRACE"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_get_stackid","bpf_get_stackid_pe","bpf_get_stack","bpf_get_stack_sleepable","bpf_get_task_stack","bpf_get_task_stack_sleepable","bpf_get_stack_pe","stackid_fastpath","stackid_new_bucket","stackid_install","callchain_store","callchain_finalize","__bpf_get_stack","__bpf_get_stack_pe","__bpf_get_task_stack"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"761214e5c0b14aa4e16a6b763c7a4932ce89f589","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","PERF_EVENTS","BPF_EVENTS","STACKTRACE"],"series_id":"1f7450ef-d3af-4c90-82b2-42a5b2c958bb","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-07-20 12:25:47 +0000 UTC FinishedAt: 2026-07-20 12:25:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzrnhc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"761214e5c0b14aa4e16a6b763c7a4932ce89f589","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","PERF_EVENTS","BPF_EVENTS","STACKTRACE"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_get_stackid","bpf_get_stackid_pe","bpf_get_stack","bpf_get_stack_sleepable","bpf_get_task_stack","bpf_get_task_stack_sleepable","bpf_get_stack_pe","stackid_fastpath","stackid_new_bucket","stackid_install","callchain_store","callchain_finalize","__bpf_get_stack","__bpf_get_stack_pe","__bpf_get_task_stack"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"761214e5c0b14aa4e16a6b763c7a4932ce89f589","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","PERF_EVENTS","BPF_EVENTS","STACKTRACE"],"series_id":"1f7450ef-d3af-4c90-82b2-42a5b2c958bb","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-07-20 12:25:47 +0000 UTC FinishedAt: 2026-07-20 12:25:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzrnhc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"761214e5c0b14aa4e16a6b763c7a4932ce89f589","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","PERF_EVENTS","BPF_EVENTS","STACKTRACE"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_get_stackid","bpf_get_stackid_pe","bpf_get_stack","bpf_get_stack_sleepable","bpf_get_task_stack","bpf_get_task_stack_sleepable","bpf_get_stack_pe","stackid_fastpath","stackid_new_bucket","stackid_install","callchain_store","callchain_finalize","__bpf_get_stack","__bpf_get_stack_pe","__bpf_get_task_stack"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"761214e5c0b14aa4e16a6b763c7a4932ce89f589","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","PERF_EVENTS","BPF_EVENTS","STACKTRACE"],"series_id":"1f7450ef-d3af-4c90-82b2-42a5b2c958bb","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-07-20 12:25:47 +0000 UTC FinishedAt: 2026-07-20 12:25:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzrnhc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"761214e5c0b14aa4e16a6b763c7a4932ce89f589","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","PERF_EVENTS","BPF_EVENTS","STACKTRACE"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_get_stackid","bpf_get_stackid_pe","bpf_get_stack","bpf_get_stack_sleepable","bpf_get_task_stack","bpf_get_task_stack_sleepable","bpf_get_stack_pe","stackid_fastpath","stackid_new_bucket","stackid_install","callchain_store","callchain_finalize","__bpf_get_stack","__bpf_get_stack_pe","__bpf_get_task_stack"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"761214e5c0b14aa4e16a6b763c7a4932ce89f589","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","PERF_EVENTS","BPF_EVENTS","STACKTRACE"],"series_id":"1f7450ef-d3af-4c90-82b2-42a5b2c958bb","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-07-20 12:25:57 +0000 UTC FinishedAt: 2026-07-20 15:28:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzrnhc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"761214e5c0b14aa4e16a6b763c7a4932ce89f589","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","PERF_EVENTS","BPF_EVENTS","STACKTRACE"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_get_stackid","bpf_get_stackid_pe","bpf_get_stack","bpf_get_stack_sleepable","bpf_get_task_stack","bpf_get_task_stack_sleepable","bpf_get_stack_pe","stackid_fastpath","stackid_new_bucket","stackid_install","callchain_store","callchain_finalize","__bpf_get_stack","__bpf_get_stack_pe","__bpf_get_task_stack"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"761214e5c0b14aa4e16a6b763c7a4932ce89f589","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","PERF_EVENTS","BPF_EVENTS","STACKTRACE"],"series_id":"1f7450ef-d3af-4c90-82b2-42a5b2c958bb","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-07-20 12:25:57 +0000 UTC FinishedAt: 2026-07-20 15:28:01 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*86f405d6-8bce-4962-ad77-f149dcedafca,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*e606f7ac-d30f-4a30-97eb-878527137af5,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-workflowzrnhc/series-workflowzrnhc-build-action-3837517867/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-workflowzrnhc/series-workflowzrnhc-build-action-3083841564/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-workflowzrnhc/series-workflowzrnhc-convert-artifact-2043195321/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,}