Name: series-workflownjth2 Phase: Succeeded StartedAt: 2026-06-24 19:06:10 +0000 UTC FinishedAt: 2026-06-24 23:19:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflownjth2[0] Phase: Succeeded StartedAt: 2026-06-24 19:06:10 +0000 UTC FinishedAt: 2026-06-24 19:15:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflownjth2[0].run-triage Phase: Succeeded StartedAt: 2026-06-24 19:06:10 +0000 UTC FinishedAt: 2026-06-24 19:15:31 +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": "a975094bf98ca97be9146f9d3b5681a6f9cf5ce3", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "CGROUP_BPF", "BPF_SYSCALL", "INET", "IPV6" ], "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": "a975094bf98ca97be9146f9d3b5681a6f9cf5ce3", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "CGROUP_BPF", "BPF_SYSCALL", "INET", "IPV6" ], "series_id": "2db1e935-8379-4970-b7ca-69d54fbd936b" }, "track": "KASAN", "fuzz": { "focus": [ "bpf" ], "focus_symbols": [ "bpf_icmp_send" ], "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+CgkJCTx0ZD4yMDI2LzA2LzI0IDE5OjE0PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0NHUk9VUF9CUEYmIzM0OywKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OywKICAgICYjMzQ7SU5FVCYjMzQ7LAogICAgJiMzNDtJUFY2JiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YnBmX2ljbXBfc2VuZCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IEJQRiBrZnVuYyBgYnBmX2ljbXBfc2VuZGAgd2hpY2ggYWxsb3dzIEJQRiBwcm9ncmFtcyBhdHRhY2hlZCB0byBjZ3JvdXAgc2tiIGhvb2tzIHRvIHNlbmQgSUNNUCBjb250cm9sIG1lc3NhZ2VzLiBUaGlzIGlzIGEgbmV3IGZ1bmN0aW9uYWwgZmVhdHVyZSB0aGF0IGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgQlBGIHByb2dyYW1zLCBtYWtpbmcgaXQgYSBwcmltZSB0YXJnZXQgZm9yIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjQgMTk6MTQ8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA1NGE0OTI5ZDNkMzQyZWU1ZjY5ZDRmNzZhZjcyN2Y5ZGVhOTFjOTExXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBKdW4gMjQgMTk6MTQ6MzUgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUvZmlsdGVyLmMgYi9uZXQvY29yZS9maWx0ZXIuY1xuaW5kZXggMmU5NmI0Yjg0N2NlMTIuLmYzYWE0OTRlZDEwNTMwIDEwMDY0NFxuLS0tIGEvbmV0L2NvcmUvZmlsdGVyLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9jb3JlL2ZpbHRlci5jXG5AQCAtODQsNiAmIzQzOzg0LDkgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC91bi5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbmV0L3hkcF9zb2NrX2Rydi5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbmV0L2luZXRfZHNjcC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2ljbXB2Ni5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY25ldC9pY21wLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbmV0L2lwNl9yb3V0ZS5oXHUwMDNlXG4gXG4gI2luY2x1ZGUgXCYjMzQ7ZGV2LmhcJiMzNDtcbiBcbkBAIC0xMjU0Niw2ICYjNDM7MTI1NDksODQgQEAgX19icGZfa2Z1bmMgaW50IGJwZl94ZHBfcHVsbF9kYXRhKHN0cnVjdCB4ZHBfbWQgKngsIHUzMiBsZW4pXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4mIzQzOy8qKlxuJiM0MzsgKiBicGZfaWNtcF9zZW5kIC0gU2VuZCBhbiBJQ01QIGNvbnRyb2wgbWVzc2FnZVxuJiM0MzsgKiBAc2tiX2N0eDogUGFja2V0IHRoYXQgdHJpZ2dlcmVkIHRoZSBjb250cm9sIG1lc3NhZ2VcbiYjNDM7ICogQHR5cGU6IElDTVAgdHlwZSAob25seSBJQ01QX0RFU1RfVU5SRUFDSC9JQ01QVjZfREVTVF9VTlJFQUNIIHN1cHBvcnRlZClcbiYjNDM7ICogQGNvZGU6IElDTVAgY29kZSAoMC0xNSBleGNlcHQgSUNNUF9GUkFHX05FRURFRCBmb3IgSVB2NCwgMC02IGZvciBJUHY2KVxuJiM0MzsgKlxuJiM0MzsgKiBTZW5kcyBhbiBJQ01QIGNvbnRyb2wgbWVzc2FnZSBpbiByZXNwb25zZSB0byB0aGUgcGFja2V0LiBUaGUgb3JpZ2luYWwgcGFja2V0XG4mIzQzOyAqIGlzIGNsb25lZCBiZWZvcmUgc2VuZGluZyB0aGUgSUNNUCBtZXNzYWdlLCBzbyB0aGUgQlBGIHByb2dyYW0gY2FuIHN0aWxsIGxldFxuJiM0MzsgKiB0aGUgcGFja2V0IHBhc3MgaWYgZGVzaXJlZC5cbiYjNDM7ICpcbiYjNDM7ICogQ3VycmVudGx5IG9ubHkgSUNNUF9ERVNUX1VOUkVBQ0ggKElQdjQpIGFuZCBJQ01QVjZfREVTVF9VTlJFQUNIIChJUHY2KSBhcmVcbiYjNDM7ICogc3VwcG9ydGVkLlxuJiM0MzsgKlxuJiM0MzsgKiBSZXR1cm46IDAgb24gc3VjY2VzcyAoc2VuZCBhdHRlbXB0KSwgbmVnYXRpdmUgZXJyb3IgY29kZSBvbiBmYWlsdXJlOlxuJiM0MzsgKiAgICAgICAgIC1FQlVTWTogUmVjdXJzaW9uIGRldGVjdGVkXG4mIzQzOyAqICAgICAgICAgLUVQUk9UT05PU1VQUE9SVDogTm9uLUlQIHByb3RvY29sXG4mIzQzOyAqICAgICAgICAgLUVPUE5PVFNVUFA6IFVuc3VwcG9ydGVkIElDTVAgdHlwZVxuJiM0MzsgKiAgICAgICAgIC1FSU5WQUw6IEludmFsaWQgY29kZSBwYXJhbWV0ZXJcbiYjNDM7ICogICAgICAgICAtRU5FVFVOUkVBQ0g6IFVudXNhYmxlIElQdjQgcm91dGUvZHN0IGF0dGFjaGVkIHRvIHRoZSBza2JcbiYjNDM7ICogICAgICAgICAtRU5PTUVNOiBNZW1vcnkgYWxsb2NhdGlvbiBmYWlsZWRcbiYjNDM7ICovXG4mIzQzO19fYnBmX2tmdW5jIGludCBicGZfaWNtcF9zZW5kKHN0cnVjdCBfX3NrX2J1ZmYgKnNrYl9jdHgsIGludCB0eXBlLCBpbnQgY29kZSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBza19idWZmICpza2IgPSAoc3RydWN0IHNrX2J1ZmYgKilza2JfY3R4O1xuJiM0MztcdHN0cnVjdCBza19idWZmICpuc2tiO1xuJiM0MztcdHN0cnVjdCBzb2NrICpzaztcbiYjNDM7XG4mIzQzO1x0c2sgPSBza2JfdG9fZnVsbF9zayhza2IpO1xuJiM0MztcdGlmIChzayBcdTAwMjZcdTAwMjYgc2stXHUwMDNlc2tfa2Vybl9zb2NrIFx1MDAyNlx1MDAyNlxuJiM0MztcdCAgICAoc2stXHUwMDNlc2tfcHJvdG9jb2wgPT0gSVBQUk9UT19JQ01QIHx8IHNrLVx1MDAzZXNrX3Byb3RvY29sID09IElQUFJPVE9fSUNNUFY2KSlcbiYjNDM7XHRcdHJldHVybiAtRUJVU1k7XG4mIzQzO1xuJiM0MztcdHN3aXRjaCAoc2tiLVx1MDAzZXByb3RvY29sKSB7XG4mIzQzOyNpZiBJU19FTkFCTEVEKENPTkZJR19JTkVUKVxuJiM0MztcdGNhc2UgaHRvbnMoRVRIX1BfSVApOiB7XG4mIzQzO1x0XHRpZiAodHlwZSAhPSBJQ01QX0RFU1RfVU5SRUFDSClcbiYjNDM7XHRcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuJiM0MztcdFx0aWYgKGNvZGUgXHUwMDNjIDAgfHwgY29kZSBcdTAwM2UgTlJfSUNNUF9VTlJFQUNIIHx8XG4mIzQzO1x0XHQgICAgY29kZSA9PSBJQ01QX0ZSQUdfTkVFREVEKSAvKiBuZWVkcyBhIHZhbGlkIG5leHQtaG9wIE1UVSAqL1xuJiM0MztcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XG4mIzQzO1x0XHQvKiBpY21wX3NlbmQgcmVxdWlyZXMgYSBydGFibGU7IHRlc3QtcnVuIHN5bnRoZXRpYyBza2JzIGxhY2sgb25lLiAqL1xuJiM0MztcdFx0aWYgKCFza2JfdmFsaWRfZHN0KHNrYikpXG4mIzQzO1x0XHRcdHJldHVybiAtRU5FVFVOUkVBQ0g7XG4mIzQzO1xuJiM0MztcdFx0bnNrYiA9IHNrYl9jbG9uZShza2IsIEdGUF9BVE9NSUMpO1xuJiM0MztcdFx0aWYgKCFuc2tiKVxuJiM0MztcdFx0XHRyZXR1cm4gLUVOT01FTTtcbiYjNDM7XG4mIzQzO1x0XHRtZW1zZXQoSVBDQihuc2tiKSwgMCwgc2l6ZW9mKCpJUENCKG5za2IpKSk7XG4mIzQzO1x0XHRpY21wX3NlbmQobnNrYiwgdHlwZSwgY29kZSwgMCk7XG4mIzQzO1x0XHRjb25zdW1lX3NrYihuc2tiKTtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdH1cbiYjNDM7I2VuZGlmXG4mIzQzOyNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2KVxuJiM0MztcdGNhc2UgaHRvbnMoRVRIX1BfSVBWNik6XG4mIzQzO1x0XHRpZiAodHlwZSAhPSBJQ01QVjZfREVTVF9VTlJFQUNIKVxuJiM0MztcdFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4mIzQzO1x0XHRpZiAoY29kZSBcdTAwM2MgMCB8fCBjb2RlIFx1MDAzZSBJQ01QVjZfUkVKRUNUX1JPVVRFKVxuJiM0MztcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XG4mIzQzO1x0XHRuc2tiID0gc2tiX2Nsb25lKHNrYiwgR0ZQX0FUT01JQyk7XG4mIzQzO1x0XHRpZiAoIW5za2IpXG4mIzQzO1x0XHRcdHJldHVybiAtRU5PTUVNO1xuJiM0MztcbiYjNDM7XHRcdG1lbXNldChJUDZDQihuc2tiKSwgMCwgc2l6ZW9mKCpJUDZDQihuc2tiKSkpO1xuJiM0MztcdFx0aWNtcHY2X3NlbmQobnNrYiwgdHlwZSwgY29kZSwgMCk7XG4mIzQzO1x0XHRjb25zdW1lX3NrYihuc2tiKTtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MzsjZW5kaWZcbiYjNDM7XHRkZWZhdWx0OlxuJiM0MztcdFx0cmV0dXJuIC1FUFJPVE9OT1NVUFBPUlQ7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiBfX2JwZl9rZnVuY19lbmRfZGVmcygpO1xuIFxuIGludCBicGZfZHlucHRyX2Zyb21fc2tiX3Jkb25seShzdHJ1Y3QgX19za19idWZmICpza2IsIHU2NCBmbGFncyxcbkBAIC0xMjU4OCw2ICYjNDM7MTI2NjksMTAgQEAgQlRGX0tGVU5DU19TVEFSVChicGZfa2Z1bmNfY2hlY2tfc2V0X3NvY2tfb3BzKVxuIEJURl9JRF9GTEFHUyhmdW5jLCBicGZfc29ja19vcHNfZW5hYmxlX3R4X3RzdGFtcClcbiBCVEZfS0ZVTkNTX0VORChicGZfa2Z1bmNfY2hlY2tfc2V0X3NvY2tfb3BzKVxuIFxuJiM0MztCVEZfS0ZVTkNTX1NUQVJUKGJwZl9rZnVuY19jaGVja19zZXRfaWNtcF9zZW5kKVxuJiM0MztCVEZfSURfRkxBR1MoZnVuYywgYnBmX2ljbXBfc2VuZClcbiYjNDM7QlRGX0tGVU5DU19FTkQoYnBmX2tmdW5jX2NoZWNrX3NldF9pY21wX3NlbmQpXG4mIzQzO1xuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYnRmX2tmdW5jX2lkX3NldCBicGZfa2Z1bmNfc2V0X3NrYiA9IHtcbiBcdC5vd25lciA9IFRISVNfTU9EVUxFLFxuIFx0LnNldCA9IFx1MDAyNmJwZl9rZnVuY19jaGVja19zZXRfc2tiLFxuQEAgLTEyNjE4LDYgJiM0MzsxMjcwMywxMSBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGJ0Zl9rZnVuY19pZF9zZXQgYnBmX2tmdW5jX3NldF9zb2NrX29wcyA9IHtcbiBcdC5zZXQgPSBcdTAwMjZicGZfa2Z1bmNfY2hlY2tfc2V0X3NvY2tfb3BzLFxuIH07XG4gXG4mIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgYnRmX2tmdW5jX2lkX3NldCBicGZfa2Z1bmNfc2V0X2ljbXBfc2VuZCA9IHtcbiYjNDM7XHQub3duZXIgPSBUSElTX01PRFVMRSxcbiYjNDM7XHQuc2V0ID0gXHUwMDI2YnBmX2tmdW5jX2NoZWNrX3NldF9pY21wX3NlbmQsXG4mIzQzO307XG4mIzQzO1xuIHN0YXRpYyBpbnQgX19pbml0IGJwZl9rZnVuY19pbml0KHZvaWQpXG4ge1xuIFx0aW50IHJldDtcbkBAIC0xMjYzOSw2ICYjNDM7MTI3MjksNyBAQCBzdGF0aWMgaW50IF9faW5pdCBicGZfa2Z1bmNfaW5pdCh2b2lkKVxuIFx0cmV0ID0gcmV0ID86IHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9DR1JPVVBfU09DS19BRERSLFxuIFx0XHRcdFx0XHQgICAgICAgXHUwMDI2YnBmX2tmdW5jX3NldF9zb2NrX2FkZHIpO1xuIFx0cmV0ID0gcmV0ID86IHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9TQ0hFRF9DTFMsIFx1MDAyNmJwZl9rZnVuY19zZXRfdGNwX3JlcXNrKTtcbiYjNDM7XHRyZXQgPSByZXQgPzogcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX0NHUk9VUF9TS0IsIFx1MDAyNmJwZl9rZnVuY19zZXRfaWNtcF9zZW5kKTtcbiBcdHJldHVybiByZXQgPzogcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX1NPQ0tfT1BTLCBcdTAwMjZicGZfa2Z1bmNfc2V0X3NvY2tfb3BzKTtcbiB9XG4gbGF0ZV9pbml0Y2FsbChicGZfa2Z1bmNfaW5pdCk7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvaWNtcF9zZW5kX2tmdW5jLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9pY21wX3NlbmRfa2Z1bmMuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi5mZmFmMGZlMTg4MGIwZVxuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvaWNtcF9zZW5kX2tmdW5jLmNcbkBAIC0wLDAgJiM0MzsxLDI2OSBAQFxuJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuJiM0MzsjaW5jbHVkZSBcdTAwM2N0ZXN0X3Byb2dzLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbmV0d29ya19oZWxwZXJzLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjY2dyb3VwX2hlbHBlcnMuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9lcnJxdWV1ZS5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY3BvbGwuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2N1bmlzdGQuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcJiMzNDtpY21wX3NlbmQuc2tlbC5oXCYjMzQ7XG4mIzQzO1xuJiM0MzsjZGVmaW5lIFRJTUVPVVRfTVMgMTAwMFxuJiM0MztcbiYjNDM7I2RlZmluZSBJQ01QX0RFU1RfVU5SRUFDSCAzXG4mIzQzOyNkZWZpbmUgSUNNUFY2X0RFU1RfVU5SRUFDSCAxXG4mIzQzO1xuJiM0MzsjZGVmaW5lIElDTVBfSE9TVF9VTlJFQUNIIDFcbiYjNDM7I2RlZmluZSBJQ01QX0ZSQUdfTkVFREVEIDRcbiYjNDM7I2RlZmluZSBOUl9JQ01QX1VOUkVBQ0ggMTVcbiYjNDM7I2RlZmluZSBJQ01QVjZfUkVKRUNUX1JPVVRFIDZcbiYjNDM7XG4mIzQzOyNkZWZpbmUgS0ZVTkNfUkVUX1VOU0VUIC0xXG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IGNvbm5lY3RfdG9fZmRfbm9uYmxvY2soaW50IHNlcnZlcl9mZClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBzb2NrYWRkcl9zdG9yYWdlIGFkZHI7XG4mIzQzO1x0c29ja2xlbl90IGxlbiA9IHNpemVvZihhZGRyKTtcbiYjNDM7XHRpbnQgZmQsIGVyciwgb24gPSAxO1xuJiM0MztcbiYjNDM7XHRpZiAoZ2V0c29ja25hbWUoc2VydmVyX2ZkLCAoc3RydWN0IHNvY2thZGRyICopXHUwMDI2YWRkciwgXHUwMDI2bGVuKSlcbiYjNDM7XHRcdHJldHVybiAtMTtcbiYjNDM7XG4mIzQzO1x0ZmQgPSBzb2NrZXQoYWRkci5zc19mYW1pbHksIFNPQ0tfU1RSRUFNIHwgU09DS19OT05CTE9DSywgMCk7XG4mIzQzO1x0aWYgKGZkIFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIC0xO1xuJiM0MztcbiYjNDM7XHRpZiAoYWRkci5zc19mYW1pbHkgPT0gQUZfSU5FVDYgXHUwMDI2XHUwMDI2XG4mIzQzO1x0ICAgIHNldHNvY2tvcHQoZmQsIElQUFJPVE9fSVBWNiwgSVBWNl9SRUNWRVJSLCBcdTAwMjZvbiwgc2l6ZW9mKG9uKSkgXHUwMDNjIDApIHtcbiYjNDM7XHRcdGNsb3NlKGZkKTtcbiYjNDM7XHRcdHJldHVybiAtMTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGVyciA9IGNvbm5lY3QoZmQsIChzdHJ1Y3Qgc29ja2FkZHIgKilcdTAwMjZhZGRyLCBsZW4pO1xuJiM0MztcdGlmIChlcnIgXHUwMDNjIDAgXHUwMDI2XHUwMDI2IGVycm5vICE9IEVJTlBST0dSRVNTKSB7XG4mIzQzO1x0XHRjbG9zZShmZCk7XG4mIzQzO1x0XHRyZXR1cm4gLTE7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gZmQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIHJlYWRfaWNtcF9lcnJxdWV1ZShpbnQgc29ja2ZkLCBpbnQgZXhwZWN0ZWRfY29kZSwgaW50IGFmKVxuJiM0Mzt7XG4mIzQzO1x0aW50IGV4cGVjdGVkX2VlX3R5cGUgPSAoYWYgPT0gQUZfSU5FVCkgPyBJQ01QX0RFU1RfVU5SRUFDSCA6XG4mIzQzO1x0XHRcdFx0XHRcdCBJQ01QVjZfREVTVF9VTlJFQUNIO1xuJiM0MztcdGludCBleHBlY3RlZF9vcmlnaW4gPSAoYWYgPT0gQUZfSU5FVCkgPyBTT19FRV9PUklHSU5fSUNNUCA6XG4mIzQzO1x0XHRcdFx0XHRcdFNPX0VFX09SSUdJTl9JQ01QNjtcbiYjNDM7XHRpbnQgZXhwZWN0ZWRfbGV2ZWwgPSAoYWYgPT0gQUZfSU5FVCkgPyBJUFBST1RPX0lQIDogSVBQUk9UT19JUFY2O1xuJiM0MztcdGludCBleHBlY3RlZF90eXBlID0gKGFmID09IEFGX0lORVQpID8gSVBfUkVDVkVSUiA6IElQVjZfUkVDVkVSUjtcbiYjNDM7XHRzdHJ1Y3Qgc29ja19leHRlbmRlZF9lcnIgKnNvY2tfZXJyO1xuJiM0MztcdGNoYXIgY3RybF9idWZbNTEyXTtcbiYjNDM7XHRzdHJ1Y3QgbXNnaGRyIG1zZyA9IHtcbiYjNDM7XHRcdC5tc2dfY29udHJvbCA9IGN0cmxfYnVmLFxuJiM0MztcdFx0Lm1zZ19jb250cm9sbGVuID0gc2l6ZW9mKGN0cmxfYnVmKSxcbiYjNDM7XHR9O1xuJiM0MztcdHN0cnVjdCBwb2xsZmQgcGZkID0ge1xuJiM0MztcdFx0LmZkID0gc29ja2ZkLFxuJiM0MztcdFx0LmV2ZW50cyA9IFBPTExFUlIsXG4mIzQzO1x0fTtcbiYjNDM7XHRzdHJ1Y3QgY21zZ2hkciAqY207XG4mIzQzO1x0c3NpemVfdCBuO1xuJiM0MztcbiYjNDM7XHRpZiAoIUFTU0VSVF9HRShwb2xsKFx1MDAyNnBmZCwgMSwgVElNRU9VVF9NUyksIDEsIFwmIzM0O3BvbGxfZXJycXVldWVcJiMzNDspKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHRuID0gcmVjdm1zZyhzb2NrZmQsIFx1MDAyNm1zZywgTVNHX0VSUlFVRVVFKTtcbiYjNDM7XHRpZiAoIUFTU0VSVF9HRShuLCAwLCBcJiMzNDtyZWN2bXNnX2VycnF1ZXVlXCYjMzQ7KSlcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0Y20gPSBDTVNHX0ZJUlNUSERSKFx1MDAyNm1zZyk7XG4mIzQzO1x0aWYgKCFBU1NFUlRfTkVRKGNtLCBOVUxMLCBcJiMzNDtjbV9maXJzdGhkcl9udWxsXCYjMzQ7KSlcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0Zm9yICg7IGNtOyBjbSA9IENNU0dfTlhUSERSKFx1MDAyNm1zZywgY20pKSB7XG4mIzQzO1x0XHRpZiAoY20tXHUwMDNlY21zZ19sZXZlbCAhPSBleHBlY3RlZF9sZXZlbCB8fFxuJiM0MztcdFx0ICAgIGNtLVx1MDAzZWNtc2dfdHlwZSAhPSBleHBlY3RlZF90eXBlKVxuJiM0MztcdFx0XHRjb250aW51ZTtcbiYjNDM7XG4mIzQzO1x0XHRzb2NrX2VyciA9IChzdHJ1Y3Qgc29ja19leHRlbmRlZF9lcnIgKilDTVNHX0RBVEEoY20pO1xuJiM0MztcbiYjNDM7XHRcdGlmICghQVNTRVJUX0VRKHNvY2tfZXJyLVx1MDAzZWVlX29yaWdpbiwgZXhwZWN0ZWRfb3JpZ2luLFxuJiM0MztcdFx0XHQgICAgICAgXCYjMzQ7c29ja19lcnJfb3JpZ2luXCYjMzQ7KSlcbiYjNDM7XHRcdFx0cmV0dXJuO1xuJiM0MztcdFx0aWYgKCFBU1NFUlRfRVEoc29ja19lcnItXHUwMDNlZWVfdHlwZSwgZXhwZWN0ZWRfZWVfdHlwZSxcbiYjNDM7XHRcdFx0ICAgICAgIFwmIzM0O3NvY2tfZXJyX3R5cGVfZGVzdF91bnJlYWNoXCYjMzQ7KSlcbiYjNDM7XHRcdFx0cmV0dXJuO1xuJiM0MztcdFx0QVNTRVJUX0VRKHNvY2tfZXJyLVx1MDAzZWVlX2NvZGUsIGV4cGVjdGVkX2NvZGUsIFwmIzM0O3NvY2tfZXJyX2NvZGVcJiMzNDspO1xuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0QVNTRVJUX0ZBSUwoXCYjMzQ7bm8gSVBfUkVDVkVSUi9JUFY2X1JFQ1ZFUlIgY29udHJvbCBtZXNzYWdlIGZvdW5kXCYjMzQ7KTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGJvb2wgdmFsaWRfdW5yZWFjaF9jb2RlKGludCBjb2RlLCBpbnQgYWYpXG4mIzQzO3tcbiYjNDM7XHRpZiAoY29kZSBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XG4mIzQzO1x0aWYgKGFmID09IEFGX0lORVQpXG4mIzQzO1x0XHRyZXR1cm4gY29kZSBcdTAwM2M9IE5SX0lDTVBfVU5SRUFDSCBcdTAwMjZcdTAwMjYgY29kZSAhPSBJQ01QX0ZSQUdfTkVFREVEO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gY29kZSBcdTAwM2M9IElDTVBWNl9SRUpFQ1RfUk9VVEU7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIHRyaWdnZXJfcHJvZ19yZWFkX2ljbXBfZXJycXVldWUoc3RydWN0IGljbXBfc2VuZCAqc2tlbCwgaW50IGNvZGUsXG4mIzQzO1x0XHRcdFx0XHQgICAgaW50IGFmLCBjb25zdCBjaGFyICppcClcbiYjNDM7e1xuJiM0MztcdGludCBzcnZfZmQgPSAtMSwgY2xpZW50X2ZkID0gLTE7XG4mIzQzO1x0aW50IHBvcnQ7XG4mIzQzO1xuJiM0MztcdHNydl9mZCA9IHN0YXJ0X3NlcnZlcihhZiwgU09DS19TVFJFQU0sIGlwLCAwLCBUSU1FT1VUX01TKTtcbiYjNDM7XHRpZiAoIUFTU0VSVF9PS19GRChzcnZfZmQsIFwmIzM0O3N0YXJ0X3NlcnZlclwmIzM0OykpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdHBvcnQgPSBnZXRfc29ja2V0X2xvY2FsX3BvcnQoc3J2X2ZkKTtcbiYjNDM7XHRpZiAoIUFTU0VSVF9HRShwb3J0LCAwLCBcJiMzNDtnZXRfc29ja2V0X2xvY2FsX3BvcnRcJiMzNDspKSB7XG4mIzQzO1x0XHRjbG9zZShzcnZfZmQpO1xuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0c2tlbC1cdTAwM2Vic3MtXHUwMDNlc2VydmVyX3BvcnQgPSBudG9ocyhwb3J0KTtcbiYjNDM7XHRza2VsLVx1MDAzZWJzcy1cdTAwM2V1bnJlYWNoX3R5cGUgPSAoYWYgPT0gQUZfSU5FVCkgPyBJQ01QX0RFU1RfVU5SRUFDSCA6XG4mIzQzO1x0XHRcdFx0XHRcdCAgICBJQ01QVjZfREVTVF9VTlJFQUNIO1xuJiM0MztcdHNrZWwtXHUwMDNlYnNzLVx1MDAzZXVucmVhY2hfY29kZSA9IGNvZGU7XG4mIzQzO1x0c2tlbC1cdTAwM2VkYXRhLVx1MDAzZWtmdW5jX3JldCA9IEtGVU5DX1JFVF9VTlNFVDtcbiYjNDM7XG4mIzQzO1x0Y2xpZW50X2ZkID0gY29ubmVjdF90b19mZF9ub25ibG9jayhzcnZfZmQpO1xuJiM0MztcdGlmICghQVNTRVJUX09LX0ZEKGNsaWVudF9mZCwgXCYjMzQ7Y2xpZW50X2Nvbm5lY3Rfbm9uYmxvY2tcJiMzNDspKSB7XG4mIzQzO1x0XHRjbG9zZShzcnZfZmQpO1xuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKHZhbGlkX3VucmVhY2hfY29kZShjb2RlLCBhZikpXG4mIzQzO1x0XHRyZWFkX2ljbXBfZXJycXVldWUoY2xpZW50X2ZkLCBjb2RlLCBhZik7XG4mIzQzO1xuJiM0MztcdGNsb3NlKGNsaWVudF9mZCk7XG4mIzQzO1x0Y2xvc2Uoc3J2X2ZkKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgcnVuX2ljbXBfdGVzdChzdHJ1Y3QgaWNtcF9zZW5kICpza2VsLCBpbnQgYWYsIGNvbnN0IGNoYXIgKmlwLFxuJiM0MztcdFx0XHQgIGludCBtYXhfY29kZSlcbiYjNDM7e1xuJiM0MztcdGZvciAoaW50IGNvZGUgPSAwOyBjb2RlIFx1MDAzYz0gbWF4X2NvZGU7IGNvZGUmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRpZiAoYWYgPT0gQUZfSU5FVCBcdTAwMjZcdTAwMjYgY29kZSA9PSBJQ01QX0ZSQUdfTkVFREVEKVxuJiM0MztcdFx0XHRjb250aW51ZTtcbiYjNDM7XG4mIzQzO1x0XHR0cmlnZ2VyX3Byb2dfcmVhZF9pY21wX2VycnF1ZXVlKHNrZWwsIGNvZGUsIGFmLCBpcCk7XG4mIzQzO1x0XHRBU1NFUlRfRVEoc2tlbC1cdTAwM2VkYXRhLVx1MDAzZWtmdW5jX3JldCwgMCwgXCYjMzQ7a2Z1bmNfcmV0XCYjMzQ7KTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdC8qIFRlc3QgaW52YWxpZCBjb2RlcyAqL1xuJiM0MztcdHRyaWdnZXJfcHJvZ19yZWFkX2ljbXBfZXJycXVldWUoc2tlbCwgLTEsIGFmLCBpcCk7XG4mIzQzO1x0QVNTRVJUX0VRKHNrZWwtXHUwMDNlZGF0YS1cdTAwM2VrZnVuY19yZXQsIC1FSU5WQUwsIFwmIzM0O2tmdW5jX3JldFwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdHRyaWdnZXJfcHJvZ19yZWFkX2ljbXBfZXJycXVldWUoc2tlbCwgbWF4X2NvZGUgJiM0MzsgMSwgYWYsIGlwKTtcbiYjNDM7XHRBU1NFUlRfRVEoc2tlbC1cdTAwM2VkYXRhLVx1MDAzZWtmdW5jX3JldCwgLUVJTlZBTCwgXCYjMzQ7a2Z1bmNfcmV0XCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0aWYgKGFmID09IEFGX0lORVQpIHtcbiYjNDM7XHRcdHRyaWdnZXJfcHJvZ19yZWFkX2ljbXBfZXJycXVldWUoc2tlbCwgSUNNUF9GUkFHX05FRURFRCwgYWYsIGlwKTtcbiYjNDM7XHRcdEFTU0VSVF9FUShza2VsLVx1MDAzZWRhdGEtXHUwMDNla2Z1bmNfcmV0LCAtRUlOVkFMLCBcJiMzNDtrZnVuY19yZXRcJiMzNDspO1xuJiM0MztcdH1cbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgcnVuX2ljbXBfbm9fcm91dGVfdGVzdChzdHJ1Y3QgaWNtcF9zZW5kICpza2VsKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGlwdjRfcGFja2V0IHBrdCA9IHBrdF92NDtcbiYjNDM7XHRMSUJCUEZfT1BUUyhicGZfdGVzdF9ydW5fb3B0cywgb3B0cyxcbiYjNDM7XHRcdC5kYXRhX2luID0gXHUwMDI2cGt0LFxuJiM0MztcdFx0LmRhdGFfc2l6ZV9pbiA9IHNpemVvZihwa3QpLFxuJiM0MztcdCk7XG4mIzQzO1x0aW50IGVycjtcbiYjNDM7XG4mIzQzO1x0cGt0LmlwaC52ZXJzaW9uID0gNDtcbiYjNDM7XHRwa3QuaXBoLmRhZGRyID0gaW5ldF9hZGRyKFwmIzM0OzEyNy4wLjAuMVwmIzM0Oyk7XG4mIzQzO1x0cGt0LnRjcC5kZXN0ID0gaHRvbnMoODApO1xuJiM0MztcdHNrZWwtXHUwMDNlYnNzLVx1MDAzZXNlcnZlcl9wb3J0ID0gODA7XG4mIzQzO1x0c2tlbC1cdTAwM2Vic3MtXHUwMDNldW5yZWFjaF90eXBlID0gSUNNUF9ERVNUX1VOUkVBQ0g7XG4mIzQzO1x0c2tlbC1cdTAwM2Vic3MtXHUwMDNldW5yZWFjaF9jb2RlID0gSUNNUF9IT1NUX1VOUkVBQ0g7XG4mIzQzO1x0c2tlbC1cdTAwM2VkYXRhLVx1MDAzZWtmdW5jX3JldCA9IEtGVU5DX1JFVF9VTlNFVDtcbiYjNDM7XG4mIzQzO1x0ZXJyID0gYnBmX3Byb2dfdGVzdF9ydW5fb3B0cyhicGZfcHJvZ3JhbV9fZmQoc2tlbC1cdTAwM2Vwcm9ncy5lZ3Jlc3MpLCBcdTAwMjZvcHRzKTtcbiYjNDM7XHRpZiAoIUFTU0VSVF9PSyhlcnIsIFwmIzM0O3Rlc3RfcnVuXCYjMzQ7KSlcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XHRBU1NFUlRfRVEoc2tlbC1cdTAwM2VkYXRhLVx1MDAzZWtmdW5jX3JldCwgLUVORVRVTlJFQUNILCBcJiMzNDtrZnVuY19yZXRfbm9fcm91dGVcJiMzNDspO1xuJiM0Mzt9XG4mIzQzO1xuJiM0Mzt2b2lkIHRlc3RfaWNtcF9zZW5kX3VucmVhY2hfY2dyb3VwKHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgaWNtcF9zZW5kICpza2VsO1xuJiM0MztcdGludCBjZ3JvdXBfZmQgPSAtMTtcbiYjNDM7XG4mIzQzO1x0c2tlbCA9IGljbXBfc2VuZF9fb3Blbl9hbmRfbG9hZCgpO1xuJiM0MztcdGlmICghQVNTRVJUX09LX1BUUihza2VsLCBcJiMzNDtza2VsX29wZW5cJiMzNDspKVxuJiM0MztcdFx0Z290byBjbGVhbnVwO1xuJiM0MztcbiYjNDM7XHRjZ3JvdXBfZmQgPSB0ZXN0X19qb2luX2Nncm91cChcJiMzNDsvaWNtcF9zZW5kX3VucmVhY2hfY2dyb3VwXCYjMzQ7KTtcbiYjNDM7XHRpZiAoIUFTU0VSVF9PS19GRChjZ3JvdXBfZmQsIFwmIzM0O2pvaW5fY2dyb3VwXCYjMzQ7KSlcbiYjNDM7XHRcdGdvdG8gY2xlYW51cDtcbiYjNDM7XG4mIzQzO1x0c2tlbC1cdTAwM2VsaW5rcy5lZ3Jlc3MgPVxuJiM0MztcdFx0YnBmX3Byb2dyYW1fX2F0dGFjaF9jZ3JvdXAoc2tlbC1cdTAwM2Vwcm9ncy5lZ3Jlc3MsIGNncm91cF9mZCk7XG4mIzQzO1x0aWYgKCFBU1NFUlRfT0tfUFRSKHNrZWwtXHUwMDNlbGlua3MuZWdyZXNzLCBcJiMzNDtwcm9nX2F0dGFjaF9jZ3JvdXBcJiMzNDspKVxuJiM0MztcdFx0Z290byBjbGVhbnVwO1xuJiM0MztcbiYjNDM7XHRpZiAodGVzdF9fc3RhcnRfc3VidGVzdChcJiMzNDtpcHY0XCYjMzQ7KSlcbiYjNDM7XHRcdHJ1bl9pY21wX3Rlc3Qoc2tlbCwgQUZfSU5FVCwgXCYjMzQ7MTI3LjAuMC4xXCYjMzQ7LCBOUl9JQ01QX1VOUkVBQ0gpO1xuJiM0MztcbiYjNDM7XHRpZiAodGVzdF9fc3RhcnRfc3VidGVzdChcJiMzNDtpcHY2XCYjMzQ7KSlcbiYjNDM7XHRcdHJ1bl9pY21wX3Rlc3Qoc2tlbCwgQUZfSU5FVDYsIFwmIzM0Ozo6MVwmIzM0OywgSUNNUFY2X1JFSkVDVF9ST1VURSk7XG4mIzQzO1xuJiM0MztcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFwmIzM0O25vX3JvdXRlXCYjMzQ7KSlcbiYjNDM7XHRcdHJ1bl9pY21wX25vX3JvdXRlX3Rlc3Qoc2tlbCk7XG4mIzQzO1xuJiM0MztjbGVhbnVwOlxuJiM0MztcdGljbXBfc2VuZF9fZGVzdHJveShza2VsKTtcbiYjNDM7XHRpZiAoY2dyb3VwX2ZkIFx1MDAzZT0gMClcbiYjNDM7XHRcdGNsb3NlKGNncm91cF9mZCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3ZvaWQgdGVzdF9pY21wX3NlbmRfdW5yZWFjaF9yZWN1cnNpb24odm9pZClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBpY21wX3NlbmQgKnNrZWw7XG4mIzQzO1x0aW50IGNncm91cF9mZCA9IC0xO1xuJiM0MztcdGludCBlcnI7XG4mIzQzO1xuJiM0MztcdGVyciA9IHNldHVwX2Nncm91cF9lbnZpcm9ubWVudCgpO1xuJiM0MztcdGlmICghQVNTRVJUX09LKGVyciwgXCYjMzQ7c2V0dXBfY2dyb3VwX2Vudmlyb25tZW50XCYjMzQ7KSlcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0c2tlbCA9IGljbXBfc2VuZF9fb3Blbl9hbmRfbG9hZCgpO1xuJiM0MztcdGlmICghQVNTRVJUX09LX1BUUihza2VsLCBcJiMzNDtza2VsX29wZW5cJiMzNDspKVxuJiM0MztcdFx0Z290byBjbGVhbnVwO1xuJiM0MztcbiYjNDM7XHRjZ3JvdXBfZmQgPSBnZXRfcm9vdF9jZ3JvdXAoKTtcbiYjNDM7XHRpZiAoIUFTU0VSVF9PS19GRChjZ3JvdXBfZmQsIFwmIzM0O2dldF9yb290X2Nncm91cFwmIzM0OykpXG4mIzQzO1x0XHRnb3RvIGNsZWFudXA7XG4mIzQzO1xuJiM0MztcdHNrZWwtXHUwMDNlZGF0YS1cdTAwM2V0YXJnZXRfcGlkID0gZ2V0cGlkKCk7XG4mIzQzO1x0c2tlbC1cdTAwM2VsaW5rcy5yZWN1cnNpb24gPVxuJiM0MztcdFx0YnBmX3Byb2dyYW1fX2F0dGFjaF9jZ3JvdXAoc2tlbC1cdTAwM2Vwcm9ncy5yZWN1cnNpb24sIGNncm91cF9mZCk7XG4mIzQzO1x0aWYgKCFBU1NFUlRfT0tfUFRSKHNrZWwtXHUwMDNlbGlua3MucmVjdXJzaW9uLCBcJiMzNDtwcm9nX2F0dGFjaF9jZ3JvdXBcJiMzNDspKVxuJiM0MztcdFx0Z290byBjbGVhbnVwO1xuJiM0MztcbiYjNDM7XHR0cmlnZ2VyX3Byb2dfcmVhZF9pY21wX2VycnF1ZXVlKHNrZWwsIElDTVBfSE9TVF9VTlJFQUNILCBBRl9JTkVULFxuJiM0MztcdFx0XHRcdFx0XCYjMzQ7MTI3LjAuMC4xXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBCZWNhdXNlIHRoZXJlJiMzOTtzIHJlY3Vyc2lvbiBpbnZvbHZlZCwgdGhlIGZpcnN0IGNhbGwgd2lsbCByZXR1cm4gYXRcbiYjNDM7XHQgKiBpbmRleCAxIHNpbmNlIGl0IHdpbGwgcmV0dXJuIHRoZSBzZWNvbmQsIGFuZCB0aGUgc2Vjb25kIGNhbGwgd2lsbFxuJiM0MztcdCAqIHJldHVybiBhdCBpbmRleCAwIHNpbmNlIGl0IHdpbGwgcmV0dXJuIHRoZSBmaXJzdC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRBU1NFUlRfRVEoc2tlbC1cdTAwM2Vic3MtXHUwMDNlcmVjX2NvdW50LCAyLCBcJiMzNDtyZWNfY291bnRcJiMzNDspO1xuJiM0MztcdEFTU0VSVF9FUShza2VsLVx1MDAzZWRhdGEtXHUwMDNlcmVjX2tmdW5jX3JldHNbMF0sIC1FQlVTWSwgXCYjMzQ7a2Z1bmNfcmV0c1swXVwmIzM0Oyk7XG4mIzQzO1x0QVNTRVJUX0VRKHNrZWwtXHUwMDNlZGF0YS1cdTAwM2VyZWNfa2Z1bmNfcmV0c1sxXSwgMCwgXCYjMzQ7a2Z1bmNfcmV0c1sxXVwmIzM0Oyk7XG4mIzQzO1xuJiM0MztjbGVhbnVwOlxuJiM0MztcdGljbXBfc2VuZF9fZGVzdHJveShza2VsKTtcbiYjNDM7XHRpZiAoY2dyb3VwX2ZkIFx1MDAzZT0gMClcbiYjNDM7XHRcdGNsb3NlKGNncm91cF9mZCk7XG4mIzQzO1x0Y2xlYW51cF9jZ3JvdXBfZW52aXJvbm1lbnQoKTtcbiYjNDM7fVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9pY21wX3NlbmQuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9pY21wX3NlbmQuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi5jNjQyY2NkZjlmZDU0NFxuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2ljbXBfc2VuZC5jXG5AQCAtMCwwICYjNDM7MSwxMjMgQEBcbiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7dm1saW51eC5oXCYjMzQ7XG4mIzQzOyNpbmNsdWRlIFx1MDAzY2JwZi9icGZfaGVscGVycy5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2JwZi9icGZfZW5kaWFuLmhcdTAwM2VcbiYjNDM7XG4mIzQzOy8qIDEyNy4wLjAuMSBpbiBob3N0IGJ5dGUgb3JkZXIgKi9cbiYjNDM7I2RlZmluZSBTRVJWRVJfSVAgMHg3RjAwMDAwMVxuJiM0MzsvKiA6OjEgaW4gaG9zdCBieXRlIG9yZGVyIChsYXN0IDMyLWJpdCB3b3JkKSAqL1xuJiM0MzsjZGVmaW5lIFNFUlZFUl9JUDZfTE8gMHgwMDAwMDAwMVxuJiM0MztcbiYjNDM7X191MTYgc2VydmVyX3BvcnQgPSAwO1xuJiM0MztpbnQgdW5yZWFjaF90eXBlID0gMDtcbiYjNDM7aW50IHVucmVhY2hfY29kZSA9IDA7XG4mIzQzO2ludCBrZnVuY19yZXQgPSAtMTtcbiYjNDM7aW50IHRhcmdldF9waWQgPSAtMTtcbiYjNDM7XG4mIzQzO3Vuc2lnbmVkIGludCByZWNfY291bnQgPSAwO1xuJiM0MztpbnQgcmVjX2tmdW5jX3JldHNbXSA9IHsgLTEsIC0xIH07XG4mIzQzO1xuJiM0MztTRUMoXCYjMzQ7Y2dyb3VwX3NrYi9lZ3Jlc3NcJiMzNDspXG4mIzQzO2ludCBlZ3Jlc3Moc3RydWN0IF9fc2tfYnVmZiAqc2tiKVxuJiM0Mzt7XG4mIzQzO1x0dm9pZCAqZGF0YSA9ICh2b2lkICopKGxvbmcpc2tiLVx1MDAzZWRhdGE7XG4mIzQzO1x0dm9pZCAqZGF0YV9lbmQgPSAodm9pZCAqKShsb25nKXNrYi1cdTAwM2VkYXRhX2VuZDtcbiYjNDM7XHRzdHJ1Y3QgaXBoZHIgKmlwaDtcbiYjNDM7XHRzdHJ1Y3QgaXB2NmhkciAqaXA2aDtcbiYjNDM7XHRzdHJ1Y3QgdGNwaGRyICp0Y3BoO1xuJiM0MztcdF9fdTggdmVyc2lvbjtcbiYjNDM7XG4mIzQzO1x0aWYgKGRhdGEgJiM0MzsgMSBcdTAwM2UgZGF0YV9lbmQpXG4mIzQzO1x0XHRyZXR1cm4gU0tfUEFTUztcbiYjNDM7XG4mIzQzO1x0dmVyc2lvbiA9ICgqKChfX3U4ICopZGF0YSkpIFx1MDAzZVx1MDAzZSA0O1xuJiM0MztcbiYjNDM7XHRpZiAodmVyc2lvbiA9PSA0KSB7XG4mIzQzO1x0XHRpcGggPSBkYXRhO1xuJiM0MztcdFx0aWYgKCh2b2lkICopKGlwaCAmIzQzOyAxKSBcdTAwM2UgZGF0YV9lbmQgfHxcbiYjNDM7XHRcdCAgICBpcGgtXHUwMDNlcHJvdG9jb2wgIT0gSVBQUk9UT19UQ1AgfHxcbiYjNDM7XHRcdCAgICBpcGgtXHUwMDNlZGFkZHIgIT0gYnBmX2h0b25sKFNFUlZFUl9JUCkpXG4mIzQzO1x0XHRcdHJldHVybiBTS19QQVNTO1xuJiM0MztcbiYjNDM7XHRcdHRjcGggPSAodm9pZCAqKWlwaCAmIzQzOyBpcGgtXHUwMDNlaWhsICogNDtcbiYjNDM7XHRcdGlmICgodm9pZCAqKSh0Y3BoICYjNDM7IDEpIFx1MDAzZSBkYXRhX2VuZCB8fFxuJiM0MztcdFx0ICAgIHRjcGgtXHUwMDNlZGVzdCAhPSBicGZfaHRvbnMoc2VydmVyX3BvcnQpKVxuJiM0MztcdFx0XHRyZXR1cm4gU0tfUEFTUztcbiYjNDM7XG4mIzQzO1x0fSBlbHNlIGlmICh2ZXJzaW9uID09IDYpIHtcbiYjNDM7XHRcdGlwNmggPSBkYXRhO1xuJiM0MztcdFx0aWYgKCh2b2lkICopKGlwNmggJiM0MzsgMSkgXHUwMDNlIGRhdGFfZW5kIHx8XG4mIzQzO1x0XHQgICAgaXA2aC1cdTAwM2VuZXh0aGRyICE9IElQUFJPVE9fVENQKVxuJiM0MztcdFx0XHRyZXR1cm4gU0tfUEFTUztcbiYjNDM7XG4mIzQzO1x0XHRpZiAoaXA2aC1cdTAwM2VkYWRkci5pbjZfdS51Nl9hZGRyMzJbMF0gIT0gMCB8fFxuJiM0MztcdFx0ICAgIGlwNmgtXHUwMDNlZGFkZHIuaW42X3UudTZfYWRkcjMyWzFdICE9IDAgfHxcbiYjNDM7XHRcdCAgICBpcDZoLVx1MDAzZWRhZGRyLmluNl91LnU2X2FkZHIzMlsyXSAhPSAwIHx8XG4mIzQzO1x0XHQgICAgaXA2aC1cdTAwM2VkYWRkci5pbjZfdS51Nl9hZGRyMzJbM10gIT0gYnBmX2h0b25sKFNFUlZFUl9JUDZfTE8pKVxuJiM0MztcdFx0XHRyZXR1cm4gU0tfUEFTUztcbiYjNDM7XG4mIzQzO1x0XHR0Y3BoID0gKHZvaWQgKikoaXA2aCAmIzQzOyAxKTtcbiYjNDM7XHRcdGlmICgodm9pZCAqKSh0Y3BoICYjNDM7IDEpIFx1MDAzZSBkYXRhX2VuZCB8fFxuJiM0MztcdFx0ICAgIHRjcGgtXHUwMDNlZGVzdCAhPSBicGZfaHRvbnMoc2VydmVyX3BvcnQpKVxuJiM0MztcdFx0XHRyZXR1cm4gU0tfUEFTUztcbiYjNDM7XHR9IGVsc2Uge1xuJiM0MztcdFx0cmV0dXJuIFNLX1BBU1M7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRrZnVuY19yZXQgPSBicGZfaWNtcF9zZW5kKHNrYiwgdW5yZWFjaF90eXBlLCB1bnJlYWNoX2NvZGUpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gU0tfRFJPUDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7U0VDKFwmIzM0O2Nncm91cF9za2IvZWdyZXNzXCYjMzQ7KVxuJiM0MztpbnQgcmVjdXJzaW9uKHN0cnVjdCBfX3NrX2J1ZmYgKnNrYilcbiYjNDM7e1xuJiM0MztcdHZvaWQgKmRhdGEgPSAodm9pZCAqKShsb25nKXNrYi1cdTAwM2VkYXRhO1xuJiM0MztcdHZvaWQgKmRhdGFfZW5kID0gKHZvaWQgKikobG9uZylza2ItXHUwMDNlZGF0YV9lbmQ7XG4mIzQzO1x0c3RydWN0IGljbXBoZHIgKmljbXBoO1xuJiM0MztcdHN0cnVjdCB0Y3BoZHIgKnRjcGg7XG4mIzQzO1x0c3RydWN0IGlwaGRyICppcGg7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0aWYgKChicGZfZ2V0X2N1cnJlbnRfcGlkX3RnaWQoKSBcdTAwM2VcdTAwM2UgMzIpICE9IHRhcmdldF9waWQpXG4mIzQzO1x0XHRyZXR1cm4gU0tfUEFTUztcbiYjNDM7XG4mIzQzO1x0aXBoID0gZGF0YTtcbiYjNDM7XHRpZiAoKHZvaWQgKikoaXBoICYjNDM7IDEpIFx1MDAzZSBkYXRhX2VuZCB8fCBpcGgtXHUwMDNldmVyc2lvbiAhPSA0KVxuJiM0MztcdFx0cmV0dXJuIFNLX1BBU1M7XG4mIzQzO1xuJiM0MztcdGlmIChpcGgtXHUwMDNlZGFkZHIgIT0gYnBmX2h0b25sKFNFUlZFUl9JUCkpXG4mIzQzO1x0XHRyZXR1cm4gU0tfUEFTUztcbiYjNDM7XG4mIzQzO1x0aWYgKGlwaC1cdTAwM2Vwcm90b2NvbCA9PSBJUFBST1RPX1RDUCkge1xuJiM0MztcdFx0dGNwaCA9ICh2b2lkICopaXBoICYjNDM7IGlwaC1cdTAwM2VpaGwgKiA0O1xuJiM0MztcdFx0aWYgKCh2b2lkICopKHRjcGggJiM0MzsgMSkgXHUwMDNlIGRhdGFfZW5kIHx8XG4mIzQzO1x0XHQgICAgdGNwaC1cdTAwM2VkZXN0ICE9IGJwZl9odG9ucyhzZXJ2ZXJfcG9ydCkpXG4mIzQzO1x0XHRcdHJldHVybiBTS19QQVNTO1xuJiM0MztcdH0gZWxzZSBpZiAoaXBoLVx1MDAzZXByb3RvY29sID09IElQUFJPVE9fSUNNUCkge1xuJiM0MztcdFx0aWNtcGggPSAodm9pZCAqKWlwaCAmIzQzOyBpcGgtXHUwMDNlaWhsICogNDtcbiYjNDM7XHRcdGlmICgodm9pZCAqKShpY21waCAmIzQzOyAxKSBcdTAwM2UgZGF0YV9lbmQgfHxcbiYjNDM7XHRcdCAgICBpY21waC1cdTAwM2V0eXBlICE9IHVucmVhY2hfdHlwZSB8fCBpY21waC1cdTAwM2Vjb2RlICE9IHVucmVhY2hfY29kZSlcbiYjNDM7XHRcdFx0cmV0dXJuIFNLX1BBU1M7XG4mIzQzO1x0fSBlbHNlIHtcbiYjNDM7XHRcdHJldHVybiBTS19QQVNTO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBUaGlzIGNhbGwgd2lsbCBwcm92b2tlIGEgcmVjdXJzaW9uOiB0aGUgSUNNUCBwYWNrZXQgZ2VuZXJhdGVkIGJ5IHRoZVxuJiM0MztcdCAqIGtmdW5jIHdpbGwgcmUtdHJpZ2dlciB0aGlzIHByb2dyYW0gc2luY2Ugd2UgYXJlIGluIHRoZSByb290IGNncm91cCBpblxuJiM0MztcdCAqIHdoaWNoIHRoZSBrZXJuZWwgSUNNUCBzb2NrZXQgYmVsb25ncy4gSG93ZXZlciB3aGVuIHJlLWVudGVyaW5nIHRoZVxuJiM0MztcdCAqIGtmdW5jLCBpdCBzaG91bGQgcmV0dXJuIEVCVVNZLlxuJiM0MztcdCAqL1xuJiM0MztcdHJldCA9IGJwZl9pY21wX3NlbmQoc2tiLCB1bnJlYWNoX3R5cGUsIHVucmVhY2hfY29kZSk7XG4mIzQzO1x0cmVjX2tmdW5jX3JldHNbcmVjX2NvdW50IFx1MDAyNiAxXSA9IHJldDtcbiYjNDM7XHRfX3N5bmNfZmV0Y2hfYW5kX2FkZChcdTAwMjZyZWNfY291bnQsIDEpO1xuJiM0MztcbiYjNDM7XHQvKiBMZXQgdGhlIGZpcnN0IElDTVAgZXJyb3IgbWVzc2FnZSBwYXNzICovXG4mIzQzO1x0aWYgKGlwaC1cdTAwM2Vwcm90b2NvbCA9PSBJUFBST1RPX0lDTVApXG4mIzQzO1x0XHRyZXR1cm4gU0tfUEFTUztcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIFNLX0RST1A7XG4mIzQzO31cbiYjNDM7XG4mIzQzO2NoYXIgTElDRU5TRVtdIFNFQyhcJiMzNDtsaWNlbnNlXCYjMzQ7KSA9IFwmIzM0O0R1YWwgQlNEL0dQTFwmIzM0OztcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNCAxOToxNDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtDR1JPVVBfQlBGJiMzNDssCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDssCiAgICAmIzM0O0lORVQmIzM0OywKICAgICYjMzQ7SVBWNiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2JwZl9pY21wX3NlbmQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBCUEYga2Z1bmMgYGJwZl9pY21wX3NlbmRgIHdoaWNoIGFsbG93cyBCUEYgcHJvZ3JhbXMgYXR0YWNoZWQgdG8gY2dyb3VwIHNrYiBob29rcyB0byBzZW5kIElDTVAgY29udHJvbCBtZXNzYWdlcy4gVGhpcyBpcyBhIG5ldyBmdW5jdGlvbmFsIGZlYXR1cmUgdGhhdCBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIEJQRiBwcm9ncmFtcywgbWFraW5nIGl0IGEgcHJpbWUgdGFyZ2V0IGZvciBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdAogICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksCiAgIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA1NGE0OTI5ZDNkMzQyZWU1ZjY5ZDRmNzZhZjcyN2Y5ZGVhOTFjOTExCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFdlZCBKdW4gMjQgMTk6MTQ6MzUgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvY29yZS9maWx0ZXIuYyBiL25ldC9jb3JlL2ZpbHRlci5jCmluZGV4IDJlOTZiNGI4NDdjZTEyLi5mM2FhNDk0ZWQxMDUzMCAxMDA2NDQKLS0tIGEvbmV0L2NvcmUvZmlsdGVyLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2NvcmUvZmlsdGVyLmMKQEAgLTg0LDYgJiM0Mzs4NCw5IEBACiAjaW5jbHVkZSAmbHQ7bGludXgvdW4uaCZndDsKICNpbmNsdWRlICZsdDtuZXQveGRwX3NvY2tfZHJ2LmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bmV0L2luZXRfZHNjcC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9pY21wdjYuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bmV0L2ljbXAuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bmV0L2lwNl9yb3V0ZS5oJmd0OwogCiAjaW5jbHVkZSAmIzM0O2Rldi5oJiMzNDsKIApAQCAtMTI1NDYsNiAmIzQzOzEyNTQ5LDg0IEBAIF9fYnBmX2tmdW5jIGludCBicGZfeGRwX3B1bGxfZGF0YShzdHJ1Y3QgeGRwX21kICp4LCB1MzIgbGVuKQogCXJldHVybiAwOwogfQogCiYjNDM7LyoqCiYjNDM7ICogYnBmX2ljbXBfc2VuZCAtIFNlbmQgYW4gSUNNUCBjb250cm9sIG1lc3NhZ2UKJiM0MzsgKiBAc2tiX2N0eDogUGFja2V0IHRoYXQgdHJpZ2dlcmVkIHRoZSBjb250cm9sIG1lc3NhZ2UKJiM0MzsgKiBAdHlwZTogSUNNUCB0eXBlIChvbmx5IElDTVBfREVTVF9VTlJFQUNIL0lDTVBWNl9ERVNUX1VOUkVBQ0ggc3VwcG9ydGVkKQomIzQzOyAqIEBjb2RlOiBJQ01QIGNvZGUgKDAtMTUgZXhjZXB0IElDTVBfRlJBR19ORUVERUQgZm9yIElQdjQsIDAtNiBmb3IgSVB2NikKJiM0MzsgKgomIzQzOyAqIFNlbmRzIGFuIElDTVAgY29udHJvbCBtZXNzYWdlIGluIHJlc3BvbnNlIHRvIHRoZSBwYWNrZXQuIFRoZSBvcmlnaW5hbCBwYWNrZXQKJiM0MzsgKiBpcyBjbG9uZWQgYmVmb3JlIHNlbmRpbmcgdGhlIElDTVAgbWVzc2FnZSwgc28gdGhlIEJQRiBwcm9ncmFtIGNhbiBzdGlsbCBsZXQKJiM0MzsgKiB0aGUgcGFja2V0IHBhc3MgaWYgZGVzaXJlZC4KJiM0MzsgKgomIzQzOyAqIEN1cnJlbnRseSBvbmx5IElDTVBfREVTVF9VTlJFQUNIIChJUHY0KSBhbmQgSUNNUFY2X0RFU1RfVU5SRUFDSCAoSVB2NikgYXJlCiYjNDM7ICogc3VwcG9ydGVkLgomIzQzOyAqCiYjNDM7ICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MgKHNlbmQgYXR0ZW1wdCksIG5lZ2F0aXZlIGVycm9yIGNvZGUgb24gZmFpbHVyZToKJiM0MzsgKiAgICAgICAgIC1FQlVTWTogUmVjdXJzaW9uIGRldGVjdGVkCiYjNDM7ICogICAgICAgICAtRVBST1RPTk9TVVBQT1JUOiBOb24tSVAgcHJvdG9jb2wKJiM0MzsgKiAgICAgICAgIC1FT1BOT1RTVVBQOiBVbnN1cHBvcnRlZCBJQ01QIHR5cGUKJiM0MzsgKiAgICAgICAgIC1FSU5WQUw6IEludmFsaWQgY29kZSBwYXJhbWV0ZXIKJiM0MzsgKiAgICAgICAgIC1FTkVUVU5SRUFDSDogVW51c2FibGUgSVB2NCByb3V0ZS9kc3QgYXR0YWNoZWQgdG8gdGhlIHNrYgomIzQzOyAqICAgICAgICAgLUVOT01FTTogTWVtb3J5IGFsbG9jYXRpb24gZmFpbGVkCiYjNDM7ICovCiYjNDM7X19icGZfa2Z1bmMgaW50IGJwZl9pY21wX3NlbmQoc3RydWN0IF9fc2tfYnVmZiAqc2tiX2N0eCwgaW50IHR5cGUsIGludCBjb2RlKQomIzQzO3sKJiM0MzsJc3RydWN0IHNrX2J1ZmYgKnNrYiA9IChzdHJ1Y3Qgc2tfYnVmZiAqKXNrYl9jdHg7CiYjNDM7CXN0cnVjdCBza19idWZmICpuc2tiOwomIzQzOwlzdHJ1Y3Qgc29jayAqc2s7CiYjNDM7CiYjNDM7CXNrID0gc2tiX3RvX2Z1bGxfc2soc2tiKTsKJiM0MzsJaWYgKHNrICZhbXA7JmFtcDsgc2stJmd0O3NrX2tlcm5fc29jayAmYW1wOyZhbXA7CiYjNDM7CSAgICAoc2stJmd0O3NrX3Byb3RvY29sID09IElQUFJPVE9fSUNNUCB8fCBzay0mZ3Q7c2tfcHJvdG9jb2wgPT0gSVBQUk9UT19JQ01QVjYpKQomIzQzOwkJcmV0dXJuIC1FQlVTWTsKJiM0MzsKJiM0MzsJc3dpdGNoIChza2ItJmd0O3Byb3RvY29sKSB7CiYjNDM7I2lmIElTX0VOQUJMRUQoQ09ORklHX0lORVQpCiYjNDM7CWNhc2UgaHRvbnMoRVRIX1BfSVApOiB7CiYjNDM7CQlpZiAodHlwZSAhPSBJQ01QX0RFU1RfVU5SRUFDSCkKJiM0MzsJCQlyZXR1cm4gLUVPUE5PVFNVUFA7CiYjNDM7CQlpZiAoY29kZSAmbHQ7IDAgfHwgY29kZSAmZ3Q7IE5SX0lDTVBfVU5SRUFDSCB8fAomIzQzOwkJICAgIGNvZGUgPT0gSUNNUF9GUkFHX05FRURFRCkgLyogbmVlZHMgYSB2YWxpZCBuZXh0LWhvcCBNVFUgKi8KJiM0MzsJCQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsKJiM0MzsJCS8qIGljbXBfc2VuZCByZXF1aXJlcyBhIHJ0YWJsZTsgdGVzdC1ydW4gc3ludGhldGljIHNrYnMgbGFjayBvbmUuICovCiYjNDM7CQlpZiAoIXNrYl92YWxpZF9kc3Qoc2tiKSkKJiM0MzsJCQlyZXR1cm4gLUVORVRVTlJFQUNIOwomIzQzOwomIzQzOwkJbnNrYiA9IHNrYl9jbG9uZShza2IsIEdGUF9BVE9NSUMpOwomIzQzOwkJaWYgKCFuc2tiKQomIzQzOwkJCXJldHVybiAtRU5PTUVNOwomIzQzOwomIzQzOwkJbWVtc2V0KElQQ0IobnNrYiksIDAsIHNpemVvZigqSVBDQihuc2tiKSkpOwomIzQzOwkJaWNtcF9zZW5kKG5za2IsIHR5cGUsIGNvZGUsIDApOwomIzQzOwkJY29uc3VtZV9za2IobnNrYik7CiYjNDM7CQlicmVhazsKJiM0MzsJfQomIzQzOyNlbmRpZgomIzQzOyNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2KQomIzQzOwljYXNlIGh0b25zKEVUSF9QX0lQVjYpOgomIzQzOwkJaWYgKHR5cGUgIT0gSUNNUFY2X0RFU1RfVU5SRUFDSCkKJiM0MzsJCQlyZXR1cm4gLUVPUE5PVFNVUFA7CiYjNDM7CQlpZiAoY29kZSAmbHQ7IDAgfHwgY29kZSAmZ3Q7IElDTVBWNl9SRUpFQ1RfUk9VVEUpCiYjNDM7CQkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CiYjNDM7CQluc2tiID0gc2tiX2Nsb25lKHNrYiwgR0ZQX0FUT01JQyk7CiYjNDM7CQlpZiAoIW5za2IpCiYjNDM7CQkJcmV0dXJuIC1FTk9NRU07CiYjNDM7CiYjNDM7CQltZW1zZXQoSVA2Q0IobnNrYiksIDAsIHNpemVvZigqSVA2Q0IobnNrYikpKTsKJiM0MzsJCWljbXB2Nl9zZW5kKG5za2IsIHR5cGUsIGNvZGUsIDApOwomIzQzOwkJY29uc3VtZV9za2IobnNrYik7CiYjNDM7CQlicmVhazsKJiM0MzsjZW5kaWYKJiM0MzsJZGVmYXVsdDoKJiM0MzsJCXJldHVybiAtRVBST1RPTk9TVVBQT1JUOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKIF9fYnBmX2tmdW5jX2VuZF9kZWZzKCk7CiAKIGludCBicGZfZHlucHRyX2Zyb21fc2tiX3Jkb25seShzdHJ1Y3QgX19za19idWZmICpza2IsIHU2NCBmbGFncywKQEAgLTEyNTg4LDYgJiM0MzsxMjY2OSwxMCBAQCBCVEZfS0ZVTkNTX1NUQVJUKGJwZl9rZnVuY19jaGVja19zZXRfc29ja19vcHMpCiBCVEZfSURfRkxBR1MoZnVuYywgYnBmX3NvY2tfb3BzX2VuYWJsZV90eF90c3RhbXApCiBCVEZfS0ZVTkNTX0VORChicGZfa2Z1bmNfY2hlY2tfc2V0X3NvY2tfb3BzKQogCiYjNDM7QlRGX0tGVU5DU19TVEFSVChicGZfa2Z1bmNfY2hlY2tfc2V0X2ljbXBfc2VuZCkKJiM0MztCVEZfSURfRkxBR1MoZnVuYywgYnBmX2ljbXBfc2VuZCkKJiM0MztCVEZfS0ZVTkNTX0VORChicGZfa2Z1bmNfY2hlY2tfc2V0X2ljbXBfc2VuZCkKJiM0MzsKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYnRmX2tmdW5jX2lkX3NldCBicGZfa2Z1bmNfc2V0X3NrYiA9IHsKIAkub3duZXIgPSBUSElTX01PRFVMRSwKIAkuc2V0ID0gJmFtcDticGZfa2Z1bmNfY2hlY2tfc2V0X3NrYiwKQEAgLTEyNjE4LDYgJiM0MzsxMjcwMywxMSBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGJ0Zl9rZnVuY19pZF9zZXQgYnBmX2tmdW5jX3NldF9zb2NrX29wcyA9IHsKIAkuc2V0ID0gJmFtcDticGZfa2Z1bmNfY2hlY2tfc2V0X3NvY2tfb3BzLAogfTsKIAomIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgYnRmX2tmdW5jX2lkX3NldCBicGZfa2Z1bmNfc2V0X2ljbXBfc2VuZCA9IHsKJiM0MzsJLm93bmVyID0gVEhJU19NT0RVTEUsCiYjNDM7CS5zZXQgPSAmYW1wO2JwZl9rZnVuY19jaGVja19zZXRfaWNtcF9zZW5kLAomIzQzO307CiYjNDM7CiBzdGF0aWMgaW50IF9faW5pdCBicGZfa2Z1bmNfaW5pdCh2b2lkKQogewogCWludCByZXQ7CkBAIC0xMjYzOSw2ICYjNDM7MTI3MjksNyBAQCBzdGF0aWMgaW50IF9faW5pdCBicGZfa2Z1bmNfaW5pdCh2b2lkKQogCXJldCA9IHJldCA/OiByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfQ0dST1VQX1NPQ0tfQUREUiwKIAkJCQkJICAgICAgICZhbXA7YnBmX2tmdW5jX3NldF9zb2NrX2FkZHIpOwogCXJldCA9IHJldCA/OiByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfU0NIRURfQ0xTLCAmYW1wO2JwZl9rZnVuY19zZXRfdGNwX3JlcXNrKTsKJiM0MzsJcmV0ID0gcmV0ID86IHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9DR1JPVVBfU0tCLCAmYW1wO2JwZl9rZnVuY19zZXRfaWNtcF9zZW5kKTsKIAlyZXR1cm4gcmV0ID86IHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9TT0NLX09QUywgJmFtcDticGZfa2Z1bmNfc2V0X3NvY2tfb3BzKTsKIH0KIGxhdGVfaW5pdGNhbGwoYnBmX2tmdW5jX2luaXQpOwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvaWNtcF9zZW5kX2tmdW5jLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9pY21wX3NlbmRfa2Z1bmMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMC4uZmZhZjBmZTE4ODBiMGUKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9pY21wX3NlbmRfa2Z1bmMuYwpAQCAtMCwwICYjNDM7MSwyNjkgQEAKJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAomIzQzOyNpbmNsdWRlICZsdDt0ZXN0X3Byb2dzLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O25ldHdvcmtfaGVscGVycy5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtjZ3JvdXBfaGVscGVycy5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9lcnJxdWV1ZS5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtwb2xsLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O3VuaXN0ZC5oJmd0OwomIzQzOyNpbmNsdWRlICYjMzQ7aWNtcF9zZW5kLnNrZWwuaCYjMzQ7CiYjNDM7CiYjNDM7I2RlZmluZSBUSU1FT1VUX01TIDEwMDAKJiM0MzsKJiM0MzsjZGVmaW5lIElDTVBfREVTVF9VTlJFQUNIIDMKJiM0MzsjZGVmaW5lIElDTVBWNl9ERVNUX1VOUkVBQ0ggMQomIzQzOwomIzQzOyNkZWZpbmUgSUNNUF9IT1NUX1VOUkVBQ0ggMQomIzQzOyNkZWZpbmUgSUNNUF9GUkFHX05FRURFRCA0CiYjNDM7I2RlZmluZSBOUl9JQ01QX1VOUkVBQ0ggMTUKJiM0MzsjZGVmaW5lIElDTVBWNl9SRUpFQ1RfUk9VVEUgNgomIzQzOwomIzQzOyNkZWZpbmUgS0ZVTkNfUkVUX1VOU0VUIC0xCiYjNDM7CiYjNDM7c3RhdGljIGludCBjb25uZWN0X3RvX2ZkX25vbmJsb2NrKGludCBzZXJ2ZXJfZmQpCiYjNDM7ewomIzQzOwlzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZSBhZGRyOwomIzQzOwlzb2NrbGVuX3QgbGVuID0gc2l6ZW9mKGFkZHIpOwomIzQzOwlpbnQgZmQsIGVyciwgb24gPSAxOwomIzQzOwomIzQzOwlpZiAoZ2V0c29ja25hbWUoc2VydmVyX2ZkLCAoc3RydWN0IHNvY2thZGRyICopJmFtcDthZGRyLCAmYW1wO2xlbikpCiYjNDM7CQlyZXR1cm4gLTE7CiYjNDM7CiYjNDM7CWZkID0gc29ja2V0KGFkZHIuc3NfZmFtaWx5LCBTT0NLX1NUUkVBTSB8IFNPQ0tfTk9OQkxPQ0ssIDApOwomIzQzOwlpZiAoZmQgJmx0OyAwKQomIzQzOwkJcmV0dXJuIC0xOwomIzQzOwomIzQzOwlpZiAoYWRkci5zc19mYW1pbHkgPT0gQUZfSU5FVDYgJmFtcDsmYW1wOwomIzQzOwkgICAgc2V0c29ja29wdChmZCwgSVBQUk9UT19JUFY2LCBJUFY2X1JFQ1ZFUlIsICZhbXA7b24sIHNpemVvZihvbikpICZsdDsgMCkgewomIzQzOwkJY2xvc2UoZmQpOwomIzQzOwkJcmV0dXJuIC0xOwomIzQzOwl9CiYjNDM7CiYjNDM7CWVyciA9IGNvbm5lY3QoZmQsIChzdHJ1Y3Qgc29ja2FkZHIgKikmYW1wO2FkZHIsIGxlbik7CiYjNDM7CWlmIChlcnIgJmx0OyAwICZhbXA7JmFtcDsgZXJybm8gIT0gRUlOUFJPR1JFU1MpIHsKJiM0MzsJCWNsb3NlKGZkKTsKJiM0MzsJCXJldHVybiAtMTsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gZmQ7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIHJlYWRfaWNtcF9lcnJxdWV1ZShpbnQgc29ja2ZkLCBpbnQgZXhwZWN0ZWRfY29kZSwgaW50IGFmKQomIzQzO3sKJiM0MzsJaW50IGV4cGVjdGVkX2VlX3R5cGUgPSAoYWYgPT0gQUZfSU5FVCkgPyBJQ01QX0RFU1RfVU5SRUFDSCA6CiYjNDM7CQkJCQkJIElDTVBWNl9ERVNUX1VOUkVBQ0g7CiYjNDM7CWludCBleHBlY3RlZF9vcmlnaW4gPSAoYWYgPT0gQUZfSU5FVCkgPyBTT19FRV9PUklHSU5fSUNNUCA6CiYjNDM7CQkJCQkJU09fRUVfT1JJR0lOX0lDTVA2OwomIzQzOwlpbnQgZXhwZWN0ZWRfbGV2ZWwgPSAoYWYgPT0gQUZfSU5FVCkgPyBJUFBST1RPX0lQIDogSVBQUk9UT19JUFY2OwomIzQzOwlpbnQgZXhwZWN0ZWRfdHlwZSA9IChhZiA9PSBBRl9JTkVUKSA/IElQX1JFQ1ZFUlIgOiBJUFY2X1JFQ1ZFUlI7CiYjNDM7CXN0cnVjdCBzb2NrX2V4dGVuZGVkX2VyciAqc29ja19lcnI7CiYjNDM7CWNoYXIgY3RybF9idWZbNTEyXTsKJiM0MzsJc3RydWN0IG1zZ2hkciBtc2cgPSB7CiYjNDM7CQkubXNnX2NvbnRyb2wgPSBjdHJsX2J1ZiwKJiM0MzsJCS5tc2dfY29udHJvbGxlbiA9IHNpemVvZihjdHJsX2J1ZiksCiYjNDM7CX07CiYjNDM7CXN0cnVjdCBwb2xsZmQgcGZkID0gewomIzQzOwkJLmZkID0gc29ja2ZkLAomIzQzOwkJLmV2ZW50cyA9IFBPTExFUlIsCiYjNDM7CX07CiYjNDM7CXN0cnVjdCBjbXNnaGRyICpjbTsKJiM0MzsJc3NpemVfdCBuOwomIzQzOwomIzQzOwlpZiAoIUFTU0VSVF9HRShwb2xsKCZhbXA7cGZkLCAxLCBUSU1FT1VUX01TKSwgMSwgJiMzNDtwb2xsX2VycnF1ZXVlJiMzNDspKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwluID0gcmVjdm1zZyhzb2NrZmQsICZhbXA7bXNnLCBNU0dfRVJSUVVFVUUpOwomIzQzOwlpZiAoIUFTU0VSVF9HRShuLCAwLCAmIzM0O3JlY3Ztc2dfZXJycXVldWUmIzM0OykpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CWNtID0gQ01TR19GSVJTVEhEUigmYW1wO21zZyk7CiYjNDM7CWlmICghQVNTRVJUX05FUShjbSwgTlVMTCwgJiMzNDtjbV9maXJzdGhkcl9udWxsJiMzNDspKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwlmb3IgKDsgY207IGNtID0gQ01TR19OWFRIRFIoJmFtcDttc2csIGNtKSkgewomIzQzOwkJaWYgKGNtLSZndDtjbXNnX2xldmVsICE9IGV4cGVjdGVkX2xldmVsIHx8CiYjNDM7CQkgICAgY20tJmd0O2Ntc2dfdHlwZSAhPSBleHBlY3RlZF90eXBlKQomIzQzOwkJCWNvbnRpbnVlOwomIzQzOwomIzQzOwkJc29ja19lcnIgPSAoc3RydWN0IHNvY2tfZXh0ZW5kZWRfZXJyICopQ01TR19EQVRBKGNtKTsKJiM0MzsKJiM0MzsJCWlmICghQVNTRVJUX0VRKHNvY2tfZXJyLSZndDtlZV9vcmlnaW4sIGV4cGVjdGVkX29yaWdpbiwKJiM0MzsJCQkgICAgICAgJiMzNDtzb2NrX2Vycl9vcmlnaW4mIzM0OykpCiYjNDM7CQkJcmV0dXJuOwomIzQzOwkJaWYgKCFBU1NFUlRfRVEoc29ja19lcnItJmd0O2VlX3R5cGUsIGV4cGVjdGVkX2VlX3R5cGUsCiYjNDM7CQkJICAgICAgICYjMzQ7c29ja19lcnJfdHlwZV9kZXN0X3VucmVhY2gmIzM0OykpCiYjNDM7CQkJcmV0dXJuOwomIzQzOwkJQVNTRVJUX0VRKHNvY2tfZXJyLSZndDtlZV9jb2RlLCBleHBlY3RlZF9jb2RlLCAmIzM0O3NvY2tfZXJyX2NvZGUmIzM0Oyk7CiYjNDM7CQlyZXR1cm47CiYjNDM7CX0KJiM0MzsKJiM0MzsJQVNTRVJUX0ZBSUwoJiMzNDtubyBJUF9SRUNWRVJSL0lQVjZfUkVDVkVSUiBjb250cm9sIG1lc3NhZ2UgZm91bmQmIzM0Oyk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBib29sIHZhbGlkX3VucmVhY2hfY29kZShpbnQgY29kZSwgaW50IGFmKQomIzQzO3sKJiM0MzsJaWYgKGNvZGUgJmx0OyAwKQomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwomIzQzOwlpZiAoYWYgPT0gQUZfSU5FVCkKJiM0MzsJCXJldHVybiBjb2RlICZsdDs9IE5SX0lDTVBfVU5SRUFDSCAmYW1wOyZhbXA7IGNvZGUgIT0gSUNNUF9GUkFHX05FRURFRDsKJiM0MzsKJiM0MzsJcmV0dXJuIGNvZGUgJmx0Oz0gSUNNUFY2X1JFSkVDVF9ST1VURTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgdHJpZ2dlcl9wcm9nX3JlYWRfaWNtcF9lcnJxdWV1ZShzdHJ1Y3QgaWNtcF9zZW5kICpza2VsLCBpbnQgY29kZSwKJiM0MzsJCQkJCSAgICBpbnQgYWYsIGNvbnN0IGNoYXIgKmlwKQomIzQzO3sKJiM0MzsJaW50IHNydl9mZCA9IC0xLCBjbGllbnRfZmQgPSAtMTsKJiM0MzsJaW50IHBvcnQ7CiYjNDM7CiYjNDM7CXNydl9mZCA9IHN0YXJ0X3NlcnZlcihhZiwgU09DS19TVFJFQU0sIGlwLCAwLCBUSU1FT1VUX01TKTsKJiM0MzsJaWYgKCFBU1NFUlRfT0tfRkQoc3J2X2ZkLCAmIzM0O3N0YXJ0X3NlcnZlciYjMzQ7KSkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJcG9ydCA9IGdldF9zb2NrZXRfbG9jYWxfcG9ydChzcnZfZmQpOwomIzQzOwlpZiAoIUFTU0VSVF9HRShwb3J0LCAwLCAmIzM0O2dldF9zb2NrZXRfbG9jYWxfcG9ydCYjMzQ7KSkgewomIzQzOwkJY2xvc2Uoc3J2X2ZkKTsKJiM0MzsJCXJldHVybjsKJiM0MzsJfQomIzQzOwomIzQzOwlza2VsLSZndDtic3MtJmd0O3NlcnZlcl9wb3J0ID0gbnRvaHMocG9ydCk7CiYjNDM7CXNrZWwtJmd0O2Jzcy0mZ3Q7dW5yZWFjaF90eXBlID0gKGFmID09IEFGX0lORVQpID8gSUNNUF9ERVNUX1VOUkVBQ0ggOgomIzQzOwkJCQkJCSAgICBJQ01QVjZfREVTVF9VTlJFQUNIOwomIzQzOwlza2VsLSZndDtic3MtJmd0O3VucmVhY2hfY29kZSA9IGNvZGU7CiYjNDM7CXNrZWwtJmd0O2RhdGEtJmd0O2tmdW5jX3JldCA9IEtGVU5DX1JFVF9VTlNFVDsKJiM0MzsKJiM0MzsJY2xpZW50X2ZkID0gY29ubmVjdF90b19mZF9ub25ibG9jayhzcnZfZmQpOwomIzQzOwlpZiAoIUFTU0VSVF9PS19GRChjbGllbnRfZmQsICYjMzQ7Y2xpZW50X2Nvbm5lY3Rfbm9uYmxvY2smIzM0OykpIHsKJiM0MzsJCWNsb3NlKHNydl9mZCk7CiYjNDM7CQlyZXR1cm47CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKHZhbGlkX3VucmVhY2hfY29kZShjb2RlLCBhZikpCiYjNDM7CQlyZWFkX2ljbXBfZXJycXVldWUoY2xpZW50X2ZkLCBjb2RlLCBhZik7CiYjNDM7CiYjNDM7CWNsb3NlKGNsaWVudF9mZCk7CiYjNDM7CWNsb3NlKHNydl9mZCk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIHJ1bl9pY21wX3Rlc3Qoc3RydWN0IGljbXBfc2VuZCAqc2tlbCwgaW50IGFmLCBjb25zdCBjaGFyICppcCwKJiM0MzsJCQkgIGludCBtYXhfY29kZSkKJiM0Mzt7CiYjNDM7CWZvciAoaW50IGNvZGUgPSAwOyBjb2RlICZsdDs9IG1heF9jb2RlOyBjb2RlJiM0MzsmIzQzOykgewomIzQzOwkJaWYgKGFmID09IEFGX0lORVQgJmFtcDsmYW1wOyBjb2RlID09IElDTVBfRlJBR19ORUVERUQpCiYjNDM7CQkJY29udGludWU7CiYjNDM7CiYjNDM7CQl0cmlnZ2VyX3Byb2dfcmVhZF9pY21wX2VycnF1ZXVlKHNrZWwsIGNvZGUsIGFmLCBpcCk7CiYjNDM7CQlBU1NFUlRfRVEoc2tlbC0mZ3Q7ZGF0YS0mZ3Q7a2Z1bmNfcmV0LCAwLCAmIzM0O2tmdW5jX3JldCYjMzQ7KTsKJiM0MzsJfQomIzQzOwomIzQzOwkvKiBUZXN0IGludmFsaWQgY29kZXMgKi8KJiM0MzsJdHJpZ2dlcl9wcm9nX3JlYWRfaWNtcF9lcnJxdWV1ZShza2VsLCAtMSwgYWYsIGlwKTsKJiM0MzsJQVNTRVJUX0VRKHNrZWwtJmd0O2RhdGEtJmd0O2tmdW5jX3JldCwgLUVJTlZBTCwgJiMzNDtrZnVuY19yZXQmIzM0Oyk7CiYjNDM7CiYjNDM7CXRyaWdnZXJfcHJvZ19yZWFkX2ljbXBfZXJycXVldWUoc2tlbCwgbWF4X2NvZGUgJiM0MzsgMSwgYWYsIGlwKTsKJiM0MzsJQVNTRVJUX0VRKHNrZWwtJmd0O2RhdGEtJmd0O2tmdW5jX3JldCwgLUVJTlZBTCwgJiMzNDtrZnVuY19yZXQmIzM0Oyk7CiYjNDM7CiYjNDM7CWlmIChhZiA9PSBBRl9JTkVUKSB7CiYjNDM7CQl0cmlnZ2VyX3Byb2dfcmVhZF9pY21wX2VycnF1ZXVlKHNrZWwsIElDTVBfRlJBR19ORUVERUQsIGFmLCBpcCk7CiYjNDM7CQlBU1NFUlRfRVEoc2tlbC0mZ3Q7ZGF0YS0mZ3Q7a2Z1bmNfcmV0LCAtRUlOVkFMLCAmIzM0O2tmdW5jX3JldCYjMzQ7KTsKJiM0MzsJfQomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBydW5faWNtcF9ub19yb3V0ZV90ZXN0KHN0cnVjdCBpY21wX3NlbmQgKnNrZWwpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgaXB2NF9wYWNrZXQgcGt0ID0gcGt0X3Y0OwomIzQzOwlMSUJCUEZfT1BUUyhicGZfdGVzdF9ydW5fb3B0cywgb3B0cywKJiM0MzsJCS5kYXRhX2luID0gJmFtcDtwa3QsCiYjNDM7CQkuZGF0YV9zaXplX2luID0gc2l6ZW9mKHBrdCksCiYjNDM7CSk7CiYjNDM7CWludCBlcnI7CiYjNDM7CiYjNDM7CXBrdC5pcGgudmVyc2lvbiA9IDQ7CiYjNDM7CXBrdC5pcGguZGFkZHIgPSBpbmV0X2FkZHIoJiMzNDsxMjcuMC4wLjEmIzM0Oyk7CiYjNDM7CXBrdC50Y3AuZGVzdCA9IGh0b25zKDgwKTsKJiM0MzsJc2tlbC0mZ3Q7YnNzLSZndDtzZXJ2ZXJfcG9ydCA9IDgwOwomIzQzOwlza2VsLSZndDtic3MtJmd0O3VucmVhY2hfdHlwZSA9IElDTVBfREVTVF9VTlJFQUNIOwomIzQzOwlza2VsLSZndDtic3MtJmd0O3VucmVhY2hfY29kZSA9IElDTVBfSE9TVF9VTlJFQUNIOwomIzQzOwlza2VsLSZndDtkYXRhLSZndDtrZnVuY19yZXQgPSBLRlVOQ19SRVRfVU5TRVQ7CiYjNDM7CiYjNDM7CWVyciA9IGJwZl9wcm9nX3Rlc3RfcnVuX29wdHMoYnBmX3Byb2dyYW1fX2ZkKHNrZWwtJmd0O3Byb2dzLmVncmVzcyksICZhbXA7b3B0cyk7CiYjNDM7CWlmICghQVNTRVJUX09LKGVyciwgJiMzNDt0ZXN0X3J1biYjMzQ7KSkKJiM0MzsJCXJldHVybjsKJiM0MzsJQVNTRVJUX0VRKHNrZWwtJmd0O2RhdGEtJmd0O2tmdW5jX3JldCwgLUVORVRVTlJFQUNILCAmIzM0O2tmdW5jX3JldF9ub19yb3V0ZSYjMzQ7KTsKJiM0Mzt9CiYjNDM7CiYjNDM7dm9pZCB0ZXN0X2ljbXBfc2VuZF91bnJlYWNoX2Nncm91cCh2b2lkKQomIzQzO3sKJiM0MzsJc3RydWN0IGljbXBfc2VuZCAqc2tlbDsKJiM0MzsJaW50IGNncm91cF9mZCA9IC0xOwomIzQzOwomIzQzOwlza2VsID0gaWNtcF9zZW5kX19vcGVuX2FuZF9sb2FkKCk7CiYjNDM7CWlmICghQVNTRVJUX09LX1BUUihza2VsLCAmIzM0O3NrZWxfb3BlbiYjMzQ7KSkKJiM0MzsJCWdvdG8gY2xlYW51cDsKJiM0MzsKJiM0MzsJY2dyb3VwX2ZkID0gdGVzdF9fam9pbl9jZ3JvdXAoJiMzNDsvaWNtcF9zZW5kX3VucmVhY2hfY2dyb3VwJiMzNDspOwomIzQzOwlpZiAoIUFTU0VSVF9PS19GRChjZ3JvdXBfZmQsICYjMzQ7am9pbl9jZ3JvdXAmIzM0OykpCiYjNDM7CQlnb3RvIGNsZWFudXA7CiYjNDM7CiYjNDM7CXNrZWwtJmd0O2xpbmtzLmVncmVzcyA9CiYjNDM7CQlicGZfcHJvZ3JhbV9fYXR0YWNoX2Nncm91cChza2VsLSZndDtwcm9ncy5lZ3Jlc3MsIGNncm91cF9mZCk7CiYjNDM7CWlmICghQVNTRVJUX09LX1BUUihza2VsLSZndDtsaW5rcy5lZ3Jlc3MsICYjMzQ7cHJvZ19hdHRhY2hfY2dyb3VwJiMzNDspKQomIzQzOwkJZ290byBjbGVhbnVwOwomIzQzOwomIzQzOwlpZiAodGVzdF9fc3RhcnRfc3VidGVzdCgmIzM0O2lwdjQmIzM0OykpCiYjNDM7CQlydW5faWNtcF90ZXN0KHNrZWwsIEFGX0lORVQsICYjMzQ7MTI3LjAuMC4xJiMzNDssIE5SX0lDTVBfVU5SRUFDSCk7CiYjNDM7CiYjNDM7CWlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KCYjMzQ7aXB2NiYjMzQ7KSkKJiM0MzsJCXJ1bl9pY21wX3Rlc3Qoc2tlbCwgQUZfSU5FVDYsICYjMzQ7OjoxJiMzNDssIElDTVBWNl9SRUpFQ1RfUk9VVEUpOwomIzQzOwomIzQzOwlpZiAodGVzdF9fc3RhcnRfc3VidGVzdCgmIzM0O25vX3JvdXRlJiMzNDspKQomIzQzOwkJcnVuX2ljbXBfbm9fcm91dGVfdGVzdChza2VsKTsKJiM0MzsKJiM0MztjbGVhbnVwOgomIzQzOwlpY21wX3NlbmRfX2Rlc3Ryb3koc2tlbCk7CiYjNDM7CWlmIChjZ3JvdXBfZmQgJmd0Oz0gMCkKJiM0MzsJCWNsb3NlKGNncm91cF9mZCk7CiYjNDM7fQomIzQzOwomIzQzO3ZvaWQgdGVzdF9pY21wX3NlbmRfdW5yZWFjaF9yZWN1cnNpb24odm9pZCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBpY21wX3NlbmQgKnNrZWw7CiYjNDM7CWludCBjZ3JvdXBfZmQgPSAtMTsKJiM0MzsJaW50IGVycjsKJiM0MzsKJiM0MzsJZXJyID0gc2V0dXBfY2dyb3VwX2Vudmlyb25tZW50KCk7CiYjNDM7CWlmICghQVNTRVJUX09LKGVyciwgJiMzNDtzZXR1cF9jZ3JvdXBfZW52aXJvbm1lbnQmIzM0OykpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CXNrZWwgPSBpY21wX3NlbmRfX29wZW5fYW5kX2xvYWQoKTsKJiM0MzsJaWYgKCFBU1NFUlRfT0tfUFRSKHNrZWwsICYjMzQ7c2tlbF9vcGVuJiMzNDspKQomIzQzOwkJZ290byBjbGVhbnVwOwomIzQzOwomIzQzOwljZ3JvdXBfZmQgPSBnZXRfcm9vdF9jZ3JvdXAoKTsKJiM0MzsJaWYgKCFBU1NFUlRfT0tfRkQoY2dyb3VwX2ZkLCAmIzM0O2dldF9yb290X2Nncm91cCYjMzQ7KSkKJiM0MzsJCWdvdG8gY2xlYW51cDsKJiM0MzsKJiM0MzsJc2tlbC0mZ3Q7ZGF0YS0mZ3Q7dGFyZ2V0X3BpZCA9IGdldHBpZCgpOwomIzQzOwlza2VsLSZndDtsaW5rcy5yZWN1cnNpb24gPQomIzQzOwkJYnBmX3Byb2dyYW1fX2F0dGFjaF9jZ3JvdXAoc2tlbC0mZ3Q7cHJvZ3MucmVjdXJzaW9uLCBjZ3JvdXBfZmQpOwomIzQzOwlpZiAoIUFTU0VSVF9PS19QVFIoc2tlbC0mZ3Q7bGlua3MucmVjdXJzaW9uLCAmIzM0O3Byb2dfYXR0YWNoX2Nncm91cCYjMzQ7KSkKJiM0MzsJCWdvdG8gY2xlYW51cDsKJiM0MzsKJiM0MzsJdHJpZ2dlcl9wcm9nX3JlYWRfaWNtcF9lcnJxdWV1ZShza2VsLCBJQ01QX0hPU1RfVU5SRUFDSCwgQUZfSU5FVCwKJiM0MzsJCQkJCSYjMzQ7MTI3LjAuMC4xJiMzNDspOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBCZWNhdXNlIHRoZXJlJiMzOTtzIHJlY3Vyc2lvbiBpbnZvbHZlZCwgdGhlIGZpcnN0IGNhbGwgd2lsbCByZXR1cm4gYXQKJiM0MzsJICogaW5kZXggMSBzaW5jZSBpdCB3aWxsIHJldHVybiB0aGUgc2Vjb25kLCBhbmQgdGhlIHNlY29uZCBjYWxsIHdpbGwKJiM0MzsJICogcmV0dXJuIGF0IGluZGV4IDAgc2luY2UgaXQgd2lsbCByZXR1cm4gdGhlIGZpcnN0LgomIzQzOwkgKi8KJiM0MzsJQVNTRVJUX0VRKHNrZWwtJmd0O2Jzcy0mZ3Q7cmVjX2NvdW50LCAyLCAmIzM0O3JlY19jb3VudCYjMzQ7KTsKJiM0MzsJQVNTRVJUX0VRKHNrZWwtJmd0O2RhdGEtJmd0O3JlY19rZnVuY19yZXRzWzBdLCAtRUJVU1ksICYjMzQ7a2Z1bmNfcmV0c1swXSYjMzQ7KTsKJiM0MzsJQVNTRVJUX0VRKHNrZWwtJmd0O2RhdGEtJmd0O3JlY19rZnVuY19yZXRzWzFdLCAwLCAmIzM0O2tmdW5jX3JldHNbMV0mIzM0Oyk7CiYjNDM7CiYjNDM7Y2xlYW51cDoKJiM0MzsJaWNtcF9zZW5kX19kZXN0cm95KHNrZWwpOwomIzQzOwlpZiAoY2dyb3VwX2ZkICZndDs9IDApCiYjNDM7CQljbG9zZShjZ3JvdXBfZmQpOwomIzQzOwljbGVhbnVwX2Nncm91cF9lbnZpcm9ubWVudCgpOwomIzQzO30KZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9pY21wX3NlbmQuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9pY21wX3NlbmQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMC4uYzY0MmNjZGY5ZmQ1NDQKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvaWNtcF9zZW5kLmMKQEAgLTAsMCAmIzQzOzEsMTIzIEBACiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKJiM0MzsjaW5jbHVkZSAmIzM0O3ZtbGludXguaCYjMzQ7CiYjNDM7I2luY2x1ZGUgJmx0O2JwZi9icGZfaGVscGVycy5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDticGYvYnBmX2VuZGlhbi5oJmd0OwomIzQzOwomIzQzOy8qIDEyNy4wLjAuMSBpbiBob3N0IGJ5dGUgb3JkZXIgKi8KJiM0MzsjZGVmaW5lIFNFUlZFUl9JUCAweDdGMDAwMDAxCiYjNDM7LyogOjoxIGluIGhvc3QgYnl0ZSBvcmRlciAobGFzdCAzMi1iaXQgd29yZCkgKi8KJiM0MzsjZGVmaW5lIFNFUlZFUl9JUDZfTE8gMHgwMDAwMDAwMQomIzQzOwomIzQzO19fdTE2IHNlcnZlcl9wb3J0ID0gMDsKJiM0MztpbnQgdW5yZWFjaF90eXBlID0gMDsKJiM0MztpbnQgdW5yZWFjaF9jb2RlID0gMDsKJiM0MztpbnQga2Z1bmNfcmV0ID0gLTE7CiYjNDM7aW50IHRhcmdldF9waWQgPSAtMTsKJiM0MzsKJiM0Mzt1bnNpZ25lZCBpbnQgcmVjX2NvdW50ID0gMDsKJiM0MztpbnQgcmVjX2tmdW5jX3JldHNbXSA9IHsgLTEsIC0xIH07CiYjNDM7CiYjNDM7U0VDKCYjMzQ7Y2dyb3VwX3NrYi9lZ3Jlc3MmIzM0OykKJiM0MztpbnQgZWdyZXNzKHN0cnVjdCBfX3NrX2J1ZmYgKnNrYikKJiM0Mzt7CiYjNDM7CXZvaWQgKmRhdGEgPSAodm9pZCAqKShsb25nKXNrYi0mZ3Q7ZGF0YTsKJiM0MzsJdm9pZCAqZGF0YV9lbmQgPSAodm9pZCAqKShsb25nKXNrYi0mZ3Q7ZGF0YV9lbmQ7CiYjNDM7CXN0cnVjdCBpcGhkciAqaXBoOwomIzQzOwlzdHJ1Y3QgaXB2NmhkciAqaXA2aDsKJiM0MzsJc3RydWN0IHRjcGhkciAqdGNwaDsKJiM0MzsJX191OCB2ZXJzaW9uOwomIzQzOwomIzQzOwlpZiAoZGF0YSAmIzQzOyAxICZndDsgZGF0YV9lbmQpCiYjNDM7CQlyZXR1cm4gU0tfUEFTUzsKJiM0MzsKJiM0MzsJdmVyc2lvbiA9ICgqKChfX3U4ICopZGF0YSkpICZndDsmZ3Q7IDQ7CiYjNDM7CiYjNDM7CWlmICh2ZXJzaW9uID09IDQpIHsKJiM0MzsJCWlwaCA9IGRhdGE7CiYjNDM7CQlpZiAoKHZvaWQgKikoaXBoICYjNDM7IDEpICZndDsgZGF0YV9lbmQgfHwKJiM0MzsJCSAgICBpcGgtJmd0O3Byb3RvY29sICE9IElQUFJPVE9fVENQIHx8CiYjNDM7CQkgICAgaXBoLSZndDtkYWRkciAhPSBicGZfaHRvbmwoU0VSVkVSX0lQKSkKJiM0MzsJCQlyZXR1cm4gU0tfUEFTUzsKJiM0MzsKJiM0MzsJCXRjcGggPSAodm9pZCAqKWlwaCAmIzQzOyBpcGgtJmd0O2lobCAqIDQ7CiYjNDM7CQlpZiAoKHZvaWQgKikodGNwaCAmIzQzOyAxKSAmZ3Q7IGRhdGFfZW5kIHx8CiYjNDM7CQkgICAgdGNwaC0mZ3Q7ZGVzdCAhPSBicGZfaHRvbnMoc2VydmVyX3BvcnQpKQomIzQzOwkJCXJldHVybiBTS19QQVNTOwomIzQzOwomIzQzOwl9IGVsc2UgaWYgKHZlcnNpb24gPT0gNikgewomIzQzOwkJaXA2aCA9IGRhdGE7CiYjNDM7CQlpZiAoKHZvaWQgKikoaXA2aCAmIzQzOyAxKSAmZ3Q7IGRhdGFfZW5kIHx8CiYjNDM7CQkgICAgaXA2aC0mZ3Q7bmV4dGhkciAhPSBJUFBST1RPX1RDUCkKJiM0MzsJCQlyZXR1cm4gU0tfUEFTUzsKJiM0MzsKJiM0MzsJCWlmIChpcDZoLSZndDtkYWRkci5pbjZfdS51Nl9hZGRyMzJbMF0gIT0gMCB8fAomIzQzOwkJICAgIGlwNmgtJmd0O2RhZGRyLmluNl91LnU2X2FkZHIzMlsxXSAhPSAwIHx8CiYjNDM7CQkgICAgaXA2aC0mZ3Q7ZGFkZHIuaW42X3UudTZfYWRkcjMyWzJdICE9IDAgfHwKJiM0MzsJCSAgICBpcDZoLSZndDtkYWRkci5pbjZfdS51Nl9hZGRyMzJbM10gIT0gYnBmX2h0b25sKFNFUlZFUl9JUDZfTE8pKQomIzQzOwkJCXJldHVybiBTS19QQVNTOwomIzQzOwomIzQzOwkJdGNwaCA9ICh2b2lkICopKGlwNmggJiM0MzsgMSk7CiYjNDM7CQlpZiAoKHZvaWQgKikodGNwaCAmIzQzOyAxKSAmZ3Q7IGRhdGFfZW5kIHx8CiYjNDM7CQkgICAgdGNwaC0mZ3Q7ZGVzdCAhPSBicGZfaHRvbnMoc2VydmVyX3BvcnQpKQomIzQzOwkJCXJldHVybiBTS19QQVNTOwomIzQzOwl9IGVsc2UgewomIzQzOwkJcmV0dXJuIFNLX1BBU1M7CiYjNDM7CX0KJiM0MzsKJiM0MzsJa2Z1bmNfcmV0ID0gYnBmX2ljbXBfc2VuZChza2IsIHVucmVhY2hfdHlwZSwgdW5yZWFjaF9jb2RlKTsKJiM0MzsKJiM0MzsJcmV0dXJuIFNLX0RST1A7CiYjNDM7fQomIzQzOwomIzQzO1NFQygmIzM0O2Nncm91cF9za2IvZWdyZXNzJiMzNDspCiYjNDM7aW50IHJlY3Vyc2lvbihzdHJ1Y3QgX19za19idWZmICpza2IpCiYjNDM7ewomIzQzOwl2b2lkICpkYXRhID0gKHZvaWQgKikobG9uZylza2ItJmd0O2RhdGE7CiYjNDM7CXZvaWQgKmRhdGFfZW5kID0gKHZvaWQgKikobG9uZylza2ItJmd0O2RhdGFfZW5kOwomIzQzOwlzdHJ1Y3QgaWNtcGhkciAqaWNtcGg7CiYjNDM7CXN0cnVjdCB0Y3BoZHIgKnRjcGg7CiYjNDM7CXN0cnVjdCBpcGhkciAqaXBoOwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlpZiAoKGJwZl9nZXRfY3VycmVudF9waWRfdGdpZCgpICZndDsmZ3Q7IDMyKSAhPSB0YXJnZXRfcGlkKQomIzQzOwkJcmV0dXJuIFNLX1BBU1M7CiYjNDM7CiYjNDM7CWlwaCA9IGRhdGE7CiYjNDM7CWlmICgodm9pZCAqKShpcGggJiM0MzsgMSkgJmd0OyBkYXRhX2VuZCB8fCBpcGgtJmd0O3ZlcnNpb24gIT0gNCkKJiM0MzsJCXJldHVybiBTS19QQVNTOwomIzQzOwomIzQzOwlpZiAoaXBoLSZndDtkYWRkciAhPSBicGZfaHRvbmwoU0VSVkVSX0lQKSkKJiM0MzsJCXJldHVybiBTS19QQVNTOwomIzQzOwomIzQzOwlpZiAoaXBoLSZndDtwcm90b2NvbCA9PSBJUFBST1RPX1RDUCkgewomIzQzOwkJdGNwaCA9ICh2b2lkICopaXBoICYjNDM7IGlwaC0mZ3Q7aWhsICogNDsKJiM0MzsJCWlmICgodm9pZCAqKSh0Y3BoICYjNDM7IDEpICZndDsgZGF0YV9lbmQgfHwKJiM0MzsJCSAgICB0Y3BoLSZndDtkZXN0ICE9IGJwZl9odG9ucyhzZXJ2ZXJfcG9ydCkpCiYjNDM7CQkJcmV0dXJuIFNLX1BBU1M7CiYjNDM7CX0gZWxzZSBpZiAoaXBoLSZndDtwcm90b2NvbCA9PSBJUFBST1RPX0lDTVApIHsKJiM0MzsJCWljbXBoID0gKHZvaWQgKilpcGggJiM0MzsgaXBoLSZndDtpaGwgKiA0OwomIzQzOwkJaWYgKCh2b2lkICopKGljbXBoICYjNDM7IDEpICZndDsgZGF0YV9lbmQgfHwKJiM0MzsJCSAgICBpY21waC0mZ3Q7dHlwZSAhPSB1bnJlYWNoX3R5cGUgfHwgaWNtcGgtJmd0O2NvZGUgIT0gdW5yZWFjaF9jb2RlKQomIzQzOwkJCXJldHVybiBTS19QQVNTOwomIzQzOwl9IGVsc2UgewomIzQzOwkJcmV0dXJuIFNLX1BBU1M7CiYjNDM7CX0KJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogVGhpcyBjYWxsIHdpbGwgcHJvdm9rZSBhIHJlY3Vyc2lvbjogdGhlIElDTVAgcGFja2V0IGdlbmVyYXRlZCBieSB0aGUKJiM0MzsJICoga2Z1bmMgd2lsbCByZS10cmlnZ2VyIHRoaXMgcHJvZ3JhbSBzaW5jZSB3ZSBhcmUgaW4gdGhlIHJvb3QgY2dyb3VwIGluCiYjNDM7CSAqIHdoaWNoIHRoZSBrZXJuZWwgSUNNUCBzb2NrZXQgYmVsb25ncy4gSG93ZXZlciB3aGVuIHJlLWVudGVyaW5nIHRoZQomIzQzOwkgKiBrZnVuYywgaXQgc2hvdWxkIHJldHVybiBFQlVTWS4KJiM0MzsJICovCiYjNDM7CXJldCA9IGJwZl9pY21wX3NlbmQoc2tiLCB1bnJlYWNoX3R5cGUsIHVucmVhY2hfY29kZSk7CiYjNDM7CXJlY19rZnVuY19yZXRzW3JlY19jb3VudCAmYW1wOyAxXSA9IHJldDsKJiM0MzsJX19zeW5jX2ZldGNoX2FuZF9hZGQoJmFtcDtyZWNfY291bnQsIDEpOwomIzQzOwomIzQzOwkvKiBMZXQgdGhlIGZpcnN0IElDTVAgZXJyb3IgbWVzc2FnZSBwYXNzICovCiYjNDM7CWlmIChpcGgtJmd0O3Byb3RvY29sID09IElQUFJPVE9fSUNNUCkKJiM0MzsJCXJldHVybiBTS19QQVNTOwomIzQzOwomIzQzOwlyZXR1cm4gU0tfRFJPUDsKJiM0Mzt9CiYjNDM7CiYjNDM7Y2hhciBMSUNFTlNFW10gU0VDKCYjMzQ7bGljZW5zZSYjMzQ7KSA9ICYjMzQ7RHVhbCBCU0QvR1BMJiMzNDs7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI0IDE5OjE0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgzNDkKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiAyOTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgTmV3IGBicGZfaWNtcF9zZW5kYCBrZnVuYyoqCgpPa2F5LCBzbyB0aGVyZSYjMzk7cyBhIG5ldyBwYXRjaCBpbnRyb2R1Y2luZyBhIGBicGZfaWNtcF9zZW5kYCBrZnVuYy4gSW50ZXJlc3RpbmcsIEkgc2VlIGl0JiMzOTtzIHRvdWNoaW5nIGBuZXQvY29yZS9maWx0ZXIuY2AsIHdoaWNoIGlzIGEga2V5IGFyZWEgZm9yIEJQRiwgYW5kIGl0IGFsc28gaW5jbHVkZXMgc29tZSBzZWxmLXRlc3RzLCB3aGljaCBpcyBncmVhdC4gSXQgbG9va3MgbGlrZSB0aGUga2Z1bmMgaXRzZWxmIHRha2VzIHRoZSB1c3VhbCBgc3RydWN0IF9fc2tfYnVmZiAqc2tiX2N0eGAsIHBsdXMgdGhlIElDTVAgYHR5cGVgIGFuZCBgY29kZWAsIGFuZCB0aGVuIGNsb25lcyB0aGUgU0tCIGFuZCB1c2VzIGBpY21wX3NlbmRgIG9yIGBpY21wdjZfc2VuZGAgdG8gYWN0dWFsbHkgdHJhbnNtaXQgdGhlIElDTVAgbWVzc2FnZS4gU2VlbXMgc3RyYWlnaHRmb3J3YXJkIGVub3VnaCDigJMgZnVuY3Rpb25hbGx5IHNvdW5kIGFuZCBkZWZpbml0ZWx5IHJlYWNoYWJsZSBmcm9tIEJQRiBwcm9ncmFtcy4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsICYjMzQ7VGhpcyBuZWVkcyBmdXp6aW5nISYjMzQ7CgpOb3csIGxldCYjMzk7cyBnZXQgaW50byB0aGUgbml0dHktZ3JpdHR5LiBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgcmVxdWlyZWQgY29uZmlndXJhdGlvbnMuIFNpbmNlIHRoaXMga2Z1bmMgaXMgcmVnaXN0ZXJlZCBmb3IgYEJQRl9QUk9HX1RZUEVfQ0dST1VQX1NLQmAsIEkga25vdyB3ZSYjMzk7bGwgZGVmaW5pdGVseSBuZWVkIGBDT05GSUdfQ0dST1VQX0JQRmAgYW5kIGBDT05GSUdfQlBGX1NZU0NBTExgIGVuYWJsZWQuIEl04oCZcyBhbHNvIHVzaW5nIGBpY21wX3NlbmRgIGFuZCBgaWNtcHY2X3NlbmRgLCBzbyBgQ09ORklHX0lORVRgIGFuZCBgQ09ORklHX0lQVjZgIGFyZSBkZWZpbml0ZWx5IGdvaW5nIHRvIGJlIHJlbGV2YW50LCBhcyBjb25maXJtZWQgYnkgdGhvc2UgcHJlcHJvY2Vzc29yIGRpcmVjdGl2ZXMuCgpUbyBiZSBleHRyYSBzdXJlIGFib3V0IHRoZSBjb25maWcsIEkgd2lsbCBjaGVjayBgbmV0L2NvcmUvZmlsdGVyLmNgIGl0c2VsZi4KTGV0JiMzOTtzIGNvbmZpcm0gdGhlIGNvZGUsIGFuZCBjb25maXJtIGBicGZfaWNtcF9zZW5kYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNCAxOToxNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDticGZfaWNtcF9zZW5kJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9jb3JlL2ZpbHRlci5jPTEyNDkxPV9fYnBmX2tmdW5jIGludCBicGZfeGRwX3B1bGxfZGF0YShzdHJ1Y3QgeGRwX21kICp4LCB1MzIgbGVuKVxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTEyNTUyLS8qKlxubmV0L2NvcmUvZmlsdGVyLmM6MTI1NTM6ICogYnBmX2ljbXBfc2VuZCAtIFNlbmQgYW4gSUNNUCBjb250cm9sIG1lc3NhZ2Vcbm5ldC9jb3JlL2ZpbHRlci5jLTEyNTU0LSAqIEBza2JfY3R4OiBQYWNrZXQgdGhhdCB0cmlnZ2VyZWQgdGhlIGNvbnRyb2wgbWVzc2FnZVxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTEyNTcyLSAqL1xubmV0L2NvcmUvZmlsdGVyLmM6MTI1NzM6X19icGZfa2Z1bmMgaW50IGJwZl9pY21wX3NlbmQoc3RydWN0IF9fc2tfYnVmZiAqc2tiX2N0eCwgaW50IHR5cGUsIGludCBjb2RlKVxubmV0L2NvcmUvZmlsdGVyLmMtMTI1NzQte1xuLS1cbm5ldC9jb3JlL2ZpbHRlci5jPTEyNjcyPUJURl9LRlVOQ1NfU1RBUlQoYnBmX2tmdW5jX2NoZWNrX3NldF9pY21wX3NlbmQpXG5uZXQvY29yZS9maWx0ZXIuYzoxMjY3MzpCVEZfSURfRkxBR1MoZnVuYywgYnBmX2ljbXBfc2VuZClcbm5ldC9jb3JlL2ZpbHRlci5jLTEyNjc0LUJURl9LRlVOQ1NfRU5EKGJwZl9rZnVuY19jaGVja19zZXRfaWNtcF9zZW5kKVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9pY21wX3NlbmQuYz0yMT1pbnQgZWdyZXNzKHN0cnVjdCBfX3NrX2J1ZmYgKnNrYilcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvaWNtcF9zZW5kLmMtNjYtXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvaWNtcF9zZW5kLmM6Njc6XHRrZnVuY19yZXQgPSBicGZfaWNtcF9zZW5kKHNrYiwgdW5yZWFjaF90eXBlLCB1bnJlYWNoX2NvZGUpO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2ljbXBfc2VuZC5jLTY4LVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9pY21wX3NlbmQuYz03Mz1pbnQgcmVjdXJzaW9uKHN0cnVjdCBfX3NrX2J1ZmYgKnNrYilcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvaWNtcF9zZW5kLmMtMTExLVx0ICovXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvaWNtcF9zZW5kLmM6MTEyOlx0cmV0ID0gYnBmX2ljbXBfc2VuZChza2IsIHVucmVhY2hfdHlwZSwgdW5yZWFjaF9jb2RlKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9pY21wX3NlbmQuYy0xMTMtXHRyZWNfa2Z1bmNfcmV0c1tyZWNfY291bnQgXHUwMDI2IDFdID0gcmV0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI0IDE5OjE0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk2MTMKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAyNjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBgYnBmX2ljbXBfc2VuZGAga2Z1bmMqKgoKT2theSwgc28gSSBzZWUgdGhhdCBgYnBmX2ljbXBfc2VuZGAgaXMgYmVpbmcgYnJvdWdodCBpbiB0aHJvdWdoIGBicGZfa2Z1bmNfY2hlY2tfc2V0X2ljbXBfc2VuZGAgYW5kIHJlZ2lzdGVyZWQgZm9yIGBCUEZfUFJPR19UWVBFX0NHUk9VUF9TS0JgLiBUaGF0IG1lYW5zIGBDT05GSUdfQ0dST1VQX0JQRmAgaXMgZGVmaW5pdGVseSBhIHByZXJlcXVpc2l0ZS4gSSBrbm93IHRoYXQgbXVjaC4KCk5vdywgbGV0JiMzOTtzIG1ha2Ugc3VyZSB3ZSYjMzk7dmUgZ290IGFsbCB0aGUgZHVja3MgaW4gYSByb3cgY29uZmlnLXdpc2UuIEkmIzM5O20gdGhpbmtpbmcuLi4gZm9yIHRoZSBhY3R1YWwgSUNNUCBzZW5kIGZ1bmN0aW9uYWxpdHksIHdlJiMzOTtyZSBnb2luZyB0byBuZWVkIGBDT05GSUdfSU5FVGAgYW5kIGBDT05GSUdfSVBWNmAsIGZvciBzdXJlLiBBbmQsIG9idmlvdXNseSwgc2luY2Ugd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBCUEYsIGBDT05GSUdfQlBGX1NZU0NBTExgIGlzIGEgZ2l2ZW4uCgpKdXN0IHRvIGJlIGFic29sdXRlbHkgY2xlYXIgaW4gbXkgbWluZCwgdGhlIGNyaXRpY2FsIHN5bWJvbCB3ZSYjMzk7cmUgZm9jdXNpbmcgb24gaGVyZSBpcyBgYnBmX2ljbXBfc2VuZGAuCgpMZXQgbWUgcXVpY2tseSBjb25maXJtIHRoYXQgaXQmIzM5O3MgdGhlIG9ubHkgZnVuY3Rpb24gYmVpbmcgYWRkZWQuIFllcywgdGhhdCYjMzk7cyByaWdodCwganVzdCB0aGUgb25lLgoKQWxyaWdodCwgbGV0JiMzOTtzIHJ1biB0aHJvdWdoIHRob3NlIGNvbmZpZ3VyYXRpb25zIG9uZSBtb3JlIHRpbWUgdG8gbWFrZSBzdXJlIEkmIzM5O20gbm90IG1pc3NpbmcgYW55dGhpbmc6CgoqICAgYENPTkZJR19DR1JPVVBfQlBGYAoqICAgYENPTkZJR19JTkVUYAoqICAgYENPTkZJR19JUFY2YAoqICAgYENPTkZJR19CUEZfU1lTQ0FMTGAKCk9rYXksIGFyZSB0aGVyZSBhbnkgb3RoZXIgZGVwZW5kZW5jaWVzIEkgbmVlZCB0byBiZSBhd2FyZSBvZj8gTGV0IG1lIHRha2UgYSBsb29rIGF0IGBuZXQvY29yZS9maWx0ZXIuY2AgYXJvdW5kIHRoZSBgcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldGAgY2FsbC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNCAxOToxNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtyZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0LipicGZfa2Z1bmNfc2V0X2ljbXBfc2VuZCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvY29yZS9maWx0ZXIuYz0xMjcxMT1zdGF0aWMgaW50IF9faW5pdCBicGZfa2Z1bmNfaW5pdCh2b2lkKVxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTEyNzMxLVx0cmV0ID0gcmV0ID86IHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9TQ0hFRF9DTFMsIFx1MDAyNmJwZl9rZnVuY19zZXRfdGNwX3JlcXNrKTtcbm5ldC9jb3JlL2ZpbHRlci5jOjEyNzMyOlx0cmV0ID0gcmV0ID86IHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9DR1JPVVBfU0tCLCBcdTAwMjZicGZfa2Z1bmNfc2V0X2ljbXBfc2VuZCk7XG5uZXQvY29yZS9maWx0ZXIuYy0xMjczMy1cdHJldHVybiByZXQgPzogcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX1NPQ0tfT1BTLCBcdTAwMjZicGZfa2Z1bmNfc2V0X3NvY2tfb3BzKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNCAxOToxNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDQ3NAoJCQkJCQkJb3V0cHV0OiAxMjcKCQkJCQkJCXRob3VnaHRzOiAyMjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBGdXp6aW5nIFBvdGVudGlhbCBvZiBgYnBmX2ljbXBfc2VuZGAqKgoKT2theSwgc28gdGhlIGBicGZfaWNtcF9zZW5kYCBmdW5jdGlvbiBpcyB0aGUgKm9ubHkqIHN5bWJvbCBmbGFnZ2VkIGFzIHRoZSBwcmltYXJ5IGZvY3VzIGhlcmUuIFRoYXQsIGluIGl0c2VsZiwgaXMgc2lnbmlmaWNhbnQuIFRoZSBjb25maWd1cmF0aW9uIHByZXJlcXVpc2l0ZXMgYXJlIGBDR1JPVVBfQlBGYCwgYEJQRl9TWVNDQUxMYCwgYElORVRgLCBhbmQgYElQVjZgIOKAkyB0aGUgdXN1YWwgc3VzcGVjdHMgZm9yIG5ldHdvcmstcmVsYXRlZCBCUEYgZnV6emluZy4KCkFoYSEgYGJwZl9pY21wX3NlbmRgIGlzIGEgQlBGIGtmdW5jLiBUaGF0IGNoYW5nZXMgdGhlIGdhbWUuIElmIGl0JiMzOTtzIGEga2Z1bmMsIGl0IG1lYW5zIFN5emthbGxlciAqbmVlZHMqIHRvIGtub3cgYWJvdXQgaXQuIFRoYW5rZnVsbHksIFN5emthbGxlciBpbnRlbGxpZ2VudGx5IGV4dHJhY3RzIGtmdW5jcyBmcm9tIEJURiBpbmZvcm1hdGlvbi4gU28sIGFzIGxvbmcgYXMgdGhpcyBmdW5jdGlvbiBpcyBwcm9wZXJseSBkZWZpbmVkIGluIHRoZSBrZXJuZWwgQlRGLCBTeXprYWxsZXIgd2lsbCBhdXRvbWF0aWNhbGx5IHBpY2sgaXQgdXAsIGVsaW1pbmF0aW5nIGEgbWFudWFsIGludGVncmF0aW9uIGVmZm9ydC4gVGhhdCYjMzk7cyBnb29kIG5ld3MuCgpHaXZlbiB0aGF0IGl0IGlzIGEga2Z1bmMsIHRoZSBwYXRjaCAqYWJzb2x1dGVseSogd2FycmFudHMgZnV6emluZy4gVGhlIGZhY3QgdGhhdCBpdCYjMzk7cyBhIG5ldyBmZWF0dXJlLCBzcGVjaWZpY2FsbHkgYSBuZXcgQlBGIGtmdW5jLCB0aGF0IGFsbG93cyB1c2Vyc3BhY2UgQlBGIHByb2dyYW1zIGF0dGFjaGVkIHRvIGNncm91cCBza2IgaG9va3MgdG8gc2VuZCBJQ01QIGNvbnRyb2wgbWVzc2FnZXPigKYgdGhhdCYjMzk7cyBhIHBlcmZlY3QgdGFyZ2V0LiBUaGlzIGlzIGEgKmRpcmVjdCogbmV3IGZ1bmN0aW9uYWwgZmVhdHVyZSBleHBvc2VkIHRvIHVzZXJzcGFjZSB2aWEgQlBGIHByb2dyYW1zLCB3aGljaCBpcyB0aGUgZGVmaW5pdGlvbiBvZiBhIHByaW1lIGZ1enppbmcgdGFyZ2V0LgoKQWxyaWdodCwgSSYjMzk7bSByZWFkeSB0byBmb3JtYWxpemUgbXkgYXNzZXNzbWVudDoKCmBgYApXb3J0aEZ1enppbmc6IHRydWUKRm9jdXNTeW1ib2xzOiBbJiMzNDticGZfaWNtcF9zZW5kJiMzNDtdCkVuYWJsZUNvbmZpZ3M6IFsmIzM0O0NHUk9VUF9CUEYmIzM0OywgJiMzNDtCUEZfU1lTQ0FMTCYjMzQ7LCAmIzM0O0lORVQmIzM0OywgJiMzNDtJUFY2JiMzNDtdClJlYXNvbmluZzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBCUEYga2Z1bmMgYGJwZl9pY21wX3NlbmRgIHdoaWNoIGFsbG93cyBCUEYgcHJvZ3JhbXMgYXR0YWNoZWQgdG8gY2dyb3VwIHNrYiBob29rcyB0byBzZW5kIElDTVAgY29udHJvbCBtZXNzYWdlcy4gVGhpcyBpcyBhIG5ldyBmdW5jdGlvbmFsIGZlYXR1cmUgdGhhdCBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIEJQRiBwcm9ncmFtcywgbWFraW5nIGl0IGEgcHJpbWUgdGFyZ2V0IGZvciBmdXp6aW5nLiYjMzQ7CmBgYAoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI0IDE5OjE0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtDR1JPVVBfQlBGJiMzNDssCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDssCiAgICAmIzM0O0lORVQmIzM0OywKICAgICYjMzQ7SVBWNiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2JwZl9pY21wX3NlbmQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBCUEYga2Z1bmMgYGJwZl9pY21wX3NlbmRgIHdoaWNoIGFsbG93cyBCUEYgcHJvZ3JhbXMgYXR0YWNoZWQgdG8gY2dyb3VwIHNrYiBob29rcyB0byBzZW5kIElDTVAgY29udHJvbCBtZXNzYWdlcy4gVGhpcyBpcyBhIG5ldyBmdW5jdGlvbmFsIGZlYXR1cmUgdGhhdCBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIEJQRiBwcm9ncmFtcywgbWFraW5nIGl0IGEgcHJpbWUgdGFyZ2V0IGZvciBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtDR1JPVVBfQlBGJiMzNDssCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDssCiAgICAmIzM0O0lORVQmIzM0OywKICAgICYjMzQ7SVBWNiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2JwZl9pY21wX3NlbmQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBCUEYga2Z1bmMgYGJwZl9pY21wX3NlbmRgIHdoaWNoIGFsbG93cyBCUEYgcHJvZ3JhbXMgYXR0YWNoZWQgdG8gY2dyb3VwIHNrYiBob29rcyB0byBzZW5kIElDTVAgY29udHJvbCBtZXNzYWdlcy4gVGhpcyBpcyBhIG5ldyBmdW5jdGlvbmFsIGZlYXR1cmUgdGhhdCBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIEJQRiBwcm9ncmFtcywgbWFraW5nIGl0IGEgcHJpbWUgdGFyZ2V0IGZvciBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDYtMjRUMTk6MTQ6MzYuMTIwODg1OTU3WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjMyMjM5MjA0MjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQ0dST1VQX0JQRlwiLFxuICAgIFwiQlBGX1NZU0NBTExcIixcbiAgICBcIklORVRcIixcbiAgICBcIklQVjZcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJicGZfaWNtcF9zZW5kXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBCUEYga2Z1bmMgYGJwZl9pY21wX3NlbmRgIHdoaWNoIGFsbG93cyBCUEYgcHJvZ3JhbXMgYXR0YWNoZWQgdG8gY2dyb3VwIHNrYiBob29rcyB0byBzZW5kIElDTVAgY29udHJvbCBtZXNzYWdlcy4gVGhpcyBpcyBhIG5ldyBmdW5jdGlvbmFsIGZlYXR1cmUgdGhhdCBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIEJQRiBwcm9ncmFtcywgbWFraW5nIGl0IGEgcHJpbWUgdGFyZ2V0IGZvciBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNFQxOToxNDozNi4xMjA4OTA2MTdaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM3ODgwNzc3MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDU0YTQ5MjlkM2QzNDJlZTVmNjlkNGY3NmFmNzI3ZjlkZWE5MWM5MTFcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFdlZCBKdW4gMjQgMTk6MTQ6MzUgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUvZmlsdGVyLmMgYi9uZXQvY29yZS9maWx0ZXIuY1xcbmluZGV4IDJlOTZiNGI4NDdjZTEyLi5mM2FhNDk0ZWQxMDUzMCAxMDA2NDRcXG4tLS0gYS9uZXQvY29yZS9maWx0ZXIuY1xcbisrKyBiL25ldC9jb3JlL2ZpbHRlci5jXFxuQEAgLTg0LDYgKzg0LDkgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3VuLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NuZXQveGRwX3NvY2tfZHJ2LmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NuZXQvaW5ldF9kc2NwLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9pY21wdjYuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY25ldC9pY21wLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NuZXQvaXA2X3JvdXRlLmhcXHUwMDNlXFxuIFxcbiAjaW5jbHVkZSBcXFwiZGV2LmhcXFwiXFxuIFxcbkBAIC0xMjU0Niw2ICsxMjU0OSw4NCBAQCBfX2JwZl9rZnVuYyBpbnQgYnBmX3hkcF9wdWxsX2RhdGEoc3RydWN0IHhkcF9tZCAqeCwgdTMyIGxlbilcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuKy8qKlxcbisgKiBicGZfaWNtcF9zZW5kIC0gU2VuZCBhbiBJQ01QIGNvbnRyb2wgbWVzc2FnZVxcbisgKiBAc2tiX2N0eDogUGFja2V0IHRoYXQgdHJpZ2dlcmVkIHRoZSBjb250cm9sIG1lc3NhZ2VcXG4rICogQHR5cGU6IElDTVAgdHlwZSAob25seSBJQ01QX0RFU1RfVU5SRUFDSC9JQ01QVjZfREVTVF9VTlJFQUNIIHN1cHBvcnRlZClcXG4rICogQGNvZGU6IElDTVAgY29kZSAoMC0xNSBleGNlcHQgSUNNUF9GUkFHX05FRURFRCBmb3IgSVB2NCwgMC02IGZvciBJUHY2KVxcbisgKlxcbisgKiBTZW5kcyBhbiBJQ01QIGNvbnRyb2wgbWVzc2FnZSBpbiByZXNwb25zZSB0byB0aGUgcGFja2V0LiBUaGUgb3JpZ2luYWwgcGFja2V0XFxuKyAqIGlzIGNsb25lZCBiZWZvcmUgc2VuZGluZyB0aGUgSUNNUCBtZXNzYWdlLCBzbyB0aGUgQlBGIHByb2dyYW0gY2FuIHN0aWxsIGxldFxcbisgKiB0aGUgcGFja2V0IHBhc3MgaWYgZGVzaXJlZC5cXG4rICpcXG4rICogQ3VycmVudGx5IG9ubHkgSUNNUF9ERVNUX1VOUkVBQ0ggKElQdjQpIGFuZCBJQ01QVjZfREVTVF9VTlJFQUNIIChJUHY2KSBhcmVcXG4rICogc3VwcG9ydGVkLlxcbisgKlxcbisgKiBSZXR1cm46IDAgb24gc3VjY2VzcyAoc2VuZCBhdHRlbXB0KSwgbmVnYXRpdmUgZXJyb3IgY29kZSBvbiBmYWlsdXJlOlxcbisgKiAgICAgICAgIC1FQlVTWTogUmVjdXJzaW9uIGRldGVjdGVkXFxuKyAqICAgICAgICAgLUVQUk9UT05PU1VQUE9SVDogTm9uLUlQIHByb3RvY29sXFxuKyAqICAgICAgICAgLUVPUE5PVFNVUFA6IFVuc3VwcG9ydGVkIElDTVAgdHlwZVxcbisgKiAgICAgICAgIC1FSU5WQUw6IEludmFsaWQgY29kZSBwYXJhbWV0ZXJcXG4rICogICAgICAgICAtRU5FVFVOUkVBQ0g6IFVudXNhYmxlIElQdjQgcm91dGUvZHN0IGF0dGFjaGVkIHRvIHRoZSBza2JcXG4rICogICAgICAgICAtRU5PTUVNOiBNZW1vcnkgYWxsb2NhdGlvbiBmYWlsZWRcXG4rICovXFxuK19fYnBmX2tmdW5jIGludCBicGZfaWNtcF9zZW5kKHN0cnVjdCBfX3NrX2J1ZmYgKnNrYl9jdHgsIGludCB0eXBlLCBpbnQgY29kZSlcXG4re1xcbitcXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gKHN0cnVjdCBza19idWZmICopc2tiX2N0eDtcXG4rXFx0c3RydWN0IHNrX2J1ZmYgKm5za2I7XFxuK1xcdHN0cnVjdCBzb2NrICpzaztcXG4rXFxuK1xcdHNrID0gc2tiX3RvX2Z1bGxfc2soc2tiKTtcXG4rXFx0aWYgKHNrIFxcdTAwMjZcXHUwMDI2IHNrLVxcdTAwM2Vza19rZXJuX3NvY2sgXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgIChzay1cXHUwMDNlc2tfcHJvdG9jb2wgPT0gSVBQUk9UT19JQ01QIHx8IHNrLVxcdTAwM2Vza19wcm90b2NvbCA9PSBJUFBST1RPX0lDTVBWNikpXFxuK1xcdFxcdHJldHVybiAtRUJVU1k7XFxuK1xcbitcXHRzd2l0Y2ggKHNrYi1cXHUwMDNlcHJvdG9jb2wpIHtcXG4rI2lmIElTX0VOQUJMRUQoQ09ORklHX0lORVQpXFxuK1xcdGNhc2UgaHRvbnMoRVRIX1BfSVApOiB7XFxuK1xcdFxcdGlmICh0eXBlICE9IElDTVBfREVTVF9VTlJFQUNIKVxcbitcXHRcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuK1xcdFxcdGlmIChjb2RlIFxcdTAwM2MgMCB8fCBjb2RlIFxcdTAwM2UgTlJfSUNNUF9VTlJFQUNIIHx8XFxuK1xcdFxcdCAgICBjb2RlID09IElDTVBfRlJBR19ORUVERUQpIC8qIG5lZWRzIGEgdmFsaWQgbmV4dC1ob3AgTVRVICovXFxuK1xcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXG4rXFx0XFx0LyogaWNtcF9zZW5kIHJlcXVpcmVzIGEgcnRhYmxlOyB0ZXN0LXJ1biBzeW50aGV0aWMgc2ticyBsYWNrIG9uZS4gKi9cXG4rXFx0XFx0aWYgKCFza2JfdmFsaWRfZHN0KHNrYikpXFxuK1xcdFxcdFxcdHJldHVybiAtRU5FVFVOUkVBQ0g7XFxuK1xcbitcXHRcXHRuc2tiID0gc2tiX2Nsb25lKHNrYiwgR0ZQX0FUT01JQyk7XFxuK1xcdFxcdGlmICghbnNrYilcXG4rXFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuK1xcbitcXHRcXHRtZW1zZXQoSVBDQihuc2tiKSwgMCwgc2l6ZW9mKCpJUENCKG5za2IpKSk7XFxuK1xcdFxcdGljbXBfc2VuZChuc2tiLCB0eXBlLCBjb2RlLCAwKTtcXG4rXFx0XFx0Y29uc3VtZV9za2IobnNrYik7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHR9XFxuKyNlbmRpZlxcbisjaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNilcXG4rXFx0Y2FzZSBodG9ucyhFVEhfUF9JUFY2KTpcXG4rXFx0XFx0aWYgKHR5cGUgIT0gSUNNUFY2X0RFU1RfVU5SRUFDSClcXG4rXFx0XFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbitcXHRcXHRpZiAoY29kZSBcXHUwMDNjIDAgfHwgY29kZSBcXHUwMDNlIElDTVBWNl9SRUpFQ1RfUk9VVEUpXFxuK1xcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXG4rXFx0XFx0bnNrYiA9IHNrYl9jbG9uZShza2IsIEdGUF9BVE9NSUMpO1xcbitcXHRcXHRpZiAoIW5za2IpXFxuK1xcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbitcXG4rXFx0XFx0bWVtc2V0KElQNkNCKG5za2IpLCAwLCBzaXplb2YoKklQNkNCKG5za2IpKSk7XFxuK1xcdFxcdGljbXB2Nl9zZW5kKG5za2IsIHR5cGUsIGNvZGUsIDApO1xcbitcXHRcXHRjb25zdW1lX3NrYihuc2tiKTtcXG4rXFx0XFx0YnJlYWs7XFxuKyNlbmRpZlxcbitcXHRkZWZhdWx0OlxcbitcXHRcXHRyZXR1cm4gLUVQUk9UT05PU1VQUE9SVDtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuIF9fYnBmX2tmdW5jX2VuZF9kZWZzKCk7XFxuIFxcbiBpbnQgYnBmX2R5bnB0cl9mcm9tX3NrYl9yZG9ubHkoc3RydWN0IF9fc2tfYnVmZiAqc2tiLCB1NjQgZmxhZ3MsXFxuQEAgLTEyNTg4LDYgKzEyNjY5LDEwIEBAIEJURl9LRlVOQ1NfU1RBUlQoYnBmX2tmdW5jX2NoZWNrX3NldF9zb2NrX29wcylcXG4gQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9zb2NrX29wc19lbmFibGVfdHhfdHN0YW1wKVxcbiBCVEZfS0ZVTkNTX0VORChicGZfa2Z1bmNfY2hlY2tfc2V0X3NvY2tfb3BzKVxcbiBcXG4rQlRGX0tGVU5DU19TVEFSVChicGZfa2Z1bmNfY2hlY2tfc2V0X2ljbXBfc2VuZClcXG4rQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9pY21wX3NlbmQpXFxuK0JURl9LRlVOQ1NfRU5EKGJwZl9rZnVuY19jaGVja19zZXRfaWNtcF9zZW5kKVxcbitcXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBidGZfa2Z1bmNfaWRfc2V0IGJwZl9rZnVuY19zZXRfc2tiID0ge1xcbiBcXHQub3duZXIgPSBUSElTX01PRFVMRSxcXG4gXFx0LnNldCA9IFxcdTAwMjZicGZfa2Z1bmNfY2hlY2tfc2V0X3NrYixcXG5AQCAtMTI2MTgsNiArMTI3MDMsMTEgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBidGZfa2Z1bmNfaWRfc2V0IGJwZl9rZnVuY19zZXRfc29ja19vcHMgPSB7XFxuIFxcdC5zZXQgPSBcXHUwMDI2YnBmX2tmdW5jX2NoZWNrX3NldF9zb2NrX29wcyxcXG4gfTtcXG4gXFxuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYnRmX2tmdW5jX2lkX3NldCBicGZfa2Z1bmNfc2V0X2ljbXBfc2VuZCA9IHtcXG4rXFx0Lm93bmVyID0gVEhJU19NT0RVTEUsXFxuK1xcdC5zZXQgPSBcXHUwMDI2YnBmX2tmdW5jX2NoZWNrX3NldF9pY21wX3NlbmQsXFxuK307XFxuK1xcbiBzdGF0aWMgaW50IF9faW5pdCBicGZfa2Z1bmNfaW5pdCh2b2lkKVxcbiB7XFxuIFxcdGludCByZXQ7XFxuQEAgLTEyNjM5LDYgKzEyNzI5LDcgQEAgc3RhdGljIGludCBfX2luaXQgYnBmX2tmdW5jX2luaXQodm9pZClcXG4gXFx0cmV0ID0gcmV0ID86IHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9DR1JPVVBfU09DS19BRERSLFxcbiBcXHRcXHRcXHRcXHRcXHQgICAgICAgXFx1MDAyNmJwZl9rZnVuY19zZXRfc29ja19hZGRyKTtcXG4gXFx0cmV0ID0gcmV0ID86IHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9TQ0hFRF9DTFMsIFxcdTAwMjZicGZfa2Z1bmNfc2V0X3RjcF9yZXFzayk7XFxuK1xcdHJldCA9IHJldCA/OiByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfQ0dST1VQX1NLQiwgXFx1MDAyNmJwZl9rZnVuY19zZXRfaWNtcF9zZW5kKTtcXG4gXFx0cmV0dXJuIHJldCA/OiByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfU09DS19PUFMsIFxcdTAwMjZicGZfa2Z1bmNfc2V0X3NvY2tfb3BzKTtcXG4gfVxcbiBsYXRlX2luaXRjYWxsKGJwZl9rZnVuY19pbml0KTtcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvaWNtcF9zZW5kX2tmdW5jLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9pY21wX3NlbmRfa2Z1bmMuY1xcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLmZmYWYwZmUxODgwYjBlXFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2ljbXBfc2VuZF9rZnVuYy5jXFxuQEAgLTAsMCArMSwyNjkgQEBcXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG4rI2luY2x1ZGUgXFx1MDAzY3Rlc3RfcHJvZ3MuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY25ldHdvcmtfaGVscGVycy5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjY2dyb3VwX2hlbHBlcnMuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2VycnF1ZXVlLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2Nwb2xsLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2N1bmlzdGQuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFxcImljbXBfc2VuZC5za2VsLmhcXFwiXFxuK1xcbisjZGVmaW5lIFRJTUVPVVRfTVMgMTAwMFxcbitcXG4rI2RlZmluZSBJQ01QX0RFU1RfVU5SRUFDSCAzXFxuKyNkZWZpbmUgSUNNUFY2X0RFU1RfVU5SRUFDSCAxXFxuK1xcbisjZGVmaW5lIElDTVBfSE9TVF9VTlJFQUNIIDFcXG4rI2RlZmluZSBJQ01QX0ZSQUdfTkVFREVEIDRcXG4rI2RlZmluZSBOUl9JQ01QX1VOUkVBQ0ggMTVcXG4rI2RlZmluZSBJQ01QVjZfUkVKRUNUX1JPVVRFIDZcXG4rXFxuKyNkZWZpbmUgS0ZVTkNfUkVUX1VOU0VUIC0xXFxuK1xcbitzdGF0aWMgaW50IGNvbm5lY3RfdG9fZmRfbm9uYmxvY2soaW50IHNlcnZlcl9mZClcXG4re1xcbitcXHRzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZSBhZGRyO1xcbitcXHRzb2NrbGVuX3QgbGVuID0gc2l6ZW9mKGFkZHIpO1xcbitcXHRpbnQgZmQsIGVyciwgb24gPSAxO1xcbitcXG4rXFx0aWYgKGdldHNvY2tuYW1lKHNlcnZlcl9mZCwgKHN0cnVjdCBzb2NrYWRkciAqKVxcdTAwMjZhZGRyLCBcXHUwMDI2bGVuKSlcXG4rXFx0XFx0cmV0dXJuIC0xO1xcbitcXG4rXFx0ZmQgPSBzb2NrZXQoYWRkci5zc19mYW1pbHksIFNPQ0tfU1RSRUFNIHwgU09DS19OT05CTE9DSywgMCk7XFxuK1xcdGlmIChmZCBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybiAtMTtcXG4rXFxuK1xcdGlmIChhZGRyLnNzX2ZhbWlseSA9PSBBRl9JTkVUNiBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAgc2V0c29ja29wdChmZCwgSVBQUk9UT19JUFY2LCBJUFY2X1JFQ1ZFUlIsIFxcdTAwMjZvbiwgc2l6ZW9mKG9uKSkgXFx1MDAzYyAwKSB7XFxuK1xcdFxcdGNsb3NlKGZkKTtcXG4rXFx0XFx0cmV0dXJuIC0xO1xcbitcXHR9XFxuK1xcbitcXHRlcnIgPSBjb25uZWN0KGZkLCAoc3RydWN0IHNvY2thZGRyICopXFx1MDAyNmFkZHIsIGxlbik7XFxuK1xcdGlmIChlcnIgXFx1MDAzYyAwIFxcdTAwMjZcXHUwMDI2IGVycm5vICE9IEVJTlBST0dSRVNTKSB7XFxuK1xcdFxcdGNsb3NlKGZkKTtcXG4rXFx0XFx0cmV0dXJuIC0xO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gZmQ7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIHJlYWRfaWNtcF9lcnJxdWV1ZShpbnQgc29ja2ZkLCBpbnQgZXhwZWN0ZWRfY29kZSwgaW50IGFmKVxcbit7XFxuK1xcdGludCBleHBlY3RlZF9lZV90eXBlID0gKGFmID09IEFGX0lORVQpID8gSUNNUF9ERVNUX1VOUkVBQ0ggOlxcbitcXHRcXHRcXHRcXHRcXHRcXHQgSUNNUFY2X0RFU1RfVU5SRUFDSDtcXG4rXFx0aW50IGV4cGVjdGVkX29yaWdpbiA9IChhZiA9PSBBRl9JTkVUKSA/IFNPX0VFX09SSUdJTl9JQ01QIDpcXG4rXFx0XFx0XFx0XFx0XFx0XFx0U09fRUVfT1JJR0lOX0lDTVA2O1xcbitcXHRpbnQgZXhwZWN0ZWRfbGV2ZWwgPSAoYWYgPT0gQUZfSU5FVCkgPyBJUFBST1RPX0lQIDogSVBQUk9UT19JUFY2O1xcbitcXHRpbnQgZXhwZWN0ZWRfdHlwZSA9IChhZiA9PSBBRl9JTkVUKSA/IElQX1JFQ1ZFUlIgOiBJUFY2X1JFQ1ZFUlI7XFxuK1xcdHN0cnVjdCBzb2NrX2V4dGVuZGVkX2VyciAqc29ja19lcnI7XFxuK1xcdGNoYXIgY3RybF9idWZbNTEyXTtcXG4rXFx0c3RydWN0IG1zZ2hkciBtc2cgPSB7XFxuK1xcdFxcdC5tc2dfY29udHJvbCA9IGN0cmxfYnVmLFxcbitcXHRcXHQubXNnX2NvbnRyb2xsZW4gPSBzaXplb2YoY3RybF9idWYpLFxcbitcXHR9O1xcbitcXHRzdHJ1Y3QgcG9sbGZkIHBmZCA9IHtcXG4rXFx0XFx0LmZkID0gc29ja2ZkLFxcbitcXHRcXHQuZXZlbnRzID0gUE9MTEVSUixcXG4rXFx0fTtcXG4rXFx0c3RydWN0IGNtc2doZHIgKmNtO1xcbitcXHRzc2l6ZV90IG47XFxuK1xcbitcXHRpZiAoIUFTU0VSVF9HRShwb2xsKFxcdTAwMjZwZmQsIDEsIFRJTUVPVVRfTVMpLCAxLCBcXFwicG9sbF9lcnJxdWV1ZVxcXCIpKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHRuID0gcmVjdm1zZyhzb2NrZmQsIFxcdTAwMjZtc2csIE1TR19FUlJRVUVVRSk7XFxuK1xcdGlmICghQVNTRVJUX0dFKG4sIDAsIFxcXCJyZWN2bXNnX2VycnF1ZXVlXFxcIikpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdGNtID0gQ01TR19GSVJTVEhEUihcXHUwMDI2bXNnKTtcXG4rXFx0aWYgKCFBU1NFUlRfTkVRKGNtLCBOVUxMLCBcXFwiY21fZmlyc3RoZHJfbnVsbFxcXCIpKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHRmb3IgKDsgY207IGNtID0gQ01TR19OWFRIRFIoXFx1MDAyNm1zZywgY20pKSB7XFxuK1xcdFxcdGlmIChjbS1cXHUwMDNlY21zZ19sZXZlbCAhPSBleHBlY3RlZF9sZXZlbCB8fFxcbitcXHRcXHQgICAgY20tXFx1MDAzZWNtc2dfdHlwZSAhPSBleHBlY3RlZF90eXBlKVxcbitcXHRcXHRcXHRjb250aW51ZTtcXG4rXFxuK1xcdFxcdHNvY2tfZXJyID0gKHN0cnVjdCBzb2NrX2V4dGVuZGVkX2VyciAqKUNNU0dfREFUQShjbSk7XFxuK1xcbitcXHRcXHRpZiAoIUFTU0VSVF9FUShzb2NrX2Vyci1cXHUwMDNlZWVfb3JpZ2luLCBleHBlY3RlZF9vcmlnaW4sXFxuK1xcdFxcdFxcdCAgICAgICBcXFwic29ja19lcnJfb3JpZ2luXFxcIikpXFxuK1xcdFxcdFxcdHJldHVybjtcXG4rXFx0XFx0aWYgKCFBU1NFUlRfRVEoc29ja19lcnItXFx1MDAzZWVlX3R5cGUsIGV4cGVjdGVkX2VlX3R5cGUsXFxuK1xcdFxcdFxcdCAgICAgICBcXFwic29ja19lcnJfdHlwZV9kZXN0X3VucmVhY2hcXFwiKSlcXG4rXFx0XFx0XFx0cmV0dXJuO1xcbitcXHRcXHRBU1NFUlRfRVEoc29ja19lcnItXFx1MDAzZWVlX2NvZGUsIGV4cGVjdGVkX2NvZGUsIFxcXCJzb2NrX2Vycl9jb2RlXFxcIik7XFxuK1xcdFxcdHJldHVybjtcXG4rXFx0fVxcbitcXG4rXFx0QVNTRVJUX0ZBSUwoXFxcIm5vIElQX1JFQ1ZFUlIvSVBWNl9SRUNWRVJSIGNvbnRyb2wgbWVzc2FnZSBmb3VuZFxcXCIpO1xcbit9XFxuK1xcbitzdGF0aWMgYm9vbCB2YWxpZF91bnJlYWNoX2NvZGUoaW50IGNvZGUsIGludCBhZilcXG4re1xcbitcXHRpZiAoY29kZSBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybiBmYWxzZTtcXG4rXFxuK1xcdGlmIChhZiA9PSBBRl9JTkVUKVxcbitcXHRcXHRyZXR1cm4gY29kZSBcXHUwMDNjPSBOUl9JQ01QX1VOUkVBQ0ggXFx1MDAyNlxcdTAwMjYgY29kZSAhPSBJQ01QX0ZSQUdfTkVFREVEO1xcbitcXG4rXFx0cmV0dXJuIGNvZGUgXFx1MDAzYz0gSUNNUFY2X1JFSkVDVF9ST1VURTtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgdHJpZ2dlcl9wcm9nX3JlYWRfaWNtcF9lcnJxdWV1ZShzdHJ1Y3QgaWNtcF9zZW5kICpza2VsLCBpbnQgY29kZSxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgIGludCBhZiwgY29uc3QgY2hhciAqaXApXFxuK3tcXG4rXFx0aW50IHNydl9mZCA9IC0xLCBjbGllbnRfZmQgPSAtMTtcXG4rXFx0aW50IHBvcnQ7XFxuK1xcbitcXHRzcnZfZmQgPSBzdGFydF9zZXJ2ZXIoYWYsIFNPQ0tfU1RSRUFNLCBpcCwgMCwgVElNRU9VVF9NUyk7XFxuK1xcdGlmICghQVNTRVJUX09LX0ZEKHNydl9mZCwgXFxcInN0YXJ0X3NlcnZlclxcXCIpKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHRwb3J0ID0gZ2V0X3NvY2tldF9sb2NhbF9wb3J0KHNydl9mZCk7XFxuK1xcdGlmICghQVNTRVJUX0dFKHBvcnQsIDAsIFxcXCJnZXRfc29ja2V0X2xvY2FsX3BvcnRcXFwiKSkge1xcbitcXHRcXHRjbG9zZShzcnZfZmQpO1xcbitcXHRcXHRyZXR1cm47XFxuK1xcdH1cXG4rXFxuK1xcdHNrZWwtXFx1MDAzZWJzcy1cXHUwMDNlc2VydmVyX3BvcnQgPSBudG9ocyhwb3J0KTtcXG4rXFx0c2tlbC1cXHUwMDNlYnNzLVxcdTAwM2V1bnJlYWNoX3R5cGUgPSAoYWYgPT0gQUZfSU5FVCkgPyBJQ01QX0RFU1RfVU5SRUFDSCA6XFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgICBJQ01QVjZfREVTVF9VTlJFQUNIO1xcbitcXHRza2VsLVxcdTAwM2Vic3MtXFx1MDAzZXVucmVhY2hfY29kZSA9IGNvZGU7XFxuK1xcdHNrZWwtXFx1MDAzZWRhdGEtXFx1MDAzZWtmdW5jX3JldCA9IEtGVU5DX1JFVF9VTlNFVDtcXG4rXFxuK1xcdGNsaWVudF9mZCA9IGNvbm5lY3RfdG9fZmRfbm9uYmxvY2soc3J2X2ZkKTtcXG4rXFx0aWYgKCFBU1NFUlRfT0tfRkQoY2xpZW50X2ZkLCBcXFwiY2xpZW50X2Nvbm5lY3Rfbm9uYmxvY2tcXFwiKSkge1xcbitcXHRcXHRjbG9zZShzcnZfZmQpO1xcbitcXHRcXHRyZXR1cm47XFxuK1xcdH1cXG4rXFxuK1xcdGlmICh2YWxpZF91bnJlYWNoX2NvZGUoY29kZSwgYWYpKVxcbitcXHRcXHRyZWFkX2ljbXBfZXJycXVldWUoY2xpZW50X2ZkLCBjb2RlLCBhZik7XFxuK1xcbitcXHRjbG9zZShjbGllbnRfZmQpO1xcbitcXHRjbG9zZShzcnZfZmQpO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBydW5faWNtcF90ZXN0KHN0cnVjdCBpY21wX3NlbmQgKnNrZWwsIGludCBhZiwgY29uc3QgY2hhciAqaXAsXFxuK1xcdFxcdFxcdCAgaW50IG1heF9jb2RlKVxcbit7XFxuK1xcdGZvciAoaW50IGNvZGUgPSAwOyBjb2RlIFxcdTAwM2M9IG1heF9jb2RlOyBjb2RlKyspIHtcXG4rXFx0XFx0aWYgKGFmID09IEFGX0lORVQgXFx1MDAyNlxcdTAwMjYgY29kZSA9PSBJQ01QX0ZSQUdfTkVFREVEKVxcbitcXHRcXHRcXHRjb250aW51ZTtcXG4rXFxuK1xcdFxcdHRyaWdnZXJfcHJvZ19yZWFkX2ljbXBfZXJycXVldWUoc2tlbCwgY29kZSwgYWYsIGlwKTtcXG4rXFx0XFx0QVNTRVJUX0VRKHNrZWwtXFx1MDAzZWRhdGEtXFx1MDAzZWtmdW5jX3JldCwgMCwgXFxcImtmdW5jX3JldFxcXCIpO1xcbitcXHR9XFxuK1xcbitcXHQvKiBUZXN0IGludmFsaWQgY29kZXMgKi9cXG4rXFx0dHJpZ2dlcl9wcm9nX3JlYWRfaWNtcF9lcnJxdWV1ZShza2VsLCAtMSwgYWYsIGlwKTtcXG4rXFx0QVNTRVJUX0VRKHNrZWwtXFx1MDAzZWRhdGEtXFx1MDAzZWtmdW5jX3JldCwgLUVJTlZBTCwgXFxcImtmdW5jX3JldFxcXCIpO1xcbitcXG4rXFx0dHJpZ2dlcl9wcm9nX3JlYWRfaWNtcF9lcnJxdWV1ZShza2VsLCBtYXhfY29kZSArIDEsIGFmLCBpcCk7XFxuK1xcdEFTU0VSVF9FUShza2VsLVxcdTAwM2VkYXRhLVxcdTAwM2VrZnVuY19yZXQsIC1FSU5WQUwsIFxcXCJrZnVuY19yZXRcXFwiKTtcXG4rXFxuK1xcdGlmIChhZiA9PSBBRl9JTkVUKSB7XFxuK1xcdFxcdHRyaWdnZXJfcHJvZ19yZWFkX2ljbXBfZXJycXVldWUoc2tlbCwgSUNNUF9GUkFHX05FRURFRCwgYWYsIGlwKTtcXG4rXFx0XFx0QVNTRVJUX0VRKHNrZWwtXFx1MDAzZWRhdGEtXFx1MDAzZWtmdW5jX3JldCwgLUVJTlZBTCwgXFxcImtmdW5jX3JldFxcXCIpO1xcbitcXHR9XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIHJ1bl9pY21wX25vX3JvdXRlX3Rlc3Qoc3RydWN0IGljbXBfc2VuZCAqc2tlbClcXG4re1xcbitcXHRzdHJ1Y3QgaXB2NF9wYWNrZXQgcGt0ID0gcGt0X3Y0O1xcbitcXHRMSUJCUEZfT1BUUyhicGZfdGVzdF9ydW5fb3B0cywgb3B0cyxcXG4rXFx0XFx0LmRhdGFfaW4gPSBcXHUwMDI2cGt0LFxcbitcXHRcXHQuZGF0YV9zaXplX2luID0gc2l6ZW9mKHBrdCksXFxuK1xcdCk7XFxuK1xcdGludCBlcnI7XFxuK1xcbitcXHRwa3QuaXBoLnZlcnNpb24gPSA0O1xcbitcXHRwa3QuaXBoLmRhZGRyID0gaW5ldF9hZGRyKFxcXCIxMjcuMC4wLjFcXFwiKTtcXG4rXFx0cGt0LnRjcC5kZXN0ID0gaHRvbnMoODApO1xcbitcXHRza2VsLVxcdTAwM2Vic3MtXFx1MDAzZXNlcnZlcl9wb3J0ID0gODA7XFxuK1xcdHNrZWwtXFx1MDAzZWJzcy1cXHUwMDNldW5yZWFjaF90eXBlID0gSUNNUF9ERVNUX1VOUkVBQ0g7XFxuK1xcdHNrZWwtXFx1MDAzZWJzcy1cXHUwMDNldW5yZWFjaF9jb2RlID0gSUNNUF9IT1NUX1VOUkVBQ0g7XFxuK1xcdHNrZWwtXFx1MDAzZWRhdGEtXFx1MDAzZWtmdW5jX3JldCA9IEtGVU5DX1JFVF9VTlNFVDtcXG4rXFxuK1xcdGVyciA9IGJwZl9wcm9nX3Rlc3RfcnVuX29wdHMoYnBmX3Byb2dyYW1fX2ZkKHNrZWwtXFx1MDAzZXByb2dzLmVncmVzcyksIFxcdTAwMjZvcHRzKTtcXG4rXFx0aWYgKCFBU1NFUlRfT0soZXJyLCBcXFwidGVzdF9ydW5cXFwiKSlcXG4rXFx0XFx0cmV0dXJuO1xcbitcXHRBU1NFUlRfRVEoc2tlbC1cXHUwMDNlZGF0YS1cXHUwMDNla2Z1bmNfcmV0LCAtRU5FVFVOUkVBQ0gsIFxcXCJrZnVuY19yZXRfbm9fcm91dGVcXFwiKTtcXG4rfVxcbitcXG4rdm9pZCB0ZXN0X2ljbXBfc2VuZF91bnJlYWNoX2Nncm91cCh2b2lkKVxcbit7XFxuK1xcdHN0cnVjdCBpY21wX3NlbmQgKnNrZWw7XFxuK1xcdGludCBjZ3JvdXBfZmQgPSAtMTtcXG4rXFxuK1xcdHNrZWwgPSBpY21wX3NlbmRfX29wZW5fYW5kX2xvYWQoKTtcXG4rXFx0aWYgKCFBU1NFUlRfT0tfUFRSKHNrZWwsIFxcXCJza2VsX29wZW5cXFwiKSlcXG4rXFx0XFx0Z290byBjbGVhbnVwO1xcbitcXG4rXFx0Y2dyb3VwX2ZkID0gdGVzdF9fam9pbl9jZ3JvdXAoXFxcIi9pY21wX3NlbmRfdW5yZWFjaF9jZ3JvdXBcXFwiKTtcXG4rXFx0aWYgKCFBU1NFUlRfT0tfRkQoY2dyb3VwX2ZkLCBcXFwiam9pbl9jZ3JvdXBcXFwiKSlcXG4rXFx0XFx0Z290byBjbGVhbnVwO1xcbitcXG4rXFx0c2tlbC1cXHUwMDNlbGlua3MuZWdyZXNzID1cXG4rXFx0XFx0YnBmX3Byb2dyYW1fX2F0dGFjaF9jZ3JvdXAoc2tlbC1cXHUwMDNlcHJvZ3MuZWdyZXNzLCBjZ3JvdXBfZmQpO1xcbitcXHRpZiAoIUFTU0VSVF9PS19QVFIoc2tlbC1cXHUwMDNlbGlua3MuZWdyZXNzLCBcXFwicHJvZ19hdHRhY2hfY2dyb3VwXFxcIikpXFxuK1xcdFxcdGdvdG8gY2xlYW51cDtcXG4rXFxuK1xcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFxcXCJpcHY0XFxcIikpXFxuK1xcdFxcdHJ1bl9pY21wX3Rlc3Qoc2tlbCwgQUZfSU5FVCwgXFxcIjEyNy4wLjAuMVxcXCIsIE5SX0lDTVBfVU5SRUFDSCk7XFxuK1xcbitcXHRpZiAodGVzdF9fc3RhcnRfc3VidGVzdChcXFwiaXB2NlxcXCIpKVxcbitcXHRcXHRydW5faWNtcF90ZXN0KHNrZWwsIEFGX0lORVQ2LCBcXFwiOjoxXFxcIiwgSUNNUFY2X1JFSkVDVF9ST1VURSk7XFxuK1xcbitcXHRpZiAodGVzdF9fc3RhcnRfc3VidGVzdChcXFwibm9fcm91dGVcXFwiKSlcXG4rXFx0XFx0cnVuX2ljbXBfbm9fcm91dGVfdGVzdChza2VsKTtcXG4rXFxuK2NsZWFudXA6XFxuK1xcdGljbXBfc2VuZF9fZGVzdHJveShza2VsKTtcXG4rXFx0aWYgKGNncm91cF9mZCBcXHUwMDNlPSAwKVxcbitcXHRcXHRjbG9zZShjZ3JvdXBfZmQpO1xcbit9XFxuK1xcbit2b2lkIHRlc3RfaWNtcF9zZW5kX3VucmVhY2hfcmVjdXJzaW9uKHZvaWQpXFxuK3tcXG4rXFx0c3RydWN0IGljbXBfc2VuZCAqc2tlbDtcXG4rXFx0aW50IGNncm91cF9mZCA9IC0xO1xcbitcXHRpbnQgZXJyO1xcbitcXG4rXFx0ZXJyID0gc2V0dXBfY2dyb3VwX2Vudmlyb25tZW50KCk7XFxuK1xcdGlmICghQVNTRVJUX09LKGVyciwgXFxcInNldHVwX2Nncm91cF9lbnZpcm9ubWVudFxcXCIpKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHRza2VsID0gaWNtcF9zZW5kX19vcGVuX2FuZF9sb2FkKCk7XFxuK1xcdGlmICghQVNTRVJUX09LX1BUUihza2VsLCBcXFwic2tlbF9vcGVuXFxcIikpXFxuK1xcdFxcdGdvdG8gY2xlYW51cDtcXG4rXFxuK1xcdGNncm91cF9mZCA9IGdldF9yb290X2Nncm91cCgpO1xcbitcXHRpZiAoIUFTU0VSVF9PS19GRChjZ3JvdXBfZmQsIFxcXCJnZXRfcm9vdF9jZ3JvdXBcXFwiKSlcXG4rXFx0XFx0Z290byBjbGVhbnVwO1xcbitcXG4rXFx0c2tlbC1cXHUwMDNlZGF0YS1cXHUwMDNldGFyZ2V0X3BpZCA9IGdldHBpZCgpO1xcbitcXHRza2VsLVxcdTAwM2VsaW5rcy5yZWN1cnNpb24gPVxcbitcXHRcXHRicGZfcHJvZ3JhbV9fYXR0YWNoX2Nncm91cChza2VsLVxcdTAwM2Vwcm9ncy5yZWN1cnNpb24sIGNncm91cF9mZCk7XFxuK1xcdGlmICghQVNTRVJUX09LX1BUUihza2VsLVxcdTAwM2VsaW5rcy5yZWN1cnNpb24sIFxcXCJwcm9nX2F0dGFjaF9jZ3JvdXBcXFwiKSlcXG4rXFx0XFx0Z290byBjbGVhbnVwO1xcbitcXG4rXFx0dHJpZ2dlcl9wcm9nX3JlYWRfaWNtcF9lcnJxdWV1ZShza2VsLCBJQ01QX0hPU1RfVU5SRUFDSCwgQUZfSU5FVCxcXG4rXFx0XFx0XFx0XFx0XFx0XFxcIjEyNy4wLjAuMVxcXCIpO1xcbitcXG4rXFx0LypcXG4rXFx0ICogQmVjYXVzZSB0aGVyZSdzIHJlY3Vyc2lvbiBpbnZvbHZlZCwgdGhlIGZpcnN0IGNhbGwgd2lsbCByZXR1cm4gYXRcXG4rXFx0ICogaW5kZXggMSBzaW5jZSBpdCB3aWxsIHJldHVybiB0aGUgc2Vjb25kLCBhbmQgdGhlIHNlY29uZCBjYWxsIHdpbGxcXG4rXFx0ICogcmV0dXJuIGF0IGluZGV4IDAgc2luY2UgaXQgd2lsbCByZXR1cm4gdGhlIGZpcnN0LlxcbitcXHQgKi9cXG4rXFx0QVNTRVJUX0VRKHNrZWwtXFx1MDAzZWJzcy1cXHUwMDNlcmVjX2NvdW50LCAyLCBcXFwicmVjX2NvdW50XFxcIik7XFxuK1xcdEFTU0VSVF9FUShza2VsLVxcdTAwM2VkYXRhLVxcdTAwM2VyZWNfa2Z1bmNfcmV0c1swXSwgLUVCVVNZLCBcXFwia2Z1bmNfcmV0c1swXVxcXCIpO1xcbitcXHRBU1NFUlRfRVEoc2tlbC1cXHUwMDNlZGF0YS1cXHUwMDNlcmVjX2tmdW5jX3JldHNbMV0sIDAsIFxcXCJrZnVuY19yZXRzWzFdXFxcIik7XFxuK1xcbitjbGVhbnVwOlxcbitcXHRpY21wX3NlbmRfX2Rlc3Ryb3koc2tlbCk7XFxuK1xcdGlmIChjZ3JvdXBfZmQgXFx1MDAzZT0gMClcXG4rXFx0XFx0Y2xvc2UoY2dyb3VwX2ZkKTtcXG4rXFx0Y2xlYW51cF9jZ3JvdXBfZW52aXJvbm1lbnQoKTtcXG4rfVxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvaWNtcF9zZW5kLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvaWNtcF9zZW5kLmNcXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi5jNjQyY2NkZjlmZDU0NFxcbi0tLSAvZGV2L251bGxcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvaWNtcF9zZW5kLmNcXG5AQCAtMCwwICsxLDEyMyBAQFxcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbisjaW5jbHVkZSBcXFwidm1saW51eC5oXFxcIlxcbisjaW5jbHVkZSBcXHUwMDNjYnBmL2JwZl9oZWxwZXJzLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NicGYvYnBmX2VuZGlhbi5oXFx1MDAzZVxcbitcXG4rLyogMTI3LjAuMC4xIGluIGhvc3QgYnl0ZSBvcmRlciAqL1xcbisjZGVmaW5lIFNFUlZFUl9JUCAweDdGMDAwMDAxXFxuKy8qIDo6MSBpbiBob3N0IGJ5dGUgb3JkZXIgKGxhc3QgMzItYml0IHdvcmQpICovXFxuKyNkZWZpbmUgU0VSVkVSX0lQNl9MTyAweDAwMDAwMDAxXFxuK1xcbitfX3UxNiBzZXJ2ZXJfcG9ydCA9IDA7XFxuK2ludCB1bnJlYWNoX3R5cGUgPSAwO1xcbitpbnQgdW5yZWFjaF9jb2RlID0gMDtcXG4raW50IGtmdW5jX3JldCA9IC0xO1xcbitpbnQgdGFyZ2V0X3BpZCA9IC0xO1xcbitcXG4rdW5zaWduZWQgaW50IHJlY19jb3VudCA9IDA7XFxuK2ludCByZWNfa2Z1bmNfcmV0c1tdID0geyAtMSwgLTEgfTtcXG4rXFxuK1NFQyhcXFwiY2dyb3VwX3NrYi9lZ3Jlc3NcXFwiKVxcbitpbnQgZWdyZXNzKHN0cnVjdCBfX3NrX2J1ZmYgKnNrYilcXG4re1xcbitcXHR2b2lkICpkYXRhID0gKHZvaWQgKikobG9uZylza2ItXFx1MDAzZWRhdGE7XFxuK1xcdHZvaWQgKmRhdGFfZW5kID0gKHZvaWQgKikobG9uZylza2ItXFx1MDAzZWRhdGFfZW5kO1xcbitcXHRzdHJ1Y3QgaXBoZHIgKmlwaDtcXG4rXFx0c3RydWN0IGlwdjZoZHIgKmlwNmg7XFxuK1xcdHN0cnVjdCB0Y3BoZHIgKnRjcGg7XFxuK1xcdF9fdTggdmVyc2lvbjtcXG4rXFxuK1xcdGlmIChkYXRhICsgMSBcXHUwMDNlIGRhdGFfZW5kKVxcbitcXHRcXHRyZXR1cm4gU0tfUEFTUztcXG4rXFxuK1xcdHZlcnNpb24gPSAoKigoX191OCAqKWRhdGEpKSBcXHUwMDNlXFx1MDAzZSA0O1xcbitcXG4rXFx0aWYgKHZlcnNpb24gPT0gNCkge1xcbitcXHRcXHRpcGggPSBkYXRhO1xcbitcXHRcXHRpZiAoKHZvaWQgKikoaXBoICsgMSkgXFx1MDAzZSBkYXRhX2VuZCB8fFxcbitcXHRcXHQgICAgaXBoLVxcdTAwM2Vwcm90b2NvbCAhPSBJUFBST1RPX1RDUCB8fFxcbitcXHRcXHQgICAgaXBoLVxcdTAwM2VkYWRkciAhPSBicGZfaHRvbmwoU0VSVkVSX0lQKSlcXG4rXFx0XFx0XFx0cmV0dXJuIFNLX1BBU1M7XFxuK1xcbitcXHRcXHR0Y3BoID0gKHZvaWQgKilpcGggKyBpcGgtXFx1MDAzZWlobCAqIDQ7XFxuK1xcdFxcdGlmICgodm9pZCAqKSh0Y3BoICsgMSkgXFx1MDAzZSBkYXRhX2VuZCB8fFxcbitcXHRcXHQgICAgdGNwaC1cXHUwMDNlZGVzdCAhPSBicGZfaHRvbnMoc2VydmVyX3BvcnQpKVxcbitcXHRcXHRcXHRyZXR1cm4gU0tfUEFTUztcXG4rXFxuK1xcdH0gZWxzZSBpZiAodmVyc2lvbiA9PSA2KSB7XFxuK1xcdFxcdGlwNmggPSBkYXRhO1xcbitcXHRcXHRpZiAoKHZvaWQgKikoaXA2aCArIDEpIFxcdTAwM2UgZGF0YV9lbmQgfHxcXG4rXFx0XFx0ICAgIGlwNmgtXFx1MDAzZW5leHRoZHIgIT0gSVBQUk9UT19UQ1ApXFxuK1xcdFxcdFxcdHJldHVybiBTS19QQVNTO1xcbitcXG4rXFx0XFx0aWYgKGlwNmgtXFx1MDAzZWRhZGRyLmluNl91LnU2X2FkZHIzMlswXSAhPSAwIHx8XFxuK1xcdFxcdCAgICBpcDZoLVxcdTAwM2VkYWRkci5pbjZfdS51Nl9hZGRyMzJbMV0gIT0gMCB8fFxcbitcXHRcXHQgICAgaXA2aC1cXHUwMDNlZGFkZHIuaW42X3UudTZfYWRkcjMyWzJdICE9IDAgfHxcXG4rXFx0XFx0ICAgIGlwNmgtXFx1MDAzZWRhZGRyLmluNl91LnU2X2FkZHIzMlszXSAhPSBicGZfaHRvbmwoU0VSVkVSX0lQNl9MTykpXFxuK1xcdFxcdFxcdHJldHVybiBTS19QQVNTO1xcbitcXG4rXFx0XFx0dGNwaCA9ICh2b2lkICopKGlwNmggKyAxKTtcXG4rXFx0XFx0aWYgKCh2b2lkICopKHRjcGggKyAxKSBcXHUwMDNlIGRhdGFfZW5kIHx8XFxuK1xcdFxcdCAgICB0Y3BoLVxcdTAwM2VkZXN0ICE9IGJwZl9odG9ucyhzZXJ2ZXJfcG9ydCkpXFxuK1xcdFxcdFxcdHJldHVybiBTS19QQVNTO1xcbitcXHR9IGVsc2Uge1xcbitcXHRcXHRyZXR1cm4gU0tfUEFTUztcXG4rXFx0fVxcbitcXG4rXFx0a2Z1bmNfcmV0ID0gYnBmX2ljbXBfc2VuZChza2IsIHVucmVhY2hfdHlwZSwgdW5yZWFjaF9jb2RlKTtcXG4rXFxuK1xcdHJldHVybiBTS19EUk9QO1xcbit9XFxuK1xcbitTRUMoXFxcImNncm91cF9za2IvZWdyZXNzXFxcIilcXG4raW50IHJlY3Vyc2lvbihzdHJ1Y3QgX19za19idWZmICpza2IpXFxuK3tcXG4rXFx0dm9pZCAqZGF0YSA9ICh2b2lkICopKGxvbmcpc2tiLVxcdTAwM2VkYXRhO1xcbitcXHR2b2lkICpkYXRhX2VuZCA9ICh2b2lkICopKGxvbmcpc2tiLVxcdTAwM2VkYXRhX2VuZDtcXG4rXFx0c3RydWN0IGljbXBoZHIgKmljbXBoO1xcbitcXHRzdHJ1Y3QgdGNwaGRyICp0Y3BoO1xcbitcXHRzdHJ1Y3QgaXBoZHIgKmlwaDtcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdGlmICgoYnBmX2dldF9jdXJyZW50X3BpZF90Z2lkKCkgXFx1MDAzZVxcdTAwM2UgMzIpICE9IHRhcmdldF9waWQpXFxuK1xcdFxcdHJldHVybiBTS19QQVNTO1xcbitcXG4rXFx0aXBoID0gZGF0YTtcXG4rXFx0aWYgKCh2b2lkICopKGlwaCArIDEpIFxcdTAwM2UgZGF0YV9lbmQgfHwgaXBoLVxcdTAwM2V2ZXJzaW9uICE9IDQpXFxuK1xcdFxcdHJldHVybiBTS19QQVNTO1xcbitcXG4rXFx0aWYgKGlwaC1cXHUwMDNlZGFkZHIgIT0gYnBmX2h0b25sKFNFUlZFUl9JUCkpXFxuK1xcdFxcdHJldHVybiBTS19QQVNTO1xcbitcXG4rXFx0aWYgKGlwaC1cXHUwMDNlcHJvdG9jb2wgPT0gSVBQUk9UT19UQ1ApIHtcXG4rXFx0XFx0dGNwaCA9ICh2b2lkICopaXBoICsgaXBoLVxcdTAwM2VpaGwgKiA0O1xcbitcXHRcXHRpZiAoKHZvaWQgKikodGNwaCArIDEpIFxcdTAwM2UgZGF0YV9lbmQgfHxcXG4rXFx0XFx0ICAgIHRjcGgtXFx1MDAzZWRlc3QgIT0gYnBmX2h0b25zKHNlcnZlcl9wb3J0KSlcXG4rXFx0XFx0XFx0cmV0dXJuIFNLX1BBU1M7XFxuK1xcdH0gZWxzZSBpZiAoaXBoLVxcdTAwM2Vwcm90b2NvbCA9PSBJUFBST1RPX0lDTVApIHtcXG4rXFx0XFx0aWNtcGggPSAodm9pZCAqKWlwaCArIGlwaC1cXHUwMDNlaWhsICogNDtcXG4rXFx0XFx0aWYgKCh2b2lkICopKGljbXBoICsgMSkgXFx1MDAzZSBkYXRhX2VuZCB8fFxcbitcXHRcXHQgICAgaWNtcGgtXFx1MDAzZXR5cGUgIT0gdW5yZWFjaF90eXBlIHx8IGljbXBoLVxcdTAwM2Vjb2RlICE9IHVucmVhY2hfY29kZSlcXG4rXFx0XFx0XFx0cmV0dXJuIFNLX1BBU1M7XFxuK1xcdH0gZWxzZSB7XFxuK1xcdFxcdHJldHVybiBTS19QQVNTO1xcbitcXHR9XFxuK1xcbitcXHQvKlxcbitcXHQgKiBUaGlzIGNhbGwgd2lsbCBwcm92b2tlIGEgcmVjdXJzaW9uOiB0aGUgSUNNUCBwYWNrZXQgZ2VuZXJhdGVkIGJ5IHRoZVxcbitcXHQgKiBrZnVuYyB3aWxsIHJlLXRyaWdnZXIgdGhpcyBwcm9ncmFtIHNpbmNlIHdlIGFyZSBpbiB0aGUgcm9vdCBjZ3JvdXAgaW5cXG4rXFx0ICogd2hpY2ggdGhlIGtlcm5lbCBJQ01QIHNvY2tldCBiZWxvbmdzLiBIb3dldmVyIHdoZW4gcmUtZW50ZXJpbmcgdGhlXFxuK1xcdCAqIGtmdW5jLCBpdCBzaG91bGQgcmV0dXJuIEVCVVNZLlxcbitcXHQgKi9cXG4rXFx0cmV0ID0gYnBmX2ljbXBfc2VuZChza2IsIHVucmVhY2hfdHlwZSwgdW5yZWFjaF9jb2RlKTtcXG4rXFx0cmVjX2tmdW5jX3JldHNbcmVjX2NvdW50IFxcdTAwMjYgMV0gPSByZXQ7XFxuK1xcdF9fc3luY19mZXRjaF9hbmRfYWRkKFxcdTAwMjZyZWNfY291bnQsIDEpO1xcbitcXG4rXFx0LyogTGV0IHRoZSBmaXJzdCBJQ01QIGVycm9yIG1lc3NhZ2UgcGFzcyAqL1xcbitcXHRpZiAoaXBoLVxcdTAwM2Vwcm90b2NvbCA9PSBJUFBST1RPX0lDTVApXFxuK1xcdFxcdHJldHVybiBTS19QQVNTO1xcbitcXG4rXFx0cmV0dXJuIFNLX0RST1A7XFxuK31cXG4rXFxuK2NoYXIgTElDRU5TRVtdIFNFQyhcXFwibGljZW5zZVxcXCIpID0gXFxcIkR1YWwgQlNEL0dQTFxcXCI7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI0VDE5OjE0OjM2LjUwMDQxNzM3WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyMjg0NDM4MTYyNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJDR1JPVVBfQlBGXCIsXG4gICAgXCJCUEZfU1lTQ0FMTFwiLFxuICAgIFwiSU5FVFwiLFxuICAgIFwiSVBWNlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJwZl9pY21wX3NlbmRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IEJQRiBrZnVuYyBgYnBmX2ljbXBfc2VuZGAgd2hpY2ggYWxsb3dzIEJQRiBwcm9ncmFtcyBhdHRhY2hlZCB0byBjZ3JvdXAgc2tiIGhvb2tzIHRvIHNlbmQgSUNNUCBjb250cm9sIG1lc3NhZ2VzLiBUaGlzIGlzIGEgbmV3IGZ1bmN0aW9uYWwgZmVhdHVyZSB0aGF0IGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgQlBGIHByb2dyYW1zLCBtYWtpbmcgaXQgYSBwcmltZSB0YXJnZXQgZm9yIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXRcbiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSxcbiAgIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNTRhNDkyOWQzZDM0MmVlNWY2OWQ0Zjc2YWY3MjdmOWRlYTkxYzkxMVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgSnVuIDI0IDE5OjE0OjM1IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUvZmlsdGVyLmMgYi9uZXQvY29yZS9maWx0ZXIuY1xuaW5kZXggMmU5NmI0Yjg0N2NlMTIuLmYzYWE0OTRlZDEwNTMwIDEwMDY0NFxuLS0tIGEvbmV0L2NvcmUvZmlsdGVyLmNcbisrKyBiL25ldC9jb3JlL2ZpbHRlci5jXG5AQCAtODQsNiArODQsOSBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3VuLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NuZXQveGRwX3NvY2tfZHJ2LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NuZXQvaW5ldF9kc2NwLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9pY21wdjYuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY25ldC9pY21wLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NuZXQvaXA2X3JvdXRlLmhcdTAwM2VcbiBcbiAjaW5jbHVkZSBcImRldi5oXCJcbiBcbkBAIC0xMjU0Niw2ICsxMjU0OSw4NCBAQCBfX2JwZl9rZnVuYyBpbnQgYnBmX3hkcF9wdWxsX2RhdGEoc3RydWN0IHhkcF9tZCAqeCwgdTMyIGxlbilcbiBcdHJldHVybiAwO1xuIH1cbiBcbisvKipcbisgKiBicGZfaWNtcF9zZW5kIC0gU2VuZCBhbiBJQ01QIGNvbnRyb2wgbWVzc2FnZVxuKyAqIEBza2JfY3R4OiBQYWNrZXQgdGhhdCB0cmlnZ2VyZWQgdGhlIGNvbnRyb2wgbWVzc2FnZVxuKyAqIEB0eXBlOiBJQ01QIHR5cGUgKG9ubHkgSUNNUF9ERVNUX1VOUkVBQ0gvSUNNUFY2X0RFU1RfVU5SRUFDSCBzdXBwb3J0ZWQpXG4rICogQGNvZGU6IElDTVAgY29kZSAoMC0xNSBleGNlcHQgSUNNUF9GUkFHX05FRURFRCBmb3IgSVB2NCwgMC02IGZvciBJUHY2KVxuKyAqXG4rICogU2VuZHMgYW4gSUNNUCBjb250cm9sIG1lc3NhZ2UgaW4gcmVzcG9uc2UgdG8gdGhlIHBhY2tldC4gVGhlIG9yaWdpbmFsIHBhY2tldFxuKyAqIGlzIGNsb25lZCBiZWZvcmUgc2VuZGluZyB0aGUgSUNNUCBtZXNzYWdlLCBzbyB0aGUgQlBGIHByb2dyYW0gY2FuIHN0aWxsIGxldFxuKyAqIHRoZSBwYWNrZXQgcGFzcyBpZiBkZXNpcmVkLlxuKyAqXG4rICogQ3VycmVudGx5IG9ubHkgSUNNUF9ERVNUX1VOUkVBQ0ggKElQdjQpIGFuZCBJQ01QVjZfREVTVF9VTlJFQUNIIChJUHY2KSBhcmVcbisgKiBzdXBwb3J0ZWQuXG4rICpcbisgKiBSZXR1cm46IDAgb24gc3VjY2VzcyAoc2VuZCBhdHRlbXB0KSwgbmVnYXRpdmUgZXJyb3IgY29kZSBvbiBmYWlsdXJlOlxuKyAqICAgICAgICAgLUVCVVNZOiBSZWN1cnNpb24gZGV0ZWN0ZWRcbisgKiAgICAgICAgIC1FUFJPVE9OT1NVUFBPUlQ6IE5vbi1JUCBwcm90b2NvbFxuKyAqICAgICAgICAgLUVPUE5PVFNVUFA6IFVuc3VwcG9ydGVkIElDTVAgdHlwZVxuKyAqICAgICAgICAgLUVJTlZBTDogSW52YWxpZCBjb2RlIHBhcmFtZXRlclxuKyAqICAgICAgICAgLUVORVRVTlJFQUNIOiBVbnVzYWJsZSBJUHY0IHJvdXRlL2RzdCBhdHRhY2hlZCB0byB0aGUgc2tiXG4rICogICAgICAgICAtRU5PTUVNOiBNZW1vcnkgYWxsb2NhdGlvbiBmYWlsZWRcbisgKi9cbitfX2JwZl9rZnVuYyBpbnQgYnBmX2ljbXBfc2VuZChzdHJ1Y3QgX19za19idWZmICpza2JfY3R4LCBpbnQgdHlwZSwgaW50IGNvZGUpXG4re1xuK1x0c3RydWN0IHNrX2J1ZmYgKnNrYiA9IChzdHJ1Y3Qgc2tfYnVmZiAqKXNrYl9jdHg7XG4rXHRzdHJ1Y3Qgc2tfYnVmZiAqbnNrYjtcbitcdHN0cnVjdCBzb2NrICpzaztcbitcbitcdHNrID0gc2tiX3RvX2Z1bGxfc2soc2tiKTtcbitcdGlmIChzayBcdTAwMjZcdTAwMjYgc2stXHUwMDNlc2tfa2Vybl9zb2NrIFx1MDAyNlx1MDAyNlxuK1x0ICAgIChzay1cdTAwM2Vza19wcm90b2NvbCA9PSBJUFBST1RPX0lDTVAgfHwgc2stXHUwMDNlc2tfcHJvdG9jb2wgPT0gSVBQUk9UT19JQ01QVjYpKVxuK1x0XHRyZXR1cm4gLUVCVVNZO1xuK1xuK1x0c3dpdGNoIChza2ItXHUwMDNlcHJvdG9jb2wpIHtcbisjaWYgSVNfRU5BQkxFRChDT05GSUdfSU5FVClcbitcdGNhc2UgaHRvbnMoRVRIX1BfSVApOiB7XG4rXHRcdGlmICh0eXBlICE9IElDTVBfREVTVF9VTlJFQUNIKVxuK1x0XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbitcdFx0aWYgKGNvZGUgXHUwMDNjIDAgfHwgY29kZSBcdTAwM2UgTlJfSUNNUF9VTlJFQUNIIHx8XG4rXHRcdCAgICBjb2RlID09IElDTVBfRlJBR19ORUVERUQpIC8qIG5lZWRzIGEgdmFsaWQgbmV4dC1ob3AgTVRVICovXG4rXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXG4rXHRcdC8qIGljbXBfc2VuZCByZXF1aXJlcyBhIHJ0YWJsZTsgdGVzdC1ydW4gc3ludGhldGljIHNrYnMgbGFjayBvbmUuICovXG4rXHRcdGlmICghc2tiX3ZhbGlkX2RzdChza2IpKVxuK1x0XHRcdHJldHVybiAtRU5FVFVOUkVBQ0g7XG4rXG4rXHRcdG5za2IgPSBza2JfY2xvbmUoc2tiLCBHRlBfQVRPTUlDKTtcbitcdFx0aWYgKCFuc2tiKVxuK1x0XHRcdHJldHVybiAtRU5PTUVNO1xuK1xuK1x0XHRtZW1zZXQoSVBDQihuc2tiKSwgMCwgc2l6ZW9mKCpJUENCKG5za2IpKSk7XG4rXHRcdGljbXBfc2VuZChuc2tiLCB0eXBlLCBjb2RlLCAwKTtcbitcdFx0Y29uc3VtZV9za2IobnNrYik7XG4rXHRcdGJyZWFrO1xuK1x0fVxuKyNlbmRpZlxuKyNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2KVxuK1x0Y2FzZSBodG9ucyhFVEhfUF9JUFY2KTpcbitcdFx0aWYgKHR5cGUgIT0gSUNNUFY2X0RFU1RfVU5SRUFDSClcbitcdFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4rXHRcdGlmIChjb2RlIFx1MDAzYyAwIHx8IGNvZGUgXHUwMDNlIElDTVBWNl9SRUpFQ1RfUk9VVEUpXG4rXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXG4rXHRcdG5za2IgPSBza2JfY2xvbmUoc2tiLCBHRlBfQVRPTUlDKTtcbitcdFx0aWYgKCFuc2tiKVxuK1x0XHRcdHJldHVybiAtRU5PTUVNO1xuK1xuK1x0XHRtZW1zZXQoSVA2Q0IobnNrYiksIDAsIHNpemVvZigqSVA2Q0IobnNrYikpKTtcbitcdFx0aWNtcHY2X3NlbmQobnNrYiwgdHlwZSwgY29kZSwgMCk7XG4rXHRcdGNvbnN1bWVfc2tiKG5za2IpO1xuK1x0XHRicmVhaztcbisjZW5kaWZcbitcdGRlZmF1bHQ6XG4rXHRcdHJldHVybiAtRVBST1RPTk9TVVBQT1JUO1xuK1x0fVxuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuIF9fYnBmX2tmdW5jX2VuZF9kZWZzKCk7XG4gXG4gaW50IGJwZl9keW5wdHJfZnJvbV9za2JfcmRvbmx5KHN0cnVjdCBfX3NrX2J1ZmYgKnNrYiwgdTY0IGZsYWdzLFxuQEAgLTEyNTg4LDYgKzEyNjY5LDEwIEBAIEJURl9LRlVOQ1NfU1RBUlQoYnBmX2tmdW5jX2NoZWNrX3NldF9zb2NrX29wcylcbiBCVEZfSURfRkxBR1MoZnVuYywgYnBmX3NvY2tfb3BzX2VuYWJsZV90eF90c3RhbXApXG4gQlRGX0tGVU5DU19FTkQoYnBmX2tmdW5jX2NoZWNrX3NldF9zb2NrX29wcylcbiBcbitCVEZfS0ZVTkNTX1NUQVJUKGJwZl9rZnVuY19jaGVja19zZXRfaWNtcF9zZW5kKVxuK0JURl9JRF9GTEFHUyhmdW5jLCBicGZfaWNtcF9zZW5kKVxuK0JURl9LRlVOQ1NfRU5EKGJwZl9rZnVuY19jaGVja19zZXRfaWNtcF9zZW5kKVxuK1xuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYnRmX2tmdW5jX2lkX3NldCBicGZfa2Z1bmNfc2V0X3NrYiA9IHtcbiBcdC5vd25lciA9IFRISVNfTU9EVUxFLFxuIFx0LnNldCA9IFx1MDAyNmJwZl9rZnVuY19jaGVja19zZXRfc2tiLFxuQEAgLTEyNjE4LDYgKzEyNzAzLDExIEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYnRmX2tmdW5jX2lkX3NldCBicGZfa2Z1bmNfc2V0X3NvY2tfb3BzID0ge1xuIFx0LnNldCA9IFx1MDAyNmJwZl9rZnVuY19jaGVja19zZXRfc29ja19vcHMsXG4gfTtcbiBcbitzdGF0aWMgY29uc3Qgc3RydWN0IGJ0Zl9rZnVuY19pZF9zZXQgYnBmX2tmdW5jX3NldF9pY21wX3NlbmQgPSB7XG4rXHQub3duZXIgPSBUSElTX01PRFVMRSxcbitcdC5zZXQgPSBcdTAwMjZicGZfa2Z1bmNfY2hlY2tfc2V0X2ljbXBfc2VuZCxcbit9O1xuK1xuIHN0YXRpYyBpbnQgX19pbml0IGJwZl9rZnVuY19pbml0KHZvaWQpXG4ge1xuIFx0aW50IHJldDtcbkBAIC0xMjYzOSw2ICsxMjcyOSw3IEBAIHN0YXRpYyBpbnQgX19pbml0IGJwZl9rZnVuY19pbml0KHZvaWQpXG4gXHRyZXQgPSByZXQgPzogcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX0NHUk9VUF9TT0NLX0FERFIsXG4gXHRcdFx0XHRcdCAgICAgICBcdTAwMjZicGZfa2Z1bmNfc2V0X3NvY2tfYWRkcik7XG4gXHRyZXQgPSByZXQgPzogcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX1NDSEVEX0NMUywgXHUwMDI2YnBmX2tmdW5jX3NldF90Y3BfcmVxc2spO1xuK1x0cmV0ID0gcmV0ID86IHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9DR1JPVVBfU0tCLCBcdTAwMjZicGZfa2Z1bmNfc2V0X2ljbXBfc2VuZCk7XG4gXHRyZXR1cm4gcmV0ID86IHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9TT0NLX09QUywgXHUwMDI2YnBmX2tmdW5jX3NldF9zb2NrX29wcyk7XG4gfVxuIGxhdGVfaW5pdGNhbGwoYnBmX2tmdW5jX2luaXQpO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2ljbXBfc2VuZF9rZnVuYy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvaWNtcF9zZW5kX2tmdW5jLmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uZmZhZjBmZTE4ODBiMGVcbi0tLSAvZGV2L251bGxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2ljbXBfc2VuZF9rZnVuYy5jXG5AQCAtMCwwICsxLDI2OSBAQFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4rI2luY2x1ZGUgXHUwMDNjdGVzdF9wcm9ncy5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbmV0d29ya19oZWxwZXJzLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NjZ3JvdXBfaGVscGVycy5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvZXJycXVldWUuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY3BvbGwuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY3VuaXN0ZC5oXHUwMDNlXG4rI2luY2x1ZGUgXCJpY21wX3NlbmQuc2tlbC5oXCJcbitcbisjZGVmaW5lIFRJTUVPVVRfTVMgMTAwMFxuK1xuKyNkZWZpbmUgSUNNUF9ERVNUX1VOUkVBQ0ggM1xuKyNkZWZpbmUgSUNNUFY2X0RFU1RfVU5SRUFDSCAxXG4rXG4rI2RlZmluZSBJQ01QX0hPU1RfVU5SRUFDSCAxXG4rI2RlZmluZSBJQ01QX0ZSQUdfTkVFREVEIDRcbisjZGVmaW5lIE5SX0lDTVBfVU5SRUFDSCAxNVxuKyNkZWZpbmUgSUNNUFY2X1JFSkVDVF9ST1VURSA2XG4rXG4rI2RlZmluZSBLRlVOQ19SRVRfVU5TRVQgLTFcbitcbitzdGF0aWMgaW50IGNvbm5lY3RfdG9fZmRfbm9uYmxvY2soaW50IHNlcnZlcl9mZClcbit7XG4rXHRzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZSBhZGRyO1xuK1x0c29ja2xlbl90IGxlbiA9IHNpemVvZihhZGRyKTtcbitcdGludCBmZCwgZXJyLCBvbiA9IDE7XG4rXG4rXHRpZiAoZ2V0c29ja25hbWUoc2VydmVyX2ZkLCAoc3RydWN0IHNvY2thZGRyICopXHUwMDI2YWRkciwgXHUwMDI2bGVuKSlcbitcdFx0cmV0dXJuIC0xO1xuK1xuK1x0ZmQgPSBzb2NrZXQoYWRkci5zc19mYW1pbHksIFNPQ0tfU1RSRUFNIHwgU09DS19OT05CTE9DSywgMCk7XG4rXHRpZiAoZmQgXHUwMDNjIDApXG4rXHRcdHJldHVybiAtMTtcbitcbitcdGlmIChhZGRyLnNzX2ZhbWlseSA9PSBBRl9JTkVUNiBcdTAwMjZcdTAwMjZcbitcdCAgICBzZXRzb2Nrb3B0KGZkLCBJUFBST1RPX0lQVjYsIElQVjZfUkVDVkVSUiwgXHUwMDI2b24sIHNpemVvZihvbikpIFx1MDAzYyAwKSB7XG4rXHRcdGNsb3NlKGZkKTtcbitcdFx0cmV0dXJuIC0xO1xuK1x0fVxuK1xuK1x0ZXJyID0gY29ubmVjdChmZCwgKHN0cnVjdCBzb2NrYWRkciAqKVx1MDAyNmFkZHIsIGxlbik7XG4rXHRpZiAoZXJyIFx1MDAzYyAwIFx1MDAyNlx1MDAyNiBlcnJubyAhPSBFSU5QUk9HUkVTUykge1xuK1x0XHRjbG9zZShmZCk7XG4rXHRcdHJldHVybiAtMTtcbitcdH1cbitcbitcdHJldHVybiBmZDtcbit9XG4rXG4rc3RhdGljIHZvaWQgcmVhZF9pY21wX2VycnF1ZXVlKGludCBzb2NrZmQsIGludCBleHBlY3RlZF9jb2RlLCBpbnQgYWYpXG4re1xuK1x0aW50IGV4cGVjdGVkX2VlX3R5cGUgPSAoYWYgPT0gQUZfSU5FVCkgPyBJQ01QX0RFU1RfVU5SRUFDSCA6XG4rXHRcdFx0XHRcdFx0IElDTVBWNl9ERVNUX1VOUkVBQ0g7XG4rXHRpbnQgZXhwZWN0ZWRfb3JpZ2luID0gKGFmID09IEFGX0lORVQpID8gU09fRUVfT1JJR0lOX0lDTVAgOlxuK1x0XHRcdFx0XHRcdFNPX0VFX09SSUdJTl9JQ01QNjtcbitcdGludCBleHBlY3RlZF9sZXZlbCA9IChhZiA9PSBBRl9JTkVUKSA/IElQUFJPVE9fSVAgOiBJUFBST1RPX0lQVjY7XG4rXHRpbnQgZXhwZWN0ZWRfdHlwZSA9IChhZiA9PSBBRl9JTkVUKSA/IElQX1JFQ1ZFUlIgOiBJUFY2X1JFQ1ZFUlI7XG4rXHRzdHJ1Y3Qgc29ja19leHRlbmRlZF9lcnIgKnNvY2tfZXJyO1xuK1x0Y2hhciBjdHJsX2J1Zls1MTJdO1xuK1x0c3RydWN0IG1zZ2hkciBtc2cgPSB7XG4rXHRcdC5tc2dfY29udHJvbCA9IGN0cmxfYnVmLFxuK1x0XHQubXNnX2NvbnRyb2xsZW4gPSBzaXplb2YoY3RybF9idWYpLFxuK1x0fTtcbitcdHN0cnVjdCBwb2xsZmQgcGZkID0ge1xuK1x0XHQuZmQgPSBzb2NrZmQsXG4rXHRcdC5ldmVudHMgPSBQT0xMRVJSLFxuK1x0fTtcbitcdHN0cnVjdCBjbXNnaGRyICpjbTtcbitcdHNzaXplX3QgbjtcbitcbitcdGlmICghQVNTRVJUX0dFKHBvbGwoXHUwMDI2cGZkLCAxLCBUSU1FT1VUX01TKSwgMSwgXCJwb2xsX2VycnF1ZXVlXCIpKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRuID0gcmVjdm1zZyhzb2NrZmQsIFx1MDAyNm1zZywgTVNHX0VSUlFVRVVFKTtcbitcdGlmICghQVNTRVJUX0dFKG4sIDAsIFwicmVjdm1zZ19lcnJxdWV1ZVwiKSlcbitcdFx0cmV0dXJuO1xuK1xuK1x0Y20gPSBDTVNHX0ZJUlNUSERSKFx1MDAyNm1zZyk7XG4rXHRpZiAoIUFTU0VSVF9ORVEoY20sIE5VTEwsIFwiY21fZmlyc3RoZHJfbnVsbFwiKSlcbitcdFx0cmV0dXJuO1xuK1xuK1x0Zm9yICg7IGNtOyBjbSA9IENNU0dfTlhUSERSKFx1MDAyNm1zZywgY20pKSB7XG4rXHRcdGlmIChjbS1cdTAwM2VjbXNnX2xldmVsICE9IGV4cGVjdGVkX2xldmVsIHx8XG4rXHRcdCAgICBjbS1cdTAwM2VjbXNnX3R5cGUgIT0gZXhwZWN0ZWRfdHlwZSlcbitcdFx0XHRjb250aW51ZTtcbitcbitcdFx0c29ja19lcnIgPSAoc3RydWN0IHNvY2tfZXh0ZW5kZWRfZXJyICopQ01TR19EQVRBKGNtKTtcbitcbitcdFx0aWYgKCFBU1NFUlRfRVEoc29ja19lcnItXHUwMDNlZWVfb3JpZ2luLCBleHBlY3RlZF9vcmlnaW4sXG4rXHRcdFx0ICAgICAgIFwic29ja19lcnJfb3JpZ2luXCIpKVxuK1x0XHRcdHJldHVybjtcbitcdFx0aWYgKCFBU1NFUlRfRVEoc29ja19lcnItXHUwMDNlZWVfdHlwZSwgZXhwZWN0ZWRfZWVfdHlwZSxcbitcdFx0XHQgICAgICAgXCJzb2NrX2Vycl90eXBlX2Rlc3RfdW5yZWFjaFwiKSlcbitcdFx0XHRyZXR1cm47XG4rXHRcdEFTU0VSVF9FUShzb2NrX2Vyci1cdTAwM2VlZV9jb2RlLCBleHBlY3RlZF9jb2RlLCBcInNvY2tfZXJyX2NvZGVcIik7XG4rXHRcdHJldHVybjtcbitcdH1cbitcbitcdEFTU0VSVF9GQUlMKFwibm8gSVBfUkVDVkVSUi9JUFY2X1JFQ1ZFUlIgY29udHJvbCBtZXNzYWdlIGZvdW5kXCIpO1xuK31cbitcbitzdGF0aWMgYm9vbCB2YWxpZF91bnJlYWNoX2NvZGUoaW50IGNvZGUsIGludCBhZilcbit7XG4rXHRpZiAoY29kZSBcdTAwM2MgMClcbitcdFx0cmV0dXJuIGZhbHNlO1xuK1xuK1x0aWYgKGFmID09IEFGX0lORVQpXG4rXHRcdHJldHVybiBjb2RlIFx1MDAzYz0gTlJfSUNNUF9VTlJFQUNIIFx1MDAyNlx1MDAyNiBjb2RlICE9IElDTVBfRlJBR19ORUVERUQ7XG4rXG4rXHRyZXR1cm4gY29kZSBcdTAwM2M9IElDTVBWNl9SRUpFQ1RfUk9VVEU7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIHRyaWdnZXJfcHJvZ19yZWFkX2ljbXBfZXJycXVldWUoc3RydWN0IGljbXBfc2VuZCAqc2tlbCwgaW50IGNvZGUsXG4rXHRcdFx0XHRcdCAgICBpbnQgYWYsIGNvbnN0IGNoYXIgKmlwKVxuK3tcbitcdGludCBzcnZfZmQgPSAtMSwgY2xpZW50X2ZkID0gLTE7XG4rXHRpbnQgcG9ydDtcbitcbitcdHNydl9mZCA9IHN0YXJ0X3NlcnZlcihhZiwgU09DS19TVFJFQU0sIGlwLCAwLCBUSU1FT1VUX01TKTtcbitcdGlmICghQVNTRVJUX09LX0ZEKHNydl9mZCwgXCJzdGFydF9zZXJ2ZXJcIikpXG4rXHRcdHJldHVybjtcbitcbitcdHBvcnQgPSBnZXRfc29ja2V0X2xvY2FsX3BvcnQoc3J2X2ZkKTtcbitcdGlmICghQVNTRVJUX0dFKHBvcnQsIDAsIFwiZ2V0X3NvY2tldF9sb2NhbF9wb3J0XCIpKSB7XG4rXHRcdGNsb3NlKHNydl9mZCk7XG4rXHRcdHJldHVybjtcbitcdH1cbitcbitcdHNrZWwtXHUwMDNlYnNzLVx1MDAzZXNlcnZlcl9wb3J0ID0gbnRvaHMocG9ydCk7XG4rXHRza2VsLVx1MDAzZWJzcy1cdTAwM2V1bnJlYWNoX3R5cGUgPSAoYWYgPT0gQUZfSU5FVCkgPyBJQ01QX0RFU1RfVU5SRUFDSCA6XG4rXHRcdFx0XHRcdFx0ICAgIElDTVBWNl9ERVNUX1VOUkVBQ0g7XG4rXHRza2VsLVx1MDAzZWJzcy1cdTAwM2V1bnJlYWNoX2NvZGUgPSBjb2RlO1xuK1x0c2tlbC1cdTAwM2VkYXRhLVx1MDAzZWtmdW5jX3JldCA9IEtGVU5DX1JFVF9VTlNFVDtcbitcbitcdGNsaWVudF9mZCA9IGNvbm5lY3RfdG9fZmRfbm9uYmxvY2soc3J2X2ZkKTtcbitcdGlmICghQVNTRVJUX09LX0ZEKGNsaWVudF9mZCwgXCJjbGllbnRfY29ubmVjdF9ub25ibG9ja1wiKSkge1xuK1x0XHRjbG9zZShzcnZfZmQpO1xuK1x0XHRyZXR1cm47XG4rXHR9XG4rXG4rXHRpZiAodmFsaWRfdW5yZWFjaF9jb2RlKGNvZGUsIGFmKSlcbitcdFx0cmVhZF9pY21wX2VycnF1ZXVlKGNsaWVudF9mZCwgY29kZSwgYWYpO1xuK1xuK1x0Y2xvc2UoY2xpZW50X2ZkKTtcbitcdGNsb3NlKHNydl9mZCk7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIHJ1bl9pY21wX3Rlc3Qoc3RydWN0IGljbXBfc2VuZCAqc2tlbCwgaW50IGFmLCBjb25zdCBjaGFyICppcCxcbitcdFx0XHQgIGludCBtYXhfY29kZSlcbit7XG4rXHRmb3IgKGludCBjb2RlID0gMDsgY29kZSBcdTAwM2M9IG1heF9jb2RlOyBjb2RlKyspIHtcbitcdFx0aWYgKGFmID09IEFGX0lORVQgXHUwMDI2XHUwMDI2IGNvZGUgPT0gSUNNUF9GUkFHX05FRURFRClcbitcdFx0XHRjb250aW51ZTtcbitcbitcdFx0dHJpZ2dlcl9wcm9nX3JlYWRfaWNtcF9lcnJxdWV1ZShza2VsLCBjb2RlLCBhZiwgaXApO1xuK1x0XHRBU1NFUlRfRVEoc2tlbC1cdTAwM2VkYXRhLVx1MDAzZWtmdW5jX3JldCwgMCwgXCJrZnVuY19yZXRcIik7XG4rXHR9XG4rXG4rXHQvKiBUZXN0IGludmFsaWQgY29kZXMgKi9cbitcdHRyaWdnZXJfcHJvZ19yZWFkX2ljbXBfZXJycXVldWUoc2tlbCwgLTEsIGFmLCBpcCk7XG4rXHRBU1NFUlRfRVEoc2tlbC1cdTAwM2VkYXRhLVx1MDAzZWtmdW5jX3JldCwgLUVJTlZBTCwgXCJrZnVuY19yZXRcIik7XG4rXG4rXHR0cmlnZ2VyX3Byb2dfcmVhZF9pY21wX2VycnF1ZXVlKHNrZWwsIG1heF9jb2RlICsgMSwgYWYsIGlwKTtcbitcdEFTU0VSVF9FUShza2VsLVx1MDAzZWRhdGEtXHUwMDNla2Z1bmNfcmV0LCAtRUlOVkFMLCBcImtmdW5jX3JldFwiKTtcbitcbitcdGlmIChhZiA9PSBBRl9JTkVUKSB7XG4rXHRcdHRyaWdnZXJfcHJvZ19yZWFkX2ljbXBfZXJycXVldWUoc2tlbCwgSUNNUF9GUkFHX05FRURFRCwgYWYsIGlwKTtcbitcdFx0QVNTRVJUX0VRKHNrZWwtXHUwMDNlZGF0YS1cdTAwM2VrZnVuY19yZXQsIC1FSU5WQUwsIFwia2Z1bmNfcmV0XCIpO1xuK1x0fVxuK31cbitcbitzdGF0aWMgdm9pZCBydW5faWNtcF9ub19yb3V0ZV90ZXN0KHN0cnVjdCBpY21wX3NlbmQgKnNrZWwpXG4re1xuK1x0c3RydWN0IGlwdjRfcGFja2V0IHBrdCA9IHBrdF92NDtcbitcdExJQkJQRl9PUFRTKGJwZl90ZXN0X3J1bl9vcHRzLCBvcHRzLFxuK1x0XHQuZGF0YV9pbiA9IFx1MDAyNnBrdCxcbitcdFx0LmRhdGFfc2l6ZV9pbiA9IHNpemVvZihwa3QpLFxuK1x0KTtcbitcdGludCBlcnI7XG4rXG4rXHRwa3QuaXBoLnZlcnNpb24gPSA0O1xuK1x0cGt0LmlwaC5kYWRkciA9IGluZXRfYWRkcihcIjEyNy4wLjAuMVwiKTtcbitcdHBrdC50Y3AuZGVzdCA9IGh0b25zKDgwKTtcbitcdHNrZWwtXHUwMDNlYnNzLVx1MDAzZXNlcnZlcl9wb3J0ID0gODA7XG4rXHRza2VsLVx1MDAzZWJzcy1cdTAwM2V1bnJlYWNoX3R5cGUgPSBJQ01QX0RFU1RfVU5SRUFDSDtcbitcdHNrZWwtXHUwMDNlYnNzLVx1MDAzZXVucmVhY2hfY29kZSA9IElDTVBfSE9TVF9VTlJFQUNIO1xuK1x0c2tlbC1cdTAwM2VkYXRhLVx1MDAzZWtmdW5jX3JldCA9IEtGVU5DX1JFVF9VTlNFVDtcbitcbitcdGVyciA9IGJwZl9wcm9nX3Rlc3RfcnVuX29wdHMoYnBmX3Byb2dyYW1fX2ZkKHNrZWwtXHUwMDNlcHJvZ3MuZWdyZXNzKSwgXHUwMDI2b3B0cyk7XG4rXHRpZiAoIUFTU0VSVF9PSyhlcnIsIFwidGVzdF9ydW5cIikpXG4rXHRcdHJldHVybjtcbitcdEFTU0VSVF9FUShza2VsLVx1MDAzZWRhdGEtXHUwMDNla2Z1bmNfcmV0LCAtRU5FVFVOUkVBQ0gsIFwia2Z1bmNfcmV0X25vX3JvdXRlXCIpO1xuK31cbitcbit2b2lkIHRlc3RfaWNtcF9zZW5kX3VucmVhY2hfY2dyb3VwKHZvaWQpXG4re1xuK1x0c3RydWN0IGljbXBfc2VuZCAqc2tlbDtcbitcdGludCBjZ3JvdXBfZmQgPSAtMTtcbitcbitcdHNrZWwgPSBpY21wX3NlbmRfX29wZW5fYW5kX2xvYWQoKTtcbitcdGlmICghQVNTRVJUX09LX1BUUihza2VsLCBcInNrZWxfb3BlblwiKSlcbitcdFx0Z290byBjbGVhbnVwO1xuK1xuK1x0Y2dyb3VwX2ZkID0gdGVzdF9fam9pbl9jZ3JvdXAoXCIvaWNtcF9zZW5kX3VucmVhY2hfY2dyb3VwXCIpO1xuK1x0aWYgKCFBU1NFUlRfT0tfRkQoY2dyb3VwX2ZkLCBcImpvaW5fY2dyb3VwXCIpKVxuK1x0XHRnb3RvIGNsZWFudXA7XG4rXG4rXHRza2VsLVx1MDAzZWxpbmtzLmVncmVzcyA9XG4rXHRcdGJwZl9wcm9ncmFtX19hdHRhY2hfY2dyb3VwKHNrZWwtXHUwMDNlcHJvZ3MuZWdyZXNzLCBjZ3JvdXBfZmQpO1xuK1x0aWYgKCFBU1NFUlRfT0tfUFRSKHNrZWwtXHUwMDNlbGlua3MuZWdyZXNzLCBcInByb2dfYXR0YWNoX2Nncm91cFwiKSlcbitcdFx0Z290byBjbGVhbnVwO1xuK1xuK1x0aWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoXCJpcHY0XCIpKVxuK1x0XHRydW5faWNtcF90ZXN0KHNrZWwsIEFGX0lORVQsIFwiMTI3LjAuMC4xXCIsIE5SX0lDTVBfVU5SRUFDSCk7XG4rXG4rXHRpZiAodGVzdF9fc3RhcnRfc3VidGVzdChcImlwdjZcIikpXG4rXHRcdHJ1bl9pY21wX3Rlc3Qoc2tlbCwgQUZfSU5FVDYsIFwiOjoxXCIsIElDTVBWNl9SRUpFQ1RfUk9VVEUpO1xuK1xuK1x0aWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoXCJub19yb3V0ZVwiKSlcbitcdFx0cnVuX2ljbXBfbm9fcm91dGVfdGVzdChza2VsKTtcbitcbitjbGVhbnVwOlxuK1x0aWNtcF9zZW5kX19kZXN0cm95KHNrZWwpO1xuK1x0aWYgKGNncm91cF9mZCBcdTAwM2U9IDApXG4rXHRcdGNsb3NlKGNncm91cF9mZCk7XG4rfVxuK1xuK3ZvaWQgdGVzdF9pY21wX3NlbmRfdW5yZWFjaF9yZWN1cnNpb24odm9pZClcbit7XG4rXHRzdHJ1Y3QgaWNtcF9zZW5kICpza2VsO1xuK1x0aW50IGNncm91cF9mZCA9IC0xO1xuK1x0aW50IGVycjtcbitcbitcdGVyciA9IHNldHVwX2Nncm91cF9lbnZpcm9ubWVudCgpO1xuK1x0aWYgKCFBU1NFUlRfT0soZXJyLCBcInNldHVwX2Nncm91cF9lbnZpcm9ubWVudFwiKSlcbitcdFx0cmV0dXJuO1xuK1xuK1x0c2tlbCA9IGljbXBfc2VuZF9fb3Blbl9hbmRfbG9hZCgpO1xuK1x0aWYgKCFBU1NFUlRfT0tfUFRSKHNrZWwsIFwic2tlbF9vcGVuXCIpKVxuK1x0XHRnb3RvIGNsZWFudXA7XG4rXG4rXHRjZ3JvdXBfZmQgPSBnZXRfcm9vdF9jZ3JvdXAoKTtcbitcdGlmICghQVNTRVJUX09LX0ZEKGNncm91cF9mZCwgXCJnZXRfcm9vdF9jZ3JvdXBcIikpXG4rXHRcdGdvdG8gY2xlYW51cDtcbitcbitcdHNrZWwtXHUwMDNlZGF0YS1cdTAwM2V0YXJnZXRfcGlkID0gZ2V0cGlkKCk7XG4rXHRza2VsLVx1MDAzZWxpbmtzLnJlY3Vyc2lvbiA9XG4rXHRcdGJwZl9wcm9ncmFtX19hdHRhY2hfY2dyb3VwKHNrZWwtXHUwMDNlcHJvZ3MucmVjdXJzaW9uLCBjZ3JvdXBfZmQpO1xuK1x0aWYgKCFBU1NFUlRfT0tfUFRSKHNrZWwtXHUwMDNlbGlua3MucmVjdXJzaW9uLCBcInByb2dfYXR0YWNoX2Nncm91cFwiKSlcbitcdFx0Z290byBjbGVhbnVwO1xuK1xuK1x0dHJpZ2dlcl9wcm9nX3JlYWRfaWNtcF9lcnJxdWV1ZShza2VsLCBJQ01QX0hPU1RfVU5SRUFDSCwgQUZfSU5FVCxcbitcdFx0XHRcdFx0XCIxMjcuMC4wLjFcIik7XG4rXG4rXHQvKlxuK1x0ICogQmVjYXVzZSB0aGVyZSdzIHJlY3Vyc2lvbiBpbnZvbHZlZCwgdGhlIGZpcnN0IGNhbGwgd2lsbCByZXR1cm4gYXRcbitcdCAqIGluZGV4IDEgc2luY2UgaXQgd2lsbCByZXR1cm4gdGhlIHNlY29uZCwgYW5kIHRoZSBzZWNvbmQgY2FsbCB3aWxsXG4rXHQgKiByZXR1cm4gYXQgaW5kZXggMCBzaW5jZSBpdCB3aWxsIHJldHVybiB0aGUgZmlyc3QuXG4rXHQgKi9cbitcdEFTU0VSVF9FUShza2VsLVx1MDAzZWJzcy1cdTAwM2VyZWNfY291bnQsIDIsIFwicmVjX2NvdW50XCIpO1xuK1x0QVNTRVJUX0VRKHNrZWwtXHUwMDNlZGF0YS1cdTAwM2VyZWNfa2Z1bmNfcmV0c1swXSwgLUVCVVNZLCBcImtmdW5jX3JldHNbMF1cIik7XG4rXHRBU1NFUlRfRVEoc2tlbC1cdTAwM2VkYXRhLVx1MDAzZXJlY19rZnVuY19yZXRzWzFdLCAwLCBcImtmdW5jX3JldHNbMV1cIik7XG4rXG4rY2xlYW51cDpcbitcdGljbXBfc2VuZF9fZGVzdHJveShza2VsKTtcbitcdGlmIChjZ3JvdXBfZmQgXHUwMDNlPSAwKVxuK1x0XHRjbG9zZShjZ3JvdXBfZmQpO1xuK1x0Y2xlYW51cF9jZ3JvdXBfZW52aXJvbm1lbnQoKTtcbit9XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2ljbXBfc2VuZC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2ljbXBfc2VuZC5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLmM2NDJjY2RmOWZkNTQ0XG4tLS0gL2Rldi9udWxsXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvaWNtcF9zZW5kLmNcbkBAIC0wLDAgKzEsMTIzIEBAXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbisjaW5jbHVkZSBcInZtbGludXguaFwiXG4rI2luY2x1ZGUgXHUwMDNjYnBmL2JwZl9oZWxwZXJzLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NicGYvYnBmX2VuZGlhbi5oXHUwMDNlXG4rXG4rLyogMTI3LjAuMC4xIGluIGhvc3QgYnl0ZSBvcmRlciAqL1xuKyNkZWZpbmUgU0VSVkVSX0lQIDB4N0YwMDAwMDFcbisvKiA6OjEgaW4gaG9zdCBieXRlIG9yZGVyIChsYXN0IDMyLWJpdCB3b3JkKSAqL1xuKyNkZWZpbmUgU0VSVkVSX0lQNl9MTyAweDAwMDAwMDAxXG4rXG4rX191MTYgc2VydmVyX3BvcnQgPSAwO1xuK2ludCB1bnJlYWNoX3R5cGUgPSAwO1xuK2ludCB1bnJlYWNoX2NvZGUgPSAwO1xuK2ludCBrZnVuY19yZXQgPSAtMTtcbitpbnQgdGFyZ2V0X3BpZCA9IC0xO1xuK1xuK3Vuc2lnbmVkIGludCByZWNfY291bnQgPSAwO1xuK2ludCByZWNfa2Z1bmNfcmV0c1tdID0geyAtMSwgLTEgfTtcbitcbitTRUMoXCJjZ3JvdXBfc2tiL2VncmVzc1wiKVxuK2ludCBlZ3Jlc3Moc3RydWN0IF9fc2tfYnVmZiAqc2tiKVxuK3tcbitcdHZvaWQgKmRhdGEgPSAodm9pZCAqKShsb25nKXNrYi1cdTAwM2VkYXRhO1xuK1x0dm9pZCAqZGF0YV9lbmQgPSAodm9pZCAqKShsb25nKXNrYi1cdTAwM2VkYXRhX2VuZDtcbitcdHN0cnVjdCBpcGhkciAqaXBoO1xuK1x0c3RydWN0IGlwdjZoZHIgKmlwNmg7XG4rXHRzdHJ1Y3QgdGNwaGRyICp0Y3BoO1xuK1x0X191OCB2ZXJzaW9uO1xuK1xuK1x0aWYgKGRhdGEgKyAxIFx1MDAzZSBkYXRhX2VuZClcbitcdFx0cmV0dXJuIFNLX1BBU1M7XG4rXG4rXHR2ZXJzaW9uID0gKCooKF9fdTggKilkYXRhKSkgXHUwMDNlXHUwMDNlIDQ7XG4rXG4rXHRpZiAodmVyc2lvbiA9PSA0KSB7XG4rXHRcdGlwaCA9IGRhdGE7XG4rXHRcdGlmICgodm9pZCAqKShpcGggKyAxKSBcdTAwM2UgZGF0YV9lbmQgfHxcbitcdFx0ICAgIGlwaC1cdTAwM2Vwcm90b2NvbCAhPSBJUFBST1RPX1RDUCB8fFxuK1x0XHQgICAgaXBoLVx1MDAzZWRhZGRyICE9IGJwZl9odG9ubChTRVJWRVJfSVApKVxuK1x0XHRcdHJldHVybiBTS19QQVNTO1xuK1xuK1x0XHR0Y3BoID0gKHZvaWQgKilpcGggKyBpcGgtXHUwMDNlaWhsICogNDtcbitcdFx0aWYgKCh2b2lkICopKHRjcGggKyAxKSBcdTAwM2UgZGF0YV9lbmQgfHxcbitcdFx0ICAgIHRjcGgtXHUwMDNlZGVzdCAhPSBicGZfaHRvbnMoc2VydmVyX3BvcnQpKVxuK1x0XHRcdHJldHVybiBTS19QQVNTO1xuK1xuK1x0fSBlbHNlIGlmICh2ZXJzaW9uID09IDYpIHtcbitcdFx0aXA2aCA9IGRhdGE7XG4rXHRcdGlmICgodm9pZCAqKShpcDZoICsgMSkgXHUwMDNlIGRhdGFfZW5kIHx8XG4rXHRcdCAgICBpcDZoLVx1MDAzZW5leHRoZHIgIT0gSVBQUk9UT19UQ1ApXG4rXHRcdFx0cmV0dXJuIFNLX1BBU1M7XG4rXG4rXHRcdGlmIChpcDZoLVx1MDAzZWRhZGRyLmluNl91LnU2X2FkZHIzMlswXSAhPSAwIHx8XG4rXHRcdCAgICBpcDZoLVx1MDAzZWRhZGRyLmluNl91LnU2X2FkZHIzMlsxXSAhPSAwIHx8XG4rXHRcdCAgICBpcDZoLVx1MDAzZWRhZGRyLmluNl91LnU2X2FkZHIzMlsyXSAhPSAwIHx8XG4rXHRcdCAgICBpcDZoLVx1MDAzZWRhZGRyLmluNl91LnU2X2FkZHIzMlszXSAhPSBicGZfaHRvbmwoU0VSVkVSX0lQNl9MTykpXG4rXHRcdFx0cmV0dXJuIFNLX1BBU1M7XG4rXG4rXHRcdHRjcGggPSAodm9pZCAqKShpcDZoICsgMSk7XG4rXHRcdGlmICgodm9pZCAqKSh0Y3BoICsgMSkgXHUwMDNlIGRhdGFfZW5kIHx8XG4rXHRcdCAgICB0Y3BoLVx1MDAzZWRlc3QgIT0gYnBmX2h0b25zKHNlcnZlcl9wb3J0KSlcbitcdFx0XHRyZXR1cm4gU0tfUEFTUztcbitcdH0gZWxzZSB7XG4rXHRcdHJldHVybiBTS19QQVNTO1xuK1x0fVxuK1xuK1x0a2Z1bmNfcmV0ID0gYnBmX2ljbXBfc2VuZChza2IsIHVucmVhY2hfdHlwZSwgdW5yZWFjaF9jb2RlKTtcbitcbitcdHJldHVybiBTS19EUk9QO1xuK31cbitcbitTRUMoXCJjZ3JvdXBfc2tiL2VncmVzc1wiKVxuK2ludCByZWN1cnNpb24oc3RydWN0IF9fc2tfYnVmZiAqc2tiKVxuK3tcbitcdHZvaWQgKmRhdGEgPSAodm9pZCAqKShsb25nKXNrYi1cdTAwM2VkYXRhO1xuK1x0dm9pZCAqZGF0YV9lbmQgPSAodm9pZCAqKShsb25nKXNrYi1cdTAwM2VkYXRhX2VuZDtcbitcdHN0cnVjdCBpY21waGRyICppY21waDtcbitcdHN0cnVjdCB0Y3BoZHIgKnRjcGg7XG4rXHRzdHJ1Y3QgaXBoZHIgKmlwaDtcbitcdGludCByZXQ7XG4rXG4rXHRpZiAoKGJwZl9nZXRfY3VycmVudF9waWRfdGdpZCgpIFx1MDAzZVx1MDAzZSAzMikgIT0gdGFyZ2V0X3BpZClcbitcdFx0cmV0dXJuIFNLX1BBU1M7XG4rXG4rXHRpcGggPSBkYXRhO1xuK1x0aWYgKCh2b2lkICopKGlwaCArIDEpIFx1MDAzZSBkYXRhX2VuZCB8fCBpcGgtXHUwMDNldmVyc2lvbiAhPSA0KVxuK1x0XHRyZXR1cm4gU0tfUEFTUztcbitcbitcdGlmIChpcGgtXHUwMDNlZGFkZHIgIT0gYnBmX2h0b25sKFNFUlZFUl9JUCkpXG4rXHRcdHJldHVybiBTS19QQVNTO1xuK1xuK1x0aWYgKGlwaC1cdTAwM2Vwcm90b2NvbCA9PSBJUFBST1RPX1RDUCkge1xuK1x0XHR0Y3BoID0gKHZvaWQgKilpcGggKyBpcGgtXHUwMDNlaWhsICogNDtcbitcdFx0aWYgKCh2b2lkICopKHRjcGggKyAxKSBcdTAwM2UgZGF0YV9lbmQgfHxcbitcdFx0ICAgIHRjcGgtXHUwMDNlZGVzdCAhPSBicGZfaHRvbnMoc2VydmVyX3BvcnQpKVxuK1x0XHRcdHJldHVybiBTS19QQVNTO1xuK1x0fSBlbHNlIGlmIChpcGgtXHUwMDNlcHJvdG9jb2wgPT0gSVBQUk9UT19JQ01QKSB7XG4rXHRcdGljbXBoID0gKHZvaWQgKilpcGggKyBpcGgtXHUwMDNlaWhsICogNDtcbitcdFx0aWYgKCh2b2lkICopKGljbXBoICsgMSkgXHUwMDNlIGRhdGFfZW5kIHx8XG4rXHRcdCAgICBpY21waC1cdTAwM2V0eXBlICE9IHVucmVhY2hfdHlwZSB8fCBpY21waC1cdTAwM2Vjb2RlICE9IHVucmVhY2hfY29kZSlcbitcdFx0XHRyZXR1cm4gU0tfUEFTUztcbitcdH0gZWxzZSB7XG4rXHRcdHJldHVybiBTS19QQVNTO1xuK1x0fVxuK1xuK1x0LypcbitcdCAqIFRoaXMgY2FsbCB3aWxsIHByb3Zva2UgYSByZWN1cnNpb246IHRoZSBJQ01QIHBhY2tldCBnZW5lcmF0ZWQgYnkgdGhlXG4rXHQgKiBrZnVuYyB3aWxsIHJlLXRyaWdnZXIgdGhpcyBwcm9ncmFtIHNpbmNlIHdlIGFyZSBpbiB0aGUgcm9vdCBjZ3JvdXAgaW5cbitcdCAqIHdoaWNoIHRoZSBrZXJuZWwgSUNNUCBzb2NrZXQgYmVsb25ncy4gSG93ZXZlciB3aGVuIHJlLWVudGVyaW5nIHRoZVxuK1x0ICoga2Z1bmMsIGl0IHNob3VsZCByZXR1cm4gRUJVU1kuXG4rXHQgKi9cbitcdHJldCA9IGJwZl9pY21wX3NlbmQoc2tiLCB1bnJlYWNoX3R5cGUsIHVucmVhY2hfY29kZSk7XG4rXHRyZWNfa2Z1bmNfcmV0c1tyZWNfY291bnQgXHUwMDI2IDFdID0gcmV0O1xuK1x0X19zeW5jX2ZldGNoX2FuZF9hZGQoXHUwMDI2cmVjX2NvdW50LCAxKTtcbitcbitcdC8qIExldCB0aGUgZmlyc3QgSUNNUCBlcnJvciBtZXNzYWdlIHBhc3MgKi9cbitcdGlmIChpcGgtXHUwMDNlcHJvdG9jb2wgPT0gSVBQUk9UT19JQ01QKVxuK1x0XHRyZXR1cm4gU0tfUEFTUztcbitcbitcdHJldHVybiBTS19EUk9QO1xuK31cbitcbitjaGFyIExJQ0VOU0VbXSBTRUMoXCJsaWNlbnNlXCIpID0gXCJEdWFsIEJTRC9HUExcIjtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI0VDE5OjE0OjM2LjUwMDQxODQyWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjAwNTI3ODMyMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBOZXcgYGJwZl9pY21wX3NlbmRgIGtmdW5jKipcblxuT2theSwgc28gdGhlcmUncyBhIG5ldyBwYXRjaCBpbnRyb2R1Y2luZyBhIGBicGZfaWNtcF9zZW5kYCBrZnVuYy4gSW50ZXJlc3RpbmcsIEkgc2VlIGl0J3MgdG91Y2hpbmcgYG5ldC9jb3JlL2ZpbHRlci5jYCwgd2hpY2ggaXMgYSBrZXkgYXJlYSBmb3IgQlBGLCBhbmQgaXQgYWxzbyBpbmNsdWRlcyBzb21lIHNlbGYtdGVzdHMsIHdoaWNoIGlzIGdyZWF0LiBJdCBsb29rcyBsaWtlIHRoZSBrZnVuYyBpdHNlbGYgdGFrZXMgdGhlIHVzdWFsIGBzdHJ1Y3QgX19za19idWZmICpza2JfY3R4YCwgcGx1cyB0aGUgSUNNUCBgdHlwZWAgYW5kIGBjb2RlYCwgYW5kIHRoZW4gY2xvbmVzIHRoZSBTS0IgYW5kIHVzZXMgYGljbXBfc2VuZGAgb3IgYGljbXB2Nl9zZW5kYCB0byBhY3R1YWxseSB0cmFuc21pdCB0aGUgSUNNUCBtZXNzYWdlLiBTZWVtcyBzdHJhaWdodGZvcndhcmQgZW5vdWdoIOKAkyBmdW5jdGlvbmFsbHkgc291bmQgYW5kIGRlZmluaXRlbHkgcmVhY2hhYmxlIGZyb20gQlBGIHByb2dyYW1zLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgXCJUaGlzIG5lZWRzIGZ1enppbmchXCJcblxuTm93LCBsZXQncyBnZXQgaW50byB0aGUgbml0dHktZ3JpdHR5LiBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgcmVxdWlyZWQgY29uZmlndXJhdGlvbnMuIFNpbmNlIHRoaXMga2Z1bmMgaXMgcmVnaXN0ZXJlZCBmb3IgYEJQRl9QUk9HX1RZUEVfQ0dST1VQX1NLQmAsIEkga25vdyB3ZSdsbCBkZWZpbml0ZWx5IG5lZWQgYENPTkZJR19DR1JPVVBfQlBGYCBhbmQgYENPTkZJR19CUEZfU1lTQ0FMTGAgZW5hYmxlZC4gSXTigJlzIGFsc28gdXNpbmcgYGljbXBfc2VuZGAgYW5kIGBpY21wdjZfc2VuZGAsIHNvIGBDT05GSUdfSU5FVGAgYW5kIGBDT05GSUdfSVBWNmAgYXJlIGRlZmluaXRlbHkgZ29pbmcgdG8gYmUgcmVsZXZhbnQsIGFzIGNvbmZpcm1lZCBieSB0aG9zZSBwcmVwcm9jZXNzb3IgZGlyZWN0aXZlcy5cblxuVG8gYmUgZXh0cmEgc3VyZSBhYm91dCB0aGUgY29uZmlnLCBJIHdpbGwgY2hlY2sgYG5ldC9jb3JlL2ZpbHRlci5jYCBpdHNlbGYuXG5MZXQncyBjb25maXJtIHRoZSBjb2RlLCBhbmQgY29uZmlybSBgYnBmX2ljbXBfc2VuZGAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgzNDksIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOTcsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNFQxOToxNDo0Mi41MDU2OTg1NDJaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjEwNjEwMzIwMiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJicGZfaWNtcF9zZW5kXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9jb3JlL2ZpbHRlci5jPTEyNDkxPV9fYnBmX2tmdW5jIGludCBicGZfeGRwX3B1bGxfZGF0YShzdHJ1Y3QgeGRwX21kICp4LCB1MzIgbGVuKVxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtMTI1NTItLyoqXFxubmV0L2NvcmUvZmlsdGVyLmM6MTI1NTM6ICogYnBmX2ljbXBfc2VuZCAtIFNlbmQgYW4gSUNNUCBjb250cm9sIG1lc3NhZ2VcXG5uZXQvY29yZS9maWx0ZXIuYy0xMjU1NC0gKiBAc2tiX2N0eDogUGFja2V0IHRoYXQgdHJpZ2dlcmVkIHRoZSBjb250cm9sIG1lc3NhZ2VcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTEyNTcyLSAqL1xcbm5ldC9jb3JlL2ZpbHRlci5jOjEyNTczOl9fYnBmX2tmdW5jIGludCBicGZfaWNtcF9zZW5kKHN0cnVjdCBfX3NrX2J1ZmYgKnNrYl9jdHgsIGludCB0eXBlLCBpbnQgY29kZSlcXG5uZXQvY29yZS9maWx0ZXIuYy0xMjU3NC17XFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYz0xMjY3Mj1CVEZfS0ZVTkNTX1NUQVJUKGJwZl9rZnVuY19jaGVja19zZXRfaWNtcF9zZW5kKVxcbm5ldC9jb3JlL2ZpbHRlci5jOjEyNjczOkJURl9JRF9GTEFHUyhmdW5jLCBicGZfaWNtcF9zZW5kKVxcbm5ldC9jb3JlL2ZpbHRlci5jLTEyNjc0LUJURl9LRlVOQ1NfRU5EKGJwZl9rZnVuY19jaGVja19zZXRfaWNtcF9zZW5kKVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2ljbXBfc2VuZC5jPTIxPWludCBlZ3Jlc3Moc3RydWN0IF9fc2tfYnVmZiAqc2tiKVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2ljbXBfc2VuZC5jLTY2LVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9pY21wX3NlbmQuYzo2NzpcXHRrZnVuY19yZXQgPSBicGZfaWNtcF9zZW5kKHNrYiwgdW5yZWFjaF90eXBlLCB1bnJlYWNoX2NvZGUpO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9pY21wX3NlbmQuYy02OC1cXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9pY21wX3NlbmQuYz03Mz1pbnQgcmVjdXJzaW9uKHN0cnVjdCBfX3NrX2J1ZmYgKnNrYilcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9pY21wX3NlbmQuYy0xMTEtXFx0ICovXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2ljbXBfc2VuZC5jOjExMjpcXHRyZXQgPSBicGZfaWNtcF9zZW5kKHNrYiwgdW5yZWFjaF90eXBlLCB1bnJlYWNoX2NvZGUpO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9pY21wX3NlbmQuYy0xMTMtXFx0cmVjX2tmdW5jX3JldHNbcmVjX2NvdW50IFxcdTAwMjYgMV0gPSByZXQ7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI0VDE5OjE0OjQ0LjYxMTgxMTA5NFoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUzNzY5NDYzNjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBgYnBmX2ljbXBfc2VuZGAga2Z1bmMqKlxuXG5Pa2F5LCBzbyBJIHNlZSB0aGF0IGBicGZfaWNtcF9zZW5kYCBpcyBiZWluZyBicm91Z2h0IGluIHRocm91Z2ggYGJwZl9rZnVuY19jaGVja19zZXRfaWNtcF9zZW5kYCBhbmQgcmVnaXN0ZXJlZCBmb3IgYEJQRl9QUk9HX1RZUEVfQ0dST1VQX1NLQmAuIFRoYXQgbWVhbnMgYENPTkZJR19DR1JPVVBfQlBGYCBpcyBkZWZpbml0ZWx5IGEgcHJlcmVxdWlzaXRlLiBJIGtub3cgdGhhdCBtdWNoLlxuXG5Ob3csIGxldCdzIG1ha2Ugc3VyZSB3ZSd2ZSBnb3QgYWxsIHRoZSBkdWNrcyBpbiBhIHJvdyBjb25maWctd2lzZS4gSSdtIHRoaW5raW5nLi4uIGZvciB0aGUgYWN0dWFsIElDTVAgc2VuZCBmdW5jdGlvbmFsaXR5LCB3ZSdyZSBnb2luZyB0byBuZWVkIGBDT05GSUdfSU5FVGAgYW5kIGBDT05GSUdfSVBWNmAsIGZvciBzdXJlLiBBbmQsIG9idmlvdXNseSwgc2luY2Ugd2UncmUgZGVhbGluZyB3aXRoIEJQRiwgYENPTkZJR19CUEZfU1lTQ0FMTGAgaXMgYSBnaXZlbi5cblxuSnVzdCB0byBiZSBhYnNvbHV0ZWx5IGNsZWFyIGluIG15IG1pbmQsIHRoZSBjcml0aWNhbCBzeW1ib2wgd2UncmUgZm9jdXNpbmcgb24gaGVyZSBpcyBgYnBmX2ljbXBfc2VuZGAuXG5cbkxldCBtZSBxdWlja2x5IGNvbmZpcm0gdGhhdCBpdCdzIHRoZSBvbmx5IGZ1bmN0aW9uIGJlaW5nIGFkZGVkLiBZZXMsIHRoYXQncyByaWdodCwganVzdCB0aGUgb25lLlxuXG5BbHJpZ2h0LCBsZXQncyBydW4gdGhyb3VnaCB0aG9zZSBjb25maWd1cmF0aW9ucyBvbmUgbW9yZSB0aW1lIHRvIG1ha2Ugc3VyZSBJJ20gbm90IG1pc3NpbmcgYW55dGhpbmc6XG5cbiogICBgQ09ORklHX0NHUk9VUF9CUEZgXG4qICAgYENPTkZJR19JTkVUYFxuKiAgIGBDT05GSUdfSVBWNmBcbiogICBgQ09ORklHX0JQRl9TWVNDQUxMYFxuXG5Pa2F5LCBhcmUgdGhlcmUgYW55IG90aGVyIGRlcGVuZGVuY2llcyBJIG5lZWQgdG8gYmUgYXdhcmUgb2Y/IExldCBtZSB0YWtlIGEgbG9vayBhdCBgbmV0L2NvcmUvZmlsdGVyLmNgIGFyb3VuZCB0aGUgYHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXRgIGNhbGwuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk2MTMsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNjUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjRUMTk6MTQ6NDkuOTg4NzU5NjA3WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI4ODA5MTY1ODcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldC4qYnBmX2tmdW5jX3NldF9pY21wX3NlbmRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2NvcmUvZmlsdGVyLmM9MTI3MTE9c3RhdGljIGludCBfX2luaXQgYnBmX2tmdW5jX2luaXQodm9pZClcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTEyNzMxLVxcdHJldCA9IHJldCA/OiByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfU0NIRURfQ0xTLCBcXHUwMDI2YnBmX2tmdW5jX3NldF90Y3BfcmVxc2spO1xcbm5ldC9jb3JlL2ZpbHRlci5jOjEyNzMyOlxcdHJldCA9IHJldCA/OiByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfQ0dST1VQX1NLQiwgXFx1MDAyNmJwZl9rZnVuY19zZXRfaWNtcF9zZW5kKTtcXG5uZXQvY29yZS9maWx0ZXIuYy0xMjczMy1cXHRyZXR1cm4gcmV0ID86IHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9TT0NLX09QUywgXFx1MDAyNmJwZl9rZnVuY19zZXRfc29ja19vcHMpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNFQxOToxNDo1Mi44Njk2ODEwMDRaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2Mzk5Njc2ODg1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgRnV6emluZyBQb3RlbnRpYWwgb2YgYGJwZl9pY21wX3NlbmRgKipcblxuT2theSwgc28gdGhlIGBicGZfaWNtcF9zZW5kYCBmdW5jdGlvbiBpcyB0aGUgKm9ubHkqIHN5bWJvbCBmbGFnZ2VkIGFzIHRoZSBwcmltYXJ5IGZvY3VzIGhlcmUuIFRoYXQsIGluIGl0c2VsZiwgaXMgc2lnbmlmaWNhbnQuIFRoZSBjb25maWd1cmF0aW9uIHByZXJlcXVpc2l0ZXMgYXJlIGBDR1JPVVBfQlBGYCwgYEJQRl9TWVNDQUxMYCwgYElORVRgLCBhbmQgYElQVjZgIOKAkyB0aGUgdXN1YWwgc3VzcGVjdHMgZm9yIG5ldHdvcmstcmVsYXRlZCBCUEYgZnV6emluZy5cblxuQWhhISBgYnBmX2ljbXBfc2VuZGAgaXMgYSBCUEYga2Z1bmMuIFRoYXQgY2hhbmdlcyB0aGUgZ2FtZS4gSWYgaXQncyBhIGtmdW5jLCBpdCBtZWFucyBTeXprYWxsZXIgKm5lZWRzKiB0byBrbm93IGFib3V0IGl0LiBUaGFua2Z1bGx5LCBTeXprYWxsZXIgaW50ZWxsaWdlbnRseSBleHRyYWN0cyBrZnVuY3MgZnJvbSBCVEYgaW5mb3JtYXRpb24uIFNvLCBhcyBsb25nIGFzIHRoaXMgZnVuY3Rpb24gaXMgcHJvcGVybHkgZGVmaW5lZCBpbiB0aGUga2VybmVsIEJURiwgU3l6a2FsbGVyIHdpbGwgYXV0b21hdGljYWxseSBwaWNrIGl0IHVwLCBlbGltaW5hdGluZyBhIG1hbnVhbCBpbnRlZ3JhdGlvbiBlZmZvcnQuIFRoYXQncyBnb29kIG5ld3MuXG5cbkdpdmVuIHRoYXQgaXQgaXMgYSBrZnVuYywgdGhlIHBhdGNoICphYnNvbHV0ZWx5KiB3YXJyYW50cyBmdXp6aW5nLiBUaGUgZmFjdCB0aGF0IGl0J3MgYSBuZXcgZmVhdHVyZSwgc3BlY2lmaWNhbGx5IGEgbmV3IEJQRiBrZnVuYywgdGhhdCBhbGxvd3MgdXNlcnNwYWNlIEJQRiBwcm9ncmFtcyBhdHRhY2hlZCB0byBjZ3JvdXAgc2tiIGhvb2tzIHRvIHNlbmQgSUNNUCBjb250cm9sIG1lc3NhZ2Vz4oCmIHRoYXQncyBhIHBlcmZlY3QgdGFyZ2V0LiBUaGlzIGlzIGEgKmRpcmVjdCogbmV3IGZ1bmN0aW9uYWwgZmVhdHVyZSBleHBvc2VkIHRvIHVzZXJzcGFjZSB2aWEgQlBGIHByb2dyYW1zLCB3aGljaCBpcyB0aGUgZGVmaW5pdGlvbiBvZiBhIHByaW1lIGZ1enppbmcgdGFyZ2V0LlxuXG5BbHJpZ2h0LCBJJ20gcmVhZHkgdG8gZm9ybWFsaXplIG15IGFzc2Vzc21lbnQ6XG5cbmBgYFxuV29ydGhGdXp6aW5nOiB0cnVlXG5Gb2N1c1N5bWJvbHM6IFtcImJwZl9pY21wX3NlbmRcIl1cbkVuYWJsZUNvbmZpZ3M6IFtcIkNHUk9VUF9CUEZcIiwgXCJCUEZfU1lTQ0FMTFwiLCBcIklORVRcIiwgXCJJUFY2XCJdXG5SZWFzb25pbmc6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgQlBGIGtmdW5jIGBicGZfaWNtcF9zZW5kYCB3aGljaCBhbGxvd3MgQlBGIHByb2dyYW1zIGF0dGFjaGVkIHRvIGNncm91cCBza2IgaG9va3MgdG8gc2VuZCBJQ01QIGNvbnRyb2wgbWVzc2FnZXMuIFRoaXMgaXMgYSBuZXcgZnVuY3Rpb25hbCBmZWF0dXJlIHRoYXQgaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBCUEYgcHJvZ3JhbXMsIG1ha2luZyBpdCBhIHByaW1lIHRhcmdldCBmb3IgZnV6emluZy5cIlxuYGBgXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNDc0LCJPdXRwdXRUb2tlbnMiOjEyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yNFQxOToxNDo1OS4yNjkzNTk5MzlaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc1NDM1NjE5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJDR1JPVVBfQlBGXCIsXG4gICAgXCJCUEZfU1lTQ0FMTFwiLFxuICAgIFwiSU5FVFwiLFxuICAgIFwiSVBWNlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJwZl9pY21wX3NlbmRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IEJQRiBrZnVuYyBgYnBmX2ljbXBfc2VuZGAgd2hpY2ggYWxsb3dzIEJQRiBwcm9ncmFtcyBhdHRhY2hlZCB0byBjZ3JvdXAgc2tiIGhvb2tzIHRvIHNlbmQgSUNNUCBjb250cm9sIG1lc3NhZ2VzLiBUaGlzIGlzIGEgbmV3IGZ1bmN0aW9uYWwgZmVhdHVyZSB0aGF0IGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgQlBGIHByb2dyYW1zLCBtYWtpbmcgaXQgYSBwcmltZSB0YXJnZXQgZm9yIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQ0dST1VQX0JQRlwiLFxuICAgIFwiQlBGX1NZU0NBTExcIixcbiAgICBcIklORVRcIixcbiAgICBcIklQVjZcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJicGZfaWNtcF9zZW5kXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBCUEYga2Z1bmMgYGJwZl9pY21wX3NlbmRgIHdoaWNoIGFsbG93cyBCUEYgcHJvZ3JhbXMgYXR0YWNoZWQgdG8gY2dyb3VwIHNrYiBob29rcyB0byBzZW5kIElDTVAgY29udHJvbCBtZXNzYWdlcy4gVGhpcyBpcyBhIG5ldyBmdW5jdGlvbmFsIGZlYXR1cmUgdGhhdCBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIEJQRiBwcm9ncmFtcywgbWFraW5nIGl0IGEgcHJpbWUgdGFyZ2V0IGZvciBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflownjth2[0].run-triage(0) Phase: Succeeded StartedAt: 2026-06-24 19:06:10 +0000 UTC FinishedAt: 2026-06-24 19:15:01 +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": "a975094bf98ca97be9146f9d3b5681a6f9cf5ce3", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "CGROUP_BPF", "BPF_SYSCALL", "INET", "IPV6" ], "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": "a975094bf98ca97be9146f9d3b5681a6f9cf5ce3", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "CGROUP_BPF", "BPF_SYSCALL", "INET", "IPV6" ], "series_id": "2db1e935-8379-4970-b7ca-69d54fbd936b" }, "track": "KASAN", "fuzz": { "focus": [ "bpf" ], "focus_symbols": [ "bpf_icmp_send" ], "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+CgkJCTx0ZD4yMDI2LzA2LzI0IDE5OjE0PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0NHUk9VUF9CUEYmIzM0OywKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OywKICAgICYjMzQ7SU5FVCYjMzQ7LAogICAgJiMzNDtJUFY2JiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YnBmX2ljbXBfc2VuZCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IEJQRiBrZnVuYyBgYnBmX2ljbXBfc2VuZGAgd2hpY2ggYWxsb3dzIEJQRiBwcm9ncmFtcyBhdHRhY2hlZCB0byBjZ3JvdXAgc2tiIGhvb2tzIHRvIHNlbmQgSUNNUCBjb250cm9sIG1lc3NhZ2VzLiBUaGlzIGlzIGEgbmV3IGZ1bmN0aW9uYWwgZmVhdHVyZSB0aGF0IGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgQlBGIHByb2dyYW1zLCBtYWtpbmcgaXQgYSBwcmltZSB0YXJnZXQgZm9yIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjQgMTk6MTQ8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA1NGE0OTI5ZDNkMzQyZWU1ZjY5ZDRmNzZhZjcyN2Y5ZGVhOTFjOTExXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBKdW4gMjQgMTk6MTQ6MzUgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUvZmlsdGVyLmMgYi9uZXQvY29yZS9maWx0ZXIuY1xuaW5kZXggMmU5NmI0Yjg0N2NlMTIuLmYzYWE0OTRlZDEwNTMwIDEwMDY0NFxuLS0tIGEvbmV0L2NvcmUvZmlsdGVyLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9jb3JlL2ZpbHRlci5jXG5AQCAtODQsNiAmIzQzOzg0LDkgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC91bi5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbmV0L3hkcF9zb2NrX2Rydi5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbmV0L2luZXRfZHNjcC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2ljbXB2Ni5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY25ldC9pY21wLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbmV0L2lwNl9yb3V0ZS5oXHUwMDNlXG4gXG4gI2luY2x1ZGUgXCYjMzQ7ZGV2LmhcJiMzNDtcbiBcbkBAIC0xMjU0Niw2ICYjNDM7MTI1NDksODQgQEAgX19icGZfa2Z1bmMgaW50IGJwZl94ZHBfcHVsbF9kYXRhKHN0cnVjdCB4ZHBfbWQgKngsIHUzMiBsZW4pXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4mIzQzOy8qKlxuJiM0MzsgKiBicGZfaWNtcF9zZW5kIC0gU2VuZCBhbiBJQ01QIGNvbnRyb2wgbWVzc2FnZVxuJiM0MzsgKiBAc2tiX2N0eDogUGFja2V0IHRoYXQgdHJpZ2dlcmVkIHRoZSBjb250cm9sIG1lc3NhZ2VcbiYjNDM7ICogQHR5cGU6IElDTVAgdHlwZSAob25seSBJQ01QX0RFU1RfVU5SRUFDSC9JQ01QVjZfREVTVF9VTlJFQUNIIHN1cHBvcnRlZClcbiYjNDM7ICogQGNvZGU6IElDTVAgY29kZSAoMC0xNSBleGNlcHQgSUNNUF9GUkFHX05FRURFRCBmb3IgSVB2NCwgMC02IGZvciBJUHY2KVxuJiM0MzsgKlxuJiM0MzsgKiBTZW5kcyBhbiBJQ01QIGNvbnRyb2wgbWVzc2FnZSBpbiByZXNwb25zZSB0byB0aGUgcGFja2V0LiBUaGUgb3JpZ2luYWwgcGFja2V0XG4mIzQzOyAqIGlzIGNsb25lZCBiZWZvcmUgc2VuZGluZyB0aGUgSUNNUCBtZXNzYWdlLCBzbyB0aGUgQlBGIHByb2dyYW0gY2FuIHN0aWxsIGxldFxuJiM0MzsgKiB0aGUgcGFja2V0IHBhc3MgaWYgZGVzaXJlZC5cbiYjNDM7ICpcbiYjNDM7ICogQ3VycmVudGx5IG9ubHkgSUNNUF9ERVNUX1VOUkVBQ0ggKElQdjQpIGFuZCBJQ01QVjZfREVTVF9VTlJFQUNIIChJUHY2KSBhcmVcbiYjNDM7ICogc3VwcG9ydGVkLlxuJiM0MzsgKlxuJiM0MzsgKiBSZXR1cm46IDAgb24gc3VjY2VzcyAoc2VuZCBhdHRlbXB0KSwgbmVnYXRpdmUgZXJyb3IgY29kZSBvbiBmYWlsdXJlOlxuJiM0MzsgKiAgICAgICAgIC1FQlVTWTogUmVjdXJzaW9uIGRldGVjdGVkXG4mIzQzOyAqICAgICAgICAgLUVQUk9UT05PU1VQUE9SVDogTm9uLUlQIHByb3RvY29sXG4mIzQzOyAqICAgICAgICAgLUVPUE5PVFNVUFA6IFVuc3VwcG9ydGVkIElDTVAgdHlwZVxuJiM0MzsgKiAgICAgICAgIC1FSU5WQUw6IEludmFsaWQgY29kZSBwYXJhbWV0ZXJcbiYjNDM7ICogICAgICAgICAtRU5FVFVOUkVBQ0g6IFVudXNhYmxlIElQdjQgcm91dGUvZHN0IGF0dGFjaGVkIHRvIHRoZSBza2JcbiYjNDM7ICogICAgICAgICAtRU5PTUVNOiBNZW1vcnkgYWxsb2NhdGlvbiBmYWlsZWRcbiYjNDM7ICovXG4mIzQzO19fYnBmX2tmdW5jIGludCBicGZfaWNtcF9zZW5kKHN0cnVjdCBfX3NrX2J1ZmYgKnNrYl9jdHgsIGludCB0eXBlLCBpbnQgY29kZSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBza19idWZmICpza2IgPSAoc3RydWN0IHNrX2J1ZmYgKilza2JfY3R4O1xuJiM0MztcdHN0cnVjdCBza19idWZmICpuc2tiO1xuJiM0MztcdHN0cnVjdCBzb2NrICpzaztcbiYjNDM7XG4mIzQzO1x0c2sgPSBza2JfdG9fZnVsbF9zayhza2IpO1xuJiM0MztcdGlmIChzayBcdTAwMjZcdTAwMjYgc2stXHUwMDNlc2tfa2Vybl9zb2NrIFx1MDAyNlx1MDAyNlxuJiM0MztcdCAgICAoc2stXHUwMDNlc2tfcHJvdG9jb2wgPT0gSVBQUk9UT19JQ01QIHx8IHNrLVx1MDAzZXNrX3Byb3RvY29sID09IElQUFJPVE9fSUNNUFY2KSlcbiYjNDM7XHRcdHJldHVybiAtRUJVU1k7XG4mIzQzO1xuJiM0MztcdHN3aXRjaCAoc2tiLVx1MDAzZXByb3RvY29sKSB7XG4mIzQzOyNpZiBJU19FTkFCTEVEKENPTkZJR19JTkVUKVxuJiM0MztcdGNhc2UgaHRvbnMoRVRIX1BfSVApOiB7XG4mIzQzO1x0XHRpZiAodHlwZSAhPSBJQ01QX0RFU1RfVU5SRUFDSClcbiYjNDM7XHRcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuJiM0MztcdFx0aWYgKGNvZGUgXHUwMDNjIDAgfHwgY29kZSBcdTAwM2UgTlJfSUNNUF9VTlJFQUNIIHx8XG4mIzQzO1x0XHQgICAgY29kZSA9PSBJQ01QX0ZSQUdfTkVFREVEKSAvKiBuZWVkcyBhIHZhbGlkIG5leHQtaG9wIE1UVSAqL1xuJiM0MztcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XG4mIzQzO1x0XHQvKiBpY21wX3NlbmQgcmVxdWlyZXMgYSBydGFibGU7IHRlc3QtcnVuIHN5bnRoZXRpYyBza2JzIGxhY2sgb25lLiAqL1xuJiM0MztcdFx0aWYgKCFza2JfdmFsaWRfZHN0KHNrYikpXG4mIzQzO1x0XHRcdHJldHVybiAtRU5FVFVOUkVBQ0g7XG4mIzQzO1xuJiM0MztcdFx0bnNrYiA9IHNrYl9jbG9uZShza2IsIEdGUF9BVE9NSUMpO1xuJiM0MztcdFx0aWYgKCFuc2tiKVxuJiM0MztcdFx0XHRyZXR1cm4gLUVOT01FTTtcbiYjNDM7XG4mIzQzO1x0XHRtZW1zZXQoSVBDQihuc2tiKSwgMCwgc2l6ZW9mKCpJUENCKG5za2IpKSk7XG4mIzQzO1x0XHRpY21wX3NlbmQobnNrYiwgdHlwZSwgY29kZSwgMCk7XG4mIzQzO1x0XHRjb25zdW1lX3NrYihuc2tiKTtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdH1cbiYjNDM7I2VuZGlmXG4mIzQzOyNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2KVxuJiM0MztcdGNhc2UgaHRvbnMoRVRIX1BfSVBWNik6XG4mIzQzO1x0XHRpZiAodHlwZSAhPSBJQ01QVjZfREVTVF9VTlJFQUNIKVxuJiM0MztcdFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4mIzQzO1x0XHRpZiAoY29kZSBcdTAwM2MgMCB8fCBjb2RlIFx1MDAzZSBJQ01QVjZfUkVKRUNUX1JPVVRFKVxuJiM0MztcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XG4mIzQzO1x0XHRuc2tiID0gc2tiX2Nsb25lKHNrYiwgR0ZQX0FUT01JQyk7XG4mIzQzO1x0XHRpZiAoIW5za2IpXG4mIzQzO1x0XHRcdHJldHVybiAtRU5PTUVNO1xuJiM0MztcbiYjNDM7XHRcdG1lbXNldChJUDZDQihuc2tiKSwgMCwgc2l6ZW9mKCpJUDZDQihuc2tiKSkpO1xuJiM0MztcdFx0aWNtcHY2X3NlbmQobnNrYiwgdHlwZSwgY29kZSwgMCk7XG4mIzQzO1x0XHRjb25zdW1lX3NrYihuc2tiKTtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MzsjZW5kaWZcbiYjNDM7XHRkZWZhdWx0OlxuJiM0MztcdFx0cmV0dXJuIC1FUFJPVE9OT1NVUFBPUlQ7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiBfX2JwZl9rZnVuY19lbmRfZGVmcygpO1xuIFxuIGludCBicGZfZHlucHRyX2Zyb21fc2tiX3Jkb25seShzdHJ1Y3QgX19za19idWZmICpza2IsIHU2NCBmbGFncyxcbkBAIC0xMjU4OCw2ICYjNDM7MTI2NjksMTAgQEAgQlRGX0tGVU5DU19TVEFSVChicGZfa2Z1bmNfY2hlY2tfc2V0X3NvY2tfb3BzKVxuIEJURl9JRF9GTEFHUyhmdW5jLCBicGZfc29ja19vcHNfZW5hYmxlX3R4X3RzdGFtcClcbiBCVEZfS0ZVTkNTX0VORChicGZfa2Z1bmNfY2hlY2tfc2V0X3NvY2tfb3BzKVxuIFxuJiM0MztCVEZfS0ZVTkNTX1NUQVJUKGJwZl9rZnVuY19jaGVja19zZXRfaWNtcF9zZW5kKVxuJiM0MztCVEZfSURfRkxBR1MoZnVuYywgYnBmX2ljbXBfc2VuZClcbiYjNDM7QlRGX0tGVU5DU19FTkQoYnBmX2tmdW5jX2NoZWNrX3NldF9pY21wX3NlbmQpXG4mIzQzO1xuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYnRmX2tmdW5jX2lkX3NldCBicGZfa2Z1bmNfc2V0X3NrYiA9IHtcbiBcdC5vd25lciA9IFRISVNfTU9EVUxFLFxuIFx0LnNldCA9IFx1MDAyNmJwZl9rZnVuY19jaGVja19zZXRfc2tiLFxuQEAgLTEyNjE4LDYgJiM0MzsxMjcwMywxMSBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGJ0Zl9rZnVuY19pZF9zZXQgYnBmX2tmdW5jX3NldF9zb2NrX29wcyA9IHtcbiBcdC5zZXQgPSBcdTAwMjZicGZfa2Z1bmNfY2hlY2tfc2V0X3NvY2tfb3BzLFxuIH07XG4gXG4mIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgYnRmX2tmdW5jX2lkX3NldCBicGZfa2Z1bmNfc2V0X2ljbXBfc2VuZCA9IHtcbiYjNDM7XHQub3duZXIgPSBUSElTX01PRFVMRSxcbiYjNDM7XHQuc2V0ID0gXHUwMDI2YnBmX2tmdW5jX2NoZWNrX3NldF9pY21wX3NlbmQsXG4mIzQzO307XG4mIzQzO1xuIHN0YXRpYyBpbnQgX19pbml0IGJwZl9rZnVuY19pbml0KHZvaWQpXG4ge1xuIFx0aW50IHJldDtcbkBAIC0xMjYzOSw2ICYjNDM7MTI3MjksNyBAQCBzdGF0aWMgaW50IF9faW5pdCBicGZfa2Z1bmNfaW5pdCh2b2lkKVxuIFx0cmV0ID0gcmV0ID86IHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9DR1JPVVBfU09DS19BRERSLFxuIFx0XHRcdFx0XHQgICAgICAgXHUwMDI2YnBmX2tmdW5jX3NldF9zb2NrX2FkZHIpO1xuIFx0cmV0ID0gcmV0ID86IHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9TQ0hFRF9DTFMsIFx1MDAyNmJwZl9rZnVuY19zZXRfdGNwX3JlcXNrKTtcbiYjNDM7XHRyZXQgPSByZXQgPzogcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX0NHUk9VUF9TS0IsIFx1MDAyNmJwZl9rZnVuY19zZXRfaWNtcF9zZW5kKTtcbiBcdHJldHVybiByZXQgPzogcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX1NPQ0tfT1BTLCBcdTAwMjZicGZfa2Z1bmNfc2V0X3NvY2tfb3BzKTtcbiB9XG4gbGF0ZV9pbml0Y2FsbChicGZfa2Z1bmNfaW5pdCk7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvaWNtcF9zZW5kX2tmdW5jLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9pY21wX3NlbmRfa2Z1bmMuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi5mZmFmMGZlMTg4MGIwZVxuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvaWNtcF9zZW5kX2tmdW5jLmNcbkBAIC0wLDAgJiM0MzsxLDI2OSBAQFxuJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuJiM0MzsjaW5jbHVkZSBcdTAwM2N0ZXN0X3Byb2dzLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbmV0d29ya19oZWxwZXJzLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjY2dyb3VwX2hlbHBlcnMuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9lcnJxdWV1ZS5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY3BvbGwuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2N1bmlzdGQuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcJiMzNDtpY21wX3NlbmQuc2tlbC5oXCYjMzQ7XG4mIzQzO1xuJiM0MzsjZGVmaW5lIFRJTUVPVVRfTVMgMTAwMFxuJiM0MztcbiYjNDM7I2RlZmluZSBJQ01QX0RFU1RfVU5SRUFDSCAzXG4mIzQzOyNkZWZpbmUgSUNNUFY2X0RFU1RfVU5SRUFDSCAxXG4mIzQzO1xuJiM0MzsjZGVmaW5lIElDTVBfSE9TVF9VTlJFQUNIIDFcbiYjNDM7I2RlZmluZSBJQ01QX0ZSQUdfTkVFREVEIDRcbiYjNDM7I2RlZmluZSBOUl9JQ01QX1VOUkVBQ0ggMTVcbiYjNDM7I2RlZmluZSBJQ01QVjZfUkVKRUNUX1JPVVRFIDZcbiYjNDM7XG4mIzQzOyNkZWZpbmUgS0ZVTkNfUkVUX1VOU0VUIC0xXG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IGNvbm5lY3RfdG9fZmRfbm9uYmxvY2soaW50IHNlcnZlcl9mZClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBzb2NrYWRkcl9zdG9yYWdlIGFkZHI7XG4mIzQzO1x0c29ja2xlbl90IGxlbiA9IHNpemVvZihhZGRyKTtcbiYjNDM7XHRpbnQgZmQsIGVyciwgb24gPSAxO1xuJiM0MztcbiYjNDM7XHRpZiAoZ2V0c29ja25hbWUoc2VydmVyX2ZkLCAoc3RydWN0IHNvY2thZGRyICopXHUwMDI2YWRkciwgXHUwMDI2bGVuKSlcbiYjNDM7XHRcdHJldHVybiAtMTtcbiYjNDM7XG4mIzQzO1x0ZmQgPSBzb2NrZXQoYWRkci5zc19mYW1pbHksIFNPQ0tfU1RSRUFNIHwgU09DS19OT05CTE9DSywgMCk7XG4mIzQzO1x0aWYgKGZkIFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIC0xO1xuJiM0MztcbiYjNDM7XHRpZiAoYWRkci5zc19mYW1pbHkgPT0gQUZfSU5FVDYgXHUwMDI2XHUwMDI2XG4mIzQzO1x0ICAgIHNldHNvY2tvcHQoZmQsIElQUFJPVE9fSVBWNiwgSVBWNl9SRUNWRVJSLCBcdTAwMjZvbiwgc2l6ZW9mKG9uKSkgXHUwMDNjIDApIHtcbiYjNDM7XHRcdGNsb3NlKGZkKTtcbiYjNDM7XHRcdHJldHVybiAtMTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGVyciA9IGNvbm5lY3QoZmQsIChzdHJ1Y3Qgc29ja2FkZHIgKilcdTAwMjZhZGRyLCBsZW4pO1xuJiM0MztcdGlmIChlcnIgXHUwMDNjIDAgXHUwMDI2XHUwMDI2IGVycm5vICE9IEVJTlBST0dSRVNTKSB7XG4mIzQzO1x0XHRjbG9zZShmZCk7XG4mIzQzO1x0XHRyZXR1cm4gLTE7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gZmQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIHJlYWRfaWNtcF9lcnJxdWV1ZShpbnQgc29ja2ZkLCBpbnQgZXhwZWN0ZWRfY29kZSwgaW50IGFmKVxuJiM0Mzt7XG4mIzQzO1x0aW50IGV4cGVjdGVkX2VlX3R5cGUgPSAoYWYgPT0gQUZfSU5FVCkgPyBJQ01QX0RFU1RfVU5SRUFDSCA6XG4mIzQzO1x0XHRcdFx0XHRcdCBJQ01QVjZfREVTVF9VTlJFQUNIO1xuJiM0MztcdGludCBleHBlY3RlZF9vcmlnaW4gPSAoYWYgPT0gQUZfSU5FVCkgPyBTT19FRV9PUklHSU5fSUNNUCA6XG4mIzQzO1x0XHRcdFx0XHRcdFNPX0VFX09SSUdJTl9JQ01QNjtcbiYjNDM7XHRpbnQgZXhwZWN0ZWRfbGV2ZWwgPSAoYWYgPT0gQUZfSU5FVCkgPyBJUFBST1RPX0lQIDogSVBQUk9UT19JUFY2O1xuJiM0MztcdGludCBleHBlY3RlZF90eXBlID0gKGFmID09IEFGX0lORVQpID8gSVBfUkVDVkVSUiA6IElQVjZfUkVDVkVSUjtcbiYjNDM7XHRzdHJ1Y3Qgc29ja19leHRlbmRlZF9lcnIgKnNvY2tfZXJyO1xuJiM0MztcdGNoYXIgY3RybF9idWZbNTEyXTtcbiYjNDM7XHRzdHJ1Y3QgbXNnaGRyIG1zZyA9IHtcbiYjNDM7XHRcdC5tc2dfY29udHJvbCA9IGN0cmxfYnVmLFxuJiM0MztcdFx0Lm1zZ19jb250cm9sbGVuID0gc2l6ZW9mKGN0cmxfYnVmKSxcbiYjNDM7XHR9O1xuJiM0MztcdHN0cnVjdCBwb2xsZmQgcGZkID0ge1xuJiM0MztcdFx0LmZkID0gc29ja2ZkLFxuJiM0MztcdFx0LmV2ZW50cyA9IFBPTExFUlIsXG4mIzQzO1x0fTtcbiYjNDM7XHRzdHJ1Y3QgY21zZ2hkciAqY207XG4mIzQzO1x0c3NpemVfdCBuO1xuJiM0MztcbiYjNDM7XHRpZiAoIUFTU0VSVF9HRShwb2xsKFx1MDAyNnBmZCwgMSwgVElNRU9VVF9NUyksIDEsIFwmIzM0O3BvbGxfZXJycXVldWVcJiMzNDspKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHRuID0gcmVjdm1zZyhzb2NrZmQsIFx1MDAyNm1zZywgTVNHX0VSUlFVRVVFKTtcbiYjNDM7XHRpZiAoIUFTU0VSVF9HRShuLCAwLCBcJiMzNDtyZWN2bXNnX2VycnF1ZXVlXCYjMzQ7KSlcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0Y20gPSBDTVNHX0ZJUlNUSERSKFx1MDAyNm1zZyk7XG4mIzQzO1x0aWYgKCFBU1NFUlRfTkVRKGNtLCBOVUxMLCBcJiMzNDtjbV9maXJzdGhkcl9udWxsXCYjMzQ7KSlcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0Zm9yICg7IGNtOyBjbSA9IENNU0dfTlhUSERSKFx1MDAyNm1zZywgY20pKSB7XG4mIzQzO1x0XHRpZiAoY20tXHUwMDNlY21zZ19sZXZlbCAhPSBleHBlY3RlZF9sZXZlbCB8fFxuJiM0MztcdFx0ICAgIGNtLVx1MDAzZWNtc2dfdHlwZSAhPSBleHBlY3RlZF90eXBlKVxuJiM0MztcdFx0XHRjb250aW51ZTtcbiYjNDM7XG4mIzQzO1x0XHRzb2NrX2VyciA9IChzdHJ1Y3Qgc29ja19leHRlbmRlZF9lcnIgKilDTVNHX0RBVEEoY20pO1xuJiM0MztcbiYjNDM7XHRcdGlmICghQVNTRVJUX0VRKHNvY2tfZXJyLVx1MDAzZWVlX29yaWdpbiwgZXhwZWN0ZWRfb3JpZ2luLFxuJiM0MztcdFx0XHQgICAgICAgXCYjMzQ7c29ja19lcnJfb3JpZ2luXCYjMzQ7KSlcbiYjNDM7XHRcdFx0cmV0dXJuO1xuJiM0MztcdFx0aWYgKCFBU1NFUlRfRVEoc29ja19lcnItXHUwMDNlZWVfdHlwZSwgZXhwZWN0ZWRfZWVfdHlwZSxcbiYjNDM7XHRcdFx0ICAgICAgIFwmIzM0O3NvY2tfZXJyX3R5cGVfZGVzdF91bnJlYWNoXCYjMzQ7KSlcbiYjNDM7XHRcdFx0cmV0dXJuO1xuJiM0MztcdFx0QVNTRVJUX0VRKHNvY2tfZXJyLVx1MDAzZWVlX2NvZGUsIGV4cGVjdGVkX2NvZGUsIFwmIzM0O3NvY2tfZXJyX2NvZGVcJiMzNDspO1xuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0QVNTRVJUX0ZBSUwoXCYjMzQ7bm8gSVBfUkVDVkVSUi9JUFY2X1JFQ1ZFUlIgY29udHJvbCBtZXNzYWdlIGZvdW5kXCYjMzQ7KTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGJvb2wgdmFsaWRfdW5yZWFjaF9jb2RlKGludCBjb2RlLCBpbnQgYWYpXG4mIzQzO3tcbiYjNDM7XHRpZiAoY29kZSBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XG4mIzQzO1x0aWYgKGFmID09IEFGX0lORVQpXG4mIzQzO1x0XHRyZXR1cm4gY29kZSBcdTAwM2M9IE5SX0lDTVBfVU5SRUFDSCBcdTAwMjZcdTAwMjYgY29kZSAhPSBJQ01QX0ZSQUdfTkVFREVEO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gY29kZSBcdTAwM2M9IElDTVBWNl9SRUpFQ1RfUk9VVEU7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIHRyaWdnZXJfcHJvZ19yZWFkX2ljbXBfZXJycXVldWUoc3RydWN0IGljbXBfc2VuZCAqc2tlbCwgaW50IGNvZGUsXG4mIzQzO1x0XHRcdFx0XHQgICAgaW50IGFmLCBjb25zdCBjaGFyICppcClcbiYjNDM7e1xuJiM0MztcdGludCBzcnZfZmQgPSAtMSwgY2xpZW50X2ZkID0gLTE7XG4mIzQzO1x0aW50IHBvcnQ7XG4mIzQzO1xuJiM0MztcdHNydl9mZCA9IHN0YXJ0X3NlcnZlcihhZiwgU09DS19TVFJFQU0sIGlwLCAwLCBUSU1FT1VUX01TKTtcbiYjNDM7XHRpZiAoIUFTU0VSVF9PS19GRChzcnZfZmQsIFwmIzM0O3N0YXJ0X3NlcnZlclwmIzM0OykpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdHBvcnQgPSBnZXRfc29ja2V0X2xvY2FsX3BvcnQoc3J2X2ZkKTtcbiYjNDM7XHRpZiAoIUFTU0VSVF9HRShwb3J0LCAwLCBcJiMzNDtnZXRfc29ja2V0X2xvY2FsX3BvcnRcJiMzNDspKSB7XG4mIzQzO1x0XHRjbG9zZShzcnZfZmQpO1xuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0c2tlbC1cdTAwM2Vic3MtXHUwMDNlc2VydmVyX3BvcnQgPSBudG9ocyhwb3J0KTtcbiYjNDM7XHRza2VsLVx1MDAzZWJzcy1cdTAwM2V1bnJlYWNoX3R5cGUgPSAoYWYgPT0gQUZfSU5FVCkgPyBJQ01QX0RFU1RfVU5SRUFDSCA6XG4mIzQzO1x0XHRcdFx0XHRcdCAgICBJQ01QVjZfREVTVF9VTlJFQUNIO1xuJiM0MztcdHNrZWwtXHUwMDNlYnNzLVx1MDAzZXVucmVhY2hfY29kZSA9IGNvZGU7XG4mIzQzO1x0c2tlbC1cdTAwM2VkYXRhLVx1MDAzZWtmdW5jX3JldCA9IEtGVU5DX1JFVF9VTlNFVDtcbiYjNDM7XG4mIzQzO1x0Y2xpZW50X2ZkID0gY29ubmVjdF90b19mZF9ub25ibG9jayhzcnZfZmQpO1xuJiM0MztcdGlmICghQVNTRVJUX09LX0ZEKGNsaWVudF9mZCwgXCYjMzQ7Y2xpZW50X2Nvbm5lY3Rfbm9uYmxvY2tcJiMzNDspKSB7XG4mIzQzO1x0XHRjbG9zZShzcnZfZmQpO1xuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKHZhbGlkX3VucmVhY2hfY29kZShjb2RlLCBhZikpXG4mIzQzO1x0XHRyZWFkX2ljbXBfZXJycXVldWUoY2xpZW50X2ZkLCBjb2RlLCBhZik7XG4mIzQzO1xuJiM0MztcdGNsb3NlKGNsaWVudF9mZCk7XG4mIzQzO1x0Y2xvc2Uoc3J2X2ZkKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgcnVuX2ljbXBfdGVzdChzdHJ1Y3QgaWNtcF9zZW5kICpza2VsLCBpbnQgYWYsIGNvbnN0IGNoYXIgKmlwLFxuJiM0MztcdFx0XHQgIGludCBtYXhfY29kZSlcbiYjNDM7e1xuJiM0MztcdGZvciAoaW50IGNvZGUgPSAwOyBjb2RlIFx1MDAzYz0gbWF4X2NvZGU7IGNvZGUmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRpZiAoYWYgPT0gQUZfSU5FVCBcdTAwMjZcdTAwMjYgY29kZSA9PSBJQ01QX0ZSQUdfTkVFREVEKVxuJiM0MztcdFx0XHRjb250aW51ZTtcbiYjNDM7XG4mIzQzO1x0XHR0cmlnZ2VyX3Byb2dfcmVhZF9pY21wX2VycnF1ZXVlKHNrZWwsIGNvZGUsIGFmLCBpcCk7XG4mIzQzO1x0XHRBU1NFUlRfRVEoc2tlbC1cdTAwM2VkYXRhLVx1MDAzZWtmdW5jX3JldCwgMCwgXCYjMzQ7a2Z1bmNfcmV0XCYjMzQ7KTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdC8qIFRlc3QgaW52YWxpZCBjb2RlcyAqL1xuJiM0MztcdHRyaWdnZXJfcHJvZ19yZWFkX2ljbXBfZXJycXVldWUoc2tlbCwgLTEsIGFmLCBpcCk7XG4mIzQzO1x0QVNTRVJUX0VRKHNrZWwtXHUwMDNlZGF0YS1cdTAwM2VrZnVuY19yZXQsIC1FSU5WQUwsIFwmIzM0O2tmdW5jX3JldFwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdHRyaWdnZXJfcHJvZ19yZWFkX2ljbXBfZXJycXVldWUoc2tlbCwgbWF4X2NvZGUgJiM0MzsgMSwgYWYsIGlwKTtcbiYjNDM7XHRBU1NFUlRfRVEoc2tlbC1cdTAwM2VkYXRhLVx1MDAzZWtmdW5jX3JldCwgLUVJTlZBTCwgXCYjMzQ7a2Z1bmNfcmV0XCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0aWYgKGFmID09IEFGX0lORVQpIHtcbiYjNDM7XHRcdHRyaWdnZXJfcHJvZ19yZWFkX2ljbXBfZXJycXVldWUoc2tlbCwgSUNNUF9GUkFHX05FRURFRCwgYWYsIGlwKTtcbiYjNDM7XHRcdEFTU0VSVF9FUShza2VsLVx1MDAzZWRhdGEtXHUwMDNla2Z1bmNfcmV0LCAtRUlOVkFMLCBcJiMzNDtrZnVuY19yZXRcJiMzNDspO1xuJiM0MztcdH1cbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgcnVuX2ljbXBfbm9fcm91dGVfdGVzdChzdHJ1Y3QgaWNtcF9zZW5kICpza2VsKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGlwdjRfcGFja2V0IHBrdCA9IHBrdF92NDtcbiYjNDM7XHRMSUJCUEZfT1BUUyhicGZfdGVzdF9ydW5fb3B0cywgb3B0cyxcbiYjNDM7XHRcdC5kYXRhX2luID0gXHUwMDI2cGt0LFxuJiM0MztcdFx0LmRhdGFfc2l6ZV9pbiA9IHNpemVvZihwa3QpLFxuJiM0MztcdCk7XG4mIzQzO1x0aW50IGVycjtcbiYjNDM7XG4mIzQzO1x0cGt0LmlwaC52ZXJzaW9uID0gNDtcbiYjNDM7XHRwa3QuaXBoLmRhZGRyID0gaW5ldF9hZGRyKFwmIzM0OzEyNy4wLjAuMVwmIzM0Oyk7XG4mIzQzO1x0cGt0LnRjcC5kZXN0ID0gaHRvbnMoODApO1xuJiM0MztcdHNrZWwtXHUwMDNlYnNzLVx1MDAzZXNlcnZlcl9wb3J0ID0gODA7XG4mIzQzO1x0c2tlbC1cdTAwM2Vic3MtXHUwMDNldW5yZWFjaF90eXBlID0gSUNNUF9ERVNUX1VOUkVBQ0g7XG4mIzQzO1x0c2tlbC1cdTAwM2Vic3MtXHUwMDNldW5yZWFjaF9jb2RlID0gSUNNUF9IT1NUX1VOUkVBQ0g7XG4mIzQzO1x0c2tlbC1cdTAwM2VkYXRhLVx1MDAzZWtmdW5jX3JldCA9IEtGVU5DX1JFVF9VTlNFVDtcbiYjNDM7XG4mIzQzO1x0ZXJyID0gYnBmX3Byb2dfdGVzdF9ydW5fb3B0cyhicGZfcHJvZ3JhbV9fZmQoc2tlbC1cdTAwM2Vwcm9ncy5lZ3Jlc3MpLCBcdTAwMjZvcHRzKTtcbiYjNDM7XHRpZiAoIUFTU0VSVF9PSyhlcnIsIFwmIzM0O3Rlc3RfcnVuXCYjMzQ7KSlcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XHRBU1NFUlRfRVEoc2tlbC1cdTAwM2VkYXRhLVx1MDAzZWtmdW5jX3JldCwgLUVORVRVTlJFQUNILCBcJiMzNDtrZnVuY19yZXRfbm9fcm91dGVcJiMzNDspO1xuJiM0Mzt9XG4mIzQzO1xuJiM0Mzt2b2lkIHRlc3RfaWNtcF9zZW5kX3VucmVhY2hfY2dyb3VwKHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgaWNtcF9zZW5kICpza2VsO1xuJiM0MztcdGludCBjZ3JvdXBfZmQgPSAtMTtcbiYjNDM7XG4mIzQzO1x0c2tlbCA9IGljbXBfc2VuZF9fb3Blbl9hbmRfbG9hZCgpO1xuJiM0MztcdGlmICghQVNTRVJUX09LX1BUUihza2VsLCBcJiMzNDtza2VsX29wZW5cJiMzNDspKVxuJiM0MztcdFx0Z290byBjbGVhbnVwO1xuJiM0MztcbiYjNDM7XHRjZ3JvdXBfZmQgPSB0ZXN0X19qb2luX2Nncm91cChcJiMzNDsvaWNtcF9zZW5kX3VucmVhY2hfY2dyb3VwXCYjMzQ7KTtcbiYjNDM7XHRpZiAoIUFTU0VSVF9PS19GRChjZ3JvdXBfZmQsIFwmIzM0O2pvaW5fY2dyb3VwXCYjMzQ7KSlcbiYjNDM7XHRcdGdvdG8gY2xlYW51cDtcbiYjNDM7XG4mIzQzO1x0c2tlbC1cdTAwM2VsaW5rcy5lZ3Jlc3MgPVxuJiM0MztcdFx0YnBmX3Byb2dyYW1fX2F0dGFjaF9jZ3JvdXAoc2tlbC1cdTAwM2Vwcm9ncy5lZ3Jlc3MsIGNncm91cF9mZCk7XG4mIzQzO1x0aWYgKCFBU1NFUlRfT0tfUFRSKHNrZWwtXHUwMDNlbGlua3MuZWdyZXNzLCBcJiMzNDtwcm9nX2F0dGFjaF9jZ3JvdXBcJiMzNDspKVxuJiM0MztcdFx0Z290byBjbGVhbnVwO1xuJiM0MztcbiYjNDM7XHRpZiAodGVzdF9fc3RhcnRfc3VidGVzdChcJiMzNDtpcHY0XCYjMzQ7KSlcbiYjNDM7XHRcdHJ1bl9pY21wX3Rlc3Qoc2tlbCwgQUZfSU5FVCwgXCYjMzQ7MTI3LjAuMC4xXCYjMzQ7LCBOUl9JQ01QX1VOUkVBQ0gpO1xuJiM0MztcbiYjNDM7XHRpZiAodGVzdF9fc3RhcnRfc3VidGVzdChcJiMzNDtpcHY2XCYjMzQ7KSlcbiYjNDM7XHRcdHJ1bl9pY21wX3Rlc3Qoc2tlbCwgQUZfSU5FVDYsIFwmIzM0Ozo6MVwmIzM0OywgSUNNUFY2X1JFSkVDVF9ST1VURSk7XG4mIzQzO1xuJiM0MztcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFwmIzM0O25vX3JvdXRlXCYjMzQ7KSlcbiYjNDM7XHRcdHJ1bl9pY21wX25vX3JvdXRlX3Rlc3Qoc2tlbCk7XG4mIzQzO1xuJiM0MztjbGVhbnVwOlxuJiM0MztcdGljbXBfc2VuZF9fZGVzdHJveShza2VsKTtcbiYjNDM7XHRpZiAoY2dyb3VwX2ZkIFx1MDAzZT0gMClcbiYjNDM7XHRcdGNsb3NlKGNncm91cF9mZCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3ZvaWQgdGVzdF9pY21wX3NlbmRfdW5yZWFjaF9yZWN1cnNpb24odm9pZClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBpY21wX3NlbmQgKnNrZWw7XG4mIzQzO1x0aW50IGNncm91cF9mZCA9IC0xO1xuJiM0MztcdGludCBlcnI7XG4mIzQzO1xuJiM0MztcdGVyciA9IHNldHVwX2Nncm91cF9lbnZpcm9ubWVudCgpO1xuJiM0MztcdGlmICghQVNTRVJUX09LKGVyciwgXCYjMzQ7c2V0dXBfY2dyb3VwX2Vudmlyb25tZW50XCYjMzQ7KSlcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0c2tlbCA9IGljbXBfc2VuZF9fb3Blbl9hbmRfbG9hZCgpO1xuJiM0MztcdGlmICghQVNTRVJUX09LX1BUUihza2VsLCBcJiMzNDtza2VsX29wZW5cJiMzNDspKVxuJiM0MztcdFx0Z290byBjbGVhbnVwO1xuJiM0MztcbiYjNDM7XHRjZ3JvdXBfZmQgPSBnZXRfcm9vdF9jZ3JvdXAoKTtcbiYjNDM7XHRpZiAoIUFTU0VSVF9PS19GRChjZ3JvdXBfZmQsIFwmIzM0O2dldF9yb290X2Nncm91cFwmIzM0OykpXG4mIzQzO1x0XHRnb3RvIGNsZWFudXA7XG4mIzQzO1xuJiM0MztcdHNrZWwtXHUwMDNlZGF0YS1cdTAwM2V0YXJnZXRfcGlkID0gZ2V0cGlkKCk7XG4mIzQzO1x0c2tlbC1cdTAwM2VsaW5rcy5yZWN1cnNpb24gPVxuJiM0MztcdFx0YnBmX3Byb2dyYW1fX2F0dGFjaF9jZ3JvdXAoc2tlbC1cdTAwM2Vwcm9ncy5yZWN1cnNpb24sIGNncm91cF9mZCk7XG4mIzQzO1x0aWYgKCFBU1NFUlRfT0tfUFRSKHNrZWwtXHUwMDNlbGlua3MucmVjdXJzaW9uLCBcJiMzNDtwcm9nX2F0dGFjaF9jZ3JvdXBcJiMzNDspKVxuJiM0MztcdFx0Z290byBjbGVhbnVwO1xuJiM0MztcbiYjNDM7XHR0cmlnZ2VyX3Byb2dfcmVhZF9pY21wX2VycnF1ZXVlKHNrZWwsIElDTVBfSE9TVF9VTlJFQUNILCBBRl9JTkVULFxuJiM0MztcdFx0XHRcdFx0XCYjMzQ7MTI3LjAuMC4xXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBCZWNhdXNlIHRoZXJlJiMzOTtzIHJlY3Vyc2lvbiBpbnZvbHZlZCwgdGhlIGZpcnN0IGNhbGwgd2lsbCByZXR1cm4gYXRcbiYjNDM7XHQgKiBpbmRleCAxIHNpbmNlIGl0IHdpbGwgcmV0dXJuIHRoZSBzZWNvbmQsIGFuZCB0aGUgc2Vjb25kIGNhbGwgd2lsbFxuJiM0MztcdCAqIHJldHVybiBhdCBpbmRleCAwIHNpbmNlIGl0IHdpbGwgcmV0dXJuIHRoZSBmaXJzdC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRBU1NFUlRfRVEoc2tlbC1cdTAwM2Vic3MtXHUwMDNlcmVjX2NvdW50LCAyLCBcJiMzNDtyZWNfY291bnRcJiMzNDspO1xuJiM0MztcdEFTU0VSVF9FUShza2VsLVx1MDAzZWRhdGEtXHUwMDNlcmVjX2tmdW5jX3JldHNbMF0sIC1FQlVTWSwgXCYjMzQ7a2Z1bmNfcmV0c1swXVwmIzM0Oyk7XG4mIzQzO1x0QVNTRVJUX0VRKHNrZWwtXHUwMDNlZGF0YS1cdTAwM2VyZWNfa2Z1bmNfcmV0c1sxXSwgMCwgXCYjMzQ7a2Z1bmNfcmV0c1sxXVwmIzM0Oyk7XG4mIzQzO1xuJiM0MztjbGVhbnVwOlxuJiM0MztcdGljbXBfc2VuZF9fZGVzdHJveShza2VsKTtcbiYjNDM7XHRpZiAoY2dyb3VwX2ZkIFx1MDAzZT0gMClcbiYjNDM7XHRcdGNsb3NlKGNncm91cF9mZCk7XG4mIzQzO1x0Y2xlYW51cF9jZ3JvdXBfZW52aXJvbm1lbnQoKTtcbiYjNDM7fVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9pY21wX3NlbmQuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9pY21wX3NlbmQuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi5jNjQyY2NkZjlmZDU0NFxuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2ljbXBfc2VuZC5jXG5AQCAtMCwwICYjNDM7MSwxMjMgQEBcbiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7dm1saW51eC5oXCYjMzQ7XG4mIzQzOyNpbmNsdWRlIFx1MDAzY2JwZi9icGZfaGVscGVycy5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2JwZi9icGZfZW5kaWFuLmhcdTAwM2VcbiYjNDM7XG4mIzQzOy8qIDEyNy4wLjAuMSBpbiBob3N0IGJ5dGUgb3JkZXIgKi9cbiYjNDM7I2RlZmluZSBTRVJWRVJfSVAgMHg3RjAwMDAwMVxuJiM0MzsvKiA6OjEgaW4gaG9zdCBieXRlIG9yZGVyIChsYXN0IDMyLWJpdCB3b3JkKSAqL1xuJiM0MzsjZGVmaW5lIFNFUlZFUl9JUDZfTE8gMHgwMDAwMDAwMVxuJiM0MztcbiYjNDM7X191MTYgc2VydmVyX3BvcnQgPSAwO1xuJiM0MztpbnQgdW5yZWFjaF90eXBlID0gMDtcbiYjNDM7aW50IHVucmVhY2hfY29kZSA9IDA7XG4mIzQzO2ludCBrZnVuY19yZXQgPSAtMTtcbiYjNDM7aW50IHRhcmdldF9waWQgPSAtMTtcbiYjNDM7XG4mIzQzO3Vuc2lnbmVkIGludCByZWNfY291bnQgPSAwO1xuJiM0MztpbnQgcmVjX2tmdW5jX3JldHNbXSA9IHsgLTEsIC0xIH07XG4mIzQzO1xuJiM0MztTRUMoXCYjMzQ7Y2dyb3VwX3NrYi9lZ3Jlc3NcJiMzNDspXG4mIzQzO2ludCBlZ3Jlc3Moc3RydWN0IF9fc2tfYnVmZiAqc2tiKVxuJiM0Mzt7XG4mIzQzO1x0dm9pZCAqZGF0YSA9ICh2b2lkICopKGxvbmcpc2tiLVx1MDAzZWRhdGE7XG4mIzQzO1x0dm9pZCAqZGF0YV9lbmQgPSAodm9pZCAqKShsb25nKXNrYi1cdTAwM2VkYXRhX2VuZDtcbiYjNDM7XHRzdHJ1Y3QgaXBoZHIgKmlwaDtcbiYjNDM7XHRzdHJ1Y3QgaXB2NmhkciAqaXA2aDtcbiYjNDM7XHRzdHJ1Y3QgdGNwaGRyICp0Y3BoO1xuJiM0MztcdF9fdTggdmVyc2lvbjtcbiYjNDM7XG4mIzQzO1x0aWYgKGRhdGEgJiM0MzsgMSBcdTAwM2UgZGF0YV9lbmQpXG4mIzQzO1x0XHRyZXR1cm4gU0tfUEFTUztcbiYjNDM7XG4mIzQzO1x0dmVyc2lvbiA9ICgqKChfX3U4ICopZGF0YSkpIFx1MDAzZVx1MDAzZSA0O1xuJiM0MztcbiYjNDM7XHRpZiAodmVyc2lvbiA9PSA0KSB7XG4mIzQzO1x0XHRpcGggPSBkYXRhO1xuJiM0MztcdFx0aWYgKCh2b2lkICopKGlwaCAmIzQzOyAxKSBcdTAwM2UgZGF0YV9lbmQgfHxcbiYjNDM7XHRcdCAgICBpcGgtXHUwMDNlcHJvdG9jb2wgIT0gSVBQUk9UT19UQ1AgfHxcbiYjNDM7XHRcdCAgICBpcGgtXHUwMDNlZGFkZHIgIT0gYnBmX2h0b25sKFNFUlZFUl9JUCkpXG4mIzQzO1x0XHRcdHJldHVybiBTS19QQVNTO1xuJiM0MztcbiYjNDM7XHRcdHRjcGggPSAodm9pZCAqKWlwaCAmIzQzOyBpcGgtXHUwMDNlaWhsICogNDtcbiYjNDM7XHRcdGlmICgodm9pZCAqKSh0Y3BoICYjNDM7IDEpIFx1MDAzZSBkYXRhX2VuZCB8fFxuJiM0MztcdFx0ICAgIHRjcGgtXHUwMDNlZGVzdCAhPSBicGZfaHRvbnMoc2VydmVyX3BvcnQpKVxuJiM0MztcdFx0XHRyZXR1cm4gU0tfUEFTUztcbiYjNDM7XG4mIzQzO1x0fSBlbHNlIGlmICh2ZXJzaW9uID09IDYpIHtcbiYjNDM7XHRcdGlwNmggPSBkYXRhO1xuJiM0MztcdFx0aWYgKCh2b2lkICopKGlwNmggJiM0MzsgMSkgXHUwMDNlIGRhdGFfZW5kIHx8XG4mIzQzO1x0XHQgICAgaXA2aC1cdTAwM2VuZXh0aGRyICE9IElQUFJPVE9fVENQKVxuJiM0MztcdFx0XHRyZXR1cm4gU0tfUEFTUztcbiYjNDM7XG4mIzQzO1x0XHRpZiAoaXA2aC1cdTAwM2VkYWRkci5pbjZfdS51Nl9hZGRyMzJbMF0gIT0gMCB8fFxuJiM0MztcdFx0ICAgIGlwNmgtXHUwMDNlZGFkZHIuaW42X3UudTZfYWRkcjMyWzFdICE9IDAgfHxcbiYjNDM7XHRcdCAgICBpcDZoLVx1MDAzZWRhZGRyLmluNl91LnU2X2FkZHIzMlsyXSAhPSAwIHx8XG4mIzQzO1x0XHQgICAgaXA2aC1cdTAwM2VkYWRkci5pbjZfdS51Nl9hZGRyMzJbM10gIT0gYnBmX2h0b25sKFNFUlZFUl9JUDZfTE8pKVxuJiM0MztcdFx0XHRyZXR1cm4gU0tfUEFTUztcbiYjNDM7XG4mIzQzO1x0XHR0Y3BoID0gKHZvaWQgKikoaXA2aCAmIzQzOyAxKTtcbiYjNDM7XHRcdGlmICgodm9pZCAqKSh0Y3BoICYjNDM7IDEpIFx1MDAzZSBkYXRhX2VuZCB8fFxuJiM0MztcdFx0ICAgIHRjcGgtXHUwMDNlZGVzdCAhPSBicGZfaHRvbnMoc2VydmVyX3BvcnQpKVxuJiM0MztcdFx0XHRyZXR1cm4gU0tfUEFTUztcbiYjNDM7XHR9IGVsc2Uge1xuJiM0MztcdFx0cmV0dXJuIFNLX1BBU1M7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRrZnVuY19yZXQgPSBicGZfaWNtcF9zZW5kKHNrYiwgdW5yZWFjaF90eXBlLCB1bnJlYWNoX2NvZGUpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gU0tfRFJPUDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7U0VDKFwmIzM0O2Nncm91cF9za2IvZWdyZXNzXCYjMzQ7KVxuJiM0MztpbnQgcmVjdXJzaW9uKHN0cnVjdCBfX3NrX2J1ZmYgKnNrYilcbiYjNDM7e1xuJiM0MztcdHZvaWQgKmRhdGEgPSAodm9pZCAqKShsb25nKXNrYi1cdTAwM2VkYXRhO1xuJiM0MztcdHZvaWQgKmRhdGFfZW5kID0gKHZvaWQgKikobG9uZylza2ItXHUwMDNlZGF0YV9lbmQ7XG4mIzQzO1x0c3RydWN0IGljbXBoZHIgKmljbXBoO1xuJiM0MztcdHN0cnVjdCB0Y3BoZHIgKnRjcGg7XG4mIzQzO1x0c3RydWN0IGlwaGRyICppcGg7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0aWYgKChicGZfZ2V0X2N1cnJlbnRfcGlkX3RnaWQoKSBcdTAwM2VcdTAwM2UgMzIpICE9IHRhcmdldF9waWQpXG4mIzQzO1x0XHRyZXR1cm4gU0tfUEFTUztcbiYjNDM7XG4mIzQzO1x0aXBoID0gZGF0YTtcbiYjNDM7XHRpZiAoKHZvaWQgKikoaXBoICYjNDM7IDEpIFx1MDAzZSBkYXRhX2VuZCB8fCBpcGgtXHUwMDNldmVyc2lvbiAhPSA0KVxuJiM0MztcdFx0cmV0dXJuIFNLX1BBU1M7XG4mIzQzO1xuJiM0MztcdGlmIChpcGgtXHUwMDNlZGFkZHIgIT0gYnBmX2h0b25sKFNFUlZFUl9JUCkpXG4mIzQzO1x0XHRyZXR1cm4gU0tfUEFTUztcbiYjNDM7XG4mIzQzO1x0aWYgKGlwaC1cdTAwM2Vwcm90b2NvbCA9PSBJUFBST1RPX1RDUCkge1xuJiM0MztcdFx0dGNwaCA9ICh2b2lkICopaXBoICYjNDM7IGlwaC1cdTAwM2VpaGwgKiA0O1xuJiM0MztcdFx0aWYgKCh2b2lkICopKHRjcGggJiM0MzsgMSkgXHUwMDNlIGRhdGFfZW5kIHx8XG4mIzQzO1x0XHQgICAgdGNwaC1cdTAwM2VkZXN0ICE9IGJwZl9odG9ucyhzZXJ2ZXJfcG9ydCkpXG4mIzQzO1x0XHRcdHJldHVybiBTS19QQVNTO1xuJiM0MztcdH0gZWxzZSBpZiAoaXBoLVx1MDAzZXByb3RvY29sID09IElQUFJPVE9fSUNNUCkge1xuJiM0MztcdFx0aWNtcGggPSAodm9pZCAqKWlwaCAmIzQzOyBpcGgtXHUwMDNlaWhsICogNDtcbiYjNDM7XHRcdGlmICgodm9pZCAqKShpY21waCAmIzQzOyAxKSBcdTAwM2UgZGF0YV9lbmQgfHxcbiYjNDM7XHRcdCAgICBpY21waC1cdTAwM2V0eXBlICE9IHVucmVhY2hfdHlwZSB8fCBpY21waC1cdTAwM2Vjb2RlICE9IHVucmVhY2hfY29kZSlcbiYjNDM7XHRcdFx0cmV0dXJuIFNLX1BBU1M7XG4mIzQzO1x0fSBlbHNlIHtcbiYjNDM7XHRcdHJldHVybiBTS19QQVNTO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBUaGlzIGNhbGwgd2lsbCBwcm92b2tlIGEgcmVjdXJzaW9uOiB0aGUgSUNNUCBwYWNrZXQgZ2VuZXJhdGVkIGJ5IHRoZVxuJiM0MztcdCAqIGtmdW5jIHdpbGwgcmUtdHJpZ2dlciB0aGlzIHByb2dyYW0gc2luY2Ugd2UgYXJlIGluIHRoZSByb290IGNncm91cCBpblxuJiM0MztcdCAqIHdoaWNoIHRoZSBrZXJuZWwgSUNNUCBzb2NrZXQgYmVsb25ncy4gSG93ZXZlciB3aGVuIHJlLWVudGVyaW5nIHRoZVxuJiM0MztcdCAqIGtmdW5jLCBpdCBzaG91bGQgcmV0dXJuIEVCVVNZLlxuJiM0MztcdCAqL1xuJiM0MztcdHJldCA9IGJwZl9pY21wX3NlbmQoc2tiLCB1bnJlYWNoX3R5cGUsIHVucmVhY2hfY29kZSk7XG4mIzQzO1x0cmVjX2tmdW5jX3JldHNbcmVjX2NvdW50IFx1MDAyNiAxXSA9IHJldDtcbiYjNDM7XHRfX3N5bmNfZmV0Y2hfYW5kX2FkZChcdTAwMjZyZWNfY291bnQsIDEpO1xuJiM0MztcbiYjNDM7XHQvKiBMZXQgdGhlIGZpcnN0IElDTVAgZXJyb3IgbWVzc2FnZSBwYXNzICovXG4mIzQzO1x0aWYgKGlwaC1cdTAwM2Vwcm90b2NvbCA9PSBJUFBST1RPX0lDTVApXG4mIzQzO1x0XHRyZXR1cm4gU0tfUEFTUztcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIFNLX0RST1A7XG4mIzQzO31cbiYjNDM7XG4mIzQzO2NoYXIgTElDRU5TRVtdIFNFQyhcJiMzNDtsaWNlbnNlXCYjMzQ7KSA9IFwmIzM0O0R1YWwgQlNEL0dQTFwmIzM0OztcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNCAxOToxNDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtDR1JPVVBfQlBGJiMzNDssCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDssCiAgICAmIzM0O0lORVQmIzM0OywKICAgICYjMzQ7SVBWNiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2JwZl9pY21wX3NlbmQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBCUEYga2Z1bmMgYGJwZl9pY21wX3NlbmRgIHdoaWNoIGFsbG93cyBCUEYgcHJvZ3JhbXMgYXR0YWNoZWQgdG8gY2dyb3VwIHNrYiBob29rcyB0byBzZW5kIElDTVAgY29udHJvbCBtZXNzYWdlcy4gVGhpcyBpcyBhIG5ldyBmdW5jdGlvbmFsIGZlYXR1cmUgdGhhdCBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIEJQRiBwcm9ncmFtcywgbWFraW5nIGl0IGEgcHJpbWUgdGFyZ2V0IGZvciBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdAogICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksCiAgIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA1NGE0OTI5ZDNkMzQyZWU1ZjY5ZDRmNzZhZjcyN2Y5ZGVhOTFjOTExCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFdlZCBKdW4gMjQgMTk6MTQ6MzUgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvY29yZS9maWx0ZXIuYyBiL25ldC9jb3JlL2ZpbHRlci5jCmluZGV4IDJlOTZiNGI4NDdjZTEyLi5mM2FhNDk0ZWQxMDUzMCAxMDA2NDQKLS0tIGEvbmV0L2NvcmUvZmlsdGVyLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2NvcmUvZmlsdGVyLmMKQEAgLTg0LDYgJiM0Mzs4NCw5IEBACiAjaW5jbHVkZSAmbHQ7bGludXgvdW4uaCZndDsKICNpbmNsdWRlICZsdDtuZXQveGRwX3NvY2tfZHJ2LmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bmV0L2luZXRfZHNjcC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9pY21wdjYuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bmV0L2ljbXAuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bmV0L2lwNl9yb3V0ZS5oJmd0OwogCiAjaW5jbHVkZSAmIzM0O2Rldi5oJiMzNDsKIApAQCAtMTI1NDYsNiAmIzQzOzEyNTQ5LDg0IEBAIF9fYnBmX2tmdW5jIGludCBicGZfeGRwX3B1bGxfZGF0YShzdHJ1Y3QgeGRwX21kICp4LCB1MzIgbGVuKQogCXJldHVybiAwOwogfQogCiYjNDM7LyoqCiYjNDM7ICogYnBmX2ljbXBfc2VuZCAtIFNlbmQgYW4gSUNNUCBjb250cm9sIG1lc3NhZ2UKJiM0MzsgKiBAc2tiX2N0eDogUGFja2V0IHRoYXQgdHJpZ2dlcmVkIHRoZSBjb250cm9sIG1lc3NhZ2UKJiM0MzsgKiBAdHlwZTogSUNNUCB0eXBlIChvbmx5IElDTVBfREVTVF9VTlJFQUNIL0lDTVBWNl9ERVNUX1VOUkVBQ0ggc3VwcG9ydGVkKQomIzQzOyAqIEBjb2RlOiBJQ01QIGNvZGUgKDAtMTUgZXhjZXB0IElDTVBfRlJBR19ORUVERUQgZm9yIElQdjQsIDAtNiBmb3IgSVB2NikKJiM0MzsgKgomIzQzOyAqIFNlbmRzIGFuIElDTVAgY29udHJvbCBtZXNzYWdlIGluIHJlc3BvbnNlIHRvIHRoZSBwYWNrZXQuIFRoZSBvcmlnaW5hbCBwYWNrZXQKJiM0MzsgKiBpcyBjbG9uZWQgYmVmb3JlIHNlbmRpbmcgdGhlIElDTVAgbWVzc2FnZSwgc28gdGhlIEJQRiBwcm9ncmFtIGNhbiBzdGlsbCBsZXQKJiM0MzsgKiB0aGUgcGFja2V0IHBhc3MgaWYgZGVzaXJlZC4KJiM0MzsgKgomIzQzOyAqIEN1cnJlbnRseSBvbmx5IElDTVBfREVTVF9VTlJFQUNIIChJUHY0KSBhbmQgSUNNUFY2X0RFU1RfVU5SRUFDSCAoSVB2NikgYXJlCiYjNDM7ICogc3VwcG9ydGVkLgomIzQzOyAqCiYjNDM7ICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MgKHNlbmQgYXR0ZW1wdCksIG5lZ2F0aXZlIGVycm9yIGNvZGUgb24gZmFpbHVyZToKJiM0MzsgKiAgICAgICAgIC1FQlVTWTogUmVjdXJzaW9uIGRldGVjdGVkCiYjNDM7ICogICAgICAgICAtRVBST1RPTk9TVVBQT1JUOiBOb24tSVAgcHJvdG9jb2wKJiM0MzsgKiAgICAgICAgIC1FT1BOT1RTVVBQOiBVbnN1cHBvcnRlZCBJQ01QIHR5cGUKJiM0MzsgKiAgICAgICAgIC1FSU5WQUw6IEludmFsaWQgY29kZSBwYXJhbWV0ZXIKJiM0MzsgKiAgICAgICAgIC1FTkVUVU5SRUFDSDogVW51c2FibGUgSVB2NCByb3V0ZS9kc3QgYXR0YWNoZWQgdG8gdGhlIHNrYgomIzQzOyAqICAgICAgICAgLUVOT01FTTogTWVtb3J5IGFsbG9jYXRpb24gZmFpbGVkCiYjNDM7ICovCiYjNDM7X19icGZfa2Z1bmMgaW50IGJwZl9pY21wX3NlbmQoc3RydWN0IF9fc2tfYnVmZiAqc2tiX2N0eCwgaW50IHR5cGUsIGludCBjb2RlKQomIzQzO3sKJiM0MzsJc3RydWN0IHNrX2J1ZmYgKnNrYiA9IChzdHJ1Y3Qgc2tfYnVmZiAqKXNrYl9jdHg7CiYjNDM7CXN0cnVjdCBza19idWZmICpuc2tiOwomIzQzOwlzdHJ1Y3Qgc29jayAqc2s7CiYjNDM7CiYjNDM7CXNrID0gc2tiX3RvX2Z1bGxfc2soc2tiKTsKJiM0MzsJaWYgKHNrICZhbXA7JmFtcDsgc2stJmd0O3NrX2tlcm5fc29jayAmYW1wOyZhbXA7CiYjNDM7CSAgICAoc2stJmd0O3NrX3Byb3RvY29sID09IElQUFJPVE9fSUNNUCB8fCBzay0mZ3Q7c2tfcHJvdG9jb2wgPT0gSVBQUk9UT19JQ01QVjYpKQomIzQzOwkJcmV0dXJuIC1FQlVTWTsKJiM0MzsKJiM0MzsJc3dpdGNoIChza2ItJmd0O3Byb3RvY29sKSB7CiYjNDM7I2lmIElTX0VOQUJMRUQoQ09ORklHX0lORVQpCiYjNDM7CWNhc2UgaHRvbnMoRVRIX1BfSVApOiB7CiYjNDM7CQlpZiAodHlwZSAhPSBJQ01QX0RFU1RfVU5SRUFDSCkKJiM0MzsJCQlyZXR1cm4gLUVPUE5PVFNVUFA7CiYjNDM7CQlpZiAoY29kZSAmbHQ7IDAgfHwgY29kZSAmZ3Q7IE5SX0lDTVBfVU5SRUFDSCB8fAomIzQzOwkJICAgIGNvZGUgPT0gSUNNUF9GUkFHX05FRURFRCkgLyogbmVlZHMgYSB2YWxpZCBuZXh0LWhvcCBNVFUgKi8KJiM0MzsJCQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsKJiM0MzsJCS8qIGljbXBfc2VuZCByZXF1aXJlcyBhIHJ0YWJsZTsgdGVzdC1ydW4gc3ludGhldGljIHNrYnMgbGFjayBvbmUuICovCiYjNDM7CQlpZiAoIXNrYl92YWxpZF9kc3Qoc2tiKSkKJiM0MzsJCQlyZXR1cm4gLUVORVRVTlJFQUNIOwomIzQzOwomIzQzOwkJbnNrYiA9IHNrYl9jbG9uZShza2IsIEdGUF9BVE9NSUMpOwomIzQzOwkJaWYgKCFuc2tiKQomIzQzOwkJCXJldHVybiAtRU5PTUVNOwomIzQzOwomIzQzOwkJbWVtc2V0KElQQ0IobnNrYiksIDAsIHNpemVvZigqSVBDQihuc2tiKSkpOwomIzQzOwkJaWNtcF9zZW5kKG5za2IsIHR5cGUsIGNvZGUsIDApOwomIzQzOwkJY29uc3VtZV9za2IobnNrYik7CiYjNDM7CQlicmVhazsKJiM0MzsJfQomIzQzOyNlbmRpZgomIzQzOyNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2KQomIzQzOwljYXNlIGh0b25zKEVUSF9QX0lQVjYpOgomIzQzOwkJaWYgKHR5cGUgIT0gSUNNUFY2X0RFU1RfVU5SRUFDSCkKJiM0MzsJCQlyZXR1cm4gLUVPUE5PVFNVUFA7CiYjNDM7CQlpZiAoY29kZSAmbHQ7IDAgfHwgY29kZSAmZ3Q7IElDTVBWNl9SRUpFQ1RfUk9VVEUpCiYjNDM7CQkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CiYjNDM7CQluc2tiID0gc2tiX2Nsb25lKHNrYiwgR0ZQX0FUT01JQyk7CiYjNDM7CQlpZiAoIW5za2IpCiYjNDM7CQkJcmV0dXJuIC1FTk9NRU07CiYjNDM7CiYjNDM7CQltZW1zZXQoSVA2Q0IobnNrYiksIDAsIHNpemVvZigqSVA2Q0IobnNrYikpKTsKJiM0MzsJCWljbXB2Nl9zZW5kKG5za2IsIHR5cGUsIGNvZGUsIDApOwomIzQzOwkJY29uc3VtZV9za2IobnNrYik7CiYjNDM7CQlicmVhazsKJiM0MzsjZW5kaWYKJiM0MzsJZGVmYXVsdDoKJiM0MzsJCXJldHVybiAtRVBST1RPTk9TVVBQT1JUOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKIF9fYnBmX2tmdW5jX2VuZF9kZWZzKCk7CiAKIGludCBicGZfZHlucHRyX2Zyb21fc2tiX3Jkb25seShzdHJ1Y3QgX19za19idWZmICpza2IsIHU2NCBmbGFncywKQEAgLTEyNTg4LDYgJiM0MzsxMjY2OSwxMCBAQCBCVEZfS0ZVTkNTX1NUQVJUKGJwZl9rZnVuY19jaGVja19zZXRfc29ja19vcHMpCiBCVEZfSURfRkxBR1MoZnVuYywgYnBmX3NvY2tfb3BzX2VuYWJsZV90eF90c3RhbXApCiBCVEZfS0ZVTkNTX0VORChicGZfa2Z1bmNfY2hlY2tfc2V0X3NvY2tfb3BzKQogCiYjNDM7QlRGX0tGVU5DU19TVEFSVChicGZfa2Z1bmNfY2hlY2tfc2V0X2ljbXBfc2VuZCkKJiM0MztCVEZfSURfRkxBR1MoZnVuYywgYnBmX2ljbXBfc2VuZCkKJiM0MztCVEZfS0ZVTkNTX0VORChicGZfa2Z1bmNfY2hlY2tfc2V0X2ljbXBfc2VuZCkKJiM0MzsKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYnRmX2tmdW5jX2lkX3NldCBicGZfa2Z1bmNfc2V0X3NrYiA9IHsKIAkub3duZXIgPSBUSElTX01PRFVMRSwKIAkuc2V0ID0gJmFtcDticGZfa2Z1bmNfY2hlY2tfc2V0X3NrYiwKQEAgLTEyNjE4LDYgJiM0MzsxMjcwMywxMSBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGJ0Zl9rZnVuY19pZF9zZXQgYnBmX2tmdW5jX3NldF9zb2NrX29wcyA9IHsKIAkuc2V0ID0gJmFtcDticGZfa2Z1bmNfY2hlY2tfc2V0X3NvY2tfb3BzLAogfTsKIAomIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgYnRmX2tmdW5jX2lkX3NldCBicGZfa2Z1bmNfc2V0X2ljbXBfc2VuZCA9IHsKJiM0MzsJLm93bmVyID0gVEhJU19NT0RVTEUsCiYjNDM7CS5zZXQgPSAmYW1wO2JwZl9rZnVuY19jaGVja19zZXRfaWNtcF9zZW5kLAomIzQzO307CiYjNDM7CiBzdGF0aWMgaW50IF9faW5pdCBicGZfa2Z1bmNfaW5pdCh2b2lkKQogewogCWludCByZXQ7CkBAIC0xMjYzOSw2ICYjNDM7MTI3MjksNyBAQCBzdGF0aWMgaW50IF9faW5pdCBicGZfa2Z1bmNfaW5pdCh2b2lkKQogCXJldCA9IHJldCA/OiByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfQ0dST1VQX1NPQ0tfQUREUiwKIAkJCQkJICAgICAgICZhbXA7YnBmX2tmdW5jX3NldF9zb2NrX2FkZHIpOwogCXJldCA9IHJldCA/OiByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfU0NIRURfQ0xTLCAmYW1wO2JwZl9rZnVuY19zZXRfdGNwX3JlcXNrKTsKJiM0MzsJcmV0ID0gcmV0ID86IHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9DR1JPVVBfU0tCLCAmYW1wO2JwZl9rZnVuY19zZXRfaWNtcF9zZW5kKTsKIAlyZXR1cm4gcmV0ID86IHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9TT0NLX09QUywgJmFtcDticGZfa2Z1bmNfc2V0X3NvY2tfb3BzKTsKIH0KIGxhdGVfaW5pdGNhbGwoYnBmX2tmdW5jX2luaXQpOwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvaWNtcF9zZW5kX2tmdW5jLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9pY21wX3NlbmRfa2Z1bmMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMC4uZmZhZjBmZTE4ODBiMGUKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9pY21wX3NlbmRfa2Z1bmMuYwpAQCAtMCwwICYjNDM7MSwyNjkgQEAKJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAomIzQzOyNpbmNsdWRlICZsdDt0ZXN0X3Byb2dzLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O25ldHdvcmtfaGVscGVycy5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtjZ3JvdXBfaGVscGVycy5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9lcnJxdWV1ZS5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtwb2xsLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O3VuaXN0ZC5oJmd0OwomIzQzOyNpbmNsdWRlICYjMzQ7aWNtcF9zZW5kLnNrZWwuaCYjMzQ7CiYjNDM7CiYjNDM7I2RlZmluZSBUSU1FT1VUX01TIDEwMDAKJiM0MzsKJiM0MzsjZGVmaW5lIElDTVBfREVTVF9VTlJFQUNIIDMKJiM0MzsjZGVmaW5lIElDTVBWNl9ERVNUX1VOUkVBQ0ggMQomIzQzOwomIzQzOyNkZWZpbmUgSUNNUF9IT1NUX1VOUkVBQ0ggMQomIzQzOyNkZWZpbmUgSUNNUF9GUkFHX05FRURFRCA0CiYjNDM7I2RlZmluZSBOUl9JQ01QX1VOUkVBQ0ggMTUKJiM0MzsjZGVmaW5lIElDTVBWNl9SRUpFQ1RfUk9VVEUgNgomIzQzOwomIzQzOyNkZWZpbmUgS0ZVTkNfUkVUX1VOU0VUIC0xCiYjNDM7CiYjNDM7c3RhdGljIGludCBjb25uZWN0X3RvX2ZkX25vbmJsb2NrKGludCBzZXJ2ZXJfZmQpCiYjNDM7ewomIzQzOwlzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZSBhZGRyOwomIzQzOwlzb2NrbGVuX3QgbGVuID0gc2l6ZW9mKGFkZHIpOwomIzQzOwlpbnQgZmQsIGVyciwgb24gPSAxOwomIzQzOwomIzQzOwlpZiAoZ2V0c29ja25hbWUoc2VydmVyX2ZkLCAoc3RydWN0IHNvY2thZGRyICopJmFtcDthZGRyLCAmYW1wO2xlbikpCiYjNDM7CQlyZXR1cm4gLTE7CiYjNDM7CiYjNDM7CWZkID0gc29ja2V0KGFkZHIuc3NfZmFtaWx5LCBTT0NLX1NUUkVBTSB8IFNPQ0tfTk9OQkxPQ0ssIDApOwomIzQzOwlpZiAoZmQgJmx0OyAwKQomIzQzOwkJcmV0dXJuIC0xOwomIzQzOwomIzQzOwlpZiAoYWRkci5zc19mYW1pbHkgPT0gQUZfSU5FVDYgJmFtcDsmYW1wOwomIzQzOwkgICAgc2V0c29ja29wdChmZCwgSVBQUk9UT19JUFY2LCBJUFY2X1JFQ1ZFUlIsICZhbXA7b24sIHNpemVvZihvbikpICZsdDsgMCkgewomIzQzOwkJY2xvc2UoZmQpOwomIzQzOwkJcmV0dXJuIC0xOwomIzQzOwl9CiYjNDM7CiYjNDM7CWVyciA9IGNvbm5lY3QoZmQsIChzdHJ1Y3Qgc29ja2FkZHIgKikmYW1wO2FkZHIsIGxlbik7CiYjNDM7CWlmIChlcnIgJmx0OyAwICZhbXA7JmFtcDsgZXJybm8gIT0gRUlOUFJPR1JFU1MpIHsKJiM0MzsJCWNsb3NlKGZkKTsKJiM0MzsJCXJldHVybiAtMTsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gZmQ7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIHJlYWRfaWNtcF9lcnJxdWV1ZShpbnQgc29ja2ZkLCBpbnQgZXhwZWN0ZWRfY29kZSwgaW50IGFmKQomIzQzO3sKJiM0MzsJaW50IGV4cGVjdGVkX2VlX3R5cGUgPSAoYWYgPT0gQUZfSU5FVCkgPyBJQ01QX0RFU1RfVU5SRUFDSCA6CiYjNDM7CQkJCQkJIElDTVBWNl9ERVNUX1VOUkVBQ0g7CiYjNDM7CWludCBleHBlY3RlZF9vcmlnaW4gPSAoYWYgPT0gQUZfSU5FVCkgPyBTT19FRV9PUklHSU5fSUNNUCA6CiYjNDM7CQkJCQkJU09fRUVfT1JJR0lOX0lDTVA2OwomIzQzOwlpbnQgZXhwZWN0ZWRfbGV2ZWwgPSAoYWYgPT0gQUZfSU5FVCkgPyBJUFBST1RPX0lQIDogSVBQUk9UT19JUFY2OwomIzQzOwlpbnQgZXhwZWN0ZWRfdHlwZSA9IChhZiA9PSBBRl9JTkVUKSA/IElQX1JFQ1ZFUlIgOiBJUFY2X1JFQ1ZFUlI7CiYjNDM7CXN0cnVjdCBzb2NrX2V4dGVuZGVkX2VyciAqc29ja19lcnI7CiYjNDM7CWNoYXIgY3RybF9idWZbNTEyXTsKJiM0MzsJc3RydWN0IG1zZ2hkciBtc2cgPSB7CiYjNDM7CQkubXNnX2NvbnRyb2wgPSBjdHJsX2J1ZiwKJiM0MzsJCS5tc2dfY29udHJvbGxlbiA9IHNpemVvZihjdHJsX2J1ZiksCiYjNDM7CX07CiYjNDM7CXN0cnVjdCBwb2xsZmQgcGZkID0gewomIzQzOwkJLmZkID0gc29ja2ZkLAomIzQzOwkJLmV2ZW50cyA9IFBPTExFUlIsCiYjNDM7CX07CiYjNDM7CXN0cnVjdCBjbXNnaGRyICpjbTsKJiM0MzsJc3NpemVfdCBuOwomIzQzOwomIzQzOwlpZiAoIUFTU0VSVF9HRShwb2xsKCZhbXA7cGZkLCAxLCBUSU1FT1VUX01TKSwgMSwgJiMzNDtwb2xsX2VycnF1ZXVlJiMzNDspKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwluID0gcmVjdm1zZyhzb2NrZmQsICZhbXA7bXNnLCBNU0dfRVJSUVVFVUUpOwomIzQzOwlpZiAoIUFTU0VSVF9HRShuLCAwLCAmIzM0O3JlY3Ztc2dfZXJycXVldWUmIzM0OykpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CWNtID0gQ01TR19GSVJTVEhEUigmYW1wO21zZyk7CiYjNDM7CWlmICghQVNTRVJUX05FUShjbSwgTlVMTCwgJiMzNDtjbV9maXJzdGhkcl9udWxsJiMzNDspKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwlmb3IgKDsgY207IGNtID0gQ01TR19OWFRIRFIoJmFtcDttc2csIGNtKSkgewomIzQzOwkJaWYgKGNtLSZndDtjbXNnX2xldmVsICE9IGV4cGVjdGVkX2xldmVsIHx8CiYjNDM7CQkgICAgY20tJmd0O2Ntc2dfdHlwZSAhPSBleHBlY3RlZF90eXBlKQomIzQzOwkJCWNvbnRpbnVlOwomIzQzOwomIzQzOwkJc29ja19lcnIgPSAoc3RydWN0IHNvY2tfZXh0ZW5kZWRfZXJyICopQ01TR19EQVRBKGNtKTsKJiM0MzsKJiM0MzsJCWlmICghQVNTRVJUX0VRKHNvY2tfZXJyLSZndDtlZV9vcmlnaW4sIGV4cGVjdGVkX29yaWdpbiwKJiM0MzsJCQkgICAgICAgJiMzNDtzb2NrX2Vycl9vcmlnaW4mIzM0OykpCiYjNDM7CQkJcmV0dXJuOwomIzQzOwkJaWYgKCFBU1NFUlRfRVEoc29ja19lcnItJmd0O2VlX3R5cGUsIGV4cGVjdGVkX2VlX3R5cGUsCiYjNDM7CQkJICAgICAgICYjMzQ7c29ja19lcnJfdHlwZV9kZXN0X3VucmVhY2gmIzM0OykpCiYjNDM7CQkJcmV0dXJuOwomIzQzOwkJQVNTRVJUX0VRKHNvY2tfZXJyLSZndDtlZV9jb2RlLCBleHBlY3RlZF9jb2RlLCAmIzM0O3NvY2tfZXJyX2NvZGUmIzM0Oyk7CiYjNDM7CQlyZXR1cm47CiYjNDM7CX0KJiM0MzsKJiM0MzsJQVNTRVJUX0ZBSUwoJiMzNDtubyBJUF9SRUNWRVJSL0lQVjZfUkVDVkVSUiBjb250cm9sIG1lc3NhZ2UgZm91bmQmIzM0Oyk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBib29sIHZhbGlkX3VucmVhY2hfY29kZShpbnQgY29kZSwgaW50IGFmKQomIzQzO3sKJiM0MzsJaWYgKGNvZGUgJmx0OyAwKQomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwomIzQzOwlpZiAoYWYgPT0gQUZfSU5FVCkKJiM0MzsJCXJldHVybiBjb2RlICZsdDs9IE5SX0lDTVBfVU5SRUFDSCAmYW1wOyZhbXA7IGNvZGUgIT0gSUNNUF9GUkFHX05FRURFRDsKJiM0MzsKJiM0MzsJcmV0dXJuIGNvZGUgJmx0Oz0gSUNNUFY2X1JFSkVDVF9ST1VURTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgdHJpZ2dlcl9wcm9nX3JlYWRfaWNtcF9lcnJxdWV1ZShzdHJ1Y3QgaWNtcF9zZW5kICpza2VsLCBpbnQgY29kZSwKJiM0MzsJCQkJCSAgICBpbnQgYWYsIGNvbnN0IGNoYXIgKmlwKQomIzQzO3sKJiM0MzsJaW50IHNydl9mZCA9IC0xLCBjbGllbnRfZmQgPSAtMTsKJiM0MzsJaW50IHBvcnQ7CiYjNDM7CiYjNDM7CXNydl9mZCA9IHN0YXJ0X3NlcnZlcihhZiwgU09DS19TVFJFQU0sIGlwLCAwLCBUSU1FT1VUX01TKTsKJiM0MzsJaWYgKCFBU1NFUlRfT0tfRkQoc3J2X2ZkLCAmIzM0O3N0YXJ0X3NlcnZlciYjMzQ7KSkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJcG9ydCA9IGdldF9zb2NrZXRfbG9jYWxfcG9ydChzcnZfZmQpOwomIzQzOwlpZiAoIUFTU0VSVF9HRShwb3J0LCAwLCAmIzM0O2dldF9zb2NrZXRfbG9jYWxfcG9ydCYjMzQ7KSkgewomIzQzOwkJY2xvc2Uoc3J2X2ZkKTsKJiM0MzsJCXJldHVybjsKJiM0MzsJfQomIzQzOwomIzQzOwlza2VsLSZndDtic3MtJmd0O3NlcnZlcl9wb3J0ID0gbnRvaHMocG9ydCk7CiYjNDM7CXNrZWwtJmd0O2Jzcy0mZ3Q7dW5yZWFjaF90eXBlID0gKGFmID09IEFGX0lORVQpID8gSUNNUF9ERVNUX1VOUkVBQ0ggOgomIzQzOwkJCQkJCSAgICBJQ01QVjZfREVTVF9VTlJFQUNIOwomIzQzOwlza2VsLSZndDtic3MtJmd0O3VucmVhY2hfY29kZSA9IGNvZGU7CiYjNDM7CXNrZWwtJmd0O2RhdGEtJmd0O2tmdW5jX3JldCA9IEtGVU5DX1JFVF9VTlNFVDsKJiM0MzsKJiM0MzsJY2xpZW50X2ZkID0gY29ubmVjdF90b19mZF9ub25ibG9jayhzcnZfZmQpOwomIzQzOwlpZiAoIUFTU0VSVF9PS19GRChjbGllbnRfZmQsICYjMzQ7Y2xpZW50X2Nvbm5lY3Rfbm9uYmxvY2smIzM0OykpIHsKJiM0MzsJCWNsb3NlKHNydl9mZCk7CiYjNDM7CQlyZXR1cm47CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKHZhbGlkX3VucmVhY2hfY29kZShjb2RlLCBhZikpCiYjNDM7CQlyZWFkX2ljbXBfZXJycXVldWUoY2xpZW50X2ZkLCBjb2RlLCBhZik7CiYjNDM7CiYjNDM7CWNsb3NlKGNsaWVudF9mZCk7CiYjNDM7CWNsb3NlKHNydl9mZCk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIHJ1bl9pY21wX3Rlc3Qoc3RydWN0IGljbXBfc2VuZCAqc2tlbCwgaW50IGFmLCBjb25zdCBjaGFyICppcCwKJiM0MzsJCQkgIGludCBtYXhfY29kZSkKJiM0Mzt7CiYjNDM7CWZvciAoaW50IGNvZGUgPSAwOyBjb2RlICZsdDs9IG1heF9jb2RlOyBjb2RlJiM0MzsmIzQzOykgewomIzQzOwkJaWYgKGFmID09IEFGX0lORVQgJmFtcDsmYW1wOyBjb2RlID09IElDTVBfRlJBR19ORUVERUQpCiYjNDM7CQkJY29udGludWU7CiYjNDM7CiYjNDM7CQl0cmlnZ2VyX3Byb2dfcmVhZF9pY21wX2VycnF1ZXVlKHNrZWwsIGNvZGUsIGFmLCBpcCk7CiYjNDM7CQlBU1NFUlRfRVEoc2tlbC0mZ3Q7ZGF0YS0mZ3Q7a2Z1bmNfcmV0LCAwLCAmIzM0O2tmdW5jX3JldCYjMzQ7KTsKJiM0MzsJfQomIzQzOwomIzQzOwkvKiBUZXN0IGludmFsaWQgY29kZXMgKi8KJiM0MzsJdHJpZ2dlcl9wcm9nX3JlYWRfaWNtcF9lcnJxdWV1ZShza2VsLCAtMSwgYWYsIGlwKTsKJiM0MzsJQVNTRVJUX0VRKHNrZWwtJmd0O2RhdGEtJmd0O2tmdW5jX3JldCwgLUVJTlZBTCwgJiMzNDtrZnVuY19yZXQmIzM0Oyk7CiYjNDM7CiYjNDM7CXRyaWdnZXJfcHJvZ19yZWFkX2ljbXBfZXJycXVldWUoc2tlbCwgbWF4X2NvZGUgJiM0MzsgMSwgYWYsIGlwKTsKJiM0MzsJQVNTRVJUX0VRKHNrZWwtJmd0O2RhdGEtJmd0O2tmdW5jX3JldCwgLUVJTlZBTCwgJiMzNDtrZnVuY19yZXQmIzM0Oyk7CiYjNDM7CiYjNDM7CWlmIChhZiA9PSBBRl9JTkVUKSB7CiYjNDM7CQl0cmlnZ2VyX3Byb2dfcmVhZF9pY21wX2VycnF1ZXVlKHNrZWwsIElDTVBfRlJBR19ORUVERUQsIGFmLCBpcCk7CiYjNDM7CQlBU1NFUlRfRVEoc2tlbC0mZ3Q7ZGF0YS0mZ3Q7a2Z1bmNfcmV0LCAtRUlOVkFMLCAmIzM0O2tmdW5jX3JldCYjMzQ7KTsKJiM0MzsJfQomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBydW5faWNtcF9ub19yb3V0ZV90ZXN0KHN0cnVjdCBpY21wX3NlbmQgKnNrZWwpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgaXB2NF9wYWNrZXQgcGt0ID0gcGt0X3Y0OwomIzQzOwlMSUJCUEZfT1BUUyhicGZfdGVzdF9ydW5fb3B0cywgb3B0cywKJiM0MzsJCS5kYXRhX2luID0gJmFtcDtwa3QsCiYjNDM7CQkuZGF0YV9zaXplX2luID0gc2l6ZW9mKHBrdCksCiYjNDM7CSk7CiYjNDM7CWludCBlcnI7CiYjNDM7CiYjNDM7CXBrdC5pcGgudmVyc2lvbiA9IDQ7CiYjNDM7CXBrdC5pcGguZGFkZHIgPSBpbmV0X2FkZHIoJiMzNDsxMjcuMC4wLjEmIzM0Oyk7CiYjNDM7CXBrdC50Y3AuZGVzdCA9IGh0b25zKDgwKTsKJiM0MzsJc2tlbC0mZ3Q7YnNzLSZndDtzZXJ2ZXJfcG9ydCA9IDgwOwomIzQzOwlza2VsLSZndDtic3MtJmd0O3VucmVhY2hfdHlwZSA9IElDTVBfREVTVF9VTlJFQUNIOwomIzQzOwlza2VsLSZndDtic3MtJmd0O3VucmVhY2hfY29kZSA9IElDTVBfSE9TVF9VTlJFQUNIOwomIzQzOwlza2VsLSZndDtkYXRhLSZndDtrZnVuY19yZXQgPSBLRlVOQ19SRVRfVU5TRVQ7CiYjNDM7CiYjNDM7CWVyciA9IGJwZl9wcm9nX3Rlc3RfcnVuX29wdHMoYnBmX3Byb2dyYW1fX2ZkKHNrZWwtJmd0O3Byb2dzLmVncmVzcyksICZhbXA7b3B0cyk7CiYjNDM7CWlmICghQVNTRVJUX09LKGVyciwgJiMzNDt0ZXN0X3J1biYjMzQ7KSkKJiM0MzsJCXJldHVybjsKJiM0MzsJQVNTRVJUX0VRKHNrZWwtJmd0O2RhdGEtJmd0O2tmdW5jX3JldCwgLUVORVRVTlJFQUNILCAmIzM0O2tmdW5jX3JldF9ub19yb3V0ZSYjMzQ7KTsKJiM0Mzt9CiYjNDM7CiYjNDM7dm9pZCB0ZXN0X2ljbXBfc2VuZF91bnJlYWNoX2Nncm91cCh2b2lkKQomIzQzO3sKJiM0MzsJc3RydWN0IGljbXBfc2VuZCAqc2tlbDsKJiM0MzsJaW50IGNncm91cF9mZCA9IC0xOwomIzQzOwomIzQzOwlza2VsID0gaWNtcF9zZW5kX19vcGVuX2FuZF9sb2FkKCk7CiYjNDM7CWlmICghQVNTRVJUX09LX1BUUihza2VsLCAmIzM0O3NrZWxfb3BlbiYjMzQ7KSkKJiM0MzsJCWdvdG8gY2xlYW51cDsKJiM0MzsKJiM0MzsJY2dyb3VwX2ZkID0gdGVzdF9fam9pbl9jZ3JvdXAoJiMzNDsvaWNtcF9zZW5kX3VucmVhY2hfY2dyb3VwJiMzNDspOwomIzQzOwlpZiAoIUFTU0VSVF9PS19GRChjZ3JvdXBfZmQsICYjMzQ7am9pbl9jZ3JvdXAmIzM0OykpCiYjNDM7CQlnb3RvIGNsZWFudXA7CiYjNDM7CiYjNDM7CXNrZWwtJmd0O2xpbmtzLmVncmVzcyA9CiYjNDM7CQlicGZfcHJvZ3JhbV9fYXR0YWNoX2Nncm91cChza2VsLSZndDtwcm9ncy5lZ3Jlc3MsIGNncm91cF9mZCk7CiYjNDM7CWlmICghQVNTRVJUX09LX1BUUihza2VsLSZndDtsaW5rcy5lZ3Jlc3MsICYjMzQ7cHJvZ19hdHRhY2hfY2dyb3VwJiMzNDspKQomIzQzOwkJZ290byBjbGVhbnVwOwomIzQzOwomIzQzOwlpZiAodGVzdF9fc3RhcnRfc3VidGVzdCgmIzM0O2lwdjQmIzM0OykpCiYjNDM7CQlydW5faWNtcF90ZXN0KHNrZWwsIEFGX0lORVQsICYjMzQ7MTI3LjAuMC4xJiMzNDssIE5SX0lDTVBfVU5SRUFDSCk7CiYjNDM7CiYjNDM7CWlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KCYjMzQ7aXB2NiYjMzQ7KSkKJiM0MzsJCXJ1bl9pY21wX3Rlc3Qoc2tlbCwgQUZfSU5FVDYsICYjMzQ7OjoxJiMzNDssIElDTVBWNl9SRUpFQ1RfUk9VVEUpOwomIzQzOwomIzQzOwlpZiAodGVzdF9fc3RhcnRfc3VidGVzdCgmIzM0O25vX3JvdXRlJiMzNDspKQomIzQzOwkJcnVuX2ljbXBfbm9fcm91dGVfdGVzdChza2VsKTsKJiM0MzsKJiM0MztjbGVhbnVwOgomIzQzOwlpY21wX3NlbmRfX2Rlc3Ryb3koc2tlbCk7CiYjNDM7CWlmIChjZ3JvdXBfZmQgJmd0Oz0gMCkKJiM0MzsJCWNsb3NlKGNncm91cF9mZCk7CiYjNDM7fQomIzQzOwomIzQzO3ZvaWQgdGVzdF9pY21wX3NlbmRfdW5yZWFjaF9yZWN1cnNpb24odm9pZCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBpY21wX3NlbmQgKnNrZWw7CiYjNDM7CWludCBjZ3JvdXBfZmQgPSAtMTsKJiM0MzsJaW50IGVycjsKJiM0MzsKJiM0MzsJZXJyID0gc2V0dXBfY2dyb3VwX2Vudmlyb25tZW50KCk7CiYjNDM7CWlmICghQVNTRVJUX09LKGVyciwgJiMzNDtzZXR1cF9jZ3JvdXBfZW52aXJvbm1lbnQmIzM0OykpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CXNrZWwgPSBpY21wX3NlbmRfX29wZW5fYW5kX2xvYWQoKTsKJiM0MzsJaWYgKCFBU1NFUlRfT0tfUFRSKHNrZWwsICYjMzQ7c2tlbF9vcGVuJiMzNDspKQomIzQzOwkJZ290byBjbGVhbnVwOwomIzQzOwomIzQzOwljZ3JvdXBfZmQgPSBnZXRfcm9vdF9jZ3JvdXAoKTsKJiM0MzsJaWYgKCFBU1NFUlRfT0tfRkQoY2dyb3VwX2ZkLCAmIzM0O2dldF9yb290X2Nncm91cCYjMzQ7KSkKJiM0MzsJCWdvdG8gY2xlYW51cDsKJiM0MzsKJiM0MzsJc2tlbC0mZ3Q7ZGF0YS0mZ3Q7dGFyZ2V0X3BpZCA9IGdldHBpZCgpOwomIzQzOwlza2VsLSZndDtsaW5rcy5yZWN1cnNpb24gPQomIzQzOwkJYnBmX3Byb2dyYW1fX2F0dGFjaF9jZ3JvdXAoc2tlbC0mZ3Q7cHJvZ3MucmVjdXJzaW9uLCBjZ3JvdXBfZmQpOwomIzQzOwlpZiAoIUFTU0VSVF9PS19QVFIoc2tlbC0mZ3Q7bGlua3MucmVjdXJzaW9uLCAmIzM0O3Byb2dfYXR0YWNoX2Nncm91cCYjMzQ7KSkKJiM0MzsJCWdvdG8gY2xlYW51cDsKJiM0MzsKJiM0MzsJdHJpZ2dlcl9wcm9nX3JlYWRfaWNtcF9lcnJxdWV1ZShza2VsLCBJQ01QX0hPU1RfVU5SRUFDSCwgQUZfSU5FVCwKJiM0MzsJCQkJCSYjMzQ7MTI3LjAuMC4xJiMzNDspOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBCZWNhdXNlIHRoZXJlJiMzOTtzIHJlY3Vyc2lvbiBpbnZvbHZlZCwgdGhlIGZpcnN0IGNhbGwgd2lsbCByZXR1cm4gYXQKJiM0MzsJICogaW5kZXggMSBzaW5jZSBpdCB3aWxsIHJldHVybiB0aGUgc2Vjb25kLCBhbmQgdGhlIHNlY29uZCBjYWxsIHdpbGwKJiM0MzsJICogcmV0dXJuIGF0IGluZGV4IDAgc2luY2UgaXQgd2lsbCByZXR1cm4gdGhlIGZpcnN0LgomIzQzOwkgKi8KJiM0MzsJQVNTRVJUX0VRKHNrZWwtJmd0O2Jzcy0mZ3Q7cmVjX2NvdW50LCAyLCAmIzM0O3JlY19jb3VudCYjMzQ7KTsKJiM0MzsJQVNTRVJUX0VRKHNrZWwtJmd0O2RhdGEtJmd0O3JlY19rZnVuY19yZXRzWzBdLCAtRUJVU1ksICYjMzQ7a2Z1bmNfcmV0c1swXSYjMzQ7KTsKJiM0MzsJQVNTRVJUX0VRKHNrZWwtJmd0O2RhdGEtJmd0O3JlY19rZnVuY19yZXRzWzFdLCAwLCAmIzM0O2tmdW5jX3JldHNbMV0mIzM0Oyk7CiYjNDM7CiYjNDM7Y2xlYW51cDoKJiM0MzsJaWNtcF9zZW5kX19kZXN0cm95KHNrZWwpOwomIzQzOwlpZiAoY2dyb3VwX2ZkICZndDs9IDApCiYjNDM7CQljbG9zZShjZ3JvdXBfZmQpOwomIzQzOwljbGVhbnVwX2Nncm91cF9lbnZpcm9ubWVudCgpOwomIzQzO30KZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9pY21wX3NlbmQuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9pY21wX3NlbmQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMC4uYzY0MmNjZGY5ZmQ1NDQKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvaWNtcF9zZW5kLmMKQEAgLTAsMCAmIzQzOzEsMTIzIEBACiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKJiM0MzsjaW5jbHVkZSAmIzM0O3ZtbGludXguaCYjMzQ7CiYjNDM7I2luY2x1ZGUgJmx0O2JwZi9icGZfaGVscGVycy5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDticGYvYnBmX2VuZGlhbi5oJmd0OwomIzQzOwomIzQzOy8qIDEyNy4wLjAuMSBpbiBob3N0IGJ5dGUgb3JkZXIgKi8KJiM0MzsjZGVmaW5lIFNFUlZFUl9JUCAweDdGMDAwMDAxCiYjNDM7LyogOjoxIGluIGhvc3QgYnl0ZSBvcmRlciAobGFzdCAzMi1iaXQgd29yZCkgKi8KJiM0MzsjZGVmaW5lIFNFUlZFUl9JUDZfTE8gMHgwMDAwMDAwMQomIzQzOwomIzQzO19fdTE2IHNlcnZlcl9wb3J0ID0gMDsKJiM0MztpbnQgdW5yZWFjaF90eXBlID0gMDsKJiM0MztpbnQgdW5yZWFjaF9jb2RlID0gMDsKJiM0MztpbnQga2Z1bmNfcmV0ID0gLTE7CiYjNDM7aW50IHRhcmdldF9waWQgPSAtMTsKJiM0MzsKJiM0Mzt1bnNpZ25lZCBpbnQgcmVjX2NvdW50ID0gMDsKJiM0MztpbnQgcmVjX2tmdW5jX3JldHNbXSA9IHsgLTEsIC0xIH07CiYjNDM7CiYjNDM7U0VDKCYjMzQ7Y2dyb3VwX3NrYi9lZ3Jlc3MmIzM0OykKJiM0MztpbnQgZWdyZXNzKHN0cnVjdCBfX3NrX2J1ZmYgKnNrYikKJiM0Mzt7CiYjNDM7CXZvaWQgKmRhdGEgPSAodm9pZCAqKShsb25nKXNrYi0mZ3Q7ZGF0YTsKJiM0MzsJdm9pZCAqZGF0YV9lbmQgPSAodm9pZCAqKShsb25nKXNrYi0mZ3Q7ZGF0YV9lbmQ7CiYjNDM7CXN0cnVjdCBpcGhkciAqaXBoOwomIzQzOwlzdHJ1Y3QgaXB2NmhkciAqaXA2aDsKJiM0MzsJc3RydWN0IHRjcGhkciAqdGNwaDsKJiM0MzsJX191OCB2ZXJzaW9uOwomIzQzOwomIzQzOwlpZiAoZGF0YSAmIzQzOyAxICZndDsgZGF0YV9lbmQpCiYjNDM7CQlyZXR1cm4gU0tfUEFTUzsKJiM0MzsKJiM0MzsJdmVyc2lvbiA9ICgqKChfX3U4ICopZGF0YSkpICZndDsmZ3Q7IDQ7CiYjNDM7CiYjNDM7CWlmICh2ZXJzaW9uID09IDQpIHsKJiM0MzsJCWlwaCA9IGRhdGE7CiYjNDM7CQlpZiAoKHZvaWQgKikoaXBoICYjNDM7IDEpICZndDsgZGF0YV9lbmQgfHwKJiM0MzsJCSAgICBpcGgtJmd0O3Byb3RvY29sICE9IElQUFJPVE9fVENQIHx8CiYjNDM7CQkgICAgaXBoLSZndDtkYWRkciAhPSBicGZfaHRvbmwoU0VSVkVSX0lQKSkKJiM0MzsJCQlyZXR1cm4gU0tfUEFTUzsKJiM0MzsKJiM0MzsJCXRjcGggPSAodm9pZCAqKWlwaCAmIzQzOyBpcGgtJmd0O2lobCAqIDQ7CiYjNDM7CQlpZiAoKHZvaWQgKikodGNwaCAmIzQzOyAxKSAmZ3Q7IGRhdGFfZW5kIHx8CiYjNDM7CQkgICAgdGNwaC0mZ3Q7ZGVzdCAhPSBicGZfaHRvbnMoc2VydmVyX3BvcnQpKQomIzQzOwkJCXJldHVybiBTS19QQVNTOwomIzQzOwomIzQzOwl9IGVsc2UgaWYgKHZlcnNpb24gPT0gNikgewomIzQzOwkJaXA2aCA9IGRhdGE7CiYjNDM7CQlpZiAoKHZvaWQgKikoaXA2aCAmIzQzOyAxKSAmZ3Q7IGRhdGFfZW5kIHx8CiYjNDM7CQkgICAgaXA2aC0mZ3Q7bmV4dGhkciAhPSBJUFBST1RPX1RDUCkKJiM0MzsJCQlyZXR1cm4gU0tfUEFTUzsKJiM0MzsKJiM0MzsJCWlmIChpcDZoLSZndDtkYWRkci5pbjZfdS51Nl9hZGRyMzJbMF0gIT0gMCB8fAomIzQzOwkJICAgIGlwNmgtJmd0O2RhZGRyLmluNl91LnU2X2FkZHIzMlsxXSAhPSAwIHx8CiYjNDM7CQkgICAgaXA2aC0mZ3Q7ZGFkZHIuaW42X3UudTZfYWRkcjMyWzJdICE9IDAgfHwKJiM0MzsJCSAgICBpcDZoLSZndDtkYWRkci5pbjZfdS51Nl9hZGRyMzJbM10gIT0gYnBmX2h0b25sKFNFUlZFUl9JUDZfTE8pKQomIzQzOwkJCXJldHVybiBTS19QQVNTOwomIzQzOwomIzQzOwkJdGNwaCA9ICh2b2lkICopKGlwNmggJiM0MzsgMSk7CiYjNDM7CQlpZiAoKHZvaWQgKikodGNwaCAmIzQzOyAxKSAmZ3Q7IGRhdGFfZW5kIHx8CiYjNDM7CQkgICAgdGNwaC0mZ3Q7ZGVzdCAhPSBicGZfaHRvbnMoc2VydmVyX3BvcnQpKQomIzQzOwkJCXJldHVybiBTS19QQVNTOwomIzQzOwl9IGVsc2UgewomIzQzOwkJcmV0dXJuIFNLX1BBU1M7CiYjNDM7CX0KJiM0MzsKJiM0MzsJa2Z1bmNfcmV0ID0gYnBmX2ljbXBfc2VuZChza2IsIHVucmVhY2hfdHlwZSwgdW5yZWFjaF9jb2RlKTsKJiM0MzsKJiM0MzsJcmV0dXJuIFNLX0RST1A7CiYjNDM7fQomIzQzOwomIzQzO1NFQygmIzM0O2Nncm91cF9za2IvZWdyZXNzJiMzNDspCiYjNDM7aW50IHJlY3Vyc2lvbihzdHJ1Y3QgX19za19idWZmICpza2IpCiYjNDM7ewomIzQzOwl2b2lkICpkYXRhID0gKHZvaWQgKikobG9uZylza2ItJmd0O2RhdGE7CiYjNDM7CXZvaWQgKmRhdGFfZW5kID0gKHZvaWQgKikobG9uZylza2ItJmd0O2RhdGFfZW5kOwomIzQzOwlzdHJ1Y3QgaWNtcGhkciAqaWNtcGg7CiYjNDM7CXN0cnVjdCB0Y3BoZHIgKnRjcGg7CiYjNDM7CXN0cnVjdCBpcGhkciAqaXBoOwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlpZiAoKGJwZl9nZXRfY3VycmVudF9waWRfdGdpZCgpICZndDsmZ3Q7IDMyKSAhPSB0YXJnZXRfcGlkKQomIzQzOwkJcmV0dXJuIFNLX1BBU1M7CiYjNDM7CiYjNDM7CWlwaCA9IGRhdGE7CiYjNDM7CWlmICgodm9pZCAqKShpcGggJiM0MzsgMSkgJmd0OyBkYXRhX2VuZCB8fCBpcGgtJmd0O3ZlcnNpb24gIT0gNCkKJiM0MzsJCXJldHVybiBTS19QQVNTOwomIzQzOwomIzQzOwlpZiAoaXBoLSZndDtkYWRkciAhPSBicGZfaHRvbmwoU0VSVkVSX0lQKSkKJiM0MzsJCXJldHVybiBTS19QQVNTOwomIzQzOwomIzQzOwlpZiAoaXBoLSZndDtwcm90b2NvbCA9PSBJUFBST1RPX1RDUCkgewomIzQzOwkJdGNwaCA9ICh2b2lkICopaXBoICYjNDM7IGlwaC0mZ3Q7aWhsICogNDsKJiM0MzsJCWlmICgodm9pZCAqKSh0Y3BoICYjNDM7IDEpICZndDsgZGF0YV9lbmQgfHwKJiM0MzsJCSAgICB0Y3BoLSZndDtkZXN0ICE9IGJwZl9odG9ucyhzZXJ2ZXJfcG9ydCkpCiYjNDM7CQkJcmV0dXJuIFNLX1BBU1M7CiYjNDM7CX0gZWxzZSBpZiAoaXBoLSZndDtwcm90b2NvbCA9PSBJUFBST1RPX0lDTVApIHsKJiM0MzsJCWljbXBoID0gKHZvaWQgKilpcGggJiM0MzsgaXBoLSZndDtpaGwgKiA0OwomIzQzOwkJaWYgKCh2b2lkICopKGljbXBoICYjNDM7IDEpICZndDsgZGF0YV9lbmQgfHwKJiM0MzsJCSAgICBpY21waC0mZ3Q7dHlwZSAhPSB1bnJlYWNoX3R5cGUgfHwgaWNtcGgtJmd0O2NvZGUgIT0gdW5yZWFjaF9jb2RlKQomIzQzOwkJCXJldHVybiBTS19QQVNTOwomIzQzOwl9IGVsc2UgewomIzQzOwkJcmV0dXJuIFNLX1BBU1M7CiYjNDM7CX0KJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogVGhpcyBjYWxsIHdpbGwgcHJvdm9rZSBhIHJlY3Vyc2lvbjogdGhlIElDTVAgcGFja2V0IGdlbmVyYXRlZCBieSB0aGUKJiM0MzsJICoga2Z1bmMgd2lsbCByZS10cmlnZ2VyIHRoaXMgcHJvZ3JhbSBzaW5jZSB3ZSBhcmUgaW4gdGhlIHJvb3QgY2dyb3VwIGluCiYjNDM7CSAqIHdoaWNoIHRoZSBrZXJuZWwgSUNNUCBzb2NrZXQgYmVsb25ncy4gSG93ZXZlciB3aGVuIHJlLWVudGVyaW5nIHRoZQomIzQzOwkgKiBrZnVuYywgaXQgc2hvdWxkIHJldHVybiBFQlVTWS4KJiM0MzsJICovCiYjNDM7CXJldCA9IGJwZl9pY21wX3NlbmQoc2tiLCB1bnJlYWNoX3R5cGUsIHVucmVhY2hfY29kZSk7CiYjNDM7CXJlY19rZnVuY19yZXRzW3JlY19jb3VudCAmYW1wOyAxXSA9IHJldDsKJiM0MzsJX19zeW5jX2ZldGNoX2FuZF9hZGQoJmFtcDtyZWNfY291bnQsIDEpOwomIzQzOwomIzQzOwkvKiBMZXQgdGhlIGZpcnN0IElDTVAgZXJyb3IgbWVzc2FnZSBwYXNzICovCiYjNDM7CWlmIChpcGgtJmd0O3Byb3RvY29sID09IElQUFJPVE9fSUNNUCkKJiM0MzsJCXJldHVybiBTS19QQVNTOwomIzQzOwomIzQzOwlyZXR1cm4gU0tfRFJPUDsKJiM0Mzt9CiYjNDM7CiYjNDM7Y2hhciBMSUNFTlNFW10gU0VDKCYjMzQ7bGljZW5zZSYjMzQ7KSA9ICYjMzQ7RHVhbCBCU0QvR1BMJiMzNDs7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI0IDE5OjE0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgzNDkKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiAyOTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgTmV3IGBicGZfaWNtcF9zZW5kYCBrZnVuYyoqCgpPa2F5LCBzbyB0aGVyZSYjMzk7cyBhIG5ldyBwYXRjaCBpbnRyb2R1Y2luZyBhIGBicGZfaWNtcF9zZW5kYCBrZnVuYy4gSW50ZXJlc3RpbmcsIEkgc2VlIGl0JiMzOTtzIHRvdWNoaW5nIGBuZXQvY29yZS9maWx0ZXIuY2AsIHdoaWNoIGlzIGEga2V5IGFyZWEgZm9yIEJQRiwgYW5kIGl0IGFsc28gaW5jbHVkZXMgc29tZSBzZWxmLXRlc3RzLCB3aGljaCBpcyBncmVhdC4gSXQgbG9va3MgbGlrZSB0aGUga2Z1bmMgaXRzZWxmIHRha2VzIHRoZSB1c3VhbCBgc3RydWN0IF9fc2tfYnVmZiAqc2tiX2N0eGAsIHBsdXMgdGhlIElDTVAgYHR5cGVgIGFuZCBgY29kZWAsIGFuZCB0aGVuIGNsb25lcyB0aGUgU0tCIGFuZCB1c2VzIGBpY21wX3NlbmRgIG9yIGBpY21wdjZfc2VuZGAgdG8gYWN0dWFsbHkgdHJhbnNtaXQgdGhlIElDTVAgbWVzc2FnZS4gU2VlbXMgc3RyYWlnaHRmb3J3YXJkIGVub3VnaCDigJMgZnVuY3Rpb25hbGx5IHNvdW5kIGFuZCBkZWZpbml0ZWx5IHJlYWNoYWJsZSBmcm9tIEJQRiBwcm9ncmFtcy4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsICYjMzQ7VGhpcyBuZWVkcyBmdXp6aW5nISYjMzQ7CgpOb3csIGxldCYjMzk7cyBnZXQgaW50byB0aGUgbml0dHktZ3JpdHR5LiBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgcmVxdWlyZWQgY29uZmlndXJhdGlvbnMuIFNpbmNlIHRoaXMga2Z1bmMgaXMgcmVnaXN0ZXJlZCBmb3IgYEJQRl9QUk9HX1RZUEVfQ0dST1VQX1NLQmAsIEkga25vdyB3ZSYjMzk7bGwgZGVmaW5pdGVseSBuZWVkIGBDT05GSUdfQ0dST1VQX0JQRmAgYW5kIGBDT05GSUdfQlBGX1NZU0NBTExgIGVuYWJsZWQuIEl04oCZcyBhbHNvIHVzaW5nIGBpY21wX3NlbmRgIGFuZCBgaWNtcHY2X3NlbmRgLCBzbyBgQ09ORklHX0lORVRgIGFuZCBgQ09ORklHX0lQVjZgIGFyZSBkZWZpbml0ZWx5IGdvaW5nIHRvIGJlIHJlbGV2YW50LCBhcyBjb25maXJtZWQgYnkgdGhvc2UgcHJlcHJvY2Vzc29yIGRpcmVjdGl2ZXMuCgpUbyBiZSBleHRyYSBzdXJlIGFib3V0IHRoZSBjb25maWcsIEkgd2lsbCBjaGVjayBgbmV0L2NvcmUvZmlsdGVyLmNgIGl0c2VsZi4KTGV0JiMzOTtzIGNvbmZpcm0gdGhlIGNvZGUsIGFuZCBjb25maXJtIGBicGZfaWNtcF9zZW5kYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNCAxOToxNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDticGZfaWNtcF9zZW5kJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9jb3JlL2ZpbHRlci5jPTEyNDkxPV9fYnBmX2tmdW5jIGludCBicGZfeGRwX3B1bGxfZGF0YShzdHJ1Y3QgeGRwX21kICp4LCB1MzIgbGVuKVxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTEyNTUyLS8qKlxubmV0L2NvcmUvZmlsdGVyLmM6MTI1NTM6ICogYnBmX2ljbXBfc2VuZCAtIFNlbmQgYW4gSUNNUCBjb250cm9sIG1lc3NhZ2Vcbm5ldC9jb3JlL2ZpbHRlci5jLTEyNTU0LSAqIEBza2JfY3R4OiBQYWNrZXQgdGhhdCB0cmlnZ2VyZWQgdGhlIGNvbnRyb2wgbWVzc2FnZVxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTEyNTcyLSAqL1xubmV0L2NvcmUvZmlsdGVyLmM6MTI1NzM6X19icGZfa2Z1bmMgaW50IGJwZl9pY21wX3NlbmQoc3RydWN0IF9fc2tfYnVmZiAqc2tiX2N0eCwgaW50IHR5cGUsIGludCBjb2RlKVxubmV0L2NvcmUvZmlsdGVyLmMtMTI1NzQte1xuLS1cbm5ldC9jb3JlL2ZpbHRlci5jPTEyNjcyPUJURl9LRlVOQ1NfU1RBUlQoYnBmX2tmdW5jX2NoZWNrX3NldF9pY21wX3NlbmQpXG5uZXQvY29yZS9maWx0ZXIuYzoxMjY3MzpCVEZfSURfRkxBR1MoZnVuYywgYnBmX2ljbXBfc2VuZClcbm5ldC9jb3JlL2ZpbHRlci5jLTEyNjc0LUJURl9LRlVOQ1NfRU5EKGJwZl9rZnVuY19jaGVja19zZXRfaWNtcF9zZW5kKVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9pY21wX3NlbmQuYz0yMT1pbnQgZWdyZXNzKHN0cnVjdCBfX3NrX2J1ZmYgKnNrYilcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvaWNtcF9zZW5kLmMtNjYtXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvaWNtcF9zZW5kLmM6Njc6XHRrZnVuY19yZXQgPSBicGZfaWNtcF9zZW5kKHNrYiwgdW5yZWFjaF90eXBlLCB1bnJlYWNoX2NvZGUpO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2ljbXBfc2VuZC5jLTY4LVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9pY21wX3NlbmQuYz03Mz1pbnQgcmVjdXJzaW9uKHN0cnVjdCBfX3NrX2J1ZmYgKnNrYilcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvaWNtcF9zZW5kLmMtMTExLVx0ICovXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvaWNtcF9zZW5kLmM6MTEyOlx0cmV0ID0gYnBmX2ljbXBfc2VuZChza2IsIHVucmVhY2hfdHlwZSwgdW5yZWFjaF9jb2RlKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9pY21wX3NlbmQuYy0xMTMtXHRyZWNfa2Z1bmNfcmV0c1tyZWNfY291bnQgXHUwMDI2IDFdID0gcmV0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI0IDE5OjE0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk2MTMKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAyNjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBgYnBmX2ljbXBfc2VuZGAga2Z1bmMqKgoKT2theSwgc28gSSBzZWUgdGhhdCBgYnBmX2ljbXBfc2VuZGAgaXMgYmVpbmcgYnJvdWdodCBpbiB0aHJvdWdoIGBicGZfa2Z1bmNfY2hlY2tfc2V0X2ljbXBfc2VuZGAgYW5kIHJlZ2lzdGVyZWQgZm9yIGBCUEZfUFJPR19UWVBFX0NHUk9VUF9TS0JgLiBUaGF0IG1lYW5zIGBDT05GSUdfQ0dST1VQX0JQRmAgaXMgZGVmaW5pdGVseSBhIHByZXJlcXVpc2l0ZS4gSSBrbm93IHRoYXQgbXVjaC4KCk5vdywgbGV0JiMzOTtzIG1ha2Ugc3VyZSB3ZSYjMzk7dmUgZ290IGFsbCB0aGUgZHVja3MgaW4gYSByb3cgY29uZmlnLXdpc2UuIEkmIzM5O20gdGhpbmtpbmcuLi4gZm9yIHRoZSBhY3R1YWwgSUNNUCBzZW5kIGZ1bmN0aW9uYWxpdHksIHdlJiMzOTtyZSBnb2luZyB0byBuZWVkIGBDT05GSUdfSU5FVGAgYW5kIGBDT05GSUdfSVBWNmAsIGZvciBzdXJlLiBBbmQsIG9idmlvdXNseSwgc2luY2Ugd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBCUEYsIGBDT05GSUdfQlBGX1NZU0NBTExgIGlzIGEgZ2l2ZW4uCgpKdXN0IHRvIGJlIGFic29sdXRlbHkgY2xlYXIgaW4gbXkgbWluZCwgdGhlIGNyaXRpY2FsIHN5bWJvbCB3ZSYjMzk7cmUgZm9jdXNpbmcgb24gaGVyZSBpcyBgYnBmX2ljbXBfc2VuZGAuCgpMZXQgbWUgcXVpY2tseSBjb25maXJtIHRoYXQgaXQmIzM5O3MgdGhlIG9ubHkgZnVuY3Rpb24gYmVpbmcgYWRkZWQuIFllcywgdGhhdCYjMzk7cyByaWdodCwganVzdCB0aGUgb25lLgoKQWxyaWdodCwgbGV0JiMzOTtzIHJ1biB0aHJvdWdoIHRob3NlIGNvbmZpZ3VyYXRpb25zIG9uZSBtb3JlIHRpbWUgdG8gbWFrZSBzdXJlIEkmIzM5O20gbm90IG1pc3NpbmcgYW55dGhpbmc6CgoqICAgYENPTkZJR19DR1JPVVBfQlBGYAoqICAgYENPTkZJR19JTkVUYAoqICAgYENPTkZJR19JUFY2YAoqICAgYENPTkZJR19CUEZfU1lTQ0FMTGAKCk9rYXksIGFyZSB0aGVyZSBhbnkgb3RoZXIgZGVwZW5kZW5jaWVzIEkgbmVlZCB0byBiZSBhd2FyZSBvZj8gTGV0IG1lIHRha2UgYSBsb29rIGF0IGBuZXQvY29yZS9maWx0ZXIuY2AgYXJvdW5kIHRoZSBgcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldGAgY2FsbC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNCAxOToxNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtyZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0LipicGZfa2Z1bmNfc2V0X2ljbXBfc2VuZCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvY29yZS9maWx0ZXIuYz0xMjcxMT1zdGF0aWMgaW50IF9faW5pdCBicGZfa2Z1bmNfaW5pdCh2b2lkKVxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTEyNzMxLVx0cmV0ID0gcmV0ID86IHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9TQ0hFRF9DTFMsIFx1MDAyNmJwZl9rZnVuY19zZXRfdGNwX3JlcXNrKTtcbm5ldC9jb3JlL2ZpbHRlci5jOjEyNzMyOlx0cmV0ID0gcmV0ID86IHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9DR1JPVVBfU0tCLCBcdTAwMjZicGZfa2Z1bmNfc2V0X2ljbXBfc2VuZCk7XG5uZXQvY29yZS9maWx0ZXIuYy0xMjczMy1cdHJldHVybiByZXQgPzogcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX1NPQ0tfT1BTLCBcdTAwMjZicGZfa2Z1bmNfc2V0X3NvY2tfb3BzKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNCAxOToxNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDQ3NAoJCQkJCQkJb3V0cHV0OiAxMjcKCQkJCQkJCXRob3VnaHRzOiAyMjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBGdXp6aW5nIFBvdGVudGlhbCBvZiBgYnBmX2ljbXBfc2VuZGAqKgoKT2theSwgc28gdGhlIGBicGZfaWNtcF9zZW5kYCBmdW5jdGlvbiBpcyB0aGUgKm9ubHkqIHN5bWJvbCBmbGFnZ2VkIGFzIHRoZSBwcmltYXJ5IGZvY3VzIGhlcmUuIFRoYXQsIGluIGl0c2VsZiwgaXMgc2lnbmlmaWNhbnQuIFRoZSBjb25maWd1cmF0aW9uIHByZXJlcXVpc2l0ZXMgYXJlIGBDR1JPVVBfQlBGYCwgYEJQRl9TWVNDQUxMYCwgYElORVRgLCBhbmQgYElQVjZgIOKAkyB0aGUgdXN1YWwgc3VzcGVjdHMgZm9yIG5ldHdvcmstcmVsYXRlZCBCUEYgZnV6emluZy4KCkFoYSEgYGJwZl9pY21wX3NlbmRgIGlzIGEgQlBGIGtmdW5jLiBUaGF0IGNoYW5nZXMgdGhlIGdhbWUuIElmIGl0JiMzOTtzIGEga2Z1bmMsIGl0IG1lYW5zIFN5emthbGxlciAqbmVlZHMqIHRvIGtub3cgYWJvdXQgaXQuIFRoYW5rZnVsbHksIFN5emthbGxlciBpbnRlbGxpZ2VudGx5IGV4dHJhY3RzIGtmdW5jcyBmcm9tIEJURiBpbmZvcm1hdGlvbi4gU28sIGFzIGxvbmcgYXMgdGhpcyBmdW5jdGlvbiBpcyBwcm9wZXJseSBkZWZpbmVkIGluIHRoZSBrZXJuZWwgQlRGLCBTeXprYWxsZXIgd2lsbCBhdXRvbWF0aWNhbGx5IHBpY2sgaXQgdXAsIGVsaW1pbmF0aW5nIGEgbWFudWFsIGludGVncmF0aW9uIGVmZm9ydC4gVGhhdCYjMzk7cyBnb29kIG5ld3MuCgpHaXZlbiB0aGF0IGl0IGlzIGEga2Z1bmMsIHRoZSBwYXRjaCAqYWJzb2x1dGVseSogd2FycmFudHMgZnV6emluZy4gVGhlIGZhY3QgdGhhdCBpdCYjMzk7cyBhIG5ldyBmZWF0dXJlLCBzcGVjaWZpY2FsbHkgYSBuZXcgQlBGIGtmdW5jLCB0aGF0IGFsbG93cyB1c2Vyc3BhY2UgQlBGIHByb2dyYW1zIGF0dGFjaGVkIHRvIGNncm91cCBza2IgaG9va3MgdG8gc2VuZCBJQ01QIGNvbnRyb2wgbWVzc2FnZXPigKYgdGhhdCYjMzk7cyBhIHBlcmZlY3QgdGFyZ2V0LiBUaGlzIGlzIGEgKmRpcmVjdCogbmV3IGZ1bmN0aW9uYWwgZmVhdHVyZSBleHBvc2VkIHRvIHVzZXJzcGFjZSB2aWEgQlBGIHByb2dyYW1zLCB3aGljaCBpcyB0aGUgZGVmaW5pdGlvbiBvZiBhIHByaW1lIGZ1enppbmcgdGFyZ2V0LgoKQWxyaWdodCwgSSYjMzk7bSByZWFkeSB0byBmb3JtYWxpemUgbXkgYXNzZXNzbWVudDoKCmBgYApXb3J0aEZ1enppbmc6IHRydWUKRm9jdXNTeW1ib2xzOiBbJiMzNDticGZfaWNtcF9zZW5kJiMzNDtdCkVuYWJsZUNvbmZpZ3M6IFsmIzM0O0NHUk9VUF9CUEYmIzM0OywgJiMzNDtCUEZfU1lTQ0FMTCYjMzQ7LCAmIzM0O0lORVQmIzM0OywgJiMzNDtJUFY2JiMzNDtdClJlYXNvbmluZzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBCUEYga2Z1bmMgYGJwZl9pY21wX3NlbmRgIHdoaWNoIGFsbG93cyBCUEYgcHJvZ3JhbXMgYXR0YWNoZWQgdG8gY2dyb3VwIHNrYiBob29rcyB0byBzZW5kIElDTVAgY29udHJvbCBtZXNzYWdlcy4gVGhpcyBpcyBhIG5ldyBmdW5jdGlvbmFsIGZlYXR1cmUgdGhhdCBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIEJQRiBwcm9ncmFtcywgbWFraW5nIGl0IGEgcHJpbWUgdGFyZ2V0IGZvciBmdXp6aW5nLiYjMzQ7CmBgYAoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI0IDE5OjE0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtDR1JPVVBfQlBGJiMzNDssCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDssCiAgICAmIzM0O0lORVQmIzM0OywKICAgICYjMzQ7SVBWNiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2JwZl9pY21wX3NlbmQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBCUEYga2Z1bmMgYGJwZl9pY21wX3NlbmRgIHdoaWNoIGFsbG93cyBCUEYgcHJvZ3JhbXMgYXR0YWNoZWQgdG8gY2dyb3VwIHNrYiBob29rcyB0byBzZW5kIElDTVAgY29udHJvbCBtZXNzYWdlcy4gVGhpcyBpcyBhIG5ldyBmdW5jdGlvbmFsIGZlYXR1cmUgdGhhdCBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIEJQRiBwcm9ncmFtcywgbWFraW5nIGl0IGEgcHJpbWUgdGFyZ2V0IGZvciBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtDR1JPVVBfQlBGJiMzNDssCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDssCiAgICAmIzM0O0lORVQmIzM0OywKICAgICYjMzQ7SVBWNiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2JwZl9pY21wX3NlbmQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBCUEYga2Z1bmMgYGJwZl9pY21wX3NlbmRgIHdoaWNoIGFsbG93cyBCUEYgcHJvZ3JhbXMgYXR0YWNoZWQgdG8gY2dyb3VwIHNrYiBob29rcyB0byBzZW5kIElDTVAgY29udHJvbCBtZXNzYWdlcy4gVGhpcyBpcyBhIG5ldyBmdW5jdGlvbmFsIGZlYXR1cmUgdGhhdCBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIEJQRiBwcm9ncmFtcywgbWFraW5nIGl0IGEgcHJpbWUgdGFyZ2V0IGZvciBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDYtMjRUMTk6MTQ6MzYuMTIwODg1OTU3WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjMyMjM5MjA0MjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQ0dST1VQX0JQRlwiLFxuICAgIFwiQlBGX1NZU0NBTExcIixcbiAgICBcIklORVRcIixcbiAgICBcIklQVjZcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJicGZfaWNtcF9zZW5kXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBCUEYga2Z1bmMgYGJwZl9pY21wX3NlbmRgIHdoaWNoIGFsbG93cyBCUEYgcHJvZ3JhbXMgYXR0YWNoZWQgdG8gY2dyb3VwIHNrYiBob29rcyB0byBzZW5kIElDTVAgY29udHJvbCBtZXNzYWdlcy4gVGhpcyBpcyBhIG5ldyBmdW5jdGlvbmFsIGZlYXR1cmUgdGhhdCBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIEJQRiBwcm9ncmFtcywgbWFraW5nIGl0IGEgcHJpbWUgdGFyZ2V0IGZvciBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNFQxOToxNDozNi4xMjA4OTA2MTdaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM3ODgwNzc3MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDU0YTQ5MjlkM2QzNDJlZTVmNjlkNGY3NmFmNzI3ZjlkZWE5MWM5MTFcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFdlZCBKdW4gMjQgMTk6MTQ6MzUgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUvZmlsdGVyLmMgYi9uZXQvY29yZS9maWx0ZXIuY1xcbmluZGV4IDJlOTZiNGI4NDdjZTEyLi5mM2FhNDk0ZWQxMDUzMCAxMDA2NDRcXG4tLS0gYS9uZXQvY29yZS9maWx0ZXIuY1xcbisrKyBiL25ldC9jb3JlL2ZpbHRlci5jXFxuQEAgLTg0LDYgKzg0LDkgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3VuLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NuZXQveGRwX3NvY2tfZHJ2LmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NuZXQvaW5ldF9kc2NwLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9pY21wdjYuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY25ldC9pY21wLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NuZXQvaXA2X3JvdXRlLmhcXHUwMDNlXFxuIFxcbiAjaW5jbHVkZSBcXFwiZGV2LmhcXFwiXFxuIFxcbkBAIC0xMjU0Niw2ICsxMjU0OSw4NCBAQCBfX2JwZl9rZnVuYyBpbnQgYnBmX3hkcF9wdWxsX2RhdGEoc3RydWN0IHhkcF9tZCAqeCwgdTMyIGxlbilcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuKy8qKlxcbisgKiBicGZfaWNtcF9zZW5kIC0gU2VuZCBhbiBJQ01QIGNvbnRyb2wgbWVzc2FnZVxcbisgKiBAc2tiX2N0eDogUGFja2V0IHRoYXQgdHJpZ2dlcmVkIHRoZSBjb250cm9sIG1lc3NhZ2VcXG4rICogQHR5cGU6IElDTVAgdHlwZSAob25seSBJQ01QX0RFU1RfVU5SRUFDSC9JQ01QVjZfREVTVF9VTlJFQUNIIHN1cHBvcnRlZClcXG4rICogQGNvZGU6IElDTVAgY29kZSAoMC0xNSBleGNlcHQgSUNNUF9GUkFHX05FRURFRCBmb3IgSVB2NCwgMC02IGZvciBJUHY2KVxcbisgKlxcbisgKiBTZW5kcyBhbiBJQ01QIGNvbnRyb2wgbWVzc2FnZSBpbiByZXNwb25zZSB0byB0aGUgcGFja2V0LiBUaGUgb3JpZ2luYWwgcGFja2V0XFxuKyAqIGlzIGNsb25lZCBiZWZvcmUgc2VuZGluZyB0aGUgSUNNUCBtZXNzYWdlLCBzbyB0aGUgQlBGIHByb2dyYW0gY2FuIHN0aWxsIGxldFxcbisgKiB0aGUgcGFja2V0IHBhc3MgaWYgZGVzaXJlZC5cXG4rICpcXG4rICogQ3VycmVudGx5IG9ubHkgSUNNUF9ERVNUX1VOUkVBQ0ggKElQdjQpIGFuZCBJQ01QVjZfREVTVF9VTlJFQUNIIChJUHY2KSBhcmVcXG4rICogc3VwcG9ydGVkLlxcbisgKlxcbisgKiBSZXR1cm46IDAgb24gc3VjY2VzcyAoc2VuZCBhdHRlbXB0KSwgbmVnYXRpdmUgZXJyb3IgY29kZSBvbiBmYWlsdXJlOlxcbisgKiAgICAgICAgIC1FQlVTWTogUmVjdXJzaW9uIGRldGVjdGVkXFxuKyAqICAgICAgICAgLUVQUk9UT05PU1VQUE9SVDogTm9uLUlQIHByb3RvY29sXFxuKyAqICAgICAgICAgLUVPUE5PVFNVUFA6IFVuc3VwcG9ydGVkIElDTVAgdHlwZVxcbisgKiAgICAgICAgIC1FSU5WQUw6IEludmFsaWQgY29kZSBwYXJhbWV0ZXJcXG4rICogICAgICAgICAtRU5FVFVOUkVBQ0g6IFVudXNhYmxlIElQdjQgcm91dGUvZHN0IGF0dGFjaGVkIHRvIHRoZSBza2JcXG4rICogICAgICAgICAtRU5PTUVNOiBNZW1vcnkgYWxsb2NhdGlvbiBmYWlsZWRcXG4rICovXFxuK19fYnBmX2tmdW5jIGludCBicGZfaWNtcF9zZW5kKHN0cnVjdCBfX3NrX2J1ZmYgKnNrYl9jdHgsIGludCB0eXBlLCBpbnQgY29kZSlcXG4re1xcbitcXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gKHN0cnVjdCBza19idWZmICopc2tiX2N0eDtcXG4rXFx0c3RydWN0IHNrX2J1ZmYgKm5za2I7XFxuK1xcdHN0cnVjdCBzb2NrICpzaztcXG4rXFxuK1xcdHNrID0gc2tiX3RvX2Z1bGxfc2soc2tiKTtcXG4rXFx0aWYgKHNrIFxcdTAwMjZcXHUwMDI2IHNrLVxcdTAwM2Vza19rZXJuX3NvY2sgXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgIChzay1cXHUwMDNlc2tfcHJvdG9jb2wgPT0gSVBQUk9UT19JQ01QIHx8IHNrLVxcdTAwM2Vza19wcm90b2NvbCA9PSBJUFBST1RPX0lDTVBWNikpXFxuK1xcdFxcdHJldHVybiAtRUJVU1k7XFxuK1xcbitcXHRzd2l0Y2ggKHNrYi1cXHUwMDNlcHJvdG9jb2wpIHtcXG4rI2lmIElTX0VOQUJMRUQoQ09ORklHX0lORVQpXFxuK1xcdGNhc2UgaHRvbnMoRVRIX1BfSVApOiB7XFxuK1xcdFxcdGlmICh0eXBlICE9IElDTVBfREVTVF9VTlJFQUNIKVxcbitcXHRcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuK1xcdFxcdGlmIChjb2RlIFxcdTAwM2MgMCB8fCBjb2RlIFxcdTAwM2UgTlJfSUNNUF9VTlJFQUNIIHx8XFxuK1xcdFxcdCAgICBjb2RlID09IElDTVBfRlJBR19ORUVERUQpIC8qIG5lZWRzIGEgdmFsaWQgbmV4dC1ob3AgTVRVICovXFxuK1xcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXG4rXFx0XFx0LyogaWNtcF9zZW5kIHJlcXVpcmVzIGEgcnRhYmxlOyB0ZXN0LXJ1biBzeW50aGV0aWMgc2ticyBsYWNrIG9uZS4gKi9cXG4rXFx0XFx0aWYgKCFza2JfdmFsaWRfZHN0KHNrYikpXFxuK1xcdFxcdFxcdHJldHVybiAtRU5FVFVOUkVBQ0g7XFxuK1xcbitcXHRcXHRuc2tiID0gc2tiX2Nsb25lKHNrYiwgR0ZQX0FUT01JQyk7XFxuK1xcdFxcdGlmICghbnNrYilcXG4rXFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuK1xcbitcXHRcXHRtZW1zZXQoSVBDQihuc2tiKSwgMCwgc2l6ZW9mKCpJUENCKG5za2IpKSk7XFxuK1xcdFxcdGljbXBfc2VuZChuc2tiLCB0eXBlLCBjb2RlLCAwKTtcXG4rXFx0XFx0Y29uc3VtZV9za2IobnNrYik7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHR9XFxuKyNlbmRpZlxcbisjaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNilcXG4rXFx0Y2FzZSBodG9ucyhFVEhfUF9JUFY2KTpcXG4rXFx0XFx0aWYgKHR5cGUgIT0gSUNNUFY2X0RFU1RfVU5SRUFDSClcXG4rXFx0XFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbitcXHRcXHRpZiAoY29kZSBcXHUwMDNjIDAgfHwgY29kZSBcXHUwMDNlIElDTVBWNl9SRUpFQ1RfUk9VVEUpXFxuK1xcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXG4rXFx0XFx0bnNrYiA9IHNrYl9jbG9uZShza2IsIEdGUF9BVE9NSUMpO1xcbitcXHRcXHRpZiAoIW5za2IpXFxuK1xcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbitcXG4rXFx0XFx0bWVtc2V0KElQNkNCKG5za2IpLCAwLCBzaXplb2YoKklQNkNCKG5za2IpKSk7XFxuK1xcdFxcdGljbXB2Nl9zZW5kKG5za2IsIHR5cGUsIGNvZGUsIDApO1xcbitcXHRcXHRjb25zdW1lX3NrYihuc2tiKTtcXG4rXFx0XFx0YnJlYWs7XFxuKyNlbmRpZlxcbitcXHRkZWZhdWx0OlxcbitcXHRcXHRyZXR1cm4gLUVQUk9UT05PU1VQUE9SVDtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuIF9fYnBmX2tmdW5jX2VuZF9kZWZzKCk7XFxuIFxcbiBpbnQgYnBmX2R5bnB0cl9mcm9tX3NrYl9yZG9ubHkoc3RydWN0IF9fc2tfYnVmZiAqc2tiLCB1NjQgZmxhZ3MsXFxuQEAgLTEyNTg4LDYgKzEyNjY5LDEwIEBAIEJURl9LRlVOQ1NfU1RBUlQoYnBmX2tmdW5jX2NoZWNrX3NldF9zb2NrX29wcylcXG4gQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9zb2NrX29wc19lbmFibGVfdHhfdHN0YW1wKVxcbiBCVEZfS0ZVTkNTX0VORChicGZfa2Z1bmNfY2hlY2tfc2V0X3NvY2tfb3BzKVxcbiBcXG4rQlRGX0tGVU5DU19TVEFSVChicGZfa2Z1bmNfY2hlY2tfc2V0X2ljbXBfc2VuZClcXG4rQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9pY21wX3NlbmQpXFxuK0JURl9LRlVOQ1NfRU5EKGJwZl9rZnVuY19jaGVja19zZXRfaWNtcF9zZW5kKVxcbitcXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBidGZfa2Z1bmNfaWRfc2V0IGJwZl9rZnVuY19zZXRfc2tiID0ge1xcbiBcXHQub3duZXIgPSBUSElTX01PRFVMRSxcXG4gXFx0LnNldCA9IFxcdTAwMjZicGZfa2Z1bmNfY2hlY2tfc2V0X3NrYixcXG5AQCAtMTI2MTgsNiArMTI3MDMsMTEgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBidGZfa2Z1bmNfaWRfc2V0IGJwZl9rZnVuY19zZXRfc29ja19vcHMgPSB7XFxuIFxcdC5zZXQgPSBcXHUwMDI2YnBmX2tmdW5jX2NoZWNrX3NldF9zb2NrX29wcyxcXG4gfTtcXG4gXFxuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYnRmX2tmdW5jX2lkX3NldCBicGZfa2Z1bmNfc2V0X2ljbXBfc2VuZCA9IHtcXG4rXFx0Lm93bmVyID0gVEhJU19NT0RVTEUsXFxuK1xcdC5zZXQgPSBcXHUwMDI2YnBmX2tmdW5jX2NoZWNrX3NldF9pY21wX3NlbmQsXFxuK307XFxuK1xcbiBzdGF0aWMgaW50IF9faW5pdCBicGZfa2Z1bmNfaW5pdCh2b2lkKVxcbiB7XFxuIFxcdGludCByZXQ7XFxuQEAgLTEyNjM5LDYgKzEyNzI5LDcgQEAgc3RhdGljIGludCBfX2luaXQgYnBmX2tmdW5jX2luaXQodm9pZClcXG4gXFx0cmV0ID0gcmV0ID86IHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9DR1JPVVBfU09DS19BRERSLFxcbiBcXHRcXHRcXHRcXHRcXHQgICAgICAgXFx1MDAyNmJwZl9rZnVuY19zZXRfc29ja19hZGRyKTtcXG4gXFx0cmV0ID0gcmV0ID86IHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9TQ0hFRF9DTFMsIFxcdTAwMjZicGZfa2Z1bmNfc2V0X3RjcF9yZXFzayk7XFxuK1xcdHJldCA9IHJldCA/OiByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfQ0dST1VQX1NLQiwgXFx1MDAyNmJwZl9rZnVuY19zZXRfaWNtcF9zZW5kKTtcXG4gXFx0cmV0dXJuIHJldCA/OiByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfU09DS19PUFMsIFxcdTAwMjZicGZfa2Z1bmNfc2V0X3NvY2tfb3BzKTtcXG4gfVxcbiBsYXRlX2luaXRjYWxsKGJwZl9rZnVuY19pbml0KTtcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvaWNtcF9zZW5kX2tmdW5jLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9pY21wX3NlbmRfa2Z1bmMuY1xcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLmZmYWYwZmUxODgwYjBlXFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2ljbXBfc2VuZF9rZnVuYy5jXFxuQEAgLTAsMCArMSwyNjkgQEBcXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG4rI2luY2x1ZGUgXFx1MDAzY3Rlc3RfcHJvZ3MuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY25ldHdvcmtfaGVscGVycy5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjY2dyb3VwX2hlbHBlcnMuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2VycnF1ZXVlLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2Nwb2xsLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2N1bmlzdGQuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFxcImljbXBfc2VuZC5za2VsLmhcXFwiXFxuK1xcbisjZGVmaW5lIFRJTUVPVVRfTVMgMTAwMFxcbitcXG4rI2RlZmluZSBJQ01QX0RFU1RfVU5SRUFDSCAzXFxuKyNkZWZpbmUgSUNNUFY2X0RFU1RfVU5SRUFDSCAxXFxuK1xcbisjZGVmaW5lIElDTVBfSE9TVF9VTlJFQUNIIDFcXG4rI2RlZmluZSBJQ01QX0ZSQUdfTkVFREVEIDRcXG4rI2RlZmluZSBOUl9JQ01QX1VOUkVBQ0ggMTVcXG4rI2RlZmluZSBJQ01QVjZfUkVKRUNUX1JPVVRFIDZcXG4rXFxuKyNkZWZpbmUgS0ZVTkNfUkVUX1VOU0VUIC0xXFxuK1xcbitzdGF0aWMgaW50IGNvbm5lY3RfdG9fZmRfbm9uYmxvY2soaW50IHNlcnZlcl9mZClcXG4re1xcbitcXHRzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZSBhZGRyO1xcbitcXHRzb2NrbGVuX3QgbGVuID0gc2l6ZW9mKGFkZHIpO1xcbitcXHRpbnQgZmQsIGVyciwgb24gPSAxO1xcbitcXG4rXFx0aWYgKGdldHNvY2tuYW1lKHNlcnZlcl9mZCwgKHN0cnVjdCBzb2NrYWRkciAqKVxcdTAwMjZhZGRyLCBcXHUwMDI2bGVuKSlcXG4rXFx0XFx0cmV0dXJuIC0xO1xcbitcXG4rXFx0ZmQgPSBzb2NrZXQoYWRkci5zc19mYW1pbHksIFNPQ0tfU1RSRUFNIHwgU09DS19OT05CTE9DSywgMCk7XFxuK1xcdGlmIChmZCBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybiAtMTtcXG4rXFxuK1xcdGlmIChhZGRyLnNzX2ZhbWlseSA9PSBBRl9JTkVUNiBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAgc2V0c29ja29wdChmZCwgSVBQUk9UT19JUFY2LCBJUFY2X1JFQ1ZFUlIsIFxcdTAwMjZvbiwgc2l6ZW9mKG9uKSkgXFx1MDAzYyAwKSB7XFxuK1xcdFxcdGNsb3NlKGZkKTtcXG4rXFx0XFx0cmV0dXJuIC0xO1xcbitcXHR9XFxuK1xcbitcXHRlcnIgPSBjb25uZWN0KGZkLCAoc3RydWN0IHNvY2thZGRyICopXFx1MDAyNmFkZHIsIGxlbik7XFxuK1xcdGlmIChlcnIgXFx1MDAzYyAwIFxcdTAwMjZcXHUwMDI2IGVycm5vICE9IEVJTlBST0dSRVNTKSB7XFxuK1xcdFxcdGNsb3NlKGZkKTtcXG4rXFx0XFx0cmV0dXJuIC0xO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gZmQ7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIHJlYWRfaWNtcF9lcnJxdWV1ZShpbnQgc29ja2ZkLCBpbnQgZXhwZWN0ZWRfY29kZSwgaW50IGFmKVxcbit7XFxuK1xcdGludCBleHBlY3RlZF9lZV90eXBlID0gKGFmID09IEFGX0lORVQpID8gSUNNUF9ERVNUX1VOUkVBQ0ggOlxcbitcXHRcXHRcXHRcXHRcXHRcXHQgSUNNUFY2X0RFU1RfVU5SRUFDSDtcXG4rXFx0aW50IGV4cGVjdGVkX29yaWdpbiA9IChhZiA9PSBBRl9JTkVUKSA/IFNPX0VFX09SSUdJTl9JQ01QIDpcXG4rXFx0XFx0XFx0XFx0XFx0XFx0U09fRUVfT1JJR0lOX0lDTVA2O1xcbitcXHRpbnQgZXhwZWN0ZWRfbGV2ZWwgPSAoYWYgPT0gQUZfSU5FVCkgPyBJUFBST1RPX0lQIDogSVBQUk9UT19JUFY2O1xcbitcXHRpbnQgZXhwZWN0ZWRfdHlwZSA9IChhZiA9PSBBRl9JTkVUKSA/IElQX1JFQ1ZFUlIgOiBJUFY2X1JFQ1ZFUlI7XFxuK1xcdHN0cnVjdCBzb2NrX2V4dGVuZGVkX2VyciAqc29ja19lcnI7XFxuK1xcdGNoYXIgY3RybF9idWZbNTEyXTtcXG4rXFx0c3RydWN0IG1zZ2hkciBtc2cgPSB7XFxuK1xcdFxcdC5tc2dfY29udHJvbCA9IGN0cmxfYnVmLFxcbitcXHRcXHQubXNnX2NvbnRyb2xsZW4gPSBzaXplb2YoY3RybF9idWYpLFxcbitcXHR9O1xcbitcXHRzdHJ1Y3QgcG9sbGZkIHBmZCA9IHtcXG4rXFx0XFx0LmZkID0gc29ja2ZkLFxcbitcXHRcXHQuZXZlbnRzID0gUE9MTEVSUixcXG4rXFx0fTtcXG4rXFx0c3RydWN0IGNtc2doZHIgKmNtO1xcbitcXHRzc2l6ZV90IG47XFxuK1xcbitcXHRpZiAoIUFTU0VSVF9HRShwb2xsKFxcdTAwMjZwZmQsIDEsIFRJTUVPVVRfTVMpLCAxLCBcXFwicG9sbF9lcnJxdWV1ZVxcXCIpKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHRuID0gcmVjdm1zZyhzb2NrZmQsIFxcdTAwMjZtc2csIE1TR19FUlJRVUVVRSk7XFxuK1xcdGlmICghQVNTRVJUX0dFKG4sIDAsIFxcXCJyZWN2bXNnX2VycnF1ZXVlXFxcIikpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdGNtID0gQ01TR19GSVJTVEhEUihcXHUwMDI2bXNnKTtcXG4rXFx0aWYgKCFBU1NFUlRfTkVRKGNtLCBOVUxMLCBcXFwiY21fZmlyc3RoZHJfbnVsbFxcXCIpKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHRmb3IgKDsgY207IGNtID0gQ01TR19OWFRIRFIoXFx1MDAyNm1zZywgY20pKSB7XFxuK1xcdFxcdGlmIChjbS1cXHUwMDNlY21zZ19sZXZlbCAhPSBleHBlY3RlZF9sZXZlbCB8fFxcbitcXHRcXHQgICAgY20tXFx1MDAzZWNtc2dfdHlwZSAhPSBleHBlY3RlZF90eXBlKVxcbitcXHRcXHRcXHRjb250aW51ZTtcXG4rXFxuK1xcdFxcdHNvY2tfZXJyID0gKHN0cnVjdCBzb2NrX2V4dGVuZGVkX2VyciAqKUNNU0dfREFUQShjbSk7XFxuK1xcbitcXHRcXHRpZiAoIUFTU0VSVF9FUShzb2NrX2Vyci1cXHUwMDNlZWVfb3JpZ2luLCBleHBlY3RlZF9vcmlnaW4sXFxuK1xcdFxcdFxcdCAgICAgICBcXFwic29ja19lcnJfb3JpZ2luXFxcIikpXFxuK1xcdFxcdFxcdHJldHVybjtcXG4rXFx0XFx0aWYgKCFBU1NFUlRfRVEoc29ja19lcnItXFx1MDAzZWVlX3R5cGUsIGV4cGVjdGVkX2VlX3R5cGUsXFxuK1xcdFxcdFxcdCAgICAgICBcXFwic29ja19lcnJfdHlwZV9kZXN0X3VucmVhY2hcXFwiKSlcXG4rXFx0XFx0XFx0cmV0dXJuO1xcbitcXHRcXHRBU1NFUlRfRVEoc29ja19lcnItXFx1MDAzZWVlX2NvZGUsIGV4cGVjdGVkX2NvZGUsIFxcXCJzb2NrX2Vycl9jb2RlXFxcIik7XFxuK1xcdFxcdHJldHVybjtcXG4rXFx0fVxcbitcXG4rXFx0QVNTRVJUX0ZBSUwoXFxcIm5vIElQX1JFQ1ZFUlIvSVBWNl9SRUNWRVJSIGNvbnRyb2wgbWVzc2FnZSBmb3VuZFxcXCIpO1xcbit9XFxuK1xcbitzdGF0aWMgYm9vbCB2YWxpZF91bnJlYWNoX2NvZGUoaW50IGNvZGUsIGludCBhZilcXG4re1xcbitcXHRpZiAoY29kZSBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybiBmYWxzZTtcXG4rXFxuK1xcdGlmIChhZiA9PSBBRl9JTkVUKVxcbitcXHRcXHRyZXR1cm4gY29kZSBcXHUwMDNjPSBOUl9JQ01QX1VOUkVBQ0ggXFx1MDAyNlxcdTAwMjYgY29kZSAhPSBJQ01QX0ZSQUdfTkVFREVEO1xcbitcXG4rXFx0cmV0dXJuIGNvZGUgXFx1MDAzYz0gSUNNUFY2X1JFSkVDVF9ST1VURTtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgdHJpZ2dlcl9wcm9nX3JlYWRfaWNtcF9lcnJxdWV1ZShzdHJ1Y3QgaWNtcF9zZW5kICpza2VsLCBpbnQgY29kZSxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgIGludCBhZiwgY29uc3QgY2hhciAqaXApXFxuK3tcXG4rXFx0aW50IHNydl9mZCA9IC0xLCBjbGllbnRfZmQgPSAtMTtcXG4rXFx0aW50IHBvcnQ7XFxuK1xcbitcXHRzcnZfZmQgPSBzdGFydF9zZXJ2ZXIoYWYsIFNPQ0tfU1RSRUFNLCBpcCwgMCwgVElNRU9VVF9NUyk7XFxuK1xcdGlmICghQVNTRVJUX09LX0ZEKHNydl9mZCwgXFxcInN0YXJ0X3NlcnZlclxcXCIpKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHRwb3J0ID0gZ2V0X3NvY2tldF9sb2NhbF9wb3J0KHNydl9mZCk7XFxuK1xcdGlmICghQVNTRVJUX0dFKHBvcnQsIDAsIFxcXCJnZXRfc29ja2V0X2xvY2FsX3BvcnRcXFwiKSkge1xcbitcXHRcXHRjbG9zZShzcnZfZmQpO1xcbitcXHRcXHRyZXR1cm47XFxuK1xcdH1cXG4rXFxuK1xcdHNrZWwtXFx1MDAzZWJzcy1cXHUwMDNlc2VydmVyX3BvcnQgPSBudG9ocyhwb3J0KTtcXG4rXFx0c2tlbC1cXHUwMDNlYnNzLVxcdTAwM2V1bnJlYWNoX3R5cGUgPSAoYWYgPT0gQUZfSU5FVCkgPyBJQ01QX0RFU1RfVU5SRUFDSCA6XFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgICBJQ01QVjZfREVTVF9VTlJFQUNIO1xcbitcXHRza2VsLVxcdTAwM2Vic3MtXFx1MDAzZXVucmVhY2hfY29kZSA9IGNvZGU7XFxuK1xcdHNrZWwtXFx1MDAzZWRhdGEtXFx1MDAzZWtmdW5jX3JldCA9IEtGVU5DX1JFVF9VTlNFVDtcXG4rXFxuK1xcdGNsaWVudF9mZCA9IGNvbm5lY3RfdG9fZmRfbm9uYmxvY2soc3J2X2ZkKTtcXG4rXFx0aWYgKCFBU1NFUlRfT0tfRkQoY2xpZW50X2ZkLCBcXFwiY2xpZW50X2Nvbm5lY3Rfbm9uYmxvY2tcXFwiKSkge1xcbitcXHRcXHRjbG9zZShzcnZfZmQpO1xcbitcXHRcXHRyZXR1cm47XFxuK1xcdH1cXG4rXFxuK1xcdGlmICh2YWxpZF91bnJlYWNoX2NvZGUoY29kZSwgYWYpKVxcbitcXHRcXHRyZWFkX2ljbXBfZXJycXVldWUoY2xpZW50X2ZkLCBjb2RlLCBhZik7XFxuK1xcbitcXHRjbG9zZShjbGllbnRfZmQpO1xcbitcXHRjbG9zZShzcnZfZmQpO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBydW5faWNtcF90ZXN0KHN0cnVjdCBpY21wX3NlbmQgKnNrZWwsIGludCBhZiwgY29uc3QgY2hhciAqaXAsXFxuK1xcdFxcdFxcdCAgaW50IG1heF9jb2RlKVxcbit7XFxuK1xcdGZvciAoaW50IGNvZGUgPSAwOyBjb2RlIFxcdTAwM2M9IG1heF9jb2RlOyBjb2RlKyspIHtcXG4rXFx0XFx0aWYgKGFmID09IEFGX0lORVQgXFx1MDAyNlxcdTAwMjYgY29kZSA9PSBJQ01QX0ZSQUdfTkVFREVEKVxcbitcXHRcXHRcXHRjb250aW51ZTtcXG4rXFxuK1xcdFxcdHRyaWdnZXJfcHJvZ19yZWFkX2ljbXBfZXJycXVldWUoc2tlbCwgY29kZSwgYWYsIGlwKTtcXG4rXFx0XFx0QVNTRVJUX0VRKHNrZWwtXFx1MDAzZWRhdGEtXFx1MDAzZWtmdW5jX3JldCwgMCwgXFxcImtmdW5jX3JldFxcXCIpO1xcbitcXHR9XFxuK1xcbitcXHQvKiBUZXN0IGludmFsaWQgY29kZXMgKi9cXG4rXFx0dHJpZ2dlcl9wcm9nX3JlYWRfaWNtcF9lcnJxdWV1ZShza2VsLCAtMSwgYWYsIGlwKTtcXG4rXFx0QVNTRVJUX0VRKHNrZWwtXFx1MDAzZWRhdGEtXFx1MDAzZWtmdW5jX3JldCwgLUVJTlZBTCwgXFxcImtmdW5jX3JldFxcXCIpO1xcbitcXG4rXFx0dHJpZ2dlcl9wcm9nX3JlYWRfaWNtcF9lcnJxdWV1ZShza2VsLCBtYXhfY29kZSArIDEsIGFmLCBpcCk7XFxuK1xcdEFTU0VSVF9FUShza2VsLVxcdTAwM2VkYXRhLVxcdTAwM2VrZnVuY19yZXQsIC1FSU5WQUwsIFxcXCJrZnVuY19yZXRcXFwiKTtcXG4rXFxuK1xcdGlmIChhZiA9PSBBRl9JTkVUKSB7XFxuK1xcdFxcdHRyaWdnZXJfcHJvZ19yZWFkX2ljbXBfZXJycXVldWUoc2tlbCwgSUNNUF9GUkFHX05FRURFRCwgYWYsIGlwKTtcXG4rXFx0XFx0QVNTRVJUX0VRKHNrZWwtXFx1MDAzZWRhdGEtXFx1MDAzZWtmdW5jX3JldCwgLUVJTlZBTCwgXFxcImtmdW5jX3JldFxcXCIpO1xcbitcXHR9XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIHJ1bl9pY21wX25vX3JvdXRlX3Rlc3Qoc3RydWN0IGljbXBfc2VuZCAqc2tlbClcXG4re1xcbitcXHRzdHJ1Y3QgaXB2NF9wYWNrZXQgcGt0ID0gcGt0X3Y0O1xcbitcXHRMSUJCUEZfT1BUUyhicGZfdGVzdF9ydW5fb3B0cywgb3B0cyxcXG4rXFx0XFx0LmRhdGFfaW4gPSBcXHUwMDI2cGt0LFxcbitcXHRcXHQuZGF0YV9zaXplX2luID0gc2l6ZW9mKHBrdCksXFxuK1xcdCk7XFxuK1xcdGludCBlcnI7XFxuK1xcbitcXHRwa3QuaXBoLnZlcnNpb24gPSA0O1xcbitcXHRwa3QuaXBoLmRhZGRyID0gaW5ldF9hZGRyKFxcXCIxMjcuMC4wLjFcXFwiKTtcXG4rXFx0cGt0LnRjcC5kZXN0ID0gaHRvbnMoODApO1xcbitcXHRza2VsLVxcdTAwM2Vic3MtXFx1MDAzZXNlcnZlcl9wb3J0ID0gODA7XFxuK1xcdHNrZWwtXFx1MDAzZWJzcy1cXHUwMDNldW5yZWFjaF90eXBlID0gSUNNUF9ERVNUX1VOUkVBQ0g7XFxuK1xcdHNrZWwtXFx1MDAzZWJzcy1cXHUwMDNldW5yZWFjaF9jb2RlID0gSUNNUF9IT1NUX1VOUkVBQ0g7XFxuK1xcdHNrZWwtXFx1MDAzZWRhdGEtXFx1MDAzZWtmdW5jX3JldCA9IEtGVU5DX1JFVF9VTlNFVDtcXG4rXFxuK1xcdGVyciA9IGJwZl9wcm9nX3Rlc3RfcnVuX29wdHMoYnBmX3Byb2dyYW1fX2ZkKHNrZWwtXFx1MDAzZXByb2dzLmVncmVzcyksIFxcdTAwMjZvcHRzKTtcXG4rXFx0aWYgKCFBU1NFUlRfT0soZXJyLCBcXFwidGVzdF9ydW5cXFwiKSlcXG4rXFx0XFx0cmV0dXJuO1xcbitcXHRBU1NFUlRfRVEoc2tlbC1cXHUwMDNlZGF0YS1cXHUwMDNla2Z1bmNfcmV0LCAtRU5FVFVOUkVBQ0gsIFxcXCJrZnVuY19yZXRfbm9fcm91dGVcXFwiKTtcXG4rfVxcbitcXG4rdm9pZCB0ZXN0X2ljbXBfc2VuZF91bnJlYWNoX2Nncm91cCh2b2lkKVxcbit7XFxuK1xcdHN0cnVjdCBpY21wX3NlbmQgKnNrZWw7XFxuK1xcdGludCBjZ3JvdXBfZmQgPSAtMTtcXG4rXFxuK1xcdHNrZWwgPSBpY21wX3NlbmRfX29wZW5fYW5kX2xvYWQoKTtcXG4rXFx0aWYgKCFBU1NFUlRfT0tfUFRSKHNrZWwsIFxcXCJza2VsX29wZW5cXFwiKSlcXG4rXFx0XFx0Z290byBjbGVhbnVwO1xcbitcXG4rXFx0Y2dyb3VwX2ZkID0gdGVzdF9fam9pbl9jZ3JvdXAoXFxcIi9pY21wX3NlbmRfdW5yZWFjaF9jZ3JvdXBcXFwiKTtcXG4rXFx0aWYgKCFBU1NFUlRfT0tfRkQoY2dyb3VwX2ZkLCBcXFwiam9pbl9jZ3JvdXBcXFwiKSlcXG4rXFx0XFx0Z290byBjbGVhbnVwO1xcbitcXG4rXFx0c2tlbC1cXHUwMDNlbGlua3MuZWdyZXNzID1cXG4rXFx0XFx0YnBmX3Byb2dyYW1fX2F0dGFjaF9jZ3JvdXAoc2tlbC1cXHUwMDNlcHJvZ3MuZWdyZXNzLCBjZ3JvdXBfZmQpO1xcbitcXHRpZiAoIUFTU0VSVF9PS19QVFIoc2tlbC1cXHUwMDNlbGlua3MuZWdyZXNzLCBcXFwicHJvZ19hdHRhY2hfY2dyb3VwXFxcIikpXFxuK1xcdFxcdGdvdG8gY2xlYW51cDtcXG4rXFxuK1xcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFxcXCJpcHY0XFxcIikpXFxuK1xcdFxcdHJ1bl9pY21wX3Rlc3Qoc2tlbCwgQUZfSU5FVCwgXFxcIjEyNy4wLjAuMVxcXCIsIE5SX0lDTVBfVU5SRUFDSCk7XFxuK1xcbitcXHRpZiAodGVzdF9fc3RhcnRfc3VidGVzdChcXFwiaXB2NlxcXCIpKVxcbitcXHRcXHRydW5faWNtcF90ZXN0KHNrZWwsIEFGX0lORVQ2LCBcXFwiOjoxXFxcIiwgSUNNUFY2X1JFSkVDVF9ST1VURSk7XFxuK1xcbitcXHRpZiAodGVzdF9fc3RhcnRfc3VidGVzdChcXFwibm9fcm91dGVcXFwiKSlcXG4rXFx0XFx0cnVuX2ljbXBfbm9fcm91dGVfdGVzdChza2VsKTtcXG4rXFxuK2NsZWFudXA6XFxuK1xcdGljbXBfc2VuZF9fZGVzdHJveShza2VsKTtcXG4rXFx0aWYgKGNncm91cF9mZCBcXHUwMDNlPSAwKVxcbitcXHRcXHRjbG9zZShjZ3JvdXBfZmQpO1xcbit9XFxuK1xcbit2b2lkIHRlc3RfaWNtcF9zZW5kX3VucmVhY2hfcmVjdXJzaW9uKHZvaWQpXFxuK3tcXG4rXFx0c3RydWN0IGljbXBfc2VuZCAqc2tlbDtcXG4rXFx0aW50IGNncm91cF9mZCA9IC0xO1xcbitcXHRpbnQgZXJyO1xcbitcXG4rXFx0ZXJyID0gc2V0dXBfY2dyb3VwX2Vudmlyb25tZW50KCk7XFxuK1xcdGlmICghQVNTRVJUX09LKGVyciwgXFxcInNldHVwX2Nncm91cF9lbnZpcm9ubWVudFxcXCIpKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHRza2VsID0gaWNtcF9zZW5kX19vcGVuX2FuZF9sb2FkKCk7XFxuK1xcdGlmICghQVNTRVJUX09LX1BUUihza2VsLCBcXFwic2tlbF9vcGVuXFxcIikpXFxuK1xcdFxcdGdvdG8gY2xlYW51cDtcXG4rXFxuK1xcdGNncm91cF9mZCA9IGdldF9yb290X2Nncm91cCgpO1xcbitcXHRpZiAoIUFTU0VSVF9PS19GRChjZ3JvdXBfZmQsIFxcXCJnZXRfcm9vdF9jZ3JvdXBcXFwiKSlcXG4rXFx0XFx0Z290byBjbGVhbnVwO1xcbitcXG4rXFx0c2tlbC1cXHUwMDNlZGF0YS1cXHUwMDNldGFyZ2V0X3BpZCA9IGdldHBpZCgpO1xcbitcXHRza2VsLVxcdTAwM2VsaW5rcy5yZWN1cnNpb24gPVxcbitcXHRcXHRicGZfcHJvZ3JhbV9fYXR0YWNoX2Nncm91cChza2VsLVxcdTAwM2Vwcm9ncy5yZWN1cnNpb24sIGNncm91cF9mZCk7XFxuK1xcdGlmICghQVNTRVJUX09LX1BUUihza2VsLVxcdTAwM2VsaW5rcy5yZWN1cnNpb24sIFxcXCJwcm9nX2F0dGFjaF9jZ3JvdXBcXFwiKSlcXG4rXFx0XFx0Z290byBjbGVhbnVwO1xcbitcXG4rXFx0dHJpZ2dlcl9wcm9nX3JlYWRfaWNtcF9lcnJxdWV1ZShza2VsLCBJQ01QX0hPU1RfVU5SRUFDSCwgQUZfSU5FVCxcXG4rXFx0XFx0XFx0XFx0XFx0XFxcIjEyNy4wLjAuMVxcXCIpO1xcbitcXG4rXFx0LypcXG4rXFx0ICogQmVjYXVzZSB0aGVyZSdzIHJlY3Vyc2lvbiBpbnZvbHZlZCwgdGhlIGZpcnN0IGNhbGwgd2lsbCByZXR1cm4gYXRcXG4rXFx0ICogaW5kZXggMSBzaW5jZSBpdCB3aWxsIHJldHVybiB0aGUgc2Vjb25kLCBhbmQgdGhlIHNlY29uZCBjYWxsIHdpbGxcXG4rXFx0ICogcmV0dXJuIGF0IGluZGV4IDAgc2luY2UgaXQgd2lsbCByZXR1cm4gdGhlIGZpcnN0LlxcbitcXHQgKi9cXG4rXFx0QVNTRVJUX0VRKHNrZWwtXFx1MDAzZWJzcy1cXHUwMDNlcmVjX2NvdW50LCAyLCBcXFwicmVjX2NvdW50XFxcIik7XFxuK1xcdEFTU0VSVF9FUShza2VsLVxcdTAwM2VkYXRhLVxcdTAwM2VyZWNfa2Z1bmNfcmV0c1swXSwgLUVCVVNZLCBcXFwia2Z1bmNfcmV0c1swXVxcXCIpO1xcbitcXHRBU1NFUlRfRVEoc2tlbC1cXHUwMDNlZGF0YS1cXHUwMDNlcmVjX2tmdW5jX3JldHNbMV0sIDAsIFxcXCJrZnVuY19yZXRzWzFdXFxcIik7XFxuK1xcbitjbGVhbnVwOlxcbitcXHRpY21wX3NlbmRfX2Rlc3Ryb3koc2tlbCk7XFxuK1xcdGlmIChjZ3JvdXBfZmQgXFx1MDAzZT0gMClcXG4rXFx0XFx0Y2xvc2UoY2dyb3VwX2ZkKTtcXG4rXFx0Y2xlYW51cF9jZ3JvdXBfZW52aXJvbm1lbnQoKTtcXG4rfVxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvaWNtcF9zZW5kLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvaWNtcF9zZW5kLmNcXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi5jNjQyY2NkZjlmZDU0NFxcbi0tLSAvZGV2L251bGxcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvaWNtcF9zZW5kLmNcXG5AQCAtMCwwICsxLDEyMyBAQFxcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbisjaW5jbHVkZSBcXFwidm1saW51eC5oXFxcIlxcbisjaW5jbHVkZSBcXHUwMDNjYnBmL2JwZl9oZWxwZXJzLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NicGYvYnBmX2VuZGlhbi5oXFx1MDAzZVxcbitcXG4rLyogMTI3LjAuMC4xIGluIGhvc3QgYnl0ZSBvcmRlciAqL1xcbisjZGVmaW5lIFNFUlZFUl9JUCAweDdGMDAwMDAxXFxuKy8qIDo6MSBpbiBob3N0IGJ5dGUgb3JkZXIgKGxhc3QgMzItYml0IHdvcmQpICovXFxuKyNkZWZpbmUgU0VSVkVSX0lQNl9MTyAweDAwMDAwMDAxXFxuK1xcbitfX3UxNiBzZXJ2ZXJfcG9ydCA9IDA7XFxuK2ludCB1bnJlYWNoX3R5cGUgPSAwO1xcbitpbnQgdW5yZWFjaF9jb2RlID0gMDtcXG4raW50IGtmdW5jX3JldCA9IC0xO1xcbitpbnQgdGFyZ2V0X3BpZCA9IC0xO1xcbitcXG4rdW5zaWduZWQgaW50IHJlY19jb3VudCA9IDA7XFxuK2ludCByZWNfa2Z1bmNfcmV0c1tdID0geyAtMSwgLTEgfTtcXG4rXFxuK1NFQyhcXFwiY2dyb3VwX3NrYi9lZ3Jlc3NcXFwiKVxcbitpbnQgZWdyZXNzKHN0cnVjdCBfX3NrX2J1ZmYgKnNrYilcXG4re1xcbitcXHR2b2lkICpkYXRhID0gKHZvaWQgKikobG9uZylza2ItXFx1MDAzZWRhdGE7XFxuK1xcdHZvaWQgKmRhdGFfZW5kID0gKHZvaWQgKikobG9uZylza2ItXFx1MDAzZWRhdGFfZW5kO1xcbitcXHRzdHJ1Y3QgaXBoZHIgKmlwaDtcXG4rXFx0c3RydWN0IGlwdjZoZHIgKmlwNmg7XFxuK1xcdHN0cnVjdCB0Y3BoZHIgKnRjcGg7XFxuK1xcdF9fdTggdmVyc2lvbjtcXG4rXFxuK1xcdGlmIChkYXRhICsgMSBcXHUwMDNlIGRhdGFfZW5kKVxcbitcXHRcXHRyZXR1cm4gU0tfUEFTUztcXG4rXFxuK1xcdHZlcnNpb24gPSAoKigoX191OCAqKWRhdGEpKSBcXHUwMDNlXFx1MDAzZSA0O1xcbitcXG4rXFx0aWYgKHZlcnNpb24gPT0gNCkge1xcbitcXHRcXHRpcGggPSBkYXRhO1xcbitcXHRcXHRpZiAoKHZvaWQgKikoaXBoICsgMSkgXFx1MDAzZSBkYXRhX2VuZCB8fFxcbitcXHRcXHQgICAgaXBoLVxcdTAwM2Vwcm90b2NvbCAhPSBJUFBST1RPX1RDUCB8fFxcbitcXHRcXHQgICAgaXBoLVxcdTAwM2VkYWRkciAhPSBicGZfaHRvbmwoU0VSVkVSX0lQKSlcXG4rXFx0XFx0XFx0cmV0dXJuIFNLX1BBU1M7XFxuK1xcbitcXHRcXHR0Y3BoID0gKHZvaWQgKilpcGggKyBpcGgtXFx1MDAzZWlobCAqIDQ7XFxuK1xcdFxcdGlmICgodm9pZCAqKSh0Y3BoICsgMSkgXFx1MDAzZSBkYXRhX2VuZCB8fFxcbitcXHRcXHQgICAgdGNwaC1cXHUwMDNlZGVzdCAhPSBicGZfaHRvbnMoc2VydmVyX3BvcnQpKVxcbitcXHRcXHRcXHRyZXR1cm4gU0tfUEFTUztcXG4rXFxuK1xcdH0gZWxzZSBpZiAodmVyc2lvbiA9PSA2KSB7XFxuK1xcdFxcdGlwNmggPSBkYXRhO1xcbitcXHRcXHRpZiAoKHZvaWQgKikoaXA2aCArIDEpIFxcdTAwM2UgZGF0YV9lbmQgfHxcXG4rXFx0XFx0ICAgIGlwNmgtXFx1MDAzZW5leHRoZHIgIT0gSVBQUk9UT19UQ1ApXFxuK1xcdFxcdFxcdHJldHVybiBTS19QQVNTO1xcbitcXG4rXFx0XFx0aWYgKGlwNmgtXFx1MDAzZWRhZGRyLmluNl91LnU2X2FkZHIzMlswXSAhPSAwIHx8XFxuK1xcdFxcdCAgICBpcDZoLVxcdTAwM2VkYWRkci5pbjZfdS51Nl9hZGRyMzJbMV0gIT0gMCB8fFxcbitcXHRcXHQgICAgaXA2aC1cXHUwMDNlZGFkZHIuaW42X3UudTZfYWRkcjMyWzJdICE9IDAgfHxcXG4rXFx0XFx0ICAgIGlwNmgtXFx1MDAzZWRhZGRyLmluNl91LnU2X2FkZHIzMlszXSAhPSBicGZfaHRvbmwoU0VSVkVSX0lQNl9MTykpXFxuK1xcdFxcdFxcdHJldHVybiBTS19QQVNTO1xcbitcXG4rXFx0XFx0dGNwaCA9ICh2b2lkICopKGlwNmggKyAxKTtcXG4rXFx0XFx0aWYgKCh2b2lkICopKHRjcGggKyAxKSBcXHUwMDNlIGRhdGFfZW5kIHx8XFxuK1xcdFxcdCAgICB0Y3BoLVxcdTAwM2VkZXN0ICE9IGJwZl9odG9ucyhzZXJ2ZXJfcG9ydCkpXFxuK1xcdFxcdFxcdHJldHVybiBTS19QQVNTO1xcbitcXHR9IGVsc2Uge1xcbitcXHRcXHRyZXR1cm4gU0tfUEFTUztcXG4rXFx0fVxcbitcXG4rXFx0a2Z1bmNfcmV0ID0gYnBmX2ljbXBfc2VuZChza2IsIHVucmVhY2hfdHlwZSwgdW5yZWFjaF9jb2RlKTtcXG4rXFxuK1xcdHJldHVybiBTS19EUk9QO1xcbit9XFxuK1xcbitTRUMoXFxcImNncm91cF9za2IvZWdyZXNzXFxcIilcXG4raW50IHJlY3Vyc2lvbihzdHJ1Y3QgX19za19idWZmICpza2IpXFxuK3tcXG4rXFx0dm9pZCAqZGF0YSA9ICh2b2lkICopKGxvbmcpc2tiLVxcdTAwM2VkYXRhO1xcbitcXHR2b2lkICpkYXRhX2VuZCA9ICh2b2lkICopKGxvbmcpc2tiLVxcdTAwM2VkYXRhX2VuZDtcXG4rXFx0c3RydWN0IGljbXBoZHIgKmljbXBoO1xcbitcXHRzdHJ1Y3QgdGNwaGRyICp0Y3BoO1xcbitcXHRzdHJ1Y3QgaXBoZHIgKmlwaDtcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdGlmICgoYnBmX2dldF9jdXJyZW50X3BpZF90Z2lkKCkgXFx1MDAzZVxcdTAwM2UgMzIpICE9IHRhcmdldF9waWQpXFxuK1xcdFxcdHJldHVybiBTS19QQVNTO1xcbitcXG4rXFx0aXBoID0gZGF0YTtcXG4rXFx0aWYgKCh2b2lkICopKGlwaCArIDEpIFxcdTAwM2UgZGF0YV9lbmQgfHwgaXBoLVxcdTAwM2V2ZXJzaW9uICE9IDQpXFxuK1xcdFxcdHJldHVybiBTS19QQVNTO1xcbitcXG4rXFx0aWYgKGlwaC1cXHUwMDNlZGFkZHIgIT0gYnBmX2h0b25sKFNFUlZFUl9JUCkpXFxuK1xcdFxcdHJldHVybiBTS19QQVNTO1xcbitcXG4rXFx0aWYgKGlwaC1cXHUwMDNlcHJvdG9jb2wgPT0gSVBQUk9UT19UQ1ApIHtcXG4rXFx0XFx0dGNwaCA9ICh2b2lkICopaXBoICsgaXBoLVxcdTAwM2VpaGwgKiA0O1xcbitcXHRcXHRpZiAoKHZvaWQgKikodGNwaCArIDEpIFxcdTAwM2UgZGF0YV9lbmQgfHxcXG4rXFx0XFx0ICAgIHRjcGgtXFx1MDAzZWRlc3QgIT0gYnBmX2h0b25zKHNlcnZlcl9wb3J0KSlcXG4rXFx0XFx0XFx0cmV0dXJuIFNLX1BBU1M7XFxuK1xcdH0gZWxzZSBpZiAoaXBoLVxcdTAwM2Vwcm90b2NvbCA9PSBJUFBST1RPX0lDTVApIHtcXG4rXFx0XFx0aWNtcGggPSAodm9pZCAqKWlwaCArIGlwaC1cXHUwMDNlaWhsICogNDtcXG4rXFx0XFx0aWYgKCh2b2lkICopKGljbXBoICsgMSkgXFx1MDAzZSBkYXRhX2VuZCB8fFxcbitcXHRcXHQgICAgaWNtcGgtXFx1MDAzZXR5cGUgIT0gdW5yZWFjaF90eXBlIHx8IGljbXBoLVxcdTAwM2Vjb2RlICE9IHVucmVhY2hfY29kZSlcXG4rXFx0XFx0XFx0cmV0dXJuIFNLX1BBU1M7XFxuK1xcdH0gZWxzZSB7XFxuK1xcdFxcdHJldHVybiBTS19QQVNTO1xcbitcXHR9XFxuK1xcbitcXHQvKlxcbitcXHQgKiBUaGlzIGNhbGwgd2lsbCBwcm92b2tlIGEgcmVjdXJzaW9uOiB0aGUgSUNNUCBwYWNrZXQgZ2VuZXJhdGVkIGJ5IHRoZVxcbitcXHQgKiBrZnVuYyB3aWxsIHJlLXRyaWdnZXIgdGhpcyBwcm9ncmFtIHNpbmNlIHdlIGFyZSBpbiB0aGUgcm9vdCBjZ3JvdXAgaW5cXG4rXFx0ICogd2hpY2ggdGhlIGtlcm5lbCBJQ01QIHNvY2tldCBiZWxvbmdzLiBIb3dldmVyIHdoZW4gcmUtZW50ZXJpbmcgdGhlXFxuK1xcdCAqIGtmdW5jLCBpdCBzaG91bGQgcmV0dXJuIEVCVVNZLlxcbitcXHQgKi9cXG4rXFx0cmV0ID0gYnBmX2ljbXBfc2VuZChza2IsIHVucmVhY2hfdHlwZSwgdW5yZWFjaF9jb2RlKTtcXG4rXFx0cmVjX2tmdW5jX3JldHNbcmVjX2NvdW50IFxcdTAwMjYgMV0gPSByZXQ7XFxuK1xcdF9fc3luY19mZXRjaF9hbmRfYWRkKFxcdTAwMjZyZWNfY291bnQsIDEpO1xcbitcXG4rXFx0LyogTGV0IHRoZSBmaXJzdCBJQ01QIGVycm9yIG1lc3NhZ2UgcGFzcyAqL1xcbitcXHRpZiAoaXBoLVxcdTAwM2Vwcm90b2NvbCA9PSBJUFBST1RPX0lDTVApXFxuK1xcdFxcdHJldHVybiBTS19QQVNTO1xcbitcXG4rXFx0cmV0dXJuIFNLX0RST1A7XFxuK31cXG4rXFxuK2NoYXIgTElDRU5TRVtdIFNFQyhcXFwibGljZW5zZVxcXCIpID0gXFxcIkR1YWwgQlNEL0dQTFxcXCI7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI0VDE5OjE0OjM2LjUwMDQxNzM3WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyMjg0NDM4MTYyNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJDR1JPVVBfQlBGXCIsXG4gICAgXCJCUEZfU1lTQ0FMTFwiLFxuICAgIFwiSU5FVFwiLFxuICAgIFwiSVBWNlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJwZl9pY21wX3NlbmRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IEJQRiBrZnVuYyBgYnBmX2ljbXBfc2VuZGAgd2hpY2ggYWxsb3dzIEJQRiBwcm9ncmFtcyBhdHRhY2hlZCB0byBjZ3JvdXAgc2tiIGhvb2tzIHRvIHNlbmQgSUNNUCBjb250cm9sIG1lc3NhZ2VzLiBUaGlzIGlzIGEgbmV3IGZ1bmN0aW9uYWwgZmVhdHVyZSB0aGF0IGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgQlBGIHByb2dyYW1zLCBtYWtpbmcgaXQgYSBwcmltZSB0YXJnZXQgZm9yIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXRcbiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSxcbiAgIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNTRhNDkyOWQzZDM0MmVlNWY2OWQ0Zjc2YWY3MjdmOWRlYTkxYzkxMVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgSnVuIDI0IDE5OjE0OjM1IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUvZmlsdGVyLmMgYi9uZXQvY29yZS9maWx0ZXIuY1xuaW5kZXggMmU5NmI0Yjg0N2NlMTIuLmYzYWE0OTRlZDEwNTMwIDEwMDY0NFxuLS0tIGEvbmV0L2NvcmUvZmlsdGVyLmNcbisrKyBiL25ldC9jb3JlL2ZpbHRlci5jXG5AQCAtODQsNiArODQsOSBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3VuLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NuZXQveGRwX3NvY2tfZHJ2LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NuZXQvaW5ldF9kc2NwLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9pY21wdjYuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY25ldC9pY21wLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NuZXQvaXA2X3JvdXRlLmhcdTAwM2VcbiBcbiAjaW5jbHVkZSBcImRldi5oXCJcbiBcbkBAIC0xMjU0Niw2ICsxMjU0OSw4NCBAQCBfX2JwZl9rZnVuYyBpbnQgYnBmX3hkcF9wdWxsX2RhdGEoc3RydWN0IHhkcF9tZCAqeCwgdTMyIGxlbilcbiBcdHJldHVybiAwO1xuIH1cbiBcbisvKipcbisgKiBicGZfaWNtcF9zZW5kIC0gU2VuZCBhbiBJQ01QIGNvbnRyb2wgbWVzc2FnZVxuKyAqIEBza2JfY3R4OiBQYWNrZXQgdGhhdCB0cmlnZ2VyZWQgdGhlIGNvbnRyb2wgbWVzc2FnZVxuKyAqIEB0eXBlOiBJQ01QIHR5cGUgKG9ubHkgSUNNUF9ERVNUX1VOUkVBQ0gvSUNNUFY2X0RFU1RfVU5SRUFDSCBzdXBwb3J0ZWQpXG4rICogQGNvZGU6IElDTVAgY29kZSAoMC0xNSBleGNlcHQgSUNNUF9GUkFHX05FRURFRCBmb3IgSVB2NCwgMC02IGZvciBJUHY2KVxuKyAqXG4rICogU2VuZHMgYW4gSUNNUCBjb250cm9sIG1lc3NhZ2UgaW4gcmVzcG9uc2UgdG8gdGhlIHBhY2tldC4gVGhlIG9yaWdpbmFsIHBhY2tldFxuKyAqIGlzIGNsb25lZCBiZWZvcmUgc2VuZGluZyB0aGUgSUNNUCBtZXNzYWdlLCBzbyB0aGUgQlBGIHByb2dyYW0gY2FuIHN0aWxsIGxldFxuKyAqIHRoZSBwYWNrZXQgcGFzcyBpZiBkZXNpcmVkLlxuKyAqXG4rICogQ3VycmVudGx5IG9ubHkgSUNNUF9ERVNUX1VOUkVBQ0ggKElQdjQpIGFuZCBJQ01QVjZfREVTVF9VTlJFQUNIIChJUHY2KSBhcmVcbisgKiBzdXBwb3J0ZWQuXG4rICpcbisgKiBSZXR1cm46IDAgb24gc3VjY2VzcyAoc2VuZCBhdHRlbXB0KSwgbmVnYXRpdmUgZXJyb3IgY29kZSBvbiBmYWlsdXJlOlxuKyAqICAgICAgICAgLUVCVVNZOiBSZWN1cnNpb24gZGV0ZWN0ZWRcbisgKiAgICAgICAgIC1FUFJPVE9OT1NVUFBPUlQ6IE5vbi1JUCBwcm90b2NvbFxuKyAqICAgICAgICAgLUVPUE5PVFNVUFA6IFVuc3VwcG9ydGVkIElDTVAgdHlwZVxuKyAqICAgICAgICAgLUVJTlZBTDogSW52YWxpZCBjb2RlIHBhcmFtZXRlclxuKyAqICAgICAgICAgLUVORVRVTlJFQUNIOiBVbnVzYWJsZSBJUHY0IHJvdXRlL2RzdCBhdHRhY2hlZCB0byB0aGUgc2tiXG4rICogICAgICAgICAtRU5PTUVNOiBNZW1vcnkgYWxsb2NhdGlvbiBmYWlsZWRcbisgKi9cbitfX2JwZl9rZnVuYyBpbnQgYnBmX2ljbXBfc2VuZChzdHJ1Y3QgX19za19idWZmICpza2JfY3R4LCBpbnQgdHlwZSwgaW50IGNvZGUpXG4re1xuK1x0c3RydWN0IHNrX2J1ZmYgKnNrYiA9IChzdHJ1Y3Qgc2tfYnVmZiAqKXNrYl9jdHg7XG4rXHRzdHJ1Y3Qgc2tfYnVmZiAqbnNrYjtcbitcdHN0cnVjdCBzb2NrICpzaztcbitcbitcdHNrID0gc2tiX3RvX2Z1bGxfc2soc2tiKTtcbitcdGlmIChzayBcdTAwMjZcdTAwMjYgc2stXHUwMDNlc2tfa2Vybl9zb2NrIFx1MDAyNlx1MDAyNlxuK1x0ICAgIChzay1cdTAwM2Vza19wcm90b2NvbCA9PSBJUFBST1RPX0lDTVAgfHwgc2stXHUwMDNlc2tfcHJvdG9jb2wgPT0gSVBQUk9UT19JQ01QVjYpKVxuK1x0XHRyZXR1cm4gLUVCVVNZO1xuK1xuK1x0c3dpdGNoIChza2ItXHUwMDNlcHJvdG9jb2wpIHtcbisjaWYgSVNfRU5BQkxFRChDT05GSUdfSU5FVClcbitcdGNhc2UgaHRvbnMoRVRIX1BfSVApOiB7XG4rXHRcdGlmICh0eXBlICE9IElDTVBfREVTVF9VTlJFQUNIKVxuK1x0XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbitcdFx0aWYgKGNvZGUgXHUwMDNjIDAgfHwgY29kZSBcdTAwM2UgTlJfSUNNUF9VTlJFQUNIIHx8XG4rXHRcdCAgICBjb2RlID09IElDTVBfRlJBR19ORUVERUQpIC8qIG5lZWRzIGEgdmFsaWQgbmV4dC1ob3AgTVRVICovXG4rXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXG4rXHRcdC8qIGljbXBfc2VuZCByZXF1aXJlcyBhIHJ0YWJsZTsgdGVzdC1ydW4gc3ludGhldGljIHNrYnMgbGFjayBvbmUuICovXG4rXHRcdGlmICghc2tiX3ZhbGlkX2RzdChza2IpKVxuK1x0XHRcdHJldHVybiAtRU5FVFVOUkVBQ0g7XG4rXG4rXHRcdG5za2IgPSBza2JfY2xvbmUoc2tiLCBHRlBfQVRPTUlDKTtcbitcdFx0aWYgKCFuc2tiKVxuK1x0XHRcdHJldHVybiAtRU5PTUVNO1xuK1xuK1x0XHRtZW1zZXQoSVBDQihuc2tiKSwgMCwgc2l6ZW9mKCpJUENCKG5za2IpKSk7XG4rXHRcdGljbXBfc2VuZChuc2tiLCB0eXBlLCBjb2RlLCAwKTtcbitcdFx0Y29uc3VtZV9za2IobnNrYik7XG4rXHRcdGJyZWFrO1xuK1x0fVxuKyNlbmRpZlxuKyNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2KVxuK1x0Y2FzZSBodG9ucyhFVEhfUF9JUFY2KTpcbitcdFx0aWYgKHR5cGUgIT0gSUNNUFY2X0RFU1RfVU5SRUFDSClcbitcdFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4rXHRcdGlmIChjb2RlIFx1MDAzYyAwIHx8IGNvZGUgXHUwMDNlIElDTVBWNl9SRUpFQ1RfUk9VVEUpXG4rXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXG4rXHRcdG5za2IgPSBza2JfY2xvbmUoc2tiLCBHRlBfQVRPTUlDKTtcbitcdFx0aWYgKCFuc2tiKVxuK1x0XHRcdHJldHVybiAtRU5PTUVNO1xuK1xuK1x0XHRtZW1zZXQoSVA2Q0IobnNrYiksIDAsIHNpemVvZigqSVA2Q0IobnNrYikpKTtcbitcdFx0aWNtcHY2X3NlbmQobnNrYiwgdHlwZSwgY29kZSwgMCk7XG4rXHRcdGNvbnN1bWVfc2tiKG5za2IpO1xuK1x0XHRicmVhaztcbisjZW5kaWZcbitcdGRlZmF1bHQ6XG4rXHRcdHJldHVybiAtRVBST1RPTk9TVVBQT1JUO1xuK1x0fVxuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuIF9fYnBmX2tmdW5jX2VuZF9kZWZzKCk7XG4gXG4gaW50IGJwZl9keW5wdHJfZnJvbV9za2JfcmRvbmx5KHN0cnVjdCBfX3NrX2J1ZmYgKnNrYiwgdTY0IGZsYWdzLFxuQEAgLTEyNTg4LDYgKzEyNjY5LDEwIEBAIEJURl9LRlVOQ1NfU1RBUlQoYnBmX2tmdW5jX2NoZWNrX3NldF9zb2NrX29wcylcbiBCVEZfSURfRkxBR1MoZnVuYywgYnBmX3NvY2tfb3BzX2VuYWJsZV90eF90c3RhbXApXG4gQlRGX0tGVU5DU19FTkQoYnBmX2tmdW5jX2NoZWNrX3NldF9zb2NrX29wcylcbiBcbitCVEZfS0ZVTkNTX1NUQVJUKGJwZl9rZnVuY19jaGVja19zZXRfaWNtcF9zZW5kKVxuK0JURl9JRF9GTEFHUyhmdW5jLCBicGZfaWNtcF9zZW5kKVxuK0JURl9LRlVOQ1NfRU5EKGJwZl9rZnVuY19jaGVja19zZXRfaWNtcF9zZW5kKVxuK1xuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYnRmX2tmdW5jX2lkX3NldCBicGZfa2Z1bmNfc2V0X3NrYiA9IHtcbiBcdC5vd25lciA9IFRISVNfTU9EVUxFLFxuIFx0LnNldCA9IFx1MDAyNmJwZl9rZnVuY19jaGVja19zZXRfc2tiLFxuQEAgLTEyNjE4LDYgKzEyNzAzLDExIEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYnRmX2tmdW5jX2lkX3NldCBicGZfa2Z1bmNfc2V0X3NvY2tfb3BzID0ge1xuIFx0LnNldCA9IFx1MDAyNmJwZl9rZnVuY19jaGVja19zZXRfc29ja19vcHMsXG4gfTtcbiBcbitzdGF0aWMgY29uc3Qgc3RydWN0IGJ0Zl9rZnVuY19pZF9zZXQgYnBmX2tmdW5jX3NldF9pY21wX3NlbmQgPSB7XG4rXHQub3duZXIgPSBUSElTX01PRFVMRSxcbitcdC5zZXQgPSBcdTAwMjZicGZfa2Z1bmNfY2hlY2tfc2V0X2ljbXBfc2VuZCxcbit9O1xuK1xuIHN0YXRpYyBpbnQgX19pbml0IGJwZl9rZnVuY19pbml0KHZvaWQpXG4ge1xuIFx0aW50IHJldDtcbkBAIC0xMjYzOSw2ICsxMjcyOSw3IEBAIHN0YXRpYyBpbnQgX19pbml0IGJwZl9rZnVuY19pbml0KHZvaWQpXG4gXHRyZXQgPSByZXQgPzogcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX0NHUk9VUF9TT0NLX0FERFIsXG4gXHRcdFx0XHRcdCAgICAgICBcdTAwMjZicGZfa2Z1bmNfc2V0X3NvY2tfYWRkcik7XG4gXHRyZXQgPSByZXQgPzogcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX1NDSEVEX0NMUywgXHUwMDI2YnBmX2tmdW5jX3NldF90Y3BfcmVxc2spO1xuK1x0cmV0ID0gcmV0ID86IHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9DR1JPVVBfU0tCLCBcdTAwMjZicGZfa2Z1bmNfc2V0X2ljbXBfc2VuZCk7XG4gXHRyZXR1cm4gcmV0ID86IHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9TT0NLX09QUywgXHUwMDI2YnBmX2tmdW5jX3NldF9zb2NrX29wcyk7XG4gfVxuIGxhdGVfaW5pdGNhbGwoYnBmX2tmdW5jX2luaXQpO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2ljbXBfc2VuZF9rZnVuYy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvaWNtcF9zZW5kX2tmdW5jLmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uZmZhZjBmZTE4ODBiMGVcbi0tLSAvZGV2L251bGxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2ljbXBfc2VuZF9rZnVuYy5jXG5AQCAtMCwwICsxLDI2OSBAQFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4rI2luY2x1ZGUgXHUwMDNjdGVzdF9wcm9ncy5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbmV0d29ya19oZWxwZXJzLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NjZ3JvdXBfaGVscGVycy5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvZXJycXVldWUuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY3BvbGwuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY3VuaXN0ZC5oXHUwMDNlXG4rI2luY2x1ZGUgXCJpY21wX3NlbmQuc2tlbC5oXCJcbitcbisjZGVmaW5lIFRJTUVPVVRfTVMgMTAwMFxuK1xuKyNkZWZpbmUgSUNNUF9ERVNUX1VOUkVBQ0ggM1xuKyNkZWZpbmUgSUNNUFY2X0RFU1RfVU5SRUFDSCAxXG4rXG4rI2RlZmluZSBJQ01QX0hPU1RfVU5SRUFDSCAxXG4rI2RlZmluZSBJQ01QX0ZSQUdfTkVFREVEIDRcbisjZGVmaW5lIE5SX0lDTVBfVU5SRUFDSCAxNVxuKyNkZWZpbmUgSUNNUFY2X1JFSkVDVF9ST1VURSA2XG4rXG4rI2RlZmluZSBLRlVOQ19SRVRfVU5TRVQgLTFcbitcbitzdGF0aWMgaW50IGNvbm5lY3RfdG9fZmRfbm9uYmxvY2soaW50IHNlcnZlcl9mZClcbit7XG4rXHRzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZSBhZGRyO1xuK1x0c29ja2xlbl90IGxlbiA9IHNpemVvZihhZGRyKTtcbitcdGludCBmZCwgZXJyLCBvbiA9IDE7XG4rXG4rXHRpZiAoZ2V0c29ja25hbWUoc2VydmVyX2ZkLCAoc3RydWN0IHNvY2thZGRyICopXHUwMDI2YWRkciwgXHUwMDI2bGVuKSlcbitcdFx0cmV0dXJuIC0xO1xuK1xuK1x0ZmQgPSBzb2NrZXQoYWRkci5zc19mYW1pbHksIFNPQ0tfU1RSRUFNIHwgU09DS19OT05CTE9DSywgMCk7XG4rXHRpZiAoZmQgXHUwMDNjIDApXG4rXHRcdHJldHVybiAtMTtcbitcbitcdGlmIChhZGRyLnNzX2ZhbWlseSA9PSBBRl9JTkVUNiBcdTAwMjZcdTAwMjZcbitcdCAgICBzZXRzb2Nrb3B0KGZkLCBJUFBST1RPX0lQVjYsIElQVjZfUkVDVkVSUiwgXHUwMDI2b24sIHNpemVvZihvbikpIFx1MDAzYyAwKSB7XG4rXHRcdGNsb3NlKGZkKTtcbitcdFx0cmV0dXJuIC0xO1xuK1x0fVxuK1xuK1x0ZXJyID0gY29ubmVjdChmZCwgKHN0cnVjdCBzb2NrYWRkciAqKVx1MDAyNmFkZHIsIGxlbik7XG4rXHRpZiAoZXJyIFx1MDAzYyAwIFx1MDAyNlx1MDAyNiBlcnJubyAhPSBFSU5QUk9HUkVTUykge1xuK1x0XHRjbG9zZShmZCk7XG4rXHRcdHJldHVybiAtMTtcbitcdH1cbitcbitcdHJldHVybiBmZDtcbit9XG4rXG4rc3RhdGljIHZvaWQgcmVhZF9pY21wX2VycnF1ZXVlKGludCBzb2NrZmQsIGludCBleHBlY3RlZF9jb2RlLCBpbnQgYWYpXG4re1xuK1x0aW50IGV4cGVjdGVkX2VlX3R5cGUgPSAoYWYgPT0gQUZfSU5FVCkgPyBJQ01QX0RFU1RfVU5SRUFDSCA6XG4rXHRcdFx0XHRcdFx0IElDTVBWNl9ERVNUX1VOUkVBQ0g7XG4rXHRpbnQgZXhwZWN0ZWRfb3JpZ2luID0gKGFmID09IEFGX0lORVQpID8gU09fRUVfT1JJR0lOX0lDTVAgOlxuK1x0XHRcdFx0XHRcdFNPX0VFX09SSUdJTl9JQ01QNjtcbitcdGludCBleHBlY3RlZF9sZXZlbCA9IChhZiA9PSBBRl9JTkVUKSA/IElQUFJPVE9fSVAgOiBJUFBST1RPX0lQVjY7XG4rXHRpbnQgZXhwZWN0ZWRfdHlwZSA9IChhZiA9PSBBRl9JTkVUKSA/IElQX1JFQ1ZFUlIgOiBJUFY2X1JFQ1ZFUlI7XG4rXHRzdHJ1Y3Qgc29ja19leHRlbmRlZF9lcnIgKnNvY2tfZXJyO1xuK1x0Y2hhciBjdHJsX2J1Zls1MTJdO1xuK1x0c3RydWN0IG1zZ2hkciBtc2cgPSB7XG4rXHRcdC5tc2dfY29udHJvbCA9IGN0cmxfYnVmLFxuK1x0XHQubXNnX2NvbnRyb2xsZW4gPSBzaXplb2YoY3RybF9idWYpLFxuK1x0fTtcbitcdHN0cnVjdCBwb2xsZmQgcGZkID0ge1xuK1x0XHQuZmQgPSBzb2NrZmQsXG4rXHRcdC5ldmVudHMgPSBQT0xMRVJSLFxuK1x0fTtcbitcdHN0cnVjdCBjbXNnaGRyICpjbTtcbitcdHNzaXplX3QgbjtcbitcbitcdGlmICghQVNTRVJUX0dFKHBvbGwoXHUwMDI2cGZkLCAxLCBUSU1FT1VUX01TKSwgMSwgXCJwb2xsX2VycnF1ZXVlXCIpKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRuID0gcmVjdm1zZyhzb2NrZmQsIFx1MDAyNm1zZywgTVNHX0VSUlFVRVVFKTtcbitcdGlmICghQVNTRVJUX0dFKG4sIDAsIFwicmVjdm1zZ19lcnJxdWV1ZVwiKSlcbitcdFx0cmV0dXJuO1xuK1xuK1x0Y20gPSBDTVNHX0ZJUlNUSERSKFx1MDAyNm1zZyk7XG4rXHRpZiAoIUFTU0VSVF9ORVEoY20sIE5VTEwsIFwiY21fZmlyc3RoZHJfbnVsbFwiKSlcbitcdFx0cmV0dXJuO1xuK1xuK1x0Zm9yICg7IGNtOyBjbSA9IENNU0dfTlhUSERSKFx1MDAyNm1zZywgY20pKSB7XG4rXHRcdGlmIChjbS1cdTAwM2VjbXNnX2xldmVsICE9IGV4cGVjdGVkX2xldmVsIHx8XG4rXHRcdCAgICBjbS1cdTAwM2VjbXNnX3R5cGUgIT0gZXhwZWN0ZWRfdHlwZSlcbitcdFx0XHRjb250aW51ZTtcbitcbitcdFx0c29ja19lcnIgPSAoc3RydWN0IHNvY2tfZXh0ZW5kZWRfZXJyICopQ01TR19EQVRBKGNtKTtcbitcbitcdFx0aWYgKCFBU1NFUlRfRVEoc29ja19lcnItXHUwMDNlZWVfb3JpZ2luLCBleHBlY3RlZF9vcmlnaW4sXG4rXHRcdFx0ICAgICAgIFwic29ja19lcnJfb3JpZ2luXCIpKVxuK1x0XHRcdHJldHVybjtcbitcdFx0aWYgKCFBU1NFUlRfRVEoc29ja19lcnItXHUwMDNlZWVfdHlwZSwgZXhwZWN0ZWRfZWVfdHlwZSxcbitcdFx0XHQgICAgICAgXCJzb2NrX2Vycl90eXBlX2Rlc3RfdW5yZWFjaFwiKSlcbitcdFx0XHRyZXR1cm47XG4rXHRcdEFTU0VSVF9FUShzb2NrX2Vyci1cdTAwM2VlZV9jb2RlLCBleHBlY3RlZF9jb2RlLCBcInNvY2tfZXJyX2NvZGVcIik7XG4rXHRcdHJldHVybjtcbitcdH1cbitcbitcdEFTU0VSVF9GQUlMKFwibm8gSVBfUkVDVkVSUi9JUFY2X1JFQ1ZFUlIgY29udHJvbCBtZXNzYWdlIGZvdW5kXCIpO1xuK31cbitcbitzdGF0aWMgYm9vbCB2YWxpZF91bnJlYWNoX2NvZGUoaW50IGNvZGUsIGludCBhZilcbit7XG4rXHRpZiAoY29kZSBcdTAwM2MgMClcbitcdFx0cmV0dXJuIGZhbHNlO1xuK1xuK1x0aWYgKGFmID09IEFGX0lORVQpXG4rXHRcdHJldHVybiBjb2RlIFx1MDAzYz0gTlJfSUNNUF9VTlJFQUNIIFx1MDAyNlx1MDAyNiBjb2RlICE9IElDTVBfRlJBR19ORUVERUQ7XG4rXG4rXHRyZXR1cm4gY29kZSBcdTAwM2M9IElDTVBWNl9SRUpFQ1RfUk9VVEU7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIHRyaWdnZXJfcHJvZ19yZWFkX2ljbXBfZXJycXVldWUoc3RydWN0IGljbXBfc2VuZCAqc2tlbCwgaW50IGNvZGUsXG4rXHRcdFx0XHRcdCAgICBpbnQgYWYsIGNvbnN0IGNoYXIgKmlwKVxuK3tcbitcdGludCBzcnZfZmQgPSAtMSwgY2xpZW50X2ZkID0gLTE7XG4rXHRpbnQgcG9ydDtcbitcbitcdHNydl9mZCA9IHN0YXJ0X3NlcnZlcihhZiwgU09DS19TVFJFQU0sIGlwLCAwLCBUSU1FT1VUX01TKTtcbitcdGlmICghQVNTRVJUX09LX0ZEKHNydl9mZCwgXCJzdGFydF9zZXJ2ZXJcIikpXG4rXHRcdHJldHVybjtcbitcbitcdHBvcnQgPSBnZXRfc29ja2V0X2xvY2FsX3BvcnQoc3J2X2ZkKTtcbitcdGlmICghQVNTRVJUX0dFKHBvcnQsIDAsIFwiZ2V0X3NvY2tldF9sb2NhbF9wb3J0XCIpKSB7XG4rXHRcdGNsb3NlKHNydl9mZCk7XG4rXHRcdHJldHVybjtcbitcdH1cbitcbitcdHNrZWwtXHUwMDNlYnNzLVx1MDAzZXNlcnZlcl9wb3J0ID0gbnRvaHMocG9ydCk7XG4rXHRza2VsLVx1MDAzZWJzcy1cdTAwM2V1bnJlYWNoX3R5cGUgPSAoYWYgPT0gQUZfSU5FVCkgPyBJQ01QX0RFU1RfVU5SRUFDSCA6XG4rXHRcdFx0XHRcdFx0ICAgIElDTVBWNl9ERVNUX1VOUkVBQ0g7XG4rXHRza2VsLVx1MDAzZWJzcy1cdTAwM2V1bnJlYWNoX2NvZGUgPSBjb2RlO1xuK1x0c2tlbC1cdTAwM2VkYXRhLVx1MDAzZWtmdW5jX3JldCA9IEtGVU5DX1JFVF9VTlNFVDtcbitcbitcdGNsaWVudF9mZCA9IGNvbm5lY3RfdG9fZmRfbm9uYmxvY2soc3J2X2ZkKTtcbitcdGlmICghQVNTRVJUX09LX0ZEKGNsaWVudF9mZCwgXCJjbGllbnRfY29ubmVjdF9ub25ibG9ja1wiKSkge1xuK1x0XHRjbG9zZShzcnZfZmQpO1xuK1x0XHRyZXR1cm47XG4rXHR9XG4rXG4rXHRpZiAodmFsaWRfdW5yZWFjaF9jb2RlKGNvZGUsIGFmKSlcbitcdFx0cmVhZF9pY21wX2VycnF1ZXVlKGNsaWVudF9mZCwgY29kZSwgYWYpO1xuK1xuK1x0Y2xvc2UoY2xpZW50X2ZkKTtcbitcdGNsb3NlKHNydl9mZCk7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIHJ1bl9pY21wX3Rlc3Qoc3RydWN0IGljbXBfc2VuZCAqc2tlbCwgaW50IGFmLCBjb25zdCBjaGFyICppcCxcbitcdFx0XHQgIGludCBtYXhfY29kZSlcbit7XG4rXHRmb3IgKGludCBjb2RlID0gMDsgY29kZSBcdTAwM2M9IG1heF9jb2RlOyBjb2RlKyspIHtcbitcdFx0aWYgKGFmID09IEFGX0lORVQgXHUwMDI2XHUwMDI2IGNvZGUgPT0gSUNNUF9GUkFHX05FRURFRClcbitcdFx0XHRjb250aW51ZTtcbitcbitcdFx0dHJpZ2dlcl9wcm9nX3JlYWRfaWNtcF9lcnJxdWV1ZShza2VsLCBjb2RlLCBhZiwgaXApO1xuK1x0XHRBU1NFUlRfRVEoc2tlbC1cdTAwM2VkYXRhLVx1MDAzZWtmdW5jX3JldCwgMCwgXCJrZnVuY19yZXRcIik7XG4rXHR9XG4rXG4rXHQvKiBUZXN0IGludmFsaWQgY29kZXMgKi9cbitcdHRyaWdnZXJfcHJvZ19yZWFkX2ljbXBfZXJycXVldWUoc2tlbCwgLTEsIGFmLCBpcCk7XG4rXHRBU1NFUlRfRVEoc2tlbC1cdTAwM2VkYXRhLVx1MDAzZWtmdW5jX3JldCwgLUVJTlZBTCwgXCJrZnVuY19yZXRcIik7XG4rXG4rXHR0cmlnZ2VyX3Byb2dfcmVhZF9pY21wX2VycnF1ZXVlKHNrZWwsIG1heF9jb2RlICsgMSwgYWYsIGlwKTtcbitcdEFTU0VSVF9FUShza2VsLVx1MDAzZWRhdGEtXHUwMDNla2Z1bmNfcmV0LCAtRUlOVkFMLCBcImtmdW5jX3JldFwiKTtcbitcbitcdGlmIChhZiA9PSBBRl9JTkVUKSB7XG4rXHRcdHRyaWdnZXJfcHJvZ19yZWFkX2ljbXBfZXJycXVldWUoc2tlbCwgSUNNUF9GUkFHX05FRURFRCwgYWYsIGlwKTtcbitcdFx0QVNTRVJUX0VRKHNrZWwtXHUwMDNlZGF0YS1cdTAwM2VrZnVuY19yZXQsIC1FSU5WQUwsIFwia2Z1bmNfcmV0XCIpO1xuK1x0fVxuK31cbitcbitzdGF0aWMgdm9pZCBydW5faWNtcF9ub19yb3V0ZV90ZXN0KHN0cnVjdCBpY21wX3NlbmQgKnNrZWwpXG4re1xuK1x0c3RydWN0IGlwdjRfcGFja2V0IHBrdCA9IHBrdF92NDtcbitcdExJQkJQRl9PUFRTKGJwZl90ZXN0X3J1bl9vcHRzLCBvcHRzLFxuK1x0XHQuZGF0YV9pbiA9IFx1MDAyNnBrdCxcbitcdFx0LmRhdGFfc2l6ZV9pbiA9IHNpemVvZihwa3QpLFxuK1x0KTtcbitcdGludCBlcnI7XG4rXG4rXHRwa3QuaXBoLnZlcnNpb24gPSA0O1xuK1x0cGt0LmlwaC5kYWRkciA9IGluZXRfYWRkcihcIjEyNy4wLjAuMVwiKTtcbitcdHBrdC50Y3AuZGVzdCA9IGh0b25zKDgwKTtcbitcdHNrZWwtXHUwMDNlYnNzLVx1MDAzZXNlcnZlcl9wb3J0ID0gODA7XG4rXHRza2VsLVx1MDAzZWJzcy1cdTAwM2V1bnJlYWNoX3R5cGUgPSBJQ01QX0RFU1RfVU5SRUFDSDtcbitcdHNrZWwtXHUwMDNlYnNzLVx1MDAzZXVucmVhY2hfY29kZSA9IElDTVBfSE9TVF9VTlJFQUNIO1xuK1x0c2tlbC1cdTAwM2VkYXRhLVx1MDAzZWtmdW5jX3JldCA9IEtGVU5DX1JFVF9VTlNFVDtcbitcbitcdGVyciA9IGJwZl9wcm9nX3Rlc3RfcnVuX29wdHMoYnBmX3Byb2dyYW1fX2ZkKHNrZWwtXHUwMDNlcHJvZ3MuZWdyZXNzKSwgXHUwMDI2b3B0cyk7XG4rXHRpZiAoIUFTU0VSVF9PSyhlcnIsIFwidGVzdF9ydW5cIikpXG4rXHRcdHJldHVybjtcbitcdEFTU0VSVF9FUShza2VsLVx1MDAzZWRhdGEtXHUwMDNla2Z1bmNfcmV0LCAtRU5FVFVOUkVBQ0gsIFwia2Z1bmNfcmV0X25vX3JvdXRlXCIpO1xuK31cbitcbit2b2lkIHRlc3RfaWNtcF9zZW5kX3VucmVhY2hfY2dyb3VwKHZvaWQpXG4re1xuK1x0c3RydWN0IGljbXBfc2VuZCAqc2tlbDtcbitcdGludCBjZ3JvdXBfZmQgPSAtMTtcbitcbitcdHNrZWwgPSBpY21wX3NlbmRfX29wZW5fYW5kX2xvYWQoKTtcbitcdGlmICghQVNTRVJUX09LX1BUUihza2VsLCBcInNrZWxfb3BlblwiKSlcbitcdFx0Z290byBjbGVhbnVwO1xuK1xuK1x0Y2dyb3VwX2ZkID0gdGVzdF9fam9pbl9jZ3JvdXAoXCIvaWNtcF9zZW5kX3VucmVhY2hfY2dyb3VwXCIpO1xuK1x0aWYgKCFBU1NFUlRfT0tfRkQoY2dyb3VwX2ZkLCBcImpvaW5fY2dyb3VwXCIpKVxuK1x0XHRnb3RvIGNsZWFudXA7XG4rXG4rXHRza2VsLVx1MDAzZWxpbmtzLmVncmVzcyA9XG4rXHRcdGJwZl9wcm9ncmFtX19hdHRhY2hfY2dyb3VwKHNrZWwtXHUwMDNlcHJvZ3MuZWdyZXNzLCBjZ3JvdXBfZmQpO1xuK1x0aWYgKCFBU1NFUlRfT0tfUFRSKHNrZWwtXHUwMDNlbGlua3MuZWdyZXNzLCBcInByb2dfYXR0YWNoX2Nncm91cFwiKSlcbitcdFx0Z290byBjbGVhbnVwO1xuK1xuK1x0aWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoXCJpcHY0XCIpKVxuK1x0XHRydW5faWNtcF90ZXN0KHNrZWwsIEFGX0lORVQsIFwiMTI3LjAuMC4xXCIsIE5SX0lDTVBfVU5SRUFDSCk7XG4rXG4rXHRpZiAodGVzdF9fc3RhcnRfc3VidGVzdChcImlwdjZcIikpXG4rXHRcdHJ1bl9pY21wX3Rlc3Qoc2tlbCwgQUZfSU5FVDYsIFwiOjoxXCIsIElDTVBWNl9SRUpFQ1RfUk9VVEUpO1xuK1xuK1x0aWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoXCJub19yb3V0ZVwiKSlcbitcdFx0cnVuX2ljbXBfbm9fcm91dGVfdGVzdChza2VsKTtcbitcbitjbGVhbnVwOlxuK1x0aWNtcF9zZW5kX19kZXN0cm95KHNrZWwpO1xuK1x0aWYgKGNncm91cF9mZCBcdTAwM2U9IDApXG4rXHRcdGNsb3NlKGNncm91cF9mZCk7XG4rfVxuK1xuK3ZvaWQgdGVzdF9pY21wX3NlbmRfdW5yZWFjaF9yZWN1cnNpb24odm9pZClcbit7XG4rXHRzdHJ1Y3QgaWNtcF9zZW5kICpza2VsO1xuK1x0aW50IGNncm91cF9mZCA9IC0xO1xuK1x0aW50IGVycjtcbitcbitcdGVyciA9IHNldHVwX2Nncm91cF9lbnZpcm9ubWVudCgpO1xuK1x0aWYgKCFBU1NFUlRfT0soZXJyLCBcInNldHVwX2Nncm91cF9lbnZpcm9ubWVudFwiKSlcbitcdFx0cmV0dXJuO1xuK1xuK1x0c2tlbCA9IGljbXBfc2VuZF9fb3Blbl9hbmRfbG9hZCgpO1xuK1x0aWYgKCFBU1NFUlRfT0tfUFRSKHNrZWwsIFwic2tlbF9vcGVuXCIpKVxuK1x0XHRnb3RvIGNsZWFudXA7XG4rXG4rXHRjZ3JvdXBfZmQgPSBnZXRfcm9vdF9jZ3JvdXAoKTtcbitcdGlmICghQVNTRVJUX09LX0ZEKGNncm91cF9mZCwgXCJnZXRfcm9vdF9jZ3JvdXBcIikpXG4rXHRcdGdvdG8gY2xlYW51cDtcbitcbitcdHNrZWwtXHUwMDNlZGF0YS1cdTAwM2V0YXJnZXRfcGlkID0gZ2V0cGlkKCk7XG4rXHRza2VsLVx1MDAzZWxpbmtzLnJlY3Vyc2lvbiA9XG4rXHRcdGJwZl9wcm9ncmFtX19hdHRhY2hfY2dyb3VwKHNrZWwtXHUwMDNlcHJvZ3MucmVjdXJzaW9uLCBjZ3JvdXBfZmQpO1xuK1x0aWYgKCFBU1NFUlRfT0tfUFRSKHNrZWwtXHUwMDNlbGlua3MucmVjdXJzaW9uLCBcInByb2dfYXR0YWNoX2Nncm91cFwiKSlcbitcdFx0Z290byBjbGVhbnVwO1xuK1xuK1x0dHJpZ2dlcl9wcm9nX3JlYWRfaWNtcF9lcnJxdWV1ZShza2VsLCBJQ01QX0hPU1RfVU5SRUFDSCwgQUZfSU5FVCxcbitcdFx0XHRcdFx0XCIxMjcuMC4wLjFcIik7XG4rXG4rXHQvKlxuK1x0ICogQmVjYXVzZSB0aGVyZSdzIHJlY3Vyc2lvbiBpbnZvbHZlZCwgdGhlIGZpcnN0IGNhbGwgd2lsbCByZXR1cm4gYXRcbitcdCAqIGluZGV4IDEgc2luY2UgaXQgd2lsbCByZXR1cm4gdGhlIHNlY29uZCwgYW5kIHRoZSBzZWNvbmQgY2FsbCB3aWxsXG4rXHQgKiByZXR1cm4gYXQgaW5kZXggMCBzaW5jZSBpdCB3aWxsIHJldHVybiB0aGUgZmlyc3QuXG4rXHQgKi9cbitcdEFTU0VSVF9FUShza2VsLVx1MDAzZWJzcy1cdTAwM2VyZWNfY291bnQsIDIsIFwicmVjX2NvdW50XCIpO1xuK1x0QVNTRVJUX0VRKHNrZWwtXHUwMDNlZGF0YS1cdTAwM2VyZWNfa2Z1bmNfcmV0c1swXSwgLUVCVVNZLCBcImtmdW5jX3JldHNbMF1cIik7XG4rXHRBU1NFUlRfRVEoc2tlbC1cdTAwM2VkYXRhLVx1MDAzZXJlY19rZnVuY19yZXRzWzFdLCAwLCBcImtmdW5jX3JldHNbMV1cIik7XG4rXG4rY2xlYW51cDpcbitcdGljbXBfc2VuZF9fZGVzdHJveShza2VsKTtcbitcdGlmIChjZ3JvdXBfZmQgXHUwMDNlPSAwKVxuK1x0XHRjbG9zZShjZ3JvdXBfZmQpO1xuK1x0Y2xlYW51cF9jZ3JvdXBfZW52aXJvbm1lbnQoKTtcbit9XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2ljbXBfc2VuZC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2ljbXBfc2VuZC5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLmM2NDJjY2RmOWZkNTQ0XG4tLS0gL2Rldi9udWxsXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvaWNtcF9zZW5kLmNcbkBAIC0wLDAgKzEsMTIzIEBAXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbisjaW5jbHVkZSBcInZtbGludXguaFwiXG4rI2luY2x1ZGUgXHUwMDNjYnBmL2JwZl9oZWxwZXJzLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NicGYvYnBmX2VuZGlhbi5oXHUwMDNlXG4rXG4rLyogMTI3LjAuMC4xIGluIGhvc3QgYnl0ZSBvcmRlciAqL1xuKyNkZWZpbmUgU0VSVkVSX0lQIDB4N0YwMDAwMDFcbisvKiA6OjEgaW4gaG9zdCBieXRlIG9yZGVyIChsYXN0IDMyLWJpdCB3b3JkKSAqL1xuKyNkZWZpbmUgU0VSVkVSX0lQNl9MTyAweDAwMDAwMDAxXG4rXG4rX191MTYgc2VydmVyX3BvcnQgPSAwO1xuK2ludCB1bnJlYWNoX3R5cGUgPSAwO1xuK2ludCB1bnJlYWNoX2NvZGUgPSAwO1xuK2ludCBrZnVuY19yZXQgPSAtMTtcbitpbnQgdGFyZ2V0X3BpZCA9IC0xO1xuK1xuK3Vuc2lnbmVkIGludCByZWNfY291bnQgPSAwO1xuK2ludCByZWNfa2Z1bmNfcmV0c1tdID0geyAtMSwgLTEgfTtcbitcbitTRUMoXCJjZ3JvdXBfc2tiL2VncmVzc1wiKVxuK2ludCBlZ3Jlc3Moc3RydWN0IF9fc2tfYnVmZiAqc2tiKVxuK3tcbitcdHZvaWQgKmRhdGEgPSAodm9pZCAqKShsb25nKXNrYi1cdTAwM2VkYXRhO1xuK1x0dm9pZCAqZGF0YV9lbmQgPSAodm9pZCAqKShsb25nKXNrYi1cdTAwM2VkYXRhX2VuZDtcbitcdHN0cnVjdCBpcGhkciAqaXBoO1xuK1x0c3RydWN0IGlwdjZoZHIgKmlwNmg7XG4rXHRzdHJ1Y3QgdGNwaGRyICp0Y3BoO1xuK1x0X191OCB2ZXJzaW9uO1xuK1xuK1x0aWYgKGRhdGEgKyAxIFx1MDAzZSBkYXRhX2VuZClcbitcdFx0cmV0dXJuIFNLX1BBU1M7XG4rXG4rXHR2ZXJzaW9uID0gKCooKF9fdTggKilkYXRhKSkgXHUwMDNlXHUwMDNlIDQ7XG4rXG4rXHRpZiAodmVyc2lvbiA9PSA0KSB7XG4rXHRcdGlwaCA9IGRhdGE7XG4rXHRcdGlmICgodm9pZCAqKShpcGggKyAxKSBcdTAwM2UgZGF0YV9lbmQgfHxcbitcdFx0ICAgIGlwaC1cdTAwM2Vwcm90b2NvbCAhPSBJUFBST1RPX1RDUCB8fFxuK1x0XHQgICAgaXBoLVx1MDAzZWRhZGRyICE9IGJwZl9odG9ubChTRVJWRVJfSVApKVxuK1x0XHRcdHJldHVybiBTS19QQVNTO1xuK1xuK1x0XHR0Y3BoID0gKHZvaWQgKilpcGggKyBpcGgtXHUwMDNlaWhsICogNDtcbitcdFx0aWYgKCh2b2lkICopKHRjcGggKyAxKSBcdTAwM2UgZGF0YV9lbmQgfHxcbitcdFx0ICAgIHRjcGgtXHUwMDNlZGVzdCAhPSBicGZfaHRvbnMoc2VydmVyX3BvcnQpKVxuK1x0XHRcdHJldHVybiBTS19QQVNTO1xuK1xuK1x0fSBlbHNlIGlmICh2ZXJzaW9uID09IDYpIHtcbitcdFx0aXA2aCA9IGRhdGE7XG4rXHRcdGlmICgodm9pZCAqKShpcDZoICsgMSkgXHUwMDNlIGRhdGFfZW5kIHx8XG4rXHRcdCAgICBpcDZoLVx1MDAzZW5leHRoZHIgIT0gSVBQUk9UT19UQ1ApXG4rXHRcdFx0cmV0dXJuIFNLX1BBU1M7XG4rXG4rXHRcdGlmIChpcDZoLVx1MDAzZWRhZGRyLmluNl91LnU2X2FkZHIzMlswXSAhPSAwIHx8XG4rXHRcdCAgICBpcDZoLVx1MDAzZWRhZGRyLmluNl91LnU2X2FkZHIzMlsxXSAhPSAwIHx8XG4rXHRcdCAgICBpcDZoLVx1MDAzZWRhZGRyLmluNl91LnU2X2FkZHIzMlsyXSAhPSAwIHx8XG4rXHRcdCAgICBpcDZoLVx1MDAzZWRhZGRyLmluNl91LnU2X2FkZHIzMlszXSAhPSBicGZfaHRvbmwoU0VSVkVSX0lQNl9MTykpXG4rXHRcdFx0cmV0dXJuIFNLX1BBU1M7XG4rXG4rXHRcdHRjcGggPSAodm9pZCAqKShpcDZoICsgMSk7XG4rXHRcdGlmICgodm9pZCAqKSh0Y3BoICsgMSkgXHUwMDNlIGRhdGFfZW5kIHx8XG4rXHRcdCAgICB0Y3BoLVx1MDAzZWRlc3QgIT0gYnBmX2h0b25zKHNlcnZlcl9wb3J0KSlcbitcdFx0XHRyZXR1cm4gU0tfUEFTUztcbitcdH0gZWxzZSB7XG4rXHRcdHJldHVybiBTS19QQVNTO1xuK1x0fVxuK1xuK1x0a2Z1bmNfcmV0ID0gYnBmX2ljbXBfc2VuZChza2IsIHVucmVhY2hfdHlwZSwgdW5yZWFjaF9jb2RlKTtcbitcbitcdHJldHVybiBTS19EUk9QO1xuK31cbitcbitTRUMoXCJjZ3JvdXBfc2tiL2VncmVzc1wiKVxuK2ludCByZWN1cnNpb24oc3RydWN0IF9fc2tfYnVmZiAqc2tiKVxuK3tcbitcdHZvaWQgKmRhdGEgPSAodm9pZCAqKShsb25nKXNrYi1cdTAwM2VkYXRhO1xuK1x0dm9pZCAqZGF0YV9lbmQgPSAodm9pZCAqKShsb25nKXNrYi1cdTAwM2VkYXRhX2VuZDtcbitcdHN0cnVjdCBpY21waGRyICppY21waDtcbitcdHN0cnVjdCB0Y3BoZHIgKnRjcGg7XG4rXHRzdHJ1Y3QgaXBoZHIgKmlwaDtcbitcdGludCByZXQ7XG4rXG4rXHRpZiAoKGJwZl9nZXRfY3VycmVudF9waWRfdGdpZCgpIFx1MDAzZVx1MDAzZSAzMikgIT0gdGFyZ2V0X3BpZClcbitcdFx0cmV0dXJuIFNLX1BBU1M7XG4rXG4rXHRpcGggPSBkYXRhO1xuK1x0aWYgKCh2b2lkICopKGlwaCArIDEpIFx1MDAzZSBkYXRhX2VuZCB8fCBpcGgtXHUwMDNldmVyc2lvbiAhPSA0KVxuK1x0XHRyZXR1cm4gU0tfUEFTUztcbitcbitcdGlmIChpcGgtXHUwMDNlZGFkZHIgIT0gYnBmX2h0b25sKFNFUlZFUl9JUCkpXG4rXHRcdHJldHVybiBTS19QQVNTO1xuK1xuK1x0aWYgKGlwaC1cdTAwM2Vwcm90b2NvbCA9PSBJUFBST1RPX1RDUCkge1xuK1x0XHR0Y3BoID0gKHZvaWQgKilpcGggKyBpcGgtXHUwMDNlaWhsICogNDtcbitcdFx0aWYgKCh2b2lkICopKHRjcGggKyAxKSBcdTAwM2UgZGF0YV9lbmQgfHxcbitcdFx0ICAgIHRjcGgtXHUwMDNlZGVzdCAhPSBicGZfaHRvbnMoc2VydmVyX3BvcnQpKVxuK1x0XHRcdHJldHVybiBTS19QQVNTO1xuK1x0fSBlbHNlIGlmIChpcGgtXHUwMDNlcHJvdG9jb2wgPT0gSVBQUk9UT19JQ01QKSB7XG4rXHRcdGljbXBoID0gKHZvaWQgKilpcGggKyBpcGgtXHUwMDNlaWhsICogNDtcbitcdFx0aWYgKCh2b2lkICopKGljbXBoICsgMSkgXHUwMDNlIGRhdGFfZW5kIHx8XG4rXHRcdCAgICBpY21waC1cdTAwM2V0eXBlICE9IHVucmVhY2hfdHlwZSB8fCBpY21waC1cdTAwM2Vjb2RlICE9IHVucmVhY2hfY29kZSlcbitcdFx0XHRyZXR1cm4gU0tfUEFTUztcbitcdH0gZWxzZSB7XG4rXHRcdHJldHVybiBTS19QQVNTO1xuK1x0fVxuK1xuK1x0LypcbitcdCAqIFRoaXMgY2FsbCB3aWxsIHByb3Zva2UgYSByZWN1cnNpb246IHRoZSBJQ01QIHBhY2tldCBnZW5lcmF0ZWQgYnkgdGhlXG4rXHQgKiBrZnVuYyB3aWxsIHJlLXRyaWdnZXIgdGhpcyBwcm9ncmFtIHNpbmNlIHdlIGFyZSBpbiB0aGUgcm9vdCBjZ3JvdXAgaW5cbitcdCAqIHdoaWNoIHRoZSBrZXJuZWwgSUNNUCBzb2NrZXQgYmVsb25ncy4gSG93ZXZlciB3aGVuIHJlLWVudGVyaW5nIHRoZVxuK1x0ICoga2Z1bmMsIGl0IHNob3VsZCByZXR1cm4gRUJVU1kuXG4rXHQgKi9cbitcdHJldCA9IGJwZl9pY21wX3NlbmQoc2tiLCB1bnJlYWNoX3R5cGUsIHVucmVhY2hfY29kZSk7XG4rXHRyZWNfa2Z1bmNfcmV0c1tyZWNfY291bnQgXHUwMDI2IDFdID0gcmV0O1xuK1x0X19zeW5jX2ZldGNoX2FuZF9hZGQoXHUwMDI2cmVjX2NvdW50LCAxKTtcbitcbitcdC8qIExldCB0aGUgZmlyc3QgSUNNUCBlcnJvciBtZXNzYWdlIHBhc3MgKi9cbitcdGlmIChpcGgtXHUwMDNlcHJvdG9jb2wgPT0gSVBQUk9UT19JQ01QKVxuK1x0XHRyZXR1cm4gU0tfUEFTUztcbitcbitcdHJldHVybiBTS19EUk9QO1xuK31cbitcbitjaGFyIExJQ0VOU0VbXSBTRUMoXCJsaWNlbnNlXCIpID0gXCJEdWFsIEJTRC9HUExcIjtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI0VDE5OjE0OjM2LjUwMDQxODQyWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjAwNTI3ODMyMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBOZXcgYGJwZl9pY21wX3NlbmRgIGtmdW5jKipcblxuT2theSwgc28gdGhlcmUncyBhIG5ldyBwYXRjaCBpbnRyb2R1Y2luZyBhIGBicGZfaWNtcF9zZW5kYCBrZnVuYy4gSW50ZXJlc3RpbmcsIEkgc2VlIGl0J3MgdG91Y2hpbmcgYG5ldC9jb3JlL2ZpbHRlci5jYCwgd2hpY2ggaXMgYSBrZXkgYXJlYSBmb3IgQlBGLCBhbmQgaXQgYWxzbyBpbmNsdWRlcyBzb21lIHNlbGYtdGVzdHMsIHdoaWNoIGlzIGdyZWF0LiBJdCBsb29rcyBsaWtlIHRoZSBrZnVuYyBpdHNlbGYgdGFrZXMgdGhlIHVzdWFsIGBzdHJ1Y3QgX19za19idWZmICpza2JfY3R4YCwgcGx1cyB0aGUgSUNNUCBgdHlwZWAgYW5kIGBjb2RlYCwgYW5kIHRoZW4gY2xvbmVzIHRoZSBTS0IgYW5kIHVzZXMgYGljbXBfc2VuZGAgb3IgYGljbXB2Nl9zZW5kYCB0byBhY3R1YWxseSB0cmFuc21pdCB0aGUgSUNNUCBtZXNzYWdlLiBTZWVtcyBzdHJhaWdodGZvcndhcmQgZW5vdWdoIOKAkyBmdW5jdGlvbmFsbHkgc291bmQgYW5kIGRlZmluaXRlbHkgcmVhY2hhYmxlIGZyb20gQlBGIHByb2dyYW1zLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgXCJUaGlzIG5lZWRzIGZ1enppbmchXCJcblxuTm93LCBsZXQncyBnZXQgaW50byB0aGUgbml0dHktZ3JpdHR5LiBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgcmVxdWlyZWQgY29uZmlndXJhdGlvbnMuIFNpbmNlIHRoaXMga2Z1bmMgaXMgcmVnaXN0ZXJlZCBmb3IgYEJQRl9QUk9HX1RZUEVfQ0dST1VQX1NLQmAsIEkga25vdyB3ZSdsbCBkZWZpbml0ZWx5IG5lZWQgYENPTkZJR19DR1JPVVBfQlBGYCBhbmQgYENPTkZJR19CUEZfU1lTQ0FMTGAgZW5hYmxlZC4gSXTigJlzIGFsc28gdXNpbmcgYGljbXBfc2VuZGAgYW5kIGBpY21wdjZfc2VuZGAsIHNvIGBDT05GSUdfSU5FVGAgYW5kIGBDT05GSUdfSVBWNmAgYXJlIGRlZmluaXRlbHkgZ29pbmcgdG8gYmUgcmVsZXZhbnQsIGFzIGNvbmZpcm1lZCBieSB0aG9zZSBwcmVwcm9jZXNzb3IgZGlyZWN0aXZlcy5cblxuVG8gYmUgZXh0cmEgc3VyZSBhYm91dCB0aGUgY29uZmlnLCBJIHdpbGwgY2hlY2sgYG5ldC9jb3JlL2ZpbHRlci5jYCBpdHNlbGYuXG5MZXQncyBjb25maXJtIHRoZSBjb2RlLCBhbmQgY29uZmlybSBgYnBmX2ljbXBfc2VuZGAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgzNDksIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOTcsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNFQxOToxNDo0Mi41MDU2OTg1NDJaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjEwNjEwMzIwMiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJicGZfaWNtcF9zZW5kXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9jb3JlL2ZpbHRlci5jPTEyNDkxPV9fYnBmX2tmdW5jIGludCBicGZfeGRwX3B1bGxfZGF0YShzdHJ1Y3QgeGRwX21kICp4LCB1MzIgbGVuKVxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtMTI1NTItLyoqXFxubmV0L2NvcmUvZmlsdGVyLmM6MTI1NTM6ICogYnBmX2ljbXBfc2VuZCAtIFNlbmQgYW4gSUNNUCBjb250cm9sIG1lc3NhZ2VcXG5uZXQvY29yZS9maWx0ZXIuYy0xMjU1NC0gKiBAc2tiX2N0eDogUGFja2V0IHRoYXQgdHJpZ2dlcmVkIHRoZSBjb250cm9sIG1lc3NhZ2VcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTEyNTcyLSAqL1xcbm5ldC9jb3JlL2ZpbHRlci5jOjEyNTczOl9fYnBmX2tmdW5jIGludCBicGZfaWNtcF9zZW5kKHN0cnVjdCBfX3NrX2J1ZmYgKnNrYl9jdHgsIGludCB0eXBlLCBpbnQgY29kZSlcXG5uZXQvY29yZS9maWx0ZXIuYy0xMjU3NC17XFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYz0xMjY3Mj1CVEZfS0ZVTkNTX1NUQVJUKGJwZl9rZnVuY19jaGVja19zZXRfaWNtcF9zZW5kKVxcbm5ldC9jb3JlL2ZpbHRlci5jOjEyNjczOkJURl9JRF9GTEFHUyhmdW5jLCBicGZfaWNtcF9zZW5kKVxcbm5ldC9jb3JlL2ZpbHRlci5jLTEyNjc0LUJURl9LRlVOQ1NfRU5EKGJwZl9rZnVuY19jaGVja19zZXRfaWNtcF9zZW5kKVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2ljbXBfc2VuZC5jPTIxPWludCBlZ3Jlc3Moc3RydWN0IF9fc2tfYnVmZiAqc2tiKVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2ljbXBfc2VuZC5jLTY2LVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9pY21wX3NlbmQuYzo2NzpcXHRrZnVuY19yZXQgPSBicGZfaWNtcF9zZW5kKHNrYiwgdW5yZWFjaF90eXBlLCB1bnJlYWNoX2NvZGUpO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9pY21wX3NlbmQuYy02OC1cXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9pY21wX3NlbmQuYz03Mz1pbnQgcmVjdXJzaW9uKHN0cnVjdCBfX3NrX2J1ZmYgKnNrYilcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9pY21wX3NlbmQuYy0xMTEtXFx0ICovXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2ljbXBfc2VuZC5jOjExMjpcXHRyZXQgPSBicGZfaWNtcF9zZW5kKHNrYiwgdW5yZWFjaF90eXBlLCB1bnJlYWNoX2NvZGUpO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9pY21wX3NlbmQuYy0xMTMtXFx0cmVjX2tmdW5jX3JldHNbcmVjX2NvdW50IFxcdTAwMjYgMV0gPSByZXQ7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI0VDE5OjE0OjQ0LjYxMTgxMTA5NFoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUzNzY5NDYzNjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBgYnBmX2ljbXBfc2VuZGAga2Z1bmMqKlxuXG5Pa2F5LCBzbyBJIHNlZSB0aGF0IGBicGZfaWNtcF9zZW5kYCBpcyBiZWluZyBicm91Z2h0IGluIHRocm91Z2ggYGJwZl9rZnVuY19jaGVja19zZXRfaWNtcF9zZW5kYCBhbmQgcmVnaXN0ZXJlZCBmb3IgYEJQRl9QUk9HX1RZUEVfQ0dST1VQX1NLQmAuIFRoYXQgbWVhbnMgYENPTkZJR19DR1JPVVBfQlBGYCBpcyBkZWZpbml0ZWx5IGEgcHJlcmVxdWlzaXRlLiBJIGtub3cgdGhhdCBtdWNoLlxuXG5Ob3csIGxldCdzIG1ha2Ugc3VyZSB3ZSd2ZSBnb3QgYWxsIHRoZSBkdWNrcyBpbiBhIHJvdyBjb25maWctd2lzZS4gSSdtIHRoaW5raW5nLi4uIGZvciB0aGUgYWN0dWFsIElDTVAgc2VuZCBmdW5jdGlvbmFsaXR5LCB3ZSdyZSBnb2luZyB0byBuZWVkIGBDT05GSUdfSU5FVGAgYW5kIGBDT05GSUdfSVBWNmAsIGZvciBzdXJlLiBBbmQsIG9idmlvdXNseSwgc2luY2Ugd2UncmUgZGVhbGluZyB3aXRoIEJQRiwgYENPTkZJR19CUEZfU1lTQ0FMTGAgaXMgYSBnaXZlbi5cblxuSnVzdCB0byBiZSBhYnNvbHV0ZWx5IGNsZWFyIGluIG15IG1pbmQsIHRoZSBjcml0aWNhbCBzeW1ib2wgd2UncmUgZm9jdXNpbmcgb24gaGVyZSBpcyBgYnBmX2ljbXBfc2VuZGAuXG5cbkxldCBtZSBxdWlja2x5IGNvbmZpcm0gdGhhdCBpdCdzIHRoZSBvbmx5IGZ1bmN0aW9uIGJlaW5nIGFkZGVkLiBZZXMsIHRoYXQncyByaWdodCwganVzdCB0aGUgb25lLlxuXG5BbHJpZ2h0LCBsZXQncyBydW4gdGhyb3VnaCB0aG9zZSBjb25maWd1cmF0aW9ucyBvbmUgbW9yZSB0aW1lIHRvIG1ha2Ugc3VyZSBJJ20gbm90IG1pc3NpbmcgYW55dGhpbmc6XG5cbiogICBgQ09ORklHX0NHUk9VUF9CUEZgXG4qICAgYENPTkZJR19JTkVUYFxuKiAgIGBDT05GSUdfSVBWNmBcbiogICBgQ09ORklHX0JQRl9TWVNDQUxMYFxuXG5Pa2F5LCBhcmUgdGhlcmUgYW55IG90aGVyIGRlcGVuZGVuY2llcyBJIG5lZWQgdG8gYmUgYXdhcmUgb2Y/IExldCBtZSB0YWtlIGEgbG9vayBhdCBgbmV0L2NvcmUvZmlsdGVyLmNgIGFyb3VuZCB0aGUgYHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXRgIGNhbGwuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk2MTMsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNjUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjRUMTk6MTQ6NDkuOTg4NzU5NjA3WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI4ODA5MTY1ODcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldC4qYnBmX2tmdW5jX3NldF9pY21wX3NlbmRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2NvcmUvZmlsdGVyLmM9MTI3MTE9c3RhdGljIGludCBfX2luaXQgYnBmX2tmdW5jX2luaXQodm9pZClcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTEyNzMxLVxcdHJldCA9IHJldCA/OiByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfU0NIRURfQ0xTLCBcXHUwMDI2YnBmX2tmdW5jX3NldF90Y3BfcmVxc2spO1xcbm5ldC9jb3JlL2ZpbHRlci5jOjEyNzMyOlxcdHJldCA9IHJldCA/OiByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfQ0dST1VQX1NLQiwgXFx1MDAyNmJwZl9rZnVuY19zZXRfaWNtcF9zZW5kKTtcXG5uZXQvY29yZS9maWx0ZXIuYy0xMjczMy1cXHRyZXR1cm4gcmV0ID86IHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9TT0NLX09QUywgXFx1MDAyNmJwZl9rZnVuY19zZXRfc29ja19vcHMpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNFQxOToxNDo1Mi44Njk2ODEwMDRaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2Mzk5Njc2ODg1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgRnV6emluZyBQb3RlbnRpYWwgb2YgYGJwZl9pY21wX3NlbmRgKipcblxuT2theSwgc28gdGhlIGBicGZfaWNtcF9zZW5kYCBmdW5jdGlvbiBpcyB0aGUgKm9ubHkqIHN5bWJvbCBmbGFnZ2VkIGFzIHRoZSBwcmltYXJ5IGZvY3VzIGhlcmUuIFRoYXQsIGluIGl0c2VsZiwgaXMgc2lnbmlmaWNhbnQuIFRoZSBjb25maWd1cmF0aW9uIHByZXJlcXVpc2l0ZXMgYXJlIGBDR1JPVVBfQlBGYCwgYEJQRl9TWVNDQUxMYCwgYElORVRgLCBhbmQgYElQVjZgIOKAkyB0aGUgdXN1YWwgc3VzcGVjdHMgZm9yIG5ldHdvcmstcmVsYXRlZCBCUEYgZnV6emluZy5cblxuQWhhISBgYnBmX2ljbXBfc2VuZGAgaXMgYSBCUEYga2Z1bmMuIFRoYXQgY2hhbmdlcyB0aGUgZ2FtZS4gSWYgaXQncyBhIGtmdW5jLCBpdCBtZWFucyBTeXprYWxsZXIgKm5lZWRzKiB0byBrbm93IGFib3V0IGl0LiBUaGFua2Z1bGx5LCBTeXprYWxsZXIgaW50ZWxsaWdlbnRseSBleHRyYWN0cyBrZnVuY3MgZnJvbSBCVEYgaW5mb3JtYXRpb24uIFNvLCBhcyBsb25nIGFzIHRoaXMgZnVuY3Rpb24gaXMgcHJvcGVybHkgZGVmaW5lZCBpbiB0aGUga2VybmVsIEJURiwgU3l6a2FsbGVyIHdpbGwgYXV0b21hdGljYWxseSBwaWNrIGl0IHVwLCBlbGltaW5hdGluZyBhIG1hbnVhbCBpbnRlZ3JhdGlvbiBlZmZvcnQuIFRoYXQncyBnb29kIG5ld3MuXG5cbkdpdmVuIHRoYXQgaXQgaXMgYSBrZnVuYywgdGhlIHBhdGNoICphYnNvbHV0ZWx5KiB3YXJyYW50cyBmdXp6aW5nLiBUaGUgZmFjdCB0aGF0IGl0J3MgYSBuZXcgZmVhdHVyZSwgc3BlY2lmaWNhbGx5IGEgbmV3IEJQRiBrZnVuYywgdGhhdCBhbGxvd3MgdXNlcnNwYWNlIEJQRiBwcm9ncmFtcyBhdHRhY2hlZCB0byBjZ3JvdXAgc2tiIGhvb2tzIHRvIHNlbmQgSUNNUCBjb250cm9sIG1lc3NhZ2Vz4oCmIHRoYXQncyBhIHBlcmZlY3QgdGFyZ2V0LiBUaGlzIGlzIGEgKmRpcmVjdCogbmV3IGZ1bmN0aW9uYWwgZmVhdHVyZSBleHBvc2VkIHRvIHVzZXJzcGFjZSB2aWEgQlBGIHByb2dyYW1zLCB3aGljaCBpcyB0aGUgZGVmaW5pdGlvbiBvZiBhIHByaW1lIGZ1enppbmcgdGFyZ2V0LlxuXG5BbHJpZ2h0LCBJJ20gcmVhZHkgdG8gZm9ybWFsaXplIG15IGFzc2Vzc21lbnQ6XG5cbmBgYFxuV29ydGhGdXp6aW5nOiB0cnVlXG5Gb2N1c1N5bWJvbHM6IFtcImJwZl9pY21wX3NlbmRcIl1cbkVuYWJsZUNvbmZpZ3M6IFtcIkNHUk9VUF9CUEZcIiwgXCJCUEZfU1lTQ0FMTFwiLCBcIklORVRcIiwgXCJJUFY2XCJdXG5SZWFzb25pbmc6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgQlBGIGtmdW5jIGBicGZfaWNtcF9zZW5kYCB3aGljaCBhbGxvd3MgQlBGIHByb2dyYW1zIGF0dGFjaGVkIHRvIGNncm91cCBza2IgaG9va3MgdG8gc2VuZCBJQ01QIGNvbnRyb2wgbWVzc2FnZXMuIFRoaXMgaXMgYSBuZXcgZnVuY3Rpb25hbCBmZWF0dXJlIHRoYXQgaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBCUEYgcHJvZ3JhbXMsIG1ha2luZyBpdCBhIHByaW1lIHRhcmdldCBmb3IgZnV6emluZy5cIlxuYGBgXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNDc0LCJPdXRwdXRUb2tlbnMiOjEyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yNFQxOToxNDo1OS4yNjkzNTk5MzlaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc1NDM1NjE5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJDR1JPVVBfQlBGXCIsXG4gICAgXCJCUEZfU1lTQ0FMTFwiLFxuICAgIFwiSU5FVFwiLFxuICAgIFwiSVBWNlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJwZl9pY21wX3NlbmRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IEJQRiBrZnVuYyBgYnBmX2ljbXBfc2VuZGAgd2hpY2ggYWxsb3dzIEJQRiBwcm9ncmFtcyBhdHRhY2hlZCB0byBjZ3JvdXAgc2tiIGhvb2tzIHRvIHNlbmQgSUNNUCBjb250cm9sIG1lc3NhZ2VzLiBUaGlzIGlzIGEgbmV3IGZ1bmN0aW9uYWwgZmVhdHVyZSB0aGF0IGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgQlBGIHByb2dyYW1zLCBtYWtpbmcgaXQgYSBwcmltZSB0YXJnZXQgZm9yIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQ0dST1VQX0JQRlwiLFxuICAgIFwiQlBGX1NZU0NBTExcIixcbiAgICBcIklORVRcIixcbiAgICBcIklQVjZcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJicGZfaWNtcF9zZW5kXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBCUEYga2Z1bmMgYGJwZl9pY21wX3NlbmRgIHdoaWNoIGFsbG93cyBCUEYgcHJvZ3JhbXMgYXR0YWNoZWQgdG8gY2dyb3VwIHNrYiBob29rcyB0byBzZW5kIElDTVAgY29udHJvbCBtZXNzYWdlcy4gVGhpcyBpcyBhIG5ldyBmdW5jdGlvbmFsIGZlYXR1cmUgdGhhdCBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIEJQRiBwcm9ncmFtcywgbWFraW5nIGl0IGEgcHJpbWUgdGFyZ2V0IGZvciBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflownjth2[1] Phase: Succeeded StartedAt: 2026-06-24 19:15:31 +0000 UTC FinishedAt: 2026-06-24 19:15:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflownjth2[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-06-24 19:15:31 +0000 UTC FinishedAt: 2026-06-24 19:15:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflownjth2[2] Phase: Succeeded StartedAt: 2026-06-24 19:15:31 +0000 UTC FinishedAt: 2026-06-24 23:19:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflownjth2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","BPF_SYSCALL","INET","IPV6"],"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_icmp_send"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","BPF_SYSCALL","INET","IPV6"],"series_id":"2db1e935-8379-4970-b7ca-69d54fbd936b","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-06-24 19:15:31 +0000 UTC FinishedAt: 2026-06-24 23:19:13 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","BPF_SYSCALL","INET","IPV6"],"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_icmp_send"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","BPF_SYSCALL","INET","IPV6"],"series_id":"2db1e935-8379-4970-b7ca-69d54fbd936b","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-workflownjth2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","BPF_SYSCALL","INET","IPV6"],"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_icmp_send"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","BPF_SYSCALL","INET","IPV6"],"series_id":"2db1e935-8379-4970-b7ca-69d54fbd936b","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-06-24 19:15:31 +0000 UTC FinishedAt: 2026-06-24 19:15:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflownjth2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","BPF_SYSCALL","INET","IPV6"],"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_icmp_send"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","BPF_SYSCALL","INET","IPV6"],"series_id":"2db1e935-8379-4970-b7ca-69d54fbd936b","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-06-24 19:15:31 +0000 UTC FinishedAt: 2026-06-24 19:15:36 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","BPF_SYSCALL","INET","IPV6"],"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-workflownjth2/series-workflownjth2-convert-artifact-3636162143/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflownjth2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","BPF_SYSCALL","INET","IPV6"],"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_icmp_send"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","BPF_SYSCALL","INET","IPV6"],"series_id":"2db1e935-8379-4970-b7ca-69d54fbd936b","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-06-24 19:15:41 +0000 UTC FinishedAt: 2026-06-24 19:39:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflownjth2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","BPF_SYSCALL","INET","IPV6"],"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_icmp_send"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","BPF_SYSCALL","INET","IPV6"],"series_id":"2db1e935-8379-4970-b7ca-69d54fbd936b","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-06-24 19:15:41 +0000 UTC FinishedAt: 2026-06-24 19:39:17 +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:*caa4c981-5e76-42de-8934-27d9a18c3bd9,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-workflownjth2/series-workflownjth2-convert-artifact-3636162143/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": "dc0837ef-c920-4c49-8633-4e99fe6fd2f0", "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-workflownjth2/series-workflownjth2-build-action-1708020581/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflownjth2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","BPF_SYSCALL","INET","IPV6"],"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_icmp_send"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","BPF_SYSCALL","INET","IPV6"],"series_id":"2db1e935-8379-4970-b7ca-69d54fbd936b","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-06-24 19:15:41 +0000 UTC FinishedAt: 2026-06-24 19:39:08 +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:*caa4c981-5e76-42de-8934-27d9a18c3bd9,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-workflownjth2/series-workflownjth2-convert-artifact-3636162143/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": "dc0837ef-c920-4c49-8633-4e99fe6fd2f0", "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-workflownjth2/series-workflownjth2-build-action-1708020581/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflownjth2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","BPF_SYSCALL","INET","IPV6"],"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_icmp_send"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","BPF_SYSCALL","INET","IPV6"],"series_id":"2db1e935-8379-4970-b7ca-69d54fbd936b","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-06-24 19:39:17 +0000 UTC FinishedAt: 2026-06-24 19:39:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflownjth2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","BPF_SYSCALL","INET","IPV6"],"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_icmp_send"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","BPF_SYSCALL","INET","IPV6"],"series_id":"2db1e935-8379-4970-b7ca-69d54fbd936b","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-06-24 19:39:17 +0000 UTC FinishedAt: 2026-06-24 19:39:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflownjth2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","BPF_SYSCALL","INET","IPV6"],"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_icmp_send"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","BPF_SYSCALL","INET","IPV6"],"series_id":"2db1e935-8379-4970-b7ca-69d54fbd936b","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-06-24 19:39:17 +0000 UTC FinishedAt: 2026-06-24 19:39:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflownjth2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","BPF_SYSCALL","INET","IPV6"],"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_icmp_send"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","BPF_SYSCALL","INET","IPV6"],"series_id":"2db1e935-8379-4970-b7ca-69d54fbd936b","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-06-24 19:39:17 +0000 UTC FinishedAt: 2026-06-24 19:39:23 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","BPF_SYSCALL","INET","IPV6"],"series_id":"2db1e935-8379-4970-b7ca-69d54fbd936b","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-workflownjth2/series-workflownjth2-convert-artifact-2058515182/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflownjth2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","BPF_SYSCALL","INET","IPV6"],"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_icmp_send"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","BPF_SYSCALL","INET","IPV6"],"series_id":"2db1e935-8379-4970-b7ca-69d54fbd936b","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-06-24 19:39:28 +0000 UTC FinishedAt: 2026-06-24 19:41:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflownjth2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","BPF_SYSCALL","INET","IPV6"],"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_icmp_send"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","BPF_SYSCALL","INET","IPV6"],"series_id":"2db1e935-8379-4970-b7ca-69d54fbd936b","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-06-24 19:39:28 +0000 UTC FinishedAt: 2026-06-24 19:41:21 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*dc0837ef-c920-4c49-8633-4e99fe6fd2f0,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-workflownjth2/series-workflownjth2-build-action-1708020581/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-workflownjth2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","BPF_SYSCALL","INET","IPV6"],"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_icmp_send"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","BPF_SYSCALL","INET","IPV6"],"series_id":"2db1e935-8379-4970-b7ca-69d54fbd936b","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-06-24 19:41:31 +0000 UTC FinishedAt: 2026-06-24 19:41:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflownjth2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","BPF_SYSCALL","INET","IPV6"],"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_icmp_send"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","BPF_SYSCALL","INET","IPV6"],"series_id":"2db1e935-8379-4970-b7ca-69d54fbd936b","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-06-24 19:41:31 +0000 UTC FinishedAt: 2026-06-24 19:41:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflownjth2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","BPF_SYSCALL","INET","IPV6"],"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_icmp_send"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","BPF_SYSCALL","INET","IPV6"],"series_id":"2db1e935-8379-4970-b7ca-69d54fbd936b","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-06-24 19:41:31 +0000 UTC FinishedAt: 2026-06-24 20:12:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflownjth2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","BPF_SYSCALL","INET","IPV6"],"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_icmp_send"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","BPF_SYSCALL","INET","IPV6"],"series_id":"2db1e935-8379-4970-b7ca-69d54fbd936b","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-06-24 19:41:31 +0000 UTC FinishedAt: 2026-06-24 20:12:06 +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:*caa4c981-5e76-42de-8934-27d9a18c3bd9,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-workflownjth2/series-workflownjth2-convert-artifact-2058515182/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": "ec7aa4f5-ca20-46b8-b284-cd83409a9b8e", "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-workflownjth2/series-workflownjth2-build-action-1893483522/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflownjth2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","BPF_SYSCALL","INET","IPV6"],"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_icmp_send"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","BPF_SYSCALL","INET","IPV6"],"series_id":"2db1e935-8379-4970-b7ca-69d54fbd936b","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-06-24 19:41:31 +0000 UTC FinishedAt: 2026-06-24 20:11:43 +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:*caa4c981-5e76-42de-8934-27d9a18c3bd9,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-workflownjth2/series-workflownjth2-convert-artifact-2058515182/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": "ec7aa4f5-ca20-46b8-b284-cd83409a9b8e", "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-workflownjth2/series-workflownjth2-build-action-1893483522/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflownjth2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","BPF_SYSCALL","INET","IPV6"],"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_icmp_send"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","BPF_SYSCALL","INET","IPV6"],"series_id":"2db1e935-8379-4970-b7ca-69d54fbd936b","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-06-24 20:12:06 +0000 UTC FinishedAt: 2026-06-24 20:12:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflownjth2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","BPF_SYSCALL","INET","IPV6"],"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_icmp_send"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","BPF_SYSCALL","INET","IPV6"],"series_id":"2db1e935-8379-4970-b7ca-69d54fbd936b","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-06-24 20:12:06 +0000 UTC FinishedAt: 2026-06-24 20:12:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflownjth2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","BPF_SYSCALL","INET","IPV6"],"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_icmp_send"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","BPF_SYSCALL","INET","IPV6"],"series_id":"2db1e935-8379-4970-b7ca-69d54fbd936b","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-06-24 20:12:06 +0000 UTC FinishedAt: 2026-06-24 20:14:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflownjth2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","BPF_SYSCALL","INET","IPV6"],"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_icmp_send"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","BPF_SYSCALL","INET","IPV6"],"series_id":"2db1e935-8379-4970-b7ca-69d54fbd936b","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-06-24 20:12:06 +0000 UTC FinishedAt: 2026-06-24 20:14:02 +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:*ec7aa4f5-ca20-46b8-b284-cd83409a9b8e,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-workflownjth2/series-workflownjth2-build-action-1893483522/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-workflownjth2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","BPF_SYSCALL","INET","IPV6"],"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_icmp_send"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","BPF_SYSCALL","INET","IPV6"],"series_id":"2db1e935-8379-4970-b7ca-69d54fbd936b","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-06-24 20:14:12 +0000 UTC FinishedAt: 2026-06-24 23:19:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflownjth2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","BPF_SYSCALL","INET","IPV6"],"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_icmp_send"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","BPF_SYSCALL","INET","IPV6"],"series_id":"2db1e935-8379-4970-b7ca-69d54fbd936b","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-06-24 20:14:12 +0000 UTC FinishedAt: 2026-06-24 23:19:13 +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_icmp_send"],"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:*dc0837ef-c920-4c49-8633-4e99fe6fd2f0,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*ec7aa4f5-ca20-46b8-b284-cd83409a9b8e,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-workflownjth2/series-workflownjth2-build-action-1708020581/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-workflownjth2/series-workflownjth2-build-action-1893483522/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflownjth2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","BPF_SYSCALL","INET","IPV6"],"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_icmp_send"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","BPF_SYSCALL","INET","IPV6"],"series_id":"2db1e935-8379-4970-b7ca-69d54fbd936b","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-06-24 20:14:12 +0000 UTC FinishedAt: 2026-06-24 20:15:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflownjth2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","BPF_SYSCALL","INET","IPV6"],"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_icmp_send"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","BPF_SYSCALL","INET","IPV6"],"series_id":"2db1e935-8379-4970-b7ca-69d54fbd936b","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-06-24 20:14:12 +0000 UTC FinishedAt: 2026-06-24 20:14:45 +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_icmp_send"],"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-workflownjth2/series-workflownjth2-convert-artifact-789020563/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflownjth2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","BPF_SYSCALL","INET","IPV6"],"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_icmp_send"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","BPF_SYSCALL","INET","IPV6"],"series_id":"2db1e935-8379-4970-b7ca-69d54fbd936b","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-06-24 20:14:12 +0000 UTC FinishedAt: 2026-06-24 20:14:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflownjth2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","BPF_SYSCALL","INET","IPV6"],"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_icmp_send"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","BPF_SYSCALL","INET","IPV6"],"series_id":"2db1e935-8379-4970-b7ca-69d54fbd936b","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-06-24 20:14:12 +0000 UTC FinishedAt: 2026-06-24 20:14:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflownjth2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","BPF_SYSCALL","INET","IPV6"],"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_icmp_send"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","BPF_SYSCALL","INET","IPV6"],"series_id":"2db1e935-8379-4970-b7ca-69d54fbd936b","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-06-24 20:14:12 +0000 UTC FinishedAt: 2026-06-24 20:14:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflownjth2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","BPF_SYSCALL","INET","IPV6"],"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_icmp_send"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","BPF_SYSCALL","INET","IPV6"],"series_id":"2db1e935-8379-4970-b7ca-69d54fbd936b","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-06-24 20:15:04 +0000 UTC FinishedAt: 2026-06-24 23:19:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflownjth2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","BPF_SYSCALL","INET","IPV6"],"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_icmp_send"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","BPF_SYSCALL","INET","IPV6"],"series_id":"2db1e935-8379-4970-b7ca-69d54fbd936b","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-06-24 20:15:04 +0000 UTC FinishedAt: 2026-06-24 23:19:03 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*dc0837ef-c920-4c49-8633-4e99fe6fd2f0,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*ec7aa4f5-ca20-46b8-b284-cd83409a9b8e,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-workflownjth2/series-workflownjth2-build-action-1708020581/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-workflownjth2/series-workflownjth2-build-action-1893483522/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-workflownjth2/series-workflownjth2-convert-artifact-789020563/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,}