Name: series-workflown6wkh Phase: Succeeded StartedAt: 2026-08-03 12:40:18 +0000 UTC FinishedAt: 2026-08-03 16:27:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflown6wkh[0] Phase: Succeeded StartedAt: 2026-08-03 12:40:18 +0000 UTC FinishedAt: 2026-08-03 12:43:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflown6wkh[0].run-triage Phase: Succeeded StartedAt: 2026-08-03 12:40:18 +0000 UTC FinishedAt: 2026-08-03 12:43:15 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "bpf", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git", "commit_hash": "e5fd3f514e27db1f05fbd72ba615d74941e23c51", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "bpf", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git", "commit_hash": "e5fd3f514e27db1f05fbd72ba615d74941e23c51", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL" ], "series_id": "3d7a2292-e563-47d3-b8b0-3c0ffd6112c5" }, "track": "KASAN", "fuzz": { "focus": [ "bpf" ], "focus_symbols": [ "bpf_check" ], "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+CgkJCTx0ZD4yMDI2LzA4LzAzIDEyOjQyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YnBmX2NoZWNrJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBCUEYgdmVyaWZpZXImIzM5O3MgbG9naWMgZm9yIGhhbmRsaW5nIFBUUl9UT19CVEZfSUQgd2l0aCBNRU1fQUxMT0MgYW5kIFBUUl9VTlRSVVNURUQgZmxhZ3MsIHNwZWNpZmljYWxseSBpbiBjaGVja19wdHJfdG9fYnRmX2FjY2VzcyBhbmQgY2hlY2tfa2Z1bmNfYXJncy4gVGhlc2UgY2hhbmdlcyBhZmZlY3QgaG93IHRoZSB2ZXJpZmllciB2YWxpZGF0ZXMgbWVtb3J5IGFjY2Vzc2VzIGFuZCBrZnVuYyBhcmd1bWVudHMgZm9yIGFsbG9jYXRlZCBvYmplY3RzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgQlBGIHZlcmlmaWVyIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAxMjo0MjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDM5MmY0ODE3Y2IyMWEzOGFkNTRkYzczZGE3NmVjZDk1MjhlZWViYTBcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEF1ZyAzIDEyOjQyOjE3IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmggYi9pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oXG5pbmRleCAzOWE4NTFlNjkwZWM0Li43MDE0ZDYyZmUzZDFjIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaFxuQEAgLTEzMDcsNyAmIzQzOzEzMDcsMTYgQEAgc3RhdGljIGlubGluZSBib29sIGJwZl90eXBlX2hhc191bnNhZmVfbW9kaWZpZXJzKHUzMiB0eXBlKVxuIFxuIHN0YXRpYyBpbmxpbmUgYm9vbCB0eXBlX2lzX3B0cl9hbGxvY19vYmoodTMyIHR5cGUpXG4ge1xuLVx0cmV0dXJuIGJhc2VfdHlwZSh0eXBlKSA9PSBQVFJfVE9fQlRGX0lEIFx1MDAyNlx1MDAyNiB0eXBlX2ZsYWcodHlwZSkgXHUwMDI2IE1FTV9BTExPQztcbiYjNDM7XHRyZXR1cm4gYmFzZV90eXBlKHR5cGUpID09IFBUUl9UT19CVEZfSUQgXHUwMDI2XHUwMDI2XG4mIzQzO1x0ICAgICAgIHR5cGVfZmxhZyh0eXBlKSBcdTAwMjYgTUVNX0FMTE9DIFx1MDAyNlx1MDAyNlxuJiM0MztcdCAgICAgICAhKHR5cGVfZmxhZyh0eXBlKSBcdTAwMjYgUFRSX1VOVFJVU1RFRCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbmxpbmUgYm9vbCB0eXBlX2lzX3VudHJ1c3RlZF9wdHJfYWxsb2Nfb2JqKHUzMiB0eXBlKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIGJhc2VfdHlwZSh0eXBlKSA9PSBQVFJfVE9fQlRGX0lEIFx1MDAyNlx1MDAyNlxuJiM0MztcdCAgICAgICB0eXBlX2ZsYWcodHlwZSkgXHUwMDI2IE1FTV9BTExPQyBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgICAgdHlwZV9mbGFnKHR5cGUpIFx1MDAyNiBQVFJfVU5UUlVTVEVEO1xuIH1cbiBcbiBzdGF0aWMgaW5saW5lIGJvb2wgdHlwZV9pc19ub25fb3duaW5nX3JlZih1MzIgdHlwZSlcbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL3ZlcmlmaWVyLmMgYi9rZXJuZWwvYnBmL3ZlcmlmaWVyLmNcbmluZGV4IGZkYzVmYmIxZjc4Y2EuLjhiMzVjNjM3ODA3OTggMTAwNjQ0XG4tLS0gYS9rZXJuZWwvYnBmL3ZlcmlmaWVyLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9icGYvdmVyaWZpZXIuY1xuQEAgLTU4MDksNyAmIzQzOzU4MDksMTMgQEAgc3RhdGljIGludCBjaGVja19wdHJfdG9fYnRmX2FjY2VzcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuIFx0XHRcdHJldHVybiAtRUFDQ0VTO1xuIFx0XHR9XG4gXG4tXHRcdGlmICh0eXBlX2lzX2FsbG9jKHJlZy1cdTAwM2V0eXBlKSBcdTAwMjZcdTAwMjYgIXR5cGVfaXNfbm9uX293bmluZ19yZWYocmVnLVx1MDAzZXR5cGUpIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0LypcbiYjNDM7XHRcdCAqIFNraXAgdGhpcyByZWZlcmVuY2VkLUlEIHNhbml0eSBjaGVjayBmb3IgdW50cnVzdGVkIGFsbG9jYXRlZCBvYmplY3RzO1xuJiM0MztcdFx0ICogdGhlIGFjY2VzcyBjaGVjayBhYm92ZSBhbHJlYWR5IHJlamVjdHMgd3JpdGVzIHRocm91Z2ggdGhlbS5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0aWYgKHR5cGVfaXNfYWxsb2MocmVnLVx1MDAzZXR5cGUpIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0ICAgICF0eXBlX2lzX3VudHJ1c3RlZF9wdHJfYWxsb2Nfb2JqKHJlZy1cdTAwM2V0eXBlKSBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdCAgICAhdHlwZV9pc19ub25fb3duaW5nX3JlZihyZWctXHUwMDNldHlwZSkgXHUwMDI2XHUwMDI2XG4gXHRcdCAgICAhKHJlZy1cdTAwM2V0eXBlIFx1MDAyNiBNRU1fUkNVKSBcdTAwMjZcdTAwMjYgIXJlZ19pc19yZWZlcmVuY2VkKGVudiwgcmVnKSkge1xuIFx0XHRcdHZlcmlmaWVyX2J1ZyhlbnYsIFwmIzM0O2FsbG9jYXRlZCBvYmplY3QgbXVzdCBoYXZlIGEgcmVmZXJlbmNlZCBpZFwmIzM0Oyk7XG4gXHRcdFx0cmV0dXJuIC1FRkFVTFQ7XG5AQCAtMTI0MTksNyAmIzQzOzEyNDI1LDcgQEAgc3RhdGljIGludCBjaGVja19rZnVuY19hcmdzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfa2Z1bmNfY2FsbF9cbiBcdFx0XHRcdFx0cmVnX2FyZ19uYW1lKGVudiwgYXJnbm8pKTtcbiBcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuIFx0XHRcdH1cbi1cdFx0XHRpZiAoIXR5cGVfaXNfbm9uX293bmluZ19yZWYocmVnLVx1MDAzZXR5cGUpKVxuJiM0MztcdFx0XHRpZiAoIXR5cGVfaXNfbm9uX293bmluZ19yZWYocmVnLVx1MDAzZXR5cGUpIFx1MDAyNlx1MDAyNiByZWdfaXNfcmVmZXJlbmNlZChlbnYsIHJlZykpXG4gXHRcdFx0XHRtZXRhLVx1MDAzZWFyZ19vd25pbmdfcmVmID0gdHJ1ZTtcbiBcbiBcdFx0XHRyZWMgPSByZWdfYnRmX3JlY29yZChyZWcpO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9yZWZjb3VudGVkX2twdHIuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9yZWZjb3VudGVkX2twdHIuY1xuaW5kZXggNjE5MDZmNDgwMjVjYy4uYjcwYmU4YjUyZmY4MCAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9yZWZjb3VudGVkX2twdHIuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3JlZmNvdW50ZWRfa3B0ci5jXG5AQCAtMjMsNiAmIzQzOzIzLDE1IEBAIHN0cnVjdCBtYXBfdmFsdWUge1xuIFx0c3RydWN0IG5vZGVfZGF0YSBfX2twdHIgKm5vZGU7XG4gfTtcbiBcbiYjNDM7c3RydWN0IG5vZGVfcmVmY291bnRfb25seSB7XG4mIzQzO1x0bG9uZyBrZXk7XG4mIzQzO1x0c3RydWN0IGJwZl9yZWZjb3VudCByZWZjb3VudDtcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3N0cnVjdCBtYXBfdmFsdWVfcmVmY291bnRfb25seSB7XG4mIzQzO1x0c3RydWN0IG5vZGVfcmVmY291bnRfb25seSBfX2twdHIgKm5vZGU7XG4mIzQzO307XG4mIzQzO1xuIHN0cnVjdCB7XG4gXHRfX3VpbnQodHlwZSwgQlBGX01BUF9UWVBFX0FSUkFZKTtcbiBcdF9fdHlwZShrZXksIGludCk7XG5AQCAtMzAsNiAmIzQzOzM5LDEzIEBAIHN0cnVjdCB7XG4gXHRfX3VpbnQobWF4X2VudHJpZXMsIDIpO1xuIH0gc3Rhc2hlZF9ub2RlcyBTRUMoXCYjMzQ7Lm1hcHNcJiMzNDspO1xuIFxuJiM0MztzdHJ1Y3Qge1xuJiM0MztcdF9fdWludCh0eXBlLCBCUEZfTUFQX1RZUEVfQVJSQVkpO1xuJiM0MztcdF9fdHlwZShrZXksIGludCk7XG4mIzQzO1x0X190eXBlKHZhbHVlLCBzdHJ1Y3QgbWFwX3ZhbHVlX3JlZmNvdW50X29ubHkpO1xuJiM0MztcdF9fdWludChtYXhfZW50cmllcywgMSk7XG4mIzQzO30gc3Rhc2hlZF9yZWZjb3VudF9vbmx5IFNFQyhcJiMzNDsubWFwc1wmIzM0Oyk7XG4mIzQzO1xuIHN0cnVjdCBub2RlX2FjcXVpcmUge1xuIFx0bG9uZyBrZXk7XG4gXHRsb25nIGRhdGE7XG5AQCAtODMyLDYgJiM0Mzs4NDgsMTUxIEBAIGxvbmcgcmJ0cmVlX3JlZmNvdW50ZWRfbm9kZV9yZWZfZXNjYXBlc19vd25pbmdfaW5wdXQodm9pZCAqY3R4KVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuJiM0MztTRUMoXCYjMzQ7dGNcJiMzNDspXG4mIzQzO19fc3VjY2Vzc1xuJiM0Mztsb25nIHJlZmNvdW50X2FjcXVpcmVfb3duaW5nX2lucHV0X25vX251bGxfY2hlY2sodm9pZCAqY3R4KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IG5vZGVfcmVmY291bnRfb25seSAqbiwgKm07XG4mIzQzO1xuJiM0MztcdG4gPSBicGZfb2JqX25ldyh0eXBlb2YoKm4pKTtcbiYjNDM7XHRpZiAoIW4pXG4mIzQzO1x0XHRyZXR1cm4gMTtcbiYjNDM7XG4mIzQzO1x0bSA9IGJwZl9yZWZjb3VudF9hY3F1aXJlKG4pO1xuJiM0MztcdGJwZl9vYmpfZHJvcChtKTtcbiYjNDM7XHRicGZfb2JqX2Ryb3Aobik7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztTRUMoXCYjMzQ7dGNcJiMzNDspXG4mIzQzO19fc3VjY2Vzc1xuJiM0Mztsb25nIHJlZmNvdW50X2FjcXVpcmVfcmN1X21hcF9rcHRyX251bGxfY2hlY2tlZCh2b2lkICpjdHgpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgbWFwX3ZhbHVlX3JlZmNvdW50X29ubHkgKm1hcHZhbDtcbiYjNDM7XHRzdHJ1Y3Qgbm9kZV9yZWZjb3VudF9vbmx5ICpuLCAqbTtcbiYjNDM7XHRpbnQgaWR4ID0gMDtcbiYjNDM7XG4mIzQzO1x0bWFwdmFsID0gYnBmX21hcF9sb29rdXBfZWxlbShcdTAwMjZzdGFzaGVkX3JlZmNvdW50X29ubHksIFx1MDAyNmlkeCk7XG4mIzQzO1x0aWYgKCFtYXB2YWwpXG4mIzQzO1x0XHRyZXR1cm4gMTtcbiYjNDM7XG4mIzQzO1x0YnBmX3JjdV9yZWFkX2xvY2soKTtcbiYjNDM7XHRuID0gbWFwdmFsLVx1MDAzZW5vZGU7XG4mIzQzO1x0aWYgKCFuKSB7XG4mIzQzO1x0XHRicGZfcmN1X3JlYWRfdW5sb2NrKCk7XG4mIzQzO1x0XHRyZXR1cm4gMjtcbiYjNDM7XHR9XG4mIzQzO1x0bSA9IGJwZl9yZWZjb3VudF9hY3F1aXJlKG4pO1xuJiM0MztcdGJwZl9yY3VfcmVhZF91bmxvY2soKTtcbiYjNDM7XG4mIzQzO1x0aWYgKCFtKVxuJiM0MztcdFx0cmV0dXJuIDM7XG4mIzQzO1x0YnBmX29ial9kcm9wKG0pO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7U0VDKFwmIzM0Oz90Y1wmIzM0OylcbiYjNDM7X19zdWNjZXNzXG4mIzQzO2xvbmcgbWFwX2twdHJfcmVhZF9hZnRlcl9yY3VfdW5sb2NrKHZvaWQgKmN0eClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBtYXBfdmFsdWVfcmVmY291bnRfb25seSAqbWFwdmFsO1xuJiM0MztcdHN0cnVjdCBub2RlX3JlZmNvdW50X29ubHkgKm47XG4mIzQzO1x0aW50IGlkeCA9IDA7XG4mIzQzO1xuJiM0MztcdG1hcHZhbCA9IGJwZl9tYXBfbG9va3VwX2VsZW0oXHUwMDI2c3Rhc2hlZF9yZWZjb3VudF9vbmx5LCBcdTAwMjZpZHgpO1xuJiM0MztcdGlmICghbWFwdmFsKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdGJwZl9yY3VfcmVhZF9sb2NrKCk7XG4mIzQzO1x0biA9IG1hcHZhbC1cdTAwM2Vub2RlO1xuJiM0MztcdGlmICghbikge1xuJiM0MztcdFx0YnBmX3JjdV9yZWFkX3VubG9jaygpO1xuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1x0fVxuJiM0MztcdGJwZl9yY3VfcmVhZF91bmxvY2soKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIG4tXHUwMDNla2V5O1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztTRUMoXCYjMzQ7P3RjXCYjMzQ7KVxuJiM0MztfX2ZhaWx1cmUgX19tc2coXCYjMzQ7aXMgbmVpdGhlciBvd25pbmcgb3Igbm9uLW93bmluZyByZWZcJiMzNDspXG4mIzQzO2xvbmcgcmVmY291bnRfYWNxdWlyZV9ncmFwaF9hZnRlcl9yY3VfdW5sb2NrKHZvaWQgKmN0eClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBtYXBfdmFsdWUgKm1hcHZhbDtcbiYjNDM7XHRzdHJ1Y3Qgbm9kZV9kYXRhICpuLCAqbTtcbiYjNDM7XHRpbnQgaWR4ID0gMDtcbiYjNDM7XG4mIzQzO1x0bWFwdmFsID0gYnBmX21hcF9sb29rdXBfZWxlbShcdTAwMjZzdGFzaGVkX25vZGVzLCBcdTAwMjZpZHgpO1xuJiM0MztcdGlmICghbWFwdmFsKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdGJwZl9yY3VfcmVhZF9sb2NrKCk7XG4mIzQzO1x0biA9IG1hcHZhbC1cdTAwM2Vub2RlO1xuJiM0MztcdGlmICghbikge1xuJiM0MztcdFx0YnBmX3JjdV9yZWFkX3VubG9jaygpO1xuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1x0fVxuJiM0MztcdGJwZl9yY3VfcmVhZF91bmxvY2soKTtcbiYjNDM7XG4mIzQzO1x0bSA9IGJwZl9yZWZjb3VudF9hY3F1aXJlKG4pO1xuJiM0MztcdGlmIChtKVxuJiM0MztcdFx0YnBmX29ial9kcm9wKG0pO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7U0VDKFwmIzM0Oz90Y1wmIzM0OylcbiYjNDM7X19mYWlsdXJlIF9fbXNnKFwmIzM0O29ubHkgcmVhZCBpcyBzdXBwb3J0ZWRcJiMzNDspXG4mIzQzO2xvbmcgZ3JhcGhfbWFwX2twdHJfd3JpdGVfYWZ0ZXJfcmN1X3VubG9jayh2b2lkICpjdHgpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgbWFwX3ZhbHVlICptYXB2YWw7XG4mIzQzO1x0c3RydWN0IG5vZGVfZGF0YSAqbjtcbiYjNDM7XHRpbnQgaWR4ID0gMDtcbiYjNDM7XG4mIzQzO1x0bWFwdmFsID0gYnBmX21hcF9sb29rdXBfZWxlbShcdTAwMjZzdGFzaGVkX25vZGVzLCBcdTAwMjZpZHgpO1xuJiM0MztcdGlmICghbWFwdmFsKVxuJiM0MztcdFx0cmV0dXJuIDE7XG4mIzQzO1xuJiM0MztcdGJwZl9yY3VfcmVhZF9sb2NrKCk7XG4mIzQzO1x0biA9IG1hcHZhbC1cdTAwM2Vub2RlO1xuJiM0MztcdGlmICghbikge1xuJiM0MztcdFx0YnBmX3JjdV9yZWFkX3VubG9jaygpO1xuJiM0MztcdFx0cmV0dXJuIDI7XG4mIzQzO1x0fVxuJiM0MztcdGJwZl9yY3VfcmVhZF91bmxvY2soKTtcbiYjNDM7XG4mIzQzO1x0bi1cdTAwM2VrZXkgPSAxO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztTRUMoXCYjMzQ7P3RjXCYjMzQ7KVxuJiM0MztfX3N1Y2Nlc3NcbiYjNDM7bG9uZyBncmFwaF9tYXBfa3B0cl9yZWFkX2FmdGVyX3NwaW5fdW5sb2NrKHZvaWQgKmN0eClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBtYXBfdmFsdWUgKm1hcHZhbDtcbiYjNDM7XHRzdHJ1Y3Qgbm9kZV9kYXRhICpuO1xuJiM0MztcdGludCBpZHggPSAwO1xuJiM0MztcbiYjNDM7XHRtYXB2YWwgPSBicGZfbWFwX2xvb2t1cF9lbGVtKFx1MDAyNnN0YXNoZWRfbm9kZXMsIFx1MDAyNmlkeCk7XG4mIzQzO1x0aWYgKCFtYXB2YWwpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO1x0YnBmX3JjdV9yZWFkX2xvY2soKTtcbiYjNDM7XHRuID0gbWFwdmFsLVx1MDAzZW5vZGU7XG4mIzQzO1x0aWYgKCFuKSB7XG4mIzQzO1x0XHRicGZfcmN1X3JlYWRfdW5sb2NrKCk7XG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XHR9XG4mIzQzO1x0YnBmX3JjdV9yZWFkX3VubG9jaygpO1xuJiM0MztcbiYjNDM7XHRicGZfc3Bpbl9sb2NrKFx1MDAyNmxvY2spO1xuJiM0MztcdGJwZl9zcGluX3VubG9jayhcdTAwMjZsb2NrKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIG4tXHUwMDNla2V5O1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBsb25nIF9fc3Rhc2hfbWFwX2VtcHR5X3hjaGcoc3RydWN0IG5vZGVfZGF0YSAqbiwgaW50IGlkeClcbiB7XG4gXHRzdHJ1Y3QgbWFwX3ZhbHVlICptYXB2YWwgPSBicGZfbWFwX2xvb2t1cF9lbGVtKFx1MDAyNnN0YXNoZWRfbm9kZXMsIFx1MDAyNmlkeCk7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3JlZmNvdW50ZWRfa3B0cl9mYWlsLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvcmVmY291bnRlZF9rcHRyX2ZhaWwuY1xuaW5kZXggMDI0ZWYyYWFlMjAwOC4uMzQwOGY2OGFkNDQ0ZCAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9yZWZjb3VudGVkX2twdHJfZmFpbC5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvcmVmY291bnRlZF9rcHRyX2ZhaWwuY1xuQEAgLTE5LDYgJiM0MzsxOSwxNSBAQCBzdHJ1Y3Qgbm9kZV9yZWZjb3VudGVkIHtcbiBcdHN0cnVjdCBicGZfcmVmY291bnQgcmVmY291bnQ7XG4gfTtcbiBcbiYjNDM7c3RydWN0IG5vZGVfcmVmY291bnRfb25seSB7XG4mIzQzO1x0bG9uZyBrZXk7XG4mIzQzO1x0c3RydWN0IGJwZl9yZWZjb3VudCByZWZjb3VudDtcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3N0cnVjdCBtYXBfdmFsdWVfcmVmY291bnRfb25seSB7XG4mIzQzO1x0c3RydWN0IG5vZGVfcmVmY291bnRfb25seSBfX2twdHIgKm5vZGU7XG4mIzQzO307XG4mIzQzO1xuIGV4dGVybiB2b2lkIGJwZl9yY3VfcmVhZF9sb2NrKHZvaWQpIF9fa3N5bTtcbiBleHRlcm4gdm9pZCBicGZfcmN1X3JlYWRfdW5sb2NrKHZvaWQpIF9fa3N5bTtcbiBcbkBAIC0yOCw2ICYjNDM7MzcsMTMgQEAgcHJpdmF0ZShBKSBzdHJ1Y3QgYnBmX3JiX3Jvb3QgZ3Jvb3QgX19jb250YWlucyhub2RlX2FjcXVpcmUsIG5vZGUpO1xuIHByaXZhdGUoQikgc3RydWN0IGJwZl9zcGluX2xvY2sgbG9jaztcbiBwcml2YXRlKEIpIHN0cnVjdCBicGZfbGlzdF9oZWFkIGhlYWQgX19jb250YWlucyhub2RlX3JlZmNvdW50ZWQsIGxpc3QpO1xuIFxuJiM0MztzdHJ1Y3Qge1xuJiM0MztcdF9fdWludCh0eXBlLCBCUEZfTUFQX1RZUEVfQVJSQVkpO1xuJiM0MztcdF9fdHlwZShrZXksIGludCk7XG4mIzQzO1x0X190eXBlKHZhbHVlLCBzdHJ1Y3QgbWFwX3ZhbHVlX3JlZmNvdW50X29ubHkpO1xuJiM0MztcdF9fdWludChtYXhfZW50cmllcywgMSk7XG4mIzQzO30gc3Rhc2hlZF9yZWZjb3VudF9vbmx5IFNFQyhcJiMzNDsubWFwc1wmIzM0Oyk7XG4mIzQzO1xuIHN0YXRpYyBib29sIGxlc3Moc3RydWN0IGJwZl9yYl9ub2RlICphLCBjb25zdCBzdHJ1Y3QgYnBmX3JiX25vZGUgKmIpXG4ge1xuIFx0c3RydWN0IG5vZGVfYWNxdWlyZSAqbm9kZV9hO1xuQEAgLTgwLDYgJiM0Mzs5Niw2NCBAQCBsb25nIHJlZmNvdW50X2FjcXVpcmVfbWF5YmVfbnVsbCh2b2lkICpjdHgpXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4mIzQzO1NFQyhcJiMzNDs/dGNcJiMzNDspXG4mIzQzO19fZmFpbHVyZSBfX21zZyhcJiMzNDtQb3NzaWJseSBOVUxMIHBvaW50ZXIgcGFzc2VkIHRvIHRydXN0ZWQgUjFcJiMzNDspXG4mIzQzO2xvbmcgcmVmY291bnRfYWNxdWlyZV9yY3VfbWFwX2twdHJfdW5jaGVja2VkX2Ryb3Aodm9pZCAqY3R4KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IG1hcF92YWx1ZV9yZWZjb3VudF9vbmx5ICptYXB2YWw7XG4mIzQzO1x0c3RydWN0IG5vZGVfcmVmY291bnRfb25seSAqdG1wLCAqbiwgKm07XG4mIzQzO1x0aW50IGlkeCA9IDA7XG4mIzQzO1xuJiM0MztcdHRtcCA9IGJwZl9vYmpfbmV3KHR5cGVvZigqdG1wKSk7XG4mIzQzO1x0aWYgKCF0bXApXG4mIzQzO1x0XHRyZXR1cm4gMztcbiYjNDM7XHRicGZfb2JqX2Ryb3AodG1wKTtcbiYjNDM7XG4mIzQzO1x0bWFwdmFsID0gYnBmX21hcF9sb29rdXBfZWxlbShcdTAwMjZzdGFzaGVkX3JlZmNvdW50X29ubHksIFx1MDAyNmlkeCk7XG4mIzQzO1x0aWYgKCFtYXB2YWwpXG4mIzQzO1x0XHRyZXR1cm4gMTtcbiYjNDM7XG4mIzQzO1x0YnBmX3JjdV9yZWFkX2xvY2soKTtcbiYjNDM7XHRuID0gbWFwdmFsLVx1MDAzZW5vZGU7XG4mIzQzO1x0aWYgKCFuKSB7XG4mIzQzO1x0XHRicGZfcmN1X3JlYWRfdW5sb2NrKCk7XG4mIzQzO1x0XHRyZXR1cm4gMjtcbiYjNDM7XHR9XG4mIzQzO1x0bSA9IGJwZl9yZWZjb3VudF9hY3F1aXJlKG4pO1xuJiM0MztcdGJwZl9yY3VfcmVhZF91bmxvY2soKTtcbiYjNDM7XG4mIzQzO1x0YnBmX29ial9kcm9wKG0pO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7U0VDKFwmIzM0Oz90Y1wmIzM0OylcbiYjNDM7X19mYWlsdXJlIF9fbXNnKFwmIzM0O2lzIG5laXRoZXIgb3duaW5nIG9yIG5vbi1vd25pbmcgcmVmXCYjMzQ7KVxuJiM0Mztsb25nIHJlZmNvdW50X2FjcXVpcmVfYWZ0ZXJfcmN1X3VubG9jayh2b2lkICpjdHgpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgbWFwX3ZhbHVlX3JlZmNvdW50X29ubHkgKm1hcHZhbDtcbiYjNDM7XHRzdHJ1Y3Qgbm9kZV9yZWZjb3VudF9vbmx5ICpuLCAqbTtcbiYjNDM7XHRpbnQgaWR4ID0gMDtcbiYjNDM7XG4mIzQzO1x0bWFwdmFsID0gYnBmX21hcF9sb29rdXBfZWxlbShcdTAwMjZzdGFzaGVkX3JlZmNvdW50X29ubHksIFx1MDAyNmlkeCk7XG4mIzQzO1x0aWYgKCFtYXB2YWwpXG4mIzQzO1x0XHRyZXR1cm4gMTtcbiYjNDM7XG4mIzQzO1x0YnBmX3JjdV9yZWFkX2xvY2soKTtcbiYjNDM7XHRuID0gbWFwdmFsLVx1MDAzZW5vZGU7XG4mIzQzO1x0aWYgKCFuKSB7XG4mIzQzO1x0XHRicGZfcmN1X3JlYWRfdW5sb2NrKCk7XG4mIzQzO1x0XHRyZXR1cm4gMjtcbiYjNDM7XHR9XG4mIzQzO1x0YnBmX3JjdV9yZWFkX3VubG9jaygpO1xuJiM0MztcbiYjNDM7XHRtID0gYnBmX3JlZmNvdW50X2FjcXVpcmUobik7XG4mIzQzO1x0aWYgKG0pXG4mIzQzO1x0XHRicGZfb2JqX2Ryb3AobSk7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuIFNFQyhcJiMzNDs/dGNcJiMzNDspXG4gX19mYWlsdXJlIF9fbXNnKFwmIzM0O1VucmVsZWFzZWQgcmVmZXJlbmNlIGlkPTMgYWxsb2NfaW5zbj17e1swLTldJiM0Mzt9fVwmIzM0OylcbiBsb25nIHJidHJlZV9yZWZjb3VudGVkX25vZGVfcmVmX2VzY2FwZXNfb3duaW5nX2lucHV0KHZvaWQgKmN0eClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAxMjo0MjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDticGZfY2hlY2smIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEJQRiB2ZXJpZmllciYjMzk7cyBsb2dpYyBmb3IgaGFuZGxpbmcgUFRSX1RPX0JURl9JRCB3aXRoIE1FTV9BTExPQyBhbmQgUFRSX1VOVFJVU1RFRCBmbGFncywgc3BlY2lmaWNhbGx5IGluIGNoZWNrX3B0cl90b19idGZfYWNjZXNzIGFuZCBjaGVja19rZnVuY19hcmdzLiBUaGVzZSBjaGFuZ2VzIGFmZmVjdCBob3cgdGhlIHZlcmlmaWVyIHZhbGlkYXRlcyBtZW1vcnkgYWNjZXNzZXMgYW5kIGtmdW5jIGFyZ3VtZW50cyBmb3IgYWxsb2NhdGVkIG9iamVjdHMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBCUEYgdmVyaWZpZXIgdGhhdCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMzkyZjQ4MTdjYjIxYTM4YWQ1NGRjNzNkYTc2ZWNkOTUyOGVlZWJhMApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBNb24gQXVnIDMgMTI6NDI6MTcgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oIGIvaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaAppbmRleCAzOWE4NTFlNjkwZWM0Li43MDE0ZDYyZmUzZDFjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmgKQEAgLTEzMDcsNyAmIzQzOzEzMDcsMTYgQEAgc3RhdGljIGlubGluZSBib29sIGJwZl90eXBlX2hhc191bnNhZmVfbW9kaWZpZXJzKHUzMiB0eXBlKQogCiBzdGF0aWMgaW5saW5lIGJvb2wgdHlwZV9pc19wdHJfYWxsb2Nfb2JqKHUzMiB0eXBlKQogewotCXJldHVybiBiYXNlX3R5cGUodHlwZSkgPT0gUFRSX1RPX0JURl9JRCAmYW1wOyZhbXA7IHR5cGVfZmxhZyh0eXBlKSAmYW1wOyBNRU1fQUxMT0M7CiYjNDM7CXJldHVybiBiYXNlX3R5cGUodHlwZSkgPT0gUFRSX1RPX0JURl9JRCAmYW1wOyZhbXA7CiYjNDM7CSAgICAgICB0eXBlX2ZsYWcodHlwZSkgJmFtcDsgTUVNX0FMTE9DICZhbXA7JmFtcDsKJiM0MzsJICAgICAgICEodHlwZV9mbGFnKHR5cGUpICZhbXA7IFBUUl9VTlRSVVNURUQpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgdHlwZV9pc191bnRydXN0ZWRfcHRyX2FsbG9jX29iaih1MzIgdHlwZSkKJiM0Mzt7CiYjNDM7CXJldHVybiBiYXNlX3R5cGUodHlwZSkgPT0gUFRSX1RPX0JURl9JRCAmYW1wOyZhbXA7CiYjNDM7CSAgICAgICB0eXBlX2ZsYWcodHlwZSkgJmFtcDsgTUVNX0FMTE9DICZhbXA7JmFtcDsKJiM0MzsJICAgICAgIHR5cGVfZmxhZyh0eXBlKSAmYW1wOyBQVFJfVU5UUlVTVEVEOwogfQogCiBzdGF0aWMgaW5saW5lIGJvb2wgdHlwZV9pc19ub25fb3duaW5nX3JlZih1MzIgdHlwZSkKZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvdmVyaWZpZXIuYyBiL2tlcm5lbC9icGYvdmVyaWZpZXIuYwppbmRleCBmZGM1ZmJiMWY3OGNhLi44YjM1YzYzNzgwNzk4IDEwMDY0NAotLS0gYS9rZXJuZWwvYnBmL3ZlcmlmaWVyLmMKJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2JwZi92ZXJpZmllci5jCkBAIC01ODA5LDcgJiM0Mzs1ODA5LDEzIEBAIHN0YXRpYyBpbnQgY2hlY2tfcHRyX3RvX2J0Zl9hY2Nlc3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwKIAkJCXJldHVybiAtRUFDQ0VTOwogCQl9CiAKLQkJaWYgKHR5cGVfaXNfYWxsb2MocmVnLSZndDt0eXBlKSAmYW1wOyZhbXA7ICF0eXBlX2lzX25vbl9vd25pbmdfcmVmKHJlZy0mZ3Q7dHlwZSkgJmFtcDsmYW1wOwomIzQzOwkJLyoKJiM0MzsJCSAqIFNraXAgdGhpcyByZWZlcmVuY2VkLUlEIHNhbml0eSBjaGVjayBmb3IgdW50cnVzdGVkIGFsbG9jYXRlZCBvYmplY3RzOwomIzQzOwkJICogdGhlIGFjY2VzcyBjaGVjayBhYm92ZSBhbHJlYWR5IHJlamVjdHMgd3JpdGVzIHRocm91Z2ggdGhlbS4KJiM0MzsJCSAqLwomIzQzOwkJaWYgKHR5cGVfaXNfYWxsb2MocmVnLSZndDt0eXBlKSAmYW1wOyZhbXA7CiYjNDM7CQkgICAgIXR5cGVfaXNfdW50cnVzdGVkX3B0cl9hbGxvY19vYmoocmVnLSZndDt0eXBlKSAmYW1wOyZhbXA7CiYjNDM7CQkgICAgIXR5cGVfaXNfbm9uX293bmluZ19yZWYocmVnLSZndDt0eXBlKSAmYW1wOyZhbXA7CiAJCSAgICAhKHJlZy0mZ3Q7dHlwZSAmYW1wOyBNRU1fUkNVKSAmYW1wOyZhbXA7ICFyZWdfaXNfcmVmZXJlbmNlZChlbnYsIHJlZykpIHsKIAkJCXZlcmlmaWVyX2J1ZyhlbnYsICYjMzQ7YWxsb2NhdGVkIG9iamVjdCBtdXN0IGhhdmUgYSByZWZlcmVuY2VkIGlkJiMzNDspOwogCQkJcmV0dXJuIC1FRkFVTFQ7CkBAIC0xMjQxOSw3ICYjNDM7MTI0MjUsNyBAQCBzdGF0aWMgaW50IGNoZWNrX2tmdW5jX2FyZ3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9rZnVuY19jYWxsXwogCQkJCQlyZWdfYXJnX25hbWUoZW52LCBhcmdubykpOwogCQkJCXJldHVybiAtRUlOVkFMOwogCQkJfQotCQkJaWYgKCF0eXBlX2lzX25vbl9vd25pbmdfcmVmKHJlZy0mZ3Q7dHlwZSkpCiYjNDM7CQkJaWYgKCF0eXBlX2lzX25vbl9vd25pbmdfcmVmKHJlZy0mZ3Q7dHlwZSkgJmFtcDsmYW1wOyByZWdfaXNfcmVmZXJlbmNlZChlbnYsIHJlZykpCiAJCQkJbWV0YS0mZ3Q7YXJnX293bmluZ19yZWYgPSB0cnVlOwogCiAJCQlyZWMgPSByZWdfYnRmX3JlY29yZChyZWcpOwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3JlZmNvdW50ZWRfa3B0ci5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3JlZmNvdW50ZWRfa3B0ci5jCmluZGV4IDYxOTA2ZjQ4MDI1Y2MuLmI3MGJlOGI1MmZmODAgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9yZWZjb3VudGVkX2twdHIuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvcmVmY291bnRlZF9rcHRyLmMKQEAgLTIzLDYgJiM0MzsyMywxNSBAQCBzdHJ1Y3QgbWFwX3ZhbHVlIHsKIAlzdHJ1Y3Qgbm9kZV9kYXRhIF9fa3B0ciAqbm9kZTsKIH07CiAKJiM0MztzdHJ1Y3Qgbm9kZV9yZWZjb3VudF9vbmx5IHsKJiM0MzsJbG9uZyBrZXk7CiYjNDM7CXN0cnVjdCBicGZfcmVmY291bnQgcmVmY291bnQ7CiYjNDM7fTsKJiM0MzsKJiM0MztzdHJ1Y3QgbWFwX3ZhbHVlX3JlZmNvdW50X29ubHkgewomIzQzOwlzdHJ1Y3Qgbm9kZV9yZWZjb3VudF9vbmx5IF9fa3B0ciAqbm9kZTsKJiM0Mzt9OwomIzQzOwogc3RydWN0IHsKIAlfX3VpbnQodHlwZSwgQlBGX01BUF9UWVBFX0FSUkFZKTsKIAlfX3R5cGUoa2V5LCBpbnQpOwpAQCAtMzAsNiAmIzQzOzM5LDEzIEBAIHN0cnVjdCB7CiAJX191aW50KG1heF9lbnRyaWVzLCAyKTsKIH0gc3Rhc2hlZF9ub2RlcyBTRUMoJiMzNDsubWFwcyYjMzQ7KTsKIAomIzQzO3N0cnVjdCB7CiYjNDM7CV9fdWludCh0eXBlLCBCUEZfTUFQX1RZUEVfQVJSQVkpOwomIzQzOwlfX3R5cGUoa2V5LCBpbnQpOwomIzQzOwlfX3R5cGUodmFsdWUsIHN0cnVjdCBtYXBfdmFsdWVfcmVmY291bnRfb25seSk7CiYjNDM7CV9fdWludChtYXhfZW50cmllcywgMSk7CiYjNDM7fSBzdGFzaGVkX3JlZmNvdW50X29ubHkgU0VDKCYjMzQ7Lm1hcHMmIzM0Oyk7CiYjNDM7CiBzdHJ1Y3Qgbm9kZV9hY3F1aXJlIHsKIAlsb25nIGtleTsKIAlsb25nIGRhdGE7CkBAIC04MzIsNiAmIzQzOzg0OCwxNTEgQEAgbG9uZyByYnRyZWVfcmVmY291bnRlZF9ub2RlX3JlZl9lc2NhcGVzX293bmluZ19pbnB1dCh2b2lkICpjdHgpCiAJcmV0dXJuIDA7CiB9CiAKJiM0MztTRUMoJiMzNDt0YyYjMzQ7KQomIzQzO19fc3VjY2VzcwomIzQzO2xvbmcgcmVmY291bnRfYWNxdWlyZV9vd25pbmdfaW5wdXRfbm9fbnVsbF9jaGVjayh2b2lkICpjdHgpCiYjNDM7ewomIzQzOwlzdHJ1Y3Qgbm9kZV9yZWZjb3VudF9vbmx5ICpuLCAqbTsKJiM0MzsKJiM0MzsJbiA9IGJwZl9vYmpfbmV3KHR5cGVvZigqbikpOwomIzQzOwlpZiAoIW4pCiYjNDM7CQlyZXR1cm4gMTsKJiM0MzsKJiM0MzsJbSA9IGJwZl9yZWZjb3VudF9hY3F1aXJlKG4pOwomIzQzOwlicGZfb2JqX2Ryb3AobSk7CiYjNDM7CWJwZl9vYmpfZHJvcChuKTsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO1NFQygmIzM0O3RjJiMzNDspCiYjNDM7X19zdWNjZXNzCiYjNDM7bG9uZyByZWZjb3VudF9hY3F1aXJlX3JjdV9tYXBfa3B0cl9udWxsX2NoZWNrZWQodm9pZCAqY3R4KQomIzQzO3sKJiM0MzsJc3RydWN0IG1hcF92YWx1ZV9yZWZjb3VudF9vbmx5ICptYXB2YWw7CiYjNDM7CXN0cnVjdCBub2RlX3JlZmNvdW50X29ubHkgKm4sICptOwomIzQzOwlpbnQgaWR4ID0gMDsKJiM0MzsKJiM0MzsJbWFwdmFsID0gYnBmX21hcF9sb29rdXBfZWxlbSgmYW1wO3N0YXNoZWRfcmVmY291bnRfb25seSwgJmFtcDtpZHgpOwomIzQzOwlpZiAoIW1hcHZhbCkKJiM0MzsJCXJldHVybiAxOwomIzQzOwomIzQzOwlicGZfcmN1X3JlYWRfbG9jaygpOwomIzQzOwluID0gbWFwdmFsLSZndDtub2RlOwomIzQzOwlpZiAoIW4pIHsKJiM0MzsJCWJwZl9yY3VfcmVhZF91bmxvY2soKTsKJiM0MzsJCXJldHVybiAyOwomIzQzOwl9CiYjNDM7CW0gPSBicGZfcmVmY291bnRfYWNxdWlyZShuKTsKJiM0MzsJYnBmX3JjdV9yZWFkX3VubG9jaygpOwomIzQzOwomIzQzOwlpZiAoIW0pCiYjNDM7CQlyZXR1cm4gMzsKJiM0MzsJYnBmX29ial9kcm9wKG0pOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7U0VDKCYjMzQ7P3RjJiMzNDspCiYjNDM7X19zdWNjZXNzCiYjNDM7bG9uZyBtYXBfa3B0cl9yZWFkX2FmdGVyX3JjdV91bmxvY2sodm9pZCAqY3R4KQomIzQzO3sKJiM0MzsJc3RydWN0IG1hcF92YWx1ZV9yZWZjb3VudF9vbmx5ICptYXB2YWw7CiYjNDM7CXN0cnVjdCBub2RlX3JlZmNvdW50X29ubHkgKm47CiYjNDM7CWludCBpZHggPSAwOwomIzQzOwomIzQzOwltYXB2YWwgPSBicGZfbWFwX2xvb2t1cF9lbGVtKCZhbXA7c3Rhc2hlZF9yZWZjb3VudF9vbmx5LCAmYW1wO2lkeCk7CiYjNDM7CWlmICghbWFwdmFsKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CWJwZl9yY3VfcmVhZF9sb2NrKCk7CiYjNDM7CW4gPSBtYXB2YWwtJmd0O25vZGU7CiYjNDM7CWlmICghbikgewomIzQzOwkJYnBmX3JjdV9yZWFkX3VubG9jaygpOwomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CX0KJiM0MzsJYnBmX3JjdV9yZWFkX3VubG9jaygpOwomIzQzOwomIzQzOwlyZXR1cm4gbi0mZ3Q7a2V5OwomIzQzO30KJiM0MzsKJiM0MztTRUMoJiMzNDs/dGMmIzM0OykKJiM0MztfX2ZhaWx1cmUgX19tc2coJiMzNDtpcyBuZWl0aGVyIG93bmluZyBvciBub24tb3duaW5nIHJlZiYjMzQ7KQomIzQzO2xvbmcgcmVmY291bnRfYWNxdWlyZV9ncmFwaF9hZnRlcl9yY3VfdW5sb2NrKHZvaWQgKmN0eCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBtYXBfdmFsdWUgKm1hcHZhbDsKJiM0MzsJc3RydWN0IG5vZGVfZGF0YSAqbiwgKm07CiYjNDM7CWludCBpZHggPSAwOwomIzQzOwomIzQzOwltYXB2YWwgPSBicGZfbWFwX2xvb2t1cF9lbGVtKCZhbXA7c3Rhc2hlZF9ub2RlcywgJmFtcDtpZHgpOwomIzQzOwlpZiAoIW1hcHZhbCkKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwlicGZfcmN1X3JlYWRfbG9jaygpOwomIzQzOwluID0gbWFwdmFsLSZndDtub2RlOwomIzQzOwlpZiAoIW4pIHsKJiM0MzsJCWJwZl9yY3VfcmVhZF91bmxvY2soKTsKJiM0MzsJCXJldHVybiAwOwomIzQzOwl9CiYjNDM7CWJwZl9yY3VfcmVhZF91bmxvY2soKTsKJiM0MzsKJiM0MzsJbSA9IGJwZl9yZWZjb3VudF9hY3F1aXJlKG4pOwomIzQzOwlpZiAobSkKJiM0MzsJCWJwZl9vYmpfZHJvcChtKTsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO1NFQygmIzM0Oz90YyYjMzQ7KQomIzQzO19fZmFpbHVyZSBfX21zZygmIzM0O29ubHkgcmVhZCBpcyBzdXBwb3J0ZWQmIzM0OykKJiM0Mztsb25nIGdyYXBoX21hcF9rcHRyX3dyaXRlX2FmdGVyX3JjdV91bmxvY2sodm9pZCAqY3R4KQomIzQzO3sKJiM0MzsJc3RydWN0IG1hcF92YWx1ZSAqbWFwdmFsOwomIzQzOwlzdHJ1Y3Qgbm9kZV9kYXRhICpuOwomIzQzOwlpbnQgaWR4ID0gMDsKJiM0MzsKJiM0MzsJbWFwdmFsID0gYnBmX21hcF9sb29rdXBfZWxlbSgmYW1wO3N0YXNoZWRfbm9kZXMsICZhbXA7aWR4KTsKJiM0MzsJaWYgKCFtYXB2YWwpCiYjNDM7CQlyZXR1cm4gMTsKJiM0MzsKJiM0MzsJYnBmX3JjdV9yZWFkX2xvY2soKTsKJiM0MzsJbiA9IG1hcHZhbC0mZ3Q7bm9kZTsKJiM0MzsJaWYgKCFuKSB7CiYjNDM7CQlicGZfcmN1X3JlYWRfdW5sb2NrKCk7CiYjNDM7CQlyZXR1cm4gMjsKJiM0MzsJfQomIzQzOwlicGZfcmN1X3JlYWRfdW5sb2NrKCk7CiYjNDM7CiYjNDM7CW4tJmd0O2tleSA9IDE7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztTRUMoJiMzNDs/dGMmIzM0OykKJiM0MztfX3N1Y2Nlc3MKJiM0Mztsb25nIGdyYXBoX21hcF9rcHRyX3JlYWRfYWZ0ZXJfc3Bpbl91bmxvY2sodm9pZCAqY3R4KQomIzQzO3sKJiM0MzsJc3RydWN0IG1hcF92YWx1ZSAqbWFwdmFsOwomIzQzOwlzdHJ1Y3Qgbm9kZV9kYXRhICpuOwomIzQzOwlpbnQgaWR4ID0gMDsKJiM0MzsKJiM0MzsJbWFwdmFsID0gYnBmX21hcF9sb29rdXBfZWxlbSgmYW1wO3N0YXNoZWRfbm9kZXMsICZhbXA7aWR4KTsKJiM0MzsJaWYgKCFtYXB2YWwpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJYnBmX3JjdV9yZWFkX2xvY2soKTsKJiM0MzsJbiA9IG1hcHZhbC0mZ3Q7bm9kZTsKJiM0MzsJaWYgKCFuKSB7CiYjNDM7CQlicGZfcmN1X3JlYWRfdW5sb2NrKCk7CiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsJfQomIzQzOwlicGZfcmN1X3JlYWRfdW5sb2NrKCk7CiYjNDM7CiYjNDM7CWJwZl9zcGluX2xvY2soJmFtcDtsb2NrKTsKJiM0MzsJYnBmX3NwaW5fdW5sb2NrKCZhbXA7bG9jayk7CiYjNDM7CiYjNDM7CXJldHVybiBuLSZndDtrZXk7CiYjNDM7fQomIzQzOwogc3RhdGljIGxvbmcgX19zdGFzaF9tYXBfZW1wdHlfeGNoZyhzdHJ1Y3Qgbm9kZV9kYXRhICpuLCBpbnQgaWR4KQogewogCXN0cnVjdCBtYXBfdmFsdWUgKm1hcHZhbCA9IGJwZl9tYXBfbG9va3VwX2VsZW0oJmFtcDtzdGFzaGVkX25vZGVzLCAmYW1wO2lkeCk7CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvcmVmY291bnRlZF9rcHRyX2ZhaWwuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9yZWZjb3VudGVkX2twdHJfZmFpbC5jCmluZGV4IDAyNGVmMmFhZTIwMDguLjM0MDhmNjhhZDQ0NGQgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9yZWZjb3VudGVkX2twdHJfZmFpbC5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9yZWZjb3VudGVkX2twdHJfZmFpbC5jCkBAIC0xOSw2ICYjNDM7MTksMTUgQEAgc3RydWN0IG5vZGVfcmVmY291bnRlZCB7CiAJc3RydWN0IGJwZl9yZWZjb3VudCByZWZjb3VudDsKIH07CiAKJiM0MztzdHJ1Y3Qgbm9kZV9yZWZjb3VudF9vbmx5IHsKJiM0MzsJbG9uZyBrZXk7CiYjNDM7CXN0cnVjdCBicGZfcmVmY291bnQgcmVmY291bnQ7CiYjNDM7fTsKJiM0MzsKJiM0MztzdHJ1Y3QgbWFwX3ZhbHVlX3JlZmNvdW50X29ubHkgewomIzQzOwlzdHJ1Y3Qgbm9kZV9yZWZjb3VudF9vbmx5IF9fa3B0ciAqbm9kZTsKJiM0Mzt9OwomIzQzOwogZXh0ZXJuIHZvaWQgYnBmX3JjdV9yZWFkX2xvY2sodm9pZCkgX19rc3ltOwogZXh0ZXJuIHZvaWQgYnBmX3JjdV9yZWFkX3VubG9jayh2b2lkKSBfX2tzeW07CiAKQEAgLTI4LDYgJiM0MzszNywxMyBAQCBwcml2YXRlKEEpIHN0cnVjdCBicGZfcmJfcm9vdCBncm9vdCBfX2NvbnRhaW5zKG5vZGVfYWNxdWlyZSwgbm9kZSk7CiBwcml2YXRlKEIpIHN0cnVjdCBicGZfc3Bpbl9sb2NrIGxvY2s7CiBwcml2YXRlKEIpIHN0cnVjdCBicGZfbGlzdF9oZWFkIGhlYWQgX19jb250YWlucyhub2RlX3JlZmNvdW50ZWQsIGxpc3QpOwogCiYjNDM7c3RydWN0IHsKJiM0MzsJX191aW50KHR5cGUsIEJQRl9NQVBfVFlQRV9BUlJBWSk7CiYjNDM7CV9fdHlwZShrZXksIGludCk7CiYjNDM7CV9fdHlwZSh2YWx1ZSwgc3RydWN0IG1hcF92YWx1ZV9yZWZjb3VudF9vbmx5KTsKJiM0MzsJX191aW50KG1heF9lbnRyaWVzLCAxKTsKJiM0Mzt9IHN0YXNoZWRfcmVmY291bnRfb25seSBTRUMoJiMzNDsubWFwcyYjMzQ7KTsKJiM0MzsKIHN0YXRpYyBib29sIGxlc3Moc3RydWN0IGJwZl9yYl9ub2RlICphLCBjb25zdCBzdHJ1Y3QgYnBmX3JiX25vZGUgKmIpCiB7CiAJc3RydWN0IG5vZGVfYWNxdWlyZSAqbm9kZV9hOwpAQCAtODAsNiAmIzQzOzk2LDY0IEBAIGxvbmcgcmVmY291bnRfYWNxdWlyZV9tYXliZV9udWxsKHZvaWQgKmN0eCkKIAlyZXR1cm4gMDsKIH0KIAomIzQzO1NFQygmIzM0Oz90YyYjMzQ7KQomIzQzO19fZmFpbHVyZSBfX21zZygmIzM0O1Bvc3NpYmx5IE5VTEwgcG9pbnRlciBwYXNzZWQgdG8gdHJ1c3RlZCBSMSYjMzQ7KQomIzQzO2xvbmcgcmVmY291bnRfYWNxdWlyZV9yY3VfbWFwX2twdHJfdW5jaGVja2VkX2Ryb3Aodm9pZCAqY3R4KQomIzQzO3sKJiM0MzsJc3RydWN0IG1hcF92YWx1ZV9yZWZjb3VudF9vbmx5ICptYXB2YWw7CiYjNDM7CXN0cnVjdCBub2RlX3JlZmNvdW50X29ubHkgKnRtcCwgKm4sICptOwomIzQzOwlpbnQgaWR4ID0gMDsKJiM0MzsKJiM0MzsJdG1wID0gYnBmX29ial9uZXcodHlwZW9mKCp0bXApKTsKJiM0MzsJaWYgKCF0bXApCiYjNDM7CQlyZXR1cm4gMzsKJiM0MzsJYnBmX29ial9kcm9wKHRtcCk7CiYjNDM7CiYjNDM7CW1hcHZhbCA9IGJwZl9tYXBfbG9va3VwX2VsZW0oJmFtcDtzdGFzaGVkX3JlZmNvdW50X29ubHksICZhbXA7aWR4KTsKJiM0MzsJaWYgKCFtYXB2YWwpCiYjNDM7CQlyZXR1cm4gMTsKJiM0MzsKJiM0MzsJYnBmX3JjdV9yZWFkX2xvY2soKTsKJiM0MzsJbiA9IG1hcHZhbC0mZ3Q7bm9kZTsKJiM0MzsJaWYgKCFuKSB7CiYjNDM7CQlicGZfcmN1X3JlYWRfdW5sb2NrKCk7CiYjNDM7CQlyZXR1cm4gMjsKJiM0MzsJfQomIzQzOwltID0gYnBmX3JlZmNvdW50X2FjcXVpcmUobik7CiYjNDM7CWJwZl9yY3VfcmVhZF91bmxvY2soKTsKJiM0MzsKJiM0MzsJYnBmX29ial9kcm9wKG0pOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7U0VDKCYjMzQ7P3RjJiMzNDspCiYjNDM7X19mYWlsdXJlIF9fbXNnKCYjMzQ7aXMgbmVpdGhlciBvd25pbmcgb3Igbm9uLW93bmluZyByZWYmIzM0OykKJiM0Mztsb25nIHJlZmNvdW50X2FjcXVpcmVfYWZ0ZXJfcmN1X3VubG9jayh2b2lkICpjdHgpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgbWFwX3ZhbHVlX3JlZmNvdW50X29ubHkgKm1hcHZhbDsKJiM0MzsJc3RydWN0IG5vZGVfcmVmY291bnRfb25seSAqbiwgKm07CiYjNDM7CWludCBpZHggPSAwOwomIzQzOwomIzQzOwltYXB2YWwgPSBicGZfbWFwX2xvb2t1cF9lbGVtKCZhbXA7c3Rhc2hlZF9yZWZjb3VudF9vbmx5LCAmYW1wO2lkeCk7CiYjNDM7CWlmICghbWFwdmFsKQomIzQzOwkJcmV0dXJuIDE7CiYjNDM7CiYjNDM7CWJwZl9yY3VfcmVhZF9sb2NrKCk7CiYjNDM7CW4gPSBtYXB2YWwtJmd0O25vZGU7CiYjNDM7CWlmICghbikgewomIzQzOwkJYnBmX3JjdV9yZWFkX3VubG9jaygpOwomIzQzOwkJcmV0dXJuIDI7CiYjNDM7CX0KJiM0MzsJYnBmX3JjdV9yZWFkX3VubG9jaygpOwomIzQzOwomIzQzOwltID0gYnBmX3JlZmNvdW50X2FjcXVpcmUobik7CiYjNDM7CWlmIChtKQomIzQzOwkJYnBmX29ial9kcm9wKG0pOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiBTRUMoJiMzNDs/dGMmIzM0OykKIF9fZmFpbHVyZSBfX21zZygmIzM0O1VucmVsZWFzZWQgcmVmZXJlbmNlIGlkPTMgYWxsb2NfaW5zbj17e1swLTldJiM0Mzt9fSYjMzQ7KQogbG9uZyByYnRyZWVfcmVmY291bnRlZF9ub2RlX3JlZl9lc2NhcGVzX293bmluZ19pbnB1dCh2b2lkICpjdHgpCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDEyOjQyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU1MDMKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAzNzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBCUEYgVmVyaWZpZXIgUGF0Y2ggZm9yIEZ1enppbmcgT3Bwb3J0dW5pdGllcyoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBnb3QgYSBwYXRjaCBoZXJlIHRoYXQmIzM5O3MgdHdlYWtpbmcgdGhlIEJQRiB2ZXJpZmllciwgc3BlY2lmaWNhbGx5IGhvdyBpdCBoYW5kbGVzIGBQVFJfVE9fQlRGX0lEYCBhbmQgbWVtb3J5IGFsbG9jYXRpb24gd2l0aCBgTUVNX0FMTE9DYC4gTXkgaW1tZWRpYXRlIGdvYWwgaXMgdG8gZmlndXJlIG91dCB0aGUgYmVzdCBzcG90cyB0byBmb2N1cyBmdXp6aW5nIGVmZm9ydHMuIFRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGhlbHBlciwgYHR5cGVfaXNfdW50cnVzdGVkX3B0cl9hbGxvY19vYmpgLCBhbmQgbW9kaWZpZXMgYGNoZWNrX3B0cl90b19idGZfYWNjZXNzYCB0byBieXBhc3MgdGhlIHVzdWFsIHNhbml0eSBjaGVja3MgZm9yIHRoZXNlIHVudHJ1c3RlZCBhbGxvY2F0ZWQgb2JqZWN0cy4gSXQgYWxzbyBjaGFuZ2VzIGBjaGVja19rZnVuY19hcmdzYCB0byBpbmNsdWRlIGFuIGV4dHJhIGNoZWNrLCBgcmVnX2lzX3JlZmVyZW5jZWQoZW52LCByZWcpYCwgYmVmb3JlIG1hcmtpbmcgdGhlIGFyZ3VtZW50IGFzIG93bmVkLiBUaGlzIHNvdW5kcyBsaWtlIGl0IGludHJvZHVjZXMgc29tZSBwb3RlbnRpYWxseSBpbnRlcmVzdGluZyBlZGdlIGNhc2VzLiBUaGUgcGF0Y2ggYWxzbyBpbmNsdWRlcyBhIGJ1bmNoIG9mIEJQRiBzZWxmLXRlc3RzLCB3aGljaCBpcyBnb29kIGZvciBiYXNlbGluZSBjb3ZlcmFnZSBidXQgSSBuZWVkIHRvIGlkZW50aWZ5IGFyZWFzIG5vdCB3ZWxsLWNvdmVyZWQgYnkgdGhvc2UgdGVzdHMuCgpJIG5lZWQgdG8gZGlnIGludG8gdGhlIGNvZGUgaW4gYGtlcm5lbC9icGYvdmVyaWZpZXIuY2AgdG8gdW5kZXJzdGFuZCB0aGUgZnVsbCBpbXBhY3Qgb2YgdGhlc2UgY2hhbmdlcy4gSSYjMzk7bSBmb2N1c2luZyBvbiB0aGUgbW9kaWZpY2F0aW9ucyB0byBgY2hlY2tfcHRyX3RvX2J0Zl9hY2Nlc3NgIGFuZCBgY2hlY2tfa2Z1bmNfYXJnc2AuIFRoZXkmIzM5O3JlIGRlZmluaXRlbHkgKnJlYWNoYWJsZSogZnVuY3Rpb25zIGFuZCByZXByZXNlbnQgb3BlcmF0aW9uYWwgY2hhbmdlcyBpbiB0aGUgdmVyaWZpZXIuIE5vdywgdGhlIHRyaWNrIGlzIHRvIGlkZW50aWZ5IHRoZSBiZXN0IGVudHJ5IHBvaW50cyBmb3IgZnV6emluZy4KCk15IG9iamVjdGl2ZSBpcyB0byBpZGVudGlmeSBnb29kIGZ1enppbmcgdGFyZ2V0cywgc28gbGV0JiMzOTtzIGRpZyBpbnRvIHRoZSBjb2RlIG1vcmUuIGBjaGVja19wdHJfdG9fYnRmX2FjY2Vzc2AgaXMgYSBzdGF0aWMgZnVuY3Rpb24sIHdoaWNoIG1lYW5zIGl0JiMzOTtzIGFuIGludGVybmFsIGhlbHBlciBmdW5jdGlvbi4gSSBrbm93IHRvIGxvb2sgZm9yIGV4dGVybmFsIGVudHJ5IHBvaW50cywgbm90IHRoZXNlIGlubGluZWQgaGVscGVyIGZ1bmN0aW9ucy4gSSBzZWUgaXQmIzM5O3MgY2FsbGVkIGZyb20gYGNoZWNrX21lbV9hY2Nlc3NgLCB3aGljaCBpcyBpdHNlbGYgYSBzdGF0aWMgaGVscGVyLiBTaW1pbGFybHksIGBjaGVja19rZnVuY19hcmdzYCBpcyBhIHN0YXRpYyBmdW5jdGlvbiB0aGF0IGdldHMgY2FsbGVkIGZyb20gYGNoZWNrX2tmdW5jX2NhbGxgLiBBaCwgdGhhdOKAmXMgcmlnaHQsIHRoZSBwcm9tcHQgc2F5cyB0byBwcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnRzIQoKQWxyaWdodCwgdGltZSB0byBzaGlmdCBnZWFycyBhbmQgZmluZCB0aGUgKmVudHJ5IHBvaW50cyogdGhhdCBldmVudHVhbGx5IGxlYWQgdG8gdGhlc2UgZnVuY3Rpb25zLiBJ4oCZbGwgc3RhcnQgYnkgbG9va2luZyBhdCBga2VybmVsL2JwZi92ZXJpZmllci5jYCBhbmQgZmlndXJpbmcgb3V0IHdoaWNoIGZ1bmN0aW9ucyAqY2FsbCogYGNoZWNrX3B0cl90b19idGZfYWNjZXNzYCBhbmQgYGNoZWNrX2tmdW5jX2FyZ3NgLiBJIGtub3cgdGhhdCBgYnBmX2NoZWNrYCBpcyB0aGUgbWFpbiBlbnRyeSBwb2ludCB0byB0aGUgdmVyaWZpZXIsIGJ1dCB3aGF0IGFyZSBpdHMgY2FsbGVycz8gVGltZSB0byBzZWFyY2ggZm9yIHRoZSAqY2FsbGVycyogb2YgdGhvc2UgbW9kaWZpZWQgZnVuY3Rpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDEyOjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NoZWNrX3B0cl90b19idGZfYWNjZXNzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi92ZXJpZmllci5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvdmVyaWZpZXIuYz01NzIxPXN0YXRpYyBib29sIHR5cGVfaXNfdHJ1c3RlZF9vcl9udWxsKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTU3MzItXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NTczMzpzdGF0aWMgaW50IGNoZWNrX3B0cl90b19idGZfYWNjZXNzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNTczNC1cdFx0XHRcdCAgIHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWdzLCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnLFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz02MDg0PXN0YXRpYyBpbnQgY2hlY2tfbWVtX2FjY2VzcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBpbnQgaW5zbl9pZHgsIHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcsIGFyZ25vX3QgYXJnbm8sXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTYyOTctXHRcdCAgICF0eXBlX21heV9iZV9udWxsKHJlZy1cdTAwM2V0eXBlKSkge1xua2VybmVsL2JwZi92ZXJpZmllci5jOjYyOTg6XHRcdGVyciA9IGNoZWNrX3B0cl90b19idGZfYWNjZXNzKGVudiwgcmVncywgcmVnLCBhcmdubywgb2ZmLCBzaXplLCB0LFxua2VybmVsL2JwZi92ZXJpZmllci5jLTYyOTktXHRcdFx0XHRcdCAgICAgIHZhbHVlX3JlZ25vKTtcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9Njc0Nz1zdGF0aWMgaW50IGNoZWNrX2hlbHBlcl9tZW1fYWNjZXNzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcsIGFyZ25vX3QgYXJnbm8sXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTY4MDQtXHRjYXNlIFBUUl9UT19CVEZfSUQ6XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NjgwNTpcdFx0cmV0dXJuIGNoZWNrX3B0cl90b19idGZfYWNjZXNzKGVudiwgcmVncywgcmVnLCBhcmdubywgMCxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy02ODA2LVx0XHRcdFx0XHQgICAgICAgYWNjZXNzX3NpemUsIGFjY2Vzc190eXBlLCAtMSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMTI6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjg5MwoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDczCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIGludGVyYWN0aW9uczoKCioqQW5hbHl6aW5nIE1lbW9yeSBBY2Nlc3MgYW5kIEtlcm5lbCBGdW5jdGlvbiBDYWxscyoqCgpPa2F5LCBzbyBJJiMzOTttIHNlZWluZyBhIGNoYWluIG9mIGNhbGxzIGhlcmUsIHNwZWNpZmljYWxseSByZWxhdGVkIHRvIHZlcmlmeWluZyBtZW1vcnkgYWNjZXNzIGFuZCBrZXJuZWwgZnVuY3Rpb24gY2FsbHMuIEl0IGxvb2tzIGxpa2UgYGNoZWNrX21lbV9hY2Nlc3NgLCB3aGljaCBpcyB0aGUgd29ya2hvcnNlIGZvciB2YWxpZGF0aW5nIG1lbW9yeSBhY2Nlc3MgaW5zdHJ1Y3Rpb25zIChjYWxsZWQgYnkgc29tZXRoaW5nIGxpa2UgYGRvX2NoZWNrYCksIHJlbGllcyBvbiBhIG1vcmUgZnVuZGFtZW50YWwgY2hlY2ssIGBjaGVja19wdHJfdG9fYnRmX2FjY2Vzc2AsIHZpYSBgY2hlY2tfbWVtX2FjY2Vzc2AgYW5kIGBjaGVja19oZWxwZXJfbWVtX2FjY2Vzc2AuIFNvLCBhbnkgdGltZSB3ZSYjMzk7cmUgY2hlY2tpbmcgYSBtZW1vcnkgYWNjZXNzLCB0aGVzZSBzZWNvbmRhcnkgY2hlY2tzIGFyZSB0cmlnZ2VyZWQgYnkgbXkgYW5hbHlzaXMgaW4gYGNoZWNrX21lbV9hY2Nlc3NgIGl0c2VsZi4KClRoZW4sIHRoZXJlJiMzOTtzIGBjaGVja19rZnVuY19jYWxsYCwgd2hpY2ggaXMgcmVzcG9uc2libGUgZm9yIHZlcmlmeWluZyBrZXJuZWwgZnVuY3Rpb24gY2FsbHMuIFRoaXMgb25lLCBpbiB0dXJuLCBzZWVtcyB0byBkZWxlZ2F0ZSB0aGUgYXJndW1lbnQgdmFsaWRhdGlvbiB0byBhIGZ1bmN0aW9uIG5hbWVkIGBjaGVja19rZnVuY19hcmdzYC4gVGhpcyBpbXBsaWVzIGEgY2xlYXIgc2VwYXJhdGlvbiBvZiBjb25jZXJuczogb25lIGZ1bmN0aW9uIHRvIHZhbGlkYXRlIHRoZSBjYWxsIGl0c2VsZiBhbmQgYW5vdGhlciB0byBkcmlsbCBkb3duIGludG8gdGhlIGFyZ3VtZW50cy4gTWFrZXMgc2Vuc2Ug4oCTIG1vZHVsYXJpdHkgaXMgYWx3YXlzIGdvb2QsIGFuZCB0aGlzIHByb2JhYmx5IGVuYWJsZXMgbW9yZSByb2J1c3QgdGVzdGluZyBhbmQgZWFzaWVyIG1vZGlmaWNhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAxMjo0MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjaGVja19rZnVuY19hcmdzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi92ZXJpZmllci5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvdmVyaWZpZXIuYz0xMTkxOD1zdGF0aWMgYm9vbCBjaGVja19jc3NfdGFza19pdGVyX2FsbG93bGlzdChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMTkzMy1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMTkzNDpzdGF0aWMgaW50IGNoZWNrX2tmdW5jX2FyZ3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9rZnVuY19jYWxsX2FyZ19tZXRhICptZXRhLFxua2VybmVsL2JwZi92ZXJpZmllci5jLTExOTM1LVx0XHRcdCAgICBpbnQgaW5zbl9pZHgpXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTEyOTE5PXN0YXRpYyBpbnQgY2hlY2tfa2Z1bmNfY2FsbChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmluc24sXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTEyOTk1LVx0LyogQ2hlY2sgdGhlIGFyZ3VtZW50cyAqL1xua2VybmVsL2JwZi92ZXJpZmllci5jOjEyOTk2Olx0ZXJyID0gY2hlY2tfa2Z1bmNfYXJncyhlbnYsIFx1MDAyNm1ldGEsIGluc25faWR4KTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMjk5Ny1cdGlmIChlcnIgXHUwMDNjIDApXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTEzMjgyLVx0XHRlbHNlXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTMyODM6XHRcdFx0Lyogc2NhbGFyLiBlbnN1cmVkIGJ5IGNoZWNrX2tmdW5jX2FyZ3MoKSAqL1xua2VybmVsL2JwZi92ZXJpZmllci5jLTEzMjg0LVx0XHRcdG1hcmtfYnRmX2Z1bmNfcmVnX3NpemUoZW52LCByZWdubywgdC1cdTAwM2VzaXplKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAxMjo0MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NTkzCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aG9zZSB0aG91Z2h0cyBmcm9tIGEgZmlyc3QtcGVyc29uLCBleHBlcnQgcGVyc3BlY3RpdmUsIGZvY3VzaW5nIG9uIHRoZSBpbnRlbnRpb24gYmVoaW5kIHRoZSBkZXNjcmliZWQgYWN0aW9uczoKCioqRGl2aW5nIGludG8gdGhlIEZ1bmN0aW9uIENhbGxzKioKCkFscmlnaHQsIEkmIzM5O20gZ29pbmcgdG8gc3RhcnQgYnkgZ2V0dGluZyBhIGhhbmRsZSBvbiB0aGUgY29udHJvbCBmbG93LiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgJiMzNDtMZXQmIzM5O3MgdHJhY2sgZG93biB0aGUgaW52b2NhdGlvbnMgb2YgYGNoZWNrX2tmdW5jX2NhbGxgIGFuZCBgY2hlY2tfbWVtX2FjY2Vzc2AuJiMzNDsgVGhlc2UgZnVuY3Rpb25zIGFyZSBjcnVjaWFsIGZvciB1bmRlcnN0YW5kaW5nIHRoZSBzZWN1cml0eSBtb2RlbCBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIGtlcm5lbCBmdW5jdGlvbiBjYWxscyBhbmQgbWVtb3J5IGFjY2Vzc2VzLCB3aGljaCBhcmUgdGhlIGZ1bmRhbWVudGFsIGJ1aWxkaW5nIGJsb2NrcyBvZiBhbG1vc3QgYW55IHN5c3RlbS4gQnkgdHJhY2luZyB0aGVpciBjYWxscywgSSBleHBlY3QgdG8gZ2V0IGEgc29saWQgZ3Jhc3Agb2Ygd2hlcmUgdGhlIHN5c3RlbSBpcyBsaWtlbHkgdmFsaWRhdGluZyB0aGVzZSBvcGVyYXRpb25zIGFuZCwgbW9zdCBpbXBvcnRhbnRseSwgdGhlIGNyaXRlcmlhIGl0JiMzOTtzIHVzaW5nIHRvIGRvIHNvLiBUaGlzIGlzIGxpa2VseSB3aGVyZSB0aGUgc3lzdGVtJiMzOTtzIHNlY3VyaXR5IGNvbnN0cmFpbnRzIGFyZSBhcHBsaWVkLiBVbmRlcnN0YW5kaW5nIHRob3NlIHNlY3VyaXR5IGNvbnN0cmFpbnRzIGlzIHdoYXQgbWF0dGVycy4gVGhpcyBleHBsb3JhdGlvbiBzaG91bGQgaGVscCBtZSBwYWludCBhIHBpY3R1cmUgb2YgaG93IHRoZSBzeXN0ZW0mIzM5O3Mgc2VjdXJpdHkgaXMgYXJjaGl0ZWN0ZWQgYXQgYSBsb3cgbGV2ZWwuIEl0JiMzOTtzIHRoZSBtb3N0IGVmZmVjdGl2ZSBzdGFydGluZyBwb2ludCB0byBiZWdpbiBhbnkgaW4tZGVwdGggc3lzdGVtIHNlY3VyaXR5IGFuYWx5c2lzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDEyOjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NoZWNrX2tmdW5jX2NhbGwmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvYnBmL3ZlcmlmaWVyLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi92ZXJpZmllci5jPTcyNDQ9c3RhdGljIGludCBwcm9jZXNzX2R5bnB0cl9mdW5jKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcsXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTczMTgtXHRcdFx0ICogRm9yIENPTlNUX1BUUl9UT19EWU5QVFIsIHJlZyBpcyBhbHJlYWR5IHNjcmF0Y2hlZCBieSBjaGVja19yZWdfYXJnXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NzMxOTpcdFx0XHQgKiBpbiBjaGVja19oZWxwZXJfY2FsbCBhbmQgbWFya19idGZfZnVuY19yZWdfc2l6ZSBpbiBjaGVja19rZnVuY19jYWxsLlxua2VybmVsL2JwZi92ZXJpZmllci5jLTczMjAtXHRcdFx0ICovXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTEyOTE3PXN0YXRpYyBpbnQgY2hlY2tfcmV0dXJuX2NvZGUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50IHJlZ25vLCBjb25zdCBjaGFyICpyZWdfbmFtZSk7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTI5MTgtXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTI5MTk6c3RhdGljIGludCBjaGVja19rZnVuY19jYWxsKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqaW5zbixcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMjkyMC1cdFx0XHQgICAgaW50ICppbnNuX2lkeF9wKVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xNzI0MD1zdGF0aWMgaW50IGRvX2NoZWNrX2luc24oc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgYm9vbCAqZG9fcHJpbnRfc3RhdGUpXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTE3MzA4LVx0XHRcdGlmIChpbnNuLVx1MDAzZXNyY19yZWcgPT0gQlBGX1BTRVVET19LRlVOQ19DQUxMKVxua2VybmVsL2JwZi92ZXJpZmllci5jOjE3MzA5Olx0XHRcdFx0cmV0dXJuIGNoZWNrX2tmdW5jX2NhbGwoZW52LCBpbnNuLCBcdTAwMjZlbnYtXHUwMDNlaW5zbl9pZHgpO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTE3MzEwLVx0XHRcdHJldHVybiBjaGVja19oZWxwZXJfY2FsbChlbnYsIGluc24sIFx1MDAyNmVudi1cdTAwM2VpbnNuX2lkeCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMTI6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODMxNwoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDY1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGFuYWx5emluZyB0aGlzIGNvZGU6CgoqKkFuYWx5emluZyB0aGUgZUJQRiBWZXJpZmljYXRpb24gRmxvdyoqCgpPa2F5LCBzbyBJJiMzOTttIGRpdmluZyBpbnRvIHRoaXMgZUJQRiB2ZXJpZmljYXRpb24gZmxvdywgYW5kIGl0IGxvb2tzIGxpa2UgYGRvX2NoZWNrX2luc25gIGlzIHRoZSB3b3JraG9yc2UgaGVyZS4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHRyYWNlIHRoZSBleGVjdXRpb24gcGF0aC4gSXQgc2VlbXMgbGlrZSBgZG9fY2hlY2tfaW5zbmAgaXMgY2FsbGluZyBgY2hlY2tfa2Z1bmNfY2FsbGAsIHdoaWNoIG1ha2VzIHNlbnNlOyBhIGNoZWNrIGluc3RydWN0aW9uIHByZXN1bWFibHkgbmVlZHMgdG8gdmFsaWRhdGUgYW55IGtmdW5jIGNhbGxzLiBJIG5lZWQgdG8ga2VlcCB0aGF0IGluIG1pbmQuCgpOb3csIHdoZXJlIGRvZXMgYGRvX2NoZWNrX2luc25gIGl0c2VsZiBjb21lIGZyb20/IEl0JiMzOTtzIGNhbGxlZCBieSBgZG9fY2hlY2tgLCBhbmQgYGRvX2NoZWNrYCBpcyBjYWxsZWQgYnkgYGJwZl9jaGVja2AuIEFoYSEgTG9va3MgbGlrZSBgYnBmX2NoZWNrYCBpcyB0aGUgbGlrZWx5IGVudHJ5IHBvaW50LiBUaGF0JiMzOTtzIHVzdWFsbHkgdGhlIHN0YXJ0aW5nIHBvaW50IGZvciB2YWxpZGF0aW9uLCBhbmQgZXZlcnl0aGluZyBmdW5uZWxzIGludG8gaXQuIEkmIzM5O2xsIG1ha2UgYGJwZl9jaGVja2AgbXkgcHJpbWFyeSBmb2N1cyB0byB1bmRlcnN0YW5kIHRoZSB3aG9sZSBwcm9jZXNzLiBJIHdpbGwgc3RhcnQgdGhlcmUgdG8gc2VlIGhvdyB0aGUgb3RoZXIgcGFydHMgZml0IGluLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAxMjo0MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDticGZfY2hlY2smIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvYnBmL3ZlcmlmaWVyLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi92ZXJpZmllci5jPTU1PXN0YXRpYyBib29sIGJwZl9nbG9iYWxfcGVyY3B1X21hX3NldDtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy01Ni1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo1NzovKiBicGZfY2hlY2soKSBpcyBhIHN0YXRpYyBjb2RlIGFuYWx5emVyIHRoYXQgd2Fsa3MgZUJQRiBwcm9ncmFtXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNTgtICogaW5zdHJ1Y3Rpb24gYnkgaW5zdHJ1Y3Rpb24gYW5kIHVwZGF0ZXMgcmVnaXN0ZXIvc3RhY2sgc3RhdGUuXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTExOTAzPXN0YXRpYyBpbnQgcHJvY2Vzc19rZl9hcmdfcHRyX3RvX3JidHJlZV9ub2RlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTExOTE0LSAqIExTTSBob29rcyBhbmQgaXRlcnMgKGJvdGggc2xlZXBhYmxlIGFuZCBub24tc2xlZXBhYmxlKSBhcmUgc2FmZS5cbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMTkxNTogKiBBbnkgc2xlZXBhYmxlIHByb2dzIGFyZSBhbHNvIHNhZmUgc2luY2UgYnBmX2NoZWNrX2F0dGFjaF90YXJnZXQoKSBlbmZvcmNlXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTE5MTYtICogdGhlbSBjYW4gb25seSBiZSBhdHRhY2hlZCB0byBzb21lIHNwZWNpZmljIGhvb2sgcG9pbnRzLlxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xODg5Nj1idGZfYXR0YWNoX2Z1bmNfcHJvdG8oc3RydWN0IGJwZl92ZXJpZmllcl9sb2cgKmxvZywgc3RydWN0IGJ0ZiAqYnRmLCB1MzIgZnVuY19pZClcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTg5MzAtXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTg5MzE6aW50IGJwZl9jaGVja19hdHRhY2hfdGFyZ2V0KHN0cnVjdCBicGZfdmVyaWZpZXJfbG9nICpsb2csXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTg5MzItXHRcdFx0ICAgIGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZyxcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTkzMzY9c3RhdGljIGludCBjaGVja19hdHRhY2hfYnRmX2lkKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTE5MzY2LVxua2VybmVsL2JwZi92ZXJpZmllci5jOjE5MzY3Olx0cmV0ID0gYnBmX2NoZWNrX2F0dGFjaF90YXJnZXQoXHUwMDI2ZW52LVx1MDAzZWxvZywgcHJvZywgdGd0X3Byb2csIGJ0Zl9pZCwgXHUwMDI2dGd0X2luZm8pO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTE5MzY4LVx0aWYgKHJldClcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTk0MzUtXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTk0MzY6aW50IGJwZl9jaGVja19hdHRhY2hfYnRmX2lkX211bHRpKHN0cnVjdCBidGYgKmJ0Ziwgc3RydWN0IGJwZl9wcm9nICpwcm9nLCB1MzIgYnRmX2lkLFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE5NDM3LVx0XHRcdFx0ICBzdHJ1Y3QgYnBmX2F0dGFjaF90YXJnZXRfaW5mbyAqdGd0X2luZm8pXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTE5NjMzPWludCBicGZfZml4dXBfa2Z1bmNfY2FsbChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmluc24sXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTE5Nzc2LVxua2VybmVsL2JwZi92ZXJpZmllci5jOjE5Nzc3OmludCBicGZfY2hlY2soc3RydWN0IGJwZl9wcm9nICoqcHJvZywgdW5pb24gYnBmX2F0dHIgKmF0dHIsIGJwZnB0cl90IHVhdHRyLFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE5Nzc4LVx0ICAgICAgc3RydWN0IGJwZl9sb2dfYXR0ciAqYXR0cl9sb2cpXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTE5NzkxLVx0LyogJiMzOTtzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiYjMzk7IGNhbiBiZSBnbG9iYWwsIGJ1dCBzaW5jZSBpdCYjMzk7cyBub3Qgc21hbGwsXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTk3OTI6XHQgKiBhbGxvY2F0ZS9mcmVlIGl0IGV2ZXJ5IHRpbWUgYnBmX2NoZWNrKCkgaXMgY2FsbGVkXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTk3OTMtXHQgKi9cbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTk4NjYtXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTk4Njc6XHRyZXQgPSBicGZfY2hlY2tfYnRmX2luZm9fZWFybHkoZW52LCBhdHRyLCB1YXR0cik7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTk4NjgtXHRpZiAocmV0IFx1MDAzYyAwKVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xOTg3OC1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxOTg3OTpcdHJldCA9IGJwZl9jaGVja19idGZfaW5mbyhlbnYsIGF0dHIsIHVhdHRyKTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xOTg4MC1cdGlmIChyZXQgXHUwMDNjIDApXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTE5ODkyLVxua2VybmVsL2JwZi92ZXJpZmllci5jOjE5ODkzOlx0cmV0ID0gYnBmX2NoZWNrX2NmZyhlbnYpO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTE5ODk0LVx0aWYgKHJldCBcdTAwM2MgMClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMTI6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTcxMgoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDEwOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBJbml0aWFsIEFzc2Vzc21lbnQgb2YgdGhlIEJQRiBWZXJpZmllciBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaXQmIzM5O3MgY2xlYXIgdGhhdCBgYnBmX2NoZWNrYCBpcyB0aGUgcHJpbWFyeSBlbnRyeSBwb2ludCBmb3IgdGhlIHZlcmlmaWVyLCBubyBkb3VidCBhYm91dCBpdC4gVGhlIG1lYXQgb2YgdGhlIGNoYW5nZSBzZWVtcyB0byBiZSBhcm91bmQgdGhlIGhhbmRsaW5nIG9mIGBQVFJfVE9fQlRGX0lEYCBhbmQgYE1FTV9BTExPQ2Agd2l0aGluIHRoZSBCUEYgdmVyaWZpZXIgbG9naWMuIE15IGV4cGVydCBzZW5zZXMgYXJlIHRpbmdsaW5nIOKAkyB0aGlzIGxvb2tzIGZ1bmN0aW9uYWxseSBzb3VuZCBhbmQgcmlwZSBmb3Igc29tZSBzZXJpb3VzIGZ1enppbmcuIE15IGZvY3VzIHdpbGwgYmUgc3F1YXJlbHkgb24gdGhhdCBgYnBmX2NoZWNrYCBzeW1ib2wuCgpOb3csIGJlZm9yZSBJIGRpZyBpbiB0b28gZGVlcCwgSSBuZWVkIHRvIGNoZWNrIGZvciBhbnkgc3BlY2lmaWMga2VybmVsIGNvbmZpZ3VyYXRpb25zIHRoYXQgbWlnaHQgYmUgcmVxdWlyZWQgdG8gdHJpZ2dlciBvciB0ZXN0IHRoaXMgbmV3IGJlaGF2aW9yLiBJIHNlZSB0aGF0IHRoZSBwYXRjaCBpdHNlbGYgaXMgbmVzdGxlZCB3aXRoaW4gYGtlcm5lbC9icGYvdmVyaWZpZXIuY2AsIHdoaWNoIG1ha2VzIHNlbnNlLiBJIGNhbiBhc3N1bWUgQlBGIGlzIGVuYWJsZWQgdmlhIGBDT05GSUdfQlBGX1NZU0NBTExgLCBzbyBJJiMzOTttIGdvb2QgdGhlcmUuIFRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBjb2RlIGFuZCBzZWUgd2hhdCBudWFuY2VzIGF3YWl0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAxMjo0MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgQlBGX1NZU0NBTEwmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9LY29uZmlnPTI1PW1lbnUgXCYjMzQ7QlBGIHN1YnN5c3RlbVwmIzM0O1xua2VybmVsL2JwZi9LY29uZmlnLTI2LVxua2VybmVsL2JwZi9LY29uZmlnOjI3OmNvbmZpZyBCUEZfU1lTQ0FMTFxua2VybmVsL2JwZi9LY29uZmlnLTI4LVx0Ym9vbCBcJiMzNDtFbmFibGUgYnBmKCkgc3lzdGVtIGNhbGxcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMTI6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTAxNDEKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAxMzQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBSZWZjb3VudGVkIEtwdHIgUGF0Y2gqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyB0b3VjaGluZyBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3JlZmNvdW50ZWRfa3B0ci5jYC4gVGhhdCYjMzk7cyBhIHNlbGZ0ZXN0LCB1c2luZyB0aG9zZSBgYnBmX3JlZmNvdW50X2FjcXVpcmVgIGFuZCBgYnBmX29ial9kcm9wYCBrZnVuY3MuIFNlZW1zIHByZXR0eSBzdHJhaWdodGZvcndhcmQsIHVzaW5nIHJlZmVyZW5jZSBjb3VudGluZyB3aXRoIEJQRi4gTGV0JiMzOTtzIG1ha2Ugc3VyZSB3ZSBoYXZlbiYjMzk7dCBtaXNzZWQgYW55IG90aGVyIGNvbmZpZyBkZXBlbmRlbmNpZXMuIEkmIzM5O20gYXNzdW1pbmcgYENPTkZJR19CUEZfU1lTQ0FMTGAgaXMgdGhlIGNyaXRpY2FsIG9uZSwgYnV0IGl0IG5ldmVyIGh1cnRzIHRvIGRvdWJsZS1jaGVjay4KCk5vdywgbGV0JiMzOTtzIGp1c3QgcXVpY2tseSByZS1mb2N1cyBvbiB0aGUga2V5IHN5bWJvbHMgaW52b2x2ZWQgaW4gdGhpcy4gYGJwZl9jaGVja2AgaXMgdGhlIHByaW1hcnkgZW50cnkgZm9yIHRoZSB2ZXJpZmllciwgYnV0IGFyZSB0aGVyZSBhbnkgb3RoZXIgZnVuY3Rpb25zIHRoYXQgbWlnaHQgYmUgcmVsZXZhbnQgdG8gdGhpcyBuZXcgYmVoYXZpb3I/IE1heWJlIGBicGZfcHJvZ19sb2FkYCBpcyBhbHNvIHdvcnRoIGEgbG9vaz8KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMTI6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnBmX3Byb2dfbG9hZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvYnBmX2xzbS5jPTI5Nj1CVEZfSUQoZnVuYywgYnBmX2xzbV9icGZfcHJvZylcbmtlcm5lbC9icGYvYnBmX2xzbS5jOjI5NzpCVEZfSUQoZnVuYywgYnBmX2xzbV9icGZfcHJvZ19sb2FkKVxua2VybmVsL2JwZi9icGZfbHNtLmMtMjk4LUJURl9JRChmdW5jLCBicGZfbHNtX2JwZl9wcm9nX2ZyZWUpXG4tLVxua2VybmVsL2JwZi9maXh1cHMuYz0xMDI4PXN0YXRpYyBpbnQgaml0X3N1YnByb2dzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXG4tLVxua2VybmVsL2JwZi9maXh1cHMuYy0xMjI4LVx0ICogcG9wdWxhdGUga2FsbHN5c20uIEJlZ2luIGF0IHRoZSBmaXJzdCBzdWJwcm9ncmFtLCBzaW5jZVxua2VybmVsL2JwZi9maXh1cHMuYzoxMjI5Olx0ICogYnBmX3Byb2dfbG9hZCB3aWxsIGFkZCB0aGUga2FsbHN5bXMgZm9yIHRoZSBtYWluIHByb2dyYW0uXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTEyMzAtXHQgKi9cbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYz0yNjkxPUVYUE9SVF9TWU1CT0xfR1BMKGJwZl9wcm9nX2dldF90eXBlX2Rldik7XG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmMtMjcwMC0gKlxua2VybmVsL2JwZi9zeXNjYWxsLmM6MjcwMTogKiBicGZfcHJvZ19sb2FkX2ZpeHVwX2F0dGFjaF90eXBlKCkgc2V0cyBleHBlY3RlZF9hdHRhY2hfdHlwZSBpbiBAYXR0ciBpZlxua2VybmVsL2JwZi9zeXNjYWxsLmMtMjcwMi0gKiBwcm9nIHR5cGUgcmVxdWlyZXMgaXQgYnV0IGhhcyBzb21lIGF0dGFjaCB0eXBlcyB0aGF0IGhhdmUgdG8gYmUgYmFja3dhcmRcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0yNzA0LSAqL1xua2VybmVsL2JwZi9zeXNjYWxsLmM6MjcwNTpzdGF0aWMgdm9pZCBicGZfcHJvZ19sb2FkX2ZpeHVwX2F0dGFjaF90eXBlKHVuaW9uIGJwZl9hdHRyICphdHRyKVxua2VybmVsL2JwZi9zeXNjYWxsLmMtMjcwNi17XG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmM9MjcyND1zdGF0aWMgaW50XG5rZXJuZWwvYnBmL3N5c2NhbGwuYzoyNzI1OmJwZl9wcm9nX2xvYWRfY2hlY2tfYXR0YWNoKGVudW0gYnBmX3Byb2dfdHlwZSBwcm9nX3R5cGUsXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0yNzI2LVx0XHRcdCAgIGVudW0gYnBmX2F0dGFjaF90eXBlIGV4cGVjdGVkX2F0dGFjaF90eXBlLFxuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jPTI5Njc9QlRGX0lEX0xJU1RfR0xPQkFMX1NJTkdMRShicGZfbXVsdGlfZnVuY19idGZfaWQsIGZ1bmMsIGJwZl9tdWx0aV9mdW5jKVxuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jLTI5NzEtXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzoyOTcyOnN0YXRpYyBpbnQgYnBmX3Byb2dfbG9hZCh1bmlvbiBicGZfYXR0ciAqYXR0ciwgYnBmcHRyX3QgdWF0dHIsIHN0cnVjdCBicGZfbG9nX2F0dHIgKmF0dHJfbG9nKVxua2VybmVsL2JwZi9zeXNjYWxsLmMtMjk3My17XG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmMtMjk5Ni1cbmtlcm5lbC9icGYvc3lzY2FsbC5jOjI5OTc6XHRicGZfcHJvZ19sb2FkX2ZpeHVwX2F0dGFjaF90eXBlKGF0dHIpO1xua2VybmVsL2JwZi9zeXNjYWxsLmMtMjk5OC1cbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0zMDg0LVxua2VybmVsL2JwZi9zeXNjYWxsLmM6MzA4NTpcdGlmIChicGZfcHJvZ19sb2FkX2NoZWNrX2F0dGFjaCh0eXBlLCBhdHRyLVx1MDAzZWV4cGVjdGVkX2F0dGFjaF90eXBlLFxua2VybmVsL2JwZi9zeXNjYWxsLmMtMzA4Ni1cdFx0XHRcdCAgICAgICBhdHRhY2hfYnRmLCBhdHRyLVx1MDAzZWF0dGFjaF9idGZfaWQsXG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmMtMzE5MS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jOjMxOTI6XHRlcnIgPSBzZWN1cml0eV9icGZfcHJvZ19sb2FkKHByb2csIGF0dHIsIHRva2VuLCB1YXR0ci5pc19rZXJuZWwpO1xua2VybmVsL2JwZi9zeXNjYWxsLmMtMzE5My1cdGlmIChlcnIpXG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmM9NjM1ND1zdGF0aWMgaW50IF9fc3lzX2JwZihlbnVtIGJwZl9jbWQgY21kLCBicGZwdHJfdCB1YXR0ciwgdW5zaWduZWQgaW50IHNpemUsXG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmMtNjQxNy1cdFx0XHRcdFx0c2l6ZV9jb21tb24pO1xua2VybmVsL2JwZi9zeXNjYWxsLmM6NjQxODpcdFx0ZXJyID0gZXJyID86IGJwZl9wcm9nX2xvYWQoXHUwMDI2YXR0ciwgdWF0dHIsIFx1MDAyNmF0dHJfbG9nKTtcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTY0MTktXHRcdGJyZWFrO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAxMjo0MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTUwNQoJCQkJCQkJb3V0cHV0OiAxMzUKCQkJCQkJCXRob3VnaHRzOiA5NTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRm9jdXNpbmcgb24gdGhlIEJQRiBWZXJpZmllcioqCgpPa2F5LCBzbyBJJiMzOTttIHRoaW5raW5nIGFib3V0IGhvdyB0byBhcHByb2FjaCB0aGlzIGZ1enppbmcgdGFzay4gYGJwZl9wcm9nX2xvYWRgIGlzIGEgZ29vZCBzdGFydGluZyBwb2ludCwgYnV0IEkgc2VlIHRoYXQgYGJwZl9jaGVja2AgaXMgY2FsbGVkIGJ5IGl0LCBhbmQgaXQmIzM5O3MgbG9va2luZyBsaWtlIHRoZSBtb3JlIHRhcmdldGVkIGVudHJ5IHBvaW50LiBIb3dldmVyLCBgYnBmX2NoZWNrYCBpcyB0aGUgbWFpbiB2ZXJpZmllciBmdW5jdGlvbiwgdGhlIGhvdCBwYXRoIGZvciBCUEYgZnV6emluZy4gVGhlIHByb21wdCBzYXlzIHRvIGF2b2lkIG92ZXJseSBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucy4gSWYgSSBmb2N1cyBvbiBpdCBJIHdpbGwgZm9jdXMgZnV6emluZyBvbiB0aGUgdmVyaWZpZXIuIFNvLCBpcyB0aGVyZSBhbnkgb3RoZXIgZW50cnkgcG9pbnQ/CgpUaGUgcGF0Y2ggbW9kaWZpZXMgYGNoZWNrX3B0cl90b19idGZfYWNjZXNzYCBhbmQgYGNoZWNrX2tmdW5jX2FyZ3NgLCBidXQgdGhvc2UgYXJlIHN0YXRpYyBmdW5jdGlvbnMsIHNvIHBvdGVudGlhbGx5IGlubGluZWQuIFRoZSBwcm9tcHQgcHJlZmVycyBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludHMuIEhtbW0sIHRoZSBwYXRjaCBzZWVtcyB0byBleGNsdXNpdmVseSB0b3VjaCB0aGUgc3RhdGljIGZ1bmN0aW9ucyB3aXRoaW4gdGhlIHZlcmlmaWVyLgoKRXZlbiBpZiBgYnBmX2NoZWNrYCBpcyBnZW5lcmljLCBpdCAqaXMqIHRoZSBlbnRyeSBwb2ludCBmb3IgdGhlIHZlcmlmaWVyLCBzbyBwcm92aWRpbmcgaXQgaXMgYmV0dGVyIHRoYW4gbm90aGluZywgb3IgZXZlbiBiZXR0ZXIgdGhhbiBndWVzc2luZyBzb21lIG90aGVyIHJlbGF0ZWQgYnV0IGxlc3MgY3JpdGljYWwgZnVuY3Rpb24uIFNvIGxldCYjMzk7cyBjaGVjaywgaW4gYGtlcm5lbC9icGYvdmVyaWZpZXIuY2A6IGBpbnQgYnBmX2NoZWNrKC4uLilgLCBpdCYjMzk7cyBnbG9iYWwgYW5kIGV4cG9ydGVkLiBUaGF0IHNldHRsZXMgaXQuIGBicGZfY2hlY2tgIGl0IGlzLgoKTGV0JiMzOTtzIHF1aWNrbHkgcmV2aWV3IHRoZSBjaGFuZ2VzIGZvciBjb250ZXh0LiBJIHNlZSBhIG5ldyBpbmxpbmUgZnVuY3Rpb24gYHR5cGVfaXNfdW50cnVzdGVkX3B0cl9hbGxvY19vYmpgLCBhbmQgdGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb25kaXRpb25zIGluIGBjaGVja19wdHJfdG9fYnRmX2FjY2Vzc2AgYW5kIGBjaGVja19rZnVuY19hcmdzYCByZWxhdGVkIHRvIGhhbmRsaW5nIGBQVFJfVE9fQlRGX0lEYCB0eXBlcy4gRXNzZW50aWFsbHksIGl0IGZpeGVzIGEgYnVnIHJlbGF0ZWQgdG8gdW50cnVzdGVkIGFsbG9jYXRlZCBvYmplY3RzIGJlaW5nIGluY29ycmVjdGx5IHJlamVjdGVkLiBUaGUgcGF0Y2ggaXMgbWFraW5nIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIEJQRiB2ZXJpZmllci4gVGhlIGNvbmZpZ3MgYXJlIGBCUEZfU1lTQ0FMTGAuIEkmIzM5O2xsIHVzZSBgYnBmX2NoZWNrYCBhcyB0aGUgZm9jdXMgc3ltYm9sLgoKTGV0JiMzOTtzIGNhbGwgc2V0LXJlc3VsdHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDEyOjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCUEZfU1lTQ0FMTCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2JwZl9jaGVjayYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgQlBGIHZlcmlmaWVyJiMzOTtzIGxvZ2ljIGZvciBoYW5kbGluZyBQVFJfVE9fQlRGX0lEIHdpdGggTUVNX0FMTE9DIGFuZCBQVFJfVU5UUlVTVEVEIGZsYWdzLCBzcGVjaWZpY2FsbHkgaW4gY2hlY2tfcHRyX3RvX2J0Zl9hY2Nlc3MgYW5kIGNoZWNrX2tmdW5jX2FyZ3MuIFRoZXNlIGNoYW5nZXMgYWZmZWN0IGhvdyB0aGUgdmVyaWZpZXIgdmFsaWRhdGVzIG1lbW9yeSBhY2Nlc3NlcyBhbmQga2Z1bmMgYXJndW1lbnRzIGZvciBhbGxvY2F0ZWQgb2JqZWN0cy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIEJQRiB2ZXJpZmllciB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YnBmX2NoZWNrJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBCUEYgdmVyaWZpZXImIzM5O3MgbG9naWMgZm9yIGhhbmRsaW5nIFBUUl9UT19CVEZfSUQgd2l0aCBNRU1fQUxMT0MgYW5kIFBUUl9VTlRSVVNURUQgZmxhZ3MsIHNwZWNpZmljYWxseSBpbiBjaGVja19wdHJfdG9fYnRmX2FjY2VzcyBhbmQgY2hlY2tfa2Z1bmNfYXJncy4gVGhlc2UgY2hhbmdlcyBhZmZlY3QgaG93IHRoZSB2ZXJpZmllciB2YWxpZGF0ZXMgbWVtb3J5IGFjY2Vzc2VzIGFuZCBrZnVuYyBhcmd1bWVudHMgZm9yIGFsbG9jYXRlZCBvYmplY3RzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgQlBGIHZlcmlmaWVyIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDEyOjQyOjE4LjA3NDc5MDgwM1oiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2NzEyMjg5NDY3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9TWVNDQUxMXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYnBmX2NoZWNrXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEJQRiB2ZXJpZmllcidzIGxvZ2ljIGZvciBoYW5kbGluZyBQVFJfVE9fQlRGX0lEIHdpdGggTUVNX0FMTE9DIGFuZCBQVFJfVU5UUlVTVEVEIGZsYWdzLCBzcGVjaWZpY2FsbHkgaW4gY2hlY2tfcHRyX3RvX2J0Zl9hY2Nlc3MgYW5kIGNoZWNrX2tmdW5jX2FyZ3MuIFRoZXNlIGNoYW5nZXMgYWZmZWN0IGhvdyB0aGUgdmVyaWZpZXIgdmFsaWRhdGVzIG1lbW9yeSBhY2Nlc3NlcyBhbmQga2Z1bmMgYXJndW1lbnRzIGZvciBhbGxvY2F0ZWQgb2JqZWN0cy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIEJQRiB2ZXJpZmllciB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDEyOjQyOjE4LjA3NDc5NjY1M1oiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDMxNjkxMDgzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgMzkyZjQ4MTdjYjIxYTM4YWQ1NGRjNzNkYTc2ZWNkOTUyOGVlZWJhMFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgTW9uIEF1ZyAzIDEyOjQyOjE3IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmggYi9pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oXFxuaW5kZXggMzlhODUxZTY5MGVjNC4uNzAxNGQ2MmZlM2QxYyAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaFxcbkBAIC0xMzA3LDcgKzEzMDcsMTYgQEAgc3RhdGljIGlubGluZSBib29sIGJwZl90eXBlX2hhc191bnNhZmVfbW9kaWZpZXJzKHUzMiB0eXBlKVxcbiBcXG4gc3RhdGljIGlubGluZSBib29sIHR5cGVfaXNfcHRyX2FsbG9jX29iaih1MzIgdHlwZSlcXG4ge1xcbi1cXHRyZXR1cm4gYmFzZV90eXBlKHR5cGUpID09IFBUUl9UT19CVEZfSUQgXFx1MDAyNlxcdTAwMjYgdHlwZV9mbGFnKHR5cGUpIFxcdTAwMjYgTUVNX0FMTE9DO1xcbitcXHRyZXR1cm4gYmFzZV90eXBlKHR5cGUpID09IFBUUl9UT19CVEZfSUQgXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgICAgIHR5cGVfZmxhZyh0eXBlKSBcXHUwMDI2IE1FTV9BTExPQyBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAgICAgISh0eXBlX2ZsYWcodHlwZSkgXFx1MDAyNiBQVFJfVU5UUlVTVEVEKTtcXG4rfVxcbitcXG4rc3RhdGljIGlubGluZSBib29sIHR5cGVfaXNfdW50cnVzdGVkX3B0cl9hbGxvY19vYmoodTMyIHR5cGUpXFxuK3tcXG4rXFx0cmV0dXJuIGJhc2VfdHlwZSh0eXBlKSA9PSBQVFJfVE9fQlRGX0lEIFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICAgICB0eXBlX2ZsYWcodHlwZSkgXFx1MDAyNiBNRU1fQUxMT0MgXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgICAgIHR5cGVfZmxhZyh0eXBlKSBcXHUwMDI2IFBUUl9VTlRSVVNURUQ7XFxuIH1cXG4gXFxuIHN0YXRpYyBpbmxpbmUgYm9vbCB0eXBlX2lzX25vbl9vd25pbmdfcmVmKHUzMiB0eXBlKVxcbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL3ZlcmlmaWVyLmMgYi9rZXJuZWwvYnBmL3ZlcmlmaWVyLmNcXG5pbmRleCBmZGM1ZmJiMWY3OGNhLi44YjM1YzYzNzgwNzk4IDEwMDY0NFxcbi0tLSBhL2tlcm5lbC9icGYvdmVyaWZpZXIuY1xcbisrKyBiL2tlcm5lbC9icGYvdmVyaWZpZXIuY1xcbkBAIC01ODA5LDcgKzU4MDksMTMgQEAgc3RhdGljIGludCBjaGVja19wdHJfdG9fYnRmX2FjY2VzcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbiBcXHRcXHRcXHRyZXR1cm4gLUVBQ0NFUztcXG4gXFx0XFx0fVxcbiBcXG4tXFx0XFx0aWYgKHR5cGVfaXNfYWxsb2MocmVnLVxcdTAwM2V0eXBlKSBcXHUwMDI2XFx1MDAyNiAhdHlwZV9pc19ub25fb3duaW5nX3JlZihyZWctXFx1MDAzZXR5cGUpIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdC8qXFxuK1xcdFxcdCAqIFNraXAgdGhpcyByZWZlcmVuY2VkLUlEIHNhbml0eSBjaGVjayBmb3IgdW50cnVzdGVkIGFsbG9jYXRlZCBvYmplY3RzO1xcbitcXHRcXHQgKiB0aGUgYWNjZXNzIGNoZWNrIGFib3ZlIGFscmVhZHkgcmVqZWN0cyB3cml0ZXMgdGhyb3VnaCB0aGVtLlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0aWYgKHR5cGVfaXNfYWxsb2MocmVnLVxcdTAwM2V0eXBlKSBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHQgICAgIXR5cGVfaXNfdW50cnVzdGVkX3B0cl9hbGxvY19vYmoocmVnLVxcdTAwM2V0eXBlKSBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHQgICAgIXR5cGVfaXNfbm9uX293bmluZ19yZWYocmVnLVxcdTAwM2V0eXBlKSBcXHUwMDI2XFx1MDAyNlxcbiBcXHRcXHQgICAgIShyZWctXFx1MDAzZXR5cGUgXFx1MDAyNiBNRU1fUkNVKSBcXHUwMDI2XFx1MDAyNiAhcmVnX2lzX3JlZmVyZW5jZWQoZW52LCByZWcpKSB7XFxuIFxcdFxcdFxcdHZlcmlmaWVyX2J1ZyhlbnYsIFxcXCJhbGxvY2F0ZWQgb2JqZWN0IG11c3QgaGF2ZSBhIHJlZmVyZW5jZWQgaWRcXFwiKTtcXG4gXFx0XFx0XFx0cmV0dXJuIC1FRkFVTFQ7XFxuQEAgLTEyNDE5LDcgKzEyNDI1LDcgQEAgc3RhdGljIGludCBjaGVja19rZnVuY19hcmdzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfa2Z1bmNfY2FsbF9cXG4gXFx0XFx0XFx0XFx0XFx0cmVnX2FyZ19uYW1lKGVudiwgYXJnbm8pKTtcXG4gXFx0XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIFxcdFxcdFxcdH1cXG4tXFx0XFx0XFx0aWYgKCF0eXBlX2lzX25vbl9vd25pbmdfcmVmKHJlZy1cXHUwMDNldHlwZSkpXFxuK1xcdFxcdFxcdGlmICghdHlwZV9pc19ub25fb3duaW5nX3JlZihyZWctXFx1MDAzZXR5cGUpIFxcdTAwMjZcXHUwMDI2IHJlZ19pc19yZWZlcmVuY2VkKGVudiwgcmVnKSlcXG4gXFx0XFx0XFx0XFx0bWV0YS1cXHUwMDNlYXJnX293bmluZ19yZWYgPSB0cnVlO1xcbiBcXG4gXFx0XFx0XFx0cmVjID0gcmVnX2J0Zl9yZWNvcmQocmVnKTtcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3JlZmNvdW50ZWRfa3B0ci5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3JlZmNvdW50ZWRfa3B0ci5jXFxuaW5kZXggNjE5MDZmNDgwMjVjYy4uYjcwYmU4YjUyZmY4MCAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvcmVmY291bnRlZF9rcHRyLmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvcmVmY291bnRlZF9rcHRyLmNcXG5AQCAtMjMsNiArMjMsMTUgQEAgc3RydWN0IG1hcF92YWx1ZSB7XFxuIFxcdHN0cnVjdCBub2RlX2RhdGEgX19rcHRyICpub2RlO1xcbiB9O1xcbiBcXG4rc3RydWN0IG5vZGVfcmVmY291bnRfb25seSB7XFxuK1xcdGxvbmcga2V5O1xcbitcXHRzdHJ1Y3QgYnBmX3JlZmNvdW50IHJlZmNvdW50O1xcbit9O1xcbitcXG4rc3RydWN0IG1hcF92YWx1ZV9yZWZjb3VudF9vbmx5IHtcXG4rXFx0c3RydWN0IG5vZGVfcmVmY291bnRfb25seSBfX2twdHIgKm5vZGU7XFxuK307XFxuK1xcbiBzdHJ1Y3Qge1xcbiBcXHRfX3VpbnQodHlwZSwgQlBGX01BUF9UWVBFX0FSUkFZKTtcXG4gXFx0X190eXBlKGtleSwgaW50KTtcXG5AQCAtMzAsNiArMzksMTMgQEAgc3RydWN0IHtcXG4gXFx0X191aW50KG1heF9lbnRyaWVzLCAyKTtcXG4gfSBzdGFzaGVkX25vZGVzIFNFQyhcXFwiLm1hcHNcXFwiKTtcXG4gXFxuK3N0cnVjdCB7XFxuK1xcdF9fdWludCh0eXBlLCBCUEZfTUFQX1RZUEVfQVJSQVkpO1xcbitcXHRfX3R5cGUoa2V5LCBpbnQpO1xcbitcXHRfX3R5cGUodmFsdWUsIHN0cnVjdCBtYXBfdmFsdWVfcmVmY291bnRfb25seSk7XFxuK1xcdF9fdWludChtYXhfZW50cmllcywgMSk7XFxuK30gc3Rhc2hlZF9yZWZjb3VudF9vbmx5IFNFQyhcXFwiLm1hcHNcXFwiKTtcXG4rXFxuIHN0cnVjdCBub2RlX2FjcXVpcmUge1xcbiBcXHRsb25nIGtleTtcXG4gXFx0bG9uZyBkYXRhO1xcbkBAIC04MzIsNiArODQ4LDE1MSBAQCBsb25nIHJidHJlZV9yZWZjb3VudGVkX25vZGVfcmVmX2VzY2FwZXNfb3duaW5nX2lucHV0KHZvaWQgKmN0eClcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuK1NFQyhcXFwidGNcXFwiKVxcbitfX3N1Y2Nlc3NcXG4rbG9uZyByZWZjb3VudF9hY3F1aXJlX293bmluZ19pbnB1dF9ub19udWxsX2NoZWNrKHZvaWQgKmN0eClcXG4re1xcbitcXHRzdHJ1Y3Qgbm9kZV9yZWZjb3VudF9vbmx5ICpuLCAqbTtcXG4rXFxuK1xcdG4gPSBicGZfb2JqX25ldyh0eXBlb2YoKm4pKTtcXG4rXFx0aWYgKCFuKVxcbitcXHRcXHRyZXR1cm4gMTtcXG4rXFxuK1xcdG0gPSBicGZfcmVmY291bnRfYWNxdWlyZShuKTtcXG4rXFx0YnBmX29ial9kcm9wKG0pO1xcbitcXHRicGZfb2JqX2Ryb3Aobik7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rU0VDKFxcXCJ0Y1xcXCIpXFxuK19fc3VjY2Vzc1xcbitsb25nIHJlZmNvdW50X2FjcXVpcmVfcmN1X21hcF9rcHRyX251bGxfY2hlY2tlZCh2b2lkICpjdHgpXFxuK3tcXG4rXFx0c3RydWN0IG1hcF92YWx1ZV9yZWZjb3VudF9vbmx5ICptYXB2YWw7XFxuK1xcdHN0cnVjdCBub2RlX3JlZmNvdW50X29ubHkgKm4sICptO1xcbitcXHRpbnQgaWR4ID0gMDtcXG4rXFxuK1xcdG1hcHZhbCA9IGJwZl9tYXBfbG9va3VwX2VsZW0oXFx1MDAyNnN0YXNoZWRfcmVmY291bnRfb25seSwgXFx1MDAyNmlkeCk7XFxuK1xcdGlmICghbWFwdmFsKVxcbitcXHRcXHRyZXR1cm4gMTtcXG4rXFxuK1xcdGJwZl9yY3VfcmVhZF9sb2NrKCk7XFxuK1xcdG4gPSBtYXB2YWwtXFx1MDAzZW5vZGU7XFxuK1xcdGlmICghbikge1xcbitcXHRcXHRicGZfcmN1X3JlYWRfdW5sb2NrKCk7XFxuK1xcdFxcdHJldHVybiAyO1xcbitcXHR9XFxuK1xcdG0gPSBicGZfcmVmY291bnRfYWNxdWlyZShuKTtcXG4rXFx0YnBmX3JjdV9yZWFkX3VubG9jaygpO1xcbitcXG4rXFx0aWYgKCFtKVxcbitcXHRcXHRyZXR1cm4gMztcXG4rXFx0YnBmX29ial9kcm9wKG0pO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK1NFQyhcXFwiP3RjXFxcIilcXG4rX19zdWNjZXNzXFxuK2xvbmcgbWFwX2twdHJfcmVhZF9hZnRlcl9yY3VfdW5sb2NrKHZvaWQgKmN0eClcXG4re1xcbitcXHRzdHJ1Y3QgbWFwX3ZhbHVlX3JlZmNvdW50X29ubHkgKm1hcHZhbDtcXG4rXFx0c3RydWN0IG5vZGVfcmVmY291bnRfb25seSAqbjtcXG4rXFx0aW50IGlkeCA9IDA7XFxuK1xcbitcXHRtYXB2YWwgPSBicGZfbWFwX2xvb2t1cF9lbGVtKFxcdTAwMjZzdGFzaGVkX3JlZmNvdW50X29ubHksIFxcdTAwMjZpZHgpO1xcbitcXHRpZiAoIW1hcHZhbClcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbitcXHRicGZfcmN1X3JlYWRfbG9jaygpO1xcbitcXHRuID0gbWFwdmFsLVxcdTAwM2Vub2RlO1xcbitcXHRpZiAoIW4pIHtcXG4rXFx0XFx0YnBmX3JjdV9yZWFkX3VubG9jaygpO1xcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFx0fVxcbitcXHRicGZfcmN1X3JlYWRfdW5sb2NrKCk7XFxuK1xcbitcXHRyZXR1cm4gbi1cXHUwMDNla2V5O1xcbit9XFxuK1xcbitTRUMoXFxcIj90Y1xcXCIpXFxuK19fZmFpbHVyZSBfX21zZyhcXFwiaXMgbmVpdGhlciBvd25pbmcgb3Igbm9uLW93bmluZyByZWZcXFwiKVxcbitsb25nIHJlZmNvdW50X2FjcXVpcmVfZ3JhcGhfYWZ0ZXJfcmN1X3VubG9jayh2b2lkICpjdHgpXFxuK3tcXG4rXFx0c3RydWN0IG1hcF92YWx1ZSAqbWFwdmFsO1xcbitcXHRzdHJ1Y3Qgbm9kZV9kYXRhICpuLCAqbTtcXG4rXFx0aW50IGlkeCA9IDA7XFxuK1xcbitcXHRtYXB2YWwgPSBicGZfbWFwX2xvb2t1cF9lbGVtKFxcdTAwMjZzdGFzaGVkX25vZGVzLCBcXHUwMDI2aWR4KTtcXG4rXFx0aWYgKCFtYXB2YWwpXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4rXFx0YnBmX3JjdV9yZWFkX2xvY2soKTtcXG4rXFx0biA9IG1hcHZhbC1cXHUwMDNlbm9kZTtcXG4rXFx0aWYgKCFuKSB7XFxuK1xcdFxcdGJwZl9yY3VfcmVhZF91bmxvY2soKTtcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcdH1cXG4rXFx0YnBmX3JjdV9yZWFkX3VubG9jaygpO1xcbitcXG4rXFx0bSA9IGJwZl9yZWZjb3VudF9hY3F1aXJlKG4pO1xcbitcXHRpZiAobSlcXG4rXFx0XFx0YnBmX29ial9kcm9wKG0pO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK1NFQyhcXFwiP3RjXFxcIilcXG4rX19mYWlsdXJlIF9fbXNnKFxcXCJvbmx5IHJlYWQgaXMgc3VwcG9ydGVkXFxcIilcXG4rbG9uZyBncmFwaF9tYXBfa3B0cl93cml0ZV9hZnRlcl9yY3VfdW5sb2NrKHZvaWQgKmN0eClcXG4re1xcbitcXHRzdHJ1Y3QgbWFwX3ZhbHVlICptYXB2YWw7XFxuK1xcdHN0cnVjdCBub2RlX2RhdGEgKm47XFxuK1xcdGludCBpZHggPSAwO1xcbitcXG4rXFx0bWFwdmFsID0gYnBmX21hcF9sb29rdXBfZWxlbShcXHUwMDI2c3Rhc2hlZF9ub2RlcywgXFx1MDAyNmlkeCk7XFxuK1xcdGlmICghbWFwdmFsKVxcbitcXHRcXHRyZXR1cm4gMTtcXG4rXFxuK1xcdGJwZl9yY3VfcmVhZF9sb2NrKCk7XFxuK1xcdG4gPSBtYXB2YWwtXFx1MDAzZW5vZGU7XFxuK1xcdGlmICghbikge1xcbitcXHRcXHRicGZfcmN1X3JlYWRfdW5sb2NrKCk7XFxuK1xcdFxcdHJldHVybiAyO1xcbitcXHR9XFxuK1xcdGJwZl9yY3VfcmVhZF91bmxvY2soKTtcXG4rXFxuK1xcdG4tXFx1MDAzZWtleSA9IDE7XFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitTRUMoXFxcIj90Y1xcXCIpXFxuK19fc3VjY2Vzc1xcbitsb25nIGdyYXBoX21hcF9rcHRyX3JlYWRfYWZ0ZXJfc3Bpbl91bmxvY2sodm9pZCAqY3R4KVxcbit7XFxuK1xcdHN0cnVjdCBtYXBfdmFsdWUgKm1hcHZhbDtcXG4rXFx0c3RydWN0IG5vZGVfZGF0YSAqbjtcXG4rXFx0aW50IGlkeCA9IDA7XFxuK1xcbitcXHRtYXB2YWwgPSBicGZfbWFwX2xvb2t1cF9lbGVtKFxcdTAwMjZzdGFzaGVkX25vZGVzLCBcXHUwMDI2aWR4KTtcXG4rXFx0aWYgKCFtYXB2YWwpXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4rXFx0YnBmX3JjdV9yZWFkX2xvY2soKTtcXG4rXFx0biA9IG1hcHZhbC1cXHUwMDNlbm9kZTtcXG4rXFx0aWYgKCFuKSB7XFxuK1xcdFxcdGJwZl9yY3VfcmVhZF91bmxvY2soKTtcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcdH1cXG4rXFx0YnBmX3JjdV9yZWFkX3VubG9jaygpO1xcbitcXG4rXFx0YnBmX3NwaW5fbG9jayhcXHUwMDI2bG9jayk7XFxuK1xcdGJwZl9zcGluX3VubG9jayhcXHUwMDI2bG9jayk7XFxuK1xcbitcXHRyZXR1cm4gbi1cXHUwMDNla2V5O1xcbit9XFxuK1xcbiBzdGF0aWMgbG9uZyBfX3N0YXNoX21hcF9lbXB0eV94Y2hnKHN0cnVjdCBub2RlX2RhdGEgKm4sIGludCBpZHgpXFxuIHtcXG4gXFx0c3RydWN0IG1hcF92YWx1ZSAqbWFwdmFsID0gYnBmX21hcF9sb29rdXBfZWxlbShcXHUwMDI2c3Rhc2hlZF9ub2RlcywgXFx1MDAyNmlkeCk7XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9yZWZjb3VudGVkX2twdHJfZmFpbC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3JlZmNvdW50ZWRfa3B0cl9mYWlsLmNcXG5pbmRleCAwMjRlZjJhYWUyMDA4Li4zNDA4ZjY4YWQ0NDRkIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9yZWZjb3VudGVkX2twdHJfZmFpbC5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3JlZmNvdW50ZWRfa3B0cl9mYWlsLmNcXG5AQCAtMTksNiArMTksMTUgQEAgc3RydWN0IG5vZGVfcmVmY291bnRlZCB7XFxuIFxcdHN0cnVjdCBicGZfcmVmY291bnQgcmVmY291bnQ7XFxuIH07XFxuIFxcbitzdHJ1Y3Qgbm9kZV9yZWZjb3VudF9vbmx5IHtcXG4rXFx0bG9uZyBrZXk7XFxuK1xcdHN0cnVjdCBicGZfcmVmY291bnQgcmVmY291bnQ7XFxuK307XFxuK1xcbitzdHJ1Y3QgbWFwX3ZhbHVlX3JlZmNvdW50X29ubHkge1xcbitcXHRzdHJ1Y3Qgbm9kZV9yZWZjb3VudF9vbmx5IF9fa3B0ciAqbm9kZTtcXG4rfTtcXG4rXFxuIGV4dGVybiB2b2lkIGJwZl9yY3VfcmVhZF9sb2NrKHZvaWQpIF9fa3N5bTtcXG4gZXh0ZXJuIHZvaWQgYnBmX3JjdV9yZWFkX3VubG9jayh2b2lkKSBfX2tzeW07XFxuIFxcbkBAIC0yOCw2ICszNywxMyBAQCBwcml2YXRlKEEpIHN0cnVjdCBicGZfcmJfcm9vdCBncm9vdCBfX2NvbnRhaW5zKG5vZGVfYWNxdWlyZSwgbm9kZSk7XFxuIHByaXZhdGUoQikgc3RydWN0IGJwZl9zcGluX2xvY2sgbG9jaztcXG4gcHJpdmF0ZShCKSBzdHJ1Y3QgYnBmX2xpc3RfaGVhZCBoZWFkIF9fY29udGFpbnMobm9kZV9yZWZjb3VudGVkLCBsaXN0KTtcXG4gXFxuK3N0cnVjdCB7XFxuK1xcdF9fdWludCh0eXBlLCBCUEZfTUFQX1RZUEVfQVJSQVkpO1xcbitcXHRfX3R5cGUoa2V5LCBpbnQpO1xcbitcXHRfX3R5cGUodmFsdWUsIHN0cnVjdCBtYXBfdmFsdWVfcmVmY291bnRfb25seSk7XFxuK1xcdF9fdWludChtYXhfZW50cmllcywgMSk7XFxuK30gc3Rhc2hlZF9yZWZjb3VudF9vbmx5IFNFQyhcXFwiLm1hcHNcXFwiKTtcXG4rXFxuIHN0YXRpYyBib29sIGxlc3Moc3RydWN0IGJwZl9yYl9ub2RlICphLCBjb25zdCBzdHJ1Y3QgYnBmX3JiX25vZGUgKmIpXFxuIHtcXG4gXFx0c3RydWN0IG5vZGVfYWNxdWlyZSAqbm9kZV9hO1xcbkBAIC04MCw2ICs5Niw2NCBAQCBsb25nIHJlZmNvdW50X2FjcXVpcmVfbWF5YmVfbnVsbCh2b2lkICpjdHgpXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbitTRUMoXFxcIj90Y1xcXCIpXFxuK19fZmFpbHVyZSBfX21zZyhcXFwiUG9zc2libHkgTlVMTCBwb2ludGVyIHBhc3NlZCB0byB0cnVzdGVkIFIxXFxcIilcXG4rbG9uZyByZWZjb3VudF9hY3F1aXJlX3JjdV9tYXBfa3B0cl91bmNoZWNrZWRfZHJvcCh2b2lkICpjdHgpXFxuK3tcXG4rXFx0c3RydWN0IG1hcF92YWx1ZV9yZWZjb3VudF9vbmx5ICptYXB2YWw7XFxuK1xcdHN0cnVjdCBub2RlX3JlZmNvdW50X29ubHkgKnRtcCwgKm4sICptO1xcbitcXHRpbnQgaWR4ID0gMDtcXG4rXFxuK1xcdHRtcCA9IGJwZl9vYmpfbmV3KHR5cGVvZigqdG1wKSk7XFxuK1xcdGlmICghdG1wKVxcbitcXHRcXHRyZXR1cm4gMztcXG4rXFx0YnBmX29ial9kcm9wKHRtcCk7XFxuK1xcbitcXHRtYXB2YWwgPSBicGZfbWFwX2xvb2t1cF9lbGVtKFxcdTAwMjZzdGFzaGVkX3JlZmNvdW50X29ubHksIFxcdTAwMjZpZHgpO1xcbitcXHRpZiAoIW1hcHZhbClcXG4rXFx0XFx0cmV0dXJuIDE7XFxuK1xcbitcXHRicGZfcmN1X3JlYWRfbG9jaygpO1xcbitcXHRuID0gbWFwdmFsLVxcdTAwM2Vub2RlO1xcbitcXHRpZiAoIW4pIHtcXG4rXFx0XFx0YnBmX3JjdV9yZWFkX3VubG9jaygpO1xcbitcXHRcXHRyZXR1cm4gMjtcXG4rXFx0fVxcbitcXHRtID0gYnBmX3JlZmNvdW50X2FjcXVpcmUobik7XFxuK1xcdGJwZl9yY3VfcmVhZF91bmxvY2soKTtcXG4rXFxuK1xcdGJwZl9vYmpfZHJvcChtKTtcXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitTRUMoXFxcIj90Y1xcXCIpXFxuK19fZmFpbHVyZSBfX21zZyhcXFwiaXMgbmVpdGhlciBvd25pbmcgb3Igbm9uLW93bmluZyByZWZcXFwiKVxcbitsb25nIHJlZmNvdW50X2FjcXVpcmVfYWZ0ZXJfcmN1X3VubG9jayh2b2lkICpjdHgpXFxuK3tcXG4rXFx0c3RydWN0IG1hcF92YWx1ZV9yZWZjb3VudF9vbmx5ICptYXB2YWw7XFxuK1xcdHN0cnVjdCBub2RlX3JlZmNvdW50X29ubHkgKm4sICptO1xcbitcXHRpbnQgaWR4ID0gMDtcXG4rXFxuK1xcdG1hcHZhbCA9IGJwZl9tYXBfbG9va3VwX2VsZW0oXFx1MDAyNnN0YXNoZWRfcmVmY291bnRfb25seSwgXFx1MDAyNmlkeCk7XFxuK1xcdGlmICghbWFwdmFsKVxcbitcXHRcXHRyZXR1cm4gMTtcXG4rXFxuK1xcdGJwZl9yY3VfcmVhZF9sb2NrKCk7XFxuK1xcdG4gPSBtYXB2YWwtXFx1MDAzZW5vZGU7XFxuK1xcdGlmICghbikge1xcbitcXHRcXHRicGZfcmN1X3JlYWRfdW5sb2NrKCk7XFxuK1xcdFxcdHJldHVybiAyO1xcbitcXHR9XFxuK1xcdGJwZl9yY3VfcmVhZF91bmxvY2soKTtcXG4rXFxuK1xcdG0gPSBicGZfcmVmY291bnRfYWNxdWlyZShuKTtcXG4rXFx0aWYgKG0pXFxuK1xcdFxcdGJwZl9vYmpfZHJvcChtKTtcXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbiBTRUMoXFxcIj90Y1xcXCIpXFxuIF9fZmFpbHVyZSBfX21zZyhcXFwiVW5yZWxlYXNlZCByZWZlcmVuY2UgaWQ9MyBhbGxvY19pbnNuPXt7WzAtOV0rfX1cXFwiKVxcbiBsb25nIHJidHJlZV9yZWZjb3VudGVkX25vZGVfcmVmX2VzY2FwZXNfb3duaW5nX2lucHV0KHZvaWQgKmN0eClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMTI6NDI6MTguNTA3MjUzNzE3WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6NDYyNzk4MDI4OTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX1NZU0NBTExcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJicGZfY2hlY2tcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgQlBGIHZlcmlmaWVyJ3MgbG9naWMgZm9yIGhhbmRsaW5nIFBUUl9UT19CVEZfSUQgd2l0aCBNRU1fQUxMT0MgYW5kIFBUUl9VTlRSVVNURUQgZmxhZ3MsIHNwZWNpZmljYWxseSBpbiBjaGVja19wdHJfdG9fYnRmX2FjY2VzcyBhbmQgY2hlY2tfa2Z1bmNfYXJncy4gVGhlc2UgY2hhbmdlcyBhZmZlY3QgaG93IHRoZSB2ZXJpZmllciB2YWxpZGF0ZXMgbWVtb3J5IGFjY2Vzc2VzIGFuZCBrZnVuYyBhcmd1bWVudHMgZm9yIGFsbG9jYXRlZCBvYmplY3RzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgQlBGIHZlcmlmaWVyIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgMzkyZjQ4MTdjYjIxYTM4YWQ1NGRjNzNkYTc2ZWNkOTUyOGVlZWJhMFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gQXVnIDMgMTI6NDI6MTcgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oIGIvaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaFxuaW5kZXggMzlhODUxZTY5MGVjNC4uNzAxNGQ2MmZlM2QxYyAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmhcbisrKyBiL2luY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmhcbkBAIC0xMzA3LDcgKzEzMDcsMTYgQEAgc3RhdGljIGlubGluZSBib29sIGJwZl90eXBlX2hhc191bnNhZmVfbW9kaWZpZXJzKHUzMiB0eXBlKVxuIFxuIHN0YXRpYyBpbmxpbmUgYm9vbCB0eXBlX2lzX3B0cl9hbGxvY19vYmoodTMyIHR5cGUpXG4ge1xuLVx0cmV0dXJuIGJhc2VfdHlwZSh0eXBlKSA9PSBQVFJfVE9fQlRGX0lEIFx1MDAyNlx1MDAyNiB0eXBlX2ZsYWcodHlwZSkgXHUwMDI2IE1FTV9BTExPQztcbitcdHJldHVybiBiYXNlX3R5cGUodHlwZSkgPT0gUFRSX1RPX0JURl9JRCBcdTAwMjZcdTAwMjZcbitcdCAgICAgICB0eXBlX2ZsYWcodHlwZSkgXHUwMDI2IE1FTV9BTExPQyBcdTAwMjZcdTAwMjZcbitcdCAgICAgICAhKHR5cGVfZmxhZyh0eXBlKSBcdTAwMjYgUFRSX1VOVFJVU1RFRCk7XG4rfVxuK1xuK3N0YXRpYyBpbmxpbmUgYm9vbCB0eXBlX2lzX3VudHJ1c3RlZF9wdHJfYWxsb2Nfb2JqKHUzMiB0eXBlKVxuK3tcbitcdHJldHVybiBiYXNlX3R5cGUodHlwZSkgPT0gUFRSX1RPX0JURl9JRCBcdTAwMjZcdTAwMjZcbitcdCAgICAgICB0eXBlX2ZsYWcodHlwZSkgXHUwMDI2IE1FTV9BTExPQyBcdTAwMjZcdTAwMjZcbitcdCAgICAgICB0eXBlX2ZsYWcodHlwZSkgXHUwMDI2IFBUUl9VTlRSVVNURUQ7XG4gfVxuIFxuIHN0YXRpYyBpbmxpbmUgYm9vbCB0eXBlX2lzX25vbl9vd25pbmdfcmVmKHUzMiB0eXBlKVxuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvdmVyaWZpZXIuYyBiL2tlcm5lbC9icGYvdmVyaWZpZXIuY1xuaW5kZXggZmRjNWZiYjFmNzhjYS4uOGIzNWM2Mzc4MDc5OCAxMDA2NDRcbi0tLSBhL2tlcm5lbC9icGYvdmVyaWZpZXIuY1xuKysrIGIva2VybmVsL2JwZi92ZXJpZmllci5jXG5AQCAtNTgwOSw3ICs1ODA5LDEzIEBAIHN0YXRpYyBpbnQgY2hlY2tfcHRyX3RvX2J0Zl9hY2Nlc3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbiBcdFx0XHRyZXR1cm4gLUVBQ0NFUztcbiBcdFx0fVxuIFxuLVx0XHRpZiAodHlwZV9pc19hbGxvYyhyZWctXHUwMDNldHlwZSkgXHUwMDI2XHUwMDI2ICF0eXBlX2lzX25vbl9vd25pbmdfcmVmKHJlZy1cdTAwM2V0eXBlKSBcdTAwMjZcdTAwMjZcbitcdFx0LypcbitcdFx0ICogU2tpcCB0aGlzIHJlZmVyZW5jZWQtSUQgc2FuaXR5IGNoZWNrIGZvciB1bnRydXN0ZWQgYWxsb2NhdGVkIG9iamVjdHM7XG4rXHRcdCAqIHRoZSBhY2Nlc3MgY2hlY2sgYWJvdmUgYWxyZWFkeSByZWplY3RzIHdyaXRlcyB0aHJvdWdoIHRoZW0uXG4rXHRcdCAqL1xuK1x0XHRpZiAodHlwZV9pc19hbGxvYyhyZWctXHUwMDNldHlwZSkgXHUwMDI2XHUwMDI2XG4rXHRcdCAgICAhdHlwZV9pc191bnRydXN0ZWRfcHRyX2FsbG9jX29iaihyZWctXHUwMDNldHlwZSkgXHUwMDI2XHUwMDI2XG4rXHRcdCAgICAhdHlwZV9pc19ub25fb3duaW5nX3JlZihyZWctXHUwMDNldHlwZSkgXHUwMDI2XHUwMDI2XG4gXHRcdCAgICAhKHJlZy1cdTAwM2V0eXBlIFx1MDAyNiBNRU1fUkNVKSBcdTAwMjZcdTAwMjYgIXJlZ19pc19yZWZlcmVuY2VkKGVudiwgcmVnKSkge1xuIFx0XHRcdHZlcmlmaWVyX2J1ZyhlbnYsIFwiYWxsb2NhdGVkIG9iamVjdCBtdXN0IGhhdmUgYSByZWZlcmVuY2VkIGlkXCIpO1xuIFx0XHRcdHJldHVybiAtRUZBVUxUO1xuQEAgLTEyNDE5LDcgKzEyNDI1LDcgQEAgc3RhdGljIGludCBjaGVja19rZnVuY19hcmdzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfa2Z1bmNfY2FsbF9cbiBcdFx0XHRcdFx0cmVnX2FyZ19uYW1lKGVudiwgYXJnbm8pKTtcbiBcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuIFx0XHRcdH1cbi1cdFx0XHRpZiAoIXR5cGVfaXNfbm9uX293bmluZ19yZWYocmVnLVx1MDAzZXR5cGUpKVxuK1x0XHRcdGlmICghdHlwZV9pc19ub25fb3duaW5nX3JlZihyZWctXHUwMDNldHlwZSkgXHUwMDI2XHUwMDI2IHJlZ19pc19yZWZlcmVuY2VkKGVudiwgcmVnKSlcbiBcdFx0XHRcdG1ldGEtXHUwMDNlYXJnX293bmluZ19yZWYgPSB0cnVlO1xuIFxuIFx0XHRcdHJlYyA9IHJlZ19idGZfcmVjb3JkKHJlZyk7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3JlZmNvdW50ZWRfa3B0ci5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3JlZmNvdW50ZWRfa3B0ci5jXG5pbmRleCA2MTkwNmY0ODAyNWNjLi5iNzBiZThiNTJmZjgwIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3JlZmNvdW50ZWRfa3B0ci5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvcmVmY291bnRlZF9rcHRyLmNcbkBAIC0yMyw2ICsyMywxNSBAQCBzdHJ1Y3QgbWFwX3ZhbHVlIHtcbiBcdHN0cnVjdCBub2RlX2RhdGEgX19rcHRyICpub2RlO1xuIH07XG4gXG4rc3RydWN0IG5vZGVfcmVmY291bnRfb25seSB7XG4rXHRsb25nIGtleTtcbitcdHN0cnVjdCBicGZfcmVmY291bnQgcmVmY291bnQ7XG4rfTtcbitcbitzdHJ1Y3QgbWFwX3ZhbHVlX3JlZmNvdW50X29ubHkge1xuK1x0c3RydWN0IG5vZGVfcmVmY291bnRfb25seSBfX2twdHIgKm5vZGU7XG4rfTtcbitcbiBzdHJ1Y3Qge1xuIFx0X191aW50KHR5cGUsIEJQRl9NQVBfVFlQRV9BUlJBWSk7XG4gXHRfX3R5cGUoa2V5LCBpbnQpO1xuQEAgLTMwLDYgKzM5LDEzIEBAIHN0cnVjdCB7XG4gXHRfX3VpbnQobWF4X2VudHJpZXMsIDIpO1xuIH0gc3Rhc2hlZF9ub2RlcyBTRUMoXCIubWFwc1wiKTtcbiBcbitzdHJ1Y3Qge1xuK1x0X191aW50KHR5cGUsIEJQRl9NQVBfVFlQRV9BUlJBWSk7XG4rXHRfX3R5cGUoa2V5LCBpbnQpO1xuK1x0X190eXBlKHZhbHVlLCBzdHJ1Y3QgbWFwX3ZhbHVlX3JlZmNvdW50X29ubHkpO1xuK1x0X191aW50KG1heF9lbnRyaWVzLCAxKTtcbit9IHN0YXNoZWRfcmVmY291bnRfb25seSBTRUMoXCIubWFwc1wiKTtcbitcbiBzdHJ1Y3Qgbm9kZV9hY3F1aXJlIHtcbiBcdGxvbmcga2V5O1xuIFx0bG9uZyBkYXRhO1xuQEAgLTgzMiw2ICs4NDgsMTUxIEBAIGxvbmcgcmJ0cmVlX3JlZmNvdW50ZWRfbm9kZV9yZWZfZXNjYXBlc19vd25pbmdfaW5wdXQodm9pZCAqY3R4KVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuK1NFQyhcInRjXCIpXG4rX19zdWNjZXNzXG4rbG9uZyByZWZjb3VudF9hY3F1aXJlX293bmluZ19pbnB1dF9ub19udWxsX2NoZWNrKHZvaWQgKmN0eClcbit7XG4rXHRzdHJ1Y3Qgbm9kZV9yZWZjb3VudF9vbmx5ICpuLCAqbTtcbitcbitcdG4gPSBicGZfb2JqX25ldyh0eXBlb2YoKm4pKTtcbitcdGlmICghbilcbitcdFx0cmV0dXJuIDE7XG4rXG4rXHRtID0gYnBmX3JlZmNvdW50X2FjcXVpcmUobik7XG4rXHRicGZfb2JqX2Ryb3AobSk7XG4rXHRicGZfb2JqX2Ryb3Aobik7XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rU0VDKFwidGNcIilcbitfX3N1Y2Nlc3Ncbitsb25nIHJlZmNvdW50X2FjcXVpcmVfcmN1X21hcF9rcHRyX251bGxfY2hlY2tlZCh2b2lkICpjdHgpXG4re1xuK1x0c3RydWN0IG1hcF92YWx1ZV9yZWZjb3VudF9vbmx5ICptYXB2YWw7XG4rXHRzdHJ1Y3Qgbm9kZV9yZWZjb3VudF9vbmx5ICpuLCAqbTtcbitcdGludCBpZHggPSAwO1xuK1xuK1x0bWFwdmFsID0gYnBmX21hcF9sb29rdXBfZWxlbShcdTAwMjZzdGFzaGVkX3JlZmNvdW50X29ubHksIFx1MDAyNmlkeCk7XG4rXHRpZiAoIW1hcHZhbClcbitcdFx0cmV0dXJuIDE7XG4rXG4rXHRicGZfcmN1X3JlYWRfbG9jaygpO1xuK1x0biA9IG1hcHZhbC1cdTAwM2Vub2RlO1xuK1x0aWYgKCFuKSB7XG4rXHRcdGJwZl9yY3VfcmVhZF91bmxvY2soKTtcbitcdFx0cmV0dXJuIDI7XG4rXHR9XG4rXHRtID0gYnBmX3JlZmNvdW50X2FjcXVpcmUobik7XG4rXHRicGZfcmN1X3JlYWRfdW5sb2NrKCk7XG4rXG4rXHRpZiAoIW0pXG4rXHRcdHJldHVybiAzO1xuK1x0YnBmX29ial9kcm9wKG0pO1xuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK1NFQyhcIj90Y1wiKVxuK19fc3VjY2Vzc1xuK2xvbmcgbWFwX2twdHJfcmVhZF9hZnRlcl9yY3VfdW5sb2NrKHZvaWQgKmN0eClcbit7XG4rXHRzdHJ1Y3QgbWFwX3ZhbHVlX3JlZmNvdW50X29ubHkgKm1hcHZhbDtcbitcdHN0cnVjdCBub2RlX3JlZmNvdW50X29ubHkgKm47XG4rXHRpbnQgaWR4ID0gMDtcbitcbitcdG1hcHZhbCA9IGJwZl9tYXBfbG9va3VwX2VsZW0oXHUwMDI2c3Rhc2hlZF9yZWZjb3VudF9vbmx5LCBcdTAwMjZpZHgpO1xuK1x0aWYgKCFtYXB2YWwpXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0YnBmX3JjdV9yZWFkX2xvY2soKTtcbitcdG4gPSBtYXB2YWwtXHUwMDNlbm9kZTtcbitcdGlmICghbikge1xuK1x0XHRicGZfcmN1X3JlYWRfdW5sb2NrKCk7XG4rXHRcdHJldHVybiAwO1xuK1x0fVxuK1x0YnBmX3JjdV9yZWFkX3VubG9jaygpO1xuK1xuK1x0cmV0dXJuIG4tXHUwMDNla2V5O1xuK31cbitcbitTRUMoXCI/dGNcIilcbitfX2ZhaWx1cmUgX19tc2coXCJpcyBuZWl0aGVyIG93bmluZyBvciBub24tb3duaW5nIHJlZlwiKVxuK2xvbmcgcmVmY291bnRfYWNxdWlyZV9ncmFwaF9hZnRlcl9yY3VfdW5sb2NrKHZvaWQgKmN0eClcbit7XG4rXHRzdHJ1Y3QgbWFwX3ZhbHVlICptYXB2YWw7XG4rXHRzdHJ1Y3Qgbm9kZV9kYXRhICpuLCAqbTtcbitcdGludCBpZHggPSAwO1xuK1xuK1x0bWFwdmFsID0gYnBmX21hcF9sb29rdXBfZWxlbShcdTAwMjZzdGFzaGVkX25vZGVzLCBcdTAwMjZpZHgpO1xuK1x0aWYgKCFtYXB2YWwpXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0YnBmX3JjdV9yZWFkX2xvY2soKTtcbitcdG4gPSBtYXB2YWwtXHUwMDNlbm9kZTtcbitcdGlmICghbikge1xuK1x0XHRicGZfcmN1X3JlYWRfdW5sb2NrKCk7XG4rXHRcdHJldHVybiAwO1xuK1x0fVxuK1x0YnBmX3JjdV9yZWFkX3VubG9jaygpO1xuK1xuK1x0bSA9IGJwZl9yZWZjb3VudF9hY3F1aXJlKG4pO1xuK1x0aWYgKG0pXG4rXHRcdGJwZl9vYmpfZHJvcChtKTtcbitcbitcdHJldHVybiAwO1xuK31cbitcbitTRUMoXCI/dGNcIilcbitfX2ZhaWx1cmUgX19tc2coXCJvbmx5IHJlYWQgaXMgc3VwcG9ydGVkXCIpXG4rbG9uZyBncmFwaF9tYXBfa3B0cl93cml0ZV9hZnRlcl9yY3VfdW5sb2NrKHZvaWQgKmN0eClcbit7XG4rXHRzdHJ1Y3QgbWFwX3ZhbHVlICptYXB2YWw7XG4rXHRzdHJ1Y3Qgbm9kZV9kYXRhICpuO1xuK1x0aW50IGlkeCA9IDA7XG4rXG4rXHRtYXB2YWwgPSBicGZfbWFwX2xvb2t1cF9lbGVtKFx1MDAyNnN0YXNoZWRfbm9kZXMsIFx1MDAyNmlkeCk7XG4rXHRpZiAoIW1hcHZhbClcbitcdFx0cmV0dXJuIDE7XG4rXG4rXHRicGZfcmN1X3JlYWRfbG9jaygpO1xuK1x0biA9IG1hcHZhbC1cdTAwM2Vub2RlO1xuK1x0aWYgKCFuKSB7XG4rXHRcdGJwZl9yY3VfcmVhZF91bmxvY2soKTtcbitcdFx0cmV0dXJuIDI7XG4rXHR9XG4rXHRicGZfcmN1X3JlYWRfdW5sb2NrKCk7XG4rXG4rXHRuLVx1MDAzZWtleSA9IDE7XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rU0VDKFwiP3RjXCIpXG4rX19zdWNjZXNzXG4rbG9uZyBncmFwaF9tYXBfa3B0cl9yZWFkX2FmdGVyX3NwaW5fdW5sb2NrKHZvaWQgKmN0eClcbit7XG4rXHRzdHJ1Y3QgbWFwX3ZhbHVlICptYXB2YWw7XG4rXHRzdHJ1Y3Qgbm9kZV9kYXRhICpuO1xuK1x0aW50IGlkeCA9IDA7XG4rXG4rXHRtYXB2YWwgPSBicGZfbWFwX2xvb2t1cF9lbGVtKFx1MDAyNnN0YXNoZWRfbm9kZXMsIFx1MDAyNmlkeCk7XG4rXHRpZiAoIW1hcHZhbClcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHRicGZfcmN1X3JlYWRfbG9jaygpO1xuK1x0biA9IG1hcHZhbC1cdTAwM2Vub2RlO1xuK1x0aWYgKCFuKSB7XG4rXHRcdGJwZl9yY3VfcmVhZF91bmxvY2soKTtcbitcdFx0cmV0dXJuIDA7XG4rXHR9XG4rXHRicGZfcmN1X3JlYWRfdW5sb2NrKCk7XG4rXG4rXHRicGZfc3Bpbl9sb2NrKFx1MDAyNmxvY2spO1xuK1x0YnBmX3NwaW5fdW5sb2NrKFx1MDAyNmxvY2spO1xuK1xuK1x0cmV0dXJuIG4tXHUwMDNla2V5O1xuK31cbitcbiBzdGF0aWMgbG9uZyBfX3N0YXNoX21hcF9lbXB0eV94Y2hnKHN0cnVjdCBub2RlX2RhdGEgKm4sIGludCBpZHgpXG4ge1xuIFx0c3RydWN0IG1hcF92YWx1ZSAqbWFwdmFsID0gYnBmX21hcF9sb29rdXBfZWxlbShcdTAwMjZzdGFzaGVkX25vZGVzLCBcdTAwMjZpZHgpO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9yZWZjb3VudGVkX2twdHJfZmFpbC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3JlZmNvdW50ZWRfa3B0cl9mYWlsLmNcbmluZGV4IDAyNGVmMmFhZTIwMDguLjM0MDhmNjhhZDQ0NGQgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvcmVmY291bnRlZF9rcHRyX2ZhaWwuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3JlZmNvdW50ZWRfa3B0cl9mYWlsLmNcbkBAIC0xOSw2ICsxOSwxNSBAQCBzdHJ1Y3Qgbm9kZV9yZWZjb3VudGVkIHtcbiBcdHN0cnVjdCBicGZfcmVmY291bnQgcmVmY291bnQ7XG4gfTtcbiBcbitzdHJ1Y3Qgbm9kZV9yZWZjb3VudF9vbmx5IHtcbitcdGxvbmcga2V5O1xuK1x0c3RydWN0IGJwZl9yZWZjb3VudCByZWZjb3VudDtcbit9O1xuK1xuK3N0cnVjdCBtYXBfdmFsdWVfcmVmY291bnRfb25seSB7XG4rXHRzdHJ1Y3Qgbm9kZV9yZWZjb3VudF9vbmx5IF9fa3B0ciAqbm9kZTtcbit9O1xuK1xuIGV4dGVybiB2b2lkIGJwZl9yY3VfcmVhZF9sb2NrKHZvaWQpIF9fa3N5bTtcbiBleHRlcm4gdm9pZCBicGZfcmN1X3JlYWRfdW5sb2NrKHZvaWQpIF9fa3N5bTtcbiBcbkBAIC0yOCw2ICszNywxMyBAQCBwcml2YXRlKEEpIHN0cnVjdCBicGZfcmJfcm9vdCBncm9vdCBfX2NvbnRhaW5zKG5vZGVfYWNxdWlyZSwgbm9kZSk7XG4gcHJpdmF0ZShCKSBzdHJ1Y3QgYnBmX3NwaW5fbG9jayBsb2NrO1xuIHByaXZhdGUoQikgc3RydWN0IGJwZl9saXN0X2hlYWQgaGVhZCBfX2NvbnRhaW5zKG5vZGVfcmVmY291bnRlZCwgbGlzdCk7XG4gXG4rc3RydWN0IHtcbitcdF9fdWludCh0eXBlLCBCUEZfTUFQX1RZUEVfQVJSQVkpO1xuK1x0X190eXBlKGtleSwgaW50KTtcbitcdF9fdHlwZSh2YWx1ZSwgc3RydWN0IG1hcF92YWx1ZV9yZWZjb3VudF9vbmx5KTtcbitcdF9fdWludChtYXhfZW50cmllcywgMSk7XG4rfSBzdGFzaGVkX3JlZmNvdW50X29ubHkgU0VDKFwiLm1hcHNcIik7XG4rXG4gc3RhdGljIGJvb2wgbGVzcyhzdHJ1Y3QgYnBmX3JiX25vZGUgKmEsIGNvbnN0IHN0cnVjdCBicGZfcmJfbm9kZSAqYilcbiB7XG4gXHRzdHJ1Y3Qgbm9kZV9hY3F1aXJlICpub2RlX2E7XG5AQCAtODAsNiArOTYsNjQgQEAgbG9uZyByZWZjb3VudF9hY3F1aXJlX21heWJlX251bGwodm9pZCAqY3R4KVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuK1NFQyhcIj90Y1wiKVxuK19fZmFpbHVyZSBfX21zZyhcIlBvc3NpYmx5IE5VTEwgcG9pbnRlciBwYXNzZWQgdG8gdHJ1c3RlZCBSMVwiKVxuK2xvbmcgcmVmY291bnRfYWNxdWlyZV9yY3VfbWFwX2twdHJfdW5jaGVja2VkX2Ryb3Aodm9pZCAqY3R4KVxuK3tcbitcdHN0cnVjdCBtYXBfdmFsdWVfcmVmY291bnRfb25seSAqbWFwdmFsO1xuK1x0c3RydWN0IG5vZGVfcmVmY291bnRfb25seSAqdG1wLCAqbiwgKm07XG4rXHRpbnQgaWR4ID0gMDtcbitcbitcdHRtcCA9IGJwZl9vYmpfbmV3KHR5cGVvZigqdG1wKSk7XG4rXHRpZiAoIXRtcClcbitcdFx0cmV0dXJuIDM7XG4rXHRicGZfb2JqX2Ryb3AodG1wKTtcbitcbitcdG1hcHZhbCA9IGJwZl9tYXBfbG9va3VwX2VsZW0oXHUwMDI2c3Rhc2hlZF9yZWZjb3VudF9vbmx5LCBcdTAwMjZpZHgpO1xuK1x0aWYgKCFtYXB2YWwpXG4rXHRcdHJldHVybiAxO1xuK1xuK1x0YnBmX3JjdV9yZWFkX2xvY2soKTtcbitcdG4gPSBtYXB2YWwtXHUwMDNlbm9kZTtcbitcdGlmICghbikge1xuK1x0XHRicGZfcmN1X3JlYWRfdW5sb2NrKCk7XG4rXHRcdHJldHVybiAyO1xuK1x0fVxuK1x0bSA9IGJwZl9yZWZjb3VudF9hY3F1aXJlKG4pO1xuK1x0YnBmX3JjdV9yZWFkX3VubG9jaygpO1xuK1xuK1x0YnBmX29ial9kcm9wKG0pO1xuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK1NFQyhcIj90Y1wiKVxuK19fZmFpbHVyZSBfX21zZyhcImlzIG5laXRoZXIgb3duaW5nIG9yIG5vbi1vd25pbmcgcmVmXCIpXG4rbG9uZyByZWZjb3VudF9hY3F1aXJlX2FmdGVyX3JjdV91bmxvY2sodm9pZCAqY3R4KVxuK3tcbitcdHN0cnVjdCBtYXBfdmFsdWVfcmVmY291bnRfb25seSAqbWFwdmFsO1xuK1x0c3RydWN0IG5vZGVfcmVmY291bnRfb25seSAqbiwgKm07XG4rXHRpbnQgaWR4ID0gMDtcbitcbitcdG1hcHZhbCA9IGJwZl9tYXBfbG9va3VwX2VsZW0oXHUwMDI2c3Rhc2hlZF9yZWZjb3VudF9vbmx5LCBcdTAwMjZpZHgpO1xuK1x0aWYgKCFtYXB2YWwpXG4rXHRcdHJldHVybiAxO1xuK1xuK1x0YnBmX3JjdV9yZWFkX2xvY2soKTtcbitcdG4gPSBtYXB2YWwtXHUwMDNlbm9kZTtcbitcdGlmICghbikge1xuK1x0XHRicGZfcmN1X3JlYWRfdW5sb2NrKCk7XG4rXHRcdHJldHVybiAyO1xuK1x0fVxuK1x0YnBmX3JjdV9yZWFkX3VubG9jaygpO1xuK1xuK1x0bSA9IGJwZl9yZWZjb3VudF9hY3F1aXJlKG4pO1xuK1x0aWYgKG0pXG4rXHRcdGJwZl9vYmpfZHJvcChtKTtcbitcbitcdHJldHVybiAwO1xuK31cbitcbiBTRUMoXCI/dGNcIilcbiBfX2ZhaWx1cmUgX19tc2coXCJVbnJlbGVhc2VkIHJlZmVyZW5jZSBpZD0zIGFsbG9jX2luc249e3tbMC05XSt9fVwiKVxuIGxvbmcgcmJ0cmVlX3JlZmNvdW50ZWRfbm9kZV9yZWZfZXNjYXBlc19vd25pbmdfaW5wdXQodm9pZCAqY3R4KVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMTI6NDI6MTguNTA3MjU2Mjc3WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Njk4MTY0NjE4MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEJQRiBWZXJpZmllciBQYXRjaCBmb3IgRnV6emluZyBPcHBvcnR1bml0aWVzKipcblxuT2theSwgc28gSSd2ZSBnb3QgYSBwYXRjaCBoZXJlIHRoYXQncyB0d2Vha2luZyB0aGUgQlBGIHZlcmlmaWVyLCBzcGVjaWZpY2FsbHkgaG93IGl0IGhhbmRsZXMgYFBUUl9UT19CVEZfSURgIGFuZCBtZW1vcnkgYWxsb2NhdGlvbiB3aXRoIGBNRU1fQUxMT0NgLiBNeSBpbW1lZGlhdGUgZ29hbCBpcyB0byBmaWd1cmUgb3V0IHRoZSBiZXN0IHNwb3RzIHRvIGZvY3VzIGZ1enppbmcgZWZmb3J0cy4gVGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgaGVscGVyLCBgdHlwZV9pc191bnRydXN0ZWRfcHRyX2FsbG9jX29iamAsIGFuZCBtb2RpZmllcyBgY2hlY2tfcHRyX3RvX2J0Zl9hY2Nlc3NgIHRvIGJ5cGFzcyB0aGUgdXN1YWwgc2FuaXR5IGNoZWNrcyBmb3IgdGhlc2UgdW50cnVzdGVkIGFsbG9jYXRlZCBvYmplY3RzLiBJdCBhbHNvIGNoYW5nZXMgYGNoZWNrX2tmdW5jX2FyZ3NgIHRvIGluY2x1ZGUgYW4gZXh0cmEgY2hlY2ssIGByZWdfaXNfcmVmZXJlbmNlZChlbnYsIHJlZylgLCBiZWZvcmUgbWFya2luZyB0aGUgYXJndW1lbnQgYXMgb3duZWQuIFRoaXMgc291bmRzIGxpa2UgaXQgaW50cm9kdWNlcyBzb21lIHBvdGVudGlhbGx5IGludGVyZXN0aW5nIGVkZ2UgY2FzZXMuIFRoZSBwYXRjaCBhbHNvIGluY2x1ZGVzIGEgYnVuY2ggb2YgQlBGIHNlbGYtdGVzdHMsIHdoaWNoIGlzIGdvb2QgZm9yIGJhc2VsaW5lIGNvdmVyYWdlIGJ1dCBJIG5lZWQgdG8gaWRlbnRpZnkgYXJlYXMgbm90IHdlbGwtY292ZXJlZCBieSB0aG9zZSB0ZXN0cy5cblxuSSBuZWVkIHRvIGRpZyBpbnRvIHRoZSBjb2RlIGluIGBrZXJuZWwvYnBmL3ZlcmlmaWVyLmNgIHRvIHVuZGVyc3RhbmQgdGhlIGZ1bGwgaW1wYWN0IG9mIHRoZXNlIGNoYW5nZXMuIEknbSBmb2N1c2luZyBvbiB0aGUgbW9kaWZpY2F0aW9ucyB0byBgY2hlY2tfcHRyX3RvX2J0Zl9hY2Nlc3NgIGFuZCBgY2hlY2tfa2Z1bmNfYXJnc2AuIFRoZXkncmUgZGVmaW5pdGVseSAqcmVhY2hhYmxlKiBmdW5jdGlvbnMgYW5kIHJlcHJlc2VudCBvcGVyYXRpb25hbCBjaGFuZ2VzIGluIHRoZSB2ZXJpZmllci4gTm93LCB0aGUgdHJpY2sgaXMgdG8gaWRlbnRpZnkgdGhlIGJlc3QgZW50cnkgcG9pbnRzIGZvciBmdXp6aW5nLlxuXG5NeSBvYmplY3RpdmUgaXMgdG8gaWRlbnRpZnkgZ29vZCBmdXp6aW5nIHRhcmdldHMsIHNvIGxldCdzIGRpZyBpbnRvIHRoZSBjb2RlIG1vcmUuIGBjaGVja19wdHJfdG9fYnRmX2FjY2Vzc2AgaXMgYSBzdGF0aWMgZnVuY3Rpb24sIHdoaWNoIG1lYW5zIGl0J3MgYW4gaW50ZXJuYWwgaGVscGVyIGZ1bmN0aW9uLiBJIGtub3cgdG8gbG9vayBmb3IgZXh0ZXJuYWwgZW50cnkgcG9pbnRzLCBub3QgdGhlc2UgaW5saW5lZCBoZWxwZXIgZnVuY3Rpb25zLiBJIHNlZSBpdCdzIGNhbGxlZCBmcm9tIGBjaGVja19tZW1fYWNjZXNzYCwgd2hpY2ggaXMgaXRzZWxmIGEgc3RhdGljIGhlbHBlci4gU2ltaWxhcmx5LCBgY2hlY2tfa2Z1bmNfYXJnc2AgaXMgYSBzdGF0aWMgZnVuY3Rpb24gdGhhdCBnZXRzIGNhbGxlZCBmcm9tIGBjaGVja19rZnVuY19jYWxsYC4gQWgsIHRoYXTigJlzIHJpZ2h0LCB0aGUgcHJvbXB0IHNheXMgdG8gcHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50cyFcblxuQWxyaWdodCwgdGltZSB0byBzaGlmdCBnZWFycyBhbmQgZmluZCB0aGUgKmVudHJ5IHBvaW50cyogdGhhdCBldmVudHVhbGx5IGxlYWQgdG8gdGhlc2UgZnVuY3Rpb25zLiBJ4oCZbGwgc3RhcnQgYnkgbG9va2luZyBhdCBga2VybmVsL2JwZi92ZXJpZmllci5jYCBhbmQgZmlndXJpbmcgb3V0IHdoaWNoIGZ1bmN0aW9ucyAqY2FsbCogYGNoZWNrX3B0cl90b19idGZfYWNjZXNzYCBhbmQgYGNoZWNrX2tmdW5jX2FyZ3NgLiBJIGtub3cgdGhhdCBgYnBmX2NoZWNrYCBpcyB0aGUgbWFpbiBlbnRyeSBwb2ludCB0byB0aGUgdmVyaWZpZXIsIGJ1dCB3aGF0IGFyZSBpdHMgY2FsbGVycz8gVGltZSB0byBzZWFyY2ggZm9yIHRoZSAqY2FsbGVycyogb2YgdGhvc2UgbW9kaWZpZWQgZnVuY3Rpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1NTAzLCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzcyLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMTI6NDI6MjUuNDg4OTA0NzlaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjE1NTE5MjYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY2hlY2tfcHRyX3RvX2J0Zl9hY2Nlc3NcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2JwZi92ZXJpZmllci5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvdmVyaWZpZXIuYz01NzIxPXN0YXRpYyBib29sIHR5cGVfaXNfdHJ1c3RlZF9vcl9udWxsKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNTczMi1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NTczMzpzdGF0aWMgaW50IGNoZWNrX3B0cl90b19idGZfYWNjZXNzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTU3MzQtXFx0XFx0XFx0XFx0ICAgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZ3MsIHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcsXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9NjA4ND1zdGF0aWMgaW50IGNoZWNrX21lbV9hY2Nlc3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50IGluc25faWR4LCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnLCBhcmdub190IGFyZ25vLFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTYyOTctXFx0XFx0ICAgIXR5cGVfbWF5X2JlX251bGwocmVnLVxcdTAwM2V0eXBlKSkge1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo2Mjk4OlxcdFxcdGVyciA9IGNoZWNrX3B0cl90b19idGZfYWNjZXNzKGVudiwgcmVncywgcmVnLCBhcmdubywgb2ZmLCBzaXplLCB0LFxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy02Mjk5LVxcdFxcdFxcdFxcdFxcdCAgICAgIHZhbHVlX3JlZ25vKTtcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz02NzQ3PXN0YXRpYyBpbnQgY2hlY2tfaGVscGVyX21lbV9hY2Nlc3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZywgYXJnbm9fdCBhcmdubyxcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy02ODA0LVxcdGNhc2UgUFRSX1RPX0JURl9JRDpcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NjgwNTpcXHRcXHRyZXR1cm4gY2hlY2tfcHRyX3RvX2J0Zl9hY2Nlc3MoZW52LCByZWdzLCByZWcsIGFyZ25vLCAwLFxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy02ODA2LVxcdFxcdFxcdFxcdFxcdCAgICAgICBhY2Nlc3Nfc2l6ZSwgYWNjZXNzX3R5cGUsIC0xKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMTI6NDI6MjUuNTUwNDY0ODM2WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzUyNDIxMDcyMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIGludGVyYWN0aW9uczpcblxuKipBbmFseXppbmcgTWVtb3J5IEFjY2VzcyBhbmQgS2VybmVsIEZ1bmN0aW9uIENhbGxzKipcblxuT2theSwgc28gSSdtIHNlZWluZyBhIGNoYWluIG9mIGNhbGxzIGhlcmUsIHNwZWNpZmljYWxseSByZWxhdGVkIHRvIHZlcmlmeWluZyBtZW1vcnkgYWNjZXNzIGFuZCBrZXJuZWwgZnVuY3Rpb24gY2FsbHMuIEl0IGxvb2tzIGxpa2UgYGNoZWNrX21lbV9hY2Nlc3NgLCB3aGljaCBpcyB0aGUgd29ya2hvcnNlIGZvciB2YWxpZGF0aW5nIG1lbW9yeSBhY2Nlc3MgaW5zdHJ1Y3Rpb25zIChjYWxsZWQgYnkgc29tZXRoaW5nIGxpa2UgYGRvX2NoZWNrYCksIHJlbGllcyBvbiBhIG1vcmUgZnVuZGFtZW50YWwgY2hlY2ssIGBjaGVja19wdHJfdG9fYnRmX2FjY2Vzc2AsIHZpYSBgY2hlY2tfbWVtX2FjY2Vzc2AgYW5kIGBjaGVja19oZWxwZXJfbWVtX2FjY2Vzc2AuIFNvLCBhbnkgdGltZSB3ZSdyZSBjaGVja2luZyBhIG1lbW9yeSBhY2Nlc3MsIHRoZXNlIHNlY29uZGFyeSBjaGVja3MgYXJlIHRyaWdnZXJlZCBieSBteSBhbmFseXNpcyBpbiBgY2hlY2tfbWVtX2FjY2Vzc2AgaXRzZWxmLlxuXG5UaGVuLCB0aGVyZSdzIGBjaGVja19rZnVuY19jYWxsYCwgd2hpY2ggaXMgcmVzcG9uc2libGUgZm9yIHZlcmlmeWluZyBrZXJuZWwgZnVuY3Rpb24gY2FsbHMuIFRoaXMgb25lLCBpbiB0dXJuLCBzZWVtcyB0byBkZWxlZ2F0ZSB0aGUgYXJndW1lbnQgdmFsaWRhdGlvbiB0byBhIGZ1bmN0aW9uIG5hbWVkIGBjaGVja19rZnVuY19hcmdzYC4gVGhpcyBpbXBsaWVzIGEgY2xlYXIgc2VwYXJhdGlvbiBvZiBjb25jZXJuczogb25lIGZ1bmN0aW9uIHRvIHZhbGlkYXRlIHRoZSBjYWxsIGl0c2VsZiBhbmQgYW5vdGhlciB0byBkcmlsbCBkb3duIGludG8gdGhlIGFyZ3VtZW50cy4gTWFrZXMgc2Vuc2Ug4oCTIG1vZHVsYXJpdHkgaXMgYWx3YXlzIGdvb2QsIGFuZCB0aGlzIHByb2JhYmx5IGVuYWJsZXMgbW9yZSByb2J1c3QgdGVzdGluZyBhbmQgZWFzaWVyIG1vZGlmaWNhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6Njg5MywiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjczLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDEyOjQyOjI5LjA3NDY3NzgwOVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjU3NTI2OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjaGVja19rZnVuY19hcmdzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9icGYvdmVyaWZpZXIuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTE5MTg9c3RhdGljIGJvb2wgY2hlY2tfY3NzX3Rhc2tfaXRlcl9hbGxvd2xpc3Qoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMTkzMy1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTE5MzQ6c3RhdGljIGludCBjaGVja19rZnVuY19hcmdzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfa2Z1bmNfY2FsbF9hcmdfbWV0YSAqbWV0YSxcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTE5MzUtXFx0XFx0XFx0ICAgIGludCBpbnNuX2lkeClcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xMjkxOT1zdGF0aWMgaW50IGNoZWNrX2tmdW5jX2NhbGwoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuLFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTEyOTk1LVxcdC8qIENoZWNrIHRoZSBhcmd1bWVudHMgKi9cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTI5OTY6XFx0ZXJyID0gY2hlY2tfa2Z1bmNfYXJncyhlbnYsIFxcdTAwMjZtZXRhLCBpbnNuX2lkeCk7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTEyOTk3LVxcdGlmIChlcnIgXFx1MDAzYyAwKVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTEzMjgyLVxcdFxcdGVsc2VcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTMyODM6XFx0XFx0XFx0Lyogc2NhbGFyLiBlbnN1cmVkIGJ5IGNoZWNrX2tmdW5jX2FyZ3MoKSAqL1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMzI4NC1cXHRcXHRcXHRtYXJrX2J0Zl9mdW5jX3JlZ19zaXplKGVudiwgcmVnbm8sIHQtXFx1MDAzZXNpemUpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QxMjo0MjoyOS4xMjEyNTg5MDZaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDQzMTYzODExLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aG9zZSB0aG91Z2h0cyBmcm9tIGEgZmlyc3QtcGVyc29uLCBleHBlcnQgcGVyc3BlY3RpdmUsIGZvY3VzaW5nIG9uIHRoZSBpbnRlbnRpb24gYmVoaW5kIHRoZSBkZXNjcmliZWQgYWN0aW9uczpcblxuKipEaXZpbmcgaW50byB0aGUgRnVuY3Rpb24gQ2FsbHMqKlxuXG5BbHJpZ2h0LCBJJ20gZ29pbmcgdG8gc3RhcnQgYnkgZ2V0dGluZyBhIGhhbmRsZSBvbiB0aGUgY29udHJvbCBmbG93LiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgXCJMZXQncyB0cmFjayBkb3duIHRoZSBpbnZvY2F0aW9ucyBvZiBgY2hlY2tfa2Z1bmNfY2FsbGAgYW5kIGBjaGVja19tZW1fYWNjZXNzYC5cIiBUaGVzZSBmdW5jdGlvbnMgYXJlIGNydWNpYWwgZm9yIHVuZGVyc3RhbmRpbmcgdGhlIHNlY3VyaXR5IG1vZGVsIGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGgga2VybmVsIGZ1bmN0aW9uIGNhbGxzIGFuZCBtZW1vcnkgYWNjZXNzZXMsIHdoaWNoIGFyZSB0aGUgZnVuZGFtZW50YWwgYnVpbGRpbmcgYmxvY2tzIG9mIGFsbW9zdCBhbnkgc3lzdGVtLiBCeSB0cmFjaW5nIHRoZWlyIGNhbGxzLCBJIGV4cGVjdCB0byBnZXQgYSBzb2xpZCBncmFzcCBvZiB3aGVyZSB0aGUgc3lzdGVtIGlzIGxpa2VseSB2YWxpZGF0aW5nIHRoZXNlIG9wZXJhdGlvbnMgYW5kLCBtb3N0IGltcG9ydGFudGx5LCB0aGUgY3JpdGVyaWEgaXQncyB1c2luZyB0byBkbyBzby4gVGhpcyBpcyBsaWtlbHkgd2hlcmUgdGhlIHN5c3RlbSdzIHNlY3VyaXR5IGNvbnN0cmFpbnRzIGFyZSBhcHBsaWVkLiBVbmRlcnN0YW5kaW5nIHRob3NlIHNlY3VyaXR5IGNvbnN0cmFpbnRzIGlzIHdoYXQgbWF0dGVycy4gVGhpcyBleHBsb3JhdGlvbiBzaG91bGQgaGVscCBtZSBwYWludCBhIHBpY3R1cmUgb2YgaG93IHRoZSBzeXN0ZW0ncyBzZWN1cml0eSBpcyBhcmNoaXRlY3RlZCBhdCBhIGxvdyBsZXZlbC4gSXQncyB0aGUgbW9zdCBlZmZlY3RpdmUgc3RhcnRpbmcgcG9pbnQgdG8gYmVnaW4gYW55IGluLWRlcHRoIHN5c3RlbSBzZWN1cml0eSBhbmFseXNpcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NzU5MywiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDEyOjQyOjMyLjU2NDQyNTQ3N1oiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzIyMjA1OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjaGVja19rZnVuY19jYWxsXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9icGYvdmVyaWZpZXIuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL3ZlcmlmaWVyLmM9NzI0ND1zdGF0aWMgaW50IHByb2Nlc3NfZHlucHRyX2Z1bmMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZyxcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy03MzE4LVxcdFxcdFxcdCAqIEZvciBDT05TVF9QVFJfVE9fRFlOUFRSLCByZWcgaXMgYWxyZWFkeSBzY3JhdGNoZWQgYnkgY2hlY2tfcmVnX2FyZ1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo3MzE5OlxcdFxcdFxcdCAqIGluIGNoZWNrX2hlbHBlcl9jYWxsIGFuZCBtYXJrX2J0Zl9mdW5jX3JlZ19zaXplIGluIGNoZWNrX2tmdW5jX2NhbGwuXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTczMjAtXFx0XFx0XFx0ICovXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTI5MTc9c3RhdGljIGludCBjaGVja19yZXR1cm5fY29kZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBpbnQgcmVnbm8sIGNvbnN0IGNoYXIgKnJlZ19uYW1lKTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTI5MTgtXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjEyOTE5OnN0YXRpYyBpbnQgY2hlY2tfa2Z1bmNfY2FsbChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmluc24sXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTEyOTIwLVxcdFxcdFxcdCAgICBpbnQgKmluc25faWR4X3ApXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTcyNDA9c3RhdGljIGludCBkb19jaGVja19pbnNuKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGJvb2wgKmRvX3ByaW50X3N0YXRlKVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE3MzA4LVxcdFxcdFxcdGlmIChpbnNuLVxcdTAwM2VzcmNfcmVnID09IEJQRl9QU0VVRE9fS0ZVTkNfQ0FMTClcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTczMDk6XFx0XFx0XFx0XFx0cmV0dXJuIGNoZWNrX2tmdW5jX2NhbGwoZW52LCBpbnNuLCBcXHUwMDI2ZW52LVxcdTAwM2VpbnNuX2lkeCk7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE3MzEwLVxcdFxcdFxcdHJldHVybiBjaGVja19oZWxwZXJfY2FsbChlbnYsIGluc24sIFxcdTAwMjZlbnYtXFx1MDAzZWluc25faWR4KTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMTI6NDI6MzIuNjExNjU4NjE0WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQ0Mjg3OTc4MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGFuYWx5emluZyB0aGlzIGNvZGU6XG5cbioqQW5hbHl6aW5nIHRoZSBlQlBGIFZlcmlmaWNhdGlvbiBGbG93KipcblxuT2theSwgc28gSSdtIGRpdmluZyBpbnRvIHRoaXMgZUJQRiB2ZXJpZmljYXRpb24gZmxvdywgYW5kIGl0IGxvb2tzIGxpa2UgYGRvX2NoZWNrX2luc25gIGlzIHRoZSB3b3JraG9yc2UgaGVyZS4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHRyYWNlIHRoZSBleGVjdXRpb24gcGF0aC4gSXQgc2VlbXMgbGlrZSBgZG9fY2hlY2tfaW5zbmAgaXMgY2FsbGluZyBgY2hlY2tfa2Z1bmNfY2FsbGAsIHdoaWNoIG1ha2VzIHNlbnNlOyBhIGNoZWNrIGluc3RydWN0aW9uIHByZXN1bWFibHkgbmVlZHMgdG8gdmFsaWRhdGUgYW55IGtmdW5jIGNhbGxzLiBJIG5lZWQgdG8ga2VlcCB0aGF0IGluIG1pbmQuXG5cbk5vdywgd2hlcmUgZG9lcyBgZG9fY2hlY2tfaW5zbmAgaXRzZWxmIGNvbWUgZnJvbT8gSXQncyBjYWxsZWQgYnkgYGRvX2NoZWNrYCwgYW5kIGBkb19jaGVja2AgaXMgY2FsbGVkIGJ5IGBicGZfY2hlY2tgLiBBaGEhIExvb2tzIGxpa2UgYGJwZl9jaGVja2AgaXMgdGhlIGxpa2VseSBlbnRyeSBwb2ludC4gVGhhdCdzIHVzdWFsbHkgdGhlIHN0YXJ0aW5nIHBvaW50IGZvciB2YWxpZGF0aW9uLCBhbmQgZXZlcnl0aGluZyBmdW5uZWxzIGludG8gaXQuIEknbGwgbWFrZSBgYnBmX2NoZWNrYCBteSBwcmltYXJ5IGZvY3VzIHRvIHVuZGVyc3RhbmQgdGhlIHdob2xlIHByb2Nlc3MuIEkgd2lsbCBzdGFydCB0aGVyZSB0byBzZWUgaG93IHRoZSBvdGhlciBwYXJ0cyBmaXQgaW4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgzMTcsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QxMjo0MjozNi4wNTQ1NDIyNDRaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ5NDY5MTc3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJwZl9jaGVja1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvYnBmL3ZlcmlmaWVyLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi92ZXJpZmllci5jPTU1PXN0YXRpYyBib29sIGJwZl9nbG9iYWxfcGVyY3B1X21hX3NldDtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNTYtXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjU3Oi8qIGJwZl9jaGVjaygpIGlzIGEgc3RhdGljIGNvZGUgYW5hbHl6ZXIgdGhhdCB3YWxrcyBlQlBGIHByb2dyYW1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNTgtICogaW5zdHJ1Y3Rpb24gYnkgaW5zdHJ1Y3Rpb24gYW5kIHVwZGF0ZXMgcmVnaXN0ZXIvc3RhY2sgc3RhdGUuXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTE5MDM9c3RhdGljIGludCBwcm9jZXNzX2tmX2FyZ19wdHJfdG9fcmJ0cmVlX25vZGUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMTkxNC0gKiBMU00gaG9va3MgYW5kIGl0ZXJzIChib3RoIHNsZWVwYWJsZSBhbmQgbm9uLXNsZWVwYWJsZSkgYXJlIHNhZmUuXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjExOTE1OiAqIEFueSBzbGVlcGFibGUgcHJvZ3MgYXJlIGFsc28gc2FmZSBzaW5jZSBicGZfY2hlY2tfYXR0YWNoX3RhcmdldCgpIGVuZm9yY2VcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTE5MTYtICogdGhlbSBjYW4gb25seSBiZSBhdHRhY2hlZCB0byBzb21lIHNwZWNpZmljIGhvb2sgcG9pbnRzLlxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTE4ODk2PWJ0Zl9hdHRhY2hfZnVuY19wcm90byhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2xvZyAqbG9nLCBzdHJ1Y3QgYnRmICpidGYsIHUzMiBmdW5jX2lkKVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE4OTMwLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxODkzMTppbnQgYnBmX2NoZWNrX2F0dGFjaF90YXJnZXQoc3RydWN0IGJwZl92ZXJpZmllcl9sb2cgKmxvZyxcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTg5MzItXFx0XFx0XFx0ICAgIGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZyxcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xOTMzNj1zdGF0aWMgaW50IGNoZWNrX2F0dGFjaF9idGZfaWQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xOTM2Ni1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTkzNjc6XFx0cmV0ID0gYnBmX2NoZWNrX2F0dGFjaF90YXJnZXQoXFx1MDAyNmVudi1cXHUwMDNlbG9nLCBwcm9nLCB0Z3RfcHJvZywgYnRmX2lkLCBcXHUwMDI2dGd0X2luZm8pO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xOTM2OC1cXHRpZiAocmV0KVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE5NDM1LVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxOTQzNjppbnQgYnBmX2NoZWNrX2F0dGFjaF9idGZfaWRfbXVsdGkoc3RydWN0IGJ0ZiAqYnRmLCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2csIHUzMiBidGZfaWQsXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE5NDM3LVxcdFxcdFxcdFxcdCAgc3RydWN0IGJwZl9hdHRhY2hfdGFyZ2V0X2luZm8gKnRndF9pbmZvKVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTE5NjMzPWludCBicGZfZml4dXBfa2Z1bmNfY2FsbChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmluc24sXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTk3NzYtXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjE5Nzc3OmludCBicGZfY2hlY2soc3RydWN0IGJwZl9wcm9nICoqcHJvZywgdW5pb24gYnBmX2F0dHIgKmF0dHIsIGJwZnB0cl90IHVhdHRyLFxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xOTc3OC1cXHQgICAgICBzdHJ1Y3QgYnBmX2xvZ19hdHRyICphdHRyX2xvZylcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xOTc5MS1cXHQvKiAnc3RydWN0IGJwZl92ZXJpZmllcl9lbnYnIGNhbiBiZSBnbG9iYWwsIGJ1dCBzaW5jZSBpdCdzIG5vdCBzbWFsbCxcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTk3OTI6XFx0ICogYWxsb2NhdGUvZnJlZSBpdCBldmVyeSB0aW1lIGJwZl9jaGVjaygpIGlzIGNhbGxlZFxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xOTc5My1cXHQgKi9cXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xOTg2Ni1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTk4Njc6XFx0cmV0ID0gYnBmX2NoZWNrX2J0Zl9pbmZvX2Vhcmx5KGVudiwgYXR0ciwgdWF0dHIpO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xOTg2OC1cXHRpZiAocmV0IFxcdTAwM2MgMClcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xOTg3OC1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTk4Nzk6XFx0cmV0ID0gYnBmX2NoZWNrX2J0Zl9pbmZvKGVudiwgYXR0ciwgdWF0dHIpO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xOTg4MC1cXHRpZiAocmV0IFxcdTAwM2MgMClcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xOTg5Mi1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTk4OTM6XFx0cmV0ID0gYnBmX2NoZWNrX2NmZyhlbnYpO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xOTg5NC1cXHRpZiAocmV0IFxcdTAwM2MgMClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMTI6NDI6MzYuMTA0MDI5NTUxWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYwODk0ODA4NjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgSW5pdGlhbCBBc3Nlc3NtZW50IG9mIHRoZSBCUEYgVmVyaWZpZXIgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpdCdzIGNsZWFyIHRoYXQgYGJwZl9jaGVja2AgaXMgdGhlIHByaW1hcnkgZW50cnkgcG9pbnQgZm9yIHRoZSB2ZXJpZmllciwgbm8gZG91YnQgYWJvdXQgaXQuIFRoZSBtZWF0IG9mIHRoZSBjaGFuZ2Ugc2VlbXMgdG8gYmUgYXJvdW5kIHRoZSBoYW5kbGluZyBvZiBgUFRSX1RPX0JURl9JRGAgYW5kIGBNRU1fQUxMT0NgIHdpdGhpbiB0aGUgQlBGIHZlcmlmaWVyIGxvZ2ljLiBNeSBleHBlcnQgc2Vuc2VzIGFyZSB0aW5nbGluZyDigJMgdGhpcyBsb29rcyBmdW5jdGlvbmFsbHkgc291bmQgYW5kIHJpcGUgZm9yIHNvbWUgc2VyaW91cyBmdXp6aW5nLiBNeSBmb2N1cyB3aWxsIGJlIHNxdWFyZWx5IG9uIHRoYXQgYGJwZl9jaGVja2Agc3ltYm9sLlxuXG5Ob3csIGJlZm9yZSBJIGRpZyBpbiB0b28gZGVlcCwgSSBuZWVkIHRvIGNoZWNrIGZvciBhbnkgc3BlY2lmaWMga2VybmVsIGNvbmZpZ3VyYXRpb25zIHRoYXQgbWlnaHQgYmUgcmVxdWlyZWQgdG8gdHJpZ2dlciBvciB0ZXN0IHRoaXMgbmV3IGJlaGF2aW9yLiBJIHNlZSB0aGF0IHRoZSBwYXRjaCBpdHNlbGYgaXMgbmVzdGxlZCB3aXRoaW4gYGtlcm5lbC9icGYvdmVyaWZpZXIuY2AsIHdoaWNoIG1ha2VzIHNlbnNlLiBJIGNhbiBhc3N1bWUgQlBGIGlzIGVuYWJsZWQgdmlhIGBDT05GSUdfQlBGX1NZU0NBTExgLCBzbyBJJ20gZ29vZCB0aGVyZS4gVGltZSB0byBkaXZlIGludG8gdGhlIGNvZGUgYW5kIHNlZSB3aGF0IG51YW5jZXMgYXdhaXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk3MTIsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMTI6NDI6NDIuMTkzNTE0NTYyWiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDI3NjcyOTMzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBCUEZfU1lTQ0FMTFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi9LY29uZmlnPTI1PW1lbnUgXFxcIkJQRiBzdWJzeXN0ZW1cXFwiXFxua2VybmVsL2JwZi9LY29uZmlnLTI2LVxcbmtlcm5lbC9icGYvS2NvbmZpZzoyNzpjb25maWcgQlBGX1NZU0NBTExcXG5rZXJuZWwvYnBmL0tjb25maWctMjgtXFx0Ym9vbCBcXFwiRW5hYmxlIGJwZigpIHN5c3RlbSBjYWxsXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QxMjo0Mjo0NC4yMjExOTMxNzVaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzMzNDcyODM1MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFJlZmNvdW50ZWQgS3B0ciBQYXRjaCoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9yZWZjb3VudGVkX2twdHIuY2AuIFRoYXQncyBhIHNlbGZ0ZXN0LCB1c2luZyB0aG9zZSBgYnBmX3JlZmNvdW50X2FjcXVpcmVgIGFuZCBgYnBmX29ial9kcm9wYCBrZnVuY3MuIFNlZW1zIHByZXR0eSBzdHJhaWdodGZvcndhcmQsIHVzaW5nIHJlZmVyZW5jZSBjb3VudGluZyB3aXRoIEJQRi4gTGV0J3MgbWFrZSBzdXJlIHdlIGhhdmVuJ3QgbWlzc2VkIGFueSBvdGhlciBjb25maWcgZGVwZW5kZW5jaWVzLiBJJ20gYXNzdW1pbmcgYENPTkZJR19CUEZfU1lTQ0FMTGAgaXMgdGhlIGNyaXRpY2FsIG9uZSwgYnV0IGl0IG5ldmVyIGh1cnRzIHRvIGRvdWJsZS1jaGVjay5cblxuTm93LCBsZXQncyBqdXN0IHF1aWNrbHkgcmUtZm9jdXMgb24gdGhlIGtleSBzeW1ib2xzIGludm9sdmVkIGluIHRoaXMuIGBicGZfY2hlY2tgIGlzIHRoZSBwcmltYXJ5IGVudHJ5IGZvciB0aGUgdmVyaWZpZXIsIGJ1dCBhcmUgdGhlcmUgYW55IG90aGVyIGZ1bmN0aW9ucyB0aGF0IG1pZ2h0IGJlIHJlbGV2YW50IHRvIHRoaXMgbmV3IGJlaGF2aW9yPyBNYXliZSBgYnBmX3Byb2dfbG9hZGAgaXMgYWxzbyB3b3J0aCBhIGxvb2s/XG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwMTQxLCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTM0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDEyOjQyOjUxLjU1NTkyMzkzN1oiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTAyOTQwMzcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYnBmX3Byb2dfbG9hZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvYnBmL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL2JwZl9sc20uYz0yOTY9QlRGX0lEKGZ1bmMsIGJwZl9sc21fYnBmX3Byb2cpXFxua2VybmVsL2JwZi9icGZfbHNtLmM6Mjk3OkJURl9JRChmdW5jLCBicGZfbHNtX2JwZl9wcm9nX2xvYWQpXFxua2VybmVsL2JwZi9icGZfbHNtLmMtMjk4LUJURl9JRChmdW5jLCBicGZfbHNtX2JwZl9wcm9nX2ZyZWUpXFxuLS1cXG5rZXJuZWwvYnBmL2ZpeHVwcy5jPTEwMjg9c3RhdGljIGludCBqaXRfc3VicHJvZ3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcXG4tLVxcbmtlcm5lbC9icGYvZml4dXBzLmMtMTIyOC1cXHQgKiBwb3B1bGF0ZSBrYWxsc3lzbS4gQmVnaW4gYXQgdGhlIGZpcnN0IHN1YnByb2dyYW0sIHNpbmNlXFxua2VybmVsL2JwZi9maXh1cHMuYzoxMjI5OlxcdCAqIGJwZl9wcm9nX2xvYWQgd2lsbCBhZGQgdGhlIGthbGxzeW1zIGZvciB0aGUgbWFpbiBwcm9ncmFtLlxcbmtlcm5lbC9icGYvZml4dXBzLmMtMTIzMC1cXHQgKi9cXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jPTI2OTE9RVhQT1JUX1NZTUJPTF9HUEwoYnBmX3Byb2dfZ2V0X3R5cGVfZGV2KTtcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTI3MDAtICpcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzoyNzAxOiAqIGJwZl9wcm9nX2xvYWRfZml4dXBfYXR0YWNoX3R5cGUoKSBzZXRzIGV4cGVjdGVkX2F0dGFjaF90eXBlIGluIEBhdHRyIGlmXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtMjcwMi0gKiBwcm9nIHR5cGUgcmVxdWlyZXMgaXQgYnV0IGhhcyBzb21lIGF0dGFjaCB0eXBlcyB0aGF0IGhhdmUgdG8gYmUgYmFja3dhcmRcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTI3MDQtICovXFxua2VybmVsL2JwZi9zeXNjYWxsLmM6MjcwNTpzdGF0aWMgdm9pZCBicGZfcHJvZ19sb2FkX2ZpeHVwX2F0dGFjaF90eXBlKHVuaW9uIGJwZl9hdHRyICphdHRyKVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTI3MDYte1xcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmM9MjcyND1zdGF0aWMgaW50XFxua2VybmVsL2JwZi9zeXNjYWxsLmM6MjcyNTpicGZfcHJvZ19sb2FkX2NoZWNrX2F0dGFjaChlbnVtIGJwZl9wcm9nX3R5cGUgcHJvZ190eXBlLFxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTI3MjYtXFx0XFx0XFx0ICAgZW51bSBicGZfYXR0YWNoX3R5cGUgZXhwZWN0ZWRfYXR0YWNoX3R5cGUsXFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYz0yOTY3PUJURl9JRF9MSVNUX0dMT0JBTF9TSU5HTEUoYnBmX211bHRpX2Z1bmNfYnRmX2lkLCBmdW5jLCBicGZfbXVsdGlfZnVuYylcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTI5NzEtXFxua2VybmVsL2JwZi9zeXNjYWxsLmM6Mjk3MjpzdGF0aWMgaW50IGJwZl9wcm9nX2xvYWQodW5pb24gYnBmX2F0dHIgKmF0dHIsIGJwZnB0cl90IHVhdHRyLCBzdHJ1Y3QgYnBmX2xvZ19hdHRyICphdHRyX2xvZylcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0yOTczLXtcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTI5OTYtXFxua2VybmVsL2JwZi9zeXNjYWxsLmM6Mjk5NzpcXHRicGZfcHJvZ19sb2FkX2ZpeHVwX2F0dGFjaF90eXBlKGF0dHIpO1xcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTI5OTgtXFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0zMDg0LVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjMwODU6XFx0aWYgKGJwZl9wcm9nX2xvYWRfY2hlY2tfYXR0YWNoKHR5cGUsIGF0dHItXFx1MDAzZWV4cGVjdGVkX2F0dGFjaF90eXBlLFxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTMwODYtXFx0XFx0XFx0XFx0ICAgICAgIGF0dGFjaF9idGYsIGF0dHItXFx1MDAzZWF0dGFjaF9idGZfaWQsXFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0zMTkxLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjMxOTI6XFx0ZXJyID0gc2VjdXJpdHlfYnBmX3Byb2dfbG9hZChwcm9nLCBhdHRyLCB0b2tlbiwgdWF0dHIuaXNfa2VybmVsKTtcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0zMTkzLVxcdGlmIChlcnIpXFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYz02MzU0PXN0YXRpYyBpbnQgX19zeXNfYnBmKGVudW0gYnBmX2NtZCBjbWQsIGJwZnB0cl90IHVhdHRyLCB1bnNpZ25lZCBpbnQgc2l6ZSxcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTY0MTctXFx0XFx0XFx0XFx0XFx0c2l6ZV9jb21tb24pO1xcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjY0MTg6XFx0XFx0ZXJyID0gZXJyID86IGJwZl9wcm9nX2xvYWQoXFx1MDAyNmF0dHIsIHVhdHRyLCBcXHUwMDI2YXR0cl9sb2cpO1xcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTY0MTktXFx0XFx0YnJlYWs7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDEyOjQyOjUxLjYwNjIyNTA5NFoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMzA5OTYxOTY2MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGb2N1c2luZyBvbiB0aGUgQlBGIFZlcmlmaWVyKipcblxuT2theSwgc28gSSdtIHRoaW5raW5nIGFib3V0IGhvdyB0byBhcHByb2FjaCB0aGlzIGZ1enppbmcgdGFzay4gYGJwZl9wcm9nX2xvYWRgIGlzIGEgZ29vZCBzdGFydGluZyBwb2ludCwgYnV0IEkgc2VlIHRoYXQgYGJwZl9jaGVja2AgaXMgY2FsbGVkIGJ5IGl0LCBhbmQgaXQncyBsb29raW5nIGxpa2UgdGhlIG1vcmUgdGFyZ2V0ZWQgZW50cnkgcG9pbnQuIEhvd2V2ZXIsIGBicGZfY2hlY2tgIGlzIHRoZSBtYWluIHZlcmlmaWVyIGZ1bmN0aW9uLCB0aGUgaG90IHBhdGggZm9yIEJQRiBmdXp6aW5nLiBUaGUgcHJvbXB0IHNheXMgdG8gYXZvaWQgb3Zlcmx5IGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zLiBJZiBJIGZvY3VzIG9uIGl0IEkgd2lsbCBmb2N1cyBmdXp6aW5nIG9uIHRoZSB2ZXJpZmllci4gU28sIGlzIHRoZXJlIGFueSBvdGhlciBlbnRyeSBwb2ludD9cblxuVGhlIHBhdGNoIG1vZGlmaWVzIGBjaGVja19wdHJfdG9fYnRmX2FjY2Vzc2AgYW5kIGBjaGVja19rZnVuY19hcmdzYCwgYnV0IHRob3NlIGFyZSBzdGF0aWMgZnVuY3Rpb25zLCBzbyBwb3RlbnRpYWxseSBpbmxpbmVkLiBUaGUgcHJvbXB0IHByZWZlcnMgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnRzLiBIbW1tLCB0aGUgcGF0Y2ggc2VlbXMgdG8gZXhjbHVzaXZlbHkgdG91Y2ggdGhlIHN0YXRpYyBmdW5jdGlvbnMgd2l0aGluIHRoZSB2ZXJpZmllci5cblxuRXZlbiBpZiBgYnBmX2NoZWNrYCBpcyBnZW5lcmljLCBpdCAqaXMqIHRoZSBlbnRyeSBwb2ludCBmb3IgdGhlIHZlcmlmaWVyLCBzbyBwcm92aWRpbmcgaXQgaXMgYmV0dGVyIHRoYW4gbm90aGluZywgb3IgZXZlbiBiZXR0ZXIgdGhhbiBndWVzc2luZyBzb21lIG90aGVyIHJlbGF0ZWQgYnV0IGxlc3MgY3JpdGljYWwgZnVuY3Rpb24uIFNvIGxldCdzIGNoZWNrLCBpbiBga2VybmVsL2JwZi92ZXJpZmllci5jYDogYGludCBicGZfY2hlY2soLi4uKWAsIGl0J3MgZ2xvYmFsIGFuZCBleHBvcnRlZC4gVGhhdCBzZXR0bGVzIGl0LiBgYnBmX2NoZWNrYCBpdCBpcy5cblxuTGV0J3MgcXVpY2tseSByZXZpZXcgdGhlIGNoYW5nZXMgZm9yIGNvbnRleHQuIEkgc2VlIGEgbmV3IGlubGluZSBmdW5jdGlvbiBgdHlwZV9pc191bnRydXN0ZWRfcHRyX2FsbG9jX29iamAsIGFuZCB0aGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvbmRpdGlvbnMgaW4gYGNoZWNrX3B0cl90b19idGZfYWNjZXNzYCBhbmQgYGNoZWNrX2tmdW5jX2FyZ3NgIHJlbGF0ZWQgdG8gaGFuZGxpbmcgYFBUUl9UT19CVEZfSURgIHR5cGVzLiBFc3NlbnRpYWxseSwgaXQgZml4ZXMgYSBidWcgcmVsYXRlZCB0byB1bnRydXN0ZWQgYWxsb2NhdGVkIG9iamVjdHMgYmVpbmcgaW5jb3JyZWN0bHkgcmVqZWN0ZWQuIFRoZSBwYXRjaCBpcyBtYWtpbmcgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgQlBGIHZlcmlmaWVyLiBUaGUgY29uZmlncyBhcmUgYEJQRl9TWVNDQUxMYC4gSSdsbCB1c2UgYGJwZl9jaGVja2AgYXMgdGhlIGZvY3VzIHN5bWJvbC5cblxuTGV0J3MgY2FsbCBzZXQtcmVzdWx0cy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE1MDUsIk91dHB1dFRva2VucyI6MTM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTU0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDEyOjQzOjA0LjcwNTg0NzI0NVoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgxMjA1MjQ1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfU1lTQ0FMTFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJwZl9jaGVja1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBCUEYgdmVyaWZpZXIncyBsb2dpYyBmb3IgaGFuZGxpbmcgUFRSX1RPX0JURl9JRCB3aXRoIE1FTV9BTExPQyBhbmQgUFRSX1VOVFJVU1RFRCBmbGFncywgc3BlY2lmaWNhbGx5IGluIGNoZWNrX3B0cl90b19idGZfYWNjZXNzIGFuZCBjaGVja19rZnVuY19hcmdzLiBUaGVzZSBjaGFuZ2VzIGFmZmVjdCBob3cgdGhlIHZlcmlmaWVyIHZhbGlkYXRlcyBtZW1vcnkgYWNjZXNzZXMgYW5kIGtmdW5jIGFyZ3VtZW50cyBmb3IgYWxsb2NhdGVkIG9iamVjdHMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBCUEYgdmVyaWZpZXIgdGhhdCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9TWVNDQUxMXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYnBmX2NoZWNrXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEJQRiB2ZXJpZmllcidzIGxvZ2ljIGZvciBoYW5kbGluZyBQVFJfVE9fQlRGX0lEIHdpdGggTUVNX0FMTE9DIGFuZCBQVFJfVU5UUlVTVEVEIGZsYWdzLCBzcGVjaWZpY2FsbHkgaW4gY2hlY2tfcHRyX3RvX2J0Zl9hY2Nlc3MgYW5kIGNoZWNrX2tmdW5jX2FyZ3MuIFRoZXNlIGNoYW5nZXMgYWZmZWN0IGhvdyB0aGUgdmVyaWZpZXIgdmFsaWRhdGVzIG1lbW9yeSBhY2Nlc3NlcyBhbmQga2Z1bmMgYXJndW1lbnRzIGZvciBhbGxvY2F0ZWQgb2JqZWN0cy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIEJQRiB2ZXJpZmllciB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflown6wkh[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-03 12:40:18 +0000 UTC FinishedAt: 2026-08-03 12:43:05 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "bpf", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git", "commit_hash": "e5fd3f514e27db1f05fbd72ba615d74941e23c51", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "bpf", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git", "commit_hash": "e5fd3f514e27db1f05fbd72ba615d74941e23c51", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL" ], "series_id": "3d7a2292-e563-47d3-b8b0-3c0ffd6112c5" }, "track": "KASAN", "fuzz": { "focus": [ "bpf" ], "focus_symbols": [ "bpf_check" ], "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+CgkJCTx0ZD4yMDI2LzA4LzAzIDEyOjQyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YnBmX2NoZWNrJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBCUEYgdmVyaWZpZXImIzM5O3MgbG9naWMgZm9yIGhhbmRsaW5nIFBUUl9UT19CVEZfSUQgd2l0aCBNRU1fQUxMT0MgYW5kIFBUUl9VTlRSVVNURUQgZmxhZ3MsIHNwZWNpZmljYWxseSBpbiBjaGVja19wdHJfdG9fYnRmX2FjY2VzcyBhbmQgY2hlY2tfa2Z1bmNfYXJncy4gVGhlc2UgY2hhbmdlcyBhZmZlY3QgaG93IHRoZSB2ZXJpZmllciB2YWxpZGF0ZXMgbWVtb3J5IGFjY2Vzc2VzIGFuZCBrZnVuYyBhcmd1bWVudHMgZm9yIGFsbG9jYXRlZCBvYmplY3RzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgQlBGIHZlcmlmaWVyIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAxMjo0MjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDM5MmY0ODE3Y2IyMWEzOGFkNTRkYzczZGE3NmVjZDk1MjhlZWViYTBcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEF1ZyAzIDEyOjQyOjE3IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmggYi9pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oXG5pbmRleCAzOWE4NTFlNjkwZWM0Li43MDE0ZDYyZmUzZDFjIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaFxuQEAgLTEzMDcsNyAmIzQzOzEzMDcsMTYgQEAgc3RhdGljIGlubGluZSBib29sIGJwZl90eXBlX2hhc191bnNhZmVfbW9kaWZpZXJzKHUzMiB0eXBlKVxuIFxuIHN0YXRpYyBpbmxpbmUgYm9vbCB0eXBlX2lzX3B0cl9hbGxvY19vYmoodTMyIHR5cGUpXG4ge1xuLVx0cmV0dXJuIGJhc2VfdHlwZSh0eXBlKSA9PSBQVFJfVE9fQlRGX0lEIFx1MDAyNlx1MDAyNiB0eXBlX2ZsYWcodHlwZSkgXHUwMDI2IE1FTV9BTExPQztcbiYjNDM7XHRyZXR1cm4gYmFzZV90eXBlKHR5cGUpID09IFBUUl9UT19CVEZfSUQgXHUwMDI2XHUwMDI2XG4mIzQzO1x0ICAgICAgIHR5cGVfZmxhZyh0eXBlKSBcdTAwMjYgTUVNX0FMTE9DIFx1MDAyNlx1MDAyNlxuJiM0MztcdCAgICAgICAhKHR5cGVfZmxhZyh0eXBlKSBcdTAwMjYgUFRSX1VOVFJVU1RFRCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbmxpbmUgYm9vbCB0eXBlX2lzX3VudHJ1c3RlZF9wdHJfYWxsb2Nfb2JqKHUzMiB0eXBlKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIGJhc2VfdHlwZSh0eXBlKSA9PSBQVFJfVE9fQlRGX0lEIFx1MDAyNlx1MDAyNlxuJiM0MztcdCAgICAgICB0eXBlX2ZsYWcodHlwZSkgXHUwMDI2IE1FTV9BTExPQyBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgICAgdHlwZV9mbGFnKHR5cGUpIFx1MDAyNiBQVFJfVU5UUlVTVEVEO1xuIH1cbiBcbiBzdGF0aWMgaW5saW5lIGJvb2wgdHlwZV9pc19ub25fb3duaW5nX3JlZih1MzIgdHlwZSlcbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL3ZlcmlmaWVyLmMgYi9rZXJuZWwvYnBmL3ZlcmlmaWVyLmNcbmluZGV4IGZkYzVmYmIxZjc4Y2EuLjhiMzVjNjM3ODA3OTggMTAwNjQ0XG4tLS0gYS9rZXJuZWwvYnBmL3ZlcmlmaWVyLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9icGYvdmVyaWZpZXIuY1xuQEAgLTU4MDksNyAmIzQzOzU4MDksMTMgQEAgc3RhdGljIGludCBjaGVja19wdHJfdG9fYnRmX2FjY2VzcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuIFx0XHRcdHJldHVybiAtRUFDQ0VTO1xuIFx0XHR9XG4gXG4tXHRcdGlmICh0eXBlX2lzX2FsbG9jKHJlZy1cdTAwM2V0eXBlKSBcdTAwMjZcdTAwMjYgIXR5cGVfaXNfbm9uX293bmluZ19yZWYocmVnLVx1MDAzZXR5cGUpIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0LypcbiYjNDM7XHRcdCAqIFNraXAgdGhpcyByZWZlcmVuY2VkLUlEIHNhbml0eSBjaGVjayBmb3IgdW50cnVzdGVkIGFsbG9jYXRlZCBvYmplY3RzO1xuJiM0MztcdFx0ICogdGhlIGFjY2VzcyBjaGVjayBhYm92ZSBhbHJlYWR5IHJlamVjdHMgd3JpdGVzIHRocm91Z2ggdGhlbS5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0aWYgKHR5cGVfaXNfYWxsb2MocmVnLVx1MDAzZXR5cGUpIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0ICAgICF0eXBlX2lzX3VudHJ1c3RlZF9wdHJfYWxsb2Nfb2JqKHJlZy1cdTAwM2V0eXBlKSBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdCAgICAhdHlwZV9pc19ub25fb3duaW5nX3JlZihyZWctXHUwMDNldHlwZSkgXHUwMDI2XHUwMDI2XG4gXHRcdCAgICAhKHJlZy1cdTAwM2V0eXBlIFx1MDAyNiBNRU1fUkNVKSBcdTAwMjZcdTAwMjYgIXJlZ19pc19yZWZlcmVuY2VkKGVudiwgcmVnKSkge1xuIFx0XHRcdHZlcmlmaWVyX2J1ZyhlbnYsIFwmIzM0O2FsbG9jYXRlZCBvYmplY3QgbXVzdCBoYXZlIGEgcmVmZXJlbmNlZCBpZFwmIzM0Oyk7XG4gXHRcdFx0cmV0dXJuIC1FRkFVTFQ7XG5AQCAtMTI0MTksNyAmIzQzOzEyNDI1LDcgQEAgc3RhdGljIGludCBjaGVja19rZnVuY19hcmdzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfa2Z1bmNfY2FsbF9cbiBcdFx0XHRcdFx0cmVnX2FyZ19uYW1lKGVudiwgYXJnbm8pKTtcbiBcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuIFx0XHRcdH1cbi1cdFx0XHRpZiAoIXR5cGVfaXNfbm9uX293bmluZ19yZWYocmVnLVx1MDAzZXR5cGUpKVxuJiM0MztcdFx0XHRpZiAoIXR5cGVfaXNfbm9uX293bmluZ19yZWYocmVnLVx1MDAzZXR5cGUpIFx1MDAyNlx1MDAyNiByZWdfaXNfcmVmZXJlbmNlZChlbnYsIHJlZykpXG4gXHRcdFx0XHRtZXRhLVx1MDAzZWFyZ19vd25pbmdfcmVmID0gdHJ1ZTtcbiBcbiBcdFx0XHRyZWMgPSByZWdfYnRmX3JlY29yZChyZWcpO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9yZWZjb3VudGVkX2twdHIuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9yZWZjb3VudGVkX2twdHIuY1xuaW5kZXggNjE5MDZmNDgwMjVjYy4uYjcwYmU4YjUyZmY4MCAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9yZWZjb3VudGVkX2twdHIuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3JlZmNvdW50ZWRfa3B0ci5jXG5AQCAtMjMsNiAmIzQzOzIzLDE1IEBAIHN0cnVjdCBtYXBfdmFsdWUge1xuIFx0c3RydWN0IG5vZGVfZGF0YSBfX2twdHIgKm5vZGU7XG4gfTtcbiBcbiYjNDM7c3RydWN0IG5vZGVfcmVmY291bnRfb25seSB7XG4mIzQzO1x0bG9uZyBrZXk7XG4mIzQzO1x0c3RydWN0IGJwZl9yZWZjb3VudCByZWZjb3VudDtcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3N0cnVjdCBtYXBfdmFsdWVfcmVmY291bnRfb25seSB7XG4mIzQzO1x0c3RydWN0IG5vZGVfcmVmY291bnRfb25seSBfX2twdHIgKm5vZGU7XG4mIzQzO307XG4mIzQzO1xuIHN0cnVjdCB7XG4gXHRfX3VpbnQodHlwZSwgQlBGX01BUF9UWVBFX0FSUkFZKTtcbiBcdF9fdHlwZShrZXksIGludCk7XG5AQCAtMzAsNiAmIzQzOzM5LDEzIEBAIHN0cnVjdCB7XG4gXHRfX3VpbnQobWF4X2VudHJpZXMsIDIpO1xuIH0gc3Rhc2hlZF9ub2RlcyBTRUMoXCYjMzQ7Lm1hcHNcJiMzNDspO1xuIFxuJiM0MztzdHJ1Y3Qge1xuJiM0MztcdF9fdWludCh0eXBlLCBCUEZfTUFQX1RZUEVfQVJSQVkpO1xuJiM0MztcdF9fdHlwZShrZXksIGludCk7XG4mIzQzO1x0X190eXBlKHZhbHVlLCBzdHJ1Y3QgbWFwX3ZhbHVlX3JlZmNvdW50X29ubHkpO1xuJiM0MztcdF9fdWludChtYXhfZW50cmllcywgMSk7XG4mIzQzO30gc3Rhc2hlZF9yZWZjb3VudF9vbmx5IFNFQyhcJiMzNDsubWFwc1wmIzM0Oyk7XG4mIzQzO1xuIHN0cnVjdCBub2RlX2FjcXVpcmUge1xuIFx0bG9uZyBrZXk7XG4gXHRsb25nIGRhdGE7XG5AQCAtODMyLDYgJiM0Mzs4NDgsMTUxIEBAIGxvbmcgcmJ0cmVlX3JlZmNvdW50ZWRfbm9kZV9yZWZfZXNjYXBlc19vd25pbmdfaW5wdXQodm9pZCAqY3R4KVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuJiM0MztTRUMoXCYjMzQ7dGNcJiMzNDspXG4mIzQzO19fc3VjY2Vzc1xuJiM0Mztsb25nIHJlZmNvdW50X2FjcXVpcmVfb3duaW5nX2lucHV0X25vX251bGxfY2hlY2sodm9pZCAqY3R4KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IG5vZGVfcmVmY291bnRfb25seSAqbiwgKm07XG4mIzQzO1xuJiM0MztcdG4gPSBicGZfb2JqX25ldyh0eXBlb2YoKm4pKTtcbiYjNDM7XHRpZiAoIW4pXG4mIzQzO1x0XHRyZXR1cm4gMTtcbiYjNDM7XG4mIzQzO1x0bSA9IGJwZl9yZWZjb3VudF9hY3F1aXJlKG4pO1xuJiM0MztcdGJwZl9vYmpfZHJvcChtKTtcbiYjNDM7XHRicGZfb2JqX2Ryb3Aobik7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztTRUMoXCYjMzQ7dGNcJiMzNDspXG4mIzQzO19fc3VjY2Vzc1xuJiM0Mztsb25nIHJlZmNvdW50X2FjcXVpcmVfcmN1X21hcF9rcHRyX251bGxfY2hlY2tlZCh2b2lkICpjdHgpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgbWFwX3ZhbHVlX3JlZmNvdW50X29ubHkgKm1hcHZhbDtcbiYjNDM7XHRzdHJ1Y3Qgbm9kZV9yZWZjb3VudF9vbmx5ICpuLCAqbTtcbiYjNDM7XHRpbnQgaWR4ID0gMDtcbiYjNDM7XG4mIzQzO1x0bWFwdmFsID0gYnBmX21hcF9sb29rdXBfZWxlbShcdTAwMjZzdGFzaGVkX3JlZmNvdW50X29ubHksIFx1MDAyNmlkeCk7XG4mIzQzO1x0aWYgKCFtYXB2YWwpXG4mIzQzO1x0XHRyZXR1cm4gMTtcbiYjNDM7XG4mIzQzO1x0YnBmX3JjdV9yZWFkX2xvY2soKTtcbiYjNDM7XHRuID0gbWFwdmFsLVx1MDAzZW5vZGU7XG4mIzQzO1x0aWYgKCFuKSB7XG4mIzQzO1x0XHRicGZfcmN1X3JlYWRfdW5sb2NrKCk7XG4mIzQzO1x0XHRyZXR1cm4gMjtcbiYjNDM7XHR9XG4mIzQzO1x0bSA9IGJwZl9yZWZjb3VudF9hY3F1aXJlKG4pO1xuJiM0MztcdGJwZl9yY3VfcmVhZF91bmxvY2soKTtcbiYjNDM7XG4mIzQzO1x0aWYgKCFtKVxuJiM0MztcdFx0cmV0dXJuIDM7XG4mIzQzO1x0YnBmX29ial9kcm9wKG0pO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7U0VDKFwmIzM0Oz90Y1wmIzM0OylcbiYjNDM7X19zdWNjZXNzXG4mIzQzO2xvbmcgbWFwX2twdHJfcmVhZF9hZnRlcl9yY3VfdW5sb2NrKHZvaWQgKmN0eClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBtYXBfdmFsdWVfcmVmY291bnRfb25seSAqbWFwdmFsO1xuJiM0MztcdHN0cnVjdCBub2RlX3JlZmNvdW50X29ubHkgKm47XG4mIzQzO1x0aW50IGlkeCA9IDA7XG4mIzQzO1xuJiM0MztcdG1hcHZhbCA9IGJwZl9tYXBfbG9va3VwX2VsZW0oXHUwMDI2c3Rhc2hlZF9yZWZjb3VudF9vbmx5LCBcdTAwMjZpZHgpO1xuJiM0MztcdGlmICghbWFwdmFsKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdGJwZl9yY3VfcmVhZF9sb2NrKCk7XG4mIzQzO1x0biA9IG1hcHZhbC1cdTAwM2Vub2RlO1xuJiM0MztcdGlmICghbikge1xuJiM0MztcdFx0YnBmX3JjdV9yZWFkX3VubG9jaygpO1xuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1x0fVxuJiM0MztcdGJwZl9yY3VfcmVhZF91bmxvY2soKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIG4tXHUwMDNla2V5O1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztTRUMoXCYjMzQ7P3RjXCYjMzQ7KVxuJiM0MztfX2ZhaWx1cmUgX19tc2coXCYjMzQ7aXMgbmVpdGhlciBvd25pbmcgb3Igbm9uLW93bmluZyByZWZcJiMzNDspXG4mIzQzO2xvbmcgcmVmY291bnRfYWNxdWlyZV9ncmFwaF9hZnRlcl9yY3VfdW5sb2NrKHZvaWQgKmN0eClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBtYXBfdmFsdWUgKm1hcHZhbDtcbiYjNDM7XHRzdHJ1Y3Qgbm9kZV9kYXRhICpuLCAqbTtcbiYjNDM7XHRpbnQgaWR4ID0gMDtcbiYjNDM7XG4mIzQzO1x0bWFwdmFsID0gYnBmX21hcF9sb29rdXBfZWxlbShcdTAwMjZzdGFzaGVkX25vZGVzLCBcdTAwMjZpZHgpO1xuJiM0MztcdGlmICghbWFwdmFsKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdGJwZl9yY3VfcmVhZF9sb2NrKCk7XG4mIzQzO1x0biA9IG1hcHZhbC1cdTAwM2Vub2RlO1xuJiM0MztcdGlmICghbikge1xuJiM0MztcdFx0YnBmX3JjdV9yZWFkX3VubG9jaygpO1xuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1x0fVxuJiM0MztcdGJwZl9yY3VfcmVhZF91bmxvY2soKTtcbiYjNDM7XG4mIzQzO1x0bSA9IGJwZl9yZWZjb3VudF9hY3F1aXJlKG4pO1xuJiM0MztcdGlmIChtKVxuJiM0MztcdFx0YnBmX29ial9kcm9wKG0pO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7U0VDKFwmIzM0Oz90Y1wmIzM0OylcbiYjNDM7X19mYWlsdXJlIF9fbXNnKFwmIzM0O29ubHkgcmVhZCBpcyBzdXBwb3J0ZWRcJiMzNDspXG4mIzQzO2xvbmcgZ3JhcGhfbWFwX2twdHJfd3JpdGVfYWZ0ZXJfcmN1X3VubG9jayh2b2lkICpjdHgpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgbWFwX3ZhbHVlICptYXB2YWw7XG4mIzQzO1x0c3RydWN0IG5vZGVfZGF0YSAqbjtcbiYjNDM7XHRpbnQgaWR4ID0gMDtcbiYjNDM7XG4mIzQzO1x0bWFwdmFsID0gYnBmX21hcF9sb29rdXBfZWxlbShcdTAwMjZzdGFzaGVkX25vZGVzLCBcdTAwMjZpZHgpO1xuJiM0MztcdGlmICghbWFwdmFsKVxuJiM0MztcdFx0cmV0dXJuIDE7XG4mIzQzO1xuJiM0MztcdGJwZl9yY3VfcmVhZF9sb2NrKCk7XG4mIzQzO1x0biA9IG1hcHZhbC1cdTAwM2Vub2RlO1xuJiM0MztcdGlmICghbikge1xuJiM0MztcdFx0YnBmX3JjdV9yZWFkX3VubG9jaygpO1xuJiM0MztcdFx0cmV0dXJuIDI7XG4mIzQzO1x0fVxuJiM0MztcdGJwZl9yY3VfcmVhZF91bmxvY2soKTtcbiYjNDM7XG4mIzQzO1x0bi1cdTAwM2VrZXkgPSAxO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztTRUMoXCYjMzQ7P3RjXCYjMzQ7KVxuJiM0MztfX3N1Y2Nlc3NcbiYjNDM7bG9uZyBncmFwaF9tYXBfa3B0cl9yZWFkX2FmdGVyX3NwaW5fdW5sb2NrKHZvaWQgKmN0eClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBtYXBfdmFsdWUgKm1hcHZhbDtcbiYjNDM7XHRzdHJ1Y3Qgbm9kZV9kYXRhICpuO1xuJiM0MztcdGludCBpZHggPSAwO1xuJiM0MztcbiYjNDM7XHRtYXB2YWwgPSBicGZfbWFwX2xvb2t1cF9lbGVtKFx1MDAyNnN0YXNoZWRfbm9kZXMsIFx1MDAyNmlkeCk7XG4mIzQzO1x0aWYgKCFtYXB2YWwpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO1x0YnBmX3JjdV9yZWFkX2xvY2soKTtcbiYjNDM7XHRuID0gbWFwdmFsLVx1MDAzZW5vZGU7XG4mIzQzO1x0aWYgKCFuKSB7XG4mIzQzO1x0XHRicGZfcmN1X3JlYWRfdW5sb2NrKCk7XG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XHR9XG4mIzQzO1x0YnBmX3JjdV9yZWFkX3VubG9jaygpO1xuJiM0MztcbiYjNDM7XHRicGZfc3Bpbl9sb2NrKFx1MDAyNmxvY2spO1xuJiM0MztcdGJwZl9zcGluX3VubG9jayhcdTAwMjZsb2NrKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIG4tXHUwMDNla2V5O1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBsb25nIF9fc3Rhc2hfbWFwX2VtcHR5X3hjaGcoc3RydWN0IG5vZGVfZGF0YSAqbiwgaW50IGlkeClcbiB7XG4gXHRzdHJ1Y3QgbWFwX3ZhbHVlICptYXB2YWwgPSBicGZfbWFwX2xvb2t1cF9lbGVtKFx1MDAyNnN0YXNoZWRfbm9kZXMsIFx1MDAyNmlkeCk7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3JlZmNvdW50ZWRfa3B0cl9mYWlsLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvcmVmY291bnRlZF9rcHRyX2ZhaWwuY1xuaW5kZXggMDI0ZWYyYWFlMjAwOC4uMzQwOGY2OGFkNDQ0ZCAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9yZWZjb3VudGVkX2twdHJfZmFpbC5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvcmVmY291bnRlZF9rcHRyX2ZhaWwuY1xuQEAgLTE5LDYgJiM0MzsxOSwxNSBAQCBzdHJ1Y3Qgbm9kZV9yZWZjb3VudGVkIHtcbiBcdHN0cnVjdCBicGZfcmVmY291bnQgcmVmY291bnQ7XG4gfTtcbiBcbiYjNDM7c3RydWN0IG5vZGVfcmVmY291bnRfb25seSB7XG4mIzQzO1x0bG9uZyBrZXk7XG4mIzQzO1x0c3RydWN0IGJwZl9yZWZjb3VudCByZWZjb3VudDtcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3N0cnVjdCBtYXBfdmFsdWVfcmVmY291bnRfb25seSB7XG4mIzQzO1x0c3RydWN0IG5vZGVfcmVmY291bnRfb25seSBfX2twdHIgKm5vZGU7XG4mIzQzO307XG4mIzQzO1xuIGV4dGVybiB2b2lkIGJwZl9yY3VfcmVhZF9sb2NrKHZvaWQpIF9fa3N5bTtcbiBleHRlcm4gdm9pZCBicGZfcmN1X3JlYWRfdW5sb2NrKHZvaWQpIF9fa3N5bTtcbiBcbkBAIC0yOCw2ICYjNDM7MzcsMTMgQEAgcHJpdmF0ZShBKSBzdHJ1Y3QgYnBmX3JiX3Jvb3QgZ3Jvb3QgX19jb250YWlucyhub2RlX2FjcXVpcmUsIG5vZGUpO1xuIHByaXZhdGUoQikgc3RydWN0IGJwZl9zcGluX2xvY2sgbG9jaztcbiBwcml2YXRlKEIpIHN0cnVjdCBicGZfbGlzdF9oZWFkIGhlYWQgX19jb250YWlucyhub2RlX3JlZmNvdW50ZWQsIGxpc3QpO1xuIFxuJiM0MztzdHJ1Y3Qge1xuJiM0MztcdF9fdWludCh0eXBlLCBCUEZfTUFQX1RZUEVfQVJSQVkpO1xuJiM0MztcdF9fdHlwZShrZXksIGludCk7XG4mIzQzO1x0X190eXBlKHZhbHVlLCBzdHJ1Y3QgbWFwX3ZhbHVlX3JlZmNvdW50X29ubHkpO1xuJiM0MztcdF9fdWludChtYXhfZW50cmllcywgMSk7XG4mIzQzO30gc3Rhc2hlZF9yZWZjb3VudF9vbmx5IFNFQyhcJiMzNDsubWFwc1wmIzM0Oyk7XG4mIzQzO1xuIHN0YXRpYyBib29sIGxlc3Moc3RydWN0IGJwZl9yYl9ub2RlICphLCBjb25zdCBzdHJ1Y3QgYnBmX3JiX25vZGUgKmIpXG4ge1xuIFx0c3RydWN0IG5vZGVfYWNxdWlyZSAqbm9kZV9hO1xuQEAgLTgwLDYgJiM0Mzs5Niw2NCBAQCBsb25nIHJlZmNvdW50X2FjcXVpcmVfbWF5YmVfbnVsbCh2b2lkICpjdHgpXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4mIzQzO1NFQyhcJiMzNDs/dGNcJiMzNDspXG4mIzQzO19fZmFpbHVyZSBfX21zZyhcJiMzNDtQb3NzaWJseSBOVUxMIHBvaW50ZXIgcGFzc2VkIHRvIHRydXN0ZWQgUjFcJiMzNDspXG4mIzQzO2xvbmcgcmVmY291bnRfYWNxdWlyZV9yY3VfbWFwX2twdHJfdW5jaGVja2VkX2Ryb3Aodm9pZCAqY3R4KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IG1hcF92YWx1ZV9yZWZjb3VudF9vbmx5ICptYXB2YWw7XG4mIzQzO1x0c3RydWN0IG5vZGVfcmVmY291bnRfb25seSAqdG1wLCAqbiwgKm07XG4mIzQzO1x0aW50IGlkeCA9IDA7XG4mIzQzO1xuJiM0MztcdHRtcCA9IGJwZl9vYmpfbmV3KHR5cGVvZigqdG1wKSk7XG4mIzQzO1x0aWYgKCF0bXApXG4mIzQzO1x0XHRyZXR1cm4gMztcbiYjNDM7XHRicGZfb2JqX2Ryb3AodG1wKTtcbiYjNDM7XG4mIzQzO1x0bWFwdmFsID0gYnBmX21hcF9sb29rdXBfZWxlbShcdTAwMjZzdGFzaGVkX3JlZmNvdW50X29ubHksIFx1MDAyNmlkeCk7XG4mIzQzO1x0aWYgKCFtYXB2YWwpXG4mIzQzO1x0XHRyZXR1cm4gMTtcbiYjNDM7XG4mIzQzO1x0YnBmX3JjdV9yZWFkX2xvY2soKTtcbiYjNDM7XHRuID0gbWFwdmFsLVx1MDAzZW5vZGU7XG4mIzQzO1x0aWYgKCFuKSB7XG4mIzQzO1x0XHRicGZfcmN1X3JlYWRfdW5sb2NrKCk7XG4mIzQzO1x0XHRyZXR1cm4gMjtcbiYjNDM7XHR9XG4mIzQzO1x0bSA9IGJwZl9yZWZjb3VudF9hY3F1aXJlKG4pO1xuJiM0MztcdGJwZl9yY3VfcmVhZF91bmxvY2soKTtcbiYjNDM7XG4mIzQzO1x0YnBmX29ial9kcm9wKG0pO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7U0VDKFwmIzM0Oz90Y1wmIzM0OylcbiYjNDM7X19mYWlsdXJlIF9fbXNnKFwmIzM0O2lzIG5laXRoZXIgb3duaW5nIG9yIG5vbi1vd25pbmcgcmVmXCYjMzQ7KVxuJiM0Mztsb25nIHJlZmNvdW50X2FjcXVpcmVfYWZ0ZXJfcmN1X3VubG9jayh2b2lkICpjdHgpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgbWFwX3ZhbHVlX3JlZmNvdW50X29ubHkgKm1hcHZhbDtcbiYjNDM7XHRzdHJ1Y3Qgbm9kZV9yZWZjb3VudF9vbmx5ICpuLCAqbTtcbiYjNDM7XHRpbnQgaWR4ID0gMDtcbiYjNDM7XG4mIzQzO1x0bWFwdmFsID0gYnBmX21hcF9sb29rdXBfZWxlbShcdTAwMjZzdGFzaGVkX3JlZmNvdW50X29ubHksIFx1MDAyNmlkeCk7XG4mIzQzO1x0aWYgKCFtYXB2YWwpXG4mIzQzO1x0XHRyZXR1cm4gMTtcbiYjNDM7XG4mIzQzO1x0YnBmX3JjdV9yZWFkX2xvY2soKTtcbiYjNDM7XHRuID0gbWFwdmFsLVx1MDAzZW5vZGU7XG4mIzQzO1x0aWYgKCFuKSB7XG4mIzQzO1x0XHRicGZfcmN1X3JlYWRfdW5sb2NrKCk7XG4mIzQzO1x0XHRyZXR1cm4gMjtcbiYjNDM7XHR9XG4mIzQzO1x0YnBmX3JjdV9yZWFkX3VubG9jaygpO1xuJiM0MztcbiYjNDM7XHRtID0gYnBmX3JlZmNvdW50X2FjcXVpcmUobik7XG4mIzQzO1x0aWYgKG0pXG4mIzQzO1x0XHRicGZfb2JqX2Ryb3AobSk7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuIFNFQyhcJiMzNDs/dGNcJiMzNDspXG4gX19mYWlsdXJlIF9fbXNnKFwmIzM0O1VucmVsZWFzZWQgcmVmZXJlbmNlIGlkPTMgYWxsb2NfaW5zbj17e1swLTldJiM0Mzt9fVwmIzM0OylcbiBsb25nIHJidHJlZV9yZWZjb3VudGVkX25vZGVfcmVmX2VzY2FwZXNfb3duaW5nX2lucHV0KHZvaWQgKmN0eClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAxMjo0MjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDticGZfY2hlY2smIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEJQRiB2ZXJpZmllciYjMzk7cyBsb2dpYyBmb3IgaGFuZGxpbmcgUFRSX1RPX0JURl9JRCB3aXRoIE1FTV9BTExPQyBhbmQgUFRSX1VOVFJVU1RFRCBmbGFncywgc3BlY2lmaWNhbGx5IGluIGNoZWNrX3B0cl90b19idGZfYWNjZXNzIGFuZCBjaGVja19rZnVuY19hcmdzLiBUaGVzZSBjaGFuZ2VzIGFmZmVjdCBob3cgdGhlIHZlcmlmaWVyIHZhbGlkYXRlcyBtZW1vcnkgYWNjZXNzZXMgYW5kIGtmdW5jIGFyZ3VtZW50cyBmb3IgYWxsb2NhdGVkIG9iamVjdHMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBCUEYgdmVyaWZpZXIgdGhhdCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMzkyZjQ4MTdjYjIxYTM4YWQ1NGRjNzNkYTc2ZWNkOTUyOGVlZWJhMApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBNb24gQXVnIDMgMTI6NDI6MTcgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oIGIvaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaAppbmRleCAzOWE4NTFlNjkwZWM0Li43MDE0ZDYyZmUzZDFjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmgKQEAgLTEzMDcsNyAmIzQzOzEzMDcsMTYgQEAgc3RhdGljIGlubGluZSBib29sIGJwZl90eXBlX2hhc191bnNhZmVfbW9kaWZpZXJzKHUzMiB0eXBlKQogCiBzdGF0aWMgaW5saW5lIGJvb2wgdHlwZV9pc19wdHJfYWxsb2Nfb2JqKHUzMiB0eXBlKQogewotCXJldHVybiBiYXNlX3R5cGUodHlwZSkgPT0gUFRSX1RPX0JURl9JRCAmYW1wOyZhbXA7IHR5cGVfZmxhZyh0eXBlKSAmYW1wOyBNRU1fQUxMT0M7CiYjNDM7CXJldHVybiBiYXNlX3R5cGUodHlwZSkgPT0gUFRSX1RPX0JURl9JRCAmYW1wOyZhbXA7CiYjNDM7CSAgICAgICB0eXBlX2ZsYWcodHlwZSkgJmFtcDsgTUVNX0FMTE9DICZhbXA7JmFtcDsKJiM0MzsJICAgICAgICEodHlwZV9mbGFnKHR5cGUpICZhbXA7IFBUUl9VTlRSVVNURUQpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgdHlwZV9pc191bnRydXN0ZWRfcHRyX2FsbG9jX29iaih1MzIgdHlwZSkKJiM0Mzt7CiYjNDM7CXJldHVybiBiYXNlX3R5cGUodHlwZSkgPT0gUFRSX1RPX0JURl9JRCAmYW1wOyZhbXA7CiYjNDM7CSAgICAgICB0eXBlX2ZsYWcodHlwZSkgJmFtcDsgTUVNX0FMTE9DICZhbXA7JmFtcDsKJiM0MzsJICAgICAgIHR5cGVfZmxhZyh0eXBlKSAmYW1wOyBQVFJfVU5UUlVTVEVEOwogfQogCiBzdGF0aWMgaW5saW5lIGJvb2wgdHlwZV9pc19ub25fb3duaW5nX3JlZih1MzIgdHlwZSkKZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvdmVyaWZpZXIuYyBiL2tlcm5lbC9icGYvdmVyaWZpZXIuYwppbmRleCBmZGM1ZmJiMWY3OGNhLi44YjM1YzYzNzgwNzk4IDEwMDY0NAotLS0gYS9rZXJuZWwvYnBmL3ZlcmlmaWVyLmMKJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2JwZi92ZXJpZmllci5jCkBAIC01ODA5LDcgJiM0Mzs1ODA5LDEzIEBAIHN0YXRpYyBpbnQgY2hlY2tfcHRyX3RvX2J0Zl9hY2Nlc3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwKIAkJCXJldHVybiAtRUFDQ0VTOwogCQl9CiAKLQkJaWYgKHR5cGVfaXNfYWxsb2MocmVnLSZndDt0eXBlKSAmYW1wOyZhbXA7ICF0eXBlX2lzX25vbl9vd25pbmdfcmVmKHJlZy0mZ3Q7dHlwZSkgJmFtcDsmYW1wOwomIzQzOwkJLyoKJiM0MzsJCSAqIFNraXAgdGhpcyByZWZlcmVuY2VkLUlEIHNhbml0eSBjaGVjayBmb3IgdW50cnVzdGVkIGFsbG9jYXRlZCBvYmplY3RzOwomIzQzOwkJICogdGhlIGFjY2VzcyBjaGVjayBhYm92ZSBhbHJlYWR5IHJlamVjdHMgd3JpdGVzIHRocm91Z2ggdGhlbS4KJiM0MzsJCSAqLwomIzQzOwkJaWYgKHR5cGVfaXNfYWxsb2MocmVnLSZndDt0eXBlKSAmYW1wOyZhbXA7CiYjNDM7CQkgICAgIXR5cGVfaXNfdW50cnVzdGVkX3B0cl9hbGxvY19vYmoocmVnLSZndDt0eXBlKSAmYW1wOyZhbXA7CiYjNDM7CQkgICAgIXR5cGVfaXNfbm9uX293bmluZ19yZWYocmVnLSZndDt0eXBlKSAmYW1wOyZhbXA7CiAJCSAgICAhKHJlZy0mZ3Q7dHlwZSAmYW1wOyBNRU1fUkNVKSAmYW1wOyZhbXA7ICFyZWdfaXNfcmVmZXJlbmNlZChlbnYsIHJlZykpIHsKIAkJCXZlcmlmaWVyX2J1ZyhlbnYsICYjMzQ7YWxsb2NhdGVkIG9iamVjdCBtdXN0IGhhdmUgYSByZWZlcmVuY2VkIGlkJiMzNDspOwogCQkJcmV0dXJuIC1FRkFVTFQ7CkBAIC0xMjQxOSw3ICYjNDM7MTI0MjUsNyBAQCBzdGF0aWMgaW50IGNoZWNrX2tmdW5jX2FyZ3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9rZnVuY19jYWxsXwogCQkJCQlyZWdfYXJnX25hbWUoZW52LCBhcmdubykpOwogCQkJCXJldHVybiAtRUlOVkFMOwogCQkJfQotCQkJaWYgKCF0eXBlX2lzX25vbl9vd25pbmdfcmVmKHJlZy0mZ3Q7dHlwZSkpCiYjNDM7CQkJaWYgKCF0eXBlX2lzX25vbl9vd25pbmdfcmVmKHJlZy0mZ3Q7dHlwZSkgJmFtcDsmYW1wOyByZWdfaXNfcmVmZXJlbmNlZChlbnYsIHJlZykpCiAJCQkJbWV0YS0mZ3Q7YXJnX293bmluZ19yZWYgPSB0cnVlOwogCiAJCQlyZWMgPSByZWdfYnRmX3JlY29yZChyZWcpOwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3JlZmNvdW50ZWRfa3B0ci5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3JlZmNvdW50ZWRfa3B0ci5jCmluZGV4IDYxOTA2ZjQ4MDI1Y2MuLmI3MGJlOGI1MmZmODAgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9yZWZjb3VudGVkX2twdHIuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvcmVmY291bnRlZF9rcHRyLmMKQEAgLTIzLDYgJiM0MzsyMywxNSBAQCBzdHJ1Y3QgbWFwX3ZhbHVlIHsKIAlzdHJ1Y3Qgbm9kZV9kYXRhIF9fa3B0ciAqbm9kZTsKIH07CiAKJiM0MztzdHJ1Y3Qgbm9kZV9yZWZjb3VudF9vbmx5IHsKJiM0MzsJbG9uZyBrZXk7CiYjNDM7CXN0cnVjdCBicGZfcmVmY291bnQgcmVmY291bnQ7CiYjNDM7fTsKJiM0MzsKJiM0MztzdHJ1Y3QgbWFwX3ZhbHVlX3JlZmNvdW50X29ubHkgewomIzQzOwlzdHJ1Y3Qgbm9kZV9yZWZjb3VudF9vbmx5IF9fa3B0ciAqbm9kZTsKJiM0Mzt9OwomIzQzOwogc3RydWN0IHsKIAlfX3VpbnQodHlwZSwgQlBGX01BUF9UWVBFX0FSUkFZKTsKIAlfX3R5cGUoa2V5LCBpbnQpOwpAQCAtMzAsNiAmIzQzOzM5LDEzIEBAIHN0cnVjdCB7CiAJX191aW50KG1heF9lbnRyaWVzLCAyKTsKIH0gc3Rhc2hlZF9ub2RlcyBTRUMoJiMzNDsubWFwcyYjMzQ7KTsKIAomIzQzO3N0cnVjdCB7CiYjNDM7CV9fdWludCh0eXBlLCBCUEZfTUFQX1RZUEVfQVJSQVkpOwomIzQzOwlfX3R5cGUoa2V5LCBpbnQpOwomIzQzOwlfX3R5cGUodmFsdWUsIHN0cnVjdCBtYXBfdmFsdWVfcmVmY291bnRfb25seSk7CiYjNDM7CV9fdWludChtYXhfZW50cmllcywgMSk7CiYjNDM7fSBzdGFzaGVkX3JlZmNvdW50X29ubHkgU0VDKCYjMzQ7Lm1hcHMmIzM0Oyk7CiYjNDM7CiBzdHJ1Y3Qgbm9kZV9hY3F1aXJlIHsKIAlsb25nIGtleTsKIAlsb25nIGRhdGE7CkBAIC04MzIsNiAmIzQzOzg0OCwxNTEgQEAgbG9uZyByYnRyZWVfcmVmY291bnRlZF9ub2RlX3JlZl9lc2NhcGVzX293bmluZ19pbnB1dCh2b2lkICpjdHgpCiAJcmV0dXJuIDA7CiB9CiAKJiM0MztTRUMoJiMzNDt0YyYjMzQ7KQomIzQzO19fc3VjY2VzcwomIzQzO2xvbmcgcmVmY291bnRfYWNxdWlyZV9vd25pbmdfaW5wdXRfbm9fbnVsbF9jaGVjayh2b2lkICpjdHgpCiYjNDM7ewomIzQzOwlzdHJ1Y3Qgbm9kZV9yZWZjb3VudF9vbmx5ICpuLCAqbTsKJiM0MzsKJiM0MzsJbiA9IGJwZl9vYmpfbmV3KHR5cGVvZigqbikpOwomIzQzOwlpZiAoIW4pCiYjNDM7CQlyZXR1cm4gMTsKJiM0MzsKJiM0MzsJbSA9IGJwZl9yZWZjb3VudF9hY3F1aXJlKG4pOwomIzQzOwlicGZfb2JqX2Ryb3AobSk7CiYjNDM7CWJwZl9vYmpfZHJvcChuKTsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO1NFQygmIzM0O3RjJiMzNDspCiYjNDM7X19zdWNjZXNzCiYjNDM7bG9uZyByZWZjb3VudF9hY3F1aXJlX3JjdV9tYXBfa3B0cl9udWxsX2NoZWNrZWQodm9pZCAqY3R4KQomIzQzO3sKJiM0MzsJc3RydWN0IG1hcF92YWx1ZV9yZWZjb3VudF9vbmx5ICptYXB2YWw7CiYjNDM7CXN0cnVjdCBub2RlX3JlZmNvdW50X29ubHkgKm4sICptOwomIzQzOwlpbnQgaWR4ID0gMDsKJiM0MzsKJiM0MzsJbWFwdmFsID0gYnBmX21hcF9sb29rdXBfZWxlbSgmYW1wO3N0YXNoZWRfcmVmY291bnRfb25seSwgJmFtcDtpZHgpOwomIzQzOwlpZiAoIW1hcHZhbCkKJiM0MzsJCXJldHVybiAxOwomIzQzOwomIzQzOwlicGZfcmN1X3JlYWRfbG9jaygpOwomIzQzOwluID0gbWFwdmFsLSZndDtub2RlOwomIzQzOwlpZiAoIW4pIHsKJiM0MzsJCWJwZl9yY3VfcmVhZF91bmxvY2soKTsKJiM0MzsJCXJldHVybiAyOwomIzQzOwl9CiYjNDM7CW0gPSBicGZfcmVmY291bnRfYWNxdWlyZShuKTsKJiM0MzsJYnBmX3JjdV9yZWFkX3VubG9jaygpOwomIzQzOwomIzQzOwlpZiAoIW0pCiYjNDM7CQlyZXR1cm4gMzsKJiM0MzsJYnBmX29ial9kcm9wKG0pOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7U0VDKCYjMzQ7P3RjJiMzNDspCiYjNDM7X19zdWNjZXNzCiYjNDM7bG9uZyBtYXBfa3B0cl9yZWFkX2FmdGVyX3JjdV91bmxvY2sodm9pZCAqY3R4KQomIzQzO3sKJiM0MzsJc3RydWN0IG1hcF92YWx1ZV9yZWZjb3VudF9vbmx5ICptYXB2YWw7CiYjNDM7CXN0cnVjdCBub2RlX3JlZmNvdW50X29ubHkgKm47CiYjNDM7CWludCBpZHggPSAwOwomIzQzOwomIzQzOwltYXB2YWwgPSBicGZfbWFwX2xvb2t1cF9lbGVtKCZhbXA7c3Rhc2hlZF9yZWZjb3VudF9vbmx5LCAmYW1wO2lkeCk7CiYjNDM7CWlmICghbWFwdmFsKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CWJwZl9yY3VfcmVhZF9sb2NrKCk7CiYjNDM7CW4gPSBtYXB2YWwtJmd0O25vZGU7CiYjNDM7CWlmICghbikgewomIzQzOwkJYnBmX3JjdV9yZWFkX3VubG9jaygpOwomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CX0KJiM0MzsJYnBmX3JjdV9yZWFkX3VubG9jaygpOwomIzQzOwomIzQzOwlyZXR1cm4gbi0mZ3Q7a2V5OwomIzQzO30KJiM0MzsKJiM0MztTRUMoJiMzNDs/dGMmIzM0OykKJiM0MztfX2ZhaWx1cmUgX19tc2coJiMzNDtpcyBuZWl0aGVyIG93bmluZyBvciBub24tb3duaW5nIHJlZiYjMzQ7KQomIzQzO2xvbmcgcmVmY291bnRfYWNxdWlyZV9ncmFwaF9hZnRlcl9yY3VfdW5sb2NrKHZvaWQgKmN0eCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBtYXBfdmFsdWUgKm1hcHZhbDsKJiM0MzsJc3RydWN0IG5vZGVfZGF0YSAqbiwgKm07CiYjNDM7CWludCBpZHggPSAwOwomIzQzOwomIzQzOwltYXB2YWwgPSBicGZfbWFwX2xvb2t1cF9lbGVtKCZhbXA7c3Rhc2hlZF9ub2RlcywgJmFtcDtpZHgpOwomIzQzOwlpZiAoIW1hcHZhbCkKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwlicGZfcmN1X3JlYWRfbG9jaygpOwomIzQzOwluID0gbWFwdmFsLSZndDtub2RlOwomIzQzOwlpZiAoIW4pIHsKJiM0MzsJCWJwZl9yY3VfcmVhZF91bmxvY2soKTsKJiM0MzsJCXJldHVybiAwOwomIzQzOwl9CiYjNDM7CWJwZl9yY3VfcmVhZF91bmxvY2soKTsKJiM0MzsKJiM0MzsJbSA9IGJwZl9yZWZjb3VudF9hY3F1aXJlKG4pOwomIzQzOwlpZiAobSkKJiM0MzsJCWJwZl9vYmpfZHJvcChtKTsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO1NFQygmIzM0Oz90YyYjMzQ7KQomIzQzO19fZmFpbHVyZSBfX21zZygmIzM0O29ubHkgcmVhZCBpcyBzdXBwb3J0ZWQmIzM0OykKJiM0Mztsb25nIGdyYXBoX21hcF9rcHRyX3dyaXRlX2FmdGVyX3JjdV91bmxvY2sodm9pZCAqY3R4KQomIzQzO3sKJiM0MzsJc3RydWN0IG1hcF92YWx1ZSAqbWFwdmFsOwomIzQzOwlzdHJ1Y3Qgbm9kZV9kYXRhICpuOwomIzQzOwlpbnQgaWR4ID0gMDsKJiM0MzsKJiM0MzsJbWFwdmFsID0gYnBmX21hcF9sb29rdXBfZWxlbSgmYW1wO3N0YXNoZWRfbm9kZXMsICZhbXA7aWR4KTsKJiM0MzsJaWYgKCFtYXB2YWwpCiYjNDM7CQlyZXR1cm4gMTsKJiM0MzsKJiM0MzsJYnBmX3JjdV9yZWFkX2xvY2soKTsKJiM0MzsJbiA9IG1hcHZhbC0mZ3Q7bm9kZTsKJiM0MzsJaWYgKCFuKSB7CiYjNDM7CQlicGZfcmN1X3JlYWRfdW5sb2NrKCk7CiYjNDM7CQlyZXR1cm4gMjsKJiM0MzsJfQomIzQzOwlicGZfcmN1X3JlYWRfdW5sb2NrKCk7CiYjNDM7CiYjNDM7CW4tJmd0O2tleSA9IDE7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztTRUMoJiMzNDs/dGMmIzM0OykKJiM0MztfX3N1Y2Nlc3MKJiM0Mztsb25nIGdyYXBoX21hcF9rcHRyX3JlYWRfYWZ0ZXJfc3Bpbl91bmxvY2sodm9pZCAqY3R4KQomIzQzO3sKJiM0MzsJc3RydWN0IG1hcF92YWx1ZSAqbWFwdmFsOwomIzQzOwlzdHJ1Y3Qgbm9kZV9kYXRhICpuOwomIzQzOwlpbnQgaWR4ID0gMDsKJiM0MzsKJiM0MzsJbWFwdmFsID0gYnBmX21hcF9sb29rdXBfZWxlbSgmYW1wO3N0YXNoZWRfbm9kZXMsICZhbXA7aWR4KTsKJiM0MzsJaWYgKCFtYXB2YWwpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJYnBmX3JjdV9yZWFkX2xvY2soKTsKJiM0MzsJbiA9IG1hcHZhbC0mZ3Q7bm9kZTsKJiM0MzsJaWYgKCFuKSB7CiYjNDM7CQlicGZfcmN1X3JlYWRfdW5sb2NrKCk7CiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsJfQomIzQzOwlicGZfcmN1X3JlYWRfdW5sb2NrKCk7CiYjNDM7CiYjNDM7CWJwZl9zcGluX2xvY2soJmFtcDtsb2NrKTsKJiM0MzsJYnBmX3NwaW5fdW5sb2NrKCZhbXA7bG9jayk7CiYjNDM7CiYjNDM7CXJldHVybiBuLSZndDtrZXk7CiYjNDM7fQomIzQzOwogc3RhdGljIGxvbmcgX19zdGFzaF9tYXBfZW1wdHlfeGNoZyhzdHJ1Y3Qgbm9kZV9kYXRhICpuLCBpbnQgaWR4KQogewogCXN0cnVjdCBtYXBfdmFsdWUgKm1hcHZhbCA9IGJwZl9tYXBfbG9va3VwX2VsZW0oJmFtcDtzdGFzaGVkX25vZGVzLCAmYW1wO2lkeCk7CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvcmVmY291bnRlZF9rcHRyX2ZhaWwuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9yZWZjb3VudGVkX2twdHJfZmFpbC5jCmluZGV4IDAyNGVmMmFhZTIwMDguLjM0MDhmNjhhZDQ0NGQgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9yZWZjb3VudGVkX2twdHJfZmFpbC5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9yZWZjb3VudGVkX2twdHJfZmFpbC5jCkBAIC0xOSw2ICYjNDM7MTksMTUgQEAgc3RydWN0IG5vZGVfcmVmY291bnRlZCB7CiAJc3RydWN0IGJwZl9yZWZjb3VudCByZWZjb3VudDsKIH07CiAKJiM0MztzdHJ1Y3Qgbm9kZV9yZWZjb3VudF9vbmx5IHsKJiM0MzsJbG9uZyBrZXk7CiYjNDM7CXN0cnVjdCBicGZfcmVmY291bnQgcmVmY291bnQ7CiYjNDM7fTsKJiM0MzsKJiM0MztzdHJ1Y3QgbWFwX3ZhbHVlX3JlZmNvdW50X29ubHkgewomIzQzOwlzdHJ1Y3Qgbm9kZV9yZWZjb3VudF9vbmx5IF9fa3B0ciAqbm9kZTsKJiM0Mzt9OwomIzQzOwogZXh0ZXJuIHZvaWQgYnBmX3JjdV9yZWFkX2xvY2sodm9pZCkgX19rc3ltOwogZXh0ZXJuIHZvaWQgYnBmX3JjdV9yZWFkX3VubG9jayh2b2lkKSBfX2tzeW07CiAKQEAgLTI4LDYgJiM0MzszNywxMyBAQCBwcml2YXRlKEEpIHN0cnVjdCBicGZfcmJfcm9vdCBncm9vdCBfX2NvbnRhaW5zKG5vZGVfYWNxdWlyZSwgbm9kZSk7CiBwcml2YXRlKEIpIHN0cnVjdCBicGZfc3Bpbl9sb2NrIGxvY2s7CiBwcml2YXRlKEIpIHN0cnVjdCBicGZfbGlzdF9oZWFkIGhlYWQgX19jb250YWlucyhub2RlX3JlZmNvdW50ZWQsIGxpc3QpOwogCiYjNDM7c3RydWN0IHsKJiM0MzsJX191aW50KHR5cGUsIEJQRl9NQVBfVFlQRV9BUlJBWSk7CiYjNDM7CV9fdHlwZShrZXksIGludCk7CiYjNDM7CV9fdHlwZSh2YWx1ZSwgc3RydWN0IG1hcF92YWx1ZV9yZWZjb3VudF9vbmx5KTsKJiM0MzsJX191aW50KG1heF9lbnRyaWVzLCAxKTsKJiM0Mzt9IHN0YXNoZWRfcmVmY291bnRfb25seSBTRUMoJiMzNDsubWFwcyYjMzQ7KTsKJiM0MzsKIHN0YXRpYyBib29sIGxlc3Moc3RydWN0IGJwZl9yYl9ub2RlICphLCBjb25zdCBzdHJ1Y3QgYnBmX3JiX25vZGUgKmIpCiB7CiAJc3RydWN0IG5vZGVfYWNxdWlyZSAqbm9kZV9hOwpAQCAtODAsNiAmIzQzOzk2LDY0IEBAIGxvbmcgcmVmY291bnRfYWNxdWlyZV9tYXliZV9udWxsKHZvaWQgKmN0eCkKIAlyZXR1cm4gMDsKIH0KIAomIzQzO1NFQygmIzM0Oz90YyYjMzQ7KQomIzQzO19fZmFpbHVyZSBfX21zZygmIzM0O1Bvc3NpYmx5IE5VTEwgcG9pbnRlciBwYXNzZWQgdG8gdHJ1c3RlZCBSMSYjMzQ7KQomIzQzO2xvbmcgcmVmY291bnRfYWNxdWlyZV9yY3VfbWFwX2twdHJfdW5jaGVja2VkX2Ryb3Aodm9pZCAqY3R4KQomIzQzO3sKJiM0MzsJc3RydWN0IG1hcF92YWx1ZV9yZWZjb3VudF9vbmx5ICptYXB2YWw7CiYjNDM7CXN0cnVjdCBub2RlX3JlZmNvdW50X29ubHkgKnRtcCwgKm4sICptOwomIzQzOwlpbnQgaWR4ID0gMDsKJiM0MzsKJiM0MzsJdG1wID0gYnBmX29ial9uZXcodHlwZW9mKCp0bXApKTsKJiM0MzsJaWYgKCF0bXApCiYjNDM7CQlyZXR1cm4gMzsKJiM0MzsJYnBmX29ial9kcm9wKHRtcCk7CiYjNDM7CiYjNDM7CW1hcHZhbCA9IGJwZl9tYXBfbG9va3VwX2VsZW0oJmFtcDtzdGFzaGVkX3JlZmNvdW50X29ubHksICZhbXA7aWR4KTsKJiM0MzsJaWYgKCFtYXB2YWwpCiYjNDM7CQlyZXR1cm4gMTsKJiM0MzsKJiM0MzsJYnBmX3JjdV9yZWFkX2xvY2soKTsKJiM0MzsJbiA9IG1hcHZhbC0mZ3Q7bm9kZTsKJiM0MzsJaWYgKCFuKSB7CiYjNDM7CQlicGZfcmN1X3JlYWRfdW5sb2NrKCk7CiYjNDM7CQlyZXR1cm4gMjsKJiM0MzsJfQomIzQzOwltID0gYnBmX3JlZmNvdW50X2FjcXVpcmUobik7CiYjNDM7CWJwZl9yY3VfcmVhZF91bmxvY2soKTsKJiM0MzsKJiM0MzsJYnBmX29ial9kcm9wKG0pOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7U0VDKCYjMzQ7P3RjJiMzNDspCiYjNDM7X19mYWlsdXJlIF9fbXNnKCYjMzQ7aXMgbmVpdGhlciBvd25pbmcgb3Igbm9uLW93bmluZyByZWYmIzM0OykKJiM0Mztsb25nIHJlZmNvdW50X2FjcXVpcmVfYWZ0ZXJfcmN1X3VubG9jayh2b2lkICpjdHgpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgbWFwX3ZhbHVlX3JlZmNvdW50X29ubHkgKm1hcHZhbDsKJiM0MzsJc3RydWN0IG5vZGVfcmVmY291bnRfb25seSAqbiwgKm07CiYjNDM7CWludCBpZHggPSAwOwomIzQzOwomIzQzOwltYXB2YWwgPSBicGZfbWFwX2xvb2t1cF9lbGVtKCZhbXA7c3Rhc2hlZF9yZWZjb3VudF9vbmx5LCAmYW1wO2lkeCk7CiYjNDM7CWlmICghbWFwdmFsKQomIzQzOwkJcmV0dXJuIDE7CiYjNDM7CiYjNDM7CWJwZl9yY3VfcmVhZF9sb2NrKCk7CiYjNDM7CW4gPSBtYXB2YWwtJmd0O25vZGU7CiYjNDM7CWlmICghbikgewomIzQzOwkJYnBmX3JjdV9yZWFkX3VubG9jaygpOwomIzQzOwkJcmV0dXJuIDI7CiYjNDM7CX0KJiM0MzsJYnBmX3JjdV9yZWFkX3VubG9jaygpOwomIzQzOwomIzQzOwltID0gYnBmX3JlZmNvdW50X2FjcXVpcmUobik7CiYjNDM7CWlmIChtKQomIzQzOwkJYnBmX29ial9kcm9wKG0pOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiBTRUMoJiMzNDs/dGMmIzM0OykKIF9fZmFpbHVyZSBfX21zZygmIzM0O1VucmVsZWFzZWQgcmVmZXJlbmNlIGlkPTMgYWxsb2NfaW5zbj17e1swLTldJiM0Mzt9fSYjMzQ7KQogbG9uZyByYnRyZWVfcmVmY291bnRlZF9ub2RlX3JlZl9lc2NhcGVzX293bmluZ19pbnB1dCh2b2lkICpjdHgpCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDEyOjQyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU1MDMKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAzNzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBCUEYgVmVyaWZpZXIgUGF0Y2ggZm9yIEZ1enppbmcgT3Bwb3J0dW5pdGllcyoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBnb3QgYSBwYXRjaCBoZXJlIHRoYXQmIzM5O3MgdHdlYWtpbmcgdGhlIEJQRiB2ZXJpZmllciwgc3BlY2lmaWNhbGx5IGhvdyBpdCBoYW5kbGVzIGBQVFJfVE9fQlRGX0lEYCBhbmQgbWVtb3J5IGFsbG9jYXRpb24gd2l0aCBgTUVNX0FMTE9DYC4gTXkgaW1tZWRpYXRlIGdvYWwgaXMgdG8gZmlndXJlIG91dCB0aGUgYmVzdCBzcG90cyB0byBmb2N1cyBmdXp6aW5nIGVmZm9ydHMuIFRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGhlbHBlciwgYHR5cGVfaXNfdW50cnVzdGVkX3B0cl9hbGxvY19vYmpgLCBhbmQgbW9kaWZpZXMgYGNoZWNrX3B0cl90b19idGZfYWNjZXNzYCB0byBieXBhc3MgdGhlIHVzdWFsIHNhbml0eSBjaGVja3MgZm9yIHRoZXNlIHVudHJ1c3RlZCBhbGxvY2F0ZWQgb2JqZWN0cy4gSXQgYWxzbyBjaGFuZ2VzIGBjaGVja19rZnVuY19hcmdzYCB0byBpbmNsdWRlIGFuIGV4dHJhIGNoZWNrLCBgcmVnX2lzX3JlZmVyZW5jZWQoZW52LCByZWcpYCwgYmVmb3JlIG1hcmtpbmcgdGhlIGFyZ3VtZW50IGFzIG93bmVkLiBUaGlzIHNvdW5kcyBsaWtlIGl0IGludHJvZHVjZXMgc29tZSBwb3RlbnRpYWxseSBpbnRlcmVzdGluZyBlZGdlIGNhc2VzLiBUaGUgcGF0Y2ggYWxzbyBpbmNsdWRlcyBhIGJ1bmNoIG9mIEJQRiBzZWxmLXRlc3RzLCB3aGljaCBpcyBnb29kIGZvciBiYXNlbGluZSBjb3ZlcmFnZSBidXQgSSBuZWVkIHRvIGlkZW50aWZ5IGFyZWFzIG5vdCB3ZWxsLWNvdmVyZWQgYnkgdGhvc2UgdGVzdHMuCgpJIG5lZWQgdG8gZGlnIGludG8gdGhlIGNvZGUgaW4gYGtlcm5lbC9icGYvdmVyaWZpZXIuY2AgdG8gdW5kZXJzdGFuZCB0aGUgZnVsbCBpbXBhY3Qgb2YgdGhlc2UgY2hhbmdlcy4gSSYjMzk7bSBmb2N1c2luZyBvbiB0aGUgbW9kaWZpY2F0aW9ucyB0byBgY2hlY2tfcHRyX3RvX2J0Zl9hY2Nlc3NgIGFuZCBgY2hlY2tfa2Z1bmNfYXJnc2AuIFRoZXkmIzM5O3JlIGRlZmluaXRlbHkgKnJlYWNoYWJsZSogZnVuY3Rpb25zIGFuZCByZXByZXNlbnQgb3BlcmF0aW9uYWwgY2hhbmdlcyBpbiB0aGUgdmVyaWZpZXIuIE5vdywgdGhlIHRyaWNrIGlzIHRvIGlkZW50aWZ5IHRoZSBiZXN0IGVudHJ5IHBvaW50cyBmb3IgZnV6emluZy4KCk15IG9iamVjdGl2ZSBpcyB0byBpZGVudGlmeSBnb29kIGZ1enppbmcgdGFyZ2V0cywgc28gbGV0JiMzOTtzIGRpZyBpbnRvIHRoZSBjb2RlIG1vcmUuIGBjaGVja19wdHJfdG9fYnRmX2FjY2Vzc2AgaXMgYSBzdGF0aWMgZnVuY3Rpb24sIHdoaWNoIG1lYW5zIGl0JiMzOTtzIGFuIGludGVybmFsIGhlbHBlciBmdW5jdGlvbi4gSSBrbm93IHRvIGxvb2sgZm9yIGV4dGVybmFsIGVudHJ5IHBvaW50cywgbm90IHRoZXNlIGlubGluZWQgaGVscGVyIGZ1bmN0aW9ucy4gSSBzZWUgaXQmIzM5O3MgY2FsbGVkIGZyb20gYGNoZWNrX21lbV9hY2Nlc3NgLCB3aGljaCBpcyBpdHNlbGYgYSBzdGF0aWMgaGVscGVyLiBTaW1pbGFybHksIGBjaGVja19rZnVuY19hcmdzYCBpcyBhIHN0YXRpYyBmdW5jdGlvbiB0aGF0IGdldHMgY2FsbGVkIGZyb20gYGNoZWNrX2tmdW5jX2NhbGxgLiBBaCwgdGhhdOKAmXMgcmlnaHQsIHRoZSBwcm9tcHQgc2F5cyB0byBwcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnRzIQoKQWxyaWdodCwgdGltZSB0byBzaGlmdCBnZWFycyBhbmQgZmluZCB0aGUgKmVudHJ5IHBvaW50cyogdGhhdCBldmVudHVhbGx5IGxlYWQgdG8gdGhlc2UgZnVuY3Rpb25zLiBJ4oCZbGwgc3RhcnQgYnkgbG9va2luZyBhdCBga2VybmVsL2JwZi92ZXJpZmllci5jYCBhbmQgZmlndXJpbmcgb3V0IHdoaWNoIGZ1bmN0aW9ucyAqY2FsbCogYGNoZWNrX3B0cl90b19idGZfYWNjZXNzYCBhbmQgYGNoZWNrX2tmdW5jX2FyZ3NgLiBJIGtub3cgdGhhdCBgYnBmX2NoZWNrYCBpcyB0aGUgbWFpbiBlbnRyeSBwb2ludCB0byB0aGUgdmVyaWZpZXIsIGJ1dCB3aGF0IGFyZSBpdHMgY2FsbGVycz8gVGltZSB0byBzZWFyY2ggZm9yIHRoZSAqY2FsbGVycyogb2YgdGhvc2UgbW9kaWZpZWQgZnVuY3Rpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDEyOjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NoZWNrX3B0cl90b19idGZfYWNjZXNzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi92ZXJpZmllci5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvdmVyaWZpZXIuYz01NzIxPXN0YXRpYyBib29sIHR5cGVfaXNfdHJ1c3RlZF9vcl9udWxsKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTU3MzItXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NTczMzpzdGF0aWMgaW50IGNoZWNrX3B0cl90b19idGZfYWNjZXNzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNTczNC1cdFx0XHRcdCAgIHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWdzLCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnLFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz02MDg0PXN0YXRpYyBpbnQgY2hlY2tfbWVtX2FjY2VzcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBpbnQgaW5zbl9pZHgsIHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcsIGFyZ25vX3QgYXJnbm8sXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTYyOTctXHRcdCAgICF0eXBlX21heV9iZV9udWxsKHJlZy1cdTAwM2V0eXBlKSkge1xua2VybmVsL2JwZi92ZXJpZmllci5jOjYyOTg6XHRcdGVyciA9IGNoZWNrX3B0cl90b19idGZfYWNjZXNzKGVudiwgcmVncywgcmVnLCBhcmdubywgb2ZmLCBzaXplLCB0LFxua2VybmVsL2JwZi92ZXJpZmllci5jLTYyOTktXHRcdFx0XHRcdCAgICAgIHZhbHVlX3JlZ25vKTtcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9Njc0Nz1zdGF0aWMgaW50IGNoZWNrX2hlbHBlcl9tZW1fYWNjZXNzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcsIGFyZ25vX3QgYXJnbm8sXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTY4MDQtXHRjYXNlIFBUUl9UT19CVEZfSUQ6XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NjgwNTpcdFx0cmV0dXJuIGNoZWNrX3B0cl90b19idGZfYWNjZXNzKGVudiwgcmVncywgcmVnLCBhcmdubywgMCxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy02ODA2LVx0XHRcdFx0XHQgICAgICAgYWNjZXNzX3NpemUsIGFjY2Vzc190eXBlLCAtMSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMTI6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjg5MwoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDczCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIGludGVyYWN0aW9uczoKCioqQW5hbHl6aW5nIE1lbW9yeSBBY2Nlc3MgYW5kIEtlcm5lbCBGdW5jdGlvbiBDYWxscyoqCgpPa2F5LCBzbyBJJiMzOTttIHNlZWluZyBhIGNoYWluIG9mIGNhbGxzIGhlcmUsIHNwZWNpZmljYWxseSByZWxhdGVkIHRvIHZlcmlmeWluZyBtZW1vcnkgYWNjZXNzIGFuZCBrZXJuZWwgZnVuY3Rpb24gY2FsbHMuIEl0IGxvb2tzIGxpa2UgYGNoZWNrX21lbV9hY2Nlc3NgLCB3aGljaCBpcyB0aGUgd29ya2hvcnNlIGZvciB2YWxpZGF0aW5nIG1lbW9yeSBhY2Nlc3MgaW5zdHJ1Y3Rpb25zIChjYWxsZWQgYnkgc29tZXRoaW5nIGxpa2UgYGRvX2NoZWNrYCksIHJlbGllcyBvbiBhIG1vcmUgZnVuZGFtZW50YWwgY2hlY2ssIGBjaGVja19wdHJfdG9fYnRmX2FjY2Vzc2AsIHZpYSBgY2hlY2tfbWVtX2FjY2Vzc2AgYW5kIGBjaGVja19oZWxwZXJfbWVtX2FjY2Vzc2AuIFNvLCBhbnkgdGltZSB3ZSYjMzk7cmUgY2hlY2tpbmcgYSBtZW1vcnkgYWNjZXNzLCB0aGVzZSBzZWNvbmRhcnkgY2hlY2tzIGFyZSB0cmlnZ2VyZWQgYnkgbXkgYW5hbHlzaXMgaW4gYGNoZWNrX21lbV9hY2Nlc3NgIGl0c2VsZi4KClRoZW4sIHRoZXJlJiMzOTtzIGBjaGVja19rZnVuY19jYWxsYCwgd2hpY2ggaXMgcmVzcG9uc2libGUgZm9yIHZlcmlmeWluZyBrZXJuZWwgZnVuY3Rpb24gY2FsbHMuIFRoaXMgb25lLCBpbiB0dXJuLCBzZWVtcyB0byBkZWxlZ2F0ZSB0aGUgYXJndW1lbnQgdmFsaWRhdGlvbiB0byBhIGZ1bmN0aW9uIG5hbWVkIGBjaGVja19rZnVuY19hcmdzYC4gVGhpcyBpbXBsaWVzIGEgY2xlYXIgc2VwYXJhdGlvbiBvZiBjb25jZXJuczogb25lIGZ1bmN0aW9uIHRvIHZhbGlkYXRlIHRoZSBjYWxsIGl0c2VsZiBhbmQgYW5vdGhlciB0byBkcmlsbCBkb3duIGludG8gdGhlIGFyZ3VtZW50cy4gTWFrZXMgc2Vuc2Ug4oCTIG1vZHVsYXJpdHkgaXMgYWx3YXlzIGdvb2QsIGFuZCB0aGlzIHByb2JhYmx5IGVuYWJsZXMgbW9yZSByb2J1c3QgdGVzdGluZyBhbmQgZWFzaWVyIG1vZGlmaWNhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAxMjo0MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjaGVja19rZnVuY19hcmdzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi92ZXJpZmllci5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvdmVyaWZpZXIuYz0xMTkxOD1zdGF0aWMgYm9vbCBjaGVja19jc3NfdGFza19pdGVyX2FsbG93bGlzdChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMTkzMy1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMTkzNDpzdGF0aWMgaW50IGNoZWNrX2tmdW5jX2FyZ3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9rZnVuY19jYWxsX2FyZ19tZXRhICptZXRhLFxua2VybmVsL2JwZi92ZXJpZmllci5jLTExOTM1LVx0XHRcdCAgICBpbnQgaW5zbl9pZHgpXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTEyOTE5PXN0YXRpYyBpbnQgY2hlY2tfa2Z1bmNfY2FsbChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmluc24sXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTEyOTk1LVx0LyogQ2hlY2sgdGhlIGFyZ3VtZW50cyAqL1xua2VybmVsL2JwZi92ZXJpZmllci5jOjEyOTk2Olx0ZXJyID0gY2hlY2tfa2Z1bmNfYXJncyhlbnYsIFx1MDAyNm1ldGEsIGluc25faWR4KTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMjk5Ny1cdGlmIChlcnIgXHUwMDNjIDApXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTEzMjgyLVx0XHRlbHNlXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTMyODM6XHRcdFx0Lyogc2NhbGFyLiBlbnN1cmVkIGJ5IGNoZWNrX2tmdW5jX2FyZ3MoKSAqL1xua2VybmVsL2JwZi92ZXJpZmllci5jLTEzMjg0LVx0XHRcdG1hcmtfYnRmX2Z1bmNfcmVnX3NpemUoZW52LCByZWdubywgdC1cdTAwM2VzaXplKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAxMjo0MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NTkzCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aG9zZSB0aG91Z2h0cyBmcm9tIGEgZmlyc3QtcGVyc29uLCBleHBlcnQgcGVyc3BlY3RpdmUsIGZvY3VzaW5nIG9uIHRoZSBpbnRlbnRpb24gYmVoaW5kIHRoZSBkZXNjcmliZWQgYWN0aW9uczoKCioqRGl2aW5nIGludG8gdGhlIEZ1bmN0aW9uIENhbGxzKioKCkFscmlnaHQsIEkmIzM5O20gZ29pbmcgdG8gc3RhcnQgYnkgZ2V0dGluZyBhIGhhbmRsZSBvbiB0aGUgY29udHJvbCBmbG93LiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgJiMzNDtMZXQmIzM5O3MgdHJhY2sgZG93biB0aGUgaW52b2NhdGlvbnMgb2YgYGNoZWNrX2tmdW5jX2NhbGxgIGFuZCBgY2hlY2tfbWVtX2FjY2Vzc2AuJiMzNDsgVGhlc2UgZnVuY3Rpb25zIGFyZSBjcnVjaWFsIGZvciB1bmRlcnN0YW5kaW5nIHRoZSBzZWN1cml0eSBtb2RlbCBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIGtlcm5lbCBmdW5jdGlvbiBjYWxscyBhbmQgbWVtb3J5IGFjY2Vzc2VzLCB3aGljaCBhcmUgdGhlIGZ1bmRhbWVudGFsIGJ1aWxkaW5nIGJsb2NrcyBvZiBhbG1vc3QgYW55IHN5c3RlbS4gQnkgdHJhY2luZyB0aGVpciBjYWxscywgSSBleHBlY3QgdG8gZ2V0IGEgc29saWQgZ3Jhc3Agb2Ygd2hlcmUgdGhlIHN5c3RlbSBpcyBsaWtlbHkgdmFsaWRhdGluZyB0aGVzZSBvcGVyYXRpb25zIGFuZCwgbW9zdCBpbXBvcnRhbnRseSwgdGhlIGNyaXRlcmlhIGl0JiMzOTtzIHVzaW5nIHRvIGRvIHNvLiBUaGlzIGlzIGxpa2VseSB3aGVyZSB0aGUgc3lzdGVtJiMzOTtzIHNlY3VyaXR5IGNvbnN0cmFpbnRzIGFyZSBhcHBsaWVkLiBVbmRlcnN0YW5kaW5nIHRob3NlIHNlY3VyaXR5IGNvbnN0cmFpbnRzIGlzIHdoYXQgbWF0dGVycy4gVGhpcyBleHBsb3JhdGlvbiBzaG91bGQgaGVscCBtZSBwYWludCBhIHBpY3R1cmUgb2YgaG93IHRoZSBzeXN0ZW0mIzM5O3Mgc2VjdXJpdHkgaXMgYXJjaGl0ZWN0ZWQgYXQgYSBsb3cgbGV2ZWwuIEl0JiMzOTtzIHRoZSBtb3N0IGVmZmVjdGl2ZSBzdGFydGluZyBwb2ludCB0byBiZWdpbiBhbnkgaW4tZGVwdGggc3lzdGVtIHNlY3VyaXR5IGFuYWx5c2lzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDEyOjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NoZWNrX2tmdW5jX2NhbGwmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvYnBmL3ZlcmlmaWVyLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi92ZXJpZmllci5jPTcyNDQ9c3RhdGljIGludCBwcm9jZXNzX2R5bnB0cl9mdW5jKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcsXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTczMTgtXHRcdFx0ICogRm9yIENPTlNUX1BUUl9UT19EWU5QVFIsIHJlZyBpcyBhbHJlYWR5IHNjcmF0Y2hlZCBieSBjaGVja19yZWdfYXJnXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NzMxOTpcdFx0XHQgKiBpbiBjaGVja19oZWxwZXJfY2FsbCBhbmQgbWFya19idGZfZnVuY19yZWdfc2l6ZSBpbiBjaGVja19rZnVuY19jYWxsLlxua2VybmVsL2JwZi92ZXJpZmllci5jLTczMjAtXHRcdFx0ICovXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTEyOTE3PXN0YXRpYyBpbnQgY2hlY2tfcmV0dXJuX2NvZGUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50IHJlZ25vLCBjb25zdCBjaGFyICpyZWdfbmFtZSk7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTI5MTgtXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTI5MTk6c3RhdGljIGludCBjaGVja19rZnVuY19jYWxsKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqaW5zbixcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMjkyMC1cdFx0XHQgICAgaW50ICppbnNuX2lkeF9wKVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xNzI0MD1zdGF0aWMgaW50IGRvX2NoZWNrX2luc24oc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgYm9vbCAqZG9fcHJpbnRfc3RhdGUpXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTE3MzA4LVx0XHRcdGlmIChpbnNuLVx1MDAzZXNyY19yZWcgPT0gQlBGX1BTRVVET19LRlVOQ19DQUxMKVxua2VybmVsL2JwZi92ZXJpZmllci5jOjE3MzA5Olx0XHRcdFx0cmV0dXJuIGNoZWNrX2tmdW5jX2NhbGwoZW52LCBpbnNuLCBcdTAwMjZlbnYtXHUwMDNlaW5zbl9pZHgpO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTE3MzEwLVx0XHRcdHJldHVybiBjaGVja19oZWxwZXJfY2FsbChlbnYsIGluc24sIFx1MDAyNmVudi1cdTAwM2VpbnNuX2lkeCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMTI6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODMxNwoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDY1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGFuYWx5emluZyB0aGlzIGNvZGU6CgoqKkFuYWx5emluZyB0aGUgZUJQRiBWZXJpZmljYXRpb24gRmxvdyoqCgpPa2F5LCBzbyBJJiMzOTttIGRpdmluZyBpbnRvIHRoaXMgZUJQRiB2ZXJpZmljYXRpb24gZmxvdywgYW5kIGl0IGxvb2tzIGxpa2UgYGRvX2NoZWNrX2luc25gIGlzIHRoZSB3b3JraG9yc2UgaGVyZS4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHRyYWNlIHRoZSBleGVjdXRpb24gcGF0aC4gSXQgc2VlbXMgbGlrZSBgZG9fY2hlY2tfaW5zbmAgaXMgY2FsbGluZyBgY2hlY2tfa2Z1bmNfY2FsbGAsIHdoaWNoIG1ha2VzIHNlbnNlOyBhIGNoZWNrIGluc3RydWN0aW9uIHByZXN1bWFibHkgbmVlZHMgdG8gdmFsaWRhdGUgYW55IGtmdW5jIGNhbGxzLiBJIG5lZWQgdG8ga2VlcCB0aGF0IGluIG1pbmQuCgpOb3csIHdoZXJlIGRvZXMgYGRvX2NoZWNrX2luc25gIGl0c2VsZiBjb21lIGZyb20/IEl0JiMzOTtzIGNhbGxlZCBieSBgZG9fY2hlY2tgLCBhbmQgYGRvX2NoZWNrYCBpcyBjYWxsZWQgYnkgYGJwZl9jaGVja2AuIEFoYSEgTG9va3MgbGlrZSBgYnBmX2NoZWNrYCBpcyB0aGUgbGlrZWx5IGVudHJ5IHBvaW50LiBUaGF0JiMzOTtzIHVzdWFsbHkgdGhlIHN0YXJ0aW5nIHBvaW50IGZvciB2YWxpZGF0aW9uLCBhbmQgZXZlcnl0aGluZyBmdW5uZWxzIGludG8gaXQuIEkmIzM5O2xsIG1ha2UgYGJwZl9jaGVja2AgbXkgcHJpbWFyeSBmb2N1cyB0byB1bmRlcnN0YW5kIHRoZSB3aG9sZSBwcm9jZXNzLiBJIHdpbGwgc3RhcnQgdGhlcmUgdG8gc2VlIGhvdyB0aGUgb3RoZXIgcGFydHMgZml0IGluLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAxMjo0MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDticGZfY2hlY2smIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvYnBmL3ZlcmlmaWVyLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi92ZXJpZmllci5jPTU1PXN0YXRpYyBib29sIGJwZl9nbG9iYWxfcGVyY3B1X21hX3NldDtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy01Ni1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo1NzovKiBicGZfY2hlY2soKSBpcyBhIHN0YXRpYyBjb2RlIGFuYWx5emVyIHRoYXQgd2Fsa3MgZUJQRiBwcm9ncmFtXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNTgtICogaW5zdHJ1Y3Rpb24gYnkgaW5zdHJ1Y3Rpb24gYW5kIHVwZGF0ZXMgcmVnaXN0ZXIvc3RhY2sgc3RhdGUuXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTExOTAzPXN0YXRpYyBpbnQgcHJvY2Vzc19rZl9hcmdfcHRyX3RvX3JidHJlZV9ub2RlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTExOTE0LSAqIExTTSBob29rcyBhbmQgaXRlcnMgKGJvdGggc2xlZXBhYmxlIGFuZCBub24tc2xlZXBhYmxlKSBhcmUgc2FmZS5cbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMTkxNTogKiBBbnkgc2xlZXBhYmxlIHByb2dzIGFyZSBhbHNvIHNhZmUgc2luY2UgYnBmX2NoZWNrX2F0dGFjaF90YXJnZXQoKSBlbmZvcmNlXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTE5MTYtICogdGhlbSBjYW4gb25seSBiZSBhdHRhY2hlZCB0byBzb21lIHNwZWNpZmljIGhvb2sgcG9pbnRzLlxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xODg5Nj1idGZfYXR0YWNoX2Z1bmNfcHJvdG8oc3RydWN0IGJwZl92ZXJpZmllcl9sb2cgKmxvZywgc3RydWN0IGJ0ZiAqYnRmLCB1MzIgZnVuY19pZClcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTg5MzAtXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTg5MzE6aW50IGJwZl9jaGVja19hdHRhY2hfdGFyZ2V0KHN0cnVjdCBicGZfdmVyaWZpZXJfbG9nICpsb2csXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTg5MzItXHRcdFx0ICAgIGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZyxcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTkzMzY9c3RhdGljIGludCBjaGVja19hdHRhY2hfYnRmX2lkKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTE5MzY2LVxua2VybmVsL2JwZi92ZXJpZmllci5jOjE5MzY3Olx0cmV0ID0gYnBmX2NoZWNrX2F0dGFjaF90YXJnZXQoXHUwMDI2ZW52LVx1MDAzZWxvZywgcHJvZywgdGd0X3Byb2csIGJ0Zl9pZCwgXHUwMDI2dGd0X2luZm8pO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTE5MzY4LVx0aWYgKHJldClcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTk0MzUtXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTk0MzY6aW50IGJwZl9jaGVja19hdHRhY2hfYnRmX2lkX211bHRpKHN0cnVjdCBidGYgKmJ0Ziwgc3RydWN0IGJwZl9wcm9nICpwcm9nLCB1MzIgYnRmX2lkLFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE5NDM3LVx0XHRcdFx0ICBzdHJ1Y3QgYnBmX2F0dGFjaF90YXJnZXRfaW5mbyAqdGd0X2luZm8pXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTE5NjMzPWludCBicGZfZml4dXBfa2Z1bmNfY2FsbChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmluc24sXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTE5Nzc2LVxua2VybmVsL2JwZi92ZXJpZmllci5jOjE5Nzc3OmludCBicGZfY2hlY2soc3RydWN0IGJwZl9wcm9nICoqcHJvZywgdW5pb24gYnBmX2F0dHIgKmF0dHIsIGJwZnB0cl90IHVhdHRyLFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE5Nzc4LVx0ICAgICAgc3RydWN0IGJwZl9sb2dfYXR0ciAqYXR0cl9sb2cpXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTE5NzkxLVx0LyogJiMzOTtzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiYjMzk7IGNhbiBiZSBnbG9iYWwsIGJ1dCBzaW5jZSBpdCYjMzk7cyBub3Qgc21hbGwsXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTk3OTI6XHQgKiBhbGxvY2F0ZS9mcmVlIGl0IGV2ZXJ5IHRpbWUgYnBmX2NoZWNrKCkgaXMgY2FsbGVkXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTk3OTMtXHQgKi9cbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTk4NjYtXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTk4Njc6XHRyZXQgPSBicGZfY2hlY2tfYnRmX2luZm9fZWFybHkoZW52LCBhdHRyLCB1YXR0cik7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTk4NjgtXHRpZiAocmV0IFx1MDAzYyAwKVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xOTg3OC1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxOTg3OTpcdHJldCA9IGJwZl9jaGVja19idGZfaW5mbyhlbnYsIGF0dHIsIHVhdHRyKTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xOTg4MC1cdGlmIChyZXQgXHUwMDNjIDApXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTE5ODkyLVxua2VybmVsL2JwZi92ZXJpZmllci5jOjE5ODkzOlx0cmV0ID0gYnBmX2NoZWNrX2NmZyhlbnYpO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTE5ODk0LVx0aWYgKHJldCBcdTAwM2MgMClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMTI6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTcxMgoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDEwOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBJbml0aWFsIEFzc2Vzc21lbnQgb2YgdGhlIEJQRiBWZXJpZmllciBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaXQmIzM5O3MgY2xlYXIgdGhhdCBgYnBmX2NoZWNrYCBpcyB0aGUgcHJpbWFyeSBlbnRyeSBwb2ludCBmb3IgdGhlIHZlcmlmaWVyLCBubyBkb3VidCBhYm91dCBpdC4gVGhlIG1lYXQgb2YgdGhlIGNoYW5nZSBzZWVtcyB0byBiZSBhcm91bmQgdGhlIGhhbmRsaW5nIG9mIGBQVFJfVE9fQlRGX0lEYCBhbmQgYE1FTV9BTExPQ2Agd2l0aGluIHRoZSBCUEYgdmVyaWZpZXIgbG9naWMuIE15IGV4cGVydCBzZW5zZXMgYXJlIHRpbmdsaW5nIOKAkyB0aGlzIGxvb2tzIGZ1bmN0aW9uYWxseSBzb3VuZCBhbmQgcmlwZSBmb3Igc29tZSBzZXJpb3VzIGZ1enppbmcuIE15IGZvY3VzIHdpbGwgYmUgc3F1YXJlbHkgb24gdGhhdCBgYnBmX2NoZWNrYCBzeW1ib2wuCgpOb3csIGJlZm9yZSBJIGRpZyBpbiB0b28gZGVlcCwgSSBuZWVkIHRvIGNoZWNrIGZvciBhbnkgc3BlY2lmaWMga2VybmVsIGNvbmZpZ3VyYXRpb25zIHRoYXQgbWlnaHQgYmUgcmVxdWlyZWQgdG8gdHJpZ2dlciBvciB0ZXN0IHRoaXMgbmV3IGJlaGF2aW9yLiBJIHNlZSB0aGF0IHRoZSBwYXRjaCBpdHNlbGYgaXMgbmVzdGxlZCB3aXRoaW4gYGtlcm5lbC9icGYvdmVyaWZpZXIuY2AsIHdoaWNoIG1ha2VzIHNlbnNlLiBJIGNhbiBhc3N1bWUgQlBGIGlzIGVuYWJsZWQgdmlhIGBDT05GSUdfQlBGX1NZU0NBTExgLCBzbyBJJiMzOTttIGdvb2QgdGhlcmUuIFRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBjb2RlIGFuZCBzZWUgd2hhdCBudWFuY2VzIGF3YWl0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAxMjo0MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgQlBGX1NZU0NBTEwmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9LY29uZmlnPTI1PW1lbnUgXCYjMzQ7QlBGIHN1YnN5c3RlbVwmIzM0O1xua2VybmVsL2JwZi9LY29uZmlnLTI2LVxua2VybmVsL2JwZi9LY29uZmlnOjI3OmNvbmZpZyBCUEZfU1lTQ0FMTFxua2VybmVsL2JwZi9LY29uZmlnLTI4LVx0Ym9vbCBcJiMzNDtFbmFibGUgYnBmKCkgc3lzdGVtIGNhbGxcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMTI6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTAxNDEKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAxMzQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBSZWZjb3VudGVkIEtwdHIgUGF0Y2gqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyB0b3VjaGluZyBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3JlZmNvdW50ZWRfa3B0ci5jYC4gVGhhdCYjMzk7cyBhIHNlbGZ0ZXN0LCB1c2luZyB0aG9zZSBgYnBmX3JlZmNvdW50X2FjcXVpcmVgIGFuZCBgYnBmX29ial9kcm9wYCBrZnVuY3MuIFNlZW1zIHByZXR0eSBzdHJhaWdodGZvcndhcmQsIHVzaW5nIHJlZmVyZW5jZSBjb3VudGluZyB3aXRoIEJQRi4gTGV0JiMzOTtzIG1ha2Ugc3VyZSB3ZSBoYXZlbiYjMzk7dCBtaXNzZWQgYW55IG90aGVyIGNvbmZpZyBkZXBlbmRlbmNpZXMuIEkmIzM5O20gYXNzdW1pbmcgYENPTkZJR19CUEZfU1lTQ0FMTGAgaXMgdGhlIGNyaXRpY2FsIG9uZSwgYnV0IGl0IG5ldmVyIGh1cnRzIHRvIGRvdWJsZS1jaGVjay4KCk5vdywgbGV0JiMzOTtzIGp1c3QgcXVpY2tseSByZS1mb2N1cyBvbiB0aGUga2V5IHN5bWJvbHMgaW52b2x2ZWQgaW4gdGhpcy4gYGJwZl9jaGVja2AgaXMgdGhlIHByaW1hcnkgZW50cnkgZm9yIHRoZSB2ZXJpZmllciwgYnV0IGFyZSB0aGVyZSBhbnkgb3RoZXIgZnVuY3Rpb25zIHRoYXQgbWlnaHQgYmUgcmVsZXZhbnQgdG8gdGhpcyBuZXcgYmVoYXZpb3I/IE1heWJlIGBicGZfcHJvZ19sb2FkYCBpcyBhbHNvIHdvcnRoIGEgbG9vaz8KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMTI6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnBmX3Byb2dfbG9hZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvYnBmX2xzbS5jPTI5Nj1CVEZfSUQoZnVuYywgYnBmX2xzbV9icGZfcHJvZylcbmtlcm5lbC9icGYvYnBmX2xzbS5jOjI5NzpCVEZfSUQoZnVuYywgYnBmX2xzbV9icGZfcHJvZ19sb2FkKVxua2VybmVsL2JwZi9icGZfbHNtLmMtMjk4LUJURl9JRChmdW5jLCBicGZfbHNtX2JwZl9wcm9nX2ZyZWUpXG4tLVxua2VybmVsL2JwZi9maXh1cHMuYz0xMDI4PXN0YXRpYyBpbnQgaml0X3N1YnByb2dzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXG4tLVxua2VybmVsL2JwZi9maXh1cHMuYy0xMjI4LVx0ICogcG9wdWxhdGUga2FsbHN5c20uIEJlZ2luIGF0IHRoZSBmaXJzdCBzdWJwcm9ncmFtLCBzaW5jZVxua2VybmVsL2JwZi9maXh1cHMuYzoxMjI5Olx0ICogYnBmX3Byb2dfbG9hZCB3aWxsIGFkZCB0aGUga2FsbHN5bXMgZm9yIHRoZSBtYWluIHByb2dyYW0uXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTEyMzAtXHQgKi9cbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYz0yNjkxPUVYUE9SVF9TWU1CT0xfR1BMKGJwZl9wcm9nX2dldF90eXBlX2Rldik7XG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmMtMjcwMC0gKlxua2VybmVsL2JwZi9zeXNjYWxsLmM6MjcwMTogKiBicGZfcHJvZ19sb2FkX2ZpeHVwX2F0dGFjaF90eXBlKCkgc2V0cyBleHBlY3RlZF9hdHRhY2hfdHlwZSBpbiBAYXR0ciBpZlxua2VybmVsL2JwZi9zeXNjYWxsLmMtMjcwMi0gKiBwcm9nIHR5cGUgcmVxdWlyZXMgaXQgYnV0IGhhcyBzb21lIGF0dGFjaCB0eXBlcyB0aGF0IGhhdmUgdG8gYmUgYmFja3dhcmRcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0yNzA0LSAqL1xua2VybmVsL2JwZi9zeXNjYWxsLmM6MjcwNTpzdGF0aWMgdm9pZCBicGZfcHJvZ19sb2FkX2ZpeHVwX2F0dGFjaF90eXBlKHVuaW9uIGJwZl9hdHRyICphdHRyKVxua2VybmVsL2JwZi9zeXNjYWxsLmMtMjcwNi17XG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmM9MjcyND1zdGF0aWMgaW50XG5rZXJuZWwvYnBmL3N5c2NhbGwuYzoyNzI1OmJwZl9wcm9nX2xvYWRfY2hlY2tfYXR0YWNoKGVudW0gYnBmX3Byb2dfdHlwZSBwcm9nX3R5cGUsXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0yNzI2LVx0XHRcdCAgIGVudW0gYnBmX2F0dGFjaF90eXBlIGV4cGVjdGVkX2F0dGFjaF90eXBlLFxuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jPTI5Njc9QlRGX0lEX0xJU1RfR0xPQkFMX1NJTkdMRShicGZfbXVsdGlfZnVuY19idGZfaWQsIGZ1bmMsIGJwZl9tdWx0aV9mdW5jKVxuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jLTI5NzEtXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzoyOTcyOnN0YXRpYyBpbnQgYnBmX3Byb2dfbG9hZCh1bmlvbiBicGZfYXR0ciAqYXR0ciwgYnBmcHRyX3QgdWF0dHIsIHN0cnVjdCBicGZfbG9nX2F0dHIgKmF0dHJfbG9nKVxua2VybmVsL2JwZi9zeXNjYWxsLmMtMjk3My17XG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmMtMjk5Ni1cbmtlcm5lbC9icGYvc3lzY2FsbC5jOjI5OTc6XHRicGZfcHJvZ19sb2FkX2ZpeHVwX2F0dGFjaF90eXBlKGF0dHIpO1xua2VybmVsL2JwZi9zeXNjYWxsLmMtMjk5OC1cbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0zMDg0LVxua2VybmVsL2JwZi9zeXNjYWxsLmM6MzA4NTpcdGlmIChicGZfcHJvZ19sb2FkX2NoZWNrX2F0dGFjaCh0eXBlLCBhdHRyLVx1MDAzZWV4cGVjdGVkX2F0dGFjaF90eXBlLFxua2VybmVsL2JwZi9zeXNjYWxsLmMtMzA4Ni1cdFx0XHRcdCAgICAgICBhdHRhY2hfYnRmLCBhdHRyLVx1MDAzZWF0dGFjaF9idGZfaWQsXG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmMtMzE5MS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jOjMxOTI6XHRlcnIgPSBzZWN1cml0eV9icGZfcHJvZ19sb2FkKHByb2csIGF0dHIsIHRva2VuLCB1YXR0ci5pc19rZXJuZWwpO1xua2VybmVsL2JwZi9zeXNjYWxsLmMtMzE5My1cdGlmIChlcnIpXG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmM9NjM1ND1zdGF0aWMgaW50IF9fc3lzX2JwZihlbnVtIGJwZl9jbWQgY21kLCBicGZwdHJfdCB1YXR0ciwgdW5zaWduZWQgaW50IHNpemUsXG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmMtNjQxNy1cdFx0XHRcdFx0c2l6ZV9jb21tb24pO1xua2VybmVsL2JwZi9zeXNjYWxsLmM6NjQxODpcdFx0ZXJyID0gZXJyID86IGJwZl9wcm9nX2xvYWQoXHUwMDI2YXR0ciwgdWF0dHIsIFx1MDAyNmF0dHJfbG9nKTtcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTY0MTktXHRcdGJyZWFrO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAxMjo0MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTUwNQoJCQkJCQkJb3V0cHV0OiAxMzUKCQkJCQkJCXRob3VnaHRzOiA5NTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRm9jdXNpbmcgb24gdGhlIEJQRiBWZXJpZmllcioqCgpPa2F5LCBzbyBJJiMzOTttIHRoaW5raW5nIGFib3V0IGhvdyB0byBhcHByb2FjaCB0aGlzIGZ1enppbmcgdGFzay4gYGJwZl9wcm9nX2xvYWRgIGlzIGEgZ29vZCBzdGFydGluZyBwb2ludCwgYnV0IEkgc2VlIHRoYXQgYGJwZl9jaGVja2AgaXMgY2FsbGVkIGJ5IGl0LCBhbmQgaXQmIzM5O3MgbG9va2luZyBsaWtlIHRoZSBtb3JlIHRhcmdldGVkIGVudHJ5IHBvaW50LiBIb3dldmVyLCBgYnBmX2NoZWNrYCBpcyB0aGUgbWFpbiB2ZXJpZmllciBmdW5jdGlvbiwgdGhlIGhvdCBwYXRoIGZvciBCUEYgZnV6emluZy4gVGhlIHByb21wdCBzYXlzIHRvIGF2b2lkIG92ZXJseSBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucy4gSWYgSSBmb2N1cyBvbiBpdCBJIHdpbGwgZm9jdXMgZnV6emluZyBvbiB0aGUgdmVyaWZpZXIuIFNvLCBpcyB0aGVyZSBhbnkgb3RoZXIgZW50cnkgcG9pbnQ/CgpUaGUgcGF0Y2ggbW9kaWZpZXMgYGNoZWNrX3B0cl90b19idGZfYWNjZXNzYCBhbmQgYGNoZWNrX2tmdW5jX2FyZ3NgLCBidXQgdGhvc2UgYXJlIHN0YXRpYyBmdW5jdGlvbnMsIHNvIHBvdGVudGlhbGx5IGlubGluZWQuIFRoZSBwcm9tcHQgcHJlZmVycyBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludHMuIEhtbW0sIHRoZSBwYXRjaCBzZWVtcyB0byBleGNsdXNpdmVseSB0b3VjaCB0aGUgc3RhdGljIGZ1bmN0aW9ucyB3aXRoaW4gdGhlIHZlcmlmaWVyLgoKRXZlbiBpZiBgYnBmX2NoZWNrYCBpcyBnZW5lcmljLCBpdCAqaXMqIHRoZSBlbnRyeSBwb2ludCBmb3IgdGhlIHZlcmlmaWVyLCBzbyBwcm92aWRpbmcgaXQgaXMgYmV0dGVyIHRoYW4gbm90aGluZywgb3IgZXZlbiBiZXR0ZXIgdGhhbiBndWVzc2luZyBzb21lIG90aGVyIHJlbGF0ZWQgYnV0IGxlc3MgY3JpdGljYWwgZnVuY3Rpb24uIFNvIGxldCYjMzk7cyBjaGVjaywgaW4gYGtlcm5lbC9icGYvdmVyaWZpZXIuY2A6IGBpbnQgYnBmX2NoZWNrKC4uLilgLCBpdCYjMzk7cyBnbG9iYWwgYW5kIGV4cG9ydGVkLiBUaGF0IHNldHRsZXMgaXQuIGBicGZfY2hlY2tgIGl0IGlzLgoKTGV0JiMzOTtzIHF1aWNrbHkgcmV2aWV3IHRoZSBjaGFuZ2VzIGZvciBjb250ZXh0LiBJIHNlZSBhIG5ldyBpbmxpbmUgZnVuY3Rpb24gYHR5cGVfaXNfdW50cnVzdGVkX3B0cl9hbGxvY19vYmpgLCBhbmQgdGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb25kaXRpb25zIGluIGBjaGVja19wdHJfdG9fYnRmX2FjY2Vzc2AgYW5kIGBjaGVja19rZnVuY19hcmdzYCByZWxhdGVkIHRvIGhhbmRsaW5nIGBQVFJfVE9fQlRGX0lEYCB0eXBlcy4gRXNzZW50aWFsbHksIGl0IGZpeGVzIGEgYnVnIHJlbGF0ZWQgdG8gdW50cnVzdGVkIGFsbG9jYXRlZCBvYmplY3RzIGJlaW5nIGluY29ycmVjdGx5IHJlamVjdGVkLiBUaGUgcGF0Y2ggaXMgbWFraW5nIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIEJQRiB2ZXJpZmllci4gVGhlIGNvbmZpZ3MgYXJlIGBCUEZfU1lTQ0FMTGAuIEkmIzM5O2xsIHVzZSBgYnBmX2NoZWNrYCBhcyB0aGUgZm9jdXMgc3ltYm9sLgoKTGV0JiMzOTtzIGNhbGwgc2V0LXJlc3VsdHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDEyOjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCUEZfU1lTQ0FMTCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2JwZl9jaGVjayYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgQlBGIHZlcmlmaWVyJiMzOTtzIGxvZ2ljIGZvciBoYW5kbGluZyBQVFJfVE9fQlRGX0lEIHdpdGggTUVNX0FMTE9DIGFuZCBQVFJfVU5UUlVTVEVEIGZsYWdzLCBzcGVjaWZpY2FsbHkgaW4gY2hlY2tfcHRyX3RvX2J0Zl9hY2Nlc3MgYW5kIGNoZWNrX2tmdW5jX2FyZ3MuIFRoZXNlIGNoYW5nZXMgYWZmZWN0IGhvdyB0aGUgdmVyaWZpZXIgdmFsaWRhdGVzIG1lbW9yeSBhY2Nlc3NlcyBhbmQga2Z1bmMgYXJndW1lbnRzIGZvciBhbGxvY2F0ZWQgb2JqZWN0cy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIEJQRiB2ZXJpZmllciB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YnBmX2NoZWNrJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBCUEYgdmVyaWZpZXImIzM5O3MgbG9naWMgZm9yIGhhbmRsaW5nIFBUUl9UT19CVEZfSUQgd2l0aCBNRU1fQUxMT0MgYW5kIFBUUl9VTlRSVVNURUQgZmxhZ3MsIHNwZWNpZmljYWxseSBpbiBjaGVja19wdHJfdG9fYnRmX2FjY2VzcyBhbmQgY2hlY2tfa2Z1bmNfYXJncy4gVGhlc2UgY2hhbmdlcyBhZmZlY3QgaG93IHRoZSB2ZXJpZmllciB2YWxpZGF0ZXMgbWVtb3J5IGFjY2Vzc2VzIGFuZCBrZnVuYyBhcmd1bWVudHMgZm9yIGFsbG9jYXRlZCBvYmplY3RzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgQlBGIHZlcmlmaWVyIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDEyOjQyOjE4LjA3NDc5MDgwM1oiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2NzEyMjg5NDY3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9TWVNDQUxMXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYnBmX2NoZWNrXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEJQRiB2ZXJpZmllcidzIGxvZ2ljIGZvciBoYW5kbGluZyBQVFJfVE9fQlRGX0lEIHdpdGggTUVNX0FMTE9DIGFuZCBQVFJfVU5UUlVTVEVEIGZsYWdzLCBzcGVjaWZpY2FsbHkgaW4gY2hlY2tfcHRyX3RvX2J0Zl9hY2Nlc3MgYW5kIGNoZWNrX2tmdW5jX2FyZ3MuIFRoZXNlIGNoYW5nZXMgYWZmZWN0IGhvdyB0aGUgdmVyaWZpZXIgdmFsaWRhdGVzIG1lbW9yeSBhY2Nlc3NlcyBhbmQga2Z1bmMgYXJndW1lbnRzIGZvciBhbGxvY2F0ZWQgb2JqZWN0cy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIEJQRiB2ZXJpZmllciB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDEyOjQyOjE4LjA3NDc5NjY1M1oiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDMxNjkxMDgzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgMzkyZjQ4MTdjYjIxYTM4YWQ1NGRjNzNkYTc2ZWNkOTUyOGVlZWJhMFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgTW9uIEF1ZyAzIDEyOjQyOjE3IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmggYi9pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oXFxuaW5kZXggMzlhODUxZTY5MGVjNC4uNzAxNGQ2MmZlM2QxYyAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaFxcbkBAIC0xMzA3LDcgKzEzMDcsMTYgQEAgc3RhdGljIGlubGluZSBib29sIGJwZl90eXBlX2hhc191bnNhZmVfbW9kaWZpZXJzKHUzMiB0eXBlKVxcbiBcXG4gc3RhdGljIGlubGluZSBib29sIHR5cGVfaXNfcHRyX2FsbG9jX29iaih1MzIgdHlwZSlcXG4ge1xcbi1cXHRyZXR1cm4gYmFzZV90eXBlKHR5cGUpID09IFBUUl9UT19CVEZfSUQgXFx1MDAyNlxcdTAwMjYgdHlwZV9mbGFnKHR5cGUpIFxcdTAwMjYgTUVNX0FMTE9DO1xcbitcXHRyZXR1cm4gYmFzZV90eXBlKHR5cGUpID09IFBUUl9UT19CVEZfSUQgXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgICAgIHR5cGVfZmxhZyh0eXBlKSBcXHUwMDI2IE1FTV9BTExPQyBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAgICAgISh0eXBlX2ZsYWcodHlwZSkgXFx1MDAyNiBQVFJfVU5UUlVTVEVEKTtcXG4rfVxcbitcXG4rc3RhdGljIGlubGluZSBib29sIHR5cGVfaXNfdW50cnVzdGVkX3B0cl9hbGxvY19vYmoodTMyIHR5cGUpXFxuK3tcXG4rXFx0cmV0dXJuIGJhc2VfdHlwZSh0eXBlKSA9PSBQVFJfVE9fQlRGX0lEIFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICAgICB0eXBlX2ZsYWcodHlwZSkgXFx1MDAyNiBNRU1fQUxMT0MgXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgICAgIHR5cGVfZmxhZyh0eXBlKSBcXHUwMDI2IFBUUl9VTlRSVVNURUQ7XFxuIH1cXG4gXFxuIHN0YXRpYyBpbmxpbmUgYm9vbCB0eXBlX2lzX25vbl9vd25pbmdfcmVmKHUzMiB0eXBlKVxcbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL3ZlcmlmaWVyLmMgYi9rZXJuZWwvYnBmL3ZlcmlmaWVyLmNcXG5pbmRleCBmZGM1ZmJiMWY3OGNhLi44YjM1YzYzNzgwNzk4IDEwMDY0NFxcbi0tLSBhL2tlcm5lbC9icGYvdmVyaWZpZXIuY1xcbisrKyBiL2tlcm5lbC9icGYvdmVyaWZpZXIuY1xcbkBAIC01ODA5LDcgKzU4MDksMTMgQEAgc3RhdGljIGludCBjaGVja19wdHJfdG9fYnRmX2FjY2VzcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbiBcXHRcXHRcXHRyZXR1cm4gLUVBQ0NFUztcXG4gXFx0XFx0fVxcbiBcXG4tXFx0XFx0aWYgKHR5cGVfaXNfYWxsb2MocmVnLVxcdTAwM2V0eXBlKSBcXHUwMDI2XFx1MDAyNiAhdHlwZV9pc19ub25fb3duaW5nX3JlZihyZWctXFx1MDAzZXR5cGUpIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdC8qXFxuK1xcdFxcdCAqIFNraXAgdGhpcyByZWZlcmVuY2VkLUlEIHNhbml0eSBjaGVjayBmb3IgdW50cnVzdGVkIGFsbG9jYXRlZCBvYmplY3RzO1xcbitcXHRcXHQgKiB0aGUgYWNjZXNzIGNoZWNrIGFib3ZlIGFscmVhZHkgcmVqZWN0cyB3cml0ZXMgdGhyb3VnaCB0aGVtLlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0aWYgKHR5cGVfaXNfYWxsb2MocmVnLVxcdTAwM2V0eXBlKSBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHQgICAgIXR5cGVfaXNfdW50cnVzdGVkX3B0cl9hbGxvY19vYmoocmVnLVxcdTAwM2V0eXBlKSBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHQgICAgIXR5cGVfaXNfbm9uX293bmluZ19yZWYocmVnLVxcdTAwM2V0eXBlKSBcXHUwMDI2XFx1MDAyNlxcbiBcXHRcXHQgICAgIShyZWctXFx1MDAzZXR5cGUgXFx1MDAyNiBNRU1fUkNVKSBcXHUwMDI2XFx1MDAyNiAhcmVnX2lzX3JlZmVyZW5jZWQoZW52LCByZWcpKSB7XFxuIFxcdFxcdFxcdHZlcmlmaWVyX2J1ZyhlbnYsIFxcXCJhbGxvY2F0ZWQgb2JqZWN0IG11c3QgaGF2ZSBhIHJlZmVyZW5jZWQgaWRcXFwiKTtcXG4gXFx0XFx0XFx0cmV0dXJuIC1FRkFVTFQ7XFxuQEAgLTEyNDE5LDcgKzEyNDI1LDcgQEAgc3RhdGljIGludCBjaGVja19rZnVuY19hcmdzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfa2Z1bmNfY2FsbF9cXG4gXFx0XFx0XFx0XFx0XFx0cmVnX2FyZ19uYW1lKGVudiwgYXJnbm8pKTtcXG4gXFx0XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIFxcdFxcdFxcdH1cXG4tXFx0XFx0XFx0aWYgKCF0eXBlX2lzX25vbl9vd25pbmdfcmVmKHJlZy1cXHUwMDNldHlwZSkpXFxuK1xcdFxcdFxcdGlmICghdHlwZV9pc19ub25fb3duaW5nX3JlZihyZWctXFx1MDAzZXR5cGUpIFxcdTAwMjZcXHUwMDI2IHJlZ19pc19yZWZlcmVuY2VkKGVudiwgcmVnKSlcXG4gXFx0XFx0XFx0XFx0bWV0YS1cXHUwMDNlYXJnX293bmluZ19yZWYgPSB0cnVlO1xcbiBcXG4gXFx0XFx0XFx0cmVjID0gcmVnX2J0Zl9yZWNvcmQocmVnKTtcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3JlZmNvdW50ZWRfa3B0ci5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3JlZmNvdW50ZWRfa3B0ci5jXFxuaW5kZXggNjE5MDZmNDgwMjVjYy4uYjcwYmU4YjUyZmY4MCAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvcmVmY291bnRlZF9rcHRyLmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvcmVmY291bnRlZF9rcHRyLmNcXG5AQCAtMjMsNiArMjMsMTUgQEAgc3RydWN0IG1hcF92YWx1ZSB7XFxuIFxcdHN0cnVjdCBub2RlX2RhdGEgX19rcHRyICpub2RlO1xcbiB9O1xcbiBcXG4rc3RydWN0IG5vZGVfcmVmY291bnRfb25seSB7XFxuK1xcdGxvbmcga2V5O1xcbitcXHRzdHJ1Y3QgYnBmX3JlZmNvdW50IHJlZmNvdW50O1xcbit9O1xcbitcXG4rc3RydWN0IG1hcF92YWx1ZV9yZWZjb3VudF9vbmx5IHtcXG4rXFx0c3RydWN0IG5vZGVfcmVmY291bnRfb25seSBfX2twdHIgKm5vZGU7XFxuK307XFxuK1xcbiBzdHJ1Y3Qge1xcbiBcXHRfX3VpbnQodHlwZSwgQlBGX01BUF9UWVBFX0FSUkFZKTtcXG4gXFx0X190eXBlKGtleSwgaW50KTtcXG5AQCAtMzAsNiArMzksMTMgQEAgc3RydWN0IHtcXG4gXFx0X191aW50KG1heF9lbnRyaWVzLCAyKTtcXG4gfSBzdGFzaGVkX25vZGVzIFNFQyhcXFwiLm1hcHNcXFwiKTtcXG4gXFxuK3N0cnVjdCB7XFxuK1xcdF9fdWludCh0eXBlLCBCUEZfTUFQX1RZUEVfQVJSQVkpO1xcbitcXHRfX3R5cGUoa2V5LCBpbnQpO1xcbitcXHRfX3R5cGUodmFsdWUsIHN0cnVjdCBtYXBfdmFsdWVfcmVmY291bnRfb25seSk7XFxuK1xcdF9fdWludChtYXhfZW50cmllcywgMSk7XFxuK30gc3Rhc2hlZF9yZWZjb3VudF9vbmx5IFNFQyhcXFwiLm1hcHNcXFwiKTtcXG4rXFxuIHN0cnVjdCBub2RlX2FjcXVpcmUge1xcbiBcXHRsb25nIGtleTtcXG4gXFx0bG9uZyBkYXRhO1xcbkBAIC04MzIsNiArODQ4LDE1MSBAQCBsb25nIHJidHJlZV9yZWZjb3VudGVkX25vZGVfcmVmX2VzY2FwZXNfb3duaW5nX2lucHV0KHZvaWQgKmN0eClcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuK1NFQyhcXFwidGNcXFwiKVxcbitfX3N1Y2Nlc3NcXG4rbG9uZyByZWZjb3VudF9hY3F1aXJlX293bmluZ19pbnB1dF9ub19udWxsX2NoZWNrKHZvaWQgKmN0eClcXG4re1xcbitcXHRzdHJ1Y3Qgbm9kZV9yZWZjb3VudF9vbmx5ICpuLCAqbTtcXG4rXFxuK1xcdG4gPSBicGZfb2JqX25ldyh0eXBlb2YoKm4pKTtcXG4rXFx0aWYgKCFuKVxcbitcXHRcXHRyZXR1cm4gMTtcXG4rXFxuK1xcdG0gPSBicGZfcmVmY291bnRfYWNxdWlyZShuKTtcXG4rXFx0YnBmX29ial9kcm9wKG0pO1xcbitcXHRicGZfb2JqX2Ryb3Aobik7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rU0VDKFxcXCJ0Y1xcXCIpXFxuK19fc3VjY2Vzc1xcbitsb25nIHJlZmNvdW50X2FjcXVpcmVfcmN1X21hcF9rcHRyX251bGxfY2hlY2tlZCh2b2lkICpjdHgpXFxuK3tcXG4rXFx0c3RydWN0IG1hcF92YWx1ZV9yZWZjb3VudF9vbmx5ICptYXB2YWw7XFxuK1xcdHN0cnVjdCBub2RlX3JlZmNvdW50X29ubHkgKm4sICptO1xcbitcXHRpbnQgaWR4ID0gMDtcXG4rXFxuK1xcdG1hcHZhbCA9IGJwZl9tYXBfbG9va3VwX2VsZW0oXFx1MDAyNnN0YXNoZWRfcmVmY291bnRfb25seSwgXFx1MDAyNmlkeCk7XFxuK1xcdGlmICghbWFwdmFsKVxcbitcXHRcXHRyZXR1cm4gMTtcXG4rXFxuK1xcdGJwZl9yY3VfcmVhZF9sb2NrKCk7XFxuK1xcdG4gPSBtYXB2YWwtXFx1MDAzZW5vZGU7XFxuK1xcdGlmICghbikge1xcbitcXHRcXHRicGZfcmN1X3JlYWRfdW5sb2NrKCk7XFxuK1xcdFxcdHJldHVybiAyO1xcbitcXHR9XFxuK1xcdG0gPSBicGZfcmVmY291bnRfYWNxdWlyZShuKTtcXG4rXFx0YnBmX3JjdV9yZWFkX3VubG9jaygpO1xcbitcXG4rXFx0aWYgKCFtKVxcbitcXHRcXHRyZXR1cm4gMztcXG4rXFx0YnBmX29ial9kcm9wKG0pO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK1NFQyhcXFwiP3RjXFxcIilcXG4rX19zdWNjZXNzXFxuK2xvbmcgbWFwX2twdHJfcmVhZF9hZnRlcl9yY3VfdW5sb2NrKHZvaWQgKmN0eClcXG4re1xcbitcXHRzdHJ1Y3QgbWFwX3ZhbHVlX3JlZmNvdW50X29ubHkgKm1hcHZhbDtcXG4rXFx0c3RydWN0IG5vZGVfcmVmY291bnRfb25seSAqbjtcXG4rXFx0aW50IGlkeCA9IDA7XFxuK1xcbitcXHRtYXB2YWwgPSBicGZfbWFwX2xvb2t1cF9lbGVtKFxcdTAwMjZzdGFzaGVkX3JlZmNvdW50X29ubHksIFxcdTAwMjZpZHgpO1xcbitcXHRpZiAoIW1hcHZhbClcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbitcXHRicGZfcmN1X3JlYWRfbG9jaygpO1xcbitcXHRuID0gbWFwdmFsLVxcdTAwM2Vub2RlO1xcbitcXHRpZiAoIW4pIHtcXG4rXFx0XFx0YnBmX3JjdV9yZWFkX3VubG9jaygpO1xcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFx0fVxcbitcXHRicGZfcmN1X3JlYWRfdW5sb2NrKCk7XFxuK1xcbitcXHRyZXR1cm4gbi1cXHUwMDNla2V5O1xcbit9XFxuK1xcbitTRUMoXFxcIj90Y1xcXCIpXFxuK19fZmFpbHVyZSBfX21zZyhcXFwiaXMgbmVpdGhlciBvd25pbmcgb3Igbm9uLW93bmluZyByZWZcXFwiKVxcbitsb25nIHJlZmNvdW50X2FjcXVpcmVfZ3JhcGhfYWZ0ZXJfcmN1X3VubG9jayh2b2lkICpjdHgpXFxuK3tcXG4rXFx0c3RydWN0IG1hcF92YWx1ZSAqbWFwdmFsO1xcbitcXHRzdHJ1Y3Qgbm9kZV9kYXRhICpuLCAqbTtcXG4rXFx0aW50IGlkeCA9IDA7XFxuK1xcbitcXHRtYXB2YWwgPSBicGZfbWFwX2xvb2t1cF9lbGVtKFxcdTAwMjZzdGFzaGVkX25vZGVzLCBcXHUwMDI2aWR4KTtcXG4rXFx0aWYgKCFtYXB2YWwpXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4rXFx0YnBmX3JjdV9yZWFkX2xvY2soKTtcXG4rXFx0biA9IG1hcHZhbC1cXHUwMDNlbm9kZTtcXG4rXFx0aWYgKCFuKSB7XFxuK1xcdFxcdGJwZl9yY3VfcmVhZF91bmxvY2soKTtcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcdH1cXG4rXFx0YnBmX3JjdV9yZWFkX3VubG9jaygpO1xcbitcXG4rXFx0bSA9IGJwZl9yZWZjb3VudF9hY3F1aXJlKG4pO1xcbitcXHRpZiAobSlcXG4rXFx0XFx0YnBmX29ial9kcm9wKG0pO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK1NFQyhcXFwiP3RjXFxcIilcXG4rX19mYWlsdXJlIF9fbXNnKFxcXCJvbmx5IHJlYWQgaXMgc3VwcG9ydGVkXFxcIilcXG4rbG9uZyBncmFwaF9tYXBfa3B0cl93cml0ZV9hZnRlcl9yY3VfdW5sb2NrKHZvaWQgKmN0eClcXG4re1xcbitcXHRzdHJ1Y3QgbWFwX3ZhbHVlICptYXB2YWw7XFxuK1xcdHN0cnVjdCBub2RlX2RhdGEgKm47XFxuK1xcdGludCBpZHggPSAwO1xcbitcXG4rXFx0bWFwdmFsID0gYnBmX21hcF9sb29rdXBfZWxlbShcXHUwMDI2c3Rhc2hlZF9ub2RlcywgXFx1MDAyNmlkeCk7XFxuK1xcdGlmICghbWFwdmFsKVxcbitcXHRcXHRyZXR1cm4gMTtcXG4rXFxuK1xcdGJwZl9yY3VfcmVhZF9sb2NrKCk7XFxuK1xcdG4gPSBtYXB2YWwtXFx1MDAzZW5vZGU7XFxuK1xcdGlmICghbikge1xcbitcXHRcXHRicGZfcmN1X3JlYWRfdW5sb2NrKCk7XFxuK1xcdFxcdHJldHVybiAyO1xcbitcXHR9XFxuK1xcdGJwZl9yY3VfcmVhZF91bmxvY2soKTtcXG4rXFxuK1xcdG4tXFx1MDAzZWtleSA9IDE7XFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitTRUMoXFxcIj90Y1xcXCIpXFxuK19fc3VjY2Vzc1xcbitsb25nIGdyYXBoX21hcF9rcHRyX3JlYWRfYWZ0ZXJfc3Bpbl91bmxvY2sodm9pZCAqY3R4KVxcbit7XFxuK1xcdHN0cnVjdCBtYXBfdmFsdWUgKm1hcHZhbDtcXG4rXFx0c3RydWN0IG5vZGVfZGF0YSAqbjtcXG4rXFx0aW50IGlkeCA9IDA7XFxuK1xcbitcXHRtYXB2YWwgPSBicGZfbWFwX2xvb2t1cF9lbGVtKFxcdTAwMjZzdGFzaGVkX25vZGVzLCBcXHUwMDI2aWR4KTtcXG4rXFx0aWYgKCFtYXB2YWwpXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4rXFx0YnBmX3JjdV9yZWFkX2xvY2soKTtcXG4rXFx0biA9IG1hcHZhbC1cXHUwMDNlbm9kZTtcXG4rXFx0aWYgKCFuKSB7XFxuK1xcdFxcdGJwZl9yY3VfcmVhZF91bmxvY2soKTtcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcdH1cXG4rXFx0YnBmX3JjdV9yZWFkX3VubG9jaygpO1xcbitcXG4rXFx0YnBmX3NwaW5fbG9jayhcXHUwMDI2bG9jayk7XFxuK1xcdGJwZl9zcGluX3VubG9jayhcXHUwMDI2bG9jayk7XFxuK1xcbitcXHRyZXR1cm4gbi1cXHUwMDNla2V5O1xcbit9XFxuK1xcbiBzdGF0aWMgbG9uZyBfX3N0YXNoX21hcF9lbXB0eV94Y2hnKHN0cnVjdCBub2RlX2RhdGEgKm4sIGludCBpZHgpXFxuIHtcXG4gXFx0c3RydWN0IG1hcF92YWx1ZSAqbWFwdmFsID0gYnBmX21hcF9sb29rdXBfZWxlbShcXHUwMDI2c3Rhc2hlZF9ub2RlcywgXFx1MDAyNmlkeCk7XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9yZWZjb3VudGVkX2twdHJfZmFpbC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3JlZmNvdW50ZWRfa3B0cl9mYWlsLmNcXG5pbmRleCAwMjRlZjJhYWUyMDA4Li4zNDA4ZjY4YWQ0NDRkIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9yZWZjb3VudGVkX2twdHJfZmFpbC5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3JlZmNvdW50ZWRfa3B0cl9mYWlsLmNcXG5AQCAtMTksNiArMTksMTUgQEAgc3RydWN0IG5vZGVfcmVmY291bnRlZCB7XFxuIFxcdHN0cnVjdCBicGZfcmVmY291bnQgcmVmY291bnQ7XFxuIH07XFxuIFxcbitzdHJ1Y3Qgbm9kZV9yZWZjb3VudF9vbmx5IHtcXG4rXFx0bG9uZyBrZXk7XFxuK1xcdHN0cnVjdCBicGZfcmVmY291bnQgcmVmY291bnQ7XFxuK307XFxuK1xcbitzdHJ1Y3QgbWFwX3ZhbHVlX3JlZmNvdW50X29ubHkge1xcbitcXHRzdHJ1Y3Qgbm9kZV9yZWZjb3VudF9vbmx5IF9fa3B0ciAqbm9kZTtcXG4rfTtcXG4rXFxuIGV4dGVybiB2b2lkIGJwZl9yY3VfcmVhZF9sb2NrKHZvaWQpIF9fa3N5bTtcXG4gZXh0ZXJuIHZvaWQgYnBmX3JjdV9yZWFkX3VubG9jayh2b2lkKSBfX2tzeW07XFxuIFxcbkBAIC0yOCw2ICszNywxMyBAQCBwcml2YXRlKEEpIHN0cnVjdCBicGZfcmJfcm9vdCBncm9vdCBfX2NvbnRhaW5zKG5vZGVfYWNxdWlyZSwgbm9kZSk7XFxuIHByaXZhdGUoQikgc3RydWN0IGJwZl9zcGluX2xvY2sgbG9jaztcXG4gcHJpdmF0ZShCKSBzdHJ1Y3QgYnBmX2xpc3RfaGVhZCBoZWFkIF9fY29udGFpbnMobm9kZV9yZWZjb3VudGVkLCBsaXN0KTtcXG4gXFxuK3N0cnVjdCB7XFxuK1xcdF9fdWludCh0eXBlLCBCUEZfTUFQX1RZUEVfQVJSQVkpO1xcbitcXHRfX3R5cGUoa2V5LCBpbnQpO1xcbitcXHRfX3R5cGUodmFsdWUsIHN0cnVjdCBtYXBfdmFsdWVfcmVmY291bnRfb25seSk7XFxuK1xcdF9fdWludChtYXhfZW50cmllcywgMSk7XFxuK30gc3Rhc2hlZF9yZWZjb3VudF9vbmx5IFNFQyhcXFwiLm1hcHNcXFwiKTtcXG4rXFxuIHN0YXRpYyBib29sIGxlc3Moc3RydWN0IGJwZl9yYl9ub2RlICphLCBjb25zdCBzdHJ1Y3QgYnBmX3JiX25vZGUgKmIpXFxuIHtcXG4gXFx0c3RydWN0IG5vZGVfYWNxdWlyZSAqbm9kZV9hO1xcbkBAIC04MCw2ICs5Niw2NCBAQCBsb25nIHJlZmNvdW50X2FjcXVpcmVfbWF5YmVfbnVsbCh2b2lkICpjdHgpXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbitTRUMoXFxcIj90Y1xcXCIpXFxuK19fZmFpbHVyZSBfX21zZyhcXFwiUG9zc2libHkgTlVMTCBwb2ludGVyIHBhc3NlZCB0byB0cnVzdGVkIFIxXFxcIilcXG4rbG9uZyByZWZjb3VudF9hY3F1aXJlX3JjdV9tYXBfa3B0cl91bmNoZWNrZWRfZHJvcCh2b2lkICpjdHgpXFxuK3tcXG4rXFx0c3RydWN0IG1hcF92YWx1ZV9yZWZjb3VudF9vbmx5ICptYXB2YWw7XFxuK1xcdHN0cnVjdCBub2RlX3JlZmNvdW50X29ubHkgKnRtcCwgKm4sICptO1xcbitcXHRpbnQgaWR4ID0gMDtcXG4rXFxuK1xcdHRtcCA9IGJwZl9vYmpfbmV3KHR5cGVvZigqdG1wKSk7XFxuK1xcdGlmICghdG1wKVxcbitcXHRcXHRyZXR1cm4gMztcXG4rXFx0YnBmX29ial9kcm9wKHRtcCk7XFxuK1xcbitcXHRtYXB2YWwgPSBicGZfbWFwX2xvb2t1cF9lbGVtKFxcdTAwMjZzdGFzaGVkX3JlZmNvdW50X29ubHksIFxcdTAwMjZpZHgpO1xcbitcXHRpZiAoIW1hcHZhbClcXG4rXFx0XFx0cmV0dXJuIDE7XFxuK1xcbitcXHRicGZfcmN1X3JlYWRfbG9jaygpO1xcbitcXHRuID0gbWFwdmFsLVxcdTAwM2Vub2RlO1xcbitcXHRpZiAoIW4pIHtcXG4rXFx0XFx0YnBmX3JjdV9yZWFkX3VubG9jaygpO1xcbitcXHRcXHRyZXR1cm4gMjtcXG4rXFx0fVxcbitcXHRtID0gYnBmX3JlZmNvdW50X2FjcXVpcmUobik7XFxuK1xcdGJwZl9yY3VfcmVhZF91bmxvY2soKTtcXG4rXFxuK1xcdGJwZl9vYmpfZHJvcChtKTtcXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitTRUMoXFxcIj90Y1xcXCIpXFxuK19fZmFpbHVyZSBfX21zZyhcXFwiaXMgbmVpdGhlciBvd25pbmcgb3Igbm9uLW93bmluZyByZWZcXFwiKVxcbitsb25nIHJlZmNvdW50X2FjcXVpcmVfYWZ0ZXJfcmN1X3VubG9jayh2b2lkICpjdHgpXFxuK3tcXG4rXFx0c3RydWN0IG1hcF92YWx1ZV9yZWZjb3VudF9vbmx5ICptYXB2YWw7XFxuK1xcdHN0cnVjdCBub2RlX3JlZmNvdW50X29ubHkgKm4sICptO1xcbitcXHRpbnQgaWR4ID0gMDtcXG4rXFxuK1xcdG1hcHZhbCA9IGJwZl9tYXBfbG9va3VwX2VsZW0oXFx1MDAyNnN0YXNoZWRfcmVmY291bnRfb25seSwgXFx1MDAyNmlkeCk7XFxuK1xcdGlmICghbWFwdmFsKVxcbitcXHRcXHRyZXR1cm4gMTtcXG4rXFxuK1xcdGJwZl9yY3VfcmVhZF9sb2NrKCk7XFxuK1xcdG4gPSBtYXB2YWwtXFx1MDAzZW5vZGU7XFxuK1xcdGlmICghbikge1xcbitcXHRcXHRicGZfcmN1X3JlYWRfdW5sb2NrKCk7XFxuK1xcdFxcdHJldHVybiAyO1xcbitcXHR9XFxuK1xcdGJwZl9yY3VfcmVhZF91bmxvY2soKTtcXG4rXFxuK1xcdG0gPSBicGZfcmVmY291bnRfYWNxdWlyZShuKTtcXG4rXFx0aWYgKG0pXFxuK1xcdFxcdGJwZl9vYmpfZHJvcChtKTtcXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbiBTRUMoXFxcIj90Y1xcXCIpXFxuIF9fZmFpbHVyZSBfX21zZyhcXFwiVW5yZWxlYXNlZCByZWZlcmVuY2UgaWQ9MyBhbGxvY19pbnNuPXt7WzAtOV0rfX1cXFwiKVxcbiBsb25nIHJidHJlZV9yZWZjb3VudGVkX25vZGVfcmVmX2VzY2FwZXNfb3duaW5nX2lucHV0KHZvaWQgKmN0eClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMTI6NDI6MTguNTA3MjUzNzE3WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6NDYyNzk4MDI4OTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX1NZU0NBTExcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJicGZfY2hlY2tcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgQlBGIHZlcmlmaWVyJ3MgbG9naWMgZm9yIGhhbmRsaW5nIFBUUl9UT19CVEZfSUQgd2l0aCBNRU1fQUxMT0MgYW5kIFBUUl9VTlRSVVNURUQgZmxhZ3MsIHNwZWNpZmljYWxseSBpbiBjaGVja19wdHJfdG9fYnRmX2FjY2VzcyBhbmQgY2hlY2tfa2Z1bmNfYXJncy4gVGhlc2UgY2hhbmdlcyBhZmZlY3QgaG93IHRoZSB2ZXJpZmllciB2YWxpZGF0ZXMgbWVtb3J5IGFjY2Vzc2VzIGFuZCBrZnVuYyBhcmd1bWVudHMgZm9yIGFsbG9jYXRlZCBvYmplY3RzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgQlBGIHZlcmlmaWVyIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgMzkyZjQ4MTdjYjIxYTM4YWQ1NGRjNzNkYTc2ZWNkOTUyOGVlZWJhMFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gQXVnIDMgMTI6NDI6MTcgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oIGIvaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaFxuaW5kZXggMzlhODUxZTY5MGVjNC4uNzAxNGQ2MmZlM2QxYyAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmhcbisrKyBiL2luY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmhcbkBAIC0xMzA3LDcgKzEzMDcsMTYgQEAgc3RhdGljIGlubGluZSBib29sIGJwZl90eXBlX2hhc191bnNhZmVfbW9kaWZpZXJzKHUzMiB0eXBlKVxuIFxuIHN0YXRpYyBpbmxpbmUgYm9vbCB0eXBlX2lzX3B0cl9hbGxvY19vYmoodTMyIHR5cGUpXG4ge1xuLVx0cmV0dXJuIGJhc2VfdHlwZSh0eXBlKSA9PSBQVFJfVE9fQlRGX0lEIFx1MDAyNlx1MDAyNiB0eXBlX2ZsYWcodHlwZSkgXHUwMDI2IE1FTV9BTExPQztcbitcdHJldHVybiBiYXNlX3R5cGUodHlwZSkgPT0gUFRSX1RPX0JURl9JRCBcdTAwMjZcdTAwMjZcbitcdCAgICAgICB0eXBlX2ZsYWcodHlwZSkgXHUwMDI2IE1FTV9BTExPQyBcdTAwMjZcdTAwMjZcbitcdCAgICAgICAhKHR5cGVfZmxhZyh0eXBlKSBcdTAwMjYgUFRSX1VOVFJVU1RFRCk7XG4rfVxuK1xuK3N0YXRpYyBpbmxpbmUgYm9vbCB0eXBlX2lzX3VudHJ1c3RlZF9wdHJfYWxsb2Nfb2JqKHUzMiB0eXBlKVxuK3tcbitcdHJldHVybiBiYXNlX3R5cGUodHlwZSkgPT0gUFRSX1RPX0JURl9JRCBcdTAwMjZcdTAwMjZcbitcdCAgICAgICB0eXBlX2ZsYWcodHlwZSkgXHUwMDI2IE1FTV9BTExPQyBcdTAwMjZcdTAwMjZcbitcdCAgICAgICB0eXBlX2ZsYWcodHlwZSkgXHUwMDI2IFBUUl9VTlRSVVNURUQ7XG4gfVxuIFxuIHN0YXRpYyBpbmxpbmUgYm9vbCB0eXBlX2lzX25vbl9vd25pbmdfcmVmKHUzMiB0eXBlKVxuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvdmVyaWZpZXIuYyBiL2tlcm5lbC9icGYvdmVyaWZpZXIuY1xuaW5kZXggZmRjNWZiYjFmNzhjYS4uOGIzNWM2Mzc4MDc5OCAxMDA2NDRcbi0tLSBhL2tlcm5lbC9icGYvdmVyaWZpZXIuY1xuKysrIGIva2VybmVsL2JwZi92ZXJpZmllci5jXG5AQCAtNTgwOSw3ICs1ODA5LDEzIEBAIHN0YXRpYyBpbnQgY2hlY2tfcHRyX3RvX2J0Zl9hY2Nlc3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbiBcdFx0XHRyZXR1cm4gLUVBQ0NFUztcbiBcdFx0fVxuIFxuLVx0XHRpZiAodHlwZV9pc19hbGxvYyhyZWctXHUwMDNldHlwZSkgXHUwMDI2XHUwMDI2ICF0eXBlX2lzX25vbl9vd25pbmdfcmVmKHJlZy1cdTAwM2V0eXBlKSBcdTAwMjZcdTAwMjZcbitcdFx0LypcbitcdFx0ICogU2tpcCB0aGlzIHJlZmVyZW5jZWQtSUQgc2FuaXR5IGNoZWNrIGZvciB1bnRydXN0ZWQgYWxsb2NhdGVkIG9iamVjdHM7XG4rXHRcdCAqIHRoZSBhY2Nlc3MgY2hlY2sgYWJvdmUgYWxyZWFkeSByZWplY3RzIHdyaXRlcyB0aHJvdWdoIHRoZW0uXG4rXHRcdCAqL1xuK1x0XHRpZiAodHlwZV9pc19hbGxvYyhyZWctXHUwMDNldHlwZSkgXHUwMDI2XHUwMDI2XG4rXHRcdCAgICAhdHlwZV9pc191bnRydXN0ZWRfcHRyX2FsbG9jX29iaihyZWctXHUwMDNldHlwZSkgXHUwMDI2XHUwMDI2XG4rXHRcdCAgICAhdHlwZV9pc19ub25fb3duaW5nX3JlZihyZWctXHUwMDNldHlwZSkgXHUwMDI2XHUwMDI2XG4gXHRcdCAgICAhKHJlZy1cdTAwM2V0eXBlIFx1MDAyNiBNRU1fUkNVKSBcdTAwMjZcdTAwMjYgIXJlZ19pc19yZWZlcmVuY2VkKGVudiwgcmVnKSkge1xuIFx0XHRcdHZlcmlmaWVyX2J1ZyhlbnYsIFwiYWxsb2NhdGVkIG9iamVjdCBtdXN0IGhhdmUgYSByZWZlcmVuY2VkIGlkXCIpO1xuIFx0XHRcdHJldHVybiAtRUZBVUxUO1xuQEAgLTEyNDE5LDcgKzEyNDI1LDcgQEAgc3RhdGljIGludCBjaGVja19rZnVuY19hcmdzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfa2Z1bmNfY2FsbF9cbiBcdFx0XHRcdFx0cmVnX2FyZ19uYW1lKGVudiwgYXJnbm8pKTtcbiBcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuIFx0XHRcdH1cbi1cdFx0XHRpZiAoIXR5cGVfaXNfbm9uX293bmluZ19yZWYocmVnLVx1MDAzZXR5cGUpKVxuK1x0XHRcdGlmICghdHlwZV9pc19ub25fb3duaW5nX3JlZihyZWctXHUwMDNldHlwZSkgXHUwMDI2XHUwMDI2IHJlZ19pc19yZWZlcmVuY2VkKGVudiwgcmVnKSlcbiBcdFx0XHRcdG1ldGEtXHUwMDNlYXJnX293bmluZ19yZWYgPSB0cnVlO1xuIFxuIFx0XHRcdHJlYyA9IHJlZ19idGZfcmVjb3JkKHJlZyk7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3JlZmNvdW50ZWRfa3B0ci5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3JlZmNvdW50ZWRfa3B0ci5jXG5pbmRleCA2MTkwNmY0ODAyNWNjLi5iNzBiZThiNTJmZjgwIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3JlZmNvdW50ZWRfa3B0ci5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvcmVmY291bnRlZF9rcHRyLmNcbkBAIC0yMyw2ICsyMywxNSBAQCBzdHJ1Y3QgbWFwX3ZhbHVlIHtcbiBcdHN0cnVjdCBub2RlX2RhdGEgX19rcHRyICpub2RlO1xuIH07XG4gXG4rc3RydWN0IG5vZGVfcmVmY291bnRfb25seSB7XG4rXHRsb25nIGtleTtcbitcdHN0cnVjdCBicGZfcmVmY291bnQgcmVmY291bnQ7XG4rfTtcbitcbitzdHJ1Y3QgbWFwX3ZhbHVlX3JlZmNvdW50X29ubHkge1xuK1x0c3RydWN0IG5vZGVfcmVmY291bnRfb25seSBfX2twdHIgKm5vZGU7XG4rfTtcbitcbiBzdHJ1Y3Qge1xuIFx0X191aW50KHR5cGUsIEJQRl9NQVBfVFlQRV9BUlJBWSk7XG4gXHRfX3R5cGUoa2V5LCBpbnQpO1xuQEAgLTMwLDYgKzM5LDEzIEBAIHN0cnVjdCB7XG4gXHRfX3VpbnQobWF4X2VudHJpZXMsIDIpO1xuIH0gc3Rhc2hlZF9ub2RlcyBTRUMoXCIubWFwc1wiKTtcbiBcbitzdHJ1Y3Qge1xuK1x0X191aW50KHR5cGUsIEJQRl9NQVBfVFlQRV9BUlJBWSk7XG4rXHRfX3R5cGUoa2V5LCBpbnQpO1xuK1x0X190eXBlKHZhbHVlLCBzdHJ1Y3QgbWFwX3ZhbHVlX3JlZmNvdW50X29ubHkpO1xuK1x0X191aW50KG1heF9lbnRyaWVzLCAxKTtcbit9IHN0YXNoZWRfcmVmY291bnRfb25seSBTRUMoXCIubWFwc1wiKTtcbitcbiBzdHJ1Y3Qgbm9kZV9hY3F1aXJlIHtcbiBcdGxvbmcga2V5O1xuIFx0bG9uZyBkYXRhO1xuQEAgLTgzMiw2ICs4NDgsMTUxIEBAIGxvbmcgcmJ0cmVlX3JlZmNvdW50ZWRfbm9kZV9yZWZfZXNjYXBlc19vd25pbmdfaW5wdXQodm9pZCAqY3R4KVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuK1NFQyhcInRjXCIpXG4rX19zdWNjZXNzXG4rbG9uZyByZWZjb3VudF9hY3F1aXJlX293bmluZ19pbnB1dF9ub19udWxsX2NoZWNrKHZvaWQgKmN0eClcbit7XG4rXHRzdHJ1Y3Qgbm9kZV9yZWZjb3VudF9vbmx5ICpuLCAqbTtcbitcbitcdG4gPSBicGZfb2JqX25ldyh0eXBlb2YoKm4pKTtcbitcdGlmICghbilcbitcdFx0cmV0dXJuIDE7XG4rXG4rXHRtID0gYnBmX3JlZmNvdW50X2FjcXVpcmUobik7XG4rXHRicGZfb2JqX2Ryb3AobSk7XG4rXHRicGZfb2JqX2Ryb3Aobik7XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rU0VDKFwidGNcIilcbitfX3N1Y2Nlc3Ncbitsb25nIHJlZmNvdW50X2FjcXVpcmVfcmN1X21hcF9rcHRyX251bGxfY2hlY2tlZCh2b2lkICpjdHgpXG4re1xuK1x0c3RydWN0IG1hcF92YWx1ZV9yZWZjb3VudF9vbmx5ICptYXB2YWw7XG4rXHRzdHJ1Y3Qgbm9kZV9yZWZjb3VudF9vbmx5ICpuLCAqbTtcbitcdGludCBpZHggPSAwO1xuK1xuK1x0bWFwdmFsID0gYnBmX21hcF9sb29rdXBfZWxlbShcdTAwMjZzdGFzaGVkX3JlZmNvdW50X29ubHksIFx1MDAyNmlkeCk7XG4rXHRpZiAoIW1hcHZhbClcbitcdFx0cmV0dXJuIDE7XG4rXG4rXHRicGZfcmN1X3JlYWRfbG9jaygpO1xuK1x0biA9IG1hcHZhbC1cdTAwM2Vub2RlO1xuK1x0aWYgKCFuKSB7XG4rXHRcdGJwZl9yY3VfcmVhZF91bmxvY2soKTtcbitcdFx0cmV0dXJuIDI7XG4rXHR9XG4rXHRtID0gYnBmX3JlZmNvdW50X2FjcXVpcmUobik7XG4rXHRicGZfcmN1X3JlYWRfdW5sb2NrKCk7XG4rXG4rXHRpZiAoIW0pXG4rXHRcdHJldHVybiAzO1xuK1x0YnBmX29ial9kcm9wKG0pO1xuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK1NFQyhcIj90Y1wiKVxuK19fc3VjY2Vzc1xuK2xvbmcgbWFwX2twdHJfcmVhZF9hZnRlcl9yY3VfdW5sb2NrKHZvaWQgKmN0eClcbit7XG4rXHRzdHJ1Y3QgbWFwX3ZhbHVlX3JlZmNvdW50X29ubHkgKm1hcHZhbDtcbitcdHN0cnVjdCBub2RlX3JlZmNvdW50X29ubHkgKm47XG4rXHRpbnQgaWR4ID0gMDtcbitcbitcdG1hcHZhbCA9IGJwZl9tYXBfbG9va3VwX2VsZW0oXHUwMDI2c3Rhc2hlZF9yZWZjb3VudF9vbmx5LCBcdTAwMjZpZHgpO1xuK1x0aWYgKCFtYXB2YWwpXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0YnBmX3JjdV9yZWFkX2xvY2soKTtcbitcdG4gPSBtYXB2YWwtXHUwMDNlbm9kZTtcbitcdGlmICghbikge1xuK1x0XHRicGZfcmN1X3JlYWRfdW5sb2NrKCk7XG4rXHRcdHJldHVybiAwO1xuK1x0fVxuK1x0YnBmX3JjdV9yZWFkX3VubG9jaygpO1xuK1xuK1x0cmV0dXJuIG4tXHUwMDNla2V5O1xuK31cbitcbitTRUMoXCI/dGNcIilcbitfX2ZhaWx1cmUgX19tc2coXCJpcyBuZWl0aGVyIG93bmluZyBvciBub24tb3duaW5nIHJlZlwiKVxuK2xvbmcgcmVmY291bnRfYWNxdWlyZV9ncmFwaF9hZnRlcl9yY3VfdW5sb2NrKHZvaWQgKmN0eClcbit7XG4rXHRzdHJ1Y3QgbWFwX3ZhbHVlICptYXB2YWw7XG4rXHRzdHJ1Y3Qgbm9kZV9kYXRhICpuLCAqbTtcbitcdGludCBpZHggPSAwO1xuK1xuK1x0bWFwdmFsID0gYnBmX21hcF9sb29rdXBfZWxlbShcdTAwMjZzdGFzaGVkX25vZGVzLCBcdTAwMjZpZHgpO1xuK1x0aWYgKCFtYXB2YWwpXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0YnBmX3JjdV9yZWFkX2xvY2soKTtcbitcdG4gPSBtYXB2YWwtXHUwMDNlbm9kZTtcbitcdGlmICghbikge1xuK1x0XHRicGZfcmN1X3JlYWRfdW5sb2NrKCk7XG4rXHRcdHJldHVybiAwO1xuK1x0fVxuK1x0YnBmX3JjdV9yZWFkX3VubG9jaygpO1xuK1xuK1x0bSA9IGJwZl9yZWZjb3VudF9hY3F1aXJlKG4pO1xuK1x0aWYgKG0pXG4rXHRcdGJwZl9vYmpfZHJvcChtKTtcbitcbitcdHJldHVybiAwO1xuK31cbitcbitTRUMoXCI/dGNcIilcbitfX2ZhaWx1cmUgX19tc2coXCJvbmx5IHJlYWQgaXMgc3VwcG9ydGVkXCIpXG4rbG9uZyBncmFwaF9tYXBfa3B0cl93cml0ZV9hZnRlcl9yY3VfdW5sb2NrKHZvaWQgKmN0eClcbit7XG4rXHRzdHJ1Y3QgbWFwX3ZhbHVlICptYXB2YWw7XG4rXHRzdHJ1Y3Qgbm9kZV9kYXRhICpuO1xuK1x0aW50IGlkeCA9IDA7XG4rXG4rXHRtYXB2YWwgPSBicGZfbWFwX2xvb2t1cF9lbGVtKFx1MDAyNnN0YXNoZWRfbm9kZXMsIFx1MDAyNmlkeCk7XG4rXHRpZiAoIW1hcHZhbClcbitcdFx0cmV0dXJuIDE7XG4rXG4rXHRicGZfcmN1X3JlYWRfbG9jaygpO1xuK1x0biA9IG1hcHZhbC1cdTAwM2Vub2RlO1xuK1x0aWYgKCFuKSB7XG4rXHRcdGJwZl9yY3VfcmVhZF91bmxvY2soKTtcbitcdFx0cmV0dXJuIDI7XG4rXHR9XG4rXHRicGZfcmN1X3JlYWRfdW5sb2NrKCk7XG4rXG4rXHRuLVx1MDAzZWtleSA9IDE7XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rU0VDKFwiP3RjXCIpXG4rX19zdWNjZXNzXG4rbG9uZyBncmFwaF9tYXBfa3B0cl9yZWFkX2FmdGVyX3NwaW5fdW5sb2NrKHZvaWQgKmN0eClcbit7XG4rXHRzdHJ1Y3QgbWFwX3ZhbHVlICptYXB2YWw7XG4rXHRzdHJ1Y3Qgbm9kZV9kYXRhICpuO1xuK1x0aW50IGlkeCA9IDA7XG4rXG4rXHRtYXB2YWwgPSBicGZfbWFwX2xvb2t1cF9lbGVtKFx1MDAyNnN0YXNoZWRfbm9kZXMsIFx1MDAyNmlkeCk7XG4rXHRpZiAoIW1hcHZhbClcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHRicGZfcmN1X3JlYWRfbG9jaygpO1xuK1x0biA9IG1hcHZhbC1cdTAwM2Vub2RlO1xuK1x0aWYgKCFuKSB7XG4rXHRcdGJwZl9yY3VfcmVhZF91bmxvY2soKTtcbitcdFx0cmV0dXJuIDA7XG4rXHR9XG4rXHRicGZfcmN1X3JlYWRfdW5sb2NrKCk7XG4rXG4rXHRicGZfc3Bpbl9sb2NrKFx1MDAyNmxvY2spO1xuK1x0YnBmX3NwaW5fdW5sb2NrKFx1MDAyNmxvY2spO1xuK1xuK1x0cmV0dXJuIG4tXHUwMDNla2V5O1xuK31cbitcbiBzdGF0aWMgbG9uZyBfX3N0YXNoX21hcF9lbXB0eV94Y2hnKHN0cnVjdCBub2RlX2RhdGEgKm4sIGludCBpZHgpXG4ge1xuIFx0c3RydWN0IG1hcF92YWx1ZSAqbWFwdmFsID0gYnBmX21hcF9sb29rdXBfZWxlbShcdTAwMjZzdGFzaGVkX25vZGVzLCBcdTAwMjZpZHgpO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9yZWZjb3VudGVkX2twdHJfZmFpbC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3JlZmNvdW50ZWRfa3B0cl9mYWlsLmNcbmluZGV4IDAyNGVmMmFhZTIwMDguLjM0MDhmNjhhZDQ0NGQgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvcmVmY291bnRlZF9rcHRyX2ZhaWwuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3JlZmNvdW50ZWRfa3B0cl9mYWlsLmNcbkBAIC0xOSw2ICsxOSwxNSBAQCBzdHJ1Y3Qgbm9kZV9yZWZjb3VudGVkIHtcbiBcdHN0cnVjdCBicGZfcmVmY291bnQgcmVmY291bnQ7XG4gfTtcbiBcbitzdHJ1Y3Qgbm9kZV9yZWZjb3VudF9vbmx5IHtcbitcdGxvbmcga2V5O1xuK1x0c3RydWN0IGJwZl9yZWZjb3VudCByZWZjb3VudDtcbit9O1xuK1xuK3N0cnVjdCBtYXBfdmFsdWVfcmVmY291bnRfb25seSB7XG4rXHRzdHJ1Y3Qgbm9kZV9yZWZjb3VudF9vbmx5IF9fa3B0ciAqbm9kZTtcbit9O1xuK1xuIGV4dGVybiB2b2lkIGJwZl9yY3VfcmVhZF9sb2NrKHZvaWQpIF9fa3N5bTtcbiBleHRlcm4gdm9pZCBicGZfcmN1X3JlYWRfdW5sb2NrKHZvaWQpIF9fa3N5bTtcbiBcbkBAIC0yOCw2ICszNywxMyBAQCBwcml2YXRlKEEpIHN0cnVjdCBicGZfcmJfcm9vdCBncm9vdCBfX2NvbnRhaW5zKG5vZGVfYWNxdWlyZSwgbm9kZSk7XG4gcHJpdmF0ZShCKSBzdHJ1Y3QgYnBmX3NwaW5fbG9jayBsb2NrO1xuIHByaXZhdGUoQikgc3RydWN0IGJwZl9saXN0X2hlYWQgaGVhZCBfX2NvbnRhaW5zKG5vZGVfcmVmY291bnRlZCwgbGlzdCk7XG4gXG4rc3RydWN0IHtcbitcdF9fdWludCh0eXBlLCBCUEZfTUFQX1RZUEVfQVJSQVkpO1xuK1x0X190eXBlKGtleSwgaW50KTtcbitcdF9fdHlwZSh2YWx1ZSwgc3RydWN0IG1hcF92YWx1ZV9yZWZjb3VudF9vbmx5KTtcbitcdF9fdWludChtYXhfZW50cmllcywgMSk7XG4rfSBzdGFzaGVkX3JlZmNvdW50X29ubHkgU0VDKFwiLm1hcHNcIik7XG4rXG4gc3RhdGljIGJvb2wgbGVzcyhzdHJ1Y3QgYnBmX3JiX25vZGUgKmEsIGNvbnN0IHN0cnVjdCBicGZfcmJfbm9kZSAqYilcbiB7XG4gXHRzdHJ1Y3Qgbm9kZV9hY3F1aXJlICpub2RlX2E7XG5AQCAtODAsNiArOTYsNjQgQEAgbG9uZyByZWZjb3VudF9hY3F1aXJlX21heWJlX251bGwodm9pZCAqY3R4KVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuK1NFQyhcIj90Y1wiKVxuK19fZmFpbHVyZSBfX21zZyhcIlBvc3NpYmx5IE5VTEwgcG9pbnRlciBwYXNzZWQgdG8gdHJ1c3RlZCBSMVwiKVxuK2xvbmcgcmVmY291bnRfYWNxdWlyZV9yY3VfbWFwX2twdHJfdW5jaGVja2VkX2Ryb3Aodm9pZCAqY3R4KVxuK3tcbitcdHN0cnVjdCBtYXBfdmFsdWVfcmVmY291bnRfb25seSAqbWFwdmFsO1xuK1x0c3RydWN0IG5vZGVfcmVmY291bnRfb25seSAqdG1wLCAqbiwgKm07XG4rXHRpbnQgaWR4ID0gMDtcbitcbitcdHRtcCA9IGJwZl9vYmpfbmV3KHR5cGVvZigqdG1wKSk7XG4rXHRpZiAoIXRtcClcbitcdFx0cmV0dXJuIDM7XG4rXHRicGZfb2JqX2Ryb3AodG1wKTtcbitcbitcdG1hcHZhbCA9IGJwZl9tYXBfbG9va3VwX2VsZW0oXHUwMDI2c3Rhc2hlZF9yZWZjb3VudF9vbmx5LCBcdTAwMjZpZHgpO1xuK1x0aWYgKCFtYXB2YWwpXG4rXHRcdHJldHVybiAxO1xuK1xuK1x0YnBmX3JjdV9yZWFkX2xvY2soKTtcbitcdG4gPSBtYXB2YWwtXHUwMDNlbm9kZTtcbitcdGlmICghbikge1xuK1x0XHRicGZfcmN1X3JlYWRfdW5sb2NrKCk7XG4rXHRcdHJldHVybiAyO1xuK1x0fVxuK1x0bSA9IGJwZl9yZWZjb3VudF9hY3F1aXJlKG4pO1xuK1x0YnBmX3JjdV9yZWFkX3VubG9jaygpO1xuK1xuK1x0YnBmX29ial9kcm9wKG0pO1xuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK1NFQyhcIj90Y1wiKVxuK19fZmFpbHVyZSBfX21zZyhcImlzIG5laXRoZXIgb3duaW5nIG9yIG5vbi1vd25pbmcgcmVmXCIpXG4rbG9uZyByZWZjb3VudF9hY3F1aXJlX2FmdGVyX3JjdV91bmxvY2sodm9pZCAqY3R4KVxuK3tcbitcdHN0cnVjdCBtYXBfdmFsdWVfcmVmY291bnRfb25seSAqbWFwdmFsO1xuK1x0c3RydWN0IG5vZGVfcmVmY291bnRfb25seSAqbiwgKm07XG4rXHRpbnQgaWR4ID0gMDtcbitcbitcdG1hcHZhbCA9IGJwZl9tYXBfbG9va3VwX2VsZW0oXHUwMDI2c3Rhc2hlZF9yZWZjb3VudF9vbmx5LCBcdTAwMjZpZHgpO1xuK1x0aWYgKCFtYXB2YWwpXG4rXHRcdHJldHVybiAxO1xuK1xuK1x0YnBmX3JjdV9yZWFkX2xvY2soKTtcbitcdG4gPSBtYXB2YWwtXHUwMDNlbm9kZTtcbitcdGlmICghbikge1xuK1x0XHRicGZfcmN1X3JlYWRfdW5sb2NrKCk7XG4rXHRcdHJldHVybiAyO1xuK1x0fVxuK1x0YnBmX3JjdV9yZWFkX3VubG9jaygpO1xuK1xuK1x0bSA9IGJwZl9yZWZjb3VudF9hY3F1aXJlKG4pO1xuK1x0aWYgKG0pXG4rXHRcdGJwZl9vYmpfZHJvcChtKTtcbitcbitcdHJldHVybiAwO1xuK31cbitcbiBTRUMoXCI/dGNcIilcbiBfX2ZhaWx1cmUgX19tc2coXCJVbnJlbGVhc2VkIHJlZmVyZW5jZSBpZD0zIGFsbG9jX2luc249e3tbMC05XSt9fVwiKVxuIGxvbmcgcmJ0cmVlX3JlZmNvdW50ZWRfbm9kZV9yZWZfZXNjYXBlc19vd25pbmdfaW5wdXQodm9pZCAqY3R4KVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMTI6NDI6MTguNTA3MjU2Mjc3WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Njk4MTY0NjE4MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEJQRiBWZXJpZmllciBQYXRjaCBmb3IgRnV6emluZyBPcHBvcnR1bml0aWVzKipcblxuT2theSwgc28gSSd2ZSBnb3QgYSBwYXRjaCBoZXJlIHRoYXQncyB0d2Vha2luZyB0aGUgQlBGIHZlcmlmaWVyLCBzcGVjaWZpY2FsbHkgaG93IGl0IGhhbmRsZXMgYFBUUl9UT19CVEZfSURgIGFuZCBtZW1vcnkgYWxsb2NhdGlvbiB3aXRoIGBNRU1fQUxMT0NgLiBNeSBpbW1lZGlhdGUgZ29hbCBpcyB0byBmaWd1cmUgb3V0IHRoZSBiZXN0IHNwb3RzIHRvIGZvY3VzIGZ1enppbmcgZWZmb3J0cy4gVGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgaGVscGVyLCBgdHlwZV9pc191bnRydXN0ZWRfcHRyX2FsbG9jX29iamAsIGFuZCBtb2RpZmllcyBgY2hlY2tfcHRyX3RvX2J0Zl9hY2Nlc3NgIHRvIGJ5cGFzcyB0aGUgdXN1YWwgc2FuaXR5IGNoZWNrcyBmb3IgdGhlc2UgdW50cnVzdGVkIGFsbG9jYXRlZCBvYmplY3RzLiBJdCBhbHNvIGNoYW5nZXMgYGNoZWNrX2tmdW5jX2FyZ3NgIHRvIGluY2x1ZGUgYW4gZXh0cmEgY2hlY2ssIGByZWdfaXNfcmVmZXJlbmNlZChlbnYsIHJlZylgLCBiZWZvcmUgbWFya2luZyB0aGUgYXJndW1lbnQgYXMgb3duZWQuIFRoaXMgc291bmRzIGxpa2UgaXQgaW50cm9kdWNlcyBzb21lIHBvdGVudGlhbGx5IGludGVyZXN0aW5nIGVkZ2UgY2FzZXMuIFRoZSBwYXRjaCBhbHNvIGluY2x1ZGVzIGEgYnVuY2ggb2YgQlBGIHNlbGYtdGVzdHMsIHdoaWNoIGlzIGdvb2QgZm9yIGJhc2VsaW5lIGNvdmVyYWdlIGJ1dCBJIG5lZWQgdG8gaWRlbnRpZnkgYXJlYXMgbm90IHdlbGwtY292ZXJlZCBieSB0aG9zZSB0ZXN0cy5cblxuSSBuZWVkIHRvIGRpZyBpbnRvIHRoZSBjb2RlIGluIGBrZXJuZWwvYnBmL3ZlcmlmaWVyLmNgIHRvIHVuZGVyc3RhbmQgdGhlIGZ1bGwgaW1wYWN0IG9mIHRoZXNlIGNoYW5nZXMuIEknbSBmb2N1c2luZyBvbiB0aGUgbW9kaWZpY2F0aW9ucyB0byBgY2hlY2tfcHRyX3RvX2J0Zl9hY2Nlc3NgIGFuZCBgY2hlY2tfa2Z1bmNfYXJnc2AuIFRoZXkncmUgZGVmaW5pdGVseSAqcmVhY2hhYmxlKiBmdW5jdGlvbnMgYW5kIHJlcHJlc2VudCBvcGVyYXRpb25hbCBjaGFuZ2VzIGluIHRoZSB2ZXJpZmllci4gTm93LCB0aGUgdHJpY2sgaXMgdG8gaWRlbnRpZnkgdGhlIGJlc3QgZW50cnkgcG9pbnRzIGZvciBmdXp6aW5nLlxuXG5NeSBvYmplY3RpdmUgaXMgdG8gaWRlbnRpZnkgZ29vZCBmdXp6aW5nIHRhcmdldHMsIHNvIGxldCdzIGRpZyBpbnRvIHRoZSBjb2RlIG1vcmUuIGBjaGVja19wdHJfdG9fYnRmX2FjY2Vzc2AgaXMgYSBzdGF0aWMgZnVuY3Rpb24sIHdoaWNoIG1lYW5zIGl0J3MgYW4gaW50ZXJuYWwgaGVscGVyIGZ1bmN0aW9uLiBJIGtub3cgdG8gbG9vayBmb3IgZXh0ZXJuYWwgZW50cnkgcG9pbnRzLCBub3QgdGhlc2UgaW5saW5lZCBoZWxwZXIgZnVuY3Rpb25zLiBJIHNlZSBpdCdzIGNhbGxlZCBmcm9tIGBjaGVja19tZW1fYWNjZXNzYCwgd2hpY2ggaXMgaXRzZWxmIGEgc3RhdGljIGhlbHBlci4gU2ltaWxhcmx5LCBgY2hlY2tfa2Z1bmNfYXJnc2AgaXMgYSBzdGF0aWMgZnVuY3Rpb24gdGhhdCBnZXRzIGNhbGxlZCBmcm9tIGBjaGVja19rZnVuY19jYWxsYC4gQWgsIHRoYXTigJlzIHJpZ2h0LCB0aGUgcHJvbXB0IHNheXMgdG8gcHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50cyFcblxuQWxyaWdodCwgdGltZSB0byBzaGlmdCBnZWFycyBhbmQgZmluZCB0aGUgKmVudHJ5IHBvaW50cyogdGhhdCBldmVudHVhbGx5IGxlYWQgdG8gdGhlc2UgZnVuY3Rpb25zLiBJ4oCZbGwgc3RhcnQgYnkgbG9va2luZyBhdCBga2VybmVsL2JwZi92ZXJpZmllci5jYCBhbmQgZmlndXJpbmcgb3V0IHdoaWNoIGZ1bmN0aW9ucyAqY2FsbCogYGNoZWNrX3B0cl90b19idGZfYWNjZXNzYCBhbmQgYGNoZWNrX2tmdW5jX2FyZ3NgLiBJIGtub3cgdGhhdCBgYnBmX2NoZWNrYCBpcyB0aGUgbWFpbiBlbnRyeSBwb2ludCB0byB0aGUgdmVyaWZpZXIsIGJ1dCB3aGF0IGFyZSBpdHMgY2FsbGVycz8gVGltZSB0byBzZWFyY2ggZm9yIHRoZSAqY2FsbGVycyogb2YgdGhvc2UgbW9kaWZpZWQgZnVuY3Rpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1NTAzLCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzcyLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMTI6NDI6MjUuNDg4OTA0NzlaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjE1NTE5MjYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY2hlY2tfcHRyX3RvX2J0Zl9hY2Nlc3NcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2JwZi92ZXJpZmllci5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvdmVyaWZpZXIuYz01NzIxPXN0YXRpYyBib29sIHR5cGVfaXNfdHJ1c3RlZF9vcl9udWxsKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNTczMi1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NTczMzpzdGF0aWMgaW50IGNoZWNrX3B0cl90b19idGZfYWNjZXNzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTU3MzQtXFx0XFx0XFx0XFx0ICAgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZ3MsIHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcsXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9NjA4ND1zdGF0aWMgaW50IGNoZWNrX21lbV9hY2Nlc3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50IGluc25faWR4LCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnLCBhcmdub190IGFyZ25vLFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTYyOTctXFx0XFx0ICAgIXR5cGVfbWF5X2JlX251bGwocmVnLVxcdTAwM2V0eXBlKSkge1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo2Mjk4OlxcdFxcdGVyciA9IGNoZWNrX3B0cl90b19idGZfYWNjZXNzKGVudiwgcmVncywgcmVnLCBhcmdubywgb2ZmLCBzaXplLCB0LFxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy02Mjk5LVxcdFxcdFxcdFxcdFxcdCAgICAgIHZhbHVlX3JlZ25vKTtcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz02NzQ3PXN0YXRpYyBpbnQgY2hlY2tfaGVscGVyX21lbV9hY2Nlc3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZywgYXJnbm9fdCBhcmdubyxcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy02ODA0LVxcdGNhc2UgUFRSX1RPX0JURl9JRDpcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NjgwNTpcXHRcXHRyZXR1cm4gY2hlY2tfcHRyX3RvX2J0Zl9hY2Nlc3MoZW52LCByZWdzLCByZWcsIGFyZ25vLCAwLFxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy02ODA2LVxcdFxcdFxcdFxcdFxcdCAgICAgICBhY2Nlc3Nfc2l6ZSwgYWNjZXNzX3R5cGUsIC0xKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMTI6NDI6MjUuNTUwNDY0ODM2WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzUyNDIxMDcyMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIGludGVyYWN0aW9uczpcblxuKipBbmFseXppbmcgTWVtb3J5IEFjY2VzcyBhbmQgS2VybmVsIEZ1bmN0aW9uIENhbGxzKipcblxuT2theSwgc28gSSdtIHNlZWluZyBhIGNoYWluIG9mIGNhbGxzIGhlcmUsIHNwZWNpZmljYWxseSByZWxhdGVkIHRvIHZlcmlmeWluZyBtZW1vcnkgYWNjZXNzIGFuZCBrZXJuZWwgZnVuY3Rpb24gY2FsbHMuIEl0IGxvb2tzIGxpa2UgYGNoZWNrX21lbV9hY2Nlc3NgLCB3aGljaCBpcyB0aGUgd29ya2hvcnNlIGZvciB2YWxpZGF0aW5nIG1lbW9yeSBhY2Nlc3MgaW5zdHJ1Y3Rpb25zIChjYWxsZWQgYnkgc29tZXRoaW5nIGxpa2UgYGRvX2NoZWNrYCksIHJlbGllcyBvbiBhIG1vcmUgZnVuZGFtZW50YWwgY2hlY2ssIGBjaGVja19wdHJfdG9fYnRmX2FjY2Vzc2AsIHZpYSBgY2hlY2tfbWVtX2FjY2Vzc2AgYW5kIGBjaGVja19oZWxwZXJfbWVtX2FjY2Vzc2AuIFNvLCBhbnkgdGltZSB3ZSdyZSBjaGVja2luZyBhIG1lbW9yeSBhY2Nlc3MsIHRoZXNlIHNlY29uZGFyeSBjaGVja3MgYXJlIHRyaWdnZXJlZCBieSBteSBhbmFseXNpcyBpbiBgY2hlY2tfbWVtX2FjY2Vzc2AgaXRzZWxmLlxuXG5UaGVuLCB0aGVyZSdzIGBjaGVja19rZnVuY19jYWxsYCwgd2hpY2ggaXMgcmVzcG9uc2libGUgZm9yIHZlcmlmeWluZyBrZXJuZWwgZnVuY3Rpb24gY2FsbHMuIFRoaXMgb25lLCBpbiB0dXJuLCBzZWVtcyB0byBkZWxlZ2F0ZSB0aGUgYXJndW1lbnQgdmFsaWRhdGlvbiB0byBhIGZ1bmN0aW9uIG5hbWVkIGBjaGVja19rZnVuY19hcmdzYC4gVGhpcyBpbXBsaWVzIGEgY2xlYXIgc2VwYXJhdGlvbiBvZiBjb25jZXJuczogb25lIGZ1bmN0aW9uIHRvIHZhbGlkYXRlIHRoZSBjYWxsIGl0c2VsZiBhbmQgYW5vdGhlciB0byBkcmlsbCBkb3duIGludG8gdGhlIGFyZ3VtZW50cy4gTWFrZXMgc2Vuc2Ug4oCTIG1vZHVsYXJpdHkgaXMgYWx3YXlzIGdvb2QsIGFuZCB0aGlzIHByb2JhYmx5IGVuYWJsZXMgbW9yZSByb2J1c3QgdGVzdGluZyBhbmQgZWFzaWVyIG1vZGlmaWNhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6Njg5MywiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjczLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDEyOjQyOjI5LjA3NDY3NzgwOVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjU3NTI2OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjaGVja19rZnVuY19hcmdzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9icGYvdmVyaWZpZXIuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTE5MTg9c3RhdGljIGJvb2wgY2hlY2tfY3NzX3Rhc2tfaXRlcl9hbGxvd2xpc3Qoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMTkzMy1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTE5MzQ6c3RhdGljIGludCBjaGVja19rZnVuY19hcmdzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfa2Z1bmNfY2FsbF9hcmdfbWV0YSAqbWV0YSxcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTE5MzUtXFx0XFx0XFx0ICAgIGludCBpbnNuX2lkeClcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xMjkxOT1zdGF0aWMgaW50IGNoZWNrX2tmdW5jX2NhbGwoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuLFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTEyOTk1LVxcdC8qIENoZWNrIHRoZSBhcmd1bWVudHMgKi9cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTI5OTY6XFx0ZXJyID0gY2hlY2tfa2Z1bmNfYXJncyhlbnYsIFxcdTAwMjZtZXRhLCBpbnNuX2lkeCk7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTEyOTk3LVxcdGlmIChlcnIgXFx1MDAzYyAwKVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTEzMjgyLVxcdFxcdGVsc2VcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTMyODM6XFx0XFx0XFx0Lyogc2NhbGFyLiBlbnN1cmVkIGJ5IGNoZWNrX2tmdW5jX2FyZ3MoKSAqL1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMzI4NC1cXHRcXHRcXHRtYXJrX2J0Zl9mdW5jX3JlZ19zaXplKGVudiwgcmVnbm8sIHQtXFx1MDAzZXNpemUpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QxMjo0MjoyOS4xMjEyNTg5MDZaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDQzMTYzODExLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aG9zZSB0aG91Z2h0cyBmcm9tIGEgZmlyc3QtcGVyc29uLCBleHBlcnQgcGVyc3BlY3RpdmUsIGZvY3VzaW5nIG9uIHRoZSBpbnRlbnRpb24gYmVoaW5kIHRoZSBkZXNjcmliZWQgYWN0aW9uczpcblxuKipEaXZpbmcgaW50byB0aGUgRnVuY3Rpb24gQ2FsbHMqKlxuXG5BbHJpZ2h0LCBJJ20gZ29pbmcgdG8gc3RhcnQgYnkgZ2V0dGluZyBhIGhhbmRsZSBvbiB0aGUgY29udHJvbCBmbG93LiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgXCJMZXQncyB0cmFjayBkb3duIHRoZSBpbnZvY2F0aW9ucyBvZiBgY2hlY2tfa2Z1bmNfY2FsbGAgYW5kIGBjaGVja19tZW1fYWNjZXNzYC5cIiBUaGVzZSBmdW5jdGlvbnMgYXJlIGNydWNpYWwgZm9yIHVuZGVyc3RhbmRpbmcgdGhlIHNlY3VyaXR5IG1vZGVsIGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGgga2VybmVsIGZ1bmN0aW9uIGNhbGxzIGFuZCBtZW1vcnkgYWNjZXNzZXMsIHdoaWNoIGFyZSB0aGUgZnVuZGFtZW50YWwgYnVpbGRpbmcgYmxvY2tzIG9mIGFsbW9zdCBhbnkgc3lzdGVtLiBCeSB0cmFjaW5nIHRoZWlyIGNhbGxzLCBJIGV4cGVjdCB0byBnZXQgYSBzb2xpZCBncmFzcCBvZiB3aGVyZSB0aGUgc3lzdGVtIGlzIGxpa2VseSB2YWxpZGF0aW5nIHRoZXNlIG9wZXJhdGlvbnMgYW5kLCBtb3N0IGltcG9ydGFudGx5LCB0aGUgY3JpdGVyaWEgaXQncyB1c2luZyB0byBkbyBzby4gVGhpcyBpcyBsaWtlbHkgd2hlcmUgdGhlIHN5c3RlbSdzIHNlY3VyaXR5IGNvbnN0cmFpbnRzIGFyZSBhcHBsaWVkLiBVbmRlcnN0YW5kaW5nIHRob3NlIHNlY3VyaXR5IGNvbnN0cmFpbnRzIGlzIHdoYXQgbWF0dGVycy4gVGhpcyBleHBsb3JhdGlvbiBzaG91bGQgaGVscCBtZSBwYWludCBhIHBpY3R1cmUgb2YgaG93IHRoZSBzeXN0ZW0ncyBzZWN1cml0eSBpcyBhcmNoaXRlY3RlZCBhdCBhIGxvdyBsZXZlbC4gSXQncyB0aGUgbW9zdCBlZmZlY3RpdmUgc3RhcnRpbmcgcG9pbnQgdG8gYmVnaW4gYW55IGluLWRlcHRoIHN5c3RlbSBzZWN1cml0eSBhbmFseXNpcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NzU5MywiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDEyOjQyOjMyLjU2NDQyNTQ3N1oiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzIyMjA1OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjaGVja19rZnVuY19jYWxsXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9icGYvdmVyaWZpZXIuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL3ZlcmlmaWVyLmM9NzI0ND1zdGF0aWMgaW50IHByb2Nlc3NfZHlucHRyX2Z1bmMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZyxcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy03MzE4LVxcdFxcdFxcdCAqIEZvciBDT05TVF9QVFJfVE9fRFlOUFRSLCByZWcgaXMgYWxyZWFkeSBzY3JhdGNoZWQgYnkgY2hlY2tfcmVnX2FyZ1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo3MzE5OlxcdFxcdFxcdCAqIGluIGNoZWNrX2hlbHBlcl9jYWxsIGFuZCBtYXJrX2J0Zl9mdW5jX3JlZ19zaXplIGluIGNoZWNrX2tmdW5jX2NhbGwuXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTczMjAtXFx0XFx0XFx0ICovXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTI5MTc9c3RhdGljIGludCBjaGVja19yZXR1cm5fY29kZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBpbnQgcmVnbm8sIGNvbnN0IGNoYXIgKnJlZ19uYW1lKTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTI5MTgtXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjEyOTE5OnN0YXRpYyBpbnQgY2hlY2tfa2Z1bmNfY2FsbChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmluc24sXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTEyOTIwLVxcdFxcdFxcdCAgICBpbnQgKmluc25faWR4X3ApXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTcyNDA9c3RhdGljIGludCBkb19jaGVja19pbnNuKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGJvb2wgKmRvX3ByaW50X3N0YXRlKVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE3MzA4LVxcdFxcdFxcdGlmIChpbnNuLVxcdTAwM2VzcmNfcmVnID09IEJQRl9QU0VVRE9fS0ZVTkNfQ0FMTClcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTczMDk6XFx0XFx0XFx0XFx0cmV0dXJuIGNoZWNrX2tmdW5jX2NhbGwoZW52LCBpbnNuLCBcXHUwMDI2ZW52LVxcdTAwM2VpbnNuX2lkeCk7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE3MzEwLVxcdFxcdFxcdHJldHVybiBjaGVja19oZWxwZXJfY2FsbChlbnYsIGluc24sIFxcdTAwMjZlbnYtXFx1MDAzZWluc25faWR4KTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMTI6NDI6MzIuNjExNjU4NjE0WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQ0Mjg3OTc4MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGFuYWx5emluZyB0aGlzIGNvZGU6XG5cbioqQW5hbHl6aW5nIHRoZSBlQlBGIFZlcmlmaWNhdGlvbiBGbG93KipcblxuT2theSwgc28gSSdtIGRpdmluZyBpbnRvIHRoaXMgZUJQRiB2ZXJpZmljYXRpb24gZmxvdywgYW5kIGl0IGxvb2tzIGxpa2UgYGRvX2NoZWNrX2luc25gIGlzIHRoZSB3b3JraG9yc2UgaGVyZS4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHRyYWNlIHRoZSBleGVjdXRpb24gcGF0aC4gSXQgc2VlbXMgbGlrZSBgZG9fY2hlY2tfaW5zbmAgaXMgY2FsbGluZyBgY2hlY2tfa2Z1bmNfY2FsbGAsIHdoaWNoIG1ha2VzIHNlbnNlOyBhIGNoZWNrIGluc3RydWN0aW9uIHByZXN1bWFibHkgbmVlZHMgdG8gdmFsaWRhdGUgYW55IGtmdW5jIGNhbGxzLiBJIG5lZWQgdG8ga2VlcCB0aGF0IGluIG1pbmQuXG5cbk5vdywgd2hlcmUgZG9lcyBgZG9fY2hlY2tfaW5zbmAgaXRzZWxmIGNvbWUgZnJvbT8gSXQncyBjYWxsZWQgYnkgYGRvX2NoZWNrYCwgYW5kIGBkb19jaGVja2AgaXMgY2FsbGVkIGJ5IGBicGZfY2hlY2tgLiBBaGEhIExvb2tzIGxpa2UgYGJwZl9jaGVja2AgaXMgdGhlIGxpa2VseSBlbnRyeSBwb2ludC4gVGhhdCdzIHVzdWFsbHkgdGhlIHN0YXJ0aW5nIHBvaW50IGZvciB2YWxpZGF0aW9uLCBhbmQgZXZlcnl0aGluZyBmdW5uZWxzIGludG8gaXQuIEknbGwgbWFrZSBgYnBmX2NoZWNrYCBteSBwcmltYXJ5IGZvY3VzIHRvIHVuZGVyc3RhbmQgdGhlIHdob2xlIHByb2Nlc3MuIEkgd2lsbCBzdGFydCB0aGVyZSB0byBzZWUgaG93IHRoZSBvdGhlciBwYXJ0cyBmaXQgaW4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgzMTcsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QxMjo0MjozNi4wNTQ1NDIyNDRaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ5NDY5MTc3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJwZl9jaGVja1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvYnBmL3ZlcmlmaWVyLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi92ZXJpZmllci5jPTU1PXN0YXRpYyBib29sIGJwZl9nbG9iYWxfcGVyY3B1X21hX3NldDtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNTYtXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjU3Oi8qIGJwZl9jaGVjaygpIGlzIGEgc3RhdGljIGNvZGUgYW5hbHl6ZXIgdGhhdCB3YWxrcyBlQlBGIHByb2dyYW1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNTgtICogaW5zdHJ1Y3Rpb24gYnkgaW5zdHJ1Y3Rpb24gYW5kIHVwZGF0ZXMgcmVnaXN0ZXIvc3RhY2sgc3RhdGUuXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTE5MDM9c3RhdGljIGludCBwcm9jZXNzX2tmX2FyZ19wdHJfdG9fcmJ0cmVlX25vZGUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMTkxNC0gKiBMU00gaG9va3MgYW5kIGl0ZXJzIChib3RoIHNsZWVwYWJsZSBhbmQgbm9uLXNsZWVwYWJsZSkgYXJlIHNhZmUuXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjExOTE1OiAqIEFueSBzbGVlcGFibGUgcHJvZ3MgYXJlIGFsc28gc2FmZSBzaW5jZSBicGZfY2hlY2tfYXR0YWNoX3RhcmdldCgpIGVuZm9yY2VcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTE5MTYtICogdGhlbSBjYW4gb25seSBiZSBhdHRhY2hlZCB0byBzb21lIHNwZWNpZmljIGhvb2sgcG9pbnRzLlxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTE4ODk2PWJ0Zl9hdHRhY2hfZnVuY19wcm90byhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2xvZyAqbG9nLCBzdHJ1Y3QgYnRmICpidGYsIHUzMiBmdW5jX2lkKVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE4OTMwLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxODkzMTppbnQgYnBmX2NoZWNrX2F0dGFjaF90YXJnZXQoc3RydWN0IGJwZl92ZXJpZmllcl9sb2cgKmxvZyxcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTg5MzItXFx0XFx0XFx0ICAgIGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZyxcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xOTMzNj1zdGF0aWMgaW50IGNoZWNrX2F0dGFjaF9idGZfaWQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xOTM2Ni1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTkzNjc6XFx0cmV0ID0gYnBmX2NoZWNrX2F0dGFjaF90YXJnZXQoXFx1MDAyNmVudi1cXHUwMDNlbG9nLCBwcm9nLCB0Z3RfcHJvZywgYnRmX2lkLCBcXHUwMDI2dGd0X2luZm8pO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xOTM2OC1cXHRpZiAocmV0KVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE5NDM1LVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxOTQzNjppbnQgYnBmX2NoZWNrX2F0dGFjaF9idGZfaWRfbXVsdGkoc3RydWN0IGJ0ZiAqYnRmLCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2csIHUzMiBidGZfaWQsXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE5NDM3LVxcdFxcdFxcdFxcdCAgc3RydWN0IGJwZl9hdHRhY2hfdGFyZ2V0X2luZm8gKnRndF9pbmZvKVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTE5NjMzPWludCBicGZfZml4dXBfa2Z1bmNfY2FsbChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmluc24sXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTk3NzYtXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjE5Nzc3OmludCBicGZfY2hlY2soc3RydWN0IGJwZl9wcm9nICoqcHJvZywgdW5pb24gYnBmX2F0dHIgKmF0dHIsIGJwZnB0cl90IHVhdHRyLFxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xOTc3OC1cXHQgICAgICBzdHJ1Y3QgYnBmX2xvZ19hdHRyICphdHRyX2xvZylcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xOTc5MS1cXHQvKiAnc3RydWN0IGJwZl92ZXJpZmllcl9lbnYnIGNhbiBiZSBnbG9iYWwsIGJ1dCBzaW5jZSBpdCdzIG5vdCBzbWFsbCxcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTk3OTI6XFx0ICogYWxsb2NhdGUvZnJlZSBpdCBldmVyeSB0aW1lIGJwZl9jaGVjaygpIGlzIGNhbGxlZFxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xOTc5My1cXHQgKi9cXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xOTg2Ni1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTk4Njc6XFx0cmV0ID0gYnBmX2NoZWNrX2J0Zl9pbmZvX2Vhcmx5KGVudiwgYXR0ciwgdWF0dHIpO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xOTg2OC1cXHRpZiAocmV0IFxcdTAwM2MgMClcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xOTg3OC1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTk4Nzk6XFx0cmV0ID0gYnBmX2NoZWNrX2J0Zl9pbmZvKGVudiwgYXR0ciwgdWF0dHIpO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xOTg4MC1cXHRpZiAocmV0IFxcdTAwM2MgMClcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xOTg5Mi1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTk4OTM6XFx0cmV0ID0gYnBmX2NoZWNrX2NmZyhlbnYpO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xOTg5NC1cXHRpZiAocmV0IFxcdTAwM2MgMClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMTI6NDI6MzYuMTA0MDI5NTUxWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYwODk0ODA4NjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgSW5pdGlhbCBBc3Nlc3NtZW50IG9mIHRoZSBCUEYgVmVyaWZpZXIgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpdCdzIGNsZWFyIHRoYXQgYGJwZl9jaGVja2AgaXMgdGhlIHByaW1hcnkgZW50cnkgcG9pbnQgZm9yIHRoZSB2ZXJpZmllciwgbm8gZG91YnQgYWJvdXQgaXQuIFRoZSBtZWF0IG9mIHRoZSBjaGFuZ2Ugc2VlbXMgdG8gYmUgYXJvdW5kIHRoZSBoYW5kbGluZyBvZiBgUFRSX1RPX0JURl9JRGAgYW5kIGBNRU1fQUxMT0NgIHdpdGhpbiB0aGUgQlBGIHZlcmlmaWVyIGxvZ2ljLiBNeSBleHBlcnQgc2Vuc2VzIGFyZSB0aW5nbGluZyDigJMgdGhpcyBsb29rcyBmdW5jdGlvbmFsbHkgc291bmQgYW5kIHJpcGUgZm9yIHNvbWUgc2VyaW91cyBmdXp6aW5nLiBNeSBmb2N1cyB3aWxsIGJlIHNxdWFyZWx5IG9uIHRoYXQgYGJwZl9jaGVja2Agc3ltYm9sLlxuXG5Ob3csIGJlZm9yZSBJIGRpZyBpbiB0b28gZGVlcCwgSSBuZWVkIHRvIGNoZWNrIGZvciBhbnkgc3BlY2lmaWMga2VybmVsIGNvbmZpZ3VyYXRpb25zIHRoYXQgbWlnaHQgYmUgcmVxdWlyZWQgdG8gdHJpZ2dlciBvciB0ZXN0IHRoaXMgbmV3IGJlaGF2aW9yLiBJIHNlZSB0aGF0IHRoZSBwYXRjaCBpdHNlbGYgaXMgbmVzdGxlZCB3aXRoaW4gYGtlcm5lbC9icGYvdmVyaWZpZXIuY2AsIHdoaWNoIG1ha2VzIHNlbnNlLiBJIGNhbiBhc3N1bWUgQlBGIGlzIGVuYWJsZWQgdmlhIGBDT05GSUdfQlBGX1NZU0NBTExgLCBzbyBJJ20gZ29vZCB0aGVyZS4gVGltZSB0byBkaXZlIGludG8gdGhlIGNvZGUgYW5kIHNlZSB3aGF0IG51YW5jZXMgYXdhaXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk3MTIsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMTI6NDI6NDIuMTkzNTE0NTYyWiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDI3NjcyOTMzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBCUEZfU1lTQ0FMTFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi9LY29uZmlnPTI1PW1lbnUgXFxcIkJQRiBzdWJzeXN0ZW1cXFwiXFxua2VybmVsL2JwZi9LY29uZmlnLTI2LVxcbmtlcm5lbC9icGYvS2NvbmZpZzoyNzpjb25maWcgQlBGX1NZU0NBTExcXG5rZXJuZWwvYnBmL0tjb25maWctMjgtXFx0Ym9vbCBcXFwiRW5hYmxlIGJwZigpIHN5c3RlbSBjYWxsXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QxMjo0Mjo0NC4yMjExOTMxNzVaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzMzNDcyODM1MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFJlZmNvdW50ZWQgS3B0ciBQYXRjaCoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9yZWZjb3VudGVkX2twdHIuY2AuIFRoYXQncyBhIHNlbGZ0ZXN0LCB1c2luZyB0aG9zZSBgYnBmX3JlZmNvdW50X2FjcXVpcmVgIGFuZCBgYnBmX29ial9kcm9wYCBrZnVuY3MuIFNlZW1zIHByZXR0eSBzdHJhaWdodGZvcndhcmQsIHVzaW5nIHJlZmVyZW5jZSBjb3VudGluZyB3aXRoIEJQRi4gTGV0J3MgbWFrZSBzdXJlIHdlIGhhdmVuJ3QgbWlzc2VkIGFueSBvdGhlciBjb25maWcgZGVwZW5kZW5jaWVzLiBJJ20gYXNzdW1pbmcgYENPTkZJR19CUEZfU1lTQ0FMTGAgaXMgdGhlIGNyaXRpY2FsIG9uZSwgYnV0IGl0IG5ldmVyIGh1cnRzIHRvIGRvdWJsZS1jaGVjay5cblxuTm93LCBsZXQncyBqdXN0IHF1aWNrbHkgcmUtZm9jdXMgb24gdGhlIGtleSBzeW1ib2xzIGludm9sdmVkIGluIHRoaXMuIGBicGZfY2hlY2tgIGlzIHRoZSBwcmltYXJ5IGVudHJ5IGZvciB0aGUgdmVyaWZpZXIsIGJ1dCBhcmUgdGhlcmUgYW55IG90aGVyIGZ1bmN0aW9ucyB0aGF0IG1pZ2h0IGJlIHJlbGV2YW50IHRvIHRoaXMgbmV3IGJlaGF2aW9yPyBNYXliZSBgYnBmX3Byb2dfbG9hZGAgaXMgYWxzbyB3b3J0aCBhIGxvb2s/XG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwMTQxLCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTM0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDEyOjQyOjUxLjU1NTkyMzkzN1oiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTAyOTQwMzcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYnBmX3Byb2dfbG9hZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvYnBmL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL2JwZl9sc20uYz0yOTY9QlRGX0lEKGZ1bmMsIGJwZl9sc21fYnBmX3Byb2cpXFxua2VybmVsL2JwZi9icGZfbHNtLmM6Mjk3OkJURl9JRChmdW5jLCBicGZfbHNtX2JwZl9wcm9nX2xvYWQpXFxua2VybmVsL2JwZi9icGZfbHNtLmMtMjk4LUJURl9JRChmdW5jLCBicGZfbHNtX2JwZl9wcm9nX2ZyZWUpXFxuLS1cXG5rZXJuZWwvYnBmL2ZpeHVwcy5jPTEwMjg9c3RhdGljIGludCBqaXRfc3VicHJvZ3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcXG4tLVxcbmtlcm5lbC9icGYvZml4dXBzLmMtMTIyOC1cXHQgKiBwb3B1bGF0ZSBrYWxsc3lzbS4gQmVnaW4gYXQgdGhlIGZpcnN0IHN1YnByb2dyYW0sIHNpbmNlXFxua2VybmVsL2JwZi9maXh1cHMuYzoxMjI5OlxcdCAqIGJwZl9wcm9nX2xvYWQgd2lsbCBhZGQgdGhlIGthbGxzeW1zIGZvciB0aGUgbWFpbiBwcm9ncmFtLlxcbmtlcm5lbC9icGYvZml4dXBzLmMtMTIzMC1cXHQgKi9cXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jPTI2OTE9RVhQT1JUX1NZTUJPTF9HUEwoYnBmX3Byb2dfZ2V0X3R5cGVfZGV2KTtcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTI3MDAtICpcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzoyNzAxOiAqIGJwZl9wcm9nX2xvYWRfZml4dXBfYXR0YWNoX3R5cGUoKSBzZXRzIGV4cGVjdGVkX2F0dGFjaF90eXBlIGluIEBhdHRyIGlmXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtMjcwMi0gKiBwcm9nIHR5cGUgcmVxdWlyZXMgaXQgYnV0IGhhcyBzb21lIGF0dGFjaCB0eXBlcyB0aGF0IGhhdmUgdG8gYmUgYmFja3dhcmRcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTI3MDQtICovXFxua2VybmVsL2JwZi9zeXNjYWxsLmM6MjcwNTpzdGF0aWMgdm9pZCBicGZfcHJvZ19sb2FkX2ZpeHVwX2F0dGFjaF90eXBlKHVuaW9uIGJwZl9hdHRyICphdHRyKVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTI3MDYte1xcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmM9MjcyND1zdGF0aWMgaW50XFxua2VybmVsL2JwZi9zeXNjYWxsLmM6MjcyNTpicGZfcHJvZ19sb2FkX2NoZWNrX2F0dGFjaChlbnVtIGJwZl9wcm9nX3R5cGUgcHJvZ190eXBlLFxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTI3MjYtXFx0XFx0XFx0ICAgZW51bSBicGZfYXR0YWNoX3R5cGUgZXhwZWN0ZWRfYXR0YWNoX3R5cGUsXFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYz0yOTY3PUJURl9JRF9MSVNUX0dMT0JBTF9TSU5HTEUoYnBmX211bHRpX2Z1bmNfYnRmX2lkLCBmdW5jLCBicGZfbXVsdGlfZnVuYylcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTI5NzEtXFxua2VybmVsL2JwZi9zeXNjYWxsLmM6Mjk3MjpzdGF0aWMgaW50IGJwZl9wcm9nX2xvYWQodW5pb24gYnBmX2F0dHIgKmF0dHIsIGJwZnB0cl90IHVhdHRyLCBzdHJ1Y3QgYnBmX2xvZ19hdHRyICphdHRyX2xvZylcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0yOTczLXtcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTI5OTYtXFxua2VybmVsL2JwZi9zeXNjYWxsLmM6Mjk5NzpcXHRicGZfcHJvZ19sb2FkX2ZpeHVwX2F0dGFjaF90eXBlKGF0dHIpO1xcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTI5OTgtXFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0zMDg0LVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjMwODU6XFx0aWYgKGJwZl9wcm9nX2xvYWRfY2hlY2tfYXR0YWNoKHR5cGUsIGF0dHItXFx1MDAzZWV4cGVjdGVkX2F0dGFjaF90eXBlLFxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTMwODYtXFx0XFx0XFx0XFx0ICAgICAgIGF0dGFjaF9idGYsIGF0dHItXFx1MDAzZWF0dGFjaF9idGZfaWQsXFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0zMTkxLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjMxOTI6XFx0ZXJyID0gc2VjdXJpdHlfYnBmX3Byb2dfbG9hZChwcm9nLCBhdHRyLCB0b2tlbiwgdWF0dHIuaXNfa2VybmVsKTtcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0zMTkzLVxcdGlmIChlcnIpXFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYz02MzU0PXN0YXRpYyBpbnQgX19zeXNfYnBmKGVudW0gYnBmX2NtZCBjbWQsIGJwZnB0cl90IHVhdHRyLCB1bnNpZ25lZCBpbnQgc2l6ZSxcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTY0MTctXFx0XFx0XFx0XFx0XFx0c2l6ZV9jb21tb24pO1xcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjY0MTg6XFx0XFx0ZXJyID0gZXJyID86IGJwZl9wcm9nX2xvYWQoXFx1MDAyNmF0dHIsIHVhdHRyLCBcXHUwMDI2YXR0cl9sb2cpO1xcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTY0MTktXFx0XFx0YnJlYWs7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDEyOjQyOjUxLjYwNjIyNTA5NFoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMzA5OTYxOTY2MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGb2N1c2luZyBvbiB0aGUgQlBGIFZlcmlmaWVyKipcblxuT2theSwgc28gSSdtIHRoaW5raW5nIGFib3V0IGhvdyB0byBhcHByb2FjaCB0aGlzIGZ1enppbmcgdGFzay4gYGJwZl9wcm9nX2xvYWRgIGlzIGEgZ29vZCBzdGFydGluZyBwb2ludCwgYnV0IEkgc2VlIHRoYXQgYGJwZl9jaGVja2AgaXMgY2FsbGVkIGJ5IGl0LCBhbmQgaXQncyBsb29raW5nIGxpa2UgdGhlIG1vcmUgdGFyZ2V0ZWQgZW50cnkgcG9pbnQuIEhvd2V2ZXIsIGBicGZfY2hlY2tgIGlzIHRoZSBtYWluIHZlcmlmaWVyIGZ1bmN0aW9uLCB0aGUgaG90IHBhdGggZm9yIEJQRiBmdXp6aW5nLiBUaGUgcHJvbXB0IHNheXMgdG8gYXZvaWQgb3Zlcmx5IGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zLiBJZiBJIGZvY3VzIG9uIGl0IEkgd2lsbCBmb2N1cyBmdXp6aW5nIG9uIHRoZSB2ZXJpZmllci4gU28sIGlzIHRoZXJlIGFueSBvdGhlciBlbnRyeSBwb2ludD9cblxuVGhlIHBhdGNoIG1vZGlmaWVzIGBjaGVja19wdHJfdG9fYnRmX2FjY2Vzc2AgYW5kIGBjaGVja19rZnVuY19hcmdzYCwgYnV0IHRob3NlIGFyZSBzdGF0aWMgZnVuY3Rpb25zLCBzbyBwb3RlbnRpYWxseSBpbmxpbmVkLiBUaGUgcHJvbXB0IHByZWZlcnMgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnRzLiBIbW1tLCB0aGUgcGF0Y2ggc2VlbXMgdG8gZXhjbHVzaXZlbHkgdG91Y2ggdGhlIHN0YXRpYyBmdW5jdGlvbnMgd2l0aGluIHRoZSB2ZXJpZmllci5cblxuRXZlbiBpZiBgYnBmX2NoZWNrYCBpcyBnZW5lcmljLCBpdCAqaXMqIHRoZSBlbnRyeSBwb2ludCBmb3IgdGhlIHZlcmlmaWVyLCBzbyBwcm92aWRpbmcgaXQgaXMgYmV0dGVyIHRoYW4gbm90aGluZywgb3IgZXZlbiBiZXR0ZXIgdGhhbiBndWVzc2luZyBzb21lIG90aGVyIHJlbGF0ZWQgYnV0IGxlc3MgY3JpdGljYWwgZnVuY3Rpb24uIFNvIGxldCdzIGNoZWNrLCBpbiBga2VybmVsL2JwZi92ZXJpZmllci5jYDogYGludCBicGZfY2hlY2soLi4uKWAsIGl0J3MgZ2xvYmFsIGFuZCBleHBvcnRlZC4gVGhhdCBzZXR0bGVzIGl0LiBgYnBmX2NoZWNrYCBpdCBpcy5cblxuTGV0J3MgcXVpY2tseSByZXZpZXcgdGhlIGNoYW5nZXMgZm9yIGNvbnRleHQuIEkgc2VlIGEgbmV3IGlubGluZSBmdW5jdGlvbiBgdHlwZV9pc191bnRydXN0ZWRfcHRyX2FsbG9jX29iamAsIGFuZCB0aGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvbmRpdGlvbnMgaW4gYGNoZWNrX3B0cl90b19idGZfYWNjZXNzYCBhbmQgYGNoZWNrX2tmdW5jX2FyZ3NgIHJlbGF0ZWQgdG8gaGFuZGxpbmcgYFBUUl9UT19CVEZfSURgIHR5cGVzLiBFc3NlbnRpYWxseSwgaXQgZml4ZXMgYSBidWcgcmVsYXRlZCB0byB1bnRydXN0ZWQgYWxsb2NhdGVkIG9iamVjdHMgYmVpbmcgaW5jb3JyZWN0bHkgcmVqZWN0ZWQuIFRoZSBwYXRjaCBpcyBtYWtpbmcgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgQlBGIHZlcmlmaWVyLiBUaGUgY29uZmlncyBhcmUgYEJQRl9TWVNDQUxMYC4gSSdsbCB1c2UgYGJwZl9jaGVja2AgYXMgdGhlIGZvY3VzIHN5bWJvbC5cblxuTGV0J3MgY2FsbCBzZXQtcmVzdWx0cy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE1MDUsIk91dHB1dFRva2VucyI6MTM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTU0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDEyOjQzOjA0LjcwNTg0NzI0NVoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgxMjA1MjQ1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfU1lTQ0FMTFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJwZl9jaGVja1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBCUEYgdmVyaWZpZXIncyBsb2dpYyBmb3IgaGFuZGxpbmcgUFRSX1RPX0JURl9JRCB3aXRoIE1FTV9BTExPQyBhbmQgUFRSX1VOVFJVU1RFRCBmbGFncywgc3BlY2lmaWNhbGx5IGluIGNoZWNrX3B0cl90b19idGZfYWNjZXNzIGFuZCBjaGVja19rZnVuY19hcmdzLiBUaGVzZSBjaGFuZ2VzIGFmZmVjdCBob3cgdGhlIHZlcmlmaWVyIHZhbGlkYXRlcyBtZW1vcnkgYWNjZXNzZXMgYW5kIGtmdW5jIGFyZ3VtZW50cyBmb3IgYWxsb2NhdGVkIG9iamVjdHMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBCUEYgdmVyaWZpZXIgdGhhdCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9TWVNDQUxMXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYnBmX2NoZWNrXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEJQRiB2ZXJpZmllcidzIGxvZ2ljIGZvciBoYW5kbGluZyBQVFJfVE9fQlRGX0lEIHdpdGggTUVNX0FMTE9DIGFuZCBQVFJfVU5UUlVTVEVEIGZsYWdzLCBzcGVjaWZpY2FsbHkgaW4gY2hlY2tfcHRyX3RvX2J0Zl9hY2Nlc3MgYW5kIGNoZWNrX2tmdW5jX2FyZ3MuIFRoZXNlIGNoYW5nZXMgYWZmZWN0IGhvdyB0aGUgdmVyaWZpZXIgdmFsaWRhdGVzIG1lbW9yeSBhY2Nlc3NlcyBhbmQga2Z1bmMgYXJndW1lbnRzIGZvciBhbGxvY2F0ZWQgb2JqZWN0cy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIEJQRiB2ZXJpZmllciB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflown6wkh[1] Phase: Succeeded StartedAt: 2026-08-03 12:43:15 +0000 UTC FinishedAt: 2026-08-03 12:43:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflown6wkh[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-03 12:43:15 +0000 UTC FinishedAt: 2026-08-03 12:43:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflown6wkh[2] Phase: Succeeded StartedAt: 2026-08-03 12:43:15 +0000 UTC FinishedAt: 2026-08-03 16:27:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflown6wkh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e5fd3f514e27db1f05fbd72ba615d74941e23c51","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.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_check"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e5fd3f514e27db1f05fbd72ba615d74941e23c51","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"3d7a2292-e563-47d3-b8b0-3c0ffd6112c5","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-03 12:43:15 +0000 UTC FinishedAt: 2026-08-03 16:27:28 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"e5fd3f514e27db1f05fbd72ba615d74941e23c51","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.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_check"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"e5fd3f514e27db1f05fbd72ba615d74941e23c51","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"3d7a2292-e563-47d3-b8b0-3c0ffd6112c5","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflown6wkh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e5fd3f514e27db1f05fbd72ba615d74941e23c51","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.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_check"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e5fd3f514e27db1f05fbd72ba615d74941e23c51","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"3d7a2292-e563-47d3-b8b0-3c0ffd6112c5","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-03 12:43:15 +0000 UTC FinishedAt: 2026-08-03 12:43:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflown6wkh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e5fd3f514e27db1f05fbd72ba615d74941e23c51","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.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_check"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e5fd3f514e27db1f05fbd72ba615d74941e23c51","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"3d7a2292-e563-47d3-b8b0-3c0ffd6112c5","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-03 12:43:15 +0000 UTC FinishedAt: 2026-08-03 12:43:20 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"e5fd3f514e27db1f05fbd72ba615d74941e23c51","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.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-workflown6wkh/series-workflown6wkh-convert-artifact-3952881419/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflown6wkh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e5fd3f514e27db1f05fbd72ba615d74941e23c51","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.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_check"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e5fd3f514e27db1f05fbd72ba615d74941e23c51","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"3d7a2292-e563-47d3-b8b0-3c0ffd6112c5","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-03 12:43:25 +0000 UTC FinishedAt: 2026-08-03 13:01:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflown6wkh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e5fd3f514e27db1f05fbd72ba615d74941e23c51","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.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_check"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e5fd3f514e27db1f05fbd72ba615d74941e23c51","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"3d7a2292-e563-47d3-b8b0-3c0ffd6112c5","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-03 12:43:25 +0000 UTC FinishedAt: 2026-08-03 13:01:28 +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:*80ebe3c8-fb53-4070-b79e-121adb373491,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-workflown6wkh/series-workflown6wkh-convert-artifact-3952881419/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": "5fb03f1e-5586-4734-98cd-f6484c9fe302", "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-workflown6wkh/series-workflown6wkh-build-action-2162174473/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflown6wkh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e5fd3f514e27db1f05fbd72ba615d74941e23c51","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.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_check"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e5fd3f514e27db1f05fbd72ba615d74941e23c51","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"3d7a2292-e563-47d3-b8b0-3c0ffd6112c5","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-03 12:43:25 +0000 UTC FinishedAt: 2026-08-03 13:01:18 +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:*80ebe3c8-fb53-4070-b79e-121adb373491,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-workflown6wkh/series-workflown6wkh-convert-artifact-3952881419/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": "5fb03f1e-5586-4734-98cd-f6484c9fe302", "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-workflown6wkh/series-workflown6wkh-build-action-2162174473/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflown6wkh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e5fd3f514e27db1f05fbd72ba615d74941e23c51","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.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_check"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e5fd3f514e27db1f05fbd72ba615d74941e23c51","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"3d7a2292-e563-47d3-b8b0-3c0ffd6112c5","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-03 13:01:28 +0000 UTC FinishedAt: 2026-08-03 13:01:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflown6wkh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e5fd3f514e27db1f05fbd72ba615d74941e23c51","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.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_check"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e5fd3f514e27db1f05fbd72ba615d74941e23c51","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"3d7a2292-e563-47d3-b8b0-3c0ffd6112c5","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-03 13:01:28 +0000 UTC FinishedAt: 2026-08-03 13:01:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflown6wkh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e5fd3f514e27db1f05fbd72ba615d74941e23c51","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.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_check"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e5fd3f514e27db1f05fbd72ba615d74941e23c51","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"3d7a2292-e563-47d3-b8b0-3c0ffd6112c5","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-03 13:01:28 +0000 UTC FinishedAt: 2026-08-03 13:01:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflown6wkh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e5fd3f514e27db1f05fbd72ba615d74941e23c51","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.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_check"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e5fd3f514e27db1f05fbd72ba615d74941e23c51","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"3d7a2292-e563-47d3-b8b0-3c0ffd6112c5","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-03 13:01:28 +0000 UTC FinishedAt: 2026-08-03 13:01:33 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"e5fd3f514e27db1f05fbd72ba615d74941e23c51","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"3d7a2292-e563-47d3-b8b0-3c0ffd6112c5","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.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-workflown6wkh/series-workflown6wkh-convert-artifact-2718895714/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflown6wkh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e5fd3f514e27db1f05fbd72ba615d74941e23c51","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.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_check"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e5fd3f514e27db1f05fbd72ba615d74941e23c51","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"3d7a2292-e563-47d3-b8b0-3c0ffd6112c5","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-03 13:01:38 +0000 UTC FinishedAt: 2026-08-03 13:03:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflown6wkh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e5fd3f514e27db1f05fbd72ba615d74941e23c51","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.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_check"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e5fd3f514e27db1f05fbd72ba615d74941e23c51","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"3d7a2292-e563-47d3-b8b0-3c0ffd6112c5","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-03 13:01:38 +0000 UTC FinishedAt: 2026-08-03 13:03:36 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*5fb03f1e-5586-4734-98cd-f6484c9fe302,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-workflown6wkh/series-workflown6wkh-build-action-2162174473/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-workflown6wkh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e5fd3f514e27db1f05fbd72ba615d74941e23c51","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.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_check"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e5fd3f514e27db1f05fbd72ba615d74941e23c51","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"3d7a2292-e563-47d3-b8b0-3c0ffd6112c5","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-03 13:03:45 +0000 UTC FinishedAt: 2026-08-03 13:03:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflown6wkh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e5fd3f514e27db1f05fbd72ba615d74941e23c51","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.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_check"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e5fd3f514e27db1f05fbd72ba615d74941e23c51","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"3d7a2292-e563-47d3-b8b0-3c0ffd6112c5","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-03 13:03:45 +0000 UTC FinishedAt: 2026-08-03 13:03:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflown6wkh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e5fd3f514e27db1f05fbd72ba615d74941e23c51","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.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_check"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e5fd3f514e27db1f05fbd72ba615d74941e23c51","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"3d7a2292-e563-47d3-b8b0-3c0ffd6112c5","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-03 13:03:45 +0000 UTC FinishedAt: 2026-08-03 13:22:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflown6wkh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e5fd3f514e27db1f05fbd72ba615d74941e23c51","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.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_check"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e5fd3f514e27db1f05fbd72ba615d74941e23c51","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"3d7a2292-e563-47d3-b8b0-3c0ffd6112c5","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-03 13:03:45 +0000 UTC FinishedAt: 2026-08-03 13:22:28 +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:*80ebe3c8-fb53-4070-b79e-121adb373491,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-workflown6wkh/series-workflown6wkh-convert-artifact-2718895714/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": "15f09b5c-49d6-4880-aca7-88c90cdf75e1", "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-workflown6wkh/series-workflown6wkh-build-action-34699958/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflown6wkh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e5fd3f514e27db1f05fbd72ba615d74941e23c51","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.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_check"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e5fd3f514e27db1f05fbd72ba615d74941e23c51","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"3d7a2292-e563-47d3-b8b0-3c0ffd6112c5","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-03 13:03:45 +0000 UTC FinishedAt: 2026-08-03 13:22:18 +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:*80ebe3c8-fb53-4070-b79e-121adb373491,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-workflown6wkh/series-workflown6wkh-convert-artifact-2718895714/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": "15f09b5c-49d6-4880-aca7-88c90cdf75e1", "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-workflown6wkh/series-workflown6wkh-build-action-34699958/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflown6wkh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e5fd3f514e27db1f05fbd72ba615d74941e23c51","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.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_check"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e5fd3f514e27db1f05fbd72ba615d74941e23c51","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"3d7a2292-e563-47d3-b8b0-3c0ffd6112c5","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-03 13:22:28 +0000 UTC FinishedAt: 2026-08-03 13:22:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflown6wkh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e5fd3f514e27db1f05fbd72ba615d74941e23c51","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.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_check"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e5fd3f514e27db1f05fbd72ba615d74941e23c51","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"3d7a2292-e563-47d3-b8b0-3c0ffd6112c5","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-03 13:22:28 +0000 UTC FinishedAt: 2026-08-03 13:22:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflown6wkh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e5fd3f514e27db1f05fbd72ba615d74941e23c51","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.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_check"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e5fd3f514e27db1f05fbd72ba615d74941e23c51","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"3d7a2292-e563-47d3-b8b0-3c0ffd6112c5","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-03 13:22:28 +0000 UTC FinishedAt: 2026-08-03 13:24:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflown6wkh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e5fd3f514e27db1f05fbd72ba615d74941e23c51","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.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_check"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e5fd3f514e27db1f05fbd72ba615d74941e23c51","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"3d7a2292-e563-47d3-b8b0-3c0ffd6112c5","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-03 13:22:28 +0000 UTC FinishedAt: 2026-08-03 13:24:28 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*15f09b5c-49d6-4880-aca7-88c90cdf75e1,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-workflown6wkh/series-workflown6wkh-build-action-34699958/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-workflown6wkh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e5fd3f514e27db1f05fbd72ba615d74941e23c51","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.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_check"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e5fd3f514e27db1f05fbd72ba615d74941e23c51","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"3d7a2292-e563-47d3-b8b0-3c0ffd6112c5","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-03 13:24:38 +0000 UTC FinishedAt: 2026-08-03 16:27:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflown6wkh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e5fd3f514e27db1f05fbd72ba615d74941e23c51","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.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_check"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e5fd3f514e27db1f05fbd72ba615d74941e23c51","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"3d7a2292-e563-47d3-b8b0-3c0ffd6112c5","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-03 13:24:38 +0000 UTC FinishedAt: 2026-08-03 16:27:28 +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_check"],"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:*5fb03f1e-5586-4734-98cd-f6484c9fe302,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*15f09b5c-49d6-4880-aca7-88c90cdf75e1,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-workflown6wkh/series-workflown6wkh-build-action-2162174473/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-workflown6wkh/series-workflown6wkh-build-action-34699958/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflown6wkh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e5fd3f514e27db1f05fbd72ba615d74941e23c51","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.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_check"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e5fd3f514e27db1f05fbd72ba615d74941e23c51","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"3d7a2292-e563-47d3-b8b0-3c0ffd6112c5","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-03 13:24:38 +0000 UTC FinishedAt: 2026-08-03 13:24:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflown6wkh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e5fd3f514e27db1f05fbd72ba615d74941e23c51","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.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_check"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e5fd3f514e27db1f05fbd72ba615d74941e23c51","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"3d7a2292-e563-47d3-b8b0-3c0ffd6112c5","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-03 13:24:38 +0000 UTC FinishedAt: 2026-08-03 13:24:43 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_check"],"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-workflown6wkh/series-workflown6wkh-convert-artifact-3006737815/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflown6wkh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e5fd3f514e27db1f05fbd72ba615d74941e23c51","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.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_check"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e5fd3f514e27db1f05fbd72ba615d74941e23c51","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"3d7a2292-e563-47d3-b8b0-3c0ffd6112c5","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-03 13:24:38 +0000 UTC FinishedAt: 2026-08-03 13:24:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflown6wkh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e5fd3f514e27db1f05fbd72ba615d74941e23c51","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.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_check"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e5fd3f514e27db1f05fbd72ba615d74941e23c51","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"3d7a2292-e563-47d3-b8b0-3c0ffd6112c5","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-03 13:24:38 +0000 UTC FinishedAt: 2026-08-03 13:24:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflown6wkh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e5fd3f514e27db1f05fbd72ba615d74941e23c51","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.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_check"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e5fd3f514e27db1f05fbd72ba615d74941e23c51","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"3d7a2292-e563-47d3-b8b0-3c0ffd6112c5","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-03 13:24:38 +0000 UTC FinishedAt: 2026-08-03 13:24:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflown6wkh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e5fd3f514e27db1f05fbd72ba615d74941e23c51","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.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_check"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e5fd3f514e27db1f05fbd72ba615d74941e23c51","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"3d7a2292-e563-47d3-b8b0-3c0ffd6112c5","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-03 13:24:48 +0000 UTC FinishedAt: 2026-08-03 16:27:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflown6wkh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e5fd3f514e27db1f05fbd72ba615d74941e23c51","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.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_check"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e5fd3f514e27db1f05fbd72ba615d74941e23c51","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"3d7a2292-e563-47d3-b8b0-3c0ffd6112c5","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-03 13:24:48 +0000 UTC FinishedAt: 2026-08-03 16:27:18 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*5fb03f1e-5586-4734-98cd-f6484c9fe302,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*15f09b5c-49d6-4880-aca7-88c90cdf75e1,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-workflown6wkh/series-workflown6wkh-build-action-2162174473/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-workflown6wkh/series-workflown6wkh-build-action-34699958/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-workflown6wkh/series-workflown6wkh-convert-artifact-3006737815/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,}