Name: series-workflowj2h8s Phase: Succeeded StartedAt: 2026-07-12 12:59:27 +0000 UTC FinishedAt: 2026-07-12 17:51:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj2h8s[0] Phase: Succeeded StartedAt: 2026-07-12 12:59:27 +0000 UTC FinishedAt: 2026-07-12 13:13:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj2h8s[0].run-triage Phase: Succeeded StartedAt: 2026-07-12 12:59:27 +0000 UTC FinishedAt: 2026-07-12 13:13:29 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "44696aa3a489d2baf58efa61b37833f100072bee", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "PTDUMP_DEBUGFS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "44696aa3a489d2baf58efa61b37833f100072bee", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "PTDUMP_DEBUGFS" ], "series_id": "6ed0e57f-8f83-472b-bc1b-aabbc1a237de" }, "track": "KASAN", "fuzz": { "focus": [ "bpf" ], "focus_symbols": [ "vmap_try_huge_pmd", "vmap_try_huge_pud", "vmap_try_huge_p4d", "cpa_collapse_large_pages", "ptdump_walk_pgd", "walk_page_range_debug" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db", "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEyIDEzOjEyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1BURFVNUF9ERUJVR0ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dm1hcF90cnlfaHVnZV9wbWQmIzM0OywKICAgICYjMzQ7dm1hcF90cnlfaHVnZV9wdWQmIzM0OywKICAgICYjMzQ7dm1hcF90cnlfaHVnZV9wNGQmIzM0OywKICAgICYjMzQ7Y3BhX2NvbGxhcHNlX2xhcmdlX3BhZ2VzJiMzNDssCiAgICAmIzM0O3B0ZHVtcF93YWxrX3BnZCYjMzQ7LAogICAgJiMzNDt3YWxrX3BhZ2VfcmFuZ2VfZGVidWcmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBrZXJuZWwgbG9naWMgZm9yIHBhZ2UgdGFibGUgZHVtcGluZyBhbmQgdm1hbGxvYyBodWdlIHBhZ2UgbWFwcGluZ3MsIGludHJvZHVjaW5nIGxvY2tpbmcgb24gYGluaXRfbW1gIHRvIHByZXZlbnQgdXNlLWFmdGVyLWZyZWUgZHVyaW5nIGNvbmN1cnJlbnQgcGFnZSB0YWJsZSBtb2RpZmljYXRpb25zLiBUaGlzIGlzIHJlYWNoYWJsZSB2aWEgZGVidWdmcyBhbmQgdm1hbGxvYyBjYWxscy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMiAxMzoxMjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGU1YmY4ZGQ5ODEzMmQ3ZTYxMWYzNjZjNjE0ZGZlNTk3ODhkMDVlM2NcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU3VuIEp1bCAxMiAxMzoxMTo1OSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3B0ZHVtcC5oIGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9wdGR1bXAuaFxuaW5kZXggNWIzNzRhNmFiMzRhNGUuLjUwYTE5NWVkYThlZDIyIDEwMDY0NFxuLS0tIGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9wdGR1bXAuaFxuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9wdGR1bXAuaFxuQEAgLTcsOCAmIzQzOzcsNiBAQFxuIFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3B0ZHVtcC5oXHUwMDNlXG4gXG4tREVDTEFSRV9TVEFUSUNfS0VZX0ZBTFNFKGFybTY0X3B0ZHVtcF9sb2NrX2tleSk7XG4tXG4gI2lmZGVmIENPTkZJR19QVERVTVBcbiBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9tbV90eXBlcy5oXHUwMDNlXG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9tbS9tbXUuYyBiL2FyY2gvYXJtNjQvbW0vbW11LmNcbmluZGV4IGEyNWQ4YmVhY2M4MzEwLi5iZDUyZmNhNmU4NzIwYiAxMDA2NDRcbi0tLSBhL2FyY2gvYXJtNjQvbW0vbW11LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvYXJtNjQvbW0vbW11LmNcbkBAIC00OSw4ICYjNDM7NDksNiBAQFxuICNkZWZpbmUgTk9fQ09OVF9NQVBQSU5HU1x0QklUKDEpXG4gI2RlZmluZSBOT19FWEVDX01BUFBJTkdTXHRCSVQoMilcdC8qIGFzc3VtZXMgRkVBVF9IUERTIGlzIG5vdCB1c2VkICovXG4gXG4tREVGSU5FX1NUQVRJQ19LRVlfRkFMU0UoYXJtNjRfcHRkdW1wX2xvY2tfa2V5KTtcbi1cbiB1NjQga2ltYWdlX3ZvZmZzZXQgX19yb19hZnRlcl9pbml0O1xuIEVYUE9SVF9TWU1CT0woa2ltYWdlX3ZvZmZzZXQpO1xuIFxuQEAgLTE4NjQsOCAmIzQzOzE4NjIsNyBAQCBpbnQgcG1kX2NsZWFyX2h1Z2UocG1kX3QgKnBtZHApXG4gXHRyZXR1cm4gMTtcbiB9XG4gXG4tc3RhdGljIGludCBfX3BtZF9mcmVlX3B0ZV9wYWdlKHBtZF90ICpwbWRwLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4tXHRcdFx0ICAgICAgIGJvb2wgYWNxdWlyZV9tbWFwX2xvY2spXG4mIzQzO2ludCBwbWRfZnJlZV9wdGVfcGFnZShwbWRfdCAqcG1kcCwgdW5zaWduZWQgbG9uZyBhZGRyKVxuIHtcbiBcdHB0ZV90ICp0YWJsZTtcbiBcdHBtZF90IHBtZDtcbkBAIC0xODc3LDI1ICYjNDM7MTg3NCwxMyBAQCBzdGF0aWMgaW50IF9fcG1kX2ZyZWVfcHRlX3BhZ2UocG1kX3QgKnBtZHAsIHVuc2lnbmVkIGxvbmcgYWRkcixcbiBcdFx0cmV0dXJuIDE7XG4gXHR9XG4gXG4tXHQvKiBTZWUgY29tbWVudCBpbiBwdWRfZnJlZV9wbWRfcGFnZSBmb3Igc3RhdGljIGtleSBsb2dpYyAqL1xuIFx0dGFibGUgPSBwdGVfb2Zmc2V0X2tlcm5lbChwbWRwLCBhZGRyKTtcbiBcdHBtZF9jbGVhcihwbWRwKTtcbiBcdF9fZmx1c2hfdGxiX2tlcm5lbF9wZ3RhYmxlKGFkZHIpO1xuLVx0aWYgKHN0YXRpY19icmFuY2hfdW5saWtlbHkoXHUwMDI2YXJtNjRfcHRkdW1wX2xvY2tfa2V5KSBcdTAwMjZcdTAwMjYgYWNxdWlyZV9tbWFwX2xvY2spIHtcbi1cdFx0bW1hcF9yZWFkX2xvY2soXHUwMDI2aW5pdF9tbSk7XG4tXHRcdG1tYXBfcmVhZF91bmxvY2soXHUwMDI2aW5pdF9tbSk7XG4tXHR9XG4tXG4gXHRwdGVfZnJlZV9rZXJuZWwoTlVMTCwgdGFibGUpO1xuIFx0cmV0dXJuIDE7XG4gfVxuIFxuLWludCBwbWRfZnJlZV9wdGVfcGFnZShwbWRfdCAqcG1kcCwgdW5zaWduZWQgbG9uZyBhZGRyKVxuLXtcbi1cdC8qIElmIHB0ZHVtcCBpcyB3YWxraW5nIHRoZSBwYWdldGFibGVzLCBhY3F1aXJlIGluaXRfbW0ubW1hcF9sb2NrICovXG4tXHRyZXR1cm4gX19wbWRfZnJlZV9wdGVfcGFnZShwbWRwLCBhZGRyLCAvKiBhY3F1aXJlX21tYXBfbG9jayA9ICovIHRydWUpO1xuLX1cbi1cbiBpbnQgcHVkX2ZyZWVfcG1kX3BhZ2UocHVkX3QgKnB1ZHAsIHVuc2lnbmVkIGxvbmcgYWRkcilcbiB7XG4gXHRwbWRfdCAqdGFibGU7XG5AQCAtMTkxMSwzNiAmIzQzOzE4OTYsMTYgQEAgaW50IHB1ZF9mcmVlX3BtZF9wYWdlKHB1ZF90ICpwdWRwLCB1bnNpZ25lZCBsb25nIGFkZHIpXG4gXHR9XG4gXG4gXHR0YWJsZSA9IHBtZF9vZmZzZXQocHVkcCwgYWRkcik7XG4tXG4tXHQvKlxuLVx0ICogT3VyIG9iamVjdGl2ZSBpcyB0byBwcmV2ZW50IHB0ZHVtcCBmcm9tIHJlYWRpbmcgYSBQTUQgdGFibGUgd2hpY2ggaGFzXG4tXHQgKiBiZWVuIGZyZWVkLiBJbiB0aGlzIHJhY2UsIGlmIHB1ZF9mcmVlX3BtZF9wYWdlIG9ic2VydmVzIHRoZSBrZXkgb25cbi1cdCAqICh3aGljaCBnb3QgZmxpcHBlZCBieSBwdGR1bXApIHRoZW4gdGhlIG1tYXAgbG9jayBzZXF1ZW5jZSBoZXJlIHdpbGwsXG4tXHQgKiBhcyBhIHJlc3VsdCBvZiB0aGUgbW1hcCB3cml0ZSBsb2NrL3VubG9jayBzZXF1ZW5jZSBpbiBwdGR1bXAsIGdpdmVcbi1cdCAqIHVzIHRoZSBjb3JyZWN0IHN5bmNocm9uaXphdGlvbi4gSWYgbm90LCB0aGlzIG1lYW5zIHRoYXQgcHRkdW1wIGhhc1xuLVx0ICogeWV0IG5vdCBzdGFydGVkIHdhbGtpbmcgdGhlIHBhZ2V0YWJsZXMgLSB0aGUgc2VxdWVuY2Ugb2YgYmFycmllcnNcbi1cdCAqIGlzc3VlZCBieSBfX2ZsdXNoX3RsYl9rZXJuZWxfcGd0YWJsZSgpIGd1YXJhbnRlZXMgdGhhdCBwdGR1bXAgd2lsbFxuLVx0ICogb2JzZXJ2ZSBhbiBlbXB0eSBQVUQuXG4tXHQgKi9cbi1cdHB1ZF9jbGVhcihwdWRwKTtcbi1cdF9fZmx1c2hfdGxiX2tlcm5lbF9wZ3RhYmxlKGFkZHIpO1xuLVx0aWYgKHN0YXRpY19icmFuY2hfdW5saWtlbHkoXHUwMDI2YXJtNjRfcHRkdW1wX2xvY2tfa2V5KSkge1xuLVx0XHRtbWFwX3JlYWRfbG9jayhcdTAwMjZpbml0X21tKTtcbi1cdFx0bW1hcF9yZWFkX3VubG9jayhcdTAwMjZpbml0X21tKTtcbi1cdH1cbi1cbiBcdHBtZHAgPSB0YWJsZTtcbiBcdG5leHQgPSBhZGRyO1xuIFx0ZW5kID0gYWRkciAmIzQzOyBQVURfU0laRTtcbiBcdGRvIHtcbiBcdFx0aWYgKHBtZF9wcmVzZW50KHBtZHBfZ2V0KHBtZHApKSlcbi1cdFx0XHQvKlxuLVx0XHRcdCAqIFBNRCBoYXMgYmVlbiBpc29sYXRlZCwgc28gcHRkdW1wIHdvbiYjMzk7dCBzZWUgaXQuIE5vXG4tXHRcdFx0ICogbmVlZCB0byBhY3F1aXJlIGluaXRfbW0ubW1hcF9sb2NrLlxuLVx0XHRcdCAqL1xuLVx0XHRcdF9fcG1kX2ZyZWVfcHRlX3BhZ2UocG1kcCwgbmV4dCwgLyogYWNxdWlyZV9tbWFwX2xvY2sgPSAqLyBmYWxzZSk7XG4mIzQzO1x0XHRcdHBtZF9mcmVlX3B0ZV9wYWdlKHBtZHAsIG5leHQpO1xuIFx0fSB3aGlsZSAocG1kcCYjNDM7JiM0MzssIG5leHQgJiM0Mzs9IFBNRF9TSVpFLCBuZXh0ICE9IGVuZCk7XG4gXG4mIzQzO1x0cHVkX2NsZWFyKHB1ZHApO1xuJiM0MztcdF9fZmx1c2hfdGxiX2tlcm5lbF9wZ3RhYmxlKGFkZHIpO1xuIFx0cG1kX2ZyZWUoTlVMTCwgdGFibGUpO1xuIFx0cmV0dXJuIDE7XG4gfVxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvbW0vcHRkdW1wLmMgYi9hcmNoL2FybTY0L21tL3B0ZHVtcC5jXG5pbmRleCAxYzIwMTQ0NzAwZDdkNy4uNWE3NmM1OWI1YWRhNTUgMTAwNjQ0XG4tLS0gYS9hcmNoL2FybTY0L21tL3B0ZHVtcC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL2FybTY0L21tL3B0ZHVtcC5jXG5AQCAtMjgzLDEzICYjNDM7MjgzLDYgQEAgdm9pZCBub3RlX3BhZ2VfZmx1c2goc3RydWN0IHB0ZHVtcF9zdGF0ZSAqcHRfc3QpXG4gXHRub3RlX3BhZ2UocHRfc3QsIDAsIC0xLCBwdGVfdmFsKHB0ZV96ZXJvKSk7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIGFybTY0X3B0ZHVtcF93YWxrX3BnZChzdHJ1Y3QgcHRkdW1wX3N0YXRlICpzdCwgc3RydWN0IG1tX3N0cnVjdCAqbW0pXG4te1xuLVx0c3RhdGljX2JyYW5jaF9pbmMoXHUwMDI2YXJtNjRfcHRkdW1wX2xvY2tfa2V5KTtcbi1cdHB0ZHVtcF93YWxrX3BnZChzdCwgbW0sIE5VTEwpO1xuLVx0c3RhdGljX2JyYW5jaF9kZWMoXHUwMDI2YXJtNjRfcHRkdW1wX2xvY2tfa2V5KTtcbi19XG4tXG4gdm9pZCBwdGR1bXBfd2FsayhzdHJ1Y3Qgc2VxX2ZpbGUgKnMsIHN0cnVjdCBwdGR1bXBfaW5mbyAqaW5mbylcbiB7XG4gXHR1bnNpZ25lZCBsb25nIGVuZCA9IH4wVUw7XG5AQCAtMzE4LDcgJiM0MzszMTEsNyBAQCB2b2lkIHB0ZHVtcF93YWxrKHN0cnVjdCBzZXFfZmlsZSAqcywgc3RydWN0IHB0ZHVtcF9pbmZvICppbmZvKVxuIFx0XHR9XG4gXHR9O1xuIFxuLVx0YXJtNjRfcHRkdW1wX3dhbGtfcGdkKFx1MDAyNnN0LnB0ZHVtcCwgaW5mby1cdTAwM2VtbSk7XG4mIzQzO1x0cHRkdW1wX3dhbGtfcGdkKFx1MDAyNnN0LnB0ZHVtcCwgaW5mby1cdTAwM2VtbSwgTlVMTCk7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIF9faW5pdCBwdGR1bXBfaW5pdGlhbGl6ZSh2b2lkKVxuQEAgLTM2MCw3ICYjNDM7MzUzLDcgQEAgYm9vbCBwdGR1bXBfY2hlY2tfd3godm9pZClcbiBcdFx0fVxuIFx0fTtcbiBcbi1cdGFybTY0X3B0ZHVtcF93YWxrX3BnZChcdTAwMjZzdC5wdGR1bXAsIFx1MDAyNmluaXRfbW0pO1xuJiM0MztcdHB0ZHVtcF93YWxrX3BnZChcdTAwMjZzdC5wdGR1bXAsIFx1MDAyNmluaXRfbW0sIE5VTEwpO1xuIFxuIFx0aWYgKHN0Lnd4X3BhZ2VzIHx8IHN0LnV4bl9wYWdlcykge1xuIFx0XHRwcl93YXJuKFwmIzM0O0NoZWNrZWQgVyYjNDM7WCBtYXBwaW5nczogRkFJTEVELCAlbHUgVyYjNDM7WCBwYWdlcyBmb3VuZCwgJWx1IG5vbi1VWE4gcGFnZXMgZm91bmRcXG5cJiMzNDssXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYyBiL2FyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmNcbmluZGV4IGQwMjNhNDBhMWUwMzQ1Li40YzRiODI0NDUwMmZjZSAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmNcbkBAIC0yMiw2ICYjNDM7MjIsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2NjX3BsYXRmb3JtLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zZXRfbWVtb3J5LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9tZW1yZWdpb24uaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9jbGVhbnVwLmhcdTAwM2VcbiBcbiAjaW5jbHVkZSBcdTAwM2Nhc20vZTgyMC9hcGkuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2FzbS9wcm9jZXNzb3IuaFx1MDAzZVxuQEAgLTQzNiw5ICYjNDM7NDM3LDE2IEBAIHN0YXRpYyB2b2lkIGNwYV9jb2xsYXBzZV9sYXJnZV9wYWdlcyhzdHJ1Y3QgY3BhX2RhdGEgKmNwYSlcbiBcbiBcdGZsdXNoX3RsYl9hbGwoKTtcbiBcbi1cdGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShwdGRlc2MsIHRtcCwgXHUwMDI2cGd0YWJsZXMsIHB0X2xpc3QpIHtcbi1cdFx0bGlzdF9kZWwoXHUwMDI2cHRkZXNjLVx1MDAzZXB0X2xpc3QpO1xuLVx0XHRwYWdldGFibGVfZnJlZShwdGRlc2MpO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogcHRkdW1wIG1pZ2h0IHJlYWQgdGhlc2UgcGFnZSB0YWJsZXMsIHNvIGF2b2lkIGEgdXNlLWFmdGVyLWZyZWUgYnlcbiYjNDM7XHQgKiBhY3F1aXJpbmcgdGhlIG1tYXAgcmVhZCBsb2NrIG9uIGluaXRfbW0gKHB0ZHVtcCBhY3F1aXJlcyB0aGUgbW1hcFxuJiM0MztcdCAqIHdyaXRlIGxvY2spLlxuJiM0MztcdCAqL1xuJiM0MztcdHNjb3BlZF9ndWFyZChtbWFwX3JlYWRfbG9jaywgXHUwMDI2aW5pdF9tbSkge1xuJiM0MztcdFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHB0ZGVzYywgdG1wLCBcdTAwMjZwZ3RhYmxlcywgcHRfbGlzdCkge1xuJiM0MztcdFx0XHRsaXN0X2RlbChcdTAwMjZwdGRlc2MtXHUwMDNlcHRfbGlzdCk7XG4mIzQzO1x0XHRcdHBhZ2V0YWJsZV9mcmVlKHB0ZGVzYyk7XG4mIzQzO1x0XHR9XG4gXHR9XG4gfVxuIFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbW1hcF9sb2NrLmggYi9pbmNsdWRlL2xpbnV4L21tYXBfbG9jay5oXG5pbmRleCAwNGI4ZjYxZWNlNWQ4ZS4uNmI1YzIzOTBjYzMwMWYgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L21tYXBfbG9jay5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L21tYXBfbG9jay5oXG5AQCAtNjIxLDYgJiM0Mzs2MjEsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgbW1hcF9yZWFkX3VubG9jayhzdHJ1Y3QgbW1fc3RydWN0ICptbSlcbiBcbiBERUZJTkVfR1VBUkQobW1hcF9yZWFkX2xvY2ssIHN0cnVjdCBtbV9zdHJ1Y3QgKixcbiBcdCAgICAgbW1hcF9yZWFkX2xvY2soX1QpLCBtbWFwX3JlYWRfdW5sb2NrKF9UKSlcbiYjNDM7REVGSU5FX0dVQVJEX0NPTkQobW1hcF9yZWFkX2xvY2ssIF90cnksIG1tYXBfcmVhZF90cnlsb2NrKF9UKSlcbiBcbiBzdGF0aWMgaW5saW5lIHZvaWQgbW1hcF9yZWFkX3VubG9ja19ub25fb3duZXIoc3RydWN0IG1tX3N0cnVjdCAqbW0pXG4ge1xuZGlmZiAtLWdpdCBhL21tL3BhZ2V3YWxrLmMgYi9tbS9wYWdld2Fsay5jXG5pbmRleCAzYWUyNTg2ZmY0NWI0NC4uNWQ4N2M2MzJhMjU1MDcgMTAwNjQ0XG4tLS0gYS9tbS9wYWdld2Fsay5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9wYWdld2Fsay5jXG5AQCAtNjc4LDYgJiM0Mzs2NzgsOCBAQCBpbnQgd2Fsa19rZXJuZWxfcGFnZV90YWJsZV9yYW5nZV9sb2NrbGVzcyh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZFxuICAqIHdpbGwgYWxzbyBub3QgbG9jayB0aGUgUFRFcyBmb3IgdGhlIHB0ZV9lbnRyeSgpIGNhbGxiYWNrLlxuICAqXG4gICogVGhpcyBpcyBmb3IgZGVidWdnaW5nIHB1cnBvc2VzIE9OTFkuXG4mIzQzOyAqXG4mIzQzOyAqIFRoZSBtbWFwIHdyaXRlIGxvY2sgbXVzdCBiZSBoZWxkLlxuICAqL1xuIGludCB3YWxrX3BhZ2VfcmFuZ2VfZGVidWcoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgc3RhcnQsXG4gXHRcdFx0ICB1bnNpZ25lZCBsb25nIGVuZCwgY29uc3Qgc3RydWN0IG1tX3dhbGtfb3BzICpvcHMsXG5AQCAtNjkxLDI0ICYjNDM7NjkzLDI4IEBAIGludCB3YWxrX3BhZ2VfcmFuZ2VfZGVidWcoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgc3RhcnQsXG4gXHRcdC5ub192bWFcdFx0PSB0cnVlXG4gXHR9O1xuIFxuLVx0LyogRm9yIGNvbnZlbmllbmNlLCB3ZSBhbGxvdyB0cmF2ZXJzYWwgb2Yga2VybmVsIG1hcHBpbmdzLiAqL1xuLVx0aWYgKG1tID09IFx1MDAyNmluaXRfbW0pXG4tXHRcdHJldHVybiB3YWxrX2tlcm5lbF9wYWdlX3RhYmxlX3JhbmdlKHN0YXJ0LCBlbmQsIG9wcyxcbi1cdFx0XHRcdFx0XHQgICAgcGdkLCBwcml2YXRlKTtcbi1cdGlmIChzdGFydCBcdTAwM2U9IGVuZCB8fCAhd2Fsay5tbSlcbi1cdFx0cmV0dXJuIC1FSU5WQUw7XG4tXHRpZiAoIWNoZWNrX29wc19zYWZlKG9wcykpXG4tXHRcdHJldHVybiAtRUlOVkFMO1xuLVxuIFx0Lypcbi1cdCAqIFRoZSBtbWFwIGxvY2sgcHJvdGVjdHMgdGhlIHBhZ2Ugd2Fsa2VyIGZyb20gY2hhbmdlcyB0byB0aGUgcGFnZVxuLVx0ICogdGFibGVzIGR1cmluZyB0aGUgd2Fsay4gIEhvd2V2ZXIgYSByZWFkIGxvY2sgaXMgaW5zdWZmaWNpZW50IHRvXG4tXHQgKiBwcm90ZWN0IHRob3NlIGFyZWFzIHdoaWNoIGRvbiYjMzk7dCBoYXZlIGEgVk1BIGFzIG11bm1hcCgpIGRldGFjaGVzXG4tXHQgKiB0aGUgVk1BcyBiZWZvcmUgZG93bmdyYWRpbmcgdG8gYSByZWFkIGxvY2sgYW5kIGFjdHVhbGx5IHRlYXJpbmdcbi1cdCAqIGRvd24gUFRFcy9wYWdlIHRhYmxlcy4gSW4gd2hpY2ggY2FzZSwgdGhlIG1tYXAgd3JpdGUgbG9jayBzaG91bGRcbi1cdCAqIGJlIGhlbGQuXG4mIzQzO1x0ICogV2hlbiB3YWxraW5nIHVzZXJsYW5kIHBhZ2UgdGFibGVzLCBhbiBtbWFwIHdyaXRlIGxvY2sgbXVzdCBiZSBoZWxkIHRvXG4mIzQzO1x0ICogYWNjb3VudCBmb3IgbXVubWFwKCkgZG93bmdyYWRpbmcgdG8gYW4gbW1hcCByZWFkIGxvY2sgd2hlbiB0ZWFyaW5nXG4mIzQzO1x0ICogZG93biBwYWdlIHRhYmxlcy5cbiYjNDM7XHQgKlxuJiM0MztcdCAqIFdoZW4gd2Fsa2luZyBrZXJuZWwgcGFnZSB0YWJsZXMsIGFuIG1tYXAgd3JpdGUgbG9jayBtdXN0IGFsc28gYmUgaGVsZFxuJiM0MztcdCAqIHRvIGFjY291bnQgZm9yIHBhZ2UgdGFibGUgZnJlZWluZyBvbiB2bWFwIGh1Z2UgcGFnZSBtYXBwaW5nLlxuIFx0ICovXG4gXHRtbWFwX2Fzc2VydF93cml0ZV9sb2NrZWQobW0pO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogeDg2LCBhcm02NCBwdGR1bXAgYWxsb3cgd2Fsa3Mgb2YgZWZpIG1tJiMzOTtzIGFuZCB4ODYgcHRkdW1wIGFsbG93cyB3YWxrc1xuJiM0MztcdCAqIG9mIGFyYml0cmFyeSBtbSYjMzk7cy5cbiYjNDM7XHQgKlxuJiM0MztcdCAqIEhvd2V2ZXIsIHRoZXkgYm90aCBtdXN0IGFsc28gaG9sZCB0aGUgaW5pdF9tbSBsb2NrIHRvIGFjY291bnQgZm9yXG4mIzQzO1x0ICogY29uY3VycmVudCBrZXJuZWwgcGFnZSB0YWJsZSBmcmVlaW5nLlxuJiM0MztcdCAqL1xuJiM0MztcdG1tYXBfYXNzZXJ0X3dyaXRlX2xvY2tlZChcdTAwMjZpbml0X21tKTtcbiYjNDM7XG4mIzQzO1x0aWYgKHN0YXJ0IFx1MDAzZT0gZW5kKVxuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1x0aWYgKCFjaGVja19vcHNfc2FmZShvcHMpKVxuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4gXHRyZXR1cm4gd2Fsa19wZ2RfcmFuZ2Uoc3RhcnQsIGVuZCwgXHUwMDI2d2Fsayk7XG4gfVxuZGlmZiAtLWdpdCBhL21tL3B0ZHVtcC5jIGIvbW0vcHRkdW1wLmNcbmluZGV4IDk3MzAyMDAwMDA5NmNmLi41ODUxMDk2ZTZmNjU2YyAxMDA2NDRcbi0tLSBhL21tL3B0ZHVtcC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9wdGR1bXAuY1xuQEAgLTE3OCwxMSAmIzQzOzE3OCwxOCBAQCB2b2lkIHB0ZHVtcF93YWxrX3BnZChzdHJ1Y3QgcHRkdW1wX3N0YXRlICpzdCwgc3RydWN0IG1tX3N0cnVjdCAqbW0sIHBnZF90ICpwZ2QpXG4gXG4gXHRnZXRfb25saW5lX21lbXMoKTtcbiBcdG1tYXBfd3JpdGVfbG9jayhtbSk7XG4mIzQzO1x0LyogVG8gc3RhYmlsaXNlIGtlcm5lbCBwYWdlIHRhYmxlcyB3ZSBtdXN0IGhvbGQgdGhlIGluaXRfbW0gbG9jayB0b28uICovXG4mIzQzO1x0aWYgKG1tICE9IFx1MDAyNmluaXRfbW0pXG4mIzQzO1x0XHRtbWFwX3dyaXRlX2xvY2tfbmVzdGVkKFx1MDAyNmluaXRfbW0sIFNJTkdMRV9ERVBUSF9ORVNUSU5HKTtcbiYjNDM7XG4gXHR3aGlsZSAocmFuZ2UtXHUwMDNlc3RhcnQgIT0gcmFuZ2UtXHUwMDNlZW5kKSB7XG4gXHRcdHdhbGtfcGFnZV9yYW5nZV9kZWJ1ZyhtbSwgcmFuZ2UtXHUwMDNlc3RhcnQsIHJhbmdlLVx1MDAzZWVuZCxcbiBcdFx0XHRcdCAgICAgIFx1MDAyNnB0ZHVtcF9vcHMsIHBnZCwgc3QpO1xuIFx0XHRyYW5nZSYjNDM7JiM0Mzs7XG4gXHR9XG4mIzQzO1xuJiM0MztcdGlmIChtbSAhPSBcdTAwMjZpbml0X21tKVxuJiM0MztcdFx0bW1hcF93cml0ZV91bmxvY2soXHUwMDI2aW5pdF9tbSk7XG4gXHRtbWFwX3dyaXRlX3VubG9jayhtbSk7XG4gXHRwdXRfb25saW5lX21lbXMoKTtcbiBcbmRpZmYgLS1naXQgYS9tbS92bWFsbG9jLmMgYi9tbS92bWFsbG9jLmNcbmluZGV4IDFhZmNhMzU2OGI5YjY1Li40MDA1NjNhYzZkNWQ3YiAxMDA2NDRcbi0tLSBhL21tL3ZtYWxsb2MuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vdm1hbGxvYy5jXG5AQCAtNDMsNiAmIzQzOzQzLDcgQEBcbiAjaW5jbHVkZSBcdTAwM2Nhc20vdGxiZmx1c2guaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2FzbS9zaG1wYXJhbS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcGFnZV9vd25lci5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2NsZWFudXAuaFx1MDAzZVxuIFxuICNkZWZpbmUgQ1JFQVRFX1RSQUNFX1BPSU5UU1xuICNpbmNsdWRlIFx1MDAzY3RyYWNlL2V2ZW50cy92bWFsbG9jLmhcdTAwM2VcbkBAIC0xNTgsMTAgJiM0MzsxNTksMjIgQEAgc3RhdGljIGludCB2bWFwX3RyeV9odWdlX3BtZChwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLFxuIFx0aWYgKCFJU19BTElHTkVEKHBoeXNfYWRkciwgUE1EX1NJWkUpKVxuIFx0XHRyZXR1cm4gMDtcbiBcbi1cdGlmIChwbWRfcHJlc2VudCgqcG1kKSBcdTAwMjZcdTAwMjYgIXBtZF9mcmVlX3B0ZV9wYWdlKHBtZCwgYWRkcikpXG4tXHRcdHJldHVybiAwO1xuJiM0MztcdGlmICghcG1kX3ByZXNlbnQoKnBtZCkpXG4mIzQzO1x0XHRyZXR1cm4gcG1kX3NldF9odWdlKHBtZCwgcGh5c19hZGRyLCBwcm90KTtcbiBcbi1cdHJldHVybiBwbWRfc2V0X2h1Z2UocG1kLCBwaHlzX2FkZHIsIHByb3QpO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogS2VybmVsIHBhZ2UgdGFibGUgd2Fsa2VycyBlaXRoZXIgd2FsayByYW5nZXMgdGhleSBvd24gZXhjbHVzaXZlbHkgb3JcbiYjNDM7XHQgKiBob2xkIHRoZSBtbWFwIHdyaXRlIGxvY2sgb24gaW5pdF9tbSAocHRkdW1wIGJlaW5nIHRoZSBtb3RpdmF0aW5nXG4mIzQzO1x0ICogY2FzZSkuXG4mIzQzO1x0ICpcbiYjNDM7XHQgKiBUaGVyZWZvcmUsIGFjcXVpcmUgdGhlIG1tYXAgcmVhZCBsb2NrIHRvIHByZXZlbnQgdXNlLWFmdGVyLWZyZWUgd2hlblxuJiM0MztcdCAqIGZyZWVpbmcgcGFnZSB0YWJsZXMuXG4mIzQzO1x0ICovXG4mIzQzO1x0c2NvcGVkX2NvbmRfZ3VhcmQobW1hcF9yZWFkX2xvY2tfdHJ5LCByZXR1cm4gMCwgXHUwMDI2aW5pdF9tbSkge1xuJiM0MztcdFx0aWYgKCFwbWRfZnJlZV9wdGVfcGFnZShwbWQsIGFkZHIpKVxuJiM0MztcdFx0XHRyZXR1cm4gMDtcbiYjNDM7XHRcdHJldHVybiBwbWRfc2V0X2h1Z2UocG1kLCBwaHlzX2FkZHIsIHByb3QpO1xuJiM0MztcdH1cbiB9XG4gXG4gc3RhdGljIGludCB2bWFwX3BtZF9yYW5nZShwdWRfdCAqcHVkLCB1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLFxuQEAgLTIxMCwxMCAmIzQzOzIyMywxNSBAQCBzdGF0aWMgaW50IHZtYXBfdHJ5X2h1Z2VfcHVkKHB1ZF90ICpwdWQsIHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsXG4gXHRpZiAoIUlTX0FMSUdORUQocGh5c19hZGRyLCBQVURfU0laRSkpXG4gXHRcdHJldHVybiAwO1xuIFxuLVx0aWYgKHB1ZF9wcmVzZW50KCpwdWQpIFx1MDAyNlx1MDAyNiAhcHVkX2ZyZWVfcG1kX3BhZ2UocHVkLCBhZGRyKSlcbi1cdFx0cmV0dXJuIDA7XG4mIzQzO1x0aWYgKCFwdWRfcHJlc2VudCgqcHVkKSlcbiYjNDM7XHRcdHJldHVybiBwdWRfc2V0X2h1Z2UocHVkLCBwaHlzX2FkZHIsIHByb3QpO1xuIFxuLVx0cmV0dXJuIHB1ZF9zZXRfaHVnZShwdWQsIHBoeXNfYWRkciwgcHJvdCk7XG4mIzQzO1x0LyogU2VlIGNvbW1lbnQgaW4gdm1hcF90cnlfaHVnZV9wbWQoKS4gKi9cbiYjNDM7XHRzY29wZWRfY29uZF9ndWFyZChtbWFwX3JlYWRfbG9ja190cnksIHJldHVybiAwLCBcdTAwMjZpbml0X21tKSB7XG4mIzQzO1x0XHRpZiAoIXB1ZF9mcmVlX3BtZF9wYWdlKHB1ZCwgYWRkcikpXG4mIzQzO1x0XHRcdHJldHVybiAwO1xuJiM0MztcdFx0cmV0dXJuIHB1ZF9zZXRfaHVnZShwdWQsIHBoeXNfYWRkciwgcHJvdCk7XG4mIzQzO1x0fVxuIH1cbiBcbiBzdGF0aWMgaW50IHZtYXBfcHVkX3JhbmdlKHA0ZF90ICpwNGQsIHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsXG5AQCAtMjYyLDEwICYjNDM7MjgwLDE1IEBAIHN0YXRpYyBpbnQgdm1hcF90cnlfaHVnZV9wNGQocDRkX3QgKnA0ZCwgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCxcbiBcdGlmICghSVNfQUxJR05FRChwaHlzX2FkZHIsIFA0RF9TSVpFKSlcbiBcdFx0cmV0dXJuIDA7XG4gXG4tXHRpZiAocDRkX3ByZXNlbnQoKnA0ZCkgXHUwMDI2XHUwMDI2ICFwNGRfZnJlZV9wdWRfcGFnZShwNGQsIGFkZHIpKVxuLVx0XHRyZXR1cm4gMDtcbiYjNDM7XHRpZiAoIXA0ZF9wcmVzZW50KCpwNGQpKVxuJiM0MztcdFx0cmV0dXJuIHA0ZF9zZXRfaHVnZShwNGQsIHBoeXNfYWRkciwgcHJvdCk7XG4gXG4tXHRyZXR1cm4gcDRkX3NldF9odWdlKHA0ZCwgcGh5c19hZGRyLCBwcm90KTtcbiYjNDM7XHQvKiBTZWUgY29tbWVudCBpbiB2bWFwX3RyeV9odWdlX3BtZCgpLiAqL1xuJiM0MztcdHNjb3BlZF9jb25kX2d1YXJkKG1tYXBfcmVhZF9sb2NrX3RyeSwgcmV0dXJuIDAsIFx1MDAyNmluaXRfbW0pIHtcbiYjNDM7XHRcdGlmICghcDRkX2ZyZWVfcHVkX3BhZ2UocDRkLCBhZGRyKSlcbiYjNDM7XHRcdFx0cmV0dXJuIDA7XG4mIzQzO1x0XHRyZXR1cm4gcDRkX3NldF9odWdlKHA0ZCwgcGh5c19hZGRyLCBwcm90KTtcbiYjNDM7XHR9XG4gfVxuIFxuIHN0YXRpYyBpbnQgdm1hcF9wNGRfcmFuZ2UocGdkX3QgKnBnZCwgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMiAxMzoxMjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtQVERVTVBfREVCVUdGUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3ZtYXBfdHJ5X2h1Z2VfcG1kJiMzNDssCiAgICAmIzM0O3ZtYXBfdHJ5X2h1Z2VfcHVkJiMzNDssCiAgICAmIzM0O3ZtYXBfdHJ5X2h1Z2VfcDRkJiMzNDssCiAgICAmIzM0O2NwYV9jb2xsYXBzZV9sYXJnZV9wYWdlcyYjMzQ7LAogICAgJiMzNDtwdGR1bXBfd2Fsa19wZ2QmIzM0OywKICAgICYjMzQ7d2Fsa19wYWdlX3JhbmdlX2RlYnVnJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUga2VybmVsIGxvZ2ljIGZvciBwYWdlIHRhYmxlIGR1bXBpbmcgYW5kIHZtYWxsb2MgaHVnZSBwYWdlIG1hcHBpbmdzLCBpbnRyb2R1Y2luZyBsb2NraW5nIG9uIGBpbml0X21tYCB0byBwcmV2ZW50IHVzZS1hZnRlci1mcmVlIGR1cmluZyBjb25jdXJyZW50IHBhZ2UgdGFibGUgbW9kaWZpY2F0aW9ucy4gVGhpcyBpcyByZWFjaGFibGUgdmlhIGRlYnVnZnMgYW5kIHZtYWxsb2MgY2FsbHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0CiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSwKICAgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGU1YmY4ZGQ5ODEzMmQ3ZTYxMWYzNjZjNjE0ZGZlNTk3ODhkMDVlM2MKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgU3VuIEp1bCAxMiAxMzoxMTo1OSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vcHRkdW1wLmggYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3B0ZHVtcC5oCmluZGV4IDViMzc0YTZhYjM0YTRlLi41MGExOTVlZGE4ZWQyMiAxMDA2NDQKLS0tIGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9wdGR1bXAuaAomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3B0ZHVtcC5oCkBAIC03LDggJiM0Mzs3LDYgQEAKIAogI2luY2x1ZGUgJmx0O2xpbnV4L3B0ZHVtcC5oJmd0OwogCi1ERUNMQVJFX1NUQVRJQ19LRVlfRkFMU0UoYXJtNjRfcHRkdW1wX2xvY2tfa2V5KTsKLQogI2lmZGVmIENPTkZJR19QVERVTVAKIAogI2luY2x1ZGUgJmx0O2xpbnV4L21tX3R5cGVzLmgmZ3Q7CmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L21tL21tdS5jIGIvYXJjaC9hcm02NC9tbS9tbXUuYwppbmRleCBhMjVkOGJlYWNjODMxMC4uYmQ1MmZjYTZlODcyMGIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtNjQvbW0vbW11LmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9hcm02NC9tbS9tbXUuYwpAQCAtNDksOCAmIzQzOzQ5LDYgQEAKICNkZWZpbmUgTk9fQ09OVF9NQVBQSU5HUwlCSVQoMSkKICNkZWZpbmUgTk9fRVhFQ19NQVBQSU5HUwlCSVQoMikJLyogYXNzdW1lcyBGRUFUX0hQRFMgaXMgbm90IHVzZWQgKi8KIAotREVGSU5FX1NUQVRJQ19LRVlfRkFMU0UoYXJtNjRfcHRkdW1wX2xvY2tfa2V5KTsKLQogdTY0IGtpbWFnZV92b2Zmc2V0IF9fcm9fYWZ0ZXJfaW5pdDsKIEVYUE9SVF9TWU1CT0woa2ltYWdlX3ZvZmZzZXQpOwogCkBAIC0xODY0LDggJiM0MzsxODYyLDcgQEAgaW50IHBtZF9jbGVhcl9odWdlKHBtZF90ICpwbWRwKQogCXJldHVybiAxOwogfQogCi1zdGF0aWMgaW50IF9fcG1kX2ZyZWVfcHRlX3BhZ2UocG1kX3QgKnBtZHAsIHVuc2lnbmVkIGxvbmcgYWRkciwKLQkJCSAgICAgICBib29sIGFjcXVpcmVfbW1hcF9sb2NrKQomIzQzO2ludCBwbWRfZnJlZV9wdGVfcGFnZShwbWRfdCAqcG1kcCwgdW5zaWduZWQgbG9uZyBhZGRyKQogewogCXB0ZV90ICp0YWJsZTsKIAlwbWRfdCBwbWQ7CkBAIC0xODc3LDI1ICYjNDM7MTg3NCwxMyBAQCBzdGF0aWMgaW50IF9fcG1kX2ZyZWVfcHRlX3BhZ2UocG1kX3QgKnBtZHAsIHVuc2lnbmVkIGxvbmcgYWRkciwKIAkJcmV0dXJuIDE7CiAJfQogCi0JLyogU2VlIGNvbW1lbnQgaW4gcHVkX2ZyZWVfcG1kX3BhZ2UgZm9yIHN0YXRpYyBrZXkgbG9naWMgKi8KIAl0YWJsZSA9IHB0ZV9vZmZzZXRfa2VybmVsKHBtZHAsIGFkZHIpOwogCXBtZF9jbGVhcihwbWRwKTsKIAlfX2ZsdXNoX3RsYl9rZXJuZWxfcGd0YWJsZShhZGRyKTsKLQlpZiAoc3RhdGljX2JyYW5jaF91bmxpa2VseSgmYW1wO2FybTY0X3B0ZHVtcF9sb2NrX2tleSkgJmFtcDsmYW1wOyBhY3F1aXJlX21tYXBfbG9jaykgewotCQltbWFwX3JlYWRfbG9jaygmYW1wO2luaXRfbW0pOwotCQltbWFwX3JlYWRfdW5sb2NrKCZhbXA7aW5pdF9tbSk7Ci0JfQotCiAJcHRlX2ZyZWVfa2VybmVsKE5VTEwsIHRhYmxlKTsKIAlyZXR1cm4gMTsKIH0KIAotaW50IHBtZF9mcmVlX3B0ZV9wYWdlKHBtZF90ICpwbWRwLCB1bnNpZ25lZCBsb25nIGFkZHIpCi17Ci0JLyogSWYgcHRkdW1wIGlzIHdhbGtpbmcgdGhlIHBhZ2V0YWJsZXMsIGFjcXVpcmUgaW5pdF9tbS5tbWFwX2xvY2sgKi8KLQlyZXR1cm4gX19wbWRfZnJlZV9wdGVfcGFnZShwbWRwLCBhZGRyLCAvKiBhY3F1aXJlX21tYXBfbG9jayA9ICovIHRydWUpOwotfQotCiBpbnQgcHVkX2ZyZWVfcG1kX3BhZ2UocHVkX3QgKnB1ZHAsIHVuc2lnbmVkIGxvbmcgYWRkcikKIHsKIAlwbWRfdCAqdGFibGU7CkBAIC0xOTExLDM2ICYjNDM7MTg5NiwxNiBAQCBpbnQgcHVkX2ZyZWVfcG1kX3BhZ2UocHVkX3QgKnB1ZHAsIHVuc2lnbmVkIGxvbmcgYWRkcikKIAl9CiAKIAl0YWJsZSA9IHBtZF9vZmZzZXQocHVkcCwgYWRkcik7Ci0KLQkvKgotCSAqIE91ciBvYmplY3RpdmUgaXMgdG8gcHJldmVudCBwdGR1bXAgZnJvbSByZWFkaW5nIGEgUE1EIHRhYmxlIHdoaWNoIGhhcwotCSAqIGJlZW4gZnJlZWQuIEluIHRoaXMgcmFjZSwgaWYgcHVkX2ZyZWVfcG1kX3BhZ2Ugb2JzZXJ2ZXMgdGhlIGtleSBvbgotCSAqICh3aGljaCBnb3QgZmxpcHBlZCBieSBwdGR1bXApIHRoZW4gdGhlIG1tYXAgbG9jayBzZXF1ZW5jZSBoZXJlIHdpbGwsCi0JICogYXMgYSByZXN1bHQgb2YgdGhlIG1tYXAgd3JpdGUgbG9jay91bmxvY2sgc2VxdWVuY2UgaW4gcHRkdW1wLCBnaXZlCi0JICogdXMgdGhlIGNvcnJlY3Qgc3luY2hyb25pemF0aW9uLiBJZiBub3QsIHRoaXMgbWVhbnMgdGhhdCBwdGR1bXAgaGFzCi0JICogeWV0IG5vdCBzdGFydGVkIHdhbGtpbmcgdGhlIHBhZ2V0YWJsZXMgLSB0aGUgc2VxdWVuY2Ugb2YgYmFycmllcnMKLQkgKiBpc3N1ZWQgYnkgX19mbHVzaF90bGJfa2VybmVsX3BndGFibGUoKSBndWFyYW50ZWVzIHRoYXQgcHRkdW1wIHdpbGwKLQkgKiBvYnNlcnZlIGFuIGVtcHR5IFBVRC4KLQkgKi8KLQlwdWRfY2xlYXIocHVkcCk7Ci0JX19mbHVzaF90bGJfa2VybmVsX3BndGFibGUoYWRkcik7Ci0JaWYgKHN0YXRpY19icmFuY2hfdW5saWtlbHkoJmFtcDthcm02NF9wdGR1bXBfbG9ja19rZXkpKSB7Ci0JCW1tYXBfcmVhZF9sb2NrKCZhbXA7aW5pdF9tbSk7Ci0JCW1tYXBfcmVhZF91bmxvY2soJmFtcDtpbml0X21tKTsKLQl9Ci0KIAlwbWRwID0gdGFibGU7CiAJbmV4dCA9IGFkZHI7CiAJZW5kID0gYWRkciAmIzQzOyBQVURfU0laRTsKIAlkbyB7CiAJCWlmIChwbWRfcHJlc2VudChwbWRwX2dldChwbWRwKSkpCi0JCQkvKgotCQkJICogUE1EIGhhcyBiZWVuIGlzb2xhdGVkLCBzbyBwdGR1bXAgd29uJiMzOTt0IHNlZSBpdC4gTm8KLQkJCSAqIG5lZWQgdG8gYWNxdWlyZSBpbml0X21tLm1tYXBfbG9jay4KLQkJCSAqLwotCQkJX19wbWRfZnJlZV9wdGVfcGFnZShwbWRwLCBuZXh0LCAvKiBhY3F1aXJlX21tYXBfbG9jayA9ICovIGZhbHNlKTsKJiM0MzsJCQlwbWRfZnJlZV9wdGVfcGFnZShwbWRwLCBuZXh0KTsKIAl9IHdoaWxlIChwbWRwJiM0MzsmIzQzOywgbmV4dCAmIzQzOz0gUE1EX1NJWkUsIG5leHQgIT0gZW5kKTsKIAomIzQzOwlwdWRfY2xlYXIocHVkcCk7CiYjNDM7CV9fZmx1c2hfdGxiX2tlcm5lbF9wZ3RhYmxlKGFkZHIpOwogCXBtZF9mcmVlKE5VTEwsIHRhYmxlKTsKIAlyZXR1cm4gMTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvbW0vcHRkdW1wLmMgYi9hcmNoL2FybTY0L21tL3B0ZHVtcC5jCmluZGV4IDFjMjAxNDQ3MDBkN2Q3Li41YTc2YzU5YjVhZGE1NSAxMDA2NDQKLS0tIGEvYXJjaC9hcm02NC9tbS9wdGR1bXAuYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL2FybTY0L21tL3B0ZHVtcC5jCkBAIC0yODMsMTMgJiM0MzsyODMsNiBAQCB2b2lkIG5vdGVfcGFnZV9mbHVzaChzdHJ1Y3QgcHRkdW1wX3N0YXRlICpwdF9zdCkKIAlub3RlX3BhZ2UocHRfc3QsIDAsIC0xLCBwdGVfdmFsKHB0ZV96ZXJvKSk7CiB9CiAKLXN0YXRpYyB2b2lkIGFybTY0X3B0ZHVtcF93YWxrX3BnZChzdHJ1Y3QgcHRkdW1wX3N0YXRlICpzdCwgc3RydWN0IG1tX3N0cnVjdCAqbW0pCi17Ci0Jc3RhdGljX2JyYW5jaF9pbmMoJmFtcDthcm02NF9wdGR1bXBfbG9ja19rZXkpOwotCXB0ZHVtcF93YWxrX3BnZChzdCwgbW0sIE5VTEwpOwotCXN0YXRpY19icmFuY2hfZGVjKCZhbXA7YXJtNjRfcHRkdW1wX2xvY2tfa2V5KTsKLX0KLQogdm9pZCBwdGR1bXBfd2FsayhzdHJ1Y3Qgc2VxX2ZpbGUgKnMsIHN0cnVjdCBwdGR1bXBfaW5mbyAqaW5mbykKIHsKIAl1bnNpZ25lZCBsb25nIGVuZCA9IH4wVUw7CkBAIC0zMTgsNyAmIzQzOzMxMSw3IEBAIHZvaWQgcHRkdW1wX3dhbGsoc3RydWN0IHNlcV9maWxlICpzLCBzdHJ1Y3QgcHRkdW1wX2luZm8gKmluZm8pCiAJCX0KIAl9OwogCi0JYXJtNjRfcHRkdW1wX3dhbGtfcGdkKCZhbXA7c3QucHRkdW1wLCBpbmZvLSZndDttbSk7CiYjNDM7CXB0ZHVtcF93YWxrX3BnZCgmYW1wO3N0LnB0ZHVtcCwgaW5mby0mZ3Q7bW0sIE5VTEwpOwogfQogCiBzdGF0aWMgdm9pZCBfX2luaXQgcHRkdW1wX2luaXRpYWxpemUodm9pZCkKQEAgLTM2MCw3ICYjNDM7MzUzLDcgQEAgYm9vbCBwdGR1bXBfY2hlY2tfd3godm9pZCkKIAkJfQogCX07CiAKLQlhcm02NF9wdGR1bXBfd2Fsa19wZ2QoJmFtcDtzdC5wdGR1bXAsICZhbXA7aW5pdF9tbSk7CiYjNDM7CXB0ZHVtcF93YWxrX3BnZCgmYW1wO3N0LnB0ZHVtcCwgJmFtcDtpbml0X21tLCBOVUxMKTsKIAogCWlmIChzdC53eF9wYWdlcyB8fCBzdC51eG5fcGFnZXMpIHsKIAkJcHJfd2FybigmIzM0O0NoZWNrZWQgVyYjNDM7WCBtYXBwaW5nczogRkFJTEVELCAlbHUgVyYjNDM7WCBwYWdlcyBmb3VuZCwgJWx1IG5vbi1VWE4gcGFnZXMgZm91bmRcbiYjMzQ7LApkaWZmIC0tZ2l0IGEvYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYyBiL2FyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMKaW5kZXggZDAyM2E0MGExZTAzNDUuLjRjNGI4MjQ0NTAyZmNlIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMKQEAgLTIyLDYgJiM0MzsyMiw3IEBACiAjaW5jbHVkZSAmbHQ7bGludXgvY2NfcGxhdGZvcm0uaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9zZXRfbWVtb3J5LmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvbWVtcmVnaW9uLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2NsZWFudXAuaCZndDsKIAogI2luY2x1ZGUgJmx0O2FzbS9lODIwL2FwaS5oJmd0OwogI2luY2x1ZGUgJmx0O2FzbS9wcm9jZXNzb3IuaCZndDsKQEAgLTQzNiw5ICYjNDM7NDM3LDE2IEBAIHN0YXRpYyB2b2lkIGNwYV9jb2xsYXBzZV9sYXJnZV9wYWdlcyhzdHJ1Y3QgY3BhX2RhdGEgKmNwYSkKIAogCWZsdXNoX3RsYl9hbGwoKTsKIAotCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShwdGRlc2MsIHRtcCwgJmFtcDtwZ3RhYmxlcywgcHRfbGlzdCkgewotCQlsaXN0X2RlbCgmYW1wO3B0ZGVzYy0mZ3Q7cHRfbGlzdCk7Ci0JCXBhZ2V0YWJsZV9mcmVlKHB0ZGVzYyk7CiYjNDM7CS8qCiYjNDM7CSAqIHB0ZHVtcCBtaWdodCByZWFkIHRoZXNlIHBhZ2UgdGFibGVzLCBzbyBhdm9pZCBhIHVzZS1hZnRlci1mcmVlIGJ5CiYjNDM7CSAqIGFjcXVpcmluZyB0aGUgbW1hcCByZWFkIGxvY2sgb24gaW5pdF9tbSAocHRkdW1wIGFjcXVpcmVzIHRoZSBtbWFwCiYjNDM7CSAqIHdyaXRlIGxvY2spLgomIzQzOwkgKi8KJiM0MzsJc2NvcGVkX2d1YXJkKG1tYXBfcmVhZF9sb2NrLCAmYW1wO2luaXRfbW0pIHsKJiM0MzsJCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShwdGRlc2MsIHRtcCwgJmFtcDtwZ3RhYmxlcywgcHRfbGlzdCkgewomIzQzOwkJCWxpc3RfZGVsKCZhbXA7cHRkZXNjLSZndDtwdF9saXN0KTsKJiM0MzsJCQlwYWdldGFibGVfZnJlZShwdGRlc2MpOwomIzQzOwkJfQogCX0KIH0KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tbWFwX2xvY2suaCBiL2luY2x1ZGUvbGludXgvbW1hcF9sb2NrLmgKaW5kZXggMDRiOGY2MWVjZTVkOGUuLjZiNWMyMzkwY2MzMDFmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21tYXBfbG9jay5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvbW1hcF9sb2NrLmgKQEAgLTYyMSw2ICYjNDM7NjIxLDcgQEAgc3RhdGljIGlubGluZSB2b2lkIG1tYXBfcmVhZF91bmxvY2soc3RydWN0IG1tX3N0cnVjdCAqbW0pCiAKIERFRklORV9HVUFSRChtbWFwX3JlYWRfbG9jaywgc3RydWN0IG1tX3N0cnVjdCAqLAogCSAgICAgbW1hcF9yZWFkX2xvY2soX1QpLCBtbWFwX3JlYWRfdW5sb2NrKF9UKSkKJiM0MztERUZJTkVfR1VBUkRfQ09ORChtbWFwX3JlYWRfbG9jaywgX3RyeSwgbW1hcF9yZWFkX3RyeWxvY2soX1QpKQogCiBzdGF0aWMgaW5saW5lIHZvaWQgbW1hcF9yZWFkX3VubG9ja19ub25fb3duZXIoc3RydWN0IG1tX3N0cnVjdCAqbW0pCiB7CmRpZmYgLS1naXQgYS9tbS9wYWdld2Fsay5jIGIvbW0vcGFnZXdhbGsuYwppbmRleCAzYWUyNTg2ZmY0NWI0NC4uNWQ4N2M2MzJhMjU1MDcgMTAwNjQ0Ci0tLSBhL21tL3BhZ2V3YWxrLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vcGFnZXdhbGsuYwpAQCAtNjc4LDYgJiM0Mzs2NzgsOCBAQCBpbnQgd2Fsa19rZXJuZWxfcGFnZV90YWJsZV9yYW5nZV9sb2NrbGVzcyh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZAogICogd2lsbCBhbHNvIG5vdCBsb2NrIHRoZSBQVEVzIGZvciB0aGUgcHRlX2VudHJ5KCkgY2FsbGJhY2suCiAgKgogICogVGhpcyBpcyBmb3IgZGVidWdnaW5nIHB1cnBvc2VzIE9OTFkuCiYjNDM7ICoKJiM0MzsgKiBUaGUgbW1hcCB3cml0ZSBsb2NrIG11c3QgYmUgaGVsZC4KICAqLwogaW50IHdhbGtfcGFnZV9yYW5nZV9kZWJ1ZyhzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBzdGFydCwKIAkJCSAgdW5zaWduZWQgbG9uZyBlbmQsIGNvbnN0IHN0cnVjdCBtbV93YWxrX29wcyAqb3BzLApAQCAtNjkxLDI0ICYjNDM7NjkzLDI4IEBAIGludCB3YWxrX3BhZ2VfcmFuZ2VfZGVidWcoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgc3RhcnQsCiAJCS5ub192bWEJCT0gdHJ1ZQogCX07CiAKLQkvKiBGb3IgY29udmVuaWVuY2UsIHdlIGFsbG93IHRyYXZlcnNhbCBvZiBrZXJuZWwgbWFwcGluZ3MuICovCi0JaWYgKG1tID09ICZhbXA7aW5pdF9tbSkKLQkJcmV0dXJuIHdhbGtfa2VybmVsX3BhZ2VfdGFibGVfcmFuZ2Uoc3RhcnQsIGVuZCwgb3BzLAotCQkJCQkJICAgIHBnZCwgcHJpdmF0ZSk7Ci0JaWYgKHN0YXJ0ICZndDs9IGVuZCB8fCAhd2Fsay5tbSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JaWYgKCFjaGVja19vcHNfc2FmZShvcHMpKQotCQlyZXR1cm4gLUVJTlZBTDsKLQogCS8qCi0JICogVGhlIG1tYXAgbG9jayBwcm90ZWN0cyB0aGUgcGFnZSB3YWxrZXIgZnJvbSBjaGFuZ2VzIHRvIHRoZSBwYWdlCi0JICogdGFibGVzIGR1cmluZyB0aGUgd2Fsay4gIEhvd2V2ZXIgYSByZWFkIGxvY2sgaXMgaW5zdWZmaWNpZW50IHRvCi0JICogcHJvdGVjdCB0aG9zZSBhcmVhcyB3aGljaCBkb24mIzM5O3QgaGF2ZSBhIFZNQSBhcyBtdW5tYXAoKSBkZXRhY2hlcwotCSAqIHRoZSBWTUFzIGJlZm9yZSBkb3duZ3JhZGluZyB0byBhIHJlYWQgbG9jayBhbmQgYWN0dWFsbHkgdGVhcmluZwotCSAqIGRvd24gUFRFcy9wYWdlIHRhYmxlcy4gSW4gd2hpY2ggY2FzZSwgdGhlIG1tYXAgd3JpdGUgbG9jayBzaG91bGQKLQkgKiBiZSBoZWxkLgomIzQzOwkgKiBXaGVuIHdhbGtpbmcgdXNlcmxhbmQgcGFnZSB0YWJsZXMsIGFuIG1tYXAgd3JpdGUgbG9jayBtdXN0IGJlIGhlbGQgdG8KJiM0MzsJICogYWNjb3VudCBmb3IgbXVubWFwKCkgZG93bmdyYWRpbmcgdG8gYW4gbW1hcCByZWFkIGxvY2sgd2hlbiB0ZWFyaW5nCiYjNDM7CSAqIGRvd24gcGFnZSB0YWJsZXMuCiYjNDM7CSAqCiYjNDM7CSAqIFdoZW4gd2Fsa2luZyBrZXJuZWwgcGFnZSB0YWJsZXMsIGFuIG1tYXAgd3JpdGUgbG9jayBtdXN0IGFsc28gYmUgaGVsZAomIzQzOwkgKiB0byBhY2NvdW50IGZvciBwYWdlIHRhYmxlIGZyZWVpbmcgb24gdm1hcCBodWdlIHBhZ2UgbWFwcGluZy4KIAkgKi8KIAltbWFwX2Fzc2VydF93cml0ZV9sb2NrZWQobW0pOwomIzQzOwkvKgomIzQzOwkgKiB4ODYsIGFybTY0IHB0ZHVtcCBhbGxvdyB3YWxrcyBvZiBlZmkgbW0mIzM5O3MgYW5kIHg4NiBwdGR1bXAgYWxsb3dzIHdhbGtzCiYjNDM7CSAqIG9mIGFyYml0cmFyeSBtbSYjMzk7cy4KJiM0MzsJICoKJiM0MzsJICogSG93ZXZlciwgdGhleSBib3RoIG11c3QgYWxzbyBob2xkIHRoZSBpbml0X21tIGxvY2sgdG8gYWNjb3VudCBmb3IKJiM0MzsJICogY29uY3VycmVudCBrZXJuZWwgcGFnZSB0YWJsZSBmcmVlaW5nLgomIzQzOwkgKi8KJiM0MzsJbW1hcF9hc3NlcnRfd3JpdGVfbG9ja2VkKCZhbXA7aW5pdF9tbSk7CiYjNDM7CiYjNDM7CWlmIChzdGFydCAmZ3Q7PSBlbmQpCiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJaWYgKCFjaGVja19vcHNfc2FmZShvcHMpKQomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiAKIAlyZXR1cm4gd2Fsa19wZ2RfcmFuZ2Uoc3RhcnQsIGVuZCwgJmFtcDt3YWxrKTsKIH0KZGlmZiAtLWdpdCBhL21tL3B0ZHVtcC5jIGIvbW0vcHRkdW1wLmMKaW5kZXggOTczMDIwMDAwMDk2Y2YuLjU4NTEwOTZlNmY2NTZjIDEwMDY0NAotLS0gYS9tbS9wdGR1bXAuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9wdGR1bXAuYwpAQCAtMTc4LDExICYjNDM7MTc4LDE4IEBAIHZvaWQgcHRkdW1wX3dhbGtfcGdkKHN0cnVjdCBwdGR1bXBfc3RhdGUgKnN0LCBzdHJ1Y3QgbW1fc3RydWN0ICptbSwgcGdkX3QgKnBnZCkKIAogCWdldF9vbmxpbmVfbWVtcygpOwogCW1tYXBfd3JpdGVfbG9jayhtbSk7CiYjNDM7CS8qIFRvIHN0YWJpbGlzZSBrZXJuZWwgcGFnZSB0YWJsZXMgd2UgbXVzdCBob2xkIHRoZSBpbml0X21tIGxvY2sgdG9vLiAqLwomIzQzOwlpZiAobW0gIT0gJmFtcDtpbml0X21tKQomIzQzOwkJbW1hcF93cml0ZV9sb2NrX25lc3RlZCgmYW1wO2luaXRfbW0sIFNJTkdMRV9ERVBUSF9ORVNUSU5HKTsKJiM0MzsKIAl3aGlsZSAocmFuZ2UtJmd0O3N0YXJ0ICE9IHJhbmdlLSZndDtlbmQpIHsKIAkJd2Fsa19wYWdlX3JhbmdlX2RlYnVnKG1tLCByYW5nZS0mZ3Q7c3RhcnQsIHJhbmdlLSZndDtlbmQsCiAJCQkJICAgICAgJmFtcDtwdGR1bXBfb3BzLCBwZ2QsIHN0KTsKIAkJcmFuZ2UmIzQzOyYjNDM7OwogCX0KJiM0MzsKJiM0MzsJaWYgKG1tICE9ICZhbXA7aW5pdF9tbSkKJiM0MzsJCW1tYXBfd3JpdGVfdW5sb2NrKCZhbXA7aW5pdF9tbSk7CiAJbW1hcF93cml0ZV91bmxvY2sobW0pOwogCXB1dF9vbmxpbmVfbWVtcygpOwogCmRpZmYgLS1naXQgYS9tbS92bWFsbG9jLmMgYi9tbS92bWFsbG9jLmMKaW5kZXggMWFmY2EzNTY4YjliNjUuLjQwMDU2M2FjNmQ1ZDdiIDEwMDY0NAotLS0gYS9tbS92bWFsbG9jLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vdm1hbGxvYy5jCkBAIC00Myw2ICYjNDM7NDMsNyBAQAogI2luY2x1ZGUgJmx0O2FzbS90bGJmbHVzaC5oJmd0OwogI2luY2x1ZGUgJmx0O2FzbS9zaG1wYXJhbS5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3BhZ2Vfb3duZXIuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvY2xlYW51cC5oJmd0OwogCiAjZGVmaW5lIENSRUFURV9UUkFDRV9QT0lOVFMKICNpbmNsdWRlICZsdDt0cmFjZS9ldmVudHMvdm1hbGxvYy5oJmd0OwpAQCAtMTU4LDEwICYjNDM7MTU5LDIyIEBAIHN0YXRpYyBpbnQgdm1hcF90cnlfaHVnZV9wbWQocG1kX3QgKnBtZCwgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCwKIAlpZiAoIUlTX0FMSUdORUQocGh5c19hZGRyLCBQTURfU0laRSkpCiAJCXJldHVybiAwOwogCi0JaWYgKHBtZF9wcmVzZW50KCpwbWQpICZhbXA7JmFtcDsgIXBtZF9mcmVlX3B0ZV9wYWdlKHBtZCwgYWRkcikpCi0JCXJldHVybiAwOwomIzQzOwlpZiAoIXBtZF9wcmVzZW50KCpwbWQpKQomIzQzOwkJcmV0dXJuIHBtZF9zZXRfaHVnZShwbWQsIHBoeXNfYWRkciwgcHJvdCk7CiAKLQlyZXR1cm4gcG1kX3NldF9odWdlKHBtZCwgcGh5c19hZGRyLCBwcm90KTsKJiM0MzsJLyoKJiM0MzsJICogS2VybmVsIHBhZ2UgdGFibGUgd2Fsa2VycyBlaXRoZXIgd2FsayByYW5nZXMgdGhleSBvd24gZXhjbHVzaXZlbHkgb3IKJiM0MzsJICogaG9sZCB0aGUgbW1hcCB3cml0ZSBsb2NrIG9uIGluaXRfbW0gKHB0ZHVtcCBiZWluZyB0aGUgbW90aXZhdGluZwomIzQzOwkgKiBjYXNlKS4KJiM0MzsJICoKJiM0MzsJICogVGhlcmVmb3JlLCBhY3F1aXJlIHRoZSBtbWFwIHJlYWQgbG9jayB0byBwcmV2ZW50IHVzZS1hZnRlci1mcmVlIHdoZW4KJiM0MzsJICogZnJlZWluZyBwYWdlIHRhYmxlcy4KJiM0MzsJICovCiYjNDM7CXNjb3BlZF9jb25kX2d1YXJkKG1tYXBfcmVhZF9sb2NrX3RyeSwgcmV0dXJuIDAsICZhbXA7aW5pdF9tbSkgewomIzQzOwkJaWYgKCFwbWRfZnJlZV9wdGVfcGFnZShwbWQsIGFkZHIpKQomIzQzOwkJCXJldHVybiAwOwomIzQzOwkJcmV0dXJuIHBtZF9zZXRfaHVnZShwbWQsIHBoeXNfYWRkciwgcHJvdCk7CiYjNDM7CX0KIH0KIAogc3RhdGljIGludCB2bWFwX3BtZF9yYW5nZShwdWRfdCAqcHVkLCB1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLApAQCAtMjEwLDEwICYjNDM7MjIzLDE1IEBAIHN0YXRpYyBpbnQgdm1hcF90cnlfaHVnZV9wdWQocHVkX3QgKnB1ZCwgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCwKIAlpZiAoIUlTX0FMSUdORUQocGh5c19hZGRyLCBQVURfU0laRSkpCiAJCXJldHVybiAwOwogCi0JaWYgKHB1ZF9wcmVzZW50KCpwdWQpICZhbXA7JmFtcDsgIXB1ZF9mcmVlX3BtZF9wYWdlKHB1ZCwgYWRkcikpCi0JCXJldHVybiAwOwomIzQzOwlpZiAoIXB1ZF9wcmVzZW50KCpwdWQpKQomIzQzOwkJcmV0dXJuIHB1ZF9zZXRfaHVnZShwdWQsIHBoeXNfYWRkciwgcHJvdCk7CiAKLQlyZXR1cm4gcHVkX3NldF9odWdlKHB1ZCwgcGh5c19hZGRyLCBwcm90KTsKJiM0MzsJLyogU2VlIGNvbW1lbnQgaW4gdm1hcF90cnlfaHVnZV9wbWQoKS4gKi8KJiM0MzsJc2NvcGVkX2NvbmRfZ3VhcmQobW1hcF9yZWFkX2xvY2tfdHJ5LCByZXR1cm4gMCwgJmFtcDtpbml0X21tKSB7CiYjNDM7CQlpZiAoIXB1ZF9mcmVlX3BtZF9wYWdlKHB1ZCwgYWRkcikpCiYjNDM7CQkJcmV0dXJuIDA7CiYjNDM7CQlyZXR1cm4gcHVkX3NldF9odWdlKHB1ZCwgcGh5c19hZGRyLCBwcm90KTsKJiM0MzsJfQogfQogCiBzdGF0aWMgaW50IHZtYXBfcHVkX3JhbmdlKHA0ZF90ICpwNGQsIHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsCkBAIC0yNjIsMTAgJiM0MzsyODAsMTUgQEAgc3RhdGljIGludCB2bWFwX3RyeV9odWdlX3A0ZChwNGRfdCAqcDRkLCB1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLAogCWlmICghSVNfQUxJR05FRChwaHlzX2FkZHIsIFA0RF9TSVpFKSkKIAkJcmV0dXJuIDA7CiAKLQlpZiAocDRkX3ByZXNlbnQoKnA0ZCkgJmFtcDsmYW1wOyAhcDRkX2ZyZWVfcHVkX3BhZ2UocDRkLCBhZGRyKSkKLQkJcmV0dXJuIDA7CiYjNDM7CWlmICghcDRkX3ByZXNlbnQoKnA0ZCkpCiYjNDM7CQlyZXR1cm4gcDRkX3NldF9odWdlKHA0ZCwgcGh5c19hZGRyLCBwcm90KTsKIAotCXJldHVybiBwNGRfc2V0X2h1Z2UocDRkLCBwaHlzX2FkZHIsIHByb3QpOwomIzQzOwkvKiBTZWUgY29tbWVudCBpbiB2bWFwX3RyeV9odWdlX3BtZCgpLiAqLwomIzQzOwlzY29wZWRfY29uZF9ndWFyZChtbWFwX3JlYWRfbG9ja190cnksIHJldHVybiAwLCAmYW1wO2luaXRfbW0pIHsKJiM0MzsJCWlmICghcDRkX2ZyZWVfcHVkX3BhZ2UocDRkLCBhZGRyKSkKJiM0MzsJCQlyZXR1cm4gMDsKJiM0MzsJCXJldHVybiBwNGRfc2V0X2h1Z2UocDRkLCBwaHlzX2FkZHIsIHByb3QpOwomIzQzOwl9CiB9CiAKIHN0YXRpYyBpbnQgdm1hcF9wNGRfcmFuZ2UocGdkX3QgKnBnZCwgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCwKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTIgMTM6MTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjM2NQoJCQkJCQkJb3V0cHV0OiAxOAoJCQkJCQkJdGhvdWdodHM6IDM4MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFBhZ2UgVGFibGUgRHVtcGluZyBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaC4gSXQgc2VlbXMgbGlrZSBhIHByZXR0eSBzaWduaWZpY2FudCBjaGFuZ2UsIHNwZWNpZmljYWxseSB0YXJnZXRpbmcgdGhlIHN5bmNocm9uaXphdGlvbiBtZWNoYW5pc20gZm9yIHBhZ2UgdGFibGUgZHVtcGluZyAoYHB0ZHVtcGApIGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggdm1hbGxvYyBodWdlIHBhZ2UgbWFwcGluZ3MsIHdoaWNoIGlzIGEga2V5IGFyZWEgZm9yIGhpZ2gtcGVyZm9ybWFuY2UgbWVtb3J5IG1hbmFnZW1lbnQsIGFuZCBhbHNvIGltcGFjdHMgeDg2IENQQS4gRnJvbSB3aGF0IEkgY2FuIGdhdGhlciwgaXQgcmVtb3ZlcyB0aGUgYGFybTY0X3B0ZHVtcF9sb2NrX2tleWAgc3RhdGljIGtleSBvbiBBUk02NCBhbmQgcmVwbGFjZXMgaXQgd2l0aCB0aGUgbW9yZSBjb252ZW50aW9uYWwgYG1tYXBfcmVhZF9sb2NrYC9gbW1hcF93cml0ZV9sb2NrYCBsb2NrcyBvbiBgaW5pdF9tbWAgdG8gcHJvdGVjdCBhZ2FpbnN0IGNvbmN1cnJlbnQgbW9kaWZpY2F0aW9ucy4gVGhpcyBhZmZlY3RzIGNvcmUga2VybmVsIGZpbGVzOiBgbW0vdm1hbGxvYy5jYCwgYGFyY2gvYXJtNjQvbW0vbW11LmNgLCBgYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuY2AsIGFuZCBgbW0vcHRkdW1wLmNgLgoKTXkgaW1tZWRpYXRlIGNvbmNlcm4gaXMgd2hldGhlciB0aGlzIGNoYW5nZSBpcyBhY3R1YWxseSAqcmVhY2hhYmxlKiBhbmQgKnRlc3RhYmxlKiBpbiBhIHByYWN0aWNhbCBzY2VuYXJpby4gIGBwdGR1bXBgIGl0c2VsZiBpcywgb2YgY291cnNlLCB1c3VhbGx5IGFjY2Vzc2VkIHZpYSBkZWJ1Z2ZzIHVuZGVyIGAvc3lzL2tlcm5lbC9kZWJ1Zy9wYWdlX3RhYmxlcy9rZXJuZWxgIChhbmQgc2ltaWxhciBwYXRocyksIHNvIHRoYXQmIzM5O3MgdGhlIG9idmlvdXMgZW50cnkgcG9pbnQuICBUaGVuIEkgbmVlZCB0byB0aGluayBhYm91dCBgdm1hbGxvY2AgaHVnZSBwYWdlcy4gIFRoZXkgYXJlIG9ubHkgZW5nYWdlZCBpZiBgQ09ORklHX0hBVkVfQVJDSF9IVUdFX1ZNQUxMT0NgIGlzIGVuYWJsZWQgYW5kIGB2bWFsbG9jYCBpcyBjYWxsZWQgd2l0aCB0aGUgcmlnaHQgZmxhZ3MuIFRoZSBwYXRjaCBzZWVtcyB0byBiZSB0b3VjaGluZyBgdm1hcF90cnlfaHVnZV9wbWRgLCBgdm1hcF90cnlfaHVnZV9wdWRgLCBgdm1hcF90cnlfaHVnZV9wNGRgIGluIGBtbS92bWFsbG9jLmNgLCBhbmQgYGNwYV9jb2xsYXBzZV9sYXJnZV9wYWdlc2AgaW4gYGFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmNgIGFuZCBgcHRkdW1wX3dhbGtfcGdkYCBpbiBgbW0vcHRkdW1wLmNgLiBUaGF0IGdpdmVzIG1lIGEgZGVjZW50IGlkZWEgb2YgaG93IHRoZXNlIGRpZmZlcmVudCBhc3BlY3RzIG9mIHRoZSBwYWdlIHRhYmxlIHN5c3RlbSByZWxhdGUgdG8gZWFjaCBvdGhlci4KCk5vdywgbGV0JiMzOTtzIG5haWwgZG93biB0aG9zZSBjb25maWcgb3B0aW9ucy4gYENPTkZJR19QVERVTVBfQ09SRWAgc2VlbXMgdG8gYmUgdGhlIGZ1bmRhbWVudGFsIGVuYWJsaW5nIG9wdGlvbiwgdHlwaWNhbGx5IHNlbGVjdGVkIHRocm91Z2ggYENPTkZJR19QVERVTVBfREVCVUdGU2AsIHdoaWNoIGlzIHByZXR0eSBzdGFuZGFyZC4gSSBuZWVkIHRvIGRvdWJsZS1jaGVjayBgbW0vcHRkdW1wLmNgIGFuZCBwb3RlbnRpYWxseSBgYXJjaC9hcm02NC9tbS9wdGR1bXAuY2AgdG8gYmUgY2VydGFpbiwgdG8gdW5kZXJzdGFuZCB0aGUgZXhhY3QgY29uZGl0aW9ucyB1bmRlciB3aGljaCB0aGlzIGNvZGUgaXMgYWN0aXZlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEyIDEzOjEyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBQVERVTVAmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9hcm02NC9rdm0vS2NvbmZpZz00NT1pZiBLVk1cbmFyY2gvYXJtNjQva3ZtL0tjb25maWctNDYtXG5hcmNoL2FybTY0L2t2bS9LY29uZmlnOjQ3OmNvbmZpZyBQVERVTVBfU1RBR0UyX0RFQlVHRlNcbmFyY2gvYXJtNjQva3ZtL0tjb25maWctNDgtXHRib29sIFwmIzM0O1ByZXNlbnQgdGhlIHN0YWdlLTIgcGFnZXRhYmxlcyB0byBkZWJ1Z2ZzXCYjMzQ7XG4tLVxubW0vS2NvbmZpZy5kZWJ1Zz0yMTY9Y29uZmlnIEFSQ0hfSEFTX1BURFVNUFxuLS1cbm1tL0tjb25maWcuZGVidWctMjE4LVxubW0vS2NvbmZpZy5kZWJ1ZzoyMTk6Y29uZmlnIFBURFVNUFxubW0vS2NvbmZpZy5kZWJ1Zy0yMjAtXHRib29sXG5tbS9LY29uZmlnLmRlYnVnLTIyMS1cbm1tL0tjb25maWcuZGVidWc6MjIyOmNvbmZpZyBQVERVTVBfREVCVUdGU1xubW0vS2NvbmZpZy5kZWJ1Zy0yMjMtXHRib29sIFwmIzM0O0V4cG9ydCBrZXJuZWwgcGFnZXRhYmxlIGxheW91dCB0byB1c2Vyc3BhY2UgdmlhIGRlYnVnZnNcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMiAxMzoxMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NTA1CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogNjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBzZWUuLi4KCioqSW52ZXN0aWdhdGluZyB0aGUgcHRkdW1wIENvbmZpZ3VyYXRpb24qKgoKUmlnaHQsIHNvIGBDT05GSUdfUFREVU1QX0RFQlVHRlNgIGlzIHRoZSBmbGFnIHdlJiMzOTtyZSB3b3JraW5nIHdpdGggaGVyZSB0byBlbmFibGUgcHRkdW1wLCBnb3QgaXQuIE5vdyBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgZGVwZW5kZW5jaWVzIGFuZCB3aGVyZSB0aGlzIGFjdHVhbGx5IGdldHMgdXNlZC4gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gY2hlY2sgYGFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmNgLiBJIHdvbmRlciwgaXMgaXQgY29uZGl0aW9uYWxseSBjb21waWxlZCBiYXNlZCBvbiBgQ09ORklHX1g4Nl9QQVRgLCBvciBpcyBpdCBhbHdheXMgaW5jbHVkZWQgaWYgd2UmIzM5O3JlIG9uIGFuIHg4NiBhcmNoaXRlY3R1cmU/IEkgc2hvdWxkIHByb2JhYmx5IGNyb3NzLXJlZmVyZW5jZSB0aGUgYnVpbGQgY29uZmlndXJhdGlvbiBhbmQgc2VlIGhvdyB0aG9zZSB0d28gYXJlIHJlbGF0ZWQuIEtub3dpbmcgdGhpcyB3aWxsIGhlbHAgbWUgdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIGVuYWJsaW5nIGBDT05GSUdfUFREVU1QX0RFQlVHRlNgIGFuZCB3aGV0aGVyIHdlJiMzOTtyZSBwb3RlbnRpYWxseSBpbnRyb2R1Y2luZyBjb2RlIGJsb2F0IG9yIHVuaW50ZW5kZWQgYmVoYXZpb3Igb24gc3BlY2lmaWMgeDg2IHBsYXRmb3Jtcy4gVGltZSB0byBkaXZlIGludG8gdGhlIHNvdXJjZSBhbmQgdGhlIHJlbGV2YW50IEtjb25maWcgZmlsZXMhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTIgMTM6MTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2V0X21lbW9yeVxcLm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4Ni9tbS9wYXQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L21tL3BhdC9NYWtlZmlsZS0yLVxuYXJjaC94ODYvbW0vcGF0L01ha2VmaWxlOjM6b2JqLXlcdFx0XHRcdDo9IHNldF9tZW1vcnkubyBtZW10eXBlLm9cbmFyY2gveDg2L21tL3BhdC9NYWtlZmlsZS00LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEyIDEzOjEyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc4NjUKCQkJCQkJCW91dHB1dDogMjQKCQkJCQkJCXRob3VnaHRzOiAyOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgcHJlc2VudGVkIGFzIGEgZmlyc3QtcGVyc29uIGV4cGVydCBzdW1tYXJ5OgoKKipYODYgQmlhcyBhbmQgSHVnZSB2bWFsbG9jIENvbnNpZGVyYXRpb25zKioKCkFscmlnaHQsIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGNvZGUgYW5kIGEgbmFnZ2luZyB0aG91Z2h0IGtlZXBzIHBvcHBpbmcgdXA6ICppdCYjMzk7cyBhbHdheXMgY29tcGlsZWQgb24geDg2Ki4gVGhhdCYjMzk7cyB0aGUgYmFzZWxpbmUsIHRoZSBhc3N1bWVkIGFyY2hpdGVjdHVyZS4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJiMzOTttIG5vdCBtYWtpbmcgaW1wbGljaXQgYXNzdW1wdGlvbnMgYWJvdXQgdGhlIGFyY2hpdGVjdHVyZS4gSSYjMzk7bSBnZXR0aW5nIGEgZmVlbGluZyB0aGF0IHNvbWV0aGluZyBtaWdodCBub3Qgd29yayBhcyBpdCBzaG91bGQgb24gb3RoZXIgYXJjaGl0ZWN0dXJlcy4KCk5vdyBJIG5lZWQgdG8gY2hlY2sgc29tZXRoaW5nIGltcG9ydGFudC4gVGhhdCBgQ09ORklHX0hBVkVfQVJDSF9IVUdFX1ZNQUxMT0NgIGRlZmluZS4uLndoYXQmIzM5O3MgdGhlIGRlYWwgd2l0aCB0aGF0PyBJcyBpdCBlbmFibGVkPyBJcyBpdCByZWxldmFudCBoZXJlPyBJIG5lZWQgdG8gdGhpbmsgdGhpcyB0aHJvdWdoLiBJcyB0aGUgY3VycmVudCBhcmNoaXRlY3R1cmUgZ29pbmcgdG8gd29yayB3aXRoIGBDT05GSUdfSEFWRV9BUkNIX0hVR0VfVk1BTExPQ2A/IFRoaXMgaXMgc29tZXRoaW5nIEkgd2lsbCBoYXZlIHRvIGludmVzdGlnYXRlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEyIDEzOjEyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBIQVZFX0FSQ0hfSFVHRV9WTUFMTE9DJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvS2NvbmZpZz0xMDkyPWNvbmZpZyBIQVZFX0FSQ0hfSFVHRV9WTUFQXG4tLVxuYXJjaC9LY29uZmlnLTEwOTktI1xuYXJjaC9LY29uZmlnOjExMDA6Y29uZmlnIEhBVkVfQVJDSF9IVUdFX1ZNQUxMT0NcbmFyY2gvS2NvbmZpZy0xMTAxLVx0ZGVwZW5kcyBvbiBIQVZFX0FSQ0hfSFVHRV9WTUFQXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTIgMTM6MTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODE5NgoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDIyNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIFBvdGVudGlhbDogQSBEZWVwIERpdmUgaW50byBNZW1vcnkgTWFuYWdlbWVudCoqCgpPa2F5LCBsZXQmIzM5O3MgdGhpbmsgdGhpcyB0aHJvdWdoLiBNeSBpbml0aWFsIGh1bmNoIGlzIHRvIHRhcmdldCBgcHRkdW1wX3dhbGtfcGdkYCBmb3IgZnV6emluZy4gSXQmIzM5O3MgY2FsbGVkIGZyb20gYHB0ZHVtcF93YWxrYCwgd2hpY2ggaXMgaW4gdHVybiB0cmlnZ2VyZWQgYnkgdGhlIGRlYnVnZnMgcmVhZCBmdW5jdGlvbmFsaXR5LiBUaGF0JiMzOTtzIGEgZGVjZW50IHN0YXJ0aW5nIHBvaW50LgoKTm93LCBsZXQmIzM5O3MgZXhwbG9yZSBvdGhlciBhdmVudWVzLiBgdm1hcF90cnlfaHVnZV9wbWRgIHNlZW1zIHByb21pc2luZy4gSXQmIzM5O3MgY2FsbGVkIHdpdGhpbiBgdm1hcF9wbWRfcmFuZ2VgLCB3aGljaCBoYXMgdGhpcyBjaGFpbjogYHZtYXBfcHVkX3JhbmdlYCAtJmd0OyBgdm1hcF9wNGRfcmFuZ2VgIC0mZ3Q7IGB2bWFwX3BhZ2VfcmFuZ2VgIC0mZ3Q7IGB2bWFwX3JhbmdlYCAtJmd0OyBlaXRoZXIgYF9fdm1hbGxvY19hcmVhX25vZGVgIG9yIGp1c3QgcGxhaW4gYHZtYXBgLiBUbyBmdXp6ICp0aGlzKiwgd2UmIzM5O2QgZXNzZW50aWFsbHkgaGF2ZSB0byB0cmlnZ2VyIGEgYHZtYWxsb2NgIHdpdGggaHVnZSBwYWdlcyB3aGlsZSBjb25jdXJyZW50bHkgcmVhZGluZyB0aGUgYHB0ZHVtcGAgZGVidWdmcyBlbnRyeSBwb2ludC4gVGhhdCBvcGVucyB1cCBzb21lIGludGVyZXN0aW5nIGF0dGFjayB2ZWN0b3JzLgoKU28sIGB2bWFwX3RyeV9odWdlX3BtZGAgaXMgZGVmaW5pdGVseSBhIHN0cm9uZyBjb250ZW5kZXIsIGFsb25nIHdpdGggYHB0ZHVtcF93YWxrX3BnZGAuIEkgc2hvdWxkIGFsc28ga2VlcCBhbiBleWUgb24gYGNwYV9jb2xsYXBzZV9sYXJnZV9wYWdlc2AgYW5kIGBwbWRfZnJlZV9wdGVfcGFnZWAgdG8gc2VlIGhvdyB0aG9zZSBjb3VsZCBwb3RlbnRpYWxseSBiZSBleHBsb2l0ZWQuCgpGb3Igbm93LCBJJiMzOTttIGdvaW5nIHRvIHN0YXJ0IGJ5IHJldmlld2luZyB0aGUgZnVuY3Rpb25zIHdpdGhpbiBgbW0vcHRkdW1wLmNgIHRvIHVuZGVyc3RhbmQgdGhlIGJpZ2dlciBwaWN0dXJlIGFuZCBwb3RlbnRpYWwgaW50ZXJhY3Rpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMiAxMzoxMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwdGR1bXBfd2Fsa19wZ2QmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9wdGR1bXAuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9wdGR1bXAuYz0xNjY9c3RhdGljIGNvbnN0IHN0cnVjdCBtbV93YWxrX29wcyBwdGR1bXBfb3BzID0ge1xuLS1cbm1tL3B0ZHVtcC5jLTE3NC1cbm1tL3B0ZHVtcC5jOjE3NTp2b2lkIHB0ZHVtcF93YWxrX3BnZChzdHJ1Y3QgcHRkdW1wX3N0YXRlICpzdCwgc3RydWN0IG1tX3N0cnVjdCAqbW0sIHBnZF90ICpwZ2QpXG5tbS9wdGR1bXAuYy0xNzYte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMiAxMzoxMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4ODc4CgkJCQkJCQlvdXRwdXQ6IDQzCgkJCQkJCQl0aG91Z2h0czogMzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gYGNwYV9jb2xsYXBzZV9sYXJnZV9wYWdlc2AgaW4geDg2JiMzOTtzIE1lbW9yeSBNYW5hZ2VtZW50KioKCkFscmlnaHQsIHNvIHRoZSBmaXJzdCB0aGluZyBJJiMzOTttIGRvaW5nIGlzIHplcm9pbmcgaW4gb24gYGFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmNgLiBUaGUgZmFjdCB0aGF0IEkmIzM5O20gc3BlY2lmaWNhbGx5IHRhcmdldGluZyB0aGF0IGZpbGUgaXMgYSBjbHVlOyBpdCBtZWFucyBJJiMzOTttIHByb2JhYmx5IGxvb2tpbmcgYXQgaG93IHRoZSBQYWdlIEF0dHJpYnV0ZSBUYWJsZSAoUEFUKSBpbnRlcmFjdHMgd2l0aCBtZW1vcnkgbWFuYWdlbWVudCBvbiB4ODYsIGFuZCBzcGVjaWZpY2FsbHksIGhvdyBsYXJnZSBwYWdlIHN1cHBvcnQgbWlnaHQgYmUgaGFuZGxlZC4gVGhlIG1lbnRpb24gb2YgYGNwYV9jb2xsYXBzZV9sYXJnZV9wYWdlc2AgaXMga2V5LiBNeSBpbml0aWFsIHRob3VnaHQgcHJvY2VzcyBub3cgaXM6CgoqICAgKipQQVQgYW5kIExhcmdlIFBhZ2VzOioqIEkmIzM5O20gbGlrZWx5IGludGVyZXN0ZWQgaW4gaG93IHRoZSBrZXJuZWwgaW50ZXJhY3RzIHdpdGggdGhlIFBBVCB0byBtYXAgYW5kIHVubWFwIGxhcmdlIHBhZ2VzLiBUaGUgUEFUIGFsbG93cyBmb3IgZ3JhbnVsYXIgY29udHJvbCBvdmVyIG1lbW9yeSBhdHRyaWJ1dGVzIChlLmcuLCBjYWNoaW5nLCB3cml0ZSBjb21iaW5pbmcpIGFuZCBpcyBjcnVjaWFsIGZvciBwZXJmb3JtYW5jZS4gSSBuZWVkIHRvIHNlZSAqaG93KiB0aGlzIGBjcGFfY29sbGFwc2VfbGFyZ2VfcGFnZXNgIGZ1bmN0aW9uIGZpZ3VyZXMgaW4gdG8gdGhlIHByb2Nlc3MuCiogICAqKkNvbGxhcHNlIE9wZXJhdGlvbnMqKjogVGhlIHdvcmQgJiMzNDtjb2xsYXBzZSYjMzQ7IHN1Z2dlc3RzIEkmIzM5O20gbG9va2luZyBhdCBhICpyZWR1Y3Rpb24qIG9wZXJhdGlvbi4gQXJlIHdlIGRlYWxpbmcgd2l0aCBzb21ldGhpbmcgbGlrZSB1bm1hcHBpbmcgYSBsYXJnZSBwYWdlIGFuZCByZXZlcnRpbmcgYmFjayB0byBzbWFsbGVyIHBhZ2VzPyBPciwgaXMgaXQgaW52b2x2ZWQgaW4gYSBjb250ZXh0IHdoZXJlICpyZW1vdmluZyogYSBsYXJnZSBwYWdlIGlzIHBhcnQgb2YgdGhlIHByb2Nlc3M/CiogICAqKkNvbnRleHQgaXMga2V5Kio6IEkgbmVlZCB0byBleGFtaW5lIHRoZSBmdW5jdGlvbiYjMzk7cyB1c2FnZSBjb250ZXh0IHRvIHVuZGVyc3RhbmQgd2hhdCYjMzk7cyB0cmlnZ2VyaW5nIHRoaXMgY2FsbCwgYW5kIHdoYXQgdGhlIG92ZXJhbGwgZ29hbCBpcy4gSXMgdGhpcyBwYXJ0IG9mIGEgZGVmcmFnbWVudGF0aW9uIHN0cmF0ZWd5PyBBIE5VTUEgb3B0aW1pemF0aW9uPyBPciBzb21ldGhpbmcgcmVsYXRlZCB0byBtZW1vcnkgaG90cGx1Z2dpbmc/IEkga25vdyB0aGVyZSB3aWxsIGJlIGEgc3BlY2lmaWMgcmVhc29uIGZvciBpdC4KKiAgICoqUG90ZW50aWFsIGlzc3VlcyoqOiBJJiMzOTtsbCBiZSBrZWVwaW5nIGFuIGV5ZSBvdXQgZm9yIHBvdGVudGlhbCBpc3N1ZXMgbGlrZSBjYWNoZSBjb2hlcmVuY3kgcHJvYmxlbXMsIFRMQiBmbHVzaGVzLCBvciByYWNlIGNvbmRpdGlvbnMuIFRoZXNlIGFyZSBhbGwgdGhpbmdzIHRoYXQgY2FuIGNyb3AgdXAgd2hlbiB5b3UmIzM5O3JlIG11Y2tpbmcgYXJvdW5kIHdpdGggbWVtb3J5IG1hcHBpbmdzLCBlc3BlY2lhbGx5IHdoZW4gbGFyZ2UgcGFnZXMgYXJlIGludm9sdmVkLgoqICAgKipUaGUgYmlnZ2VyIHBpY3R1cmU6KiogSSYjMzk7bSBpbnRlcmVzdGVkIGluIHRoZSBvdmVyYWxsIG1lbW9yeSBtYW5hZ2VtZW50IHN0cmF0ZWd5LCBhbmQgaG93IHRoaXMgZnVuY3Rpb24gZml0cyBpbnRvIHRoYXQgc3RyYXRlZ3kuIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIGNvbW1lbnRzLCByZWxhdGVkIGZ1bmN0aW9ucywgYW5kIGFueSBvdGhlciBpbmRpY2F0b3JzIHRoYXQgbWlnaHQgc2hlZCBsaWdodCBvbiBpdHMgcm9sZSBpbiB0aGUgeDg2IGFyY2hpdGVjdHVyZS4KCkkmIzM5O20gcmVhZHkgdG8gZGlnIGluIGFuZCBmaWd1cmUgb3V0IHRoZSBleGFjdCBiZWhhdmlvciBhbmQgcmVhc29uaW5nIGJlaGluZCB0aGF0IGZ1bmN0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMiAxMzoxMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjcGFfY29sbGFwc2VfbGFyZ2VfcGFnZXMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM9NDEyPXN0YXRpYyBpbnQgY29sbGFwc2VfbGFyZ2VfcGFnZXModW5zaWduZWQgbG9uZyBhZGRyLCBzdHJ1Y3QgbGlzdF9oZWFkICpwZ3RhYmxlcyk7XG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTQxMy1cbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM6NDE0OnN0YXRpYyB2b2lkIGNwYV9jb2xsYXBzZV9sYXJnZV9wYWdlcyhzdHJ1Y3QgY3BhX2RhdGEgKmNwYSlcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtNDE1LXtcbi0tXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jPTQ1Mz1zdGF0aWMgdm9pZCBjcGFfZmx1c2goc3RydWN0IGNwYV9kYXRhICpjcGEsIGludCBjYWNoZSlcbi0tXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTQ4OC1cdGlmIChjcGEtXHUwMDNlZmxhZ3MgXHUwMDI2IENQQV9DT0xMQVBTRSlcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM6NDg5Olx0XHRjcGFfY29sbGFwc2VfbGFyZ2VfcGFnZXMoY3BhKTtcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtNDkwLX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTIgMTM6MTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTcyMAoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDI0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyB5b3UgcmVxdWVzdGVkOgoKKipOYXZpZ2F0aW5nIHRoZSBIdWdlIFBhZ2UgTGFuZHNjYXBlKioKCk9rYXksIHNvIHdlJiMzOTtyZSB0YWxraW5nIGFib3V0IGh1Z2UgcGFnZXMgYW5kLCBtb3JlIHNwZWNpZmljYWxseSwgdGhlIGB2bWFwX3RyeV9odWdlX3BtZGAgZnVuY3Rpb24uIEdpdmVuIHRoZSBjb250ZXh0LCBteSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZGl2ZSBzdHJhaWdodCBpbnRvIGBtbS92bWFsbG9jLmNgLiBUaGF0JiMzOTtzIHRoZSBsb2dpY2FsIHBsYWNlIHRvIHN0YXJ0IOKAkyBgdm1hbGxvY2AgaXMgZGlyZWN0bHkgaW52b2x2ZWQgaW4gYWxsb2NhdGluZyB2aXJ0dWFsIG1lbW9yeSwgYW5kIHRoZSBodWdlIHBhZ2UgaW1wbGVtZW50YXRpb24gd291bGQgYWxtb3N0IGNlcnRhaW5seSB0b3VjaCBvbiBpdHMgd29ya2luZ3MsIHBhcnRpY3VsYXJseSBkdXJpbmcgYXR0ZW1wdHMgdG8gdXRpbGl6ZSBsYXJnZSBwaHlzaWNhbCBwYWdlcyB3aXRoaW4gdGhlIHZpcnR1YWwgbWVtb3J5IHNwYWNlLiBJIHdhbnQgdG8gc2VlIGhvdyB0aGUgc3lzdGVtIGlzIHRyeWluZyB0byBtYXAgdGhlc2UgbGFyZ2UgcGFnZXMgd2l0aGluIHRoZSB2bWFsbG9jIGFyZW5hLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW50ZXJhY3Rpb24gYmV0d2VlbiBgdm1hcGAsIGh1Z2VwYWdlcyBhbmQgdGhlIHBhZ2UgdGFibGVzLiBMZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3Mgd2hhdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTIgMTM6MTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dm1hcF90cnlfaHVnZV9wbWQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS92bWFsbG9jLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vdm1hbGxvYy5jPTk1PXN0YXRpYyBpbnQgdm1hcF9wdGVfcmFuZ2UocG1kX3QgKnBtZCwgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCxcbi0tXG5tbS92bWFsbG9jLmMtMTQyLVxubW0vdm1hbGxvYy5jOjE0MzpzdGF0aWMgaW50IHZtYXBfdHJ5X2h1Z2VfcG1kKHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsXG5tbS92bWFsbG9jLmMtMTQ0LVx0XHRcdHBoeXNfYWRkcl90IHBoeXNfYWRkciwgcGdwcm90X3QgcHJvdCxcbi0tXG5tbS92bWFsbG9jLmM9MTgwPXN0YXRpYyBpbnQgdm1hcF9wbWRfcmFuZ2UocHVkX3QgKnB1ZCwgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCxcbi0tXG5tbS92bWFsbG9jLmMtMTkzLVxubW0vdm1hbGxvYy5jOjE5NDpcdFx0aWYgKHZtYXBfdHJ5X2h1Z2VfcG1kKHBtZCwgYWRkciwgbmV4dCwgcGh5c19hZGRyLCBwcm90LFxubW0vdm1hbGxvYy5jLTE5NS1cdFx0XHRcdFx0bWF4X3BhZ2Vfc2hpZnQpKSB7XG4tLVxubW0vdm1hbGxvYy5jPTIwNz1zdGF0aWMgaW50IHZtYXBfdHJ5X2h1Z2VfcHVkKHB1ZF90ICpwdWQsIHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsXG4tLVxubW0vdm1hbGxvYy5jLTIyOC1cbm1tL3ZtYWxsb2MuYzoyMjk6XHQvKiBTZWUgY29tbWVudCBpbiB2bWFwX3RyeV9odWdlX3BtZCgpLiAqL1xubW0vdm1hbGxvYy5jLTIzMC1cdHNjb3BlZF9jb25kX2d1YXJkKG1tYXBfcmVhZF9sb2NrX3RyeSwgcmV0dXJuIDAsIFx1MDAyNmluaXRfbW0pIHtcbi0tXG5tbS92bWFsbG9jLmM9MjY0PXN0YXRpYyBpbnQgdm1hcF90cnlfaHVnZV9wNGQocDRkX3QgKnA0ZCwgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCxcbi0tXG5tbS92bWFsbG9jLmMtMjg1LVxubW0vdm1hbGxvYy5jOjI4NjpcdC8qIFNlZSBjb21tZW50IGluIHZtYXBfdHJ5X2h1Z2VfcG1kKCkuICovXG5tbS92bWFsbG9jLmMtMjg3LVx0c2NvcGVkX2NvbmRfZ3VhcmQobW1hcF9yZWFkX2xvY2tfdHJ5LCByZXR1cm4gMCwgXHUwMDI2aW5pdF9tbSkge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMiAxMzoxMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDQzNQoJCQkJCQkJb3V0cHV0OiAyMAoJCQkJCQkJdGhvdWdodHM6IDI1MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLZXJuZWwgUGF0Y2ggQW5hbHlzaXMgJmFtcDsgRnV6emluZyBTdHJhdGVneSoqCgpPa2F5LCBzbyBsb29raW5nIGF0IHRoaXMgcGF0Y2gsIG15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IGl0JiMzOTtzIHRvdWNoaW5nIHNvbWUgcHJldHR5IGNyaXRpY2FsIGtlcm5lbCBhcmVhcy4gU3BlY2lmaWNhbGx5LCBpdCYjMzk7cyBtb2RpZnlpbmcgdGhlIGNvcmUgbG9naWMgZm9yIHBhZ2UgdGFibGUgZHVtcGluZyBhbmQgaG93IHZtYWxsb2MgaHVnZSBwYWdlcyBhcmUgbWFwcGVkLiBUaGF0IGltbWVkaWF0ZWx5IGZsYWdzIGl0IGFzIHNvbWV0aGluZyB3b3J0aCBhIGNsb3NlciBsb29rLCBlc3BlY2lhbGx5IGZvciBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzLgoKVGhlIGludHJvZHVjdGlvbiBvZiBsb2NrcyDigJMgYG1tYXBfcmVhZF9sb2NrX3RyeWAgb24gYGluaXRfbW1gIHdpdGhpbiBgdm1hcF90cnlfaHVnZV9wbWRgLCBgdm1hcF90cnlfaHVnZV9wdWRgLCBhbmQgYHZtYXBfdHJ5X2h1Z2VfcDRkYCwgYW5kIGBtbWFwX3JlYWRfbG9ja2AgaW4gYGNwYV9jb2xsYXBzZV9sYXJnZV9wYWdlc2AgcmVhbGx5IGNhdGNoZXMgbXkgZXllLiBMb2NraW5nIGlzc3VlcyBhcmUgYWx3YXlzIGEgcHJpbWUgdGFyZ2V0IGZvciBmdXp6aW5nLiBBbmQgdGhlIGBtbWFwX3dyaXRlX2xvY2tfbmVzdGVkYCBpbiBgcHRkdW1wX3dhbGtfcGdkYCBpcyBhbm90aGVyIGludGVyZXN0aW5nIHBvaW50LiBOZXN0aW5nLi4uIHRoYXQmIzM5O3MgYWx3YXlzIHRyaWNreS4KCkdpdmVuIHRob3NlIGxvY2tpbmcgY2hhbmdlcyBhbmQgdGhlIGFyZWFzIGJlaW5nIG1vZGlmaWVkLCB0aGlzIGlzIGRlZmluaXRlbHkgaGlnaC1wcmlvcml0eSBmb3IgZnV6emluZy4gSSYjMzk7bSBnb2luZyB0byBmb2N1cyBteSBpbml0aWFsIGZ1enppbmcgZWZmb3J0cyBvbiB0aGVzZSBzeW1ib2xzOiBgdm1hcF90cnlfaHVnZV9wbWRgLCBgdm1hcF90cnlfaHVnZV9wdWRgLCBgdm1hcF90cnlfaHVnZV9wNGRgLCBgY3BhX2NvbGxhcHNlX2xhcmdlX3BhZ2VzYCwgYHB0ZHVtcF93YWxrX3BnZGAsIGFuZCBgcG1kX2ZyZWVfcHRlX3BhZ2VgLiBUaGV5IGFwcGVhciB0byBiZSB0aGUgbW9zdCBsaWtlbHkgY2FuZGlkYXRlcyB0byBleHBvc2UgYW55IGNvbmN1cnJlbmN5IG9yIG1lbW9yeSBtYW5hZ2VtZW50IGJ1Z3MuCgpCZWZvcmUgSSBkaXZlIHRvbyBkZWVwLCBJIG5lZWQgdG8gY29uZmlybSB0aGF0IGBQVERVTVBfREVCVUdGU2AgaXMgdGhlIGNvcnJlY3QgY29uZmlnIHRvIGFjdGl2YXRlIHRoZSByZWxldmFudCBmdW5jdGlvbmFsaXR5LiBHb3R0YSBtYWtlIHN1cmUgSSYjMzk7bSB0ZXN0aW5nIHRoZSByaWdodCBjb2RlIHBhdGhzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMiAxMzoxMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgUFREVU1QX0RFQlVHRlMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vS2NvbmZpZy5kZWJ1Zz0yMTk9Y29uZmlnIFBURFVNUFxuLS1cbm1tL0tjb25maWcuZGVidWctMjIxLVxubW0vS2NvbmZpZy5kZWJ1ZzoyMjI6Y29uZmlnIFBURFVNUF9ERUJVR0ZTXG5tbS9LY29uZmlnLmRlYnVnLTIyMy1cdGJvb2wgXCYjMzQ7RXhwb3J0IGtlcm5lbCBwYWdldGFibGUgbGF5b3V0IHRvIHVzZXJzcGFjZSB2aWEgZGVidWdmc1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMiAxMzoxMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTE1MwoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDE0OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBQVERVTVAgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBgUFREVU1QX0RFQlVHRlNgIGlzIGluZGVlZCB0aGUgY29uZmlndXJhdGlvbiBpdGVtIHdlIHdhbnQuIElzIHRoZXJlIGFueXRoaW5nIGVsc2UgcmVsZXZhbnQgaGVyZT8gSSBrbm93IGBIQVZFX0FSQ0hfSFVHRV9WTUFMTE9DYCBpcyBhcmNoaXRlY3R1cmUtc3BlY2lmaWMsIHNvIHdlIGNhbiYjMzk7dCBqdXN0IGVuYWJsZSBpdCB1bml2ZXJzYWxseS4gSXQmIzM5O3MgYSBkZXBlbmRlbmN5LCBzZWxlY3RlZCBieSB0aGUgYXJjaGl0ZWN0dXJlIGl0c2VsZi4gTGV0JiMzOTtzIHNlZSBpZiB0aGVyZSBhcmUgYW55ICpvdGhlciogcmVsYXRlZCBjb25maWdzLiBBaCwgYENPTkZJR19ERUJVR19XWGAgZG9lcyB1c2UgYHB0ZHVtcGAsIGJ1dCB0aGF0IGFwcGVhcnMgdG8gYmUgdHJpZ2dlcmVkIGR1cmluZyB0aGUgYm9vdCBwcm9jZXNzLiBOb3Qgd2hhdCBJJiMzOTttIGFmdGVyLiBgQ09ORklHX1BURFVNUF9ERUJVR0ZTYCwgaG93ZXZlciwgdGhhdCYjMzk7cyB0aGUga2V5LiBJdCBhbGxvd3MgYSB1c2Vyc3BhY2UgcHJvZ3JhbSB0byB0cmlnZ2VyIGBwdGR1bXBgIHRocm91Z2ggZGVidWdmcywgd2hpY2ggbWFrZXMgaXQgYWJzb2x1dGVseSBpZGVhbCBmb3IgZnV6emluZy4gUGVyZmVjdC4gTm93LCBJIG5lZWQgdG8gY2hlY2sgYGFyY2gvYXJtNjQvbW0vbW11LmNgIHRvIGxvb2sgYXQgaG93IGBwbWRfZnJlZV9wdGVfcGFnZWAgaGFuZGxlcyBtZW1vcnkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEyIDEzOjEyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3BtZF9mcmVlX3B0ZV9wYWdlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC9hcm02NC9tbS9tbXUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL2FybTY0L21tL21tdS5jPTE4NTc9aW50IHBtZF9jbGVhcl9odWdlKHBtZF90ICpwbWRwKVxuLS1cbmFyY2gvYXJtNjQvbW0vbW11LmMtMTg2NC1cbmFyY2gvYXJtNjQvbW0vbW11LmM6MTg2NTppbnQgcG1kX2ZyZWVfcHRlX3BhZ2UocG1kX3QgKnBtZHAsIHVuc2lnbmVkIGxvbmcgYWRkcilcbmFyY2gvYXJtNjQvbW0vbW11LmMtMTg2Ni17XG4tLVxuYXJjaC9hcm02NC9tbS9tbXUuYz0xODg0PWludCBwdWRfZnJlZV9wbWRfcGFnZShwdWRfdCAqcHVkcCwgdW5zaWduZWQgbG9uZyBhZGRyKVxuLS1cbmFyY2gvYXJtNjQvbW0vbW11LmMtMTkwMy1cdFx0aWYgKHBtZF9wcmVzZW50KHBtZHBfZ2V0KHBtZHApKSlcbmFyY2gvYXJtNjQvbW0vbW11LmM6MTkwNDpcdFx0XHRwbWRfZnJlZV9wdGVfcGFnZShwbWRwLCBuZXh0KTtcbmFyY2gvYXJtNjQvbW0vbW11LmMtMTkwNS1cdH0gd2hpbGUgKHBtZHAmIzQzOyYjNDM7LCBuZXh0ICYjNDM7PSBQTURfU0laRSwgbmV4dCAhPSBlbmQpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMiAxMzoxMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTgyNwoJCQkJCQkJb3V0cHV0OiAyMgoJCQkJCQkJdGhvdWdodHM6IDU3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBmcm9tIG15IG93biBwZXJzcGVjdGl2ZToKCioqSW52ZXN0aWdhdGluZyBgcG1kX2ZyZWVfcHRlX3BhZ2VgIFVzYWdlIEFjcm9zcyBBcmNoaXRlY3R1cmVzKioKClJpZ2h0LCBsZXQgbWUgc2VlLi4uIEkmIzM5O20gbG9va2luZyBhdCBgcG1kX2ZyZWVfcHRlX3BhZ2VgLCBhbmQgaXQgYXBwZWFycyBpdCYjMzk7cyBkZWZpbmVkIHdpdGhpbiBgYXJjaC9hcm02NC9tbS9tbXUuY2AuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyB0aGlzIGZ1bmN0aW9uIGlzIGdlbmVyYWxseSB1c2VkLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgJiMzNDtPa2F5LCB3aGVyZSBlbHNlIGlzIHRoaXMgZnVuY3Rpb24gY2FsbGVkPyYjMzQ7IFRoZW4gSSByZW1lbWJlciBzZWVpbmcgaXQgcmVmZXJlbmNlZCB3aXRoaW4gYG1tL3ZtYWxsb2MuY2AuIEludGVyZXN0aW5nLiBBIGJpdCBvZiBhIHJlZCBmbGFnIHBvcHMgdXAgaW1tZWRpYXRlbHksIHRob3VnaC4uLiBJIG5lZWQgdG8gYXNjZXJ0YWluIGlmIHRoaXMgZnVuY3Rpb24gaXMgdW5pdmVyc2FsbHkgZGVmaW5lZCBhY3Jvc3MgYWxsIGFyY2hpdGVjdHVyZXMgc3VwcG9ydGVkIGJ5IHRoZSBrZXJuZWwsIG9yIGlmIGl0IGlzIGltcGxlbWVudGVkIGluIGFuIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBtYW5uZXIuIFRoaXMgaXMgY3J1Y2lhbCBmb3IgcG9ydGFiaWxpdHkuIElmIGl0JiMzOTtzIGEgZ2VuZXJpYyBpbnRlcmZhY2UgY2FsbCwgdGhlbiBJIGRvbiYjMzk7dCBoYXZlIHRvIHdvcnJ5LiBCdXQgaWYgbm90LCBJIG5lZWQgdG8gY2hlY2sgaXRzIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBpbXBsZW1lbnRhdGlvbnMuIEkgc2hvdWxkIG5vdGUsIGl0IGlzIGFsc28gaW1wb3J0YW50IHRvIGxvb2sgYXQgaG93IGRpZmZlcmVudCBhcmNoaXRlY3R1cmVzIGhhbmRsZSB2bWFsbG9jIHJlZ2lvbnMgYW5kIHBhZ2UgdGFibGUgbWFuYWdlbWVudC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTIgMTM6MTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cG1kX2ZyZWVfcHRlX3BhZ2UmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9hcm02NC9tbS9tbXUuYz0xODU3PWludCBwbWRfY2xlYXJfaHVnZShwbWRfdCAqcG1kcClcbi0tXG5hcmNoL2FybTY0L21tL21tdS5jLTE4NjQtXG5hcmNoL2FybTY0L21tL21tdS5jOjE4NjU6aW50IHBtZF9mcmVlX3B0ZV9wYWdlKHBtZF90ICpwbWRwLCB1bnNpZ25lZCBsb25nIGFkZHIpXG5hcmNoL2FybTY0L21tL21tdS5jLTE4NjYte1xuLS1cbmFyY2gvYXJtNjQvbW0vbW11LmM9MTg4ND1pbnQgcHVkX2ZyZWVfcG1kX3BhZ2UocHVkX3QgKnB1ZHAsIHVuc2lnbmVkIGxvbmcgYWRkcilcbi0tXG5hcmNoL2FybTY0L21tL21tdS5jLTE5MDMtXHRcdGlmIChwbWRfcHJlc2VudChwbWRwX2dldChwbWRwKSkpXG5hcmNoL2FybTY0L21tL21tdS5jOjE5MDQ6XHRcdFx0cG1kX2ZyZWVfcHRlX3BhZ2UocG1kcCwgbmV4dCk7XG5hcmNoL2FybTY0L21tL21tdS5jLTE5MDUtXHR9IHdoaWxlIChwbWRwJiM0MzsmIzQzOywgbmV4dCAmIzQzOz0gUE1EX1NJWkUsIG5leHQgIT0gZW5kKTtcbi0tXG5hcmNoL3Bvd2VycGMvbW0vYm9vazNzNjQvcmFkaXhfcGd0YWJsZS5jPTE2NzU9aW50IHBtZF9jbGVhcl9odWdlKHBtZF90ICpwbWQpXG4tLVxuYXJjaC9wb3dlcnBjL21tL2Jvb2szczY0L3JhZGl4X3BndGFibGUuYy0xNjg0LVxuYXJjaC9wb3dlcnBjL21tL2Jvb2szczY0L3JhZGl4X3BndGFibGUuYzoxNjg1OmludCBwbWRfZnJlZV9wdGVfcGFnZShwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIGFkZHIpXG5hcmNoL3Bvd2VycGMvbW0vYm9vazNzNjQvcmFkaXhfcGd0YWJsZS5jLTE2ODYte1xuLS1cbmFyY2gvcmlzY3YvbW0vcGd0YWJsZS5jPTExNz1pbnQgcG1kX2NsZWFyX2h1Z2UocG1kX3QgKnBtZClcbi0tXG5hcmNoL3Jpc2N2L21tL3BndGFibGUuYy0xMjQtXG5hcmNoL3Jpc2N2L21tL3BndGFibGUuYzoxMjU6aW50IHBtZF9mcmVlX3B0ZV9wYWdlKHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgYWRkcilcbmFyY2gvcmlzY3YvbW0vcGd0YWJsZS5jLTEyNi17XG4tLVxuYXJjaC94ODYvbW0vcGd0YWJsZS5jPTcxOD1pbnQgcHVkX2ZyZWVfcG1kX3BhZ2UocHVkX3QgKnB1ZCwgdW5zaWduZWQgbG9uZyBhZGRyKVxuLS1cbmFyY2gveDg2L21tL3BndGFibGUuYy03NTQtLyoqXG5hcmNoL3g4Ni9tbS9wZ3RhYmxlLmM6NzU1OiAqIHBtZF9mcmVlX3B0ZV9wYWdlIC0gQ2xlYXIgUE1EIGVudHJ5IGFuZCBmcmVlIFBURSBwYWdlLlxuYXJjaC94ODYvbW0vcGd0YWJsZS5jLTc1Ni0gKiBAcG1kOiBQb2ludGVyIHRvIHRoZSBQTURcbi0tXG5hcmNoL3g4Ni9tbS9wZ3RhYmxlLmMtNzYxLSAqL1xuYXJjaC94ODYvbW0vcGd0YWJsZS5jOjc2MjppbnQgcG1kX2ZyZWVfcHRlX3BhZ2UocG1kX3QgKnBtZCwgdW5zaWduZWQgbG9uZyBhZGRyKVxuYXJjaC94ODYvbW0vcGd0YWJsZS5jLTc2My17XG4tLVxuYXJjaC94ODYvbW0vcGd0YWJsZS5jLTc4Mi0gKi9cbmFyY2gveDg2L21tL3BndGFibGUuYzo3ODM6aW50IHBtZF9mcmVlX3B0ZV9wYWdlKHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgYWRkcilcbmFyY2gveDg2L21tL3BndGFibGUuYy03ODQte1xuLS1cbmluY2x1ZGUvbGludXgvcGd0YWJsZS5oPTIxNzY9aW50IHB1ZF9mcmVlX3BtZF9wYWdlKHB1ZF90ICpwdWQsIHVuc2lnbmVkIGxvbmcgYWRkcik7XG5pbmNsdWRlL2xpbnV4L3BndGFibGUuaDoyMTc3OmludCBwbWRfZnJlZV9wdGVfcGFnZShwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIGFkZHIpO1xuaW5jbHVkZS9saW51eC9wZ3RhYmxlLmgtMjE3OC0jZWxzZVx0LyogIUNPTkZJR19IQVZFX0FSQ0hfSFVHRV9WTUFQICovXG4tLVxuaW5jbHVkZS9saW51eC9wZ3RhYmxlLmg9MjIwND1zdGF0aWMgaW5saW5lIGludCBwdWRfZnJlZV9wbWRfcGFnZShwdWRfdCAqcHVkLCB1bnNpZ25lZCBsb25nIGFkZHIpXG4tLVxuaW5jbHVkZS9saW51eC9wZ3RhYmxlLmgtMjIwNy19XG5pbmNsdWRlL2xpbnV4L3BndGFibGUuaDoyMjA4OnN0YXRpYyBpbmxpbmUgaW50IHBtZF9mcmVlX3B0ZV9wYWdlKHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgYWRkcilcbmluY2x1ZGUvbGludXgvcGd0YWJsZS5oLTIyMDkte1xuLS1cbm1tL3ZtYWxsb2MuYz0xNDM9c3RhdGljIGludCB2bWFwX3RyeV9odWdlX3BtZChwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLFxuLS1cbm1tL3ZtYWxsb2MuYy0xNzMtXHRzY29wZWRfY29uZF9ndWFyZChtbWFwX3JlYWRfbG9ja190cnksIHJldHVybiAwLCBcdTAwMjZpbml0X21tKSB7XG5tbS92bWFsbG9jLmM6MTc0Olx0XHRpZiAoIXBtZF9mcmVlX3B0ZV9wYWdlKHBtZCwgYWRkcikpXG5tbS92bWFsbG9jLmMtMTc1LVx0XHRcdHJldHVybiAwO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMiAxMzoxMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzMwNwoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDE5NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgSHVnZSBWTUFQIFN1cHBvcnQgYW5kIFBhZ2UgVGFibGUgRHVtcGluZyoqCgpPa2F5LCBzbyB0aGlzIGlzIGRlZmluaXRlbHkgZGVmaW5lZCBmb3IgYXJjaGl0ZWN0dXJlcyB0aGF0IHN1cHBvcnQgdGhlIGh1Z2Ugdm1hcC4gSSBuZWVkIHRvIHJldmlzaXQgYGNwYV9jb2xsYXBzZV9sYXJnZV9wYWdlc2AgdG8gdW5kZXJzdGFuZCB0aGUgY3VycmVudCBzdGF0ZSBvZiB0aGluZ3MuIFJpZ2h0LCBpdCYjMzk7cyBpbiBgYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuY2AuIE5vdywgaXMgdGhlcmUgYW55IGNvbmZpZ3VyYXRpb24gdGllZCB0byBgc2V0X21lbW9yeS5jYD8gTm8sIGl0JiMzOTtzIGFsd2F5cyBjb21waWxlZCBmb3IgeDg2LiBHb29kLgoKU28sIHRoZSBrZXkgY29uZmlndXJhdGlvbnMgSSBuZWVkIHRvIGtlZXAgaW4gbWluZCBhcmUganVzdCBgUFREVU1QX0RFQlVHRlNgLgoKTXkgZm9jdXMgc3ltYm9scyBoZXJlIG5lZWQgdG8gYmU6CiogICBgdm1hcF90cnlfaHVnZV9wbWRgCiogICBgdm1hcF90cnlfaHVnZV9wdWRgCiogICBgdm1hcF90cnlfaHVnZV9wNGRgCiogICBgY3BhX2NvbGxhcHNlX2xhcmdlX3BhZ2VzYAoqICAgYHB0ZHVtcF93YWxrX3BnZGAKCkxldCBtZSBxdWlja2x5IGFzc2VzcyBpZiBgd2Fsa19wYWdlX3JhbmdlX2RlYnVnYCBpcyB3b3J0aCBleGFtaW5pbmcgZnVydGhlci4gQWgsIGl0JiMzOTtzIGluIGBtbS9wYWdld2Fsay5jYCwgdGhhdCBzZWVtcyBhcHByb3ByaWF0ZSwgbGV0JiMzOTtzIGtlZXAgdGhhdCBpbiBtaW5kLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMiAxMzoxMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt3YWxrX3BhZ2VfcmFuZ2VfZGVidWcmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9wYWdld2Fsay5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3BhZ2V3YWxrLmM9NjQ4PWludCB3YWxrX2tlcm5lbF9wYWdlX3RhYmxlX3JhbmdlX2xvY2tsZXNzKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLFxuLS1cbm1tL3BhZ2V3YWxrLmMtNjY3LS8qKlxubW0vcGFnZXdhbGsuYzo2Njg6ICogd2Fsa19wYWdlX3JhbmdlX2RlYnVnIC0gd2FsayBhIHJhbmdlIG9mIHBhZ2V0YWJsZXMgbm90IGJhY2tlZCBieSBhIHZtYVxubW0vcGFnZXdhbGsuYy02NjktICogQG1tOlx0XHRtbV9zdHJ1Y3QgcmVwcmVzZW50aW5nIHRoZSB0YXJnZXQgcHJvY2VzcyBvZiBwYWdlIHRhYmxlIHdhbGtcbi0tXG5tbS9wYWdld2Fsay5jLTY4My0gKi9cbm1tL3BhZ2V3YWxrLmM6Njg0OmludCB3YWxrX3BhZ2VfcmFuZ2VfZGVidWcoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgc3RhcnQsXG5tbS9wYWdld2Fsay5jLTY4NS1cdFx0XHQgIHVuc2lnbmVkIGxvbmcgZW5kLCBjb25zdCBzdHJ1Y3QgbW1fd2Fsa19vcHMgKm9wcyxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTIgMTM6MTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM5ODEKCQkJCQkJCW91dHB1dDogMjIKCQkJCQkJCXRob3VnaHRzOiAxMDgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIENvZGUgTW9kaWZpY2F0aW9ucyBhbmQgUG90ZW50aWFsIEltcGFjdHMqKgoKT2theSwgc28gSSBzZWUgdGhhdCBgd2Fsa19wYWdlX3JhbmdlX2RlYnVnYCBoYXMgYmVlbiBhZGp1c3RlZC4gU3BlY2lmaWNhbGx5LCB0aGUgYWRkaXRpb24gb2YgYG1tYXBfYXNzZXJ0X3dyaXRlX2xvY2tlZCgmYW1wO2luaXRfbW0pO2AgYW5kIHRoZSByZW1vdmFsIG9mIHRoZSBzcGVjaWFsIGNhc2luZyBmb3IgYGluaXRfbW1gIGp1bXAgb3V0IGltbWVkaWF0ZWx5LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgY2hhbmdlIHRob3JvdWdobHkuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IHRoaXMgbGlrZWx5IHRpZ2h0ZW5zIHVwIHRoZSBtZW1vcnkgbWFuYWdlbWVudCByZWxhdGVkIGFzc2VydGlvbnMsIHBhcnRpY3VsYXJseSBhcm91bmQgbG9ja2luZy4KCk5vdywgSSBuZWVkIHRvIGNoZWNrIGZvciByZWxhdGVkIGNvbmZpZ3VyYXRpb25zLiBgQ09ORklHX1BURFVNUF9ERUJVR0ZTYCBpcyB0aGUgcHJpbWFyeSBvbmUgdGhhdCBjb21lcyB0byBtaW5kLCBhcyBpdCYjMzk7cyBkaXJlY3RseSBsaW5rZWQgdG8gZGVidWdnaW5nIHBhZ2UgdGFibGVzLCB3aGljaCB0aGlzIG1vZGlmaWNhdGlvbiB0b3VjaGVzLiBMZXQmIzM5O3Mgc2VlIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXJzLiBIbW0sIHdoYXQgYWJvdXQgYENPTkZJR19ERUJVR19XWGA/IEl0IGRvZXMgaW52b2x2ZSBwdGR1bXAsIGJ1dCBpdCBzZWVtcyB0byBiZSBzb2xlbHkgYSBib290LXRpbWUgY29uZmlndXJhdGlvbi4gVGhhdCBzdWdnZXN0cyBpdCBtaWdodCBub3QgYmUgYSBkaXJlY3QgZmFjdG9yIGhlcmUsIGJ1dCBpdCYjMzk7cyB3b3J0aCBub3RpbmcgZm9yIGNvbXBsZXRlbmVzcy4gSSBzaG91bGQgYWxzbyBpbnZlc3RpZ2F0ZSBgQ09ORklHX1g4Nl9QVERVTVBgIOKAkyBpdCYjMzk7cyBjcnVjaWFsIHRvIHVuZGVyc3RhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSBhbHRlcmVkIGZ1bmN0aW9uLiBJIG5lZWQgdG8gbWFwIG91dCB0aGUgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMgYW5kIHVuZGVyc3RhbmQgdGhlIHNjb3BlIG9mIHRoZSBwb3RlbnRpYWwgaW1wYWN0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMiAxMzoxMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBYODZfUFREVU1QJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTIgMTM6MTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQzNzUKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiAxMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgYXNzdW1pbmcgSSYjMzk7bSBhbiBleHBlcnQgaW4gdGhpcyBmaWVsZCwgYW5kIHJlbmRlcmVkIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKkludmVzdGlnYXRpbmcgQ29yZSBEdW1wcyBhbmQgUG90ZW50aWFsIFN5c3RlbSBJbmZvcm1hdGlvbioqCgpNeSBpbW1lZGlhdGUgdGhvdWdodCwgd2hlbiBzZWVpbmcgdGhpcywgaXM6ICYjMzQ7UmlnaHQsIGBDT05GSUdfUFREVU1QX0NPUkVgLi4uIHdoYXQgYWJvdXQgaXQ/JiMzNDsgVGhpcyBzcGVjaWZpYyBjb25maWd1cmF0aW9uIG9wdGlvbiBpbW1lZGlhdGVseSBwaXF1ZXMgbXkgaW50ZXJlc3QgYmVjYXVzZSBpdCYjMzk7cyBkaXJlY3RseSByZWxhdGVkIHRvIHRoZSBnZW5lcmF0aW9uIGFuZCBoYW5kbGluZyBvZiBjb3JlIGR1bXBzLCB3aGljaCBhcmUgaW52YWx1YWJsZSBmb3IgZGVidWdnaW5nIGNyYXNoZXMgYW5kIHVuZGVyc3RhbmRpbmcgc3lzdGVtIGJlaGF2aW9yLiBJcyB0aGlzIG9wdGlvbiBlbmFibGVkPyBEaXNhYmxlZD8gV2hhdCYjMzk7cyB0aGUgY29udGV4dD8gQXJlIHdlIGxvb2tpbmcgdG8gYW5hbHl6ZSBhIHNwZWNpZmljIGNvcmUgZHVtcCwgb3IgaXMgdGhpcyBhYm91dCBzeXN0ZW0gY29uZmlndXJhdGlvbiBpbiBnZW5lcmFsPyBEZXBlbmRpbmcgb24gdGhlIHByb2plY3QsIHRoZSBhbnN3ZXJzIHRvIHRob3NlIHF1ZXN0aW9ucyBjYW4gc2lnbmlmaWNhbnRseSBjaGFuZ2UgbXkgbmV4dCBzdGVwcy4gSSYjMzk7bGwgbmVlZCB0byByZW1lbWJlciB0byBjaGVjayBpZiBpdCYjMzk7cyBvbiBvciBvZmYhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEyIDEzOjEzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFBURFVNUF9DT1JFJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTIgMTM6MTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQ1OTEKCQkJCQkJCW91dHB1dDogMTgKCQkJCQkJCXRob3VnaHRzOiAzMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0JiMzOTtzIGludGVybmFsIG1vbm9sb2d1ZToKCioqUXVpY2sgU2NhbjogUFREVU1QIE9wdGlvbnMqKgoKQWxyaWdodCwgdGhpcyBsb29rcyBzdHJhaWdodGZvcndhcmQuIFNlZW1zIGxpa2Ugd2UmIzM5O3JlIHplcm9pbmcgaW4gb24ga2VybmVsIGRlYnVnZ2luZyB0b29scyByZWxhdGVkIHRvIHBhZ2UgdGFibGUgZHVtcHMsIHNwZWNpZmljYWxseSBgQ09ORklHX1BURFVNUGAgYW5kIGBDT05GSUdfUFREVU1QX0RFQlVHRlNgLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgbGV0JiMzOTtzIGp1c3QgbWFrZSBzdXJlIHdlIHVuZGVyc3RhbmQgdGhlIHNjb3BlIG9mIGBDT05GSUdfUFREVU1QYC4gVGhhdCYjMzk7cyB0aGUgYmFzZWxpbmUsIHRoZSBjb3JlIGZ1bmN0aW9uYWxpdHkuIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgdGhlIGV4YWN0IGRlZmluaXRpb24gYW5kIHVzYWdlIG9mIHRoaXMgb3B0aW9uLiBJIHdhbnQgdG8gc2VlIGhvdyB0aGlzIHdvcmtzIGFuZCBhbnkgcG90ZW50aWFsIGNhdmVhdHMuIEkmIzM5O20gYXNzdW1pbmcgdGhhdCBgQ09ORklHX1BURFVNUF9ERUJVR0ZTYCBidWlsZHMgb24gdG9wIG9mIGBDT05GSUdfUFREVU1QYCwgbGlrZWx5IGVuYWJsaW5nIGFjY2VzcyB2aWEgZGVidWdmcy4gTGV0JiMzOTtzIGRpZyBpbiBhbmQgZmlndXJlIG91dCBob3cgaXQgYWxsIGZpdHMgdG9nZXRoZXIuIFRoaXMgc2hvdWxkIGJlIGEgcXVpY2sgb25lLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMiAxMzoxMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgUFREVU1QJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvYXJtNjQva3ZtL0tjb25maWc9NDU9aWYgS1ZNXG5hcmNoL2FybTY0L2t2bS9LY29uZmlnLTQ2LVxuYXJjaC9hcm02NC9rdm0vS2NvbmZpZzo0Nzpjb25maWcgUFREVU1QX1NUQUdFMl9ERUJVR0ZTXG5hcmNoL2FybTY0L2t2bS9LY29uZmlnLTQ4LVx0Ym9vbCBcJiMzNDtQcmVzZW50IHRoZSBzdGFnZS0yIHBhZ2V0YWJsZXMgdG8gZGVidWdmc1wmIzM0O1xuLS1cbm1tL0tjb25maWcuZGVidWc9MjE2PWNvbmZpZyBBUkNIX0hBU19QVERVTVBcbi0tXG5tbS9LY29uZmlnLmRlYnVnLTIxOC1cbm1tL0tjb25maWcuZGVidWc6MjE5OmNvbmZpZyBQVERVTVBcbm1tL0tjb25maWcuZGVidWctMjIwLVx0Ym9vbFxubW0vS2NvbmZpZy5kZWJ1Zy0yMjEtXG5tbS9LY29uZmlnLmRlYnVnOjIyMjpjb25maWcgUFREVU1QX0RFQlVHRlNcbm1tL0tjb25maWcuZGVidWctMjIzLVx0Ym9vbCBcJiMzNDtFeHBvcnQga2VybmVsIHBhZ2V0YWJsZSBsYXlvdXQgdG8gdXNlcnNwYWNlIHZpYSBkZWJ1Z2ZzXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEyIDEzOjEzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1MDU1CgkJCQkJCQlvdXRwdXQ6IDE1NAoJCQkJCQkJdGhvdWdodHM6IDMxMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiBUaGlzIEtlcm5lbCBQYXRjaCoqCgpPa2F5LCBzbyBoZXJlJiMzOTtzIHdoYXQgSSYjMzk7bSB0aGlua2luZyBhYm91dCB0aGlzIHBhdGNoLiBgQ09ORklHX1BURFVNUGAgaXMgYSBib29sZWFuLCBidXQgaXQmIzM5O3MgaW5kaXJlY3RseSBlbmFibGVkIGJ5IGBQVERVTVBfREVCVUdGU2AuIFRoYXQgbWVhbnMgYFBURFVNUF9ERUJVR0ZTYCBpcyB0aGUgcmVhbCBrZXkgdG8gZW5hYmxpbmcgdGhlIGZ1bmN0aW9uYWxpdHkgd2UmIzM5O3JlIGludGVyZXN0ZWQgaW4uCgpGcm9tIG15IGV4cGVydCBwZXJzcGVjdGl2ZSwgdGhpcyBkZWZpbml0ZWx5IGxvb2tzIHdvcnRoIGZ1enppbmcuIFRoZSBwYXRjaCBpcyBjaGFuZ2luZyBjb3JlIGtlcm5lbCBsb2dpYywgc3BlY2lmaWNhbGx5IGFyb3VuZCBwYWdlIHRhYmxlIGR1bXBpbmcgYW5kIGhvdyB2bWFsbG9jIGh1Z2UgcGFnZXMgYXJlIG1hcHBlZC4gVGhlIGZhY3QgdGhhdCB0aGV5JiMzOTtyZSBhZGRpbmcgbG9ja2luZyBvbiBgaW5pdF9tbWAgdG8gYXZvaWQgdXNlLWFmdGVyLWZyZWUgY29uZGl0aW9ucyBkdXJpbmcgY29uY3VycmVudCBwYWdlIHRhYmxlIG1vZGlmaWNhdGlvbnMgaW1tZWRpYXRlbHkgZ3JhYnMgbXkgYXR0ZW50aW9uIOKAkyB0aGF0JiMzOTtzIGEgY2xhc3NpYyBhcmVhIGZvciBtZW1vcnkgY29ycnVwdGlvbiBidWdzLiBBbmQsIGNydWNpYWxseSwgdGhpcyBmdW5jdGlvbmFsaXR5IGlzIGFjY2Vzc2libGUgdGhyb3VnaCBkZWJ1Z2ZzIGFuZCB2bWFsbG9jIGNhbGxzLCB3aGljaCBtYWtlcyBpdCBlYXNpZXIgdG8gdHJpZ2dlciBpbiBhIGNvbnRyb2xsZWQgZW52aXJvbm1lbnQuCgpUaGUga2V5IHN5bWJvbHMgSSYjMzk7dmUgaWRlbnRpZmllZCBhcyBsaWtlbHkgdGFyZ2V0cyBhcmU6CgoqICAgYHZtYXBfdHJ5X2h1Z2VfcG1kYAoqICAgYHZtYXBfdHJ5X2h1Z2VfcHVkYAoqICAgYHZtYXBfdHJ5X2h1Z2VfcDRkYAoqICAgYGNwYV9jb2xsYXBzZV9sYXJnZV9wYWdlc2AKKiAgIGBwdGR1bXBfd2Fsa19wZ2RgCiogICBgd2Fsa19wYWdlX3JhbmdlX2RlYnVnYAoKSSYjMzk7dmUgY29uZmlybWVkIHRoYXQgYGNwYV9jb2xsYXBzZV9sYXJnZV9wYWdlc2AgYW5kIGB2bWFwX3RyeV9odWdlX3BtZGAgYXJlIHN0YXRpYyBmdW5jdGlvbnMsIHdoaWNoIGlzIGZpbmUgdG8gaW5jbHVkZSBzaW5jZSB0aGV5IGFyZSByZWxldmFudCB0byB0aGUgcGF0Y2guIFRoZSBvdGhlciBmdW5jdGlvbnMgYXJlIGV4cG9ydGVkL2dsb2JhbC4KClNvLCBpbiBzaG9ydCwgSSYjMzk7bGwgYmUgZW5hYmxpbmcgYFBURFVNUF9ERUJVR0ZTYCBhcyB0aGUgY29uZmlndXJhdGlvbiBvcHRpb24gdG8gZm9jdXMgb24sIGFuZCB3aWxsIGNvbmNlbnRyYXRlIG15IGZ1enppbmcgZWZmb3J0cyBvbiB0aGVzZSBzcGVjaWZpYyBmdW5jdGlvbnMuIE5vdywgbGV0JiMzOTtzIGdldCB0aGUgcmVzdWx0cyBzZXQgdXAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEyIDEzOjEzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtQVERVTVBfREVCVUdGUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3ZtYXBfdHJ5X2h1Z2VfcG1kJiMzNDssCiAgICAmIzM0O3ZtYXBfdHJ5X2h1Z2VfcHVkJiMzNDssCiAgICAmIzM0O3ZtYXBfdHJ5X2h1Z2VfcDRkJiMzNDssCiAgICAmIzM0O2NwYV9jb2xsYXBzZV9sYXJnZV9wYWdlcyYjMzQ7LAogICAgJiMzNDtwdGR1bXBfd2Fsa19wZ2QmIzM0OywKICAgICYjMzQ7d2Fsa19wYWdlX3JhbmdlX2RlYnVnJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUga2VybmVsIGxvZ2ljIGZvciBwYWdlIHRhYmxlIGR1bXBpbmcgYW5kIHZtYWxsb2MgaHVnZSBwYWdlIG1hcHBpbmdzLCBpbnRyb2R1Y2luZyBsb2NraW5nIG9uIGBpbml0X21tYCB0byBwcmV2ZW50IHVzZS1hZnRlci1mcmVlIGR1cmluZyBjb25jdXJyZW50IHBhZ2UgdGFibGUgbW9kaWZpY2F0aW9ucy4gVGhpcyBpcyByZWFjaGFibGUgdmlhIGRlYnVnZnMgYW5kIHZtYWxsb2MgY2FsbHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1BURFVNUF9ERUJVR0ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dm1hcF90cnlfaHVnZV9wbWQmIzM0OywKICAgICYjMzQ7dm1hcF90cnlfaHVnZV9wdWQmIzM0OywKICAgICYjMzQ7dm1hcF90cnlfaHVnZV9wNGQmIzM0OywKICAgICYjMzQ7Y3BhX2NvbGxhcHNlX2xhcmdlX3BhZ2VzJiMzNDssCiAgICAmIzM0O3B0ZHVtcF93YWxrX3BnZCYjMzQ7LAogICAgJiMzNDt3YWxrX3BhZ2VfcmFuZ2VfZGVidWcmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBrZXJuZWwgbG9naWMgZm9yIHBhZ2UgdGFibGUgZHVtcGluZyBhbmQgdm1hbGxvYyBodWdlIHBhZ2UgbWFwcGluZ3MsIGludHJvZHVjaW5nIGxvY2tpbmcgb24gYGluaXRfbW1gIHRvIHByZXZlbnQgdXNlLWFmdGVyLWZyZWUgZHVyaW5nIGNvbmN1cnJlbnQgcGFnZSB0YWJsZSBtb2RpZmljYXRpb25zLiBUaGlzIGlzIHJlYWNoYWJsZSB2aWEgZGVidWdmcyBhbmQgdm1hbGxvYyBjYWxscy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEyVDEzOjEyOjAwLjgyNDQwMjgzOVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc3MjA0NTIxMjE2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlBURFVNUF9ERUJVR0ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidm1hcF90cnlfaHVnZV9wbWRcIixcbiAgICBcInZtYXBfdHJ5X2h1Z2VfcHVkXCIsXG4gICAgXCJ2bWFwX3RyeV9odWdlX3A0ZFwiLFxuICAgIFwiY3BhX2NvbGxhcHNlX2xhcmdlX3BhZ2VzXCIsXG4gICAgXCJwdGR1bXBfd2Fsa19wZ2RcIixcbiAgICBcIndhbGtfcGFnZV9yYW5nZV9kZWJ1Z1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUga2VybmVsIGxvZ2ljIGZvciBwYWdlIHRhYmxlIGR1bXBpbmcgYW5kIHZtYWxsb2MgaHVnZSBwYWdlIG1hcHBpbmdzLCBpbnRyb2R1Y2luZyBsb2NraW5nIG9uIGBpbml0X21tYCB0byBwcmV2ZW50IHVzZS1hZnRlci1mcmVlIGR1cmluZyBjb25jdXJyZW50IHBhZ2UgdGFibGUgbW9kaWZpY2F0aW9ucy4gVGhpcyBpcyByZWFjaGFibGUgdmlhIGRlYnVnZnMgYW5kIHZtYWxsb2MgY2FsbHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEyVDEzOjEyOjAwLjgyNDQwNzYxOVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTI4MzU5NjE4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgZTViZjhkZDk4MTMyZDdlNjExZjM2NmM2MTRkZmU1OTc4OGQwNWUzY1xcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgU3VuIEp1bCAxMiAxMzoxMTo1OSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3B0ZHVtcC5oIGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9wdGR1bXAuaFxcbmluZGV4IDViMzc0YTZhYjM0YTRlLi41MGExOTVlZGE4ZWQyMiAxMDA2NDRcXG4tLS0gYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3B0ZHVtcC5oXFxuKysrIGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9wdGR1bXAuaFxcbkBAIC03LDggKzcsNiBAQFxcbiBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3B0ZHVtcC5oXFx1MDAzZVxcbiBcXG4tREVDTEFSRV9TVEFUSUNfS0VZX0ZBTFNFKGFybTY0X3B0ZHVtcF9sb2NrX2tleSk7XFxuLVxcbiAjaWZkZWYgQ09ORklHX1BURFVNUFxcbiBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L21tX3R5cGVzLmhcXHUwMDNlXFxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvbW0vbW11LmMgYi9hcmNoL2FybTY0L21tL21tdS5jXFxuaW5kZXggYTI1ZDhiZWFjYzgzMTAuLmJkNTJmY2E2ZTg3MjBiIDEwMDY0NFxcbi0tLSBhL2FyY2gvYXJtNjQvbW0vbW11LmNcXG4rKysgYi9hcmNoL2FybTY0L21tL21tdS5jXFxuQEAgLTQ5LDggKzQ5LDYgQEBcXG4gI2RlZmluZSBOT19DT05UX01BUFBJTkdTXFx0QklUKDEpXFxuICNkZWZpbmUgTk9fRVhFQ19NQVBQSU5HU1xcdEJJVCgyKVxcdC8qIGFzc3VtZXMgRkVBVF9IUERTIGlzIG5vdCB1c2VkICovXFxuIFxcbi1ERUZJTkVfU1RBVElDX0tFWV9GQUxTRShhcm02NF9wdGR1bXBfbG9ja19rZXkpO1xcbi1cXG4gdTY0IGtpbWFnZV92b2Zmc2V0IF9fcm9fYWZ0ZXJfaW5pdDtcXG4gRVhQT1JUX1NZTUJPTChraW1hZ2Vfdm9mZnNldCk7XFxuIFxcbkBAIC0xODY0LDggKzE4NjIsNyBAQCBpbnQgcG1kX2NsZWFyX2h1Z2UocG1kX3QgKnBtZHApXFxuIFxcdHJldHVybiAxO1xcbiB9XFxuIFxcbi1zdGF0aWMgaW50IF9fcG1kX2ZyZWVfcHRlX3BhZ2UocG1kX3QgKnBtZHAsIHVuc2lnbmVkIGxvbmcgYWRkcixcXG4tXFx0XFx0XFx0ICAgICAgIGJvb2wgYWNxdWlyZV9tbWFwX2xvY2spXFxuK2ludCBwbWRfZnJlZV9wdGVfcGFnZShwbWRfdCAqcG1kcCwgdW5zaWduZWQgbG9uZyBhZGRyKVxcbiB7XFxuIFxcdHB0ZV90ICp0YWJsZTtcXG4gXFx0cG1kX3QgcG1kO1xcbkBAIC0xODc3LDI1ICsxODc0LDEzIEBAIHN0YXRpYyBpbnQgX19wbWRfZnJlZV9wdGVfcGFnZShwbWRfdCAqcG1kcCwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbiBcXHRcXHRyZXR1cm4gMTtcXG4gXFx0fVxcbiBcXG4tXFx0LyogU2VlIGNvbW1lbnQgaW4gcHVkX2ZyZWVfcG1kX3BhZ2UgZm9yIHN0YXRpYyBrZXkgbG9naWMgKi9cXG4gXFx0dGFibGUgPSBwdGVfb2Zmc2V0X2tlcm5lbChwbWRwLCBhZGRyKTtcXG4gXFx0cG1kX2NsZWFyKHBtZHApO1xcbiBcXHRfX2ZsdXNoX3RsYl9rZXJuZWxfcGd0YWJsZShhZGRyKTtcXG4tXFx0aWYgKHN0YXRpY19icmFuY2hfdW5saWtlbHkoXFx1MDAyNmFybTY0X3B0ZHVtcF9sb2NrX2tleSkgXFx1MDAyNlxcdTAwMjYgYWNxdWlyZV9tbWFwX2xvY2spIHtcXG4tXFx0XFx0bW1hcF9yZWFkX2xvY2soXFx1MDAyNmluaXRfbW0pO1xcbi1cXHRcXHRtbWFwX3JlYWRfdW5sb2NrKFxcdTAwMjZpbml0X21tKTtcXG4tXFx0fVxcbi1cXG4gXFx0cHRlX2ZyZWVfa2VybmVsKE5VTEwsIHRhYmxlKTtcXG4gXFx0cmV0dXJuIDE7XFxuIH1cXG4gXFxuLWludCBwbWRfZnJlZV9wdGVfcGFnZShwbWRfdCAqcG1kcCwgdW5zaWduZWQgbG9uZyBhZGRyKVxcbi17XFxuLVxcdC8qIElmIHB0ZHVtcCBpcyB3YWxraW5nIHRoZSBwYWdldGFibGVzLCBhY3F1aXJlIGluaXRfbW0ubW1hcF9sb2NrICovXFxuLVxcdHJldHVybiBfX3BtZF9mcmVlX3B0ZV9wYWdlKHBtZHAsIGFkZHIsIC8qIGFjcXVpcmVfbW1hcF9sb2NrID0gKi8gdHJ1ZSk7XFxuLX1cXG4tXFxuIGludCBwdWRfZnJlZV9wbWRfcGFnZShwdWRfdCAqcHVkcCwgdW5zaWduZWQgbG9uZyBhZGRyKVxcbiB7XFxuIFxcdHBtZF90ICp0YWJsZTtcXG5AQCAtMTkxMSwzNiArMTg5NiwxNiBAQCBpbnQgcHVkX2ZyZWVfcG1kX3BhZ2UocHVkX3QgKnB1ZHAsIHVuc2lnbmVkIGxvbmcgYWRkcilcXG4gXFx0fVxcbiBcXG4gXFx0dGFibGUgPSBwbWRfb2Zmc2V0KHB1ZHAsIGFkZHIpO1xcbi1cXG4tXFx0LypcXG4tXFx0ICogT3VyIG9iamVjdGl2ZSBpcyB0byBwcmV2ZW50IHB0ZHVtcCBmcm9tIHJlYWRpbmcgYSBQTUQgdGFibGUgd2hpY2ggaGFzXFxuLVxcdCAqIGJlZW4gZnJlZWQuIEluIHRoaXMgcmFjZSwgaWYgcHVkX2ZyZWVfcG1kX3BhZ2Ugb2JzZXJ2ZXMgdGhlIGtleSBvblxcbi1cXHQgKiAod2hpY2ggZ290IGZsaXBwZWQgYnkgcHRkdW1wKSB0aGVuIHRoZSBtbWFwIGxvY2sgc2VxdWVuY2UgaGVyZSB3aWxsLFxcbi1cXHQgKiBhcyBhIHJlc3VsdCBvZiB0aGUgbW1hcCB3cml0ZSBsb2NrL3VubG9jayBzZXF1ZW5jZSBpbiBwdGR1bXAsIGdpdmVcXG4tXFx0ICogdXMgdGhlIGNvcnJlY3Qgc3luY2hyb25pemF0aW9uLiBJZiBub3QsIHRoaXMgbWVhbnMgdGhhdCBwdGR1bXAgaGFzXFxuLVxcdCAqIHlldCBub3Qgc3RhcnRlZCB3YWxraW5nIHRoZSBwYWdldGFibGVzIC0gdGhlIHNlcXVlbmNlIG9mIGJhcnJpZXJzXFxuLVxcdCAqIGlzc3VlZCBieSBfX2ZsdXNoX3RsYl9rZXJuZWxfcGd0YWJsZSgpIGd1YXJhbnRlZXMgdGhhdCBwdGR1bXAgd2lsbFxcbi1cXHQgKiBvYnNlcnZlIGFuIGVtcHR5IFBVRC5cXG4tXFx0ICovXFxuLVxcdHB1ZF9jbGVhcihwdWRwKTtcXG4tXFx0X19mbHVzaF90bGJfa2VybmVsX3BndGFibGUoYWRkcik7XFxuLVxcdGlmIChzdGF0aWNfYnJhbmNoX3VubGlrZWx5KFxcdTAwMjZhcm02NF9wdGR1bXBfbG9ja19rZXkpKSB7XFxuLVxcdFxcdG1tYXBfcmVhZF9sb2NrKFxcdTAwMjZpbml0X21tKTtcXG4tXFx0XFx0bW1hcF9yZWFkX3VubG9jayhcXHUwMDI2aW5pdF9tbSk7XFxuLVxcdH1cXG4tXFxuIFxcdHBtZHAgPSB0YWJsZTtcXG4gXFx0bmV4dCA9IGFkZHI7XFxuIFxcdGVuZCA9IGFkZHIgKyBQVURfU0laRTtcXG4gXFx0ZG8ge1xcbiBcXHRcXHRpZiAocG1kX3ByZXNlbnQocG1kcF9nZXQocG1kcCkpKVxcbi1cXHRcXHRcXHQvKlxcbi1cXHRcXHRcXHQgKiBQTUQgaGFzIGJlZW4gaXNvbGF0ZWQsIHNvIHB0ZHVtcCB3b24ndCBzZWUgaXQuIE5vXFxuLVxcdFxcdFxcdCAqIG5lZWQgdG8gYWNxdWlyZSBpbml0X21tLm1tYXBfbG9jay5cXG4tXFx0XFx0XFx0ICovXFxuLVxcdFxcdFxcdF9fcG1kX2ZyZWVfcHRlX3BhZ2UocG1kcCwgbmV4dCwgLyogYWNxdWlyZV9tbWFwX2xvY2sgPSAqLyBmYWxzZSk7XFxuK1xcdFxcdFxcdHBtZF9mcmVlX3B0ZV9wYWdlKHBtZHAsIG5leHQpO1xcbiBcXHR9IHdoaWxlIChwbWRwKyssIG5leHQgKz0gUE1EX1NJWkUsIG5leHQgIT0gZW5kKTtcXG4gXFxuK1xcdHB1ZF9jbGVhcihwdWRwKTtcXG4rXFx0X19mbHVzaF90bGJfa2VybmVsX3BndGFibGUoYWRkcik7XFxuIFxcdHBtZF9mcmVlKE5VTEwsIHRhYmxlKTtcXG4gXFx0cmV0dXJuIDE7XFxuIH1cXG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9tbS9wdGR1bXAuYyBiL2FyY2gvYXJtNjQvbW0vcHRkdW1wLmNcXG5pbmRleCAxYzIwMTQ0NzAwZDdkNy4uNWE3NmM1OWI1YWRhNTUgMTAwNjQ0XFxuLS0tIGEvYXJjaC9hcm02NC9tbS9wdGR1bXAuY1xcbisrKyBiL2FyY2gvYXJtNjQvbW0vcHRkdW1wLmNcXG5AQCAtMjgzLDEzICsyODMsNiBAQCB2b2lkIG5vdGVfcGFnZV9mbHVzaChzdHJ1Y3QgcHRkdW1wX3N0YXRlICpwdF9zdClcXG4gXFx0bm90ZV9wYWdlKHB0X3N0LCAwLCAtMSwgcHRlX3ZhbChwdGVfemVybykpO1xcbiB9XFxuIFxcbi1zdGF0aWMgdm9pZCBhcm02NF9wdGR1bXBfd2Fsa19wZ2Qoc3RydWN0IHB0ZHVtcF9zdGF0ZSAqc3QsIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxcbi17XFxuLVxcdHN0YXRpY19icmFuY2hfaW5jKFxcdTAwMjZhcm02NF9wdGR1bXBfbG9ja19rZXkpO1xcbi1cXHRwdGR1bXBfd2Fsa19wZ2Qoc3QsIG1tLCBOVUxMKTtcXG4tXFx0c3RhdGljX2JyYW5jaF9kZWMoXFx1MDAyNmFybTY0X3B0ZHVtcF9sb2NrX2tleSk7XFxuLX1cXG4tXFxuIHZvaWQgcHRkdW1wX3dhbGsoc3RydWN0IHNlcV9maWxlICpzLCBzdHJ1Y3QgcHRkdW1wX2luZm8gKmluZm8pXFxuIHtcXG4gXFx0dW5zaWduZWQgbG9uZyBlbmQgPSB+MFVMO1xcbkBAIC0zMTgsNyArMzExLDcgQEAgdm9pZCBwdGR1bXBfd2FsayhzdHJ1Y3Qgc2VxX2ZpbGUgKnMsIHN0cnVjdCBwdGR1bXBfaW5mbyAqaW5mbylcXG4gXFx0XFx0fVxcbiBcXHR9O1xcbiBcXG4tXFx0YXJtNjRfcHRkdW1wX3dhbGtfcGdkKFxcdTAwMjZzdC5wdGR1bXAsIGluZm8tXFx1MDAzZW1tKTtcXG4rXFx0cHRkdW1wX3dhbGtfcGdkKFxcdTAwMjZzdC5wdGR1bXAsIGluZm8tXFx1MDAzZW1tLCBOVUxMKTtcXG4gfVxcbiBcXG4gc3RhdGljIHZvaWQgX19pbml0IHB0ZHVtcF9pbml0aWFsaXplKHZvaWQpXFxuQEAgLTM2MCw3ICszNTMsNyBAQCBib29sIHB0ZHVtcF9jaGVja193eCh2b2lkKVxcbiBcXHRcXHR9XFxuIFxcdH07XFxuIFxcbi1cXHRhcm02NF9wdGR1bXBfd2Fsa19wZ2QoXFx1MDAyNnN0LnB0ZHVtcCwgXFx1MDAyNmluaXRfbW0pO1xcbitcXHRwdGR1bXBfd2Fsa19wZ2QoXFx1MDAyNnN0LnB0ZHVtcCwgXFx1MDAyNmluaXRfbW0sIE5VTEwpO1xcbiBcXG4gXFx0aWYgKHN0Lnd4X3BhZ2VzIHx8IHN0LnV4bl9wYWdlcykge1xcbiBcXHRcXHRwcl93YXJuKFxcXCJDaGVja2VkIFcrWCBtYXBwaW5nczogRkFJTEVELCAlbHUgVytYIHBhZ2VzIGZvdW5kLCAlbHUgbm9uLVVYTiBwYWdlcyBmb3VuZFxcXFxuXFxcIixcXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYyBiL2FyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmNcXG5pbmRleCBkMDIzYTQwYTFlMDM0NS4uNGM0YjgyNDQ1MDJmY2UgMTAwNjQ0XFxuLS0tIGEvYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuY1xcbisrKyBiL2FyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmNcXG5AQCAtMjIsNiArMjIsNyBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvY2NfcGxhdGZvcm0uaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3NldF9tZW1vcnkuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L21lbXJlZ2lvbi5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvY2xlYW51cC5oXFx1MDAzZVxcbiBcXG4gI2luY2x1ZGUgXFx1MDAzY2FzbS9lODIwL2FwaS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjYXNtL3Byb2Nlc3Nvci5oXFx1MDAzZVxcbkBAIC00MzYsOSArNDM3LDE2IEBAIHN0YXRpYyB2b2lkIGNwYV9jb2xsYXBzZV9sYXJnZV9wYWdlcyhzdHJ1Y3QgY3BhX2RhdGEgKmNwYSlcXG4gXFxuIFxcdGZsdXNoX3RsYl9hbGwoKTtcXG4gXFxuLVxcdGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShwdGRlc2MsIHRtcCwgXFx1MDAyNnBndGFibGVzLCBwdF9saXN0KSB7XFxuLVxcdFxcdGxpc3RfZGVsKFxcdTAwMjZwdGRlc2MtXFx1MDAzZXB0X2xpc3QpO1xcbi1cXHRcXHRwYWdldGFibGVfZnJlZShwdGRlc2MpO1xcbitcXHQvKlxcbitcXHQgKiBwdGR1bXAgbWlnaHQgcmVhZCB0aGVzZSBwYWdlIHRhYmxlcywgc28gYXZvaWQgYSB1c2UtYWZ0ZXItZnJlZSBieVxcbitcXHQgKiBhY3F1aXJpbmcgdGhlIG1tYXAgcmVhZCBsb2NrIG9uIGluaXRfbW0gKHB0ZHVtcCBhY3F1aXJlcyB0aGUgbW1hcFxcbitcXHQgKiB3cml0ZSBsb2NrKS5cXG4rXFx0ICovXFxuK1xcdHNjb3BlZF9ndWFyZChtbWFwX3JlYWRfbG9jaywgXFx1MDAyNmluaXRfbW0pIHtcXG4rXFx0XFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHB0ZGVzYywgdG1wLCBcXHUwMDI2cGd0YWJsZXMsIHB0X2xpc3QpIHtcXG4rXFx0XFx0XFx0bGlzdF9kZWwoXFx1MDAyNnB0ZGVzYy1cXHUwMDNlcHRfbGlzdCk7XFxuK1xcdFxcdFxcdHBhZ2V0YWJsZV9mcmVlKHB0ZGVzYyk7XFxuK1xcdFxcdH1cXG4gXFx0fVxcbiB9XFxuIFxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21tYXBfbG9jay5oIGIvaW5jbHVkZS9saW51eC9tbWFwX2xvY2suaFxcbmluZGV4IDA0YjhmNjFlY2U1ZDhlLi42YjVjMjM5MGNjMzAxZiAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L21tYXBfbG9jay5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9tbWFwX2xvY2suaFxcbkBAIC02MjEsNiArNjIxLDcgQEAgc3RhdGljIGlubGluZSB2b2lkIG1tYXBfcmVhZF91bmxvY2soc3RydWN0IG1tX3N0cnVjdCAqbW0pXFxuIFxcbiBERUZJTkVfR1VBUkQobW1hcF9yZWFkX2xvY2ssIHN0cnVjdCBtbV9zdHJ1Y3QgKixcXG4gXFx0ICAgICBtbWFwX3JlYWRfbG9jayhfVCksIG1tYXBfcmVhZF91bmxvY2soX1QpKVxcbitERUZJTkVfR1VBUkRfQ09ORChtbWFwX3JlYWRfbG9jaywgX3RyeSwgbW1hcF9yZWFkX3RyeWxvY2soX1QpKVxcbiBcXG4gc3RhdGljIGlubGluZSB2b2lkIG1tYXBfcmVhZF91bmxvY2tfbm9uX293bmVyKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxcbiB7XFxuZGlmZiAtLWdpdCBhL21tL3BhZ2V3YWxrLmMgYi9tbS9wYWdld2Fsay5jXFxuaW5kZXggM2FlMjU4NmZmNDViNDQuLjVkODdjNjMyYTI1NTA3IDEwMDY0NFxcbi0tLSBhL21tL3BhZ2V3YWxrLmNcXG4rKysgYi9tbS9wYWdld2Fsay5jXFxuQEAgLTY3OCw2ICs2NzgsOCBAQCBpbnQgd2Fsa19rZXJuZWxfcGFnZV90YWJsZV9yYW5nZV9sb2NrbGVzcyh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZFxcbiAgKiB3aWxsIGFsc28gbm90IGxvY2sgdGhlIFBURXMgZm9yIHRoZSBwdGVfZW50cnkoKSBjYWxsYmFjay5cXG4gICpcXG4gICogVGhpcyBpcyBmb3IgZGVidWdnaW5nIHB1cnBvc2VzIE9OTFkuXFxuKyAqXFxuKyAqIFRoZSBtbWFwIHdyaXRlIGxvY2sgbXVzdCBiZSBoZWxkLlxcbiAgKi9cXG4gaW50IHdhbGtfcGFnZV9yYW5nZV9kZWJ1ZyhzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBzdGFydCxcXG4gXFx0XFx0XFx0ICB1bnNpZ25lZCBsb25nIGVuZCwgY29uc3Qgc3RydWN0IG1tX3dhbGtfb3BzICpvcHMsXFxuQEAgLTY5MSwyNCArNjkzLDI4IEBAIGludCB3YWxrX3BhZ2VfcmFuZ2VfZGVidWcoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgc3RhcnQsXFxuIFxcdFxcdC5ub192bWFcXHRcXHQ9IHRydWVcXG4gXFx0fTtcXG4gXFxuLVxcdC8qIEZvciBjb252ZW5pZW5jZSwgd2UgYWxsb3cgdHJhdmVyc2FsIG9mIGtlcm5lbCBtYXBwaW5ncy4gKi9cXG4tXFx0aWYgKG1tID09IFxcdTAwMjZpbml0X21tKVxcbi1cXHRcXHRyZXR1cm4gd2Fsa19rZXJuZWxfcGFnZV90YWJsZV9yYW5nZShzdGFydCwgZW5kLCBvcHMsXFxuLVxcdFxcdFxcdFxcdFxcdFxcdCAgICBwZ2QsIHByaXZhdGUpO1xcbi1cXHRpZiAoc3RhcnQgXFx1MDAzZT0gZW5kIHx8ICF3YWxrLm1tKVxcbi1cXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4tXFx0aWYgKCFjaGVja19vcHNfc2FmZShvcHMpKVxcbi1cXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4tXFxuIFxcdC8qXFxuLVxcdCAqIFRoZSBtbWFwIGxvY2sgcHJvdGVjdHMgdGhlIHBhZ2Ugd2Fsa2VyIGZyb20gY2hhbmdlcyB0byB0aGUgcGFnZVxcbi1cXHQgKiB0YWJsZXMgZHVyaW5nIHRoZSB3YWxrLiAgSG93ZXZlciBhIHJlYWQgbG9jayBpcyBpbnN1ZmZpY2llbnQgdG9cXG4tXFx0ICogcHJvdGVjdCB0aG9zZSBhcmVhcyB3aGljaCBkb24ndCBoYXZlIGEgVk1BIGFzIG11bm1hcCgpIGRldGFjaGVzXFxuLVxcdCAqIHRoZSBWTUFzIGJlZm9yZSBkb3duZ3JhZGluZyB0byBhIHJlYWQgbG9jayBhbmQgYWN0dWFsbHkgdGVhcmluZ1xcbi1cXHQgKiBkb3duIFBURXMvcGFnZSB0YWJsZXMuIEluIHdoaWNoIGNhc2UsIHRoZSBtbWFwIHdyaXRlIGxvY2sgc2hvdWxkXFxuLVxcdCAqIGJlIGhlbGQuXFxuK1xcdCAqIFdoZW4gd2Fsa2luZyB1c2VybGFuZCBwYWdlIHRhYmxlcywgYW4gbW1hcCB3cml0ZSBsb2NrIG11c3QgYmUgaGVsZCB0b1xcbitcXHQgKiBhY2NvdW50IGZvciBtdW5tYXAoKSBkb3duZ3JhZGluZyB0byBhbiBtbWFwIHJlYWQgbG9jayB3aGVuIHRlYXJpbmdcXG4rXFx0ICogZG93biBwYWdlIHRhYmxlcy5cXG4rXFx0ICpcXG4rXFx0ICogV2hlbiB3YWxraW5nIGtlcm5lbCBwYWdlIHRhYmxlcywgYW4gbW1hcCB3cml0ZSBsb2NrIG11c3QgYWxzbyBiZSBoZWxkXFxuK1xcdCAqIHRvIGFjY291bnQgZm9yIHBhZ2UgdGFibGUgZnJlZWluZyBvbiB2bWFwIGh1Z2UgcGFnZSBtYXBwaW5nLlxcbiBcXHQgKi9cXG4gXFx0bW1hcF9hc3NlcnRfd3JpdGVfbG9ja2VkKG1tKTtcXG4rXFx0LypcXG4rXFx0ICogeDg2LCBhcm02NCBwdGR1bXAgYWxsb3cgd2Fsa3Mgb2YgZWZpIG1tJ3MgYW5kIHg4NiBwdGR1bXAgYWxsb3dzIHdhbGtzXFxuK1xcdCAqIG9mIGFyYml0cmFyeSBtbSdzLlxcbitcXHQgKlxcbitcXHQgKiBIb3dldmVyLCB0aGV5IGJvdGggbXVzdCBhbHNvIGhvbGQgdGhlIGluaXRfbW0gbG9jayB0byBhY2NvdW50IGZvclxcbitcXHQgKiBjb25jdXJyZW50IGtlcm5lbCBwYWdlIHRhYmxlIGZyZWVpbmcuXFxuK1xcdCAqL1xcbitcXHRtbWFwX2Fzc2VydF93cml0ZV9sb2NrZWQoXFx1MDAyNmluaXRfbW0pO1xcbitcXG4rXFx0aWYgKHN0YXJ0IFxcdTAwM2U9IGVuZClcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcdGlmICghY2hlY2tfb3BzX3NhZmUob3BzKSlcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIFxcbiBcXHRyZXR1cm4gd2Fsa19wZ2RfcmFuZ2Uoc3RhcnQsIGVuZCwgXFx1MDAyNndhbGspO1xcbiB9XFxuZGlmZiAtLWdpdCBhL21tL3B0ZHVtcC5jIGIvbW0vcHRkdW1wLmNcXG5pbmRleCA5NzMwMjAwMDAwOTZjZi4uNTg1MTA5NmU2ZjY1NmMgMTAwNjQ0XFxuLS0tIGEvbW0vcHRkdW1wLmNcXG4rKysgYi9tbS9wdGR1bXAuY1xcbkBAIC0xNzgsMTEgKzE3OCwxOCBAQCB2b2lkIHB0ZHVtcF93YWxrX3BnZChzdHJ1Y3QgcHRkdW1wX3N0YXRlICpzdCwgc3RydWN0IG1tX3N0cnVjdCAqbW0sIHBnZF90ICpwZ2QpXFxuIFxcbiBcXHRnZXRfb25saW5lX21lbXMoKTtcXG4gXFx0bW1hcF93cml0ZV9sb2NrKG1tKTtcXG4rXFx0LyogVG8gc3RhYmlsaXNlIGtlcm5lbCBwYWdlIHRhYmxlcyB3ZSBtdXN0IGhvbGQgdGhlIGluaXRfbW0gbG9jayB0b28uICovXFxuK1xcdGlmIChtbSAhPSBcXHUwMDI2aW5pdF9tbSlcXG4rXFx0XFx0bW1hcF93cml0ZV9sb2NrX25lc3RlZChcXHUwMDI2aW5pdF9tbSwgU0lOR0xFX0RFUFRIX05FU1RJTkcpO1xcbitcXG4gXFx0d2hpbGUgKHJhbmdlLVxcdTAwM2VzdGFydCAhPSByYW5nZS1cXHUwMDNlZW5kKSB7XFxuIFxcdFxcdHdhbGtfcGFnZV9yYW5nZV9kZWJ1ZyhtbSwgcmFuZ2UtXFx1MDAzZXN0YXJ0LCByYW5nZS1cXHUwMDNlZW5kLFxcbiBcXHRcXHRcXHRcXHQgICAgICBcXHUwMDI2cHRkdW1wX29wcywgcGdkLCBzdCk7XFxuIFxcdFxcdHJhbmdlKys7XFxuIFxcdH1cXG4rXFxuK1xcdGlmIChtbSAhPSBcXHUwMDI2aW5pdF9tbSlcXG4rXFx0XFx0bW1hcF93cml0ZV91bmxvY2soXFx1MDAyNmluaXRfbW0pO1xcbiBcXHRtbWFwX3dyaXRlX3VubG9jayhtbSk7XFxuIFxcdHB1dF9vbmxpbmVfbWVtcygpO1xcbiBcXG5kaWZmIC0tZ2l0IGEvbW0vdm1hbGxvYy5jIGIvbW0vdm1hbGxvYy5jXFxuaW5kZXggMWFmY2EzNTY4YjliNjUuLjQwMDU2M2FjNmQ1ZDdiIDEwMDY0NFxcbi0tLSBhL21tL3ZtYWxsb2MuY1xcbisrKyBiL21tL3ZtYWxsb2MuY1xcbkBAIC00Myw2ICs0Myw3IEBAXFxuICNpbmNsdWRlIFxcdTAwM2Nhc20vdGxiZmx1c2guaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2FzbS9zaG1wYXJhbS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvcGFnZV9vd25lci5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvY2xlYW51cC5oXFx1MDAzZVxcbiBcXG4gI2RlZmluZSBDUkVBVEVfVFJBQ0VfUE9JTlRTXFxuICNpbmNsdWRlIFxcdTAwM2N0cmFjZS9ldmVudHMvdm1hbGxvYy5oXFx1MDAzZVxcbkBAIC0xNTgsMTAgKzE1OSwyMiBAQCBzdGF0aWMgaW50IHZtYXBfdHJ5X2h1Z2VfcG1kKHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsXFxuIFxcdGlmICghSVNfQUxJR05FRChwaHlzX2FkZHIsIFBNRF9TSVpFKSlcXG4gXFx0XFx0cmV0dXJuIDA7XFxuIFxcbi1cXHRpZiAocG1kX3ByZXNlbnQoKnBtZCkgXFx1MDAyNlxcdTAwMjYgIXBtZF9mcmVlX3B0ZV9wYWdlKHBtZCwgYWRkcikpXFxuLVxcdFxcdHJldHVybiAwO1xcbitcXHRpZiAoIXBtZF9wcmVzZW50KCpwbWQpKVxcbitcXHRcXHRyZXR1cm4gcG1kX3NldF9odWdlKHBtZCwgcGh5c19hZGRyLCBwcm90KTtcXG4gXFxuLVxcdHJldHVybiBwbWRfc2V0X2h1Z2UocG1kLCBwaHlzX2FkZHIsIHByb3QpO1xcbitcXHQvKlxcbitcXHQgKiBLZXJuZWwgcGFnZSB0YWJsZSB3YWxrZXJzIGVpdGhlciB3YWxrIHJhbmdlcyB0aGV5IG93biBleGNsdXNpdmVseSBvclxcbitcXHQgKiBob2xkIHRoZSBtbWFwIHdyaXRlIGxvY2sgb24gaW5pdF9tbSAocHRkdW1wIGJlaW5nIHRoZSBtb3RpdmF0aW5nXFxuK1xcdCAqIGNhc2UpLlxcbitcXHQgKlxcbitcXHQgKiBUaGVyZWZvcmUsIGFjcXVpcmUgdGhlIG1tYXAgcmVhZCBsb2NrIHRvIHByZXZlbnQgdXNlLWFmdGVyLWZyZWUgd2hlblxcbitcXHQgKiBmcmVlaW5nIHBhZ2UgdGFibGVzLlxcbitcXHQgKi9cXG4rXFx0c2NvcGVkX2NvbmRfZ3VhcmQobW1hcF9yZWFkX2xvY2tfdHJ5LCByZXR1cm4gMCwgXFx1MDAyNmluaXRfbW0pIHtcXG4rXFx0XFx0aWYgKCFwbWRfZnJlZV9wdGVfcGFnZShwbWQsIGFkZHIpKVxcbitcXHRcXHRcXHRyZXR1cm4gMDtcXG4rXFx0XFx0cmV0dXJuIHBtZF9zZXRfaHVnZShwbWQsIHBoeXNfYWRkciwgcHJvdCk7XFxuK1xcdH1cXG4gfVxcbiBcXG4gc3RhdGljIGludCB2bWFwX3BtZF9yYW5nZShwdWRfdCAqcHVkLCB1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLFxcbkBAIC0yMTAsMTAgKzIyMywxNSBAQCBzdGF0aWMgaW50IHZtYXBfdHJ5X2h1Z2VfcHVkKHB1ZF90ICpwdWQsIHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsXFxuIFxcdGlmICghSVNfQUxJR05FRChwaHlzX2FkZHIsIFBVRF9TSVpFKSlcXG4gXFx0XFx0cmV0dXJuIDA7XFxuIFxcbi1cXHRpZiAocHVkX3ByZXNlbnQoKnB1ZCkgXFx1MDAyNlxcdTAwMjYgIXB1ZF9mcmVlX3BtZF9wYWdlKHB1ZCwgYWRkcikpXFxuLVxcdFxcdHJldHVybiAwO1xcbitcXHRpZiAoIXB1ZF9wcmVzZW50KCpwdWQpKVxcbitcXHRcXHRyZXR1cm4gcHVkX3NldF9odWdlKHB1ZCwgcGh5c19hZGRyLCBwcm90KTtcXG4gXFxuLVxcdHJldHVybiBwdWRfc2V0X2h1Z2UocHVkLCBwaHlzX2FkZHIsIHByb3QpO1xcbitcXHQvKiBTZWUgY29tbWVudCBpbiB2bWFwX3RyeV9odWdlX3BtZCgpLiAqL1xcbitcXHRzY29wZWRfY29uZF9ndWFyZChtbWFwX3JlYWRfbG9ja190cnksIHJldHVybiAwLCBcXHUwMDI2aW5pdF9tbSkge1xcbitcXHRcXHRpZiAoIXB1ZF9mcmVlX3BtZF9wYWdlKHB1ZCwgYWRkcikpXFxuK1xcdFxcdFxcdHJldHVybiAwO1xcbitcXHRcXHRyZXR1cm4gcHVkX3NldF9odWdlKHB1ZCwgcGh5c19hZGRyLCBwcm90KTtcXG4rXFx0fVxcbiB9XFxuIFxcbiBzdGF0aWMgaW50IHZtYXBfcHVkX3JhbmdlKHA0ZF90ICpwNGQsIHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsXFxuQEAgLTI2MiwxMCArMjgwLDE1IEBAIHN0YXRpYyBpbnQgdm1hcF90cnlfaHVnZV9wNGQocDRkX3QgKnA0ZCwgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCxcXG4gXFx0aWYgKCFJU19BTElHTkVEKHBoeXNfYWRkciwgUDREX1NJWkUpKVxcbiBcXHRcXHRyZXR1cm4gMDtcXG4gXFxuLVxcdGlmIChwNGRfcHJlc2VudCgqcDRkKSBcXHUwMDI2XFx1MDAyNiAhcDRkX2ZyZWVfcHVkX3BhZ2UocDRkLCBhZGRyKSlcXG4tXFx0XFx0cmV0dXJuIDA7XFxuK1xcdGlmICghcDRkX3ByZXNlbnQoKnA0ZCkpXFxuK1xcdFxcdHJldHVybiBwNGRfc2V0X2h1Z2UocDRkLCBwaHlzX2FkZHIsIHByb3QpO1xcbiBcXG4tXFx0cmV0dXJuIHA0ZF9zZXRfaHVnZShwNGQsIHBoeXNfYWRkciwgcHJvdCk7XFxuK1xcdC8qIFNlZSBjb21tZW50IGluIHZtYXBfdHJ5X2h1Z2VfcG1kKCkuICovXFxuK1xcdHNjb3BlZF9jb25kX2d1YXJkKG1tYXBfcmVhZF9sb2NrX3RyeSwgcmV0dXJuIDAsIFxcdTAwMjZpbml0X21tKSB7XFxuK1xcdFxcdGlmICghcDRkX2ZyZWVfcHVkX3BhZ2UocDRkLCBhZGRyKSlcXG4rXFx0XFx0XFx0cmV0dXJuIDA7XFxuK1xcdFxcdHJldHVybiBwNGRfc2V0X2h1Z2UocDRkLCBwaHlzX2FkZHIsIHByb3QpO1xcbitcXHR9XFxuIH1cXG4gXFxuIHN0YXRpYyBpbnQgdm1hcF9wNGRfcmFuZ2UocGdkX3QgKnBnZCwgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTJUMTM6MTI6MDEuMzUzNTU0OTE2WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3NjY3NTM2MTIwOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJQVERVTVBfREVCVUdGU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInZtYXBfdHJ5X2h1Z2VfcG1kXCIsXG4gICAgXCJ2bWFwX3RyeV9odWdlX3B1ZFwiLFxuICAgIFwidm1hcF90cnlfaHVnZV9wNGRcIixcbiAgICBcImNwYV9jb2xsYXBzZV9sYXJnZV9wYWdlc1wiLFxuICAgIFwicHRkdW1wX3dhbGtfcGdkXCIsXG4gICAgXCJ3YWxrX3BhZ2VfcmFuZ2VfZGVidWdcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBjb3JlIGtlcm5lbCBsb2dpYyBmb3IgcGFnZSB0YWJsZSBkdW1waW5nIGFuZCB2bWFsbG9jIGh1Z2UgcGFnZSBtYXBwaW5ncywgaW50cm9kdWNpbmcgbG9ja2luZyBvbiBgaW5pdF9tbWAgdG8gcHJldmVudCB1c2UtYWZ0ZXItZnJlZSBkdXJpbmcgY29uY3VycmVudCBwYWdlIHRhYmxlIG1vZGlmaWNhdGlvbnMuIFRoaXMgaXMgcmVhY2hhYmxlIHZpYSBkZWJ1Z2ZzIGFuZCB2bWFsbG9jIGNhbGxzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG5ldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0XG4gICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksXG4gICBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGU1YmY4ZGQ5ODEzMmQ3ZTYxMWYzNjZjNjE0ZGZlNTk3ODhkMDVlM2NcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU3VuIEp1bCAxMiAxMzoxMTo1OSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vcHRkdW1wLmggYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3B0ZHVtcC5oXG5pbmRleCA1YjM3NGE2YWIzNGE0ZS4uNTBhMTk1ZWRhOGVkMjIgMTAwNjQ0XG4tLS0gYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3B0ZHVtcC5oXG4rKysgYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3B0ZHVtcC5oXG5AQCAtNyw4ICs3LDYgQEBcbiBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9wdGR1bXAuaFx1MDAzZVxuIFxuLURFQ0xBUkVfU1RBVElDX0tFWV9GQUxTRShhcm02NF9wdGR1bXBfbG9ja19rZXkpO1xuLVxuICNpZmRlZiBDT05GSUdfUFREVU1QXG4gXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbW1fdHlwZXMuaFx1MDAzZVxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvbW0vbW11LmMgYi9hcmNoL2FybTY0L21tL21tdS5jXG5pbmRleCBhMjVkOGJlYWNjODMxMC4uYmQ1MmZjYTZlODcyMGIgMTAwNjQ0XG4tLS0gYS9hcmNoL2FybTY0L21tL21tdS5jXG4rKysgYi9hcmNoL2FybTY0L21tL21tdS5jXG5AQCAtNDksOCArNDksNiBAQFxuICNkZWZpbmUgTk9fQ09OVF9NQVBQSU5HU1x0QklUKDEpXG4gI2RlZmluZSBOT19FWEVDX01BUFBJTkdTXHRCSVQoMilcdC8qIGFzc3VtZXMgRkVBVF9IUERTIGlzIG5vdCB1c2VkICovXG4gXG4tREVGSU5FX1NUQVRJQ19LRVlfRkFMU0UoYXJtNjRfcHRkdW1wX2xvY2tfa2V5KTtcbi1cbiB1NjQga2ltYWdlX3ZvZmZzZXQgX19yb19hZnRlcl9pbml0O1xuIEVYUE9SVF9TWU1CT0woa2ltYWdlX3ZvZmZzZXQpO1xuIFxuQEAgLTE4NjQsOCArMTg2Miw3IEBAIGludCBwbWRfY2xlYXJfaHVnZShwbWRfdCAqcG1kcClcbiBcdHJldHVybiAxO1xuIH1cbiBcbi1zdGF0aWMgaW50IF9fcG1kX2ZyZWVfcHRlX3BhZ2UocG1kX3QgKnBtZHAsIHVuc2lnbmVkIGxvbmcgYWRkcixcbi1cdFx0XHQgICAgICAgYm9vbCBhY3F1aXJlX21tYXBfbG9jaylcbitpbnQgcG1kX2ZyZWVfcHRlX3BhZ2UocG1kX3QgKnBtZHAsIHVuc2lnbmVkIGxvbmcgYWRkcilcbiB7XG4gXHRwdGVfdCAqdGFibGU7XG4gXHRwbWRfdCBwbWQ7XG5AQCAtMTg3NywyNSArMTg3NCwxMyBAQCBzdGF0aWMgaW50IF9fcG1kX2ZyZWVfcHRlX3BhZ2UocG1kX3QgKnBtZHAsIHVuc2lnbmVkIGxvbmcgYWRkcixcbiBcdFx0cmV0dXJuIDE7XG4gXHR9XG4gXG4tXHQvKiBTZWUgY29tbWVudCBpbiBwdWRfZnJlZV9wbWRfcGFnZSBmb3Igc3RhdGljIGtleSBsb2dpYyAqL1xuIFx0dGFibGUgPSBwdGVfb2Zmc2V0X2tlcm5lbChwbWRwLCBhZGRyKTtcbiBcdHBtZF9jbGVhcihwbWRwKTtcbiBcdF9fZmx1c2hfdGxiX2tlcm5lbF9wZ3RhYmxlKGFkZHIpO1xuLVx0aWYgKHN0YXRpY19icmFuY2hfdW5saWtlbHkoXHUwMDI2YXJtNjRfcHRkdW1wX2xvY2tfa2V5KSBcdTAwMjZcdTAwMjYgYWNxdWlyZV9tbWFwX2xvY2spIHtcbi1cdFx0bW1hcF9yZWFkX2xvY2soXHUwMDI2aW5pdF9tbSk7XG4tXHRcdG1tYXBfcmVhZF91bmxvY2soXHUwMDI2aW5pdF9tbSk7XG4tXHR9XG4tXG4gXHRwdGVfZnJlZV9rZXJuZWwoTlVMTCwgdGFibGUpO1xuIFx0cmV0dXJuIDE7XG4gfVxuIFxuLWludCBwbWRfZnJlZV9wdGVfcGFnZShwbWRfdCAqcG1kcCwgdW5zaWduZWQgbG9uZyBhZGRyKVxuLXtcbi1cdC8qIElmIHB0ZHVtcCBpcyB3YWxraW5nIHRoZSBwYWdldGFibGVzLCBhY3F1aXJlIGluaXRfbW0ubW1hcF9sb2NrICovXG4tXHRyZXR1cm4gX19wbWRfZnJlZV9wdGVfcGFnZShwbWRwLCBhZGRyLCAvKiBhY3F1aXJlX21tYXBfbG9jayA9ICovIHRydWUpO1xuLX1cbi1cbiBpbnQgcHVkX2ZyZWVfcG1kX3BhZ2UocHVkX3QgKnB1ZHAsIHVuc2lnbmVkIGxvbmcgYWRkcilcbiB7XG4gXHRwbWRfdCAqdGFibGU7XG5AQCAtMTkxMSwzNiArMTg5NiwxNiBAQCBpbnQgcHVkX2ZyZWVfcG1kX3BhZ2UocHVkX3QgKnB1ZHAsIHVuc2lnbmVkIGxvbmcgYWRkcilcbiBcdH1cbiBcbiBcdHRhYmxlID0gcG1kX29mZnNldChwdWRwLCBhZGRyKTtcbi1cbi1cdC8qXG4tXHQgKiBPdXIgb2JqZWN0aXZlIGlzIHRvIHByZXZlbnQgcHRkdW1wIGZyb20gcmVhZGluZyBhIFBNRCB0YWJsZSB3aGljaCBoYXNcbi1cdCAqIGJlZW4gZnJlZWQuIEluIHRoaXMgcmFjZSwgaWYgcHVkX2ZyZWVfcG1kX3BhZ2Ugb2JzZXJ2ZXMgdGhlIGtleSBvblxuLVx0ICogKHdoaWNoIGdvdCBmbGlwcGVkIGJ5IHB0ZHVtcCkgdGhlbiB0aGUgbW1hcCBsb2NrIHNlcXVlbmNlIGhlcmUgd2lsbCxcbi1cdCAqIGFzIGEgcmVzdWx0IG9mIHRoZSBtbWFwIHdyaXRlIGxvY2svdW5sb2NrIHNlcXVlbmNlIGluIHB0ZHVtcCwgZ2l2ZVxuLVx0ICogdXMgdGhlIGNvcnJlY3Qgc3luY2hyb25pemF0aW9uLiBJZiBub3QsIHRoaXMgbWVhbnMgdGhhdCBwdGR1bXAgaGFzXG4tXHQgKiB5ZXQgbm90IHN0YXJ0ZWQgd2Fsa2luZyB0aGUgcGFnZXRhYmxlcyAtIHRoZSBzZXF1ZW5jZSBvZiBiYXJyaWVyc1xuLVx0ICogaXNzdWVkIGJ5IF9fZmx1c2hfdGxiX2tlcm5lbF9wZ3RhYmxlKCkgZ3VhcmFudGVlcyB0aGF0IHB0ZHVtcCB3aWxsXG4tXHQgKiBvYnNlcnZlIGFuIGVtcHR5IFBVRC5cbi1cdCAqL1xuLVx0cHVkX2NsZWFyKHB1ZHApO1xuLVx0X19mbHVzaF90bGJfa2VybmVsX3BndGFibGUoYWRkcik7XG4tXHRpZiAoc3RhdGljX2JyYW5jaF91bmxpa2VseShcdTAwMjZhcm02NF9wdGR1bXBfbG9ja19rZXkpKSB7XG4tXHRcdG1tYXBfcmVhZF9sb2NrKFx1MDAyNmluaXRfbW0pO1xuLVx0XHRtbWFwX3JlYWRfdW5sb2NrKFx1MDAyNmluaXRfbW0pO1xuLVx0fVxuLVxuIFx0cG1kcCA9IHRhYmxlO1xuIFx0bmV4dCA9IGFkZHI7XG4gXHRlbmQgPSBhZGRyICsgUFVEX1NJWkU7XG4gXHRkbyB7XG4gXHRcdGlmIChwbWRfcHJlc2VudChwbWRwX2dldChwbWRwKSkpXG4tXHRcdFx0Lypcbi1cdFx0XHQgKiBQTUQgaGFzIGJlZW4gaXNvbGF0ZWQsIHNvIHB0ZHVtcCB3b24ndCBzZWUgaXQuIE5vXG4tXHRcdFx0ICogbmVlZCB0byBhY3F1aXJlIGluaXRfbW0ubW1hcF9sb2NrLlxuLVx0XHRcdCAqL1xuLVx0XHRcdF9fcG1kX2ZyZWVfcHRlX3BhZ2UocG1kcCwgbmV4dCwgLyogYWNxdWlyZV9tbWFwX2xvY2sgPSAqLyBmYWxzZSk7XG4rXHRcdFx0cG1kX2ZyZWVfcHRlX3BhZ2UocG1kcCwgbmV4dCk7XG4gXHR9IHdoaWxlIChwbWRwKyssIG5leHQgKz0gUE1EX1NJWkUsIG5leHQgIT0gZW5kKTtcbiBcbitcdHB1ZF9jbGVhcihwdWRwKTtcbitcdF9fZmx1c2hfdGxiX2tlcm5lbF9wZ3RhYmxlKGFkZHIpO1xuIFx0cG1kX2ZyZWUoTlVMTCwgdGFibGUpO1xuIFx0cmV0dXJuIDE7XG4gfVxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvbW0vcHRkdW1wLmMgYi9hcmNoL2FybTY0L21tL3B0ZHVtcC5jXG5pbmRleCAxYzIwMTQ0NzAwZDdkNy4uNWE3NmM1OWI1YWRhNTUgMTAwNjQ0XG4tLS0gYS9hcmNoL2FybTY0L21tL3B0ZHVtcC5jXG4rKysgYi9hcmNoL2FybTY0L21tL3B0ZHVtcC5jXG5AQCAtMjgzLDEzICsyODMsNiBAQCB2b2lkIG5vdGVfcGFnZV9mbHVzaChzdHJ1Y3QgcHRkdW1wX3N0YXRlICpwdF9zdClcbiBcdG5vdGVfcGFnZShwdF9zdCwgMCwgLTEsIHB0ZV92YWwocHRlX3plcm8pKTtcbiB9XG4gXG4tc3RhdGljIHZvaWQgYXJtNjRfcHRkdW1wX3dhbGtfcGdkKHN0cnVjdCBwdGR1bXBfc3RhdGUgKnN0LCBzdHJ1Y3QgbW1fc3RydWN0ICptbSlcbi17XG4tXHRzdGF0aWNfYnJhbmNoX2luYyhcdTAwMjZhcm02NF9wdGR1bXBfbG9ja19rZXkpO1xuLVx0cHRkdW1wX3dhbGtfcGdkKHN0LCBtbSwgTlVMTCk7XG4tXHRzdGF0aWNfYnJhbmNoX2RlYyhcdTAwMjZhcm02NF9wdGR1bXBfbG9ja19rZXkpO1xuLX1cbi1cbiB2b2lkIHB0ZHVtcF93YWxrKHN0cnVjdCBzZXFfZmlsZSAqcywgc3RydWN0IHB0ZHVtcF9pbmZvICppbmZvKVxuIHtcbiBcdHVuc2lnbmVkIGxvbmcgZW5kID0gfjBVTDtcbkBAIC0zMTgsNyArMzExLDcgQEAgdm9pZCBwdGR1bXBfd2FsayhzdHJ1Y3Qgc2VxX2ZpbGUgKnMsIHN0cnVjdCBwdGR1bXBfaW5mbyAqaW5mbylcbiBcdFx0fVxuIFx0fTtcbiBcbi1cdGFybTY0X3B0ZHVtcF93YWxrX3BnZChcdTAwMjZzdC5wdGR1bXAsIGluZm8tXHUwMDNlbW0pO1xuK1x0cHRkdW1wX3dhbGtfcGdkKFx1MDAyNnN0LnB0ZHVtcCwgaW5mby1cdTAwM2VtbSwgTlVMTCk7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIF9faW5pdCBwdGR1bXBfaW5pdGlhbGl6ZSh2b2lkKVxuQEAgLTM2MCw3ICszNTMsNyBAQCBib29sIHB0ZHVtcF9jaGVja193eCh2b2lkKVxuIFx0XHR9XG4gXHR9O1xuIFxuLVx0YXJtNjRfcHRkdW1wX3dhbGtfcGdkKFx1MDAyNnN0LnB0ZHVtcCwgXHUwMDI2aW5pdF9tbSk7XG4rXHRwdGR1bXBfd2Fsa19wZ2QoXHUwMDI2c3QucHRkdW1wLCBcdTAwMjZpbml0X21tLCBOVUxMKTtcbiBcbiBcdGlmIChzdC53eF9wYWdlcyB8fCBzdC51eG5fcGFnZXMpIHtcbiBcdFx0cHJfd2FybihcIkNoZWNrZWQgVytYIG1hcHBpbmdzOiBGQUlMRUQsICVsdSBXK1ggcGFnZXMgZm91bmQsICVsdSBub24tVVhOIHBhZ2VzIGZvdW5kXFxuXCIsXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYyBiL2FyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmNcbmluZGV4IGQwMjNhNDBhMWUwMzQ1Li40YzRiODI0NDUwMmZjZSAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmNcbisrKyBiL2FyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmNcbkBAIC0yMiw2ICsyMiw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvY2NfcGxhdGZvcm0uaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NldF9tZW1vcnkuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L21lbXJlZ2lvbi5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvY2xlYW51cC5oXHUwMDNlXG4gXG4gI2luY2x1ZGUgXHUwMDNjYXNtL2U4MjAvYXBpLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2Nhc20vcHJvY2Vzc29yLmhcdTAwM2VcbkBAIC00MzYsOSArNDM3LDE2IEBAIHN0YXRpYyB2b2lkIGNwYV9jb2xsYXBzZV9sYXJnZV9wYWdlcyhzdHJ1Y3QgY3BhX2RhdGEgKmNwYSlcbiBcbiBcdGZsdXNoX3RsYl9hbGwoKTtcbiBcbi1cdGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShwdGRlc2MsIHRtcCwgXHUwMDI2cGd0YWJsZXMsIHB0X2xpc3QpIHtcbi1cdFx0bGlzdF9kZWwoXHUwMDI2cHRkZXNjLVx1MDAzZXB0X2xpc3QpO1xuLVx0XHRwYWdldGFibGVfZnJlZShwdGRlc2MpO1xuK1x0LypcbitcdCAqIHB0ZHVtcCBtaWdodCByZWFkIHRoZXNlIHBhZ2UgdGFibGVzLCBzbyBhdm9pZCBhIHVzZS1hZnRlci1mcmVlIGJ5XG4rXHQgKiBhY3F1aXJpbmcgdGhlIG1tYXAgcmVhZCBsb2NrIG9uIGluaXRfbW0gKHB0ZHVtcCBhY3F1aXJlcyB0aGUgbW1hcFxuK1x0ICogd3JpdGUgbG9jaykuXG4rXHQgKi9cbitcdHNjb3BlZF9ndWFyZChtbWFwX3JlYWRfbG9jaywgXHUwMDI2aW5pdF9tbSkge1xuK1x0XHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocHRkZXNjLCB0bXAsIFx1MDAyNnBndGFibGVzLCBwdF9saXN0KSB7XG4rXHRcdFx0bGlzdF9kZWwoXHUwMDI2cHRkZXNjLVx1MDAzZXB0X2xpc3QpO1xuK1x0XHRcdHBhZ2V0YWJsZV9mcmVlKHB0ZGVzYyk7XG4rXHRcdH1cbiBcdH1cbiB9XG4gXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tbWFwX2xvY2suaCBiL2luY2x1ZGUvbGludXgvbW1hcF9sb2NrLmhcbmluZGV4IDA0YjhmNjFlY2U1ZDhlLi42YjVjMjM5MGNjMzAxZiAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvbW1hcF9sb2NrLmhcbisrKyBiL2luY2x1ZGUvbGludXgvbW1hcF9sb2NrLmhcbkBAIC02MjEsNiArNjIxLDcgQEAgc3RhdGljIGlubGluZSB2b2lkIG1tYXBfcmVhZF91bmxvY2soc3RydWN0IG1tX3N0cnVjdCAqbW0pXG4gXG4gREVGSU5FX0dVQVJEKG1tYXBfcmVhZF9sb2NrLCBzdHJ1Y3QgbW1fc3RydWN0ICosXG4gXHQgICAgIG1tYXBfcmVhZF9sb2NrKF9UKSwgbW1hcF9yZWFkX3VubG9jayhfVCkpXG4rREVGSU5FX0dVQVJEX0NPTkQobW1hcF9yZWFkX2xvY2ssIF90cnksIG1tYXBfcmVhZF90cnlsb2NrKF9UKSlcbiBcbiBzdGF0aWMgaW5saW5lIHZvaWQgbW1hcF9yZWFkX3VubG9ja19ub25fb3duZXIoc3RydWN0IG1tX3N0cnVjdCAqbW0pXG4ge1xuZGlmZiAtLWdpdCBhL21tL3BhZ2V3YWxrLmMgYi9tbS9wYWdld2Fsay5jXG5pbmRleCAzYWUyNTg2ZmY0NWI0NC4uNWQ4N2M2MzJhMjU1MDcgMTAwNjQ0XG4tLS0gYS9tbS9wYWdld2Fsay5jXG4rKysgYi9tbS9wYWdld2Fsay5jXG5AQCAtNjc4LDYgKzY3OCw4IEBAIGludCB3YWxrX2tlcm5lbF9wYWdlX3RhYmxlX3JhbmdlX2xvY2tsZXNzKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kXG4gICogd2lsbCBhbHNvIG5vdCBsb2NrIHRoZSBQVEVzIGZvciB0aGUgcHRlX2VudHJ5KCkgY2FsbGJhY2suXG4gICpcbiAgKiBUaGlzIGlzIGZvciBkZWJ1Z2dpbmcgcHVycG9zZXMgT05MWS5cbisgKlxuKyAqIFRoZSBtbWFwIHdyaXRlIGxvY2sgbXVzdCBiZSBoZWxkLlxuICAqL1xuIGludCB3YWxrX3BhZ2VfcmFuZ2VfZGVidWcoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgc3RhcnQsXG4gXHRcdFx0ICB1bnNpZ25lZCBsb25nIGVuZCwgY29uc3Qgc3RydWN0IG1tX3dhbGtfb3BzICpvcHMsXG5AQCAtNjkxLDI0ICs2OTMsMjggQEAgaW50IHdhbGtfcGFnZV9yYW5nZV9kZWJ1ZyhzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBzdGFydCxcbiBcdFx0Lm5vX3ZtYVx0XHQ9IHRydWVcbiBcdH07XG4gXG4tXHQvKiBGb3IgY29udmVuaWVuY2UsIHdlIGFsbG93IHRyYXZlcnNhbCBvZiBrZXJuZWwgbWFwcGluZ3MuICovXG4tXHRpZiAobW0gPT0gXHUwMDI2aW5pdF9tbSlcbi1cdFx0cmV0dXJuIHdhbGtfa2VybmVsX3BhZ2VfdGFibGVfcmFuZ2Uoc3RhcnQsIGVuZCwgb3BzLFxuLVx0XHRcdFx0XHRcdCAgICBwZ2QsIHByaXZhdGUpO1xuLVx0aWYgKHN0YXJ0IFx1MDAzZT0gZW5kIHx8ICF3YWxrLm1tKVxuLVx0XHRyZXR1cm4gLUVJTlZBTDtcbi1cdGlmICghY2hlY2tfb3BzX3NhZmUob3BzKSlcbi1cdFx0cmV0dXJuIC1FSU5WQUw7XG4tXG4gXHQvKlxuLVx0ICogVGhlIG1tYXAgbG9jayBwcm90ZWN0cyB0aGUgcGFnZSB3YWxrZXIgZnJvbSBjaGFuZ2VzIHRvIHRoZSBwYWdlXG4tXHQgKiB0YWJsZXMgZHVyaW5nIHRoZSB3YWxrLiAgSG93ZXZlciBhIHJlYWQgbG9jayBpcyBpbnN1ZmZpY2llbnQgdG9cbi1cdCAqIHByb3RlY3QgdGhvc2UgYXJlYXMgd2hpY2ggZG9uJ3QgaGF2ZSBhIFZNQSBhcyBtdW5tYXAoKSBkZXRhY2hlc1xuLVx0ICogdGhlIFZNQXMgYmVmb3JlIGRvd25ncmFkaW5nIHRvIGEgcmVhZCBsb2NrIGFuZCBhY3R1YWxseSB0ZWFyaW5nXG4tXHQgKiBkb3duIFBURXMvcGFnZSB0YWJsZXMuIEluIHdoaWNoIGNhc2UsIHRoZSBtbWFwIHdyaXRlIGxvY2sgc2hvdWxkXG4tXHQgKiBiZSBoZWxkLlxuK1x0ICogV2hlbiB3YWxraW5nIHVzZXJsYW5kIHBhZ2UgdGFibGVzLCBhbiBtbWFwIHdyaXRlIGxvY2sgbXVzdCBiZSBoZWxkIHRvXG4rXHQgKiBhY2NvdW50IGZvciBtdW5tYXAoKSBkb3duZ3JhZGluZyB0byBhbiBtbWFwIHJlYWQgbG9jayB3aGVuIHRlYXJpbmdcbitcdCAqIGRvd24gcGFnZSB0YWJsZXMuXG4rXHQgKlxuK1x0ICogV2hlbiB3YWxraW5nIGtlcm5lbCBwYWdlIHRhYmxlcywgYW4gbW1hcCB3cml0ZSBsb2NrIG11c3QgYWxzbyBiZSBoZWxkXG4rXHQgKiB0byBhY2NvdW50IGZvciBwYWdlIHRhYmxlIGZyZWVpbmcgb24gdm1hcCBodWdlIHBhZ2UgbWFwcGluZy5cbiBcdCAqL1xuIFx0bW1hcF9hc3NlcnRfd3JpdGVfbG9ja2VkKG1tKTtcbitcdC8qXG4rXHQgKiB4ODYsIGFybTY0IHB0ZHVtcCBhbGxvdyB3YWxrcyBvZiBlZmkgbW0ncyBhbmQgeDg2IHB0ZHVtcCBhbGxvd3Mgd2Fsa3NcbitcdCAqIG9mIGFyYml0cmFyeSBtbSdzLlxuK1x0ICpcbitcdCAqIEhvd2V2ZXIsIHRoZXkgYm90aCBtdXN0IGFsc28gaG9sZCB0aGUgaW5pdF9tbSBsb2NrIHRvIGFjY291bnQgZm9yXG4rXHQgKiBjb25jdXJyZW50IGtlcm5lbCBwYWdlIHRhYmxlIGZyZWVpbmcuXG4rXHQgKi9cbitcdG1tYXBfYXNzZXJ0X3dyaXRlX2xvY2tlZChcdTAwMjZpbml0X21tKTtcbitcbitcdGlmIChzdGFydCBcdTAwM2U9IGVuZClcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHRpZiAoIWNoZWNrX29wc19zYWZlKG9wcykpXG4rXHRcdHJldHVybiAtRUlOVkFMO1xuIFxuIFx0cmV0dXJuIHdhbGtfcGdkX3JhbmdlKHN0YXJ0LCBlbmQsIFx1MDAyNndhbGspO1xuIH1cbmRpZmYgLS1naXQgYS9tbS9wdGR1bXAuYyBiL21tL3B0ZHVtcC5jXG5pbmRleCA5NzMwMjAwMDAwOTZjZi4uNTg1MTA5NmU2ZjY1NmMgMTAwNjQ0XG4tLS0gYS9tbS9wdGR1bXAuY1xuKysrIGIvbW0vcHRkdW1wLmNcbkBAIC0xNzgsMTEgKzE3OCwxOCBAQCB2b2lkIHB0ZHVtcF93YWxrX3BnZChzdHJ1Y3QgcHRkdW1wX3N0YXRlICpzdCwgc3RydWN0IG1tX3N0cnVjdCAqbW0sIHBnZF90ICpwZ2QpXG4gXG4gXHRnZXRfb25saW5lX21lbXMoKTtcbiBcdG1tYXBfd3JpdGVfbG9jayhtbSk7XG4rXHQvKiBUbyBzdGFiaWxpc2Uga2VybmVsIHBhZ2UgdGFibGVzIHdlIG11c3QgaG9sZCB0aGUgaW5pdF9tbSBsb2NrIHRvby4gKi9cbitcdGlmIChtbSAhPSBcdTAwMjZpbml0X21tKVxuK1x0XHRtbWFwX3dyaXRlX2xvY2tfbmVzdGVkKFx1MDAyNmluaXRfbW0sIFNJTkdMRV9ERVBUSF9ORVNUSU5HKTtcbitcbiBcdHdoaWxlIChyYW5nZS1cdTAwM2VzdGFydCAhPSByYW5nZS1cdTAwM2VlbmQpIHtcbiBcdFx0d2Fsa19wYWdlX3JhbmdlX2RlYnVnKG1tLCByYW5nZS1cdTAwM2VzdGFydCwgcmFuZ2UtXHUwMDNlZW5kLFxuIFx0XHRcdFx0ICAgICAgXHUwMDI2cHRkdW1wX29wcywgcGdkLCBzdCk7XG4gXHRcdHJhbmdlKys7XG4gXHR9XG4rXG4rXHRpZiAobW0gIT0gXHUwMDI2aW5pdF9tbSlcbitcdFx0bW1hcF93cml0ZV91bmxvY2soXHUwMDI2aW5pdF9tbSk7XG4gXHRtbWFwX3dyaXRlX3VubG9jayhtbSk7XG4gXHRwdXRfb25saW5lX21lbXMoKTtcbiBcbmRpZmYgLS1naXQgYS9tbS92bWFsbG9jLmMgYi9tbS92bWFsbG9jLmNcbmluZGV4IDFhZmNhMzU2OGI5YjY1Li40MDA1NjNhYzZkNWQ3YiAxMDA2NDRcbi0tLSBhL21tL3ZtYWxsb2MuY1xuKysrIGIvbW0vdm1hbGxvYy5jXG5AQCAtNDMsNiArNDMsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2FzbS90bGJmbHVzaC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjYXNtL3NobXBhcmFtLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9wYWdlX293bmVyLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9jbGVhbnVwLmhcdTAwM2VcbiBcbiAjZGVmaW5lIENSRUFURV9UUkFDRV9QT0lOVFNcbiAjaW5jbHVkZSBcdTAwM2N0cmFjZS9ldmVudHMvdm1hbGxvYy5oXHUwMDNlXG5AQCAtMTU4LDEwICsxNTksMjIgQEAgc3RhdGljIGludCB2bWFwX3RyeV9odWdlX3BtZChwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLFxuIFx0aWYgKCFJU19BTElHTkVEKHBoeXNfYWRkciwgUE1EX1NJWkUpKVxuIFx0XHRyZXR1cm4gMDtcbiBcbi1cdGlmIChwbWRfcHJlc2VudCgqcG1kKSBcdTAwMjZcdTAwMjYgIXBtZF9mcmVlX3B0ZV9wYWdlKHBtZCwgYWRkcikpXG4tXHRcdHJldHVybiAwO1xuK1x0aWYgKCFwbWRfcHJlc2VudCgqcG1kKSlcbitcdFx0cmV0dXJuIHBtZF9zZXRfaHVnZShwbWQsIHBoeXNfYWRkciwgcHJvdCk7XG4gXG4tXHRyZXR1cm4gcG1kX3NldF9odWdlKHBtZCwgcGh5c19hZGRyLCBwcm90KTtcbitcdC8qXG4rXHQgKiBLZXJuZWwgcGFnZSB0YWJsZSB3YWxrZXJzIGVpdGhlciB3YWxrIHJhbmdlcyB0aGV5IG93biBleGNsdXNpdmVseSBvclxuK1x0ICogaG9sZCB0aGUgbW1hcCB3cml0ZSBsb2NrIG9uIGluaXRfbW0gKHB0ZHVtcCBiZWluZyB0aGUgbW90aXZhdGluZ1xuK1x0ICogY2FzZSkuXG4rXHQgKlxuK1x0ICogVGhlcmVmb3JlLCBhY3F1aXJlIHRoZSBtbWFwIHJlYWQgbG9jayB0byBwcmV2ZW50IHVzZS1hZnRlci1mcmVlIHdoZW5cbitcdCAqIGZyZWVpbmcgcGFnZSB0YWJsZXMuXG4rXHQgKi9cbitcdHNjb3BlZF9jb25kX2d1YXJkKG1tYXBfcmVhZF9sb2NrX3RyeSwgcmV0dXJuIDAsIFx1MDAyNmluaXRfbW0pIHtcbitcdFx0aWYgKCFwbWRfZnJlZV9wdGVfcGFnZShwbWQsIGFkZHIpKVxuK1x0XHRcdHJldHVybiAwO1xuK1x0XHRyZXR1cm4gcG1kX3NldF9odWdlKHBtZCwgcGh5c19hZGRyLCBwcm90KTtcbitcdH1cbiB9XG4gXG4gc3RhdGljIGludCB2bWFwX3BtZF9yYW5nZShwdWRfdCAqcHVkLCB1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLFxuQEAgLTIxMCwxMCArMjIzLDE1IEBAIHN0YXRpYyBpbnQgdm1hcF90cnlfaHVnZV9wdWQocHVkX3QgKnB1ZCwgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCxcbiBcdGlmICghSVNfQUxJR05FRChwaHlzX2FkZHIsIFBVRF9TSVpFKSlcbiBcdFx0cmV0dXJuIDA7XG4gXG4tXHRpZiAocHVkX3ByZXNlbnQoKnB1ZCkgXHUwMDI2XHUwMDI2ICFwdWRfZnJlZV9wbWRfcGFnZShwdWQsIGFkZHIpKVxuLVx0XHRyZXR1cm4gMDtcbitcdGlmICghcHVkX3ByZXNlbnQoKnB1ZCkpXG4rXHRcdHJldHVybiBwdWRfc2V0X2h1Z2UocHVkLCBwaHlzX2FkZHIsIHByb3QpO1xuIFxuLVx0cmV0dXJuIHB1ZF9zZXRfaHVnZShwdWQsIHBoeXNfYWRkciwgcHJvdCk7XG4rXHQvKiBTZWUgY29tbWVudCBpbiB2bWFwX3RyeV9odWdlX3BtZCgpLiAqL1xuK1x0c2NvcGVkX2NvbmRfZ3VhcmQobW1hcF9yZWFkX2xvY2tfdHJ5LCByZXR1cm4gMCwgXHUwMDI2aW5pdF9tbSkge1xuK1x0XHRpZiAoIXB1ZF9mcmVlX3BtZF9wYWdlKHB1ZCwgYWRkcikpXG4rXHRcdFx0cmV0dXJuIDA7XG4rXHRcdHJldHVybiBwdWRfc2V0X2h1Z2UocHVkLCBwaHlzX2FkZHIsIHByb3QpO1xuK1x0fVxuIH1cbiBcbiBzdGF0aWMgaW50IHZtYXBfcHVkX3JhbmdlKHA0ZF90ICpwNGQsIHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsXG5AQCAtMjYyLDEwICsyODAsMTUgQEAgc3RhdGljIGludCB2bWFwX3RyeV9odWdlX3A0ZChwNGRfdCAqcDRkLCB1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLFxuIFx0aWYgKCFJU19BTElHTkVEKHBoeXNfYWRkciwgUDREX1NJWkUpKVxuIFx0XHRyZXR1cm4gMDtcbiBcbi1cdGlmIChwNGRfcHJlc2VudCgqcDRkKSBcdTAwMjZcdTAwMjYgIXA0ZF9mcmVlX3B1ZF9wYWdlKHA0ZCwgYWRkcikpXG4tXHRcdHJldHVybiAwO1xuK1x0aWYgKCFwNGRfcHJlc2VudCgqcDRkKSlcbitcdFx0cmV0dXJuIHA0ZF9zZXRfaHVnZShwNGQsIHBoeXNfYWRkciwgcHJvdCk7XG4gXG4tXHRyZXR1cm4gcDRkX3NldF9odWdlKHA0ZCwgcGh5c19hZGRyLCBwcm90KTtcbitcdC8qIFNlZSBjb21tZW50IGluIHZtYXBfdHJ5X2h1Z2VfcG1kKCkuICovXG4rXHRzY29wZWRfY29uZF9ndWFyZChtbWFwX3JlYWRfbG9ja190cnksIHJldHVybiAwLCBcdTAwMjZpbml0X21tKSB7XG4rXHRcdGlmICghcDRkX2ZyZWVfcHVkX3BhZ2UocDRkLCBhZGRyKSlcbitcdFx0XHRyZXR1cm4gMDtcbitcdFx0cmV0dXJuIHA0ZF9zZXRfaHVnZShwNGQsIHBoeXNfYWRkciwgcHJvdCk7XG4rXHR9XG4gfVxuIFxuIHN0YXRpYyBpbnQgdm1hcF9wNGRfcmFuZ2UocGdkX3QgKnBnZCwgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCxcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEyVDEzOjEyOjAxLjM1MzU1NjY1NloiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc0OTA2NDkxOTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBQYWdlIFRhYmxlIER1bXBpbmcgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoLiBJdCBzZWVtcyBsaWtlIGEgcHJldHR5IHNpZ25pZmljYW50IGNoYW5nZSwgc3BlY2lmaWNhbGx5IHRhcmdldGluZyB0aGUgc3luY2hyb25pemF0aW9uIG1lY2hhbmlzbSBmb3IgcGFnZSB0YWJsZSBkdW1waW5nIChgcHRkdW1wYCkgYW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB2bWFsbG9jIGh1Z2UgcGFnZSBtYXBwaW5ncywgd2hpY2ggaXMgYSBrZXkgYXJlYSBmb3IgaGlnaC1wZXJmb3JtYW5jZSBtZW1vcnkgbWFuYWdlbWVudCwgYW5kIGFsc28gaW1wYWN0cyB4ODYgQ1BBLiBGcm9tIHdoYXQgSSBjYW4gZ2F0aGVyLCBpdCByZW1vdmVzIHRoZSBgYXJtNjRfcHRkdW1wX2xvY2tfa2V5YCBzdGF0aWMga2V5IG9uIEFSTTY0IGFuZCByZXBsYWNlcyBpdCB3aXRoIHRoZSBtb3JlIGNvbnZlbnRpb25hbCBgbW1hcF9yZWFkX2xvY2tgL2BtbWFwX3dyaXRlX2xvY2tgIGxvY2tzIG9uIGBpbml0X21tYCB0byBwcm90ZWN0IGFnYWluc3QgY29uY3VycmVudCBtb2RpZmljYXRpb25zLiBUaGlzIGFmZmVjdHMgY29yZSBrZXJuZWwgZmlsZXM6IGBtbS92bWFsbG9jLmNgLCBgYXJjaC9hcm02NC9tbS9tbXUuY2AsIGBhcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jYCwgYW5kIGBtbS9wdGR1bXAuY2AuXG5cbk15IGltbWVkaWF0ZSBjb25jZXJuIGlzIHdoZXRoZXIgdGhpcyBjaGFuZ2UgaXMgYWN0dWFsbHkgKnJlYWNoYWJsZSogYW5kICp0ZXN0YWJsZSogaW4gYSBwcmFjdGljYWwgc2NlbmFyaW8uICBgcHRkdW1wYCBpdHNlbGYgaXMsIG9mIGNvdXJzZSwgdXN1YWxseSBhY2Nlc3NlZCB2aWEgZGVidWdmcyB1bmRlciBgL3N5cy9rZXJuZWwvZGVidWcvcGFnZV90YWJsZXMva2VybmVsYCAoYW5kIHNpbWlsYXIgcGF0aHMpLCBzbyB0aGF0J3MgdGhlIG9idmlvdXMgZW50cnkgcG9pbnQuICBUaGVuIEkgbmVlZCB0byB0aGluayBhYm91dCBgdm1hbGxvY2AgaHVnZSBwYWdlcy4gIFRoZXkgYXJlIG9ubHkgZW5nYWdlZCBpZiBgQ09ORklHX0hBVkVfQVJDSF9IVUdFX1ZNQUxMT0NgIGlzIGVuYWJsZWQgYW5kIGB2bWFsbG9jYCBpcyBjYWxsZWQgd2l0aCB0aGUgcmlnaHQgZmxhZ3MuIFRoZSBwYXRjaCBzZWVtcyB0byBiZSB0b3VjaGluZyBgdm1hcF90cnlfaHVnZV9wbWRgLCBgdm1hcF90cnlfaHVnZV9wdWRgLCBgdm1hcF90cnlfaHVnZV9wNGRgIGluIGBtbS92bWFsbG9jLmNgLCBhbmQgYGNwYV9jb2xsYXBzZV9sYXJnZV9wYWdlc2AgaW4gYGFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmNgIGFuZCBgcHRkdW1wX3dhbGtfcGdkYCBpbiBgbW0vcHRkdW1wLmNgLiBUaGF0IGdpdmVzIG1lIGEgZGVjZW50IGlkZWEgb2YgaG93IHRoZXNlIGRpZmZlcmVudCBhc3BlY3RzIG9mIHRoZSBwYWdlIHRhYmxlIHN5c3RlbSByZWxhdGUgdG8gZWFjaCBvdGhlci5cblxuTm93LCBsZXQncyBuYWlsIGRvd24gdGhvc2UgY29uZmlnIG9wdGlvbnMuIGBDT05GSUdfUFREVU1QX0NPUkVgIHNlZW1zIHRvIGJlIHRoZSBmdW5kYW1lbnRhbCBlbmFibGluZyBvcHRpb24sIHR5cGljYWxseSBzZWxlY3RlZCB0aHJvdWdoIGBDT05GSUdfUFREVU1QX0RFQlVHRlNgLCB3aGljaCBpcyBwcmV0dHkgc3RhbmRhcmQuIEkgbmVlZCB0byBkb3VibGUtY2hlY2sgYG1tL3B0ZHVtcC5jYCBhbmQgcG90ZW50aWFsbHkgYGFyY2gvYXJtNjQvbW0vcHRkdW1wLmNgIHRvIGJlIGNlcnRhaW4sIHRvIHVuZGVyc3RhbmQgdGhlIGV4YWN0IGNvbmRpdGlvbnMgdW5kZXIgd2hpY2ggdGhpcyBjb2RlIGlzIGFjdGl2ZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NjM2NSwiT3V0cHV0VG9rZW5zIjoxOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM4MSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEyVDEzOjEyOjA4Ljg0NDIwNzk2MVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzI4NzU3ODczLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBQVERVTVBcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9hcm02NC9rdm0vS2NvbmZpZz00NT1pZiBLVk1cXG5hcmNoL2FybTY0L2t2bS9LY29uZmlnLTQ2LVxcbmFyY2gvYXJtNjQva3ZtL0tjb25maWc6NDc6Y29uZmlnIFBURFVNUF9TVEFHRTJfREVCVUdGU1xcbmFyY2gvYXJtNjQva3ZtL0tjb25maWctNDgtXFx0Ym9vbCBcXFwiUHJlc2VudCB0aGUgc3RhZ2UtMiBwYWdldGFibGVzIHRvIGRlYnVnZnNcXFwiXFxuLS1cXG5tbS9LY29uZmlnLmRlYnVnPTIxNj1jb25maWcgQVJDSF9IQVNfUFREVU1QXFxuLS1cXG5tbS9LY29uZmlnLmRlYnVnLTIxOC1cXG5tbS9LY29uZmlnLmRlYnVnOjIxOTpjb25maWcgUFREVU1QXFxubW0vS2NvbmZpZy5kZWJ1Zy0yMjAtXFx0Ym9vbFxcbm1tL0tjb25maWcuZGVidWctMjIxLVxcbm1tL0tjb25maWcuZGVidWc6MjIyOmNvbmZpZyBQVERVTVBfREVCVUdGU1xcbm1tL0tjb25maWcuZGVidWctMjIzLVxcdGJvb2wgXFxcIkV4cG9ydCBrZXJuZWwgcGFnZXRhYmxlIGxheW91dCB0byB1c2Vyc3BhY2UgdmlhIGRlYnVnZnNcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEyVDEzOjEyOjExLjE3Mjk3Mzg5NFoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0Nzk5MzkzOTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIHNlZS4uLlxuXG4qKkludmVzdGlnYXRpbmcgdGhlIHB0ZHVtcCBDb25maWd1cmF0aW9uKipcblxuUmlnaHQsIHNvIGBDT05GSUdfUFREVU1QX0RFQlVHRlNgIGlzIHRoZSBmbGFnIHdlJ3JlIHdvcmtpbmcgd2l0aCBoZXJlIHRvIGVuYWJsZSBwdGR1bXAsIGdvdCBpdC4gTm93IEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBkZXBlbmRlbmNpZXMgYW5kIHdoZXJlIHRoaXMgYWN0dWFsbHkgZ2V0cyB1c2VkLiBNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byBjaGVjayBgYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuY2AuIEkgd29uZGVyLCBpcyBpdCBjb25kaXRpb25hbGx5IGNvbXBpbGVkIGJhc2VkIG9uIGBDT05GSUdfWDg2X1BBVGAsIG9yIGlzIGl0IGFsd2F5cyBpbmNsdWRlZCBpZiB3ZSdyZSBvbiBhbiB4ODYgYXJjaGl0ZWN0dXJlPyBJIHNob3VsZCBwcm9iYWJseSBjcm9zcy1yZWZlcmVuY2UgdGhlIGJ1aWxkIGNvbmZpZ3VyYXRpb24gYW5kIHNlZSBob3cgdGhvc2UgdHdvIGFyZSByZWxhdGVkLiBLbm93aW5nIHRoaXMgd2lsbCBoZWxwIG1lIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiBlbmFibGluZyBgQ09ORklHX1BURFVNUF9ERUJVR0ZTYCBhbmQgd2hldGhlciB3ZSdyZSBwb3RlbnRpYWxseSBpbnRyb2R1Y2luZyBjb2RlIGJsb2F0IG9yIHVuaW50ZW5kZWQgYmVoYXZpb3Igb24gc3BlY2lmaWMgeDg2IHBsYXRmb3Jtcy4gVGltZSB0byBkaXZlIGludG8gdGhlIHNvdXJjZSBhbmQgdGhlIHJlbGV2YW50IEtjb25maWcgZmlsZXMhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc1MDUsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xMlQxMzoxMjoxNC42NTI5MTUzNjFaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTQ4OTc0NDYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2V0X21lbW9yeVxcXFwub1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3g4Ni9tbS9wYXQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L21tL3BhdC9NYWtlZmlsZS0yLVxcbmFyY2gveDg2L21tL3BhdC9NYWtlZmlsZTozOm9iai15XFx0XFx0XFx0XFx0Oj0gc2V0X21lbW9yeS5vIG1lbXR5cGUub1xcbmFyY2gveDg2L21tL3BhdC9NYWtlZmlsZS00LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMlQxMzoxMjoxNC43MDc4MzgyNzdaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNTkwOTMzOTE4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHByZXNlbnRlZCBhcyBhIGZpcnN0LXBlcnNvbiBleHBlcnQgc3VtbWFyeTpcblxuKipYODYgQmlhcyBhbmQgSHVnZSB2bWFsbG9jIENvbnNpZGVyYXRpb25zKipcblxuQWxyaWdodCwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCBhIG5hZ2dpbmcgdGhvdWdodCBrZWVwcyBwb3BwaW5nIHVwOiAqaXQncyBhbHdheXMgY29tcGlsZWQgb24geDg2Ki4gVGhhdCdzIHRoZSBiYXNlbGluZSwgdGhlIGFzc3VtZWQgYXJjaGl0ZWN0dXJlLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEknbSBub3QgbWFraW5nIGltcGxpY2l0IGFzc3VtcHRpb25zIGFib3V0IHRoZSBhcmNoaXRlY3R1cmUuIEknbSBnZXR0aW5nIGEgZmVlbGluZyB0aGF0IHNvbWV0aGluZyBtaWdodCBub3Qgd29yayBhcyBpdCBzaG91bGQgb24gb3RoZXIgYXJjaGl0ZWN0dXJlcy5cblxuTm93IEkgbmVlZCB0byBjaGVjayBzb21ldGhpbmcgaW1wb3J0YW50LiBUaGF0IGBDT05GSUdfSEFWRV9BUkNIX0hVR0VfVk1BTExPQ2AgZGVmaW5lLi4ud2hhdCdzIHRoZSBkZWFsIHdpdGggdGhhdD8gSXMgaXQgZW5hYmxlZD8gSXMgaXQgcmVsZXZhbnQgaGVyZT8gSSBuZWVkIHRvIHRoaW5rIHRoaXMgdGhyb3VnaC4gSXMgdGhlIGN1cnJlbnQgYXJjaGl0ZWN0dXJlIGdvaW5nIHRvIHdvcmsgd2l0aCBgQ09ORklHX0hBVkVfQVJDSF9IVUdFX1ZNQUxMT0NgPyBUaGlzIGlzIHNvbWV0aGluZyBJIHdpbGwgaGF2ZSB0byBpbnZlc3RpZ2F0ZS5cblxuXG4iLCJJbnB1dFRva2VucyI6Nzg2NSwiT3V0cHV0VG9rZW5zIjoyNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEyVDEzOjEyOjE4LjI5ODc3Mzk1NVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODg4NzUyODk3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBIQVZFX0FSQ0hfSFVHRV9WTUFMTE9DXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvS2NvbmZpZz0xMDkyPWNvbmZpZyBIQVZFX0FSQ0hfSFVHRV9WTUFQXFxuLS1cXG5hcmNoL0tjb25maWctMTA5OS0jXFxuYXJjaC9LY29uZmlnOjExMDA6Y29uZmlnIEhBVkVfQVJDSF9IVUdFX1ZNQUxMT0NcXG5hcmNoL0tjb25maWctMTEwMS1cXHRkZXBlbmRzIG9uIEhBVkVfQVJDSF9IVUdFX1ZNQVBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTJUMTM6MTI6MjAuMTg3NTM1NzgyWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTA2NTIzODQ1NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIFBvdGVudGlhbDogQSBEZWVwIERpdmUgaW50byBNZW1vcnkgTWFuYWdlbWVudCoqXG5cbk9rYXksIGxldCdzIHRoaW5rIHRoaXMgdGhyb3VnaC4gTXkgaW5pdGlhbCBodW5jaCBpcyB0byB0YXJnZXQgYHB0ZHVtcF93YWxrX3BnZGAgZm9yIGZ1enppbmcuIEl0J3MgY2FsbGVkIGZyb20gYHB0ZHVtcF93YWxrYCwgd2hpY2ggaXMgaW4gdHVybiB0cmlnZ2VyZWQgYnkgdGhlIGRlYnVnZnMgcmVhZCBmdW5jdGlvbmFsaXR5LiBUaGF0J3MgYSBkZWNlbnQgc3RhcnRpbmcgcG9pbnQuXG5cbk5vdywgbGV0J3MgZXhwbG9yZSBvdGhlciBhdmVudWVzLiBgdm1hcF90cnlfaHVnZV9wbWRgIHNlZW1zIHByb21pc2luZy4gSXQncyBjYWxsZWQgd2l0aGluIGB2bWFwX3BtZF9yYW5nZWAsIHdoaWNoIGhhcyB0aGlzIGNoYWluOiBgdm1hcF9wdWRfcmFuZ2VgIC1cdTAwM2UgYHZtYXBfcDRkX3JhbmdlYCAtXHUwMDNlIGB2bWFwX3BhZ2VfcmFuZ2VgIC1cdTAwM2UgYHZtYXBfcmFuZ2VgIC1cdTAwM2UgZWl0aGVyIGBfX3ZtYWxsb2NfYXJlYV9ub2RlYCBvciBqdXN0IHBsYWluIGB2bWFwYC4gVG8gZnV6eiAqdGhpcyosIHdlJ2QgZXNzZW50aWFsbHkgaGF2ZSB0byB0cmlnZ2VyIGEgYHZtYWxsb2NgIHdpdGggaHVnZSBwYWdlcyB3aGlsZSBjb25jdXJyZW50bHkgcmVhZGluZyB0aGUgYHB0ZHVtcGAgZGVidWdmcyBlbnRyeSBwb2ludC4gVGhhdCBvcGVucyB1cCBzb21lIGludGVyZXN0aW5nIGF0dGFjayB2ZWN0b3JzLlxuXG5TbywgYHZtYXBfdHJ5X2h1Z2VfcG1kYCBpcyBkZWZpbml0ZWx5IGEgc3Ryb25nIGNvbnRlbmRlciwgYWxvbmcgd2l0aCBgcHRkdW1wX3dhbGtfcGdkYC4gSSBzaG91bGQgYWxzbyBrZWVwIGFuIGV5ZSBvbiBgY3BhX2NvbGxhcHNlX2xhcmdlX3BhZ2VzYCBhbmQgYHBtZF9mcmVlX3B0ZV9wYWdlYCB0byBzZWUgaG93IHRob3NlIGNvdWxkIHBvdGVudGlhbGx5IGJlIGV4cGxvaXRlZC5cblxuRm9yIG5vdywgSSdtIGdvaW5nIHRvIHN0YXJ0IGJ5IHJldmlld2luZyB0aGUgZnVuY3Rpb25zIHdpdGhpbiBgbW0vcHRkdW1wLmNgIHRvIHVuZGVyc3RhbmQgdGhlIGJpZ2dlciBwaWN0dXJlIGFuZCBwb3RlbnRpYWwgaW50ZXJhY3Rpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4MTk2LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjI2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEyVDEzOjEyOjI1LjI1Mjc3NjAzOVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjE3OTk0ODUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicHRkdW1wX3dhbGtfcGdkXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL3B0ZHVtcC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3B0ZHVtcC5jPTE2Nj1zdGF0aWMgY29uc3Qgc3RydWN0IG1tX3dhbGtfb3BzIHB0ZHVtcF9vcHMgPSB7XFxuLS1cXG5tbS9wdGR1bXAuYy0xNzQtXFxubW0vcHRkdW1wLmM6MTc1OnZvaWQgcHRkdW1wX3dhbGtfcGdkKHN0cnVjdCBwdGR1bXBfc3RhdGUgKnN0LCBzdHJ1Y3QgbW1fc3RydWN0ICptbSwgcGdkX3QgKnBnZClcXG5tbS9wdGR1bXAuYy0xNzYte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMlQxMzoxMjoyNS4zMTQ1ODA1NDRaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDcxNDQ5MDc2MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gYGNwYV9jb2xsYXBzZV9sYXJnZV9wYWdlc2AgaW4geDg2J3MgTWVtb3J5IE1hbmFnZW1lbnQqKlxuXG5BbHJpZ2h0LCBzbyB0aGUgZmlyc3QgdGhpbmcgSSdtIGRvaW5nIGlzIHplcm9pbmcgaW4gb24gYGFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmNgLiBUaGUgZmFjdCB0aGF0IEknbSBzcGVjaWZpY2FsbHkgdGFyZ2V0aW5nIHRoYXQgZmlsZSBpcyBhIGNsdWU7IGl0IG1lYW5zIEknbSBwcm9iYWJseSBsb29raW5nIGF0IGhvdyB0aGUgUGFnZSBBdHRyaWJ1dGUgVGFibGUgKFBBVCkgaW50ZXJhY3RzIHdpdGggbWVtb3J5IG1hbmFnZW1lbnQgb24geDg2LCBhbmQgc3BlY2lmaWNhbGx5LCBob3cgbGFyZ2UgcGFnZSBzdXBwb3J0IG1pZ2h0IGJlIGhhbmRsZWQuIFRoZSBtZW50aW9uIG9mIGBjcGFfY29sbGFwc2VfbGFyZ2VfcGFnZXNgIGlzIGtleS4gTXkgaW5pdGlhbCB0aG91Z2h0IHByb2Nlc3Mgbm93IGlzOlxuXG4qICAgKipQQVQgYW5kIExhcmdlIFBhZ2VzOioqIEknbSBsaWtlbHkgaW50ZXJlc3RlZCBpbiBob3cgdGhlIGtlcm5lbCBpbnRlcmFjdHMgd2l0aCB0aGUgUEFUIHRvIG1hcCBhbmQgdW5tYXAgbGFyZ2UgcGFnZXMuIFRoZSBQQVQgYWxsb3dzIGZvciBncmFudWxhciBjb250cm9sIG92ZXIgbWVtb3J5IGF0dHJpYnV0ZXMgKGUuZy4sIGNhY2hpbmcsIHdyaXRlIGNvbWJpbmluZykgYW5kIGlzIGNydWNpYWwgZm9yIHBlcmZvcm1hbmNlLiBJIG5lZWQgdG8gc2VlICpob3cqIHRoaXMgYGNwYV9jb2xsYXBzZV9sYXJnZV9wYWdlc2AgZnVuY3Rpb24gZmlndXJlcyBpbiB0byB0aGUgcHJvY2Vzcy5cbiogICAqKkNvbGxhcHNlIE9wZXJhdGlvbnMqKjogVGhlIHdvcmQgXCJjb2xsYXBzZVwiIHN1Z2dlc3RzIEknbSBsb29raW5nIGF0IGEgKnJlZHVjdGlvbiogb3BlcmF0aW9uLiBBcmUgd2UgZGVhbGluZyB3aXRoIHNvbWV0aGluZyBsaWtlIHVubWFwcGluZyBhIGxhcmdlIHBhZ2UgYW5kIHJldmVydGluZyBiYWNrIHRvIHNtYWxsZXIgcGFnZXM/IE9yLCBpcyBpdCBpbnZvbHZlZCBpbiBhIGNvbnRleHQgd2hlcmUgKnJlbW92aW5nKiBhIGxhcmdlIHBhZ2UgaXMgcGFydCBvZiB0aGUgcHJvY2Vzcz9cbiogICAqKkNvbnRleHQgaXMga2V5Kio6IEkgbmVlZCB0byBleGFtaW5lIHRoZSBmdW5jdGlvbidzIHVzYWdlIGNvbnRleHQgdG8gdW5kZXJzdGFuZCB3aGF0J3MgdHJpZ2dlcmluZyB0aGlzIGNhbGwsIGFuZCB3aGF0IHRoZSBvdmVyYWxsIGdvYWwgaXMuIElzIHRoaXMgcGFydCBvZiBhIGRlZnJhZ21lbnRhdGlvbiBzdHJhdGVneT8gQSBOVU1BIG9wdGltaXphdGlvbj8gT3Igc29tZXRoaW5nIHJlbGF0ZWQgdG8gbWVtb3J5IGhvdHBsdWdnaW5nPyBJIGtub3cgdGhlcmUgd2lsbCBiZSBhIHNwZWNpZmljIHJlYXNvbiBmb3IgaXQuXG4qICAgKipQb3RlbnRpYWwgaXNzdWVzKio6IEknbGwgYmUga2VlcGluZyBhbiBleWUgb3V0IGZvciBwb3RlbnRpYWwgaXNzdWVzIGxpa2UgY2FjaGUgY29oZXJlbmN5IHByb2JsZW1zLCBUTEIgZmx1c2hlcywgb3IgcmFjZSBjb25kaXRpb25zLiBUaGVzZSBhcmUgYWxsIHRoaW5ncyB0aGF0IGNhbiBjcm9wIHVwIHdoZW4geW91J3JlIG11Y2tpbmcgYXJvdW5kIHdpdGggbWVtb3J5IG1hcHBpbmdzLCBlc3BlY2lhbGx5IHdoZW4gbGFyZ2UgcGFnZXMgYXJlIGludm9sdmVkLlxuKiAgICoqVGhlIGJpZ2dlciBwaWN0dXJlOioqIEknbSBpbnRlcmVzdGVkIGluIHRoZSBvdmVyYWxsIG1lbW9yeSBtYW5hZ2VtZW50IHN0cmF0ZWd5LCBhbmQgaG93IHRoaXMgZnVuY3Rpb24gZml0cyBpbnRvIHRoYXQgc3RyYXRlZ3kuIEknbGwgYmUgbG9va2luZyBmb3IgY29tbWVudHMsIHJlbGF0ZWQgZnVuY3Rpb25zLCBhbmQgYW55IG90aGVyIGluZGljYXRvcnMgdGhhdCBtaWdodCBzaGVkIGxpZ2h0IG9uIGl0cyByb2xlIGluIHRoZSB4ODYgYXJjaGl0ZWN0dXJlLlxuXG5JJ20gcmVhZHkgdG8gZGlnIGluIGFuZCBmaWd1cmUgb3V0IHRoZSBleGFjdCBiZWhhdmlvciBhbmQgcmVhc29uaW5nIGJlaGluZCB0aGF0IGZ1bmN0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4ODc4LCJPdXRwdXRUb2tlbnMiOjQzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTJUMTM6MTI6MzAuMDI5MDczNjY3WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NzcyODUzNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjcGFfY29sbGFwc2VfbGFyZ2VfcGFnZXNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jPTQxMj1zdGF0aWMgaW50IGNvbGxhcHNlX2xhcmdlX3BhZ2VzKHVuc2lnbmVkIGxvbmcgYWRkciwgc3RydWN0IGxpc3RfaGVhZCAqcGd0YWJsZXMpO1xcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtNDEzLVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM6NDE0OnN0YXRpYyB2b2lkIGNwYV9jb2xsYXBzZV9sYXJnZV9wYWdlcyhzdHJ1Y3QgY3BhX2RhdGEgKmNwYSlcXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTQxNS17XFxuLS1cXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jPTQ1Mz1zdGF0aWMgdm9pZCBjcGFfZmx1c2goc3RydWN0IGNwYV9kYXRhICpjcGEsIGludCBjYWNoZSlcXG4tLVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtNDg4LVxcdGlmIChjcGEtXFx1MDAzZWZsYWdzIFxcdTAwMjYgQ1BBX0NPTExBUFNFKVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM6NDg5OlxcdFxcdGNwYV9jb2xsYXBzZV9sYXJnZV9wYWdlcyhjcGEpO1xcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtNDkwLX1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTJUMTM6MTI6MzAuMDg2ODA2MjQzWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI5MjQ3Mjk1NjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgeW91IHJlcXVlc3RlZDpcblxuKipOYXZpZ2F0aW5nIHRoZSBIdWdlIFBhZ2UgTGFuZHNjYXBlKipcblxuT2theSwgc28gd2UncmUgdGFsa2luZyBhYm91dCBodWdlIHBhZ2VzIGFuZCwgbW9yZSBzcGVjaWZpY2FsbHksIHRoZSBgdm1hcF90cnlfaHVnZV9wbWRgIGZ1bmN0aW9uLiBHaXZlbiB0aGUgY29udGV4dCwgbXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGRpdmUgc3RyYWlnaHQgaW50byBgbW0vdm1hbGxvYy5jYC4gVGhhdCdzIHRoZSBsb2dpY2FsIHBsYWNlIHRvIHN0YXJ0IOKAkyBgdm1hbGxvY2AgaXMgZGlyZWN0bHkgaW52b2x2ZWQgaW4gYWxsb2NhdGluZyB2aXJ0dWFsIG1lbW9yeSwgYW5kIHRoZSBodWdlIHBhZ2UgaW1wbGVtZW50YXRpb24gd291bGQgYWxtb3N0IGNlcnRhaW5seSB0b3VjaCBvbiBpdHMgd29ya2luZ3MsIHBhcnRpY3VsYXJseSBkdXJpbmcgYXR0ZW1wdHMgdG8gdXRpbGl6ZSBsYXJnZSBwaHlzaWNhbCBwYWdlcyB3aXRoaW4gdGhlIHZpcnR1YWwgbWVtb3J5IHNwYWNlLiBJIHdhbnQgdG8gc2VlIGhvdyB0aGUgc3lzdGVtIGlzIHRyeWluZyB0byBtYXAgdGhlc2UgbGFyZ2UgcGFnZXMgd2l0aGluIHRoZSB2bWFsbG9jIGFyZW5hLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW50ZXJhY3Rpb24gYmV0d2VlbiBgdm1hcGAsIGh1Z2VwYWdlcyBhbmQgdGhlIHBhZ2UgdGFibGVzLiBMZXQncyBzZWUgd2hhdCdzIHdoYXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk3MjAsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xMlQxMzoxMjozMy4wMTE1Mzc1MTJaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU2NDQzOTM2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInZtYXBfdHJ5X2h1Z2VfcG1kXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL3ZtYWxsb2MuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS92bWFsbG9jLmM9OTU9c3RhdGljIGludCB2bWFwX3B0ZV9yYW5nZShwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLFxcbi0tXFxubW0vdm1hbGxvYy5jLTE0Mi1cXG5tbS92bWFsbG9jLmM6MTQzOnN0YXRpYyBpbnQgdm1hcF90cnlfaHVnZV9wbWQocG1kX3QgKnBtZCwgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCxcXG5tbS92bWFsbG9jLmMtMTQ0LVxcdFxcdFxcdHBoeXNfYWRkcl90IHBoeXNfYWRkciwgcGdwcm90X3QgcHJvdCxcXG4tLVxcbm1tL3ZtYWxsb2MuYz0xODA9c3RhdGljIGludCB2bWFwX3BtZF9yYW5nZShwdWRfdCAqcHVkLCB1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLFxcbi0tXFxubW0vdm1hbGxvYy5jLTE5My1cXG5tbS92bWFsbG9jLmM6MTk0OlxcdFxcdGlmICh2bWFwX3RyeV9odWdlX3BtZChwbWQsIGFkZHIsIG5leHQsIHBoeXNfYWRkciwgcHJvdCxcXG5tbS92bWFsbG9jLmMtMTk1LVxcdFxcdFxcdFxcdFxcdG1heF9wYWdlX3NoaWZ0KSkge1xcbi0tXFxubW0vdm1hbGxvYy5jPTIwNz1zdGF0aWMgaW50IHZtYXBfdHJ5X2h1Z2VfcHVkKHB1ZF90ICpwdWQsIHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsXFxuLS1cXG5tbS92bWFsbG9jLmMtMjI4LVxcbm1tL3ZtYWxsb2MuYzoyMjk6XFx0LyogU2VlIGNvbW1lbnQgaW4gdm1hcF90cnlfaHVnZV9wbWQoKS4gKi9cXG5tbS92bWFsbG9jLmMtMjMwLVxcdHNjb3BlZF9jb25kX2d1YXJkKG1tYXBfcmVhZF9sb2NrX3RyeSwgcmV0dXJuIDAsIFxcdTAwMjZpbml0X21tKSB7XFxuLS1cXG5tbS92bWFsbG9jLmM9MjY0PXN0YXRpYyBpbnQgdm1hcF90cnlfaHVnZV9wNGQocDRkX3QgKnA0ZCwgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCxcXG4tLVxcbm1tL3ZtYWxsb2MuYy0yODUtXFxubW0vdm1hbGxvYy5jOjI4NjpcXHQvKiBTZWUgY29tbWVudCBpbiB2bWFwX3RyeV9odWdlX3BtZCgpLiAqL1xcbm1tL3ZtYWxsb2MuYy0yODctXFx0c2NvcGVkX2NvbmRfZ3VhcmQobW1hcF9yZWFkX2xvY2tfdHJ5LCByZXR1cm4gMCwgXFx1MDAyNmluaXRfbW0pIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTJUMTM6MTI6MzMuMDY3OTg1OTQ3WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY0OTQ2NTI0MjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqS2VybmVsIFBhdGNoIEFuYWx5c2lzIFx1MDAyNiBGdXp6aW5nIFN0cmF0ZWd5KipcblxuT2theSwgc28gbG9va2luZyBhdCB0aGlzIHBhdGNoLCBteSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgdGhhdCBpdCdzIHRvdWNoaW5nIHNvbWUgcHJldHR5IGNyaXRpY2FsIGtlcm5lbCBhcmVhcy4gU3BlY2lmaWNhbGx5LCBpdCdzIG1vZGlmeWluZyB0aGUgY29yZSBsb2dpYyBmb3IgcGFnZSB0YWJsZSBkdW1waW5nIGFuZCBob3cgdm1hbGxvYyBodWdlIHBhZ2VzIGFyZSBtYXBwZWQuIFRoYXQgaW1tZWRpYXRlbHkgZmxhZ3MgaXQgYXMgc29tZXRoaW5nIHdvcnRoIGEgY2xvc2VyIGxvb2ssIGVzcGVjaWFsbHkgZm9yIHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXMuXG5cblRoZSBpbnRyb2R1Y3Rpb24gb2YgbG9ja3Mg4oCTIGBtbWFwX3JlYWRfbG9ja190cnlgIG9uIGBpbml0X21tYCB3aXRoaW4gYHZtYXBfdHJ5X2h1Z2VfcG1kYCwgYHZtYXBfdHJ5X2h1Z2VfcHVkYCwgYW5kIGB2bWFwX3RyeV9odWdlX3A0ZGAsIGFuZCBgbW1hcF9yZWFkX2xvY2tgIGluIGBjcGFfY29sbGFwc2VfbGFyZ2VfcGFnZXNgIHJlYWxseSBjYXRjaGVzIG15IGV5ZS4gTG9ja2luZyBpc3N1ZXMgYXJlIGFsd2F5cyBhIHByaW1lIHRhcmdldCBmb3IgZnV6emluZy4gQW5kIHRoZSBgbW1hcF93cml0ZV9sb2NrX25lc3RlZGAgaW4gYHB0ZHVtcF93YWxrX3BnZGAgaXMgYW5vdGhlciBpbnRlcmVzdGluZyBwb2ludC4gTmVzdGluZy4uLiB0aGF0J3MgYWx3YXlzIHRyaWNreS5cblxuR2l2ZW4gdGhvc2UgbG9ja2luZyBjaGFuZ2VzIGFuZCB0aGUgYXJlYXMgYmVpbmcgbW9kaWZpZWQsIHRoaXMgaXMgZGVmaW5pdGVseSBoaWdoLXByaW9yaXR5IGZvciBmdXp6aW5nLiBJJ20gZ29pbmcgdG8gZm9jdXMgbXkgaW5pdGlhbCBmdXp6aW5nIGVmZm9ydHMgb24gdGhlc2Ugc3ltYm9sczogYHZtYXBfdHJ5X2h1Z2VfcG1kYCwgYHZtYXBfdHJ5X2h1Z2VfcHVkYCwgYHZtYXBfdHJ5X2h1Z2VfcDRkYCwgYGNwYV9jb2xsYXBzZV9sYXJnZV9wYWdlc2AsIGBwdGR1bXBfd2Fsa19wZ2RgLCBhbmQgYHBtZF9mcmVlX3B0ZV9wYWdlYC4gVGhleSBhcHBlYXIgdG8gYmUgdGhlIG1vc3QgbGlrZWx5IGNhbmRpZGF0ZXMgdG8gZXhwb3NlIGFueSBjb25jdXJyZW5jeSBvciBtZW1vcnkgbWFuYWdlbWVudCBidWdzLlxuXG5CZWZvcmUgSSBkaXZlIHRvbyBkZWVwLCBJIG5lZWQgdG8gY29uZmlybSB0aGF0IGBQVERVTVBfREVCVUdGU2AgaXMgdGhlIGNvcnJlY3QgY29uZmlnIHRvIGFjdGl2YXRlIHRoZSByZWxldmFudCBmdW5jdGlvbmFsaXR5LiBHb3R0YSBtYWtlIHN1cmUgSSdtIHRlc3RpbmcgdGhlIHJpZ2h0IGNvZGUgcGF0aHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNDM1LCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjUwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEyVDEzOjEyOjM5LjU2MjY0MDc4NloiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTgwNzk4Nzk3MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgUFREVU1QX0RFQlVHRlNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vS2NvbmZpZy5kZWJ1Zz0yMTk9Y29uZmlnIFBURFVNUFxcbi0tXFxubW0vS2NvbmZpZy5kZWJ1Zy0yMjEtXFxubW0vS2NvbmZpZy5kZWJ1ZzoyMjI6Y29uZmlnIFBURFVNUF9ERUJVR0ZTXFxubW0vS2NvbmZpZy5kZWJ1Zy0yMjMtXFx0Ym9vbCBcXFwiRXhwb3J0IGtlcm5lbCBwYWdldGFibGUgbGF5b3V0IHRvIHVzZXJzcGFjZSB2aWEgZGVidWdmc1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTJUMTM6MTI6NDEuMzcwNjM4MTI5WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQyNTM3MjQ2MzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgUFREVU1QIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBgUFREVU1QX0RFQlVHRlNgIGlzIGluZGVlZCB0aGUgY29uZmlndXJhdGlvbiBpdGVtIHdlIHdhbnQuIElzIHRoZXJlIGFueXRoaW5nIGVsc2UgcmVsZXZhbnQgaGVyZT8gSSBrbm93IGBIQVZFX0FSQ0hfSFVHRV9WTUFMTE9DYCBpcyBhcmNoaXRlY3R1cmUtc3BlY2lmaWMsIHNvIHdlIGNhbid0IGp1c3QgZW5hYmxlIGl0IHVuaXZlcnNhbGx5LiBJdCdzIGEgZGVwZW5kZW5jeSwgc2VsZWN0ZWQgYnkgdGhlIGFyY2hpdGVjdHVyZSBpdHNlbGYuIExldCdzIHNlZSBpZiB0aGVyZSBhcmUgYW55ICpvdGhlciogcmVsYXRlZCBjb25maWdzLiBBaCwgYENPTkZJR19ERUJVR19XWGAgZG9lcyB1c2UgYHB0ZHVtcGAsIGJ1dCB0aGF0IGFwcGVhcnMgdG8gYmUgdHJpZ2dlcmVkIGR1cmluZyB0aGUgYm9vdCBwcm9jZXNzLiBOb3Qgd2hhdCBJJ20gYWZ0ZXIuIGBDT05GSUdfUFREVU1QX0RFQlVHRlNgLCBob3dldmVyLCB0aGF0J3MgdGhlIGtleS4gSXQgYWxsb3dzIGEgdXNlcnNwYWNlIHByb2dyYW0gdG8gdHJpZ2dlciBgcHRkdW1wYCB0aHJvdWdoIGRlYnVnZnMsIHdoaWNoIG1ha2VzIGl0IGFic29sdXRlbHkgaWRlYWwgZm9yIGZ1enppbmcuIFBlcmZlY3QuIE5vdywgSSBuZWVkIHRvIGNoZWNrIGBhcmNoL2FybTY0L21tL21tdS5jYCB0byBsb29rIGF0IGhvdyBgcG1kX2ZyZWVfcHRlX3BhZ2VgIGhhbmRsZXMgbWVtb3J5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTE1MywiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xMlQxMzoxMjo0NS42MjQzNjUzNTdaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0MDAwNTE2MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwbWRfZnJlZV9wdGVfcGFnZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL2FybTY0L21tL21tdS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvYXJtNjQvbW0vbW11LmM9MTg1Nz1pbnQgcG1kX2NsZWFyX2h1Z2UocG1kX3QgKnBtZHApXFxuLS1cXG5hcmNoL2FybTY0L21tL21tdS5jLTE4NjQtXFxuYXJjaC9hcm02NC9tbS9tbXUuYzoxODY1OmludCBwbWRfZnJlZV9wdGVfcGFnZShwbWRfdCAqcG1kcCwgdW5zaWduZWQgbG9uZyBhZGRyKVxcbmFyY2gvYXJtNjQvbW0vbW11LmMtMTg2Ni17XFxuLS1cXG5hcmNoL2FybTY0L21tL21tdS5jPTE4ODQ9aW50IHB1ZF9mcmVlX3BtZF9wYWdlKHB1ZF90ICpwdWRwLCB1bnNpZ25lZCBsb25nIGFkZHIpXFxuLS1cXG5hcmNoL2FybTY0L21tL21tdS5jLTE5MDMtXFx0XFx0aWYgKHBtZF9wcmVzZW50KHBtZHBfZ2V0KHBtZHApKSlcXG5hcmNoL2FybTY0L21tL21tdS5jOjE5MDQ6XFx0XFx0XFx0cG1kX2ZyZWVfcHRlX3BhZ2UocG1kcCwgbmV4dCk7XFxuYXJjaC9hcm02NC9tbS9tbXUuYy0xOTA1LVxcdH0gd2hpbGUgKHBtZHArKywgbmV4dCArPSBQTURfU0laRSwgbmV4dCAhPSBlbmQpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMlQxMzoxMjo0NS44NjQzNzk1NzlaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzcxODgxNTc1OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBmcm9tIG15IG93biBwZXJzcGVjdGl2ZTpcblxuKipJbnZlc3RpZ2F0aW5nIGBwbWRfZnJlZV9wdGVfcGFnZWAgVXNhZ2UgQWNyb3NzIEFyY2hpdGVjdHVyZXMqKlxuXG5SaWdodCwgbGV0IG1lIHNlZS4uLiBJJ20gbG9va2luZyBhdCBgcG1kX2ZyZWVfcHRlX3BhZ2VgLCBhbmQgaXQgYXBwZWFycyBpdCdzIGRlZmluZWQgd2l0aGluIGBhcmNoL2FybTY0L21tL21tdS5jYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IHRoaXMgZnVuY3Rpb24gaXMgZ2VuZXJhbGx5IHVzZWQuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBcIk9rYXksIHdoZXJlIGVsc2UgaXMgdGhpcyBmdW5jdGlvbiBjYWxsZWQ/XCIgVGhlbiBJIHJlbWVtYmVyIHNlZWluZyBpdCByZWZlcmVuY2VkIHdpdGhpbiBgbW0vdm1hbGxvYy5jYC4gSW50ZXJlc3RpbmcuIEEgYml0IG9mIGEgcmVkIGZsYWcgcG9wcyB1cCBpbW1lZGlhdGVseSwgdGhvdWdoLi4uIEkgbmVlZCB0byBhc2NlcnRhaW4gaWYgdGhpcyBmdW5jdGlvbiBpcyB1bml2ZXJzYWxseSBkZWZpbmVkIGFjcm9zcyBhbGwgYXJjaGl0ZWN0dXJlcyBzdXBwb3J0ZWQgYnkgdGhlIGtlcm5lbCwgb3IgaWYgaXQgaXMgaW1wbGVtZW50ZWQgaW4gYW4gYXJjaGl0ZWN0dXJlLXNwZWNpZmljIG1hbm5lci4gVGhpcyBpcyBjcnVjaWFsIGZvciBwb3J0YWJpbGl0eS4gSWYgaXQncyBhIGdlbmVyaWMgaW50ZXJmYWNlIGNhbGwsIHRoZW4gSSBkb24ndCBoYXZlIHRvIHdvcnJ5LiBCdXQgaWYgbm90LCBJIG5lZWQgdG8gY2hlY2sgaXRzIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBpbXBsZW1lbnRhdGlvbnMuIEkgc2hvdWxkIG5vdGUsIGl0IGlzIGFsc28gaW1wb3J0YW50IHRvIGxvb2sgYXQgaG93IGRpZmZlcmVudCBhcmNoaXRlY3R1cmVzIGhhbmRsZSB2bWFsbG9jIHJlZ2lvbnMgYW5kIHBhZ2UgdGFibGUgbWFuYWdlbWVudC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE4MjcsIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xMlQxMzoxMjo0OS41ODMxOTczNzdaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3MTI0MDA3MjEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicG1kX2ZyZWVfcHRlX3BhZ2VcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9hcm02NC9tbS9tbXUuYz0xODU3PWludCBwbWRfY2xlYXJfaHVnZShwbWRfdCAqcG1kcClcXG4tLVxcbmFyY2gvYXJtNjQvbW0vbW11LmMtMTg2NC1cXG5hcmNoL2FybTY0L21tL21tdS5jOjE4NjU6aW50IHBtZF9mcmVlX3B0ZV9wYWdlKHBtZF90ICpwbWRwLCB1bnNpZ25lZCBsb25nIGFkZHIpXFxuYXJjaC9hcm02NC9tbS9tbXUuYy0xODY2LXtcXG4tLVxcbmFyY2gvYXJtNjQvbW0vbW11LmM9MTg4ND1pbnQgcHVkX2ZyZWVfcG1kX3BhZ2UocHVkX3QgKnB1ZHAsIHVuc2lnbmVkIGxvbmcgYWRkcilcXG4tLVxcbmFyY2gvYXJtNjQvbW0vbW11LmMtMTkwMy1cXHRcXHRpZiAocG1kX3ByZXNlbnQocG1kcF9nZXQocG1kcCkpKVxcbmFyY2gvYXJtNjQvbW0vbW11LmM6MTkwNDpcXHRcXHRcXHRwbWRfZnJlZV9wdGVfcGFnZShwbWRwLCBuZXh0KTtcXG5hcmNoL2FybTY0L21tL21tdS5jLTE5MDUtXFx0fSB3aGlsZSAocG1kcCsrLCBuZXh0ICs9IFBNRF9TSVpFLCBuZXh0ICE9IGVuZCk7XFxuLS1cXG5hcmNoL3Bvd2VycGMvbW0vYm9vazNzNjQvcmFkaXhfcGd0YWJsZS5jPTE2NzU9aW50IHBtZF9jbGVhcl9odWdlKHBtZF90ICpwbWQpXFxuLS1cXG5hcmNoL3Bvd2VycGMvbW0vYm9vazNzNjQvcmFkaXhfcGd0YWJsZS5jLTE2ODQtXFxuYXJjaC9wb3dlcnBjL21tL2Jvb2szczY0L3JhZGl4X3BndGFibGUuYzoxNjg1OmludCBwbWRfZnJlZV9wdGVfcGFnZShwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIGFkZHIpXFxuYXJjaC9wb3dlcnBjL21tL2Jvb2szczY0L3JhZGl4X3BndGFibGUuYy0xNjg2LXtcXG4tLVxcbmFyY2gvcmlzY3YvbW0vcGd0YWJsZS5jPTExNz1pbnQgcG1kX2NsZWFyX2h1Z2UocG1kX3QgKnBtZClcXG4tLVxcbmFyY2gvcmlzY3YvbW0vcGd0YWJsZS5jLTEyNC1cXG5hcmNoL3Jpc2N2L21tL3BndGFibGUuYzoxMjU6aW50IHBtZF9mcmVlX3B0ZV9wYWdlKHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgYWRkcilcXG5hcmNoL3Jpc2N2L21tL3BndGFibGUuYy0xMjYte1xcbi0tXFxuYXJjaC94ODYvbW0vcGd0YWJsZS5jPTcxOD1pbnQgcHVkX2ZyZWVfcG1kX3BhZ2UocHVkX3QgKnB1ZCwgdW5zaWduZWQgbG9uZyBhZGRyKVxcbi0tXFxuYXJjaC94ODYvbW0vcGd0YWJsZS5jLTc1NC0vKipcXG5hcmNoL3g4Ni9tbS9wZ3RhYmxlLmM6NzU1OiAqIHBtZF9mcmVlX3B0ZV9wYWdlIC0gQ2xlYXIgUE1EIGVudHJ5IGFuZCBmcmVlIFBURSBwYWdlLlxcbmFyY2gveDg2L21tL3BndGFibGUuYy03NTYtICogQHBtZDogUG9pbnRlciB0byB0aGUgUE1EXFxuLS1cXG5hcmNoL3g4Ni9tbS9wZ3RhYmxlLmMtNzYxLSAqL1xcbmFyY2gveDg2L21tL3BndGFibGUuYzo3NjI6aW50IHBtZF9mcmVlX3B0ZV9wYWdlKHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgYWRkcilcXG5hcmNoL3g4Ni9tbS9wZ3RhYmxlLmMtNzYzLXtcXG4tLVxcbmFyY2gveDg2L21tL3BndGFibGUuYy03ODItICovXFxuYXJjaC94ODYvbW0vcGd0YWJsZS5jOjc4MzppbnQgcG1kX2ZyZWVfcHRlX3BhZ2UocG1kX3QgKnBtZCwgdW5zaWduZWQgbG9uZyBhZGRyKVxcbmFyY2gveDg2L21tL3BndGFibGUuYy03ODQte1xcbi0tXFxuaW5jbHVkZS9saW51eC9wZ3RhYmxlLmg9MjE3Nj1pbnQgcHVkX2ZyZWVfcG1kX3BhZ2UocHVkX3QgKnB1ZCwgdW5zaWduZWQgbG9uZyBhZGRyKTtcXG5pbmNsdWRlL2xpbnV4L3BndGFibGUuaDoyMTc3OmludCBwbWRfZnJlZV9wdGVfcGFnZShwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIGFkZHIpO1xcbmluY2x1ZGUvbGludXgvcGd0YWJsZS5oLTIxNzgtI2Vsc2VcXHQvKiAhQ09ORklHX0hBVkVfQVJDSF9IVUdFX1ZNQVAgKi9cXG4tLVxcbmluY2x1ZGUvbGludXgvcGd0YWJsZS5oPTIyMDQ9c3RhdGljIGlubGluZSBpbnQgcHVkX2ZyZWVfcG1kX3BhZ2UocHVkX3QgKnB1ZCwgdW5zaWduZWQgbG9uZyBhZGRyKVxcbi0tXFxuaW5jbHVkZS9saW51eC9wZ3RhYmxlLmgtMjIwNy19XFxuaW5jbHVkZS9saW51eC9wZ3RhYmxlLmg6MjIwODpzdGF0aWMgaW5saW5lIGludCBwbWRfZnJlZV9wdGVfcGFnZShwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIGFkZHIpXFxuaW5jbHVkZS9saW51eC9wZ3RhYmxlLmgtMjIwOS17XFxuLS1cXG5tbS92bWFsbG9jLmM9MTQzPXN0YXRpYyBpbnQgdm1hcF90cnlfaHVnZV9wbWQocG1kX3QgKnBtZCwgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCxcXG4tLVxcbm1tL3ZtYWxsb2MuYy0xNzMtXFx0c2NvcGVkX2NvbmRfZ3VhcmQobW1hcF9yZWFkX2xvY2tfdHJ5LCByZXR1cm4gMCwgXFx1MDAyNmluaXRfbW0pIHtcXG5tbS92bWFsbG9jLmM6MTc0OlxcdFxcdGlmICghcG1kX2ZyZWVfcHRlX3BhZ2UocG1kLCBhZGRyKSlcXG5tbS92bWFsbG9jLmMtMTc1LVxcdFxcdFxcdHJldHVybiAwO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMlQxMzoxMjo1MS4yOTU2MDMzNjhaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDU0NjU5NjI3NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgSHVnZSBWTUFQIFN1cHBvcnQgYW5kIFBhZ2UgVGFibGUgRHVtcGluZyoqXG5cbk9rYXksIHNvIHRoaXMgaXMgZGVmaW5pdGVseSBkZWZpbmVkIGZvciBhcmNoaXRlY3R1cmVzIHRoYXQgc3VwcG9ydCB0aGUgaHVnZSB2bWFwLiBJIG5lZWQgdG8gcmV2aXNpdCBgY3BhX2NvbGxhcHNlX2xhcmdlX3BhZ2VzYCB0byB1bmRlcnN0YW5kIHRoZSBjdXJyZW50IHN0YXRlIG9mIHRoaW5ncy4gUmlnaHQsIGl0J3MgaW4gYGFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmNgLiBOb3csIGlzIHRoZXJlIGFueSBjb25maWd1cmF0aW9uIHRpZWQgdG8gYHNldF9tZW1vcnkuY2A/IE5vLCBpdCdzIGFsd2F5cyBjb21waWxlZCBmb3IgeDg2LiBHb29kLlxuXG5TbywgdGhlIGtleSBjb25maWd1cmF0aW9ucyBJIG5lZWQgdG8ga2VlcCBpbiBtaW5kIGFyZSBqdXN0IGBQVERVTVBfREVCVUdGU2AuXG5cbk15IGZvY3VzIHN5bWJvbHMgaGVyZSBuZWVkIHRvIGJlOlxuKiAgIGB2bWFwX3RyeV9odWdlX3BtZGBcbiogICBgdm1hcF90cnlfaHVnZV9wdWRgXG4qICAgYHZtYXBfdHJ5X2h1Z2VfcDRkYFxuKiAgIGBjcGFfY29sbGFwc2VfbGFyZ2VfcGFnZXNgXG4qICAgYHB0ZHVtcF93YWxrX3BnZGBcblxuTGV0IG1lIHF1aWNrbHkgYXNzZXNzIGlmIGB3YWxrX3BhZ2VfcmFuZ2VfZGVidWdgIGlzIHdvcnRoIGV4YW1pbmluZyBmdXJ0aGVyLiBBaCwgaXQncyBpbiBgbW0vcGFnZXdhbGsuY2AsIHRoYXQgc2VlbXMgYXBwcm9wcmlhdGUsIGxldCdzIGtlZXAgdGhhdCBpbiBtaW5kLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzMwNywiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xMlQxMzoxMjo1NS44NDIyMDExMTNaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU5NzA1MDc1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIndhbGtfcGFnZV9yYW5nZV9kZWJ1Z1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9wYWdld2Fsay5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3BhZ2V3YWxrLmM9NjQ4PWludCB3YWxrX2tlcm5lbF9wYWdlX3RhYmxlX3JhbmdlX2xvY2tsZXNzKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLFxcbi0tXFxubW0vcGFnZXdhbGsuYy02NjctLyoqXFxubW0vcGFnZXdhbGsuYzo2Njg6ICogd2Fsa19wYWdlX3JhbmdlX2RlYnVnIC0gd2FsayBhIHJhbmdlIG9mIHBhZ2V0YWJsZXMgbm90IGJhY2tlZCBieSBhIHZtYVxcbm1tL3BhZ2V3YWxrLmMtNjY5LSAqIEBtbTpcXHRcXHRtbV9zdHJ1Y3QgcmVwcmVzZW50aW5nIHRoZSB0YXJnZXQgcHJvY2VzcyBvZiBwYWdlIHRhYmxlIHdhbGtcXG4tLVxcbm1tL3BhZ2V3YWxrLmMtNjgzLSAqL1xcbm1tL3BhZ2V3YWxrLmM6Njg0OmludCB3YWxrX3BhZ2VfcmFuZ2VfZGVidWcoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgc3RhcnQsXFxubW0vcGFnZXdhbGsuYy02ODUtXFx0XFx0XFx0ICB1bnNpZ25lZCBsb25nIGVuZCwgY29uc3Qgc3RydWN0IG1tX3dhbGtfb3BzICpvcHMsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEyVDEzOjEyOjU1LjkwMTkxMjkxOVoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MTMxMzc5MjQ3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBDb2RlIE1vZGlmaWNhdGlvbnMgYW5kIFBvdGVudGlhbCBJbXBhY3RzKipcblxuT2theSwgc28gSSBzZWUgdGhhdCBgd2Fsa19wYWdlX3JhbmdlX2RlYnVnYCBoYXMgYmVlbiBhZGp1c3RlZC4gU3BlY2lmaWNhbGx5LCB0aGUgYWRkaXRpb24gb2YgYG1tYXBfYXNzZXJ0X3dyaXRlX2xvY2tlZChcdTAwMjZpbml0X21tKTtgIGFuZCB0aGUgcmVtb3ZhbCBvZiB0aGUgc3BlY2lhbCBjYXNpbmcgZm9yIGBpbml0X21tYCBqdW1wIG91dCBpbW1lZGlhdGVseS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIGNoYW5nZSB0aG9yb3VnaGx5LiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCB0aGlzIGxpa2VseSB0aWdodGVucyB1cCB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgcmVsYXRlZCBhc3NlcnRpb25zLCBwYXJ0aWN1bGFybHkgYXJvdW5kIGxvY2tpbmcuXG5cbk5vdywgSSBuZWVkIHRvIGNoZWNrIGZvciByZWxhdGVkIGNvbmZpZ3VyYXRpb25zLiBgQ09ORklHX1BURFVNUF9ERUJVR0ZTYCBpcyB0aGUgcHJpbWFyeSBvbmUgdGhhdCBjb21lcyB0byBtaW5kLCBhcyBpdCdzIGRpcmVjdGx5IGxpbmtlZCB0byBkZWJ1Z2dpbmcgcGFnZSB0YWJsZXMsIHdoaWNoIHRoaXMgbW9kaWZpY2F0aW9uIHRvdWNoZXMuIExldCdzIHNlZSBpZiB0aGVyZSBhcmUgYW55IG90aGVycy4gSG1tLCB3aGF0IGFib3V0IGBDT05GSUdfREVCVUdfV1hgPyBJdCBkb2VzIGludm9sdmUgcHRkdW1wLCBidXQgaXQgc2VlbXMgdG8gYmUgc29sZWx5IGEgYm9vdC10aW1lIGNvbmZpZ3VyYXRpb24uIFRoYXQgc3VnZ2VzdHMgaXQgbWlnaHQgbm90IGJlIGEgZGlyZWN0IGZhY3RvciBoZXJlLCBidXQgaXQncyB3b3J0aCBub3RpbmcgZm9yIGNvbXBsZXRlbmVzcy4gSSBzaG91bGQgYWxzbyBpbnZlc3RpZ2F0ZSBgQ09ORklHX1g4Nl9QVERVTVBgIOKAkyBpdCdzIGNydWNpYWwgdG8gdW5kZXJzdGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIGFsdGVyZWQgZnVuY3Rpb24uIEkgbmVlZCB0byBtYXAgb3V0IHRoZSBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcyBhbmQgdW5kZXJzdGFuZCB0aGUgc2NvcGUgb2YgdGhlIHBvdGVudGlhbCBpbXBhY3QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzOTgxLCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTA4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEyVDEzOjEzOjAwLjAzMzI5NDc0NloiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTczNjEwNzI2OSwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFg4Nl9QVERVTVBcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEyVDEzOjEzOjAxLjc2OTQwOTEwNVoiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyODk4Nzk3OTEwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzc3VtaW5nIEknbSBhbiBleHBlcnQgaW4gdGhpcyBmaWVsZCwgYW5kIHJlbmRlcmVkIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqSW52ZXN0aWdhdGluZyBDb3JlIER1bXBzIGFuZCBQb3RlbnRpYWwgU3lzdGVtIEluZm9ybWF0aW9uKipcblxuTXkgaW1tZWRpYXRlIHRob3VnaHQsIHdoZW4gc2VlaW5nIHRoaXMsIGlzOiBcIlJpZ2h0LCBgQ09ORklHX1BURFVNUF9DT1JFYC4uLiB3aGF0IGFib3V0IGl0P1wiIFRoaXMgc3BlY2lmaWMgY29uZmlndXJhdGlvbiBvcHRpb24gaW1tZWRpYXRlbHkgcGlxdWVzIG15IGludGVyZXN0IGJlY2F1c2UgaXQncyBkaXJlY3RseSByZWxhdGVkIHRvIHRoZSBnZW5lcmF0aW9uIGFuZCBoYW5kbGluZyBvZiBjb3JlIGR1bXBzLCB3aGljaCBhcmUgaW52YWx1YWJsZSBmb3IgZGVidWdnaW5nIGNyYXNoZXMgYW5kIHVuZGVyc3RhbmRpbmcgc3lzdGVtIGJlaGF2aW9yLiBJcyB0aGlzIG9wdGlvbiBlbmFibGVkPyBEaXNhYmxlZD8gV2hhdCdzIHRoZSBjb250ZXh0PyBBcmUgd2UgbG9va2luZyB0byBhbmFseXplIGEgc3BlY2lmaWMgY29yZSBkdW1wLCBvciBpcyB0aGlzIGFib3V0IHN5c3RlbSBjb25maWd1cmF0aW9uIGluIGdlbmVyYWw/IERlcGVuZGluZyBvbiB0aGUgcHJvamVjdCwgdGhlIGFuc3dlcnMgdG8gdGhvc2UgcXVlc3Rpb25zIGNhbiBzaWduaWZpY2FudGx5IGNoYW5nZSBteSBuZXh0IHN0ZXBzLiBJJ2xsIG5lZWQgdG8gcmVtZW1iZXIgdG8gY2hlY2sgaWYgaXQncyBvbiBvciBvZmYhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0Mzc1LCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTJUMTM6MTM6MDQuNjY4MjA5MTc2WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzM2NTQxNTY5LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgUFREVU1QX0NPUkVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEyVDEzOjEzOjA2LjQwNDc2MDYyNFoiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyOTMwNTQ3ODI4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipRdWljayBTY2FuOiBQVERVTVAgT3B0aW9ucyoqXG5cbkFscmlnaHQsIHRoaXMgbG9va3Mgc3RyYWlnaHRmb3J3YXJkLiBTZWVtcyBsaWtlIHdlJ3JlIHplcm9pbmcgaW4gb24ga2VybmVsIGRlYnVnZ2luZyB0b29scyByZWxhdGVkIHRvIHBhZ2UgdGFibGUgZHVtcHMsIHNwZWNpZmljYWxseSBgQ09ORklHX1BURFVNUGAgYW5kIGBDT05GSUdfUFREVU1QX0RFQlVHRlNgLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgbGV0J3MganVzdCBtYWtlIHN1cmUgd2UgdW5kZXJzdGFuZCB0aGUgc2NvcGUgb2YgYENPTkZJR19QVERVTVBgLiBUaGF0J3MgdGhlIGJhc2VsaW5lLCB0aGUgY29yZSBmdW5jdGlvbmFsaXR5LiBJJ2xsIG5lZWQgdG8gY2hlY2sgdGhlIGV4YWN0IGRlZmluaXRpb24gYW5kIHVzYWdlIG9mIHRoaXMgb3B0aW9uLiBJIHdhbnQgdG8gc2VlIGhvdyB0aGlzIHdvcmtzIGFuZCBhbnkgcG90ZW50aWFsIGNhdmVhdHMuIEknbSBhc3N1bWluZyB0aGF0IGBDT05GSUdfUFREVU1QX0RFQlVHRlNgIGJ1aWxkcyBvbiB0b3Agb2YgYENPTkZJR19QVERVTVBgLCBsaWtlbHkgZW5hYmxpbmcgYWNjZXNzIHZpYSBkZWJ1Z2ZzLiBMZXQncyBkaWcgaW4gYW5kIGZpZ3VyZSBvdXQgaG93IGl0IGFsbCBmaXRzIHRvZ2V0aGVyLiBUaGlzIHNob3VsZCBiZSBhIHF1aWNrIG9uZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ1OTEsIk91dHB1dFRva2VucyI6MTgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xMlQxMzoxMzowOS4zMzUzMTAzMjJaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3NDkyNDc0NzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFBURFVNUFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL2FybTY0L2t2bS9LY29uZmlnPTQ1PWlmIEtWTVxcbmFyY2gvYXJtNjQva3ZtL0tjb25maWctNDYtXFxuYXJjaC9hcm02NC9rdm0vS2NvbmZpZzo0Nzpjb25maWcgUFREVU1QX1NUQUdFMl9ERUJVR0ZTXFxuYXJjaC9hcm02NC9rdm0vS2NvbmZpZy00OC1cXHRib29sIFxcXCJQcmVzZW50IHRoZSBzdGFnZS0yIHBhZ2V0YWJsZXMgdG8gZGVidWdmc1xcXCJcXG4tLVxcbm1tL0tjb25maWcuZGVidWc9MjE2PWNvbmZpZyBBUkNIX0hBU19QVERVTVBcXG4tLVxcbm1tL0tjb25maWcuZGVidWctMjE4LVxcbm1tL0tjb25maWcuZGVidWc6MjE5OmNvbmZpZyBQVERVTVBcXG5tbS9LY29uZmlnLmRlYnVnLTIyMC1cXHRib29sXFxubW0vS2NvbmZpZy5kZWJ1Zy0yMjEtXFxubW0vS2NvbmZpZy5kZWJ1ZzoyMjI6Y29uZmlnIFBURFVNUF9ERUJVR0ZTXFxubW0vS2NvbmZpZy5kZWJ1Zy0yMjMtXFx0Ym9vbCBcXFwiRXhwb3J0IGtlcm5lbCBwYWdldGFibGUgbGF5b3V0IHRvIHVzZXJzcGFjZSB2aWEgZGVidWdmc1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTJUMTM6MTM6MTEuMDg0NTYzMDlaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Njg2NjgzNDc1MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiBUaGlzIEtlcm5lbCBQYXRjaCoqXG5cbk9rYXksIHNvIGhlcmUncyB3aGF0IEknbSB0aGlua2luZyBhYm91dCB0aGlzIHBhdGNoLiBgQ09ORklHX1BURFVNUGAgaXMgYSBib29sZWFuLCBidXQgaXQncyBpbmRpcmVjdGx5IGVuYWJsZWQgYnkgYFBURFVNUF9ERUJVR0ZTYC4gVGhhdCBtZWFucyBgUFREVU1QX0RFQlVHRlNgIGlzIHRoZSByZWFsIGtleSB0byBlbmFibGluZyB0aGUgZnVuY3Rpb25hbGl0eSB3ZSdyZSBpbnRlcmVzdGVkIGluLlxuXG5Gcm9tIG15IGV4cGVydCBwZXJzcGVjdGl2ZSwgdGhpcyBkZWZpbml0ZWx5IGxvb2tzIHdvcnRoIGZ1enppbmcuIFRoZSBwYXRjaCBpcyBjaGFuZ2luZyBjb3JlIGtlcm5lbCBsb2dpYywgc3BlY2lmaWNhbGx5IGFyb3VuZCBwYWdlIHRhYmxlIGR1bXBpbmcgYW5kIGhvdyB2bWFsbG9jIGh1Z2UgcGFnZXMgYXJlIG1hcHBlZC4gVGhlIGZhY3QgdGhhdCB0aGV5J3JlIGFkZGluZyBsb2NraW5nIG9uIGBpbml0X21tYCB0byBhdm9pZCB1c2UtYWZ0ZXItZnJlZSBjb25kaXRpb25zIGR1cmluZyBjb25jdXJyZW50IHBhZ2UgdGFibGUgbW9kaWZpY2F0aW9ucyBpbW1lZGlhdGVseSBncmFicyBteSBhdHRlbnRpb24g4oCTIHRoYXQncyBhIGNsYXNzaWMgYXJlYSBmb3IgbWVtb3J5IGNvcnJ1cHRpb24gYnVncy4gQW5kLCBjcnVjaWFsbHksIHRoaXMgZnVuY3Rpb25hbGl0eSBpcyBhY2Nlc3NpYmxlIHRocm91Z2ggZGVidWdmcyBhbmQgdm1hbGxvYyBjYWxscywgd2hpY2ggbWFrZXMgaXQgZWFzaWVyIHRvIHRyaWdnZXIgaW4gYSBjb250cm9sbGVkIGVudmlyb25tZW50LlxuXG5UaGUga2V5IHN5bWJvbHMgSSd2ZSBpZGVudGlmaWVkIGFzIGxpa2VseSB0YXJnZXRzIGFyZTpcblxuKiAgIGB2bWFwX3RyeV9odWdlX3BtZGBcbiogICBgdm1hcF90cnlfaHVnZV9wdWRgXG4qICAgYHZtYXBfdHJ5X2h1Z2VfcDRkYFxuKiAgIGBjcGFfY29sbGFwc2VfbGFyZ2VfcGFnZXNgXG4qICAgYHB0ZHVtcF93YWxrX3BnZGBcbiogICBgd2Fsa19wYWdlX3JhbmdlX2RlYnVnYFxuXG5JJ3ZlIGNvbmZpcm1lZCB0aGF0IGBjcGFfY29sbGFwc2VfbGFyZ2VfcGFnZXNgIGFuZCBgdm1hcF90cnlfaHVnZV9wbWRgIGFyZSBzdGF0aWMgZnVuY3Rpb25zLCB3aGljaCBpcyBmaW5lIHRvIGluY2x1ZGUgc2luY2UgdGhleSBhcmUgcmVsZXZhbnQgdG8gdGhlIHBhdGNoLiBUaGUgb3RoZXIgZnVuY3Rpb25zIGFyZSBleHBvcnRlZC9nbG9iYWwuXG5cblNvLCBpbiBzaG9ydCwgSSdsbCBiZSBlbmFibGluZyBgUFREVU1QX0RFQlVHRlNgIGFzIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbiB0byBmb2N1cyBvbiwgYW5kIHdpbGwgY29uY2VudHJhdGUgbXkgZnV6emluZyBlZmZvcnRzIG9uIHRoZXNlIHNwZWNpZmljIGZ1bmN0aW9ucy4gTm93LCBsZXQncyBnZXQgdGhlIHJlc3VsdHMgc2V0IHVwLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTA1NSwiT3V0cHV0VG9rZW5zIjoxNTQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMTEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTJUMTM6MTM6MTcuOTUxNDAwMzZaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NzUxMTI3NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiUFREVU1QX0RFQlVHRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ2bWFwX3RyeV9odWdlX3BtZFwiLFxuICAgIFwidm1hcF90cnlfaHVnZV9wdWRcIixcbiAgICBcInZtYXBfdHJ5X2h1Z2VfcDRkXCIsXG4gICAgXCJjcGFfY29sbGFwc2VfbGFyZ2VfcGFnZXNcIixcbiAgICBcInB0ZHVtcF93YWxrX3BnZFwiLFxuICAgIFwid2Fsa19wYWdlX3JhbmdlX2RlYnVnXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBrZXJuZWwgbG9naWMgZm9yIHBhZ2UgdGFibGUgZHVtcGluZyBhbmQgdm1hbGxvYyBodWdlIHBhZ2UgbWFwcGluZ3MsIGludHJvZHVjaW5nIGxvY2tpbmcgb24gYGluaXRfbW1gIHRvIHByZXZlbnQgdXNlLWFmdGVyLWZyZWUgZHVyaW5nIGNvbmN1cnJlbnQgcGFnZSB0YWJsZSBtb2RpZmljYXRpb25zLiBUaGlzIGlzIHJlYWNoYWJsZSB2aWEgZGVidWdmcyBhbmQgdm1hbGxvYyBjYWxscy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJQVERVTVBfREVCVUdGU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInZtYXBfdHJ5X2h1Z2VfcG1kXCIsXG4gICAgXCJ2bWFwX3RyeV9odWdlX3B1ZFwiLFxuICAgIFwidm1hcF90cnlfaHVnZV9wNGRcIixcbiAgICBcImNwYV9jb2xsYXBzZV9sYXJnZV9wYWdlc1wiLFxuICAgIFwicHRkdW1wX3dhbGtfcGdkXCIsXG4gICAgXCJ3YWxrX3BhZ2VfcmFuZ2VfZGVidWdcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBjb3JlIGtlcm5lbCBsb2dpYyBmb3IgcGFnZSB0YWJsZSBkdW1waW5nIGFuZCB2bWFsbG9jIGh1Z2UgcGFnZSBtYXBwaW5ncywgaW50cm9kdWNpbmcgbG9ja2luZyBvbiBgaW5pdF9tbWAgdG8gcHJldmVudCB1c2UtYWZ0ZXItZnJlZSBkdXJpbmcgY29uY3VycmVudCBwYWdlIHRhYmxlIG1vZGlmaWNhdGlvbnMuIFRoaXMgaXMgcmVhY2hhYmxlIHZpYSBkZWJ1Z2ZzIGFuZCB2bWFsbG9jIGNhbGxzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowj2h8s[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-12 12:59:27 +0000 UTC FinishedAt: 2026-07-12 13:13:19 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "44696aa3a489d2baf58efa61b37833f100072bee", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "PTDUMP_DEBUGFS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "44696aa3a489d2baf58efa61b37833f100072bee", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "PTDUMP_DEBUGFS" ], "series_id": "6ed0e57f-8f83-472b-bc1b-aabbc1a237de" }, "track": "KASAN", "fuzz": { "focus": [ "bpf" ], "focus_symbols": [ "vmap_try_huge_pmd", "vmap_try_huge_pud", "vmap_try_huge_p4d", "cpa_collapse_large_pages", "ptdump_walk_pgd", "walk_page_range_debug" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db", "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEyIDEzOjEyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1BURFVNUF9ERUJVR0ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dm1hcF90cnlfaHVnZV9wbWQmIzM0OywKICAgICYjMzQ7dm1hcF90cnlfaHVnZV9wdWQmIzM0OywKICAgICYjMzQ7dm1hcF90cnlfaHVnZV9wNGQmIzM0OywKICAgICYjMzQ7Y3BhX2NvbGxhcHNlX2xhcmdlX3BhZ2VzJiMzNDssCiAgICAmIzM0O3B0ZHVtcF93YWxrX3BnZCYjMzQ7LAogICAgJiMzNDt3YWxrX3BhZ2VfcmFuZ2VfZGVidWcmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBrZXJuZWwgbG9naWMgZm9yIHBhZ2UgdGFibGUgZHVtcGluZyBhbmQgdm1hbGxvYyBodWdlIHBhZ2UgbWFwcGluZ3MsIGludHJvZHVjaW5nIGxvY2tpbmcgb24gYGluaXRfbW1gIHRvIHByZXZlbnQgdXNlLWFmdGVyLWZyZWUgZHVyaW5nIGNvbmN1cnJlbnQgcGFnZSB0YWJsZSBtb2RpZmljYXRpb25zLiBUaGlzIGlzIHJlYWNoYWJsZSB2aWEgZGVidWdmcyBhbmQgdm1hbGxvYyBjYWxscy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMiAxMzoxMjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGU1YmY4ZGQ5ODEzMmQ3ZTYxMWYzNjZjNjE0ZGZlNTk3ODhkMDVlM2NcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU3VuIEp1bCAxMiAxMzoxMTo1OSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3B0ZHVtcC5oIGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9wdGR1bXAuaFxuaW5kZXggNWIzNzRhNmFiMzRhNGUuLjUwYTE5NWVkYThlZDIyIDEwMDY0NFxuLS0tIGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9wdGR1bXAuaFxuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9wdGR1bXAuaFxuQEAgLTcsOCAmIzQzOzcsNiBAQFxuIFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3B0ZHVtcC5oXHUwMDNlXG4gXG4tREVDTEFSRV9TVEFUSUNfS0VZX0ZBTFNFKGFybTY0X3B0ZHVtcF9sb2NrX2tleSk7XG4tXG4gI2lmZGVmIENPTkZJR19QVERVTVBcbiBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9tbV90eXBlcy5oXHUwMDNlXG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9tbS9tbXUuYyBiL2FyY2gvYXJtNjQvbW0vbW11LmNcbmluZGV4IGEyNWQ4YmVhY2M4MzEwLi5iZDUyZmNhNmU4NzIwYiAxMDA2NDRcbi0tLSBhL2FyY2gvYXJtNjQvbW0vbW11LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvYXJtNjQvbW0vbW11LmNcbkBAIC00OSw4ICYjNDM7NDksNiBAQFxuICNkZWZpbmUgTk9fQ09OVF9NQVBQSU5HU1x0QklUKDEpXG4gI2RlZmluZSBOT19FWEVDX01BUFBJTkdTXHRCSVQoMilcdC8qIGFzc3VtZXMgRkVBVF9IUERTIGlzIG5vdCB1c2VkICovXG4gXG4tREVGSU5FX1NUQVRJQ19LRVlfRkFMU0UoYXJtNjRfcHRkdW1wX2xvY2tfa2V5KTtcbi1cbiB1NjQga2ltYWdlX3ZvZmZzZXQgX19yb19hZnRlcl9pbml0O1xuIEVYUE9SVF9TWU1CT0woa2ltYWdlX3ZvZmZzZXQpO1xuIFxuQEAgLTE4NjQsOCAmIzQzOzE4NjIsNyBAQCBpbnQgcG1kX2NsZWFyX2h1Z2UocG1kX3QgKnBtZHApXG4gXHRyZXR1cm4gMTtcbiB9XG4gXG4tc3RhdGljIGludCBfX3BtZF9mcmVlX3B0ZV9wYWdlKHBtZF90ICpwbWRwLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4tXHRcdFx0ICAgICAgIGJvb2wgYWNxdWlyZV9tbWFwX2xvY2spXG4mIzQzO2ludCBwbWRfZnJlZV9wdGVfcGFnZShwbWRfdCAqcG1kcCwgdW5zaWduZWQgbG9uZyBhZGRyKVxuIHtcbiBcdHB0ZV90ICp0YWJsZTtcbiBcdHBtZF90IHBtZDtcbkBAIC0xODc3LDI1ICYjNDM7MTg3NCwxMyBAQCBzdGF0aWMgaW50IF9fcG1kX2ZyZWVfcHRlX3BhZ2UocG1kX3QgKnBtZHAsIHVuc2lnbmVkIGxvbmcgYWRkcixcbiBcdFx0cmV0dXJuIDE7XG4gXHR9XG4gXG4tXHQvKiBTZWUgY29tbWVudCBpbiBwdWRfZnJlZV9wbWRfcGFnZSBmb3Igc3RhdGljIGtleSBsb2dpYyAqL1xuIFx0dGFibGUgPSBwdGVfb2Zmc2V0X2tlcm5lbChwbWRwLCBhZGRyKTtcbiBcdHBtZF9jbGVhcihwbWRwKTtcbiBcdF9fZmx1c2hfdGxiX2tlcm5lbF9wZ3RhYmxlKGFkZHIpO1xuLVx0aWYgKHN0YXRpY19icmFuY2hfdW5saWtlbHkoXHUwMDI2YXJtNjRfcHRkdW1wX2xvY2tfa2V5KSBcdTAwMjZcdTAwMjYgYWNxdWlyZV9tbWFwX2xvY2spIHtcbi1cdFx0bW1hcF9yZWFkX2xvY2soXHUwMDI2aW5pdF9tbSk7XG4tXHRcdG1tYXBfcmVhZF91bmxvY2soXHUwMDI2aW5pdF9tbSk7XG4tXHR9XG4tXG4gXHRwdGVfZnJlZV9rZXJuZWwoTlVMTCwgdGFibGUpO1xuIFx0cmV0dXJuIDE7XG4gfVxuIFxuLWludCBwbWRfZnJlZV9wdGVfcGFnZShwbWRfdCAqcG1kcCwgdW5zaWduZWQgbG9uZyBhZGRyKVxuLXtcbi1cdC8qIElmIHB0ZHVtcCBpcyB3YWxraW5nIHRoZSBwYWdldGFibGVzLCBhY3F1aXJlIGluaXRfbW0ubW1hcF9sb2NrICovXG4tXHRyZXR1cm4gX19wbWRfZnJlZV9wdGVfcGFnZShwbWRwLCBhZGRyLCAvKiBhY3F1aXJlX21tYXBfbG9jayA9ICovIHRydWUpO1xuLX1cbi1cbiBpbnQgcHVkX2ZyZWVfcG1kX3BhZ2UocHVkX3QgKnB1ZHAsIHVuc2lnbmVkIGxvbmcgYWRkcilcbiB7XG4gXHRwbWRfdCAqdGFibGU7XG5AQCAtMTkxMSwzNiAmIzQzOzE4OTYsMTYgQEAgaW50IHB1ZF9mcmVlX3BtZF9wYWdlKHB1ZF90ICpwdWRwLCB1bnNpZ25lZCBsb25nIGFkZHIpXG4gXHR9XG4gXG4gXHR0YWJsZSA9IHBtZF9vZmZzZXQocHVkcCwgYWRkcik7XG4tXG4tXHQvKlxuLVx0ICogT3VyIG9iamVjdGl2ZSBpcyB0byBwcmV2ZW50IHB0ZHVtcCBmcm9tIHJlYWRpbmcgYSBQTUQgdGFibGUgd2hpY2ggaGFzXG4tXHQgKiBiZWVuIGZyZWVkLiBJbiB0aGlzIHJhY2UsIGlmIHB1ZF9mcmVlX3BtZF9wYWdlIG9ic2VydmVzIHRoZSBrZXkgb25cbi1cdCAqICh3aGljaCBnb3QgZmxpcHBlZCBieSBwdGR1bXApIHRoZW4gdGhlIG1tYXAgbG9jayBzZXF1ZW5jZSBoZXJlIHdpbGwsXG4tXHQgKiBhcyBhIHJlc3VsdCBvZiB0aGUgbW1hcCB3cml0ZSBsb2NrL3VubG9jayBzZXF1ZW5jZSBpbiBwdGR1bXAsIGdpdmVcbi1cdCAqIHVzIHRoZSBjb3JyZWN0IHN5bmNocm9uaXphdGlvbi4gSWYgbm90LCB0aGlzIG1lYW5zIHRoYXQgcHRkdW1wIGhhc1xuLVx0ICogeWV0IG5vdCBzdGFydGVkIHdhbGtpbmcgdGhlIHBhZ2V0YWJsZXMgLSB0aGUgc2VxdWVuY2Ugb2YgYmFycmllcnNcbi1cdCAqIGlzc3VlZCBieSBfX2ZsdXNoX3RsYl9rZXJuZWxfcGd0YWJsZSgpIGd1YXJhbnRlZXMgdGhhdCBwdGR1bXAgd2lsbFxuLVx0ICogb2JzZXJ2ZSBhbiBlbXB0eSBQVUQuXG4tXHQgKi9cbi1cdHB1ZF9jbGVhcihwdWRwKTtcbi1cdF9fZmx1c2hfdGxiX2tlcm5lbF9wZ3RhYmxlKGFkZHIpO1xuLVx0aWYgKHN0YXRpY19icmFuY2hfdW5saWtlbHkoXHUwMDI2YXJtNjRfcHRkdW1wX2xvY2tfa2V5KSkge1xuLVx0XHRtbWFwX3JlYWRfbG9jayhcdTAwMjZpbml0X21tKTtcbi1cdFx0bW1hcF9yZWFkX3VubG9jayhcdTAwMjZpbml0X21tKTtcbi1cdH1cbi1cbiBcdHBtZHAgPSB0YWJsZTtcbiBcdG5leHQgPSBhZGRyO1xuIFx0ZW5kID0gYWRkciAmIzQzOyBQVURfU0laRTtcbiBcdGRvIHtcbiBcdFx0aWYgKHBtZF9wcmVzZW50KHBtZHBfZ2V0KHBtZHApKSlcbi1cdFx0XHQvKlxuLVx0XHRcdCAqIFBNRCBoYXMgYmVlbiBpc29sYXRlZCwgc28gcHRkdW1wIHdvbiYjMzk7dCBzZWUgaXQuIE5vXG4tXHRcdFx0ICogbmVlZCB0byBhY3F1aXJlIGluaXRfbW0ubW1hcF9sb2NrLlxuLVx0XHRcdCAqL1xuLVx0XHRcdF9fcG1kX2ZyZWVfcHRlX3BhZ2UocG1kcCwgbmV4dCwgLyogYWNxdWlyZV9tbWFwX2xvY2sgPSAqLyBmYWxzZSk7XG4mIzQzO1x0XHRcdHBtZF9mcmVlX3B0ZV9wYWdlKHBtZHAsIG5leHQpO1xuIFx0fSB3aGlsZSAocG1kcCYjNDM7JiM0MzssIG5leHQgJiM0Mzs9IFBNRF9TSVpFLCBuZXh0ICE9IGVuZCk7XG4gXG4mIzQzO1x0cHVkX2NsZWFyKHB1ZHApO1xuJiM0MztcdF9fZmx1c2hfdGxiX2tlcm5lbF9wZ3RhYmxlKGFkZHIpO1xuIFx0cG1kX2ZyZWUoTlVMTCwgdGFibGUpO1xuIFx0cmV0dXJuIDE7XG4gfVxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvbW0vcHRkdW1wLmMgYi9hcmNoL2FybTY0L21tL3B0ZHVtcC5jXG5pbmRleCAxYzIwMTQ0NzAwZDdkNy4uNWE3NmM1OWI1YWRhNTUgMTAwNjQ0XG4tLS0gYS9hcmNoL2FybTY0L21tL3B0ZHVtcC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL2FybTY0L21tL3B0ZHVtcC5jXG5AQCAtMjgzLDEzICYjNDM7MjgzLDYgQEAgdm9pZCBub3RlX3BhZ2VfZmx1c2goc3RydWN0IHB0ZHVtcF9zdGF0ZSAqcHRfc3QpXG4gXHRub3RlX3BhZ2UocHRfc3QsIDAsIC0xLCBwdGVfdmFsKHB0ZV96ZXJvKSk7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIGFybTY0X3B0ZHVtcF93YWxrX3BnZChzdHJ1Y3QgcHRkdW1wX3N0YXRlICpzdCwgc3RydWN0IG1tX3N0cnVjdCAqbW0pXG4te1xuLVx0c3RhdGljX2JyYW5jaF9pbmMoXHUwMDI2YXJtNjRfcHRkdW1wX2xvY2tfa2V5KTtcbi1cdHB0ZHVtcF93YWxrX3BnZChzdCwgbW0sIE5VTEwpO1xuLVx0c3RhdGljX2JyYW5jaF9kZWMoXHUwMDI2YXJtNjRfcHRkdW1wX2xvY2tfa2V5KTtcbi19XG4tXG4gdm9pZCBwdGR1bXBfd2FsayhzdHJ1Y3Qgc2VxX2ZpbGUgKnMsIHN0cnVjdCBwdGR1bXBfaW5mbyAqaW5mbylcbiB7XG4gXHR1bnNpZ25lZCBsb25nIGVuZCA9IH4wVUw7XG5AQCAtMzE4LDcgJiM0MzszMTEsNyBAQCB2b2lkIHB0ZHVtcF93YWxrKHN0cnVjdCBzZXFfZmlsZSAqcywgc3RydWN0IHB0ZHVtcF9pbmZvICppbmZvKVxuIFx0XHR9XG4gXHR9O1xuIFxuLVx0YXJtNjRfcHRkdW1wX3dhbGtfcGdkKFx1MDAyNnN0LnB0ZHVtcCwgaW5mby1cdTAwM2VtbSk7XG4mIzQzO1x0cHRkdW1wX3dhbGtfcGdkKFx1MDAyNnN0LnB0ZHVtcCwgaW5mby1cdTAwM2VtbSwgTlVMTCk7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIF9faW5pdCBwdGR1bXBfaW5pdGlhbGl6ZSh2b2lkKVxuQEAgLTM2MCw3ICYjNDM7MzUzLDcgQEAgYm9vbCBwdGR1bXBfY2hlY2tfd3godm9pZClcbiBcdFx0fVxuIFx0fTtcbiBcbi1cdGFybTY0X3B0ZHVtcF93YWxrX3BnZChcdTAwMjZzdC5wdGR1bXAsIFx1MDAyNmluaXRfbW0pO1xuJiM0MztcdHB0ZHVtcF93YWxrX3BnZChcdTAwMjZzdC5wdGR1bXAsIFx1MDAyNmluaXRfbW0sIE5VTEwpO1xuIFxuIFx0aWYgKHN0Lnd4X3BhZ2VzIHx8IHN0LnV4bl9wYWdlcykge1xuIFx0XHRwcl93YXJuKFwmIzM0O0NoZWNrZWQgVyYjNDM7WCBtYXBwaW5nczogRkFJTEVELCAlbHUgVyYjNDM7WCBwYWdlcyBmb3VuZCwgJWx1IG5vbi1VWE4gcGFnZXMgZm91bmRcXG5cJiMzNDssXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYyBiL2FyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmNcbmluZGV4IGQwMjNhNDBhMWUwMzQ1Li40YzRiODI0NDUwMmZjZSAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmNcbkBAIC0yMiw2ICYjNDM7MjIsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2NjX3BsYXRmb3JtLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zZXRfbWVtb3J5LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9tZW1yZWdpb24uaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9jbGVhbnVwLmhcdTAwM2VcbiBcbiAjaW5jbHVkZSBcdTAwM2Nhc20vZTgyMC9hcGkuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2FzbS9wcm9jZXNzb3IuaFx1MDAzZVxuQEAgLTQzNiw5ICYjNDM7NDM3LDE2IEBAIHN0YXRpYyB2b2lkIGNwYV9jb2xsYXBzZV9sYXJnZV9wYWdlcyhzdHJ1Y3QgY3BhX2RhdGEgKmNwYSlcbiBcbiBcdGZsdXNoX3RsYl9hbGwoKTtcbiBcbi1cdGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShwdGRlc2MsIHRtcCwgXHUwMDI2cGd0YWJsZXMsIHB0X2xpc3QpIHtcbi1cdFx0bGlzdF9kZWwoXHUwMDI2cHRkZXNjLVx1MDAzZXB0X2xpc3QpO1xuLVx0XHRwYWdldGFibGVfZnJlZShwdGRlc2MpO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogcHRkdW1wIG1pZ2h0IHJlYWQgdGhlc2UgcGFnZSB0YWJsZXMsIHNvIGF2b2lkIGEgdXNlLWFmdGVyLWZyZWUgYnlcbiYjNDM7XHQgKiBhY3F1aXJpbmcgdGhlIG1tYXAgcmVhZCBsb2NrIG9uIGluaXRfbW0gKHB0ZHVtcCBhY3F1aXJlcyB0aGUgbW1hcFxuJiM0MztcdCAqIHdyaXRlIGxvY2spLlxuJiM0MztcdCAqL1xuJiM0MztcdHNjb3BlZF9ndWFyZChtbWFwX3JlYWRfbG9jaywgXHUwMDI2aW5pdF9tbSkge1xuJiM0MztcdFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHB0ZGVzYywgdG1wLCBcdTAwMjZwZ3RhYmxlcywgcHRfbGlzdCkge1xuJiM0MztcdFx0XHRsaXN0X2RlbChcdTAwMjZwdGRlc2MtXHUwMDNlcHRfbGlzdCk7XG4mIzQzO1x0XHRcdHBhZ2V0YWJsZV9mcmVlKHB0ZGVzYyk7XG4mIzQzO1x0XHR9XG4gXHR9XG4gfVxuIFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbW1hcF9sb2NrLmggYi9pbmNsdWRlL2xpbnV4L21tYXBfbG9jay5oXG5pbmRleCAwNGI4ZjYxZWNlNWQ4ZS4uNmI1YzIzOTBjYzMwMWYgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L21tYXBfbG9jay5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L21tYXBfbG9jay5oXG5AQCAtNjIxLDYgJiM0Mzs2MjEsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgbW1hcF9yZWFkX3VubG9jayhzdHJ1Y3QgbW1fc3RydWN0ICptbSlcbiBcbiBERUZJTkVfR1VBUkQobW1hcF9yZWFkX2xvY2ssIHN0cnVjdCBtbV9zdHJ1Y3QgKixcbiBcdCAgICAgbW1hcF9yZWFkX2xvY2soX1QpLCBtbWFwX3JlYWRfdW5sb2NrKF9UKSlcbiYjNDM7REVGSU5FX0dVQVJEX0NPTkQobW1hcF9yZWFkX2xvY2ssIF90cnksIG1tYXBfcmVhZF90cnlsb2NrKF9UKSlcbiBcbiBzdGF0aWMgaW5saW5lIHZvaWQgbW1hcF9yZWFkX3VubG9ja19ub25fb3duZXIoc3RydWN0IG1tX3N0cnVjdCAqbW0pXG4ge1xuZGlmZiAtLWdpdCBhL21tL3BhZ2V3YWxrLmMgYi9tbS9wYWdld2Fsay5jXG5pbmRleCAzYWUyNTg2ZmY0NWI0NC4uNWQ4N2M2MzJhMjU1MDcgMTAwNjQ0XG4tLS0gYS9tbS9wYWdld2Fsay5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9wYWdld2Fsay5jXG5AQCAtNjc4LDYgJiM0Mzs2NzgsOCBAQCBpbnQgd2Fsa19rZXJuZWxfcGFnZV90YWJsZV9yYW5nZV9sb2NrbGVzcyh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZFxuICAqIHdpbGwgYWxzbyBub3QgbG9jayB0aGUgUFRFcyBmb3IgdGhlIHB0ZV9lbnRyeSgpIGNhbGxiYWNrLlxuICAqXG4gICogVGhpcyBpcyBmb3IgZGVidWdnaW5nIHB1cnBvc2VzIE9OTFkuXG4mIzQzOyAqXG4mIzQzOyAqIFRoZSBtbWFwIHdyaXRlIGxvY2sgbXVzdCBiZSBoZWxkLlxuICAqL1xuIGludCB3YWxrX3BhZ2VfcmFuZ2VfZGVidWcoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgc3RhcnQsXG4gXHRcdFx0ICB1bnNpZ25lZCBsb25nIGVuZCwgY29uc3Qgc3RydWN0IG1tX3dhbGtfb3BzICpvcHMsXG5AQCAtNjkxLDI0ICYjNDM7NjkzLDI4IEBAIGludCB3YWxrX3BhZ2VfcmFuZ2VfZGVidWcoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgc3RhcnQsXG4gXHRcdC5ub192bWFcdFx0PSB0cnVlXG4gXHR9O1xuIFxuLVx0LyogRm9yIGNvbnZlbmllbmNlLCB3ZSBhbGxvdyB0cmF2ZXJzYWwgb2Yga2VybmVsIG1hcHBpbmdzLiAqL1xuLVx0aWYgKG1tID09IFx1MDAyNmluaXRfbW0pXG4tXHRcdHJldHVybiB3YWxrX2tlcm5lbF9wYWdlX3RhYmxlX3JhbmdlKHN0YXJ0LCBlbmQsIG9wcyxcbi1cdFx0XHRcdFx0XHQgICAgcGdkLCBwcml2YXRlKTtcbi1cdGlmIChzdGFydCBcdTAwM2U9IGVuZCB8fCAhd2Fsay5tbSlcbi1cdFx0cmV0dXJuIC1FSU5WQUw7XG4tXHRpZiAoIWNoZWNrX29wc19zYWZlKG9wcykpXG4tXHRcdHJldHVybiAtRUlOVkFMO1xuLVxuIFx0Lypcbi1cdCAqIFRoZSBtbWFwIGxvY2sgcHJvdGVjdHMgdGhlIHBhZ2Ugd2Fsa2VyIGZyb20gY2hhbmdlcyB0byB0aGUgcGFnZVxuLVx0ICogdGFibGVzIGR1cmluZyB0aGUgd2Fsay4gIEhvd2V2ZXIgYSByZWFkIGxvY2sgaXMgaW5zdWZmaWNpZW50IHRvXG4tXHQgKiBwcm90ZWN0IHRob3NlIGFyZWFzIHdoaWNoIGRvbiYjMzk7dCBoYXZlIGEgVk1BIGFzIG11bm1hcCgpIGRldGFjaGVzXG4tXHQgKiB0aGUgVk1BcyBiZWZvcmUgZG93bmdyYWRpbmcgdG8gYSByZWFkIGxvY2sgYW5kIGFjdHVhbGx5IHRlYXJpbmdcbi1cdCAqIGRvd24gUFRFcy9wYWdlIHRhYmxlcy4gSW4gd2hpY2ggY2FzZSwgdGhlIG1tYXAgd3JpdGUgbG9jayBzaG91bGRcbi1cdCAqIGJlIGhlbGQuXG4mIzQzO1x0ICogV2hlbiB3YWxraW5nIHVzZXJsYW5kIHBhZ2UgdGFibGVzLCBhbiBtbWFwIHdyaXRlIGxvY2sgbXVzdCBiZSBoZWxkIHRvXG4mIzQzO1x0ICogYWNjb3VudCBmb3IgbXVubWFwKCkgZG93bmdyYWRpbmcgdG8gYW4gbW1hcCByZWFkIGxvY2sgd2hlbiB0ZWFyaW5nXG4mIzQzO1x0ICogZG93biBwYWdlIHRhYmxlcy5cbiYjNDM7XHQgKlxuJiM0MztcdCAqIFdoZW4gd2Fsa2luZyBrZXJuZWwgcGFnZSB0YWJsZXMsIGFuIG1tYXAgd3JpdGUgbG9jayBtdXN0IGFsc28gYmUgaGVsZFxuJiM0MztcdCAqIHRvIGFjY291bnQgZm9yIHBhZ2UgdGFibGUgZnJlZWluZyBvbiB2bWFwIGh1Z2UgcGFnZSBtYXBwaW5nLlxuIFx0ICovXG4gXHRtbWFwX2Fzc2VydF93cml0ZV9sb2NrZWQobW0pO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogeDg2LCBhcm02NCBwdGR1bXAgYWxsb3cgd2Fsa3Mgb2YgZWZpIG1tJiMzOTtzIGFuZCB4ODYgcHRkdW1wIGFsbG93cyB3YWxrc1xuJiM0MztcdCAqIG9mIGFyYml0cmFyeSBtbSYjMzk7cy5cbiYjNDM7XHQgKlxuJiM0MztcdCAqIEhvd2V2ZXIsIHRoZXkgYm90aCBtdXN0IGFsc28gaG9sZCB0aGUgaW5pdF9tbSBsb2NrIHRvIGFjY291bnQgZm9yXG4mIzQzO1x0ICogY29uY3VycmVudCBrZXJuZWwgcGFnZSB0YWJsZSBmcmVlaW5nLlxuJiM0MztcdCAqL1xuJiM0MztcdG1tYXBfYXNzZXJ0X3dyaXRlX2xvY2tlZChcdTAwMjZpbml0X21tKTtcbiYjNDM7XG4mIzQzO1x0aWYgKHN0YXJ0IFx1MDAzZT0gZW5kKVxuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1x0aWYgKCFjaGVja19vcHNfc2FmZShvcHMpKVxuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4gXHRyZXR1cm4gd2Fsa19wZ2RfcmFuZ2Uoc3RhcnQsIGVuZCwgXHUwMDI2d2Fsayk7XG4gfVxuZGlmZiAtLWdpdCBhL21tL3B0ZHVtcC5jIGIvbW0vcHRkdW1wLmNcbmluZGV4IDk3MzAyMDAwMDA5NmNmLi41ODUxMDk2ZTZmNjU2YyAxMDA2NDRcbi0tLSBhL21tL3B0ZHVtcC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9wdGR1bXAuY1xuQEAgLTE3OCwxMSAmIzQzOzE3OCwxOCBAQCB2b2lkIHB0ZHVtcF93YWxrX3BnZChzdHJ1Y3QgcHRkdW1wX3N0YXRlICpzdCwgc3RydWN0IG1tX3N0cnVjdCAqbW0sIHBnZF90ICpwZ2QpXG4gXG4gXHRnZXRfb25saW5lX21lbXMoKTtcbiBcdG1tYXBfd3JpdGVfbG9jayhtbSk7XG4mIzQzO1x0LyogVG8gc3RhYmlsaXNlIGtlcm5lbCBwYWdlIHRhYmxlcyB3ZSBtdXN0IGhvbGQgdGhlIGluaXRfbW0gbG9jayB0b28uICovXG4mIzQzO1x0aWYgKG1tICE9IFx1MDAyNmluaXRfbW0pXG4mIzQzO1x0XHRtbWFwX3dyaXRlX2xvY2tfbmVzdGVkKFx1MDAyNmluaXRfbW0sIFNJTkdMRV9ERVBUSF9ORVNUSU5HKTtcbiYjNDM7XG4gXHR3aGlsZSAocmFuZ2UtXHUwMDNlc3RhcnQgIT0gcmFuZ2UtXHUwMDNlZW5kKSB7XG4gXHRcdHdhbGtfcGFnZV9yYW5nZV9kZWJ1ZyhtbSwgcmFuZ2UtXHUwMDNlc3RhcnQsIHJhbmdlLVx1MDAzZWVuZCxcbiBcdFx0XHRcdCAgICAgIFx1MDAyNnB0ZHVtcF9vcHMsIHBnZCwgc3QpO1xuIFx0XHRyYW5nZSYjNDM7JiM0Mzs7XG4gXHR9XG4mIzQzO1xuJiM0MztcdGlmIChtbSAhPSBcdTAwMjZpbml0X21tKVxuJiM0MztcdFx0bW1hcF93cml0ZV91bmxvY2soXHUwMDI2aW5pdF9tbSk7XG4gXHRtbWFwX3dyaXRlX3VubG9jayhtbSk7XG4gXHRwdXRfb25saW5lX21lbXMoKTtcbiBcbmRpZmYgLS1naXQgYS9tbS92bWFsbG9jLmMgYi9tbS92bWFsbG9jLmNcbmluZGV4IDFhZmNhMzU2OGI5YjY1Li40MDA1NjNhYzZkNWQ3YiAxMDA2NDRcbi0tLSBhL21tL3ZtYWxsb2MuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vdm1hbGxvYy5jXG5AQCAtNDMsNiAmIzQzOzQzLDcgQEBcbiAjaW5jbHVkZSBcdTAwM2Nhc20vdGxiZmx1c2guaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2FzbS9zaG1wYXJhbS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcGFnZV9vd25lci5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2NsZWFudXAuaFx1MDAzZVxuIFxuICNkZWZpbmUgQ1JFQVRFX1RSQUNFX1BPSU5UU1xuICNpbmNsdWRlIFx1MDAzY3RyYWNlL2V2ZW50cy92bWFsbG9jLmhcdTAwM2VcbkBAIC0xNTgsMTAgJiM0MzsxNTksMjIgQEAgc3RhdGljIGludCB2bWFwX3RyeV9odWdlX3BtZChwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLFxuIFx0aWYgKCFJU19BTElHTkVEKHBoeXNfYWRkciwgUE1EX1NJWkUpKVxuIFx0XHRyZXR1cm4gMDtcbiBcbi1cdGlmIChwbWRfcHJlc2VudCgqcG1kKSBcdTAwMjZcdTAwMjYgIXBtZF9mcmVlX3B0ZV9wYWdlKHBtZCwgYWRkcikpXG4tXHRcdHJldHVybiAwO1xuJiM0MztcdGlmICghcG1kX3ByZXNlbnQoKnBtZCkpXG4mIzQzO1x0XHRyZXR1cm4gcG1kX3NldF9odWdlKHBtZCwgcGh5c19hZGRyLCBwcm90KTtcbiBcbi1cdHJldHVybiBwbWRfc2V0X2h1Z2UocG1kLCBwaHlzX2FkZHIsIHByb3QpO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogS2VybmVsIHBhZ2UgdGFibGUgd2Fsa2VycyBlaXRoZXIgd2FsayByYW5nZXMgdGhleSBvd24gZXhjbHVzaXZlbHkgb3JcbiYjNDM7XHQgKiBob2xkIHRoZSBtbWFwIHdyaXRlIGxvY2sgb24gaW5pdF9tbSAocHRkdW1wIGJlaW5nIHRoZSBtb3RpdmF0aW5nXG4mIzQzO1x0ICogY2FzZSkuXG4mIzQzO1x0ICpcbiYjNDM7XHQgKiBUaGVyZWZvcmUsIGFjcXVpcmUgdGhlIG1tYXAgcmVhZCBsb2NrIHRvIHByZXZlbnQgdXNlLWFmdGVyLWZyZWUgd2hlblxuJiM0MztcdCAqIGZyZWVpbmcgcGFnZSB0YWJsZXMuXG4mIzQzO1x0ICovXG4mIzQzO1x0c2NvcGVkX2NvbmRfZ3VhcmQobW1hcF9yZWFkX2xvY2tfdHJ5LCByZXR1cm4gMCwgXHUwMDI2aW5pdF9tbSkge1xuJiM0MztcdFx0aWYgKCFwbWRfZnJlZV9wdGVfcGFnZShwbWQsIGFkZHIpKVxuJiM0MztcdFx0XHRyZXR1cm4gMDtcbiYjNDM7XHRcdHJldHVybiBwbWRfc2V0X2h1Z2UocG1kLCBwaHlzX2FkZHIsIHByb3QpO1xuJiM0MztcdH1cbiB9XG4gXG4gc3RhdGljIGludCB2bWFwX3BtZF9yYW5nZShwdWRfdCAqcHVkLCB1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLFxuQEAgLTIxMCwxMCAmIzQzOzIyMywxNSBAQCBzdGF0aWMgaW50IHZtYXBfdHJ5X2h1Z2VfcHVkKHB1ZF90ICpwdWQsIHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsXG4gXHRpZiAoIUlTX0FMSUdORUQocGh5c19hZGRyLCBQVURfU0laRSkpXG4gXHRcdHJldHVybiAwO1xuIFxuLVx0aWYgKHB1ZF9wcmVzZW50KCpwdWQpIFx1MDAyNlx1MDAyNiAhcHVkX2ZyZWVfcG1kX3BhZ2UocHVkLCBhZGRyKSlcbi1cdFx0cmV0dXJuIDA7XG4mIzQzO1x0aWYgKCFwdWRfcHJlc2VudCgqcHVkKSlcbiYjNDM7XHRcdHJldHVybiBwdWRfc2V0X2h1Z2UocHVkLCBwaHlzX2FkZHIsIHByb3QpO1xuIFxuLVx0cmV0dXJuIHB1ZF9zZXRfaHVnZShwdWQsIHBoeXNfYWRkciwgcHJvdCk7XG4mIzQzO1x0LyogU2VlIGNvbW1lbnQgaW4gdm1hcF90cnlfaHVnZV9wbWQoKS4gKi9cbiYjNDM7XHRzY29wZWRfY29uZF9ndWFyZChtbWFwX3JlYWRfbG9ja190cnksIHJldHVybiAwLCBcdTAwMjZpbml0X21tKSB7XG4mIzQzO1x0XHRpZiAoIXB1ZF9mcmVlX3BtZF9wYWdlKHB1ZCwgYWRkcikpXG4mIzQzO1x0XHRcdHJldHVybiAwO1xuJiM0MztcdFx0cmV0dXJuIHB1ZF9zZXRfaHVnZShwdWQsIHBoeXNfYWRkciwgcHJvdCk7XG4mIzQzO1x0fVxuIH1cbiBcbiBzdGF0aWMgaW50IHZtYXBfcHVkX3JhbmdlKHA0ZF90ICpwNGQsIHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsXG5AQCAtMjYyLDEwICYjNDM7MjgwLDE1IEBAIHN0YXRpYyBpbnQgdm1hcF90cnlfaHVnZV9wNGQocDRkX3QgKnA0ZCwgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCxcbiBcdGlmICghSVNfQUxJR05FRChwaHlzX2FkZHIsIFA0RF9TSVpFKSlcbiBcdFx0cmV0dXJuIDA7XG4gXG4tXHRpZiAocDRkX3ByZXNlbnQoKnA0ZCkgXHUwMDI2XHUwMDI2ICFwNGRfZnJlZV9wdWRfcGFnZShwNGQsIGFkZHIpKVxuLVx0XHRyZXR1cm4gMDtcbiYjNDM7XHRpZiAoIXA0ZF9wcmVzZW50KCpwNGQpKVxuJiM0MztcdFx0cmV0dXJuIHA0ZF9zZXRfaHVnZShwNGQsIHBoeXNfYWRkciwgcHJvdCk7XG4gXG4tXHRyZXR1cm4gcDRkX3NldF9odWdlKHA0ZCwgcGh5c19hZGRyLCBwcm90KTtcbiYjNDM7XHQvKiBTZWUgY29tbWVudCBpbiB2bWFwX3RyeV9odWdlX3BtZCgpLiAqL1xuJiM0MztcdHNjb3BlZF9jb25kX2d1YXJkKG1tYXBfcmVhZF9sb2NrX3RyeSwgcmV0dXJuIDAsIFx1MDAyNmluaXRfbW0pIHtcbiYjNDM7XHRcdGlmICghcDRkX2ZyZWVfcHVkX3BhZ2UocDRkLCBhZGRyKSlcbiYjNDM7XHRcdFx0cmV0dXJuIDA7XG4mIzQzO1x0XHRyZXR1cm4gcDRkX3NldF9odWdlKHA0ZCwgcGh5c19hZGRyLCBwcm90KTtcbiYjNDM7XHR9XG4gfVxuIFxuIHN0YXRpYyBpbnQgdm1hcF9wNGRfcmFuZ2UocGdkX3QgKnBnZCwgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMiAxMzoxMjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtQVERVTVBfREVCVUdGUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3ZtYXBfdHJ5X2h1Z2VfcG1kJiMzNDssCiAgICAmIzM0O3ZtYXBfdHJ5X2h1Z2VfcHVkJiMzNDssCiAgICAmIzM0O3ZtYXBfdHJ5X2h1Z2VfcDRkJiMzNDssCiAgICAmIzM0O2NwYV9jb2xsYXBzZV9sYXJnZV9wYWdlcyYjMzQ7LAogICAgJiMzNDtwdGR1bXBfd2Fsa19wZ2QmIzM0OywKICAgICYjMzQ7d2Fsa19wYWdlX3JhbmdlX2RlYnVnJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUga2VybmVsIGxvZ2ljIGZvciBwYWdlIHRhYmxlIGR1bXBpbmcgYW5kIHZtYWxsb2MgaHVnZSBwYWdlIG1hcHBpbmdzLCBpbnRyb2R1Y2luZyBsb2NraW5nIG9uIGBpbml0X21tYCB0byBwcmV2ZW50IHVzZS1hZnRlci1mcmVlIGR1cmluZyBjb25jdXJyZW50IHBhZ2UgdGFibGUgbW9kaWZpY2F0aW9ucy4gVGhpcyBpcyByZWFjaGFibGUgdmlhIGRlYnVnZnMgYW5kIHZtYWxsb2MgY2FsbHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0CiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSwKICAgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGU1YmY4ZGQ5ODEzMmQ3ZTYxMWYzNjZjNjE0ZGZlNTk3ODhkMDVlM2MKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgU3VuIEp1bCAxMiAxMzoxMTo1OSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vcHRkdW1wLmggYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3B0ZHVtcC5oCmluZGV4IDViMzc0YTZhYjM0YTRlLi41MGExOTVlZGE4ZWQyMiAxMDA2NDQKLS0tIGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9wdGR1bXAuaAomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3B0ZHVtcC5oCkBAIC03LDggJiM0Mzs3LDYgQEAKIAogI2luY2x1ZGUgJmx0O2xpbnV4L3B0ZHVtcC5oJmd0OwogCi1ERUNMQVJFX1NUQVRJQ19LRVlfRkFMU0UoYXJtNjRfcHRkdW1wX2xvY2tfa2V5KTsKLQogI2lmZGVmIENPTkZJR19QVERVTVAKIAogI2luY2x1ZGUgJmx0O2xpbnV4L21tX3R5cGVzLmgmZ3Q7CmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L21tL21tdS5jIGIvYXJjaC9hcm02NC9tbS9tbXUuYwppbmRleCBhMjVkOGJlYWNjODMxMC4uYmQ1MmZjYTZlODcyMGIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtNjQvbW0vbW11LmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9hcm02NC9tbS9tbXUuYwpAQCAtNDksOCAmIzQzOzQ5LDYgQEAKICNkZWZpbmUgTk9fQ09OVF9NQVBQSU5HUwlCSVQoMSkKICNkZWZpbmUgTk9fRVhFQ19NQVBQSU5HUwlCSVQoMikJLyogYXNzdW1lcyBGRUFUX0hQRFMgaXMgbm90IHVzZWQgKi8KIAotREVGSU5FX1NUQVRJQ19LRVlfRkFMU0UoYXJtNjRfcHRkdW1wX2xvY2tfa2V5KTsKLQogdTY0IGtpbWFnZV92b2Zmc2V0IF9fcm9fYWZ0ZXJfaW5pdDsKIEVYUE9SVF9TWU1CT0woa2ltYWdlX3ZvZmZzZXQpOwogCkBAIC0xODY0LDggJiM0MzsxODYyLDcgQEAgaW50IHBtZF9jbGVhcl9odWdlKHBtZF90ICpwbWRwKQogCXJldHVybiAxOwogfQogCi1zdGF0aWMgaW50IF9fcG1kX2ZyZWVfcHRlX3BhZ2UocG1kX3QgKnBtZHAsIHVuc2lnbmVkIGxvbmcgYWRkciwKLQkJCSAgICAgICBib29sIGFjcXVpcmVfbW1hcF9sb2NrKQomIzQzO2ludCBwbWRfZnJlZV9wdGVfcGFnZShwbWRfdCAqcG1kcCwgdW5zaWduZWQgbG9uZyBhZGRyKQogewogCXB0ZV90ICp0YWJsZTsKIAlwbWRfdCBwbWQ7CkBAIC0xODc3LDI1ICYjNDM7MTg3NCwxMyBAQCBzdGF0aWMgaW50IF9fcG1kX2ZyZWVfcHRlX3BhZ2UocG1kX3QgKnBtZHAsIHVuc2lnbmVkIGxvbmcgYWRkciwKIAkJcmV0dXJuIDE7CiAJfQogCi0JLyogU2VlIGNvbW1lbnQgaW4gcHVkX2ZyZWVfcG1kX3BhZ2UgZm9yIHN0YXRpYyBrZXkgbG9naWMgKi8KIAl0YWJsZSA9IHB0ZV9vZmZzZXRfa2VybmVsKHBtZHAsIGFkZHIpOwogCXBtZF9jbGVhcihwbWRwKTsKIAlfX2ZsdXNoX3RsYl9rZXJuZWxfcGd0YWJsZShhZGRyKTsKLQlpZiAoc3RhdGljX2JyYW5jaF91bmxpa2VseSgmYW1wO2FybTY0X3B0ZHVtcF9sb2NrX2tleSkgJmFtcDsmYW1wOyBhY3F1aXJlX21tYXBfbG9jaykgewotCQltbWFwX3JlYWRfbG9jaygmYW1wO2luaXRfbW0pOwotCQltbWFwX3JlYWRfdW5sb2NrKCZhbXA7aW5pdF9tbSk7Ci0JfQotCiAJcHRlX2ZyZWVfa2VybmVsKE5VTEwsIHRhYmxlKTsKIAlyZXR1cm4gMTsKIH0KIAotaW50IHBtZF9mcmVlX3B0ZV9wYWdlKHBtZF90ICpwbWRwLCB1bnNpZ25lZCBsb25nIGFkZHIpCi17Ci0JLyogSWYgcHRkdW1wIGlzIHdhbGtpbmcgdGhlIHBhZ2V0YWJsZXMsIGFjcXVpcmUgaW5pdF9tbS5tbWFwX2xvY2sgKi8KLQlyZXR1cm4gX19wbWRfZnJlZV9wdGVfcGFnZShwbWRwLCBhZGRyLCAvKiBhY3F1aXJlX21tYXBfbG9jayA9ICovIHRydWUpOwotfQotCiBpbnQgcHVkX2ZyZWVfcG1kX3BhZ2UocHVkX3QgKnB1ZHAsIHVuc2lnbmVkIGxvbmcgYWRkcikKIHsKIAlwbWRfdCAqdGFibGU7CkBAIC0xOTExLDM2ICYjNDM7MTg5NiwxNiBAQCBpbnQgcHVkX2ZyZWVfcG1kX3BhZ2UocHVkX3QgKnB1ZHAsIHVuc2lnbmVkIGxvbmcgYWRkcikKIAl9CiAKIAl0YWJsZSA9IHBtZF9vZmZzZXQocHVkcCwgYWRkcik7Ci0KLQkvKgotCSAqIE91ciBvYmplY3RpdmUgaXMgdG8gcHJldmVudCBwdGR1bXAgZnJvbSByZWFkaW5nIGEgUE1EIHRhYmxlIHdoaWNoIGhhcwotCSAqIGJlZW4gZnJlZWQuIEluIHRoaXMgcmFjZSwgaWYgcHVkX2ZyZWVfcG1kX3BhZ2Ugb2JzZXJ2ZXMgdGhlIGtleSBvbgotCSAqICh3aGljaCBnb3QgZmxpcHBlZCBieSBwdGR1bXApIHRoZW4gdGhlIG1tYXAgbG9jayBzZXF1ZW5jZSBoZXJlIHdpbGwsCi0JICogYXMgYSByZXN1bHQgb2YgdGhlIG1tYXAgd3JpdGUgbG9jay91bmxvY2sgc2VxdWVuY2UgaW4gcHRkdW1wLCBnaXZlCi0JICogdXMgdGhlIGNvcnJlY3Qgc3luY2hyb25pemF0aW9uLiBJZiBub3QsIHRoaXMgbWVhbnMgdGhhdCBwdGR1bXAgaGFzCi0JICogeWV0IG5vdCBzdGFydGVkIHdhbGtpbmcgdGhlIHBhZ2V0YWJsZXMgLSB0aGUgc2VxdWVuY2Ugb2YgYmFycmllcnMKLQkgKiBpc3N1ZWQgYnkgX19mbHVzaF90bGJfa2VybmVsX3BndGFibGUoKSBndWFyYW50ZWVzIHRoYXQgcHRkdW1wIHdpbGwKLQkgKiBvYnNlcnZlIGFuIGVtcHR5IFBVRC4KLQkgKi8KLQlwdWRfY2xlYXIocHVkcCk7Ci0JX19mbHVzaF90bGJfa2VybmVsX3BndGFibGUoYWRkcik7Ci0JaWYgKHN0YXRpY19icmFuY2hfdW5saWtlbHkoJmFtcDthcm02NF9wdGR1bXBfbG9ja19rZXkpKSB7Ci0JCW1tYXBfcmVhZF9sb2NrKCZhbXA7aW5pdF9tbSk7Ci0JCW1tYXBfcmVhZF91bmxvY2soJmFtcDtpbml0X21tKTsKLQl9Ci0KIAlwbWRwID0gdGFibGU7CiAJbmV4dCA9IGFkZHI7CiAJZW5kID0gYWRkciAmIzQzOyBQVURfU0laRTsKIAlkbyB7CiAJCWlmIChwbWRfcHJlc2VudChwbWRwX2dldChwbWRwKSkpCi0JCQkvKgotCQkJICogUE1EIGhhcyBiZWVuIGlzb2xhdGVkLCBzbyBwdGR1bXAgd29uJiMzOTt0IHNlZSBpdC4gTm8KLQkJCSAqIG5lZWQgdG8gYWNxdWlyZSBpbml0X21tLm1tYXBfbG9jay4KLQkJCSAqLwotCQkJX19wbWRfZnJlZV9wdGVfcGFnZShwbWRwLCBuZXh0LCAvKiBhY3F1aXJlX21tYXBfbG9jayA9ICovIGZhbHNlKTsKJiM0MzsJCQlwbWRfZnJlZV9wdGVfcGFnZShwbWRwLCBuZXh0KTsKIAl9IHdoaWxlIChwbWRwJiM0MzsmIzQzOywgbmV4dCAmIzQzOz0gUE1EX1NJWkUsIG5leHQgIT0gZW5kKTsKIAomIzQzOwlwdWRfY2xlYXIocHVkcCk7CiYjNDM7CV9fZmx1c2hfdGxiX2tlcm5lbF9wZ3RhYmxlKGFkZHIpOwogCXBtZF9mcmVlKE5VTEwsIHRhYmxlKTsKIAlyZXR1cm4gMTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvbW0vcHRkdW1wLmMgYi9hcmNoL2FybTY0L21tL3B0ZHVtcC5jCmluZGV4IDFjMjAxNDQ3MDBkN2Q3Li41YTc2YzU5YjVhZGE1NSAxMDA2NDQKLS0tIGEvYXJjaC9hcm02NC9tbS9wdGR1bXAuYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL2FybTY0L21tL3B0ZHVtcC5jCkBAIC0yODMsMTMgJiM0MzsyODMsNiBAQCB2b2lkIG5vdGVfcGFnZV9mbHVzaChzdHJ1Y3QgcHRkdW1wX3N0YXRlICpwdF9zdCkKIAlub3RlX3BhZ2UocHRfc3QsIDAsIC0xLCBwdGVfdmFsKHB0ZV96ZXJvKSk7CiB9CiAKLXN0YXRpYyB2b2lkIGFybTY0X3B0ZHVtcF93YWxrX3BnZChzdHJ1Y3QgcHRkdW1wX3N0YXRlICpzdCwgc3RydWN0IG1tX3N0cnVjdCAqbW0pCi17Ci0Jc3RhdGljX2JyYW5jaF9pbmMoJmFtcDthcm02NF9wdGR1bXBfbG9ja19rZXkpOwotCXB0ZHVtcF93YWxrX3BnZChzdCwgbW0sIE5VTEwpOwotCXN0YXRpY19icmFuY2hfZGVjKCZhbXA7YXJtNjRfcHRkdW1wX2xvY2tfa2V5KTsKLX0KLQogdm9pZCBwdGR1bXBfd2FsayhzdHJ1Y3Qgc2VxX2ZpbGUgKnMsIHN0cnVjdCBwdGR1bXBfaW5mbyAqaW5mbykKIHsKIAl1bnNpZ25lZCBsb25nIGVuZCA9IH4wVUw7CkBAIC0zMTgsNyAmIzQzOzMxMSw3IEBAIHZvaWQgcHRkdW1wX3dhbGsoc3RydWN0IHNlcV9maWxlICpzLCBzdHJ1Y3QgcHRkdW1wX2luZm8gKmluZm8pCiAJCX0KIAl9OwogCi0JYXJtNjRfcHRkdW1wX3dhbGtfcGdkKCZhbXA7c3QucHRkdW1wLCBpbmZvLSZndDttbSk7CiYjNDM7CXB0ZHVtcF93YWxrX3BnZCgmYW1wO3N0LnB0ZHVtcCwgaW5mby0mZ3Q7bW0sIE5VTEwpOwogfQogCiBzdGF0aWMgdm9pZCBfX2luaXQgcHRkdW1wX2luaXRpYWxpemUodm9pZCkKQEAgLTM2MCw3ICYjNDM7MzUzLDcgQEAgYm9vbCBwdGR1bXBfY2hlY2tfd3godm9pZCkKIAkJfQogCX07CiAKLQlhcm02NF9wdGR1bXBfd2Fsa19wZ2QoJmFtcDtzdC5wdGR1bXAsICZhbXA7aW5pdF9tbSk7CiYjNDM7CXB0ZHVtcF93YWxrX3BnZCgmYW1wO3N0LnB0ZHVtcCwgJmFtcDtpbml0X21tLCBOVUxMKTsKIAogCWlmIChzdC53eF9wYWdlcyB8fCBzdC51eG5fcGFnZXMpIHsKIAkJcHJfd2FybigmIzM0O0NoZWNrZWQgVyYjNDM7WCBtYXBwaW5nczogRkFJTEVELCAlbHUgVyYjNDM7WCBwYWdlcyBmb3VuZCwgJWx1IG5vbi1VWE4gcGFnZXMgZm91bmRcbiYjMzQ7LApkaWZmIC0tZ2l0IGEvYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYyBiL2FyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMKaW5kZXggZDAyM2E0MGExZTAzNDUuLjRjNGI4MjQ0NTAyZmNlIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMKQEAgLTIyLDYgJiM0MzsyMiw3IEBACiAjaW5jbHVkZSAmbHQ7bGludXgvY2NfcGxhdGZvcm0uaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9zZXRfbWVtb3J5LmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvbWVtcmVnaW9uLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2NsZWFudXAuaCZndDsKIAogI2luY2x1ZGUgJmx0O2FzbS9lODIwL2FwaS5oJmd0OwogI2luY2x1ZGUgJmx0O2FzbS9wcm9jZXNzb3IuaCZndDsKQEAgLTQzNiw5ICYjNDM7NDM3LDE2IEBAIHN0YXRpYyB2b2lkIGNwYV9jb2xsYXBzZV9sYXJnZV9wYWdlcyhzdHJ1Y3QgY3BhX2RhdGEgKmNwYSkKIAogCWZsdXNoX3RsYl9hbGwoKTsKIAotCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShwdGRlc2MsIHRtcCwgJmFtcDtwZ3RhYmxlcywgcHRfbGlzdCkgewotCQlsaXN0X2RlbCgmYW1wO3B0ZGVzYy0mZ3Q7cHRfbGlzdCk7Ci0JCXBhZ2V0YWJsZV9mcmVlKHB0ZGVzYyk7CiYjNDM7CS8qCiYjNDM7CSAqIHB0ZHVtcCBtaWdodCByZWFkIHRoZXNlIHBhZ2UgdGFibGVzLCBzbyBhdm9pZCBhIHVzZS1hZnRlci1mcmVlIGJ5CiYjNDM7CSAqIGFjcXVpcmluZyB0aGUgbW1hcCByZWFkIGxvY2sgb24gaW5pdF9tbSAocHRkdW1wIGFjcXVpcmVzIHRoZSBtbWFwCiYjNDM7CSAqIHdyaXRlIGxvY2spLgomIzQzOwkgKi8KJiM0MzsJc2NvcGVkX2d1YXJkKG1tYXBfcmVhZF9sb2NrLCAmYW1wO2luaXRfbW0pIHsKJiM0MzsJCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShwdGRlc2MsIHRtcCwgJmFtcDtwZ3RhYmxlcywgcHRfbGlzdCkgewomIzQzOwkJCWxpc3RfZGVsKCZhbXA7cHRkZXNjLSZndDtwdF9saXN0KTsKJiM0MzsJCQlwYWdldGFibGVfZnJlZShwdGRlc2MpOwomIzQzOwkJfQogCX0KIH0KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tbWFwX2xvY2suaCBiL2luY2x1ZGUvbGludXgvbW1hcF9sb2NrLmgKaW5kZXggMDRiOGY2MWVjZTVkOGUuLjZiNWMyMzkwY2MzMDFmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21tYXBfbG9jay5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvbW1hcF9sb2NrLmgKQEAgLTYyMSw2ICYjNDM7NjIxLDcgQEAgc3RhdGljIGlubGluZSB2b2lkIG1tYXBfcmVhZF91bmxvY2soc3RydWN0IG1tX3N0cnVjdCAqbW0pCiAKIERFRklORV9HVUFSRChtbWFwX3JlYWRfbG9jaywgc3RydWN0IG1tX3N0cnVjdCAqLAogCSAgICAgbW1hcF9yZWFkX2xvY2soX1QpLCBtbWFwX3JlYWRfdW5sb2NrKF9UKSkKJiM0MztERUZJTkVfR1VBUkRfQ09ORChtbWFwX3JlYWRfbG9jaywgX3RyeSwgbW1hcF9yZWFkX3RyeWxvY2soX1QpKQogCiBzdGF0aWMgaW5saW5lIHZvaWQgbW1hcF9yZWFkX3VubG9ja19ub25fb3duZXIoc3RydWN0IG1tX3N0cnVjdCAqbW0pCiB7CmRpZmYgLS1naXQgYS9tbS9wYWdld2Fsay5jIGIvbW0vcGFnZXdhbGsuYwppbmRleCAzYWUyNTg2ZmY0NWI0NC4uNWQ4N2M2MzJhMjU1MDcgMTAwNjQ0Ci0tLSBhL21tL3BhZ2V3YWxrLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vcGFnZXdhbGsuYwpAQCAtNjc4LDYgJiM0Mzs2NzgsOCBAQCBpbnQgd2Fsa19rZXJuZWxfcGFnZV90YWJsZV9yYW5nZV9sb2NrbGVzcyh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZAogICogd2lsbCBhbHNvIG5vdCBsb2NrIHRoZSBQVEVzIGZvciB0aGUgcHRlX2VudHJ5KCkgY2FsbGJhY2suCiAgKgogICogVGhpcyBpcyBmb3IgZGVidWdnaW5nIHB1cnBvc2VzIE9OTFkuCiYjNDM7ICoKJiM0MzsgKiBUaGUgbW1hcCB3cml0ZSBsb2NrIG11c3QgYmUgaGVsZC4KICAqLwogaW50IHdhbGtfcGFnZV9yYW5nZV9kZWJ1ZyhzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBzdGFydCwKIAkJCSAgdW5zaWduZWQgbG9uZyBlbmQsIGNvbnN0IHN0cnVjdCBtbV93YWxrX29wcyAqb3BzLApAQCAtNjkxLDI0ICYjNDM7NjkzLDI4IEBAIGludCB3YWxrX3BhZ2VfcmFuZ2VfZGVidWcoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgc3RhcnQsCiAJCS5ub192bWEJCT0gdHJ1ZQogCX07CiAKLQkvKiBGb3IgY29udmVuaWVuY2UsIHdlIGFsbG93IHRyYXZlcnNhbCBvZiBrZXJuZWwgbWFwcGluZ3MuICovCi0JaWYgKG1tID09ICZhbXA7aW5pdF9tbSkKLQkJcmV0dXJuIHdhbGtfa2VybmVsX3BhZ2VfdGFibGVfcmFuZ2Uoc3RhcnQsIGVuZCwgb3BzLAotCQkJCQkJICAgIHBnZCwgcHJpdmF0ZSk7Ci0JaWYgKHN0YXJ0ICZndDs9IGVuZCB8fCAhd2Fsay5tbSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JaWYgKCFjaGVja19vcHNfc2FmZShvcHMpKQotCQlyZXR1cm4gLUVJTlZBTDsKLQogCS8qCi0JICogVGhlIG1tYXAgbG9jayBwcm90ZWN0cyB0aGUgcGFnZSB3YWxrZXIgZnJvbSBjaGFuZ2VzIHRvIHRoZSBwYWdlCi0JICogdGFibGVzIGR1cmluZyB0aGUgd2Fsay4gIEhvd2V2ZXIgYSByZWFkIGxvY2sgaXMgaW5zdWZmaWNpZW50IHRvCi0JICogcHJvdGVjdCB0aG9zZSBhcmVhcyB3aGljaCBkb24mIzM5O3QgaGF2ZSBhIFZNQSBhcyBtdW5tYXAoKSBkZXRhY2hlcwotCSAqIHRoZSBWTUFzIGJlZm9yZSBkb3duZ3JhZGluZyB0byBhIHJlYWQgbG9jayBhbmQgYWN0dWFsbHkgdGVhcmluZwotCSAqIGRvd24gUFRFcy9wYWdlIHRhYmxlcy4gSW4gd2hpY2ggY2FzZSwgdGhlIG1tYXAgd3JpdGUgbG9jayBzaG91bGQKLQkgKiBiZSBoZWxkLgomIzQzOwkgKiBXaGVuIHdhbGtpbmcgdXNlcmxhbmQgcGFnZSB0YWJsZXMsIGFuIG1tYXAgd3JpdGUgbG9jayBtdXN0IGJlIGhlbGQgdG8KJiM0MzsJICogYWNjb3VudCBmb3IgbXVubWFwKCkgZG93bmdyYWRpbmcgdG8gYW4gbW1hcCByZWFkIGxvY2sgd2hlbiB0ZWFyaW5nCiYjNDM7CSAqIGRvd24gcGFnZSB0YWJsZXMuCiYjNDM7CSAqCiYjNDM7CSAqIFdoZW4gd2Fsa2luZyBrZXJuZWwgcGFnZSB0YWJsZXMsIGFuIG1tYXAgd3JpdGUgbG9jayBtdXN0IGFsc28gYmUgaGVsZAomIzQzOwkgKiB0byBhY2NvdW50IGZvciBwYWdlIHRhYmxlIGZyZWVpbmcgb24gdm1hcCBodWdlIHBhZ2UgbWFwcGluZy4KIAkgKi8KIAltbWFwX2Fzc2VydF93cml0ZV9sb2NrZWQobW0pOwomIzQzOwkvKgomIzQzOwkgKiB4ODYsIGFybTY0IHB0ZHVtcCBhbGxvdyB3YWxrcyBvZiBlZmkgbW0mIzM5O3MgYW5kIHg4NiBwdGR1bXAgYWxsb3dzIHdhbGtzCiYjNDM7CSAqIG9mIGFyYml0cmFyeSBtbSYjMzk7cy4KJiM0MzsJICoKJiM0MzsJICogSG93ZXZlciwgdGhleSBib3RoIG11c3QgYWxzbyBob2xkIHRoZSBpbml0X21tIGxvY2sgdG8gYWNjb3VudCBmb3IKJiM0MzsJICogY29uY3VycmVudCBrZXJuZWwgcGFnZSB0YWJsZSBmcmVlaW5nLgomIzQzOwkgKi8KJiM0MzsJbW1hcF9hc3NlcnRfd3JpdGVfbG9ja2VkKCZhbXA7aW5pdF9tbSk7CiYjNDM7CiYjNDM7CWlmIChzdGFydCAmZ3Q7PSBlbmQpCiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJaWYgKCFjaGVja19vcHNfc2FmZShvcHMpKQomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiAKIAlyZXR1cm4gd2Fsa19wZ2RfcmFuZ2Uoc3RhcnQsIGVuZCwgJmFtcDt3YWxrKTsKIH0KZGlmZiAtLWdpdCBhL21tL3B0ZHVtcC5jIGIvbW0vcHRkdW1wLmMKaW5kZXggOTczMDIwMDAwMDk2Y2YuLjU4NTEwOTZlNmY2NTZjIDEwMDY0NAotLS0gYS9tbS9wdGR1bXAuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9wdGR1bXAuYwpAQCAtMTc4LDExICYjNDM7MTc4LDE4IEBAIHZvaWQgcHRkdW1wX3dhbGtfcGdkKHN0cnVjdCBwdGR1bXBfc3RhdGUgKnN0LCBzdHJ1Y3QgbW1fc3RydWN0ICptbSwgcGdkX3QgKnBnZCkKIAogCWdldF9vbmxpbmVfbWVtcygpOwogCW1tYXBfd3JpdGVfbG9jayhtbSk7CiYjNDM7CS8qIFRvIHN0YWJpbGlzZSBrZXJuZWwgcGFnZSB0YWJsZXMgd2UgbXVzdCBob2xkIHRoZSBpbml0X21tIGxvY2sgdG9vLiAqLwomIzQzOwlpZiAobW0gIT0gJmFtcDtpbml0X21tKQomIzQzOwkJbW1hcF93cml0ZV9sb2NrX25lc3RlZCgmYW1wO2luaXRfbW0sIFNJTkdMRV9ERVBUSF9ORVNUSU5HKTsKJiM0MzsKIAl3aGlsZSAocmFuZ2UtJmd0O3N0YXJ0ICE9IHJhbmdlLSZndDtlbmQpIHsKIAkJd2Fsa19wYWdlX3JhbmdlX2RlYnVnKG1tLCByYW5nZS0mZ3Q7c3RhcnQsIHJhbmdlLSZndDtlbmQsCiAJCQkJICAgICAgJmFtcDtwdGR1bXBfb3BzLCBwZ2QsIHN0KTsKIAkJcmFuZ2UmIzQzOyYjNDM7OwogCX0KJiM0MzsKJiM0MzsJaWYgKG1tICE9ICZhbXA7aW5pdF9tbSkKJiM0MzsJCW1tYXBfd3JpdGVfdW5sb2NrKCZhbXA7aW5pdF9tbSk7CiAJbW1hcF93cml0ZV91bmxvY2sobW0pOwogCXB1dF9vbmxpbmVfbWVtcygpOwogCmRpZmYgLS1naXQgYS9tbS92bWFsbG9jLmMgYi9tbS92bWFsbG9jLmMKaW5kZXggMWFmY2EzNTY4YjliNjUuLjQwMDU2M2FjNmQ1ZDdiIDEwMDY0NAotLS0gYS9tbS92bWFsbG9jLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vdm1hbGxvYy5jCkBAIC00Myw2ICYjNDM7NDMsNyBAQAogI2luY2x1ZGUgJmx0O2FzbS90bGJmbHVzaC5oJmd0OwogI2luY2x1ZGUgJmx0O2FzbS9zaG1wYXJhbS5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3BhZ2Vfb3duZXIuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvY2xlYW51cC5oJmd0OwogCiAjZGVmaW5lIENSRUFURV9UUkFDRV9QT0lOVFMKICNpbmNsdWRlICZsdDt0cmFjZS9ldmVudHMvdm1hbGxvYy5oJmd0OwpAQCAtMTU4LDEwICYjNDM7MTU5LDIyIEBAIHN0YXRpYyBpbnQgdm1hcF90cnlfaHVnZV9wbWQocG1kX3QgKnBtZCwgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCwKIAlpZiAoIUlTX0FMSUdORUQocGh5c19hZGRyLCBQTURfU0laRSkpCiAJCXJldHVybiAwOwogCi0JaWYgKHBtZF9wcmVzZW50KCpwbWQpICZhbXA7JmFtcDsgIXBtZF9mcmVlX3B0ZV9wYWdlKHBtZCwgYWRkcikpCi0JCXJldHVybiAwOwomIzQzOwlpZiAoIXBtZF9wcmVzZW50KCpwbWQpKQomIzQzOwkJcmV0dXJuIHBtZF9zZXRfaHVnZShwbWQsIHBoeXNfYWRkciwgcHJvdCk7CiAKLQlyZXR1cm4gcG1kX3NldF9odWdlKHBtZCwgcGh5c19hZGRyLCBwcm90KTsKJiM0MzsJLyoKJiM0MzsJICogS2VybmVsIHBhZ2UgdGFibGUgd2Fsa2VycyBlaXRoZXIgd2FsayByYW5nZXMgdGhleSBvd24gZXhjbHVzaXZlbHkgb3IKJiM0MzsJICogaG9sZCB0aGUgbW1hcCB3cml0ZSBsb2NrIG9uIGluaXRfbW0gKHB0ZHVtcCBiZWluZyB0aGUgbW90aXZhdGluZwomIzQzOwkgKiBjYXNlKS4KJiM0MzsJICoKJiM0MzsJICogVGhlcmVmb3JlLCBhY3F1aXJlIHRoZSBtbWFwIHJlYWQgbG9jayB0byBwcmV2ZW50IHVzZS1hZnRlci1mcmVlIHdoZW4KJiM0MzsJICogZnJlZWluZyBwYWdlIHRhYmxlcy4KJiM0MzsJICovCiYjNDM7CXNjb3BlZF9jb25kX2d1YXJkKG1tYXBfcmVhZF9sb2NrX3RyeSwgcmV0dXJuIDAsICZhbXA7aW5pdF9tbSkgewomIzQzOwkJaWYgKCFwbWRfZnJlZV9wdGVfcGFnZShwbWQsIGFkZHIpKQomIzQzOwkJCXJldHVybiAwOwomIzQzOwkJcmV0dXJuIHBtZF9zZXRfaHVnZShwbWQsIHBoeXNfYWRkciwgcHJvdCk7CiYjNDM7CX0KIH0KIAogc3RhdGljIGludCB2bWFwX3BtZF9yYW5nZShwdWRfdCAqcHVkLCB1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLApAQCAtMjEwLDEwICYjNDM7MjIzLDE1IEBAIHN0YXRpYyBpbnQgdm1hcF90cnlfaHVnZV9wdWQocHVkX3QgKnB1ZCwgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCwKIAlpZiAoIUlTX0FMSUdORUQocGh5c19hZGRyLCBQVURfU0laRSkpCiAJCXJldHVybiAwOwogCi0JaWYgKHB1ZF9wcmVzZW50KCpwdWQpICZhbXA7JmFtcDsgIXB1ZF9mcmVlX3BtZF9wYWdlKHB1ZCwgYWRkcikpCi0JCXJldHVybiAwOwomIzQzOwlpZiAoIXB1ZF9wcmVzZW50KCpwdWQpKQomIzQzOwkJcmV0dXJuIHB1ZF9zZXRfaHVnZShwdWQsIHBoeXNfYWRkciwgcHJvdCk7CiAKLQlyZXR1cm4gcHVkX3NldF9odWdlKHB1ZCwgcGh5c19hZGRyLCBwcm90KTsKJiM0MzsJLyogU2VlIGNvbW1lbnQgaW4gdm1hcF90cnlfaHVnZV9wbWQoKS4gKi8KJiM0MzsJc2NvcGVkX2NvbmRfZ3VhcmQobW1hcF9yZWFkX2xvY2tfdHJ5LCByZXR1cm4gMCwgJmFtcDtpbml0X21tKSB7CiYjNDM7CQlpZiAoIXB1ZF9mcmVlX3BtZF9wYWdlKHB1ZCwgYWRkcikpCiYjNDM7CQkJcmV0dXJuIDA7CiYjNDM7CQlyZXR1cm4gcHVkX3NldF9odWdlKHB1ZCwgcGh5c19hZGRyLCBwcm90KTsKJiM0MzsJfQogfQogCiBzdGF0aWMgaW50IHZtYXBfcHVkX3JhbmdlKHA0ZF90ICpwNGQsIHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsCkBAIC0yNjIsMTAgJiM0MzsyODAsMTUgQEAgc3RhdGljIGludCB2bWFwX3RyeV9odWdlX3A0ZChwNGRfdCAqcDRkLCB1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLAogCWlmICghSVNfQUxJR05FRChwaHlzX2FkZHIsIFA0RF9TSVpFKSkKIAkJcmV0dXJuIDA7CiAKLQlpZiAocDRkX3ByZXNlbnQoKnA0ZCkgJmFtcDsmYW1wOyAhcDRkX2ZyZWVfcHVkX3BhZ2UocDRkLCBhZGRyKSkKLQkJcmV0dXJuIDA7CiYjNDM7CWlmICghcDRkX3ByZXNlbnQoKnA0ZCkpCiYjNDM7CQlyZXR1cm4gcDRkX3NldF9odWdlKHA0ZCwgcGh5c19hZGRyLCBwcm90KTsKIAotCXJldHVybiBwNGRfc2V0X2h1Z2UocDRkLCBwaHlzX2FkZHIsIHByb3QpOwomIzQzOwkvKiBTZWUgY29tbWVudCBpbiB2bWFwX3RyeV9odWdlX3BtZCgpLiAqLwomIzQzOwlzY29wZWRfY29uZF9ndWFyZChtbWFwX3JlYWRfbG9ja190cnksIHJldHVybiAwLCAmYW1wO2luaXRfbW0pIHsKJiM0MzsJCWlmICghcDRkX2ZyZWVfcHVkX3BhZ2UocDRkLCBhZGRyKSkKJiM0MzsJCQlyZXR1cm4gMDsKJiM0MzsJCXJldHVybiBwNGRfc2V0X2h1Z2UocDRkLCBwaHlzX2FkZHIsIHByb3QpOwomIzQzOwl9CiB9CiAKIHN0YXRpYyBpbnQgdm1hcF9wNGRfcmFuZ2UocGdkX3QgKnBnZCwgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCwKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTIgMTM6MTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjM2NQoJCQkJCQkJb3V0cHV0OiAxOAoJCQkJCQkJdGhvdWdodHM6IDM4MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFBhZ2UgVGFibGUgRHVtcGluZyBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaC4gSXQgc2VlbXMgbGlrZSBhIHByZXR0eSBzaWduaWZpY2FudCBjaGFuZ2UsIHNwZWNpZmljYWxseSB0YXJnZXRpbmcgdGhlIHN5bmNocm9uaXphdGlvbiBtZWNoYW5pc20gZm9yIHBhZ2UgdGFibGUgZHVtcGluZyAoYHB0ZHVtcGApIGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggdm1hbGxvYyBodWdlIHBhZ2UgbWFwcGluZ3MsIHdoaWNoIGlzIGEga2V5IGFyZWEgZm9yIGhpZ2gtcGVyZm9ybWFuY2UgbWVtb3J5IG1hbmFnZW1lbnQsIGFuZCBhbHNvIGltcGFjdHMgeDg2IENQQS4gRnJvbSB3aGF0IEkgY2FuIGdhdGhlciwgaXQgcmVtb3ZlcyB0aGUgYGFybTY0X3B0ZHVtcF9sb2NrX2tleWAgc3RhdGljIGtleSBvbiBBUk02NCBhbmQgcmVwbGFjZXMgaXQgd2l0aCB0aGUgbW9yZSBjb252ZW50aW9uYWwgYG1tYXBfcmVhZF9sb2NrYC9gbW1hcF93cml0ZV9sb2NrYCBsb2NrcyBvbiBgaW5pdF9tbWAgdG8gcHJvdGVjdCBhZ2FpbnN0IGNvbmN1cnJlbnQgbW9kaWZpY2F0aW9ucy4gVGhpcyBhZmZlY3RzIGNvcmUga2VybmVsIGZpbGVzOiBgbW0vdm1hbGxvYy5jYCwgYGFyY2gvYXJtNjQvbW0vbW11LmNgLCBgYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuY2AsIGFuZCBgbW0vcHRkdW1wLmNgLgoKTXkgaW1tZWRpYXRlIGNvbmNlcm4gaXMgd2hldGhlciB0aGlzIGNoYW5nZSBpcyBhY3R1YWxseSAqcmVhY2hhYmxlKiBhbmQgKnRlc3RhYmxlKiBpbiBhIHByYWN0aWNhbCBzY2VuYXJpby4gIGBwdGR1bXBgIGl0c2VsZiBpcywgb2YgY291cnNlLCB1c3VhbGx5IGFjY2Vzc2VkIHZpYSBkZWJ1Z2ZzIHVuZGVyIGAvc3lzL2tlcm5lbC9kZWJ1Zy9wYWdlX3RhYmxlcy9rZXJuZWxgIChhbmQgc2ltaWxhciBwYXRocyksIHNvIHRoYXQmIzM5O3MgdGhlIG9idmlvdXMgZW50cnkgcG9pbnQuICBUaGVuIEkgbmVlZCB0byB0aGluayBhYm91dCBgdm1hbGxvY2AgaHVnZSBwYWdlcy4gIFRoZXkgYXJlIG9ubHkgZW5nYWdlZCBpZiBgQ09ORklHX0hBVkVfQVJDSF9IVUdFX1ZNQUxMT0NgIGlzIGVuYWJsZWQgYW5kIGB2bWFsbG9jYCBpcyBjYWxsZWQgd2l0aCB0aGUgcmlnaHQgZmxhZ3MuIFRoZSBwYXRjaCBzZWVtcyB0byBiZSB0b3VjaGluZyBgdm1hcF90cnlfaHVnZV9wbWRgLCBgdm1hcF90cnlfaHVnZV9wdWRgLCBgdm1hcF90cnlfaHVnZV9wNGRgIGluIGBtbS92bWFsbG9jLmNgLCBhbmQgYGNwYV9jb2xsYXBzZV9sYXJnZV9wYWdlc2AgaW4gYGFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmNgIGFuZCBgcHRkdW1wX3dhbGtfcGdkYCBpbiBgbW0vcHRkdW1wLmNgLiBUaGF0IGdpdmVzIG1lIGEgZGVjZW50IGlkZWEgb2YgaG93IHRoZXNlIGRpZmZlcmVudCBhc3BlY3RzIG9mIHRoZSBwYWdlIHRhYmxlIHN5c3RlbSByZWxhdGUgdG8gZWFjaCBvdGhlci4KCk5vdywgbGV0JiMzOTtzIG5haWwgZG93biB0aG9zZSBjb25maWcgb3B0aW9ucy4gYENPTkZJR19QVERVTVBfQ09SRWAgc2VlbXMgdG8gYmUgdGhlIGZ1bmRhbWVudGFsIGVuYWJsaW5nIG9wdGlvbiwgdHlwaWNhbGx5IHNlbGVjdGVkIHRocm91Z2ggYENPTkZJR19QVERVTVBfREVCVUdGU2AsIHdoaWNoIGlzIHByZXR0eSBzdGFuZGFyZC4gSSBuZWVkIHRvIGRvdWJsZS1jaGVjayBgbW0vcHRkdW1wLmNgIGFuZCBwb3RlbnRpYWxseSBgYXJjaC9hcm02NC9tbS9wdGR1bXAuY2AgdG8gYmUgY2VydGFpbiwgdG8gdW5kZXJzdGFuZCB0aGUgZXhhY3QgY29uZGl0aW9ucyB1bmRlciB3aGljaCB0aGlzIGNvZGUgaXMgYWN0aXZlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEyIDEzOjEyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBQVERVTVAmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9hcm02NC9rdm0vS2NvbmZpZz00NT1pZiBLVk1cbmFyY2gvYXJtNjQva3ZtL0tjb25maWctNDYtXG5hcmNoL2FybTY0L2t2bS9LY29uZmlnOjQ3OmNvbmZpZyBQVERVTVBfU1RBR0UyX0RFQlVHRlNcbmFyY2gvYXJtNjQva3ZtL0tjb25maWctNDgtXHRib29sIFwmIzM0O1ByZXNlbnQgdGhlIHN0YWdlLTIgcGFnZXRhYmxlcyB0byBkZWJ1Z2ZzXCYjMzQ7XG4tLVxubW0vS2NvbmZpZy5kZWJ1Zz0yMTY9Y29uZmlnIEFSQ0hfSEFTX1BURFVNUFxuLS1cbm1tL0tjb25maWcuZGVidWctMjE4LVxubW0vS2NvbmZpZy5kZWJ1ZzoyMTk6Y29uZmlnIFBURFVNUFxubW0vS2NvbmZpZy5kZWJ1Zy0yMjAtXHRib29sXG5tbS9LY29uZmlnLmRlYnVnLTIyMS1cbm1tL0tjb25maWcuZGVidWc6MjIyOmNvbmZpZyBQVERVTVBfREVCVUdGU1xubW0vS2NvbmZpZy5kZWJ1Zy0yMjMtXHRib29sIFwmIzM0O0V4cG9ydCBrZXJuZWwgcGFnZXRhYmxlIGxheW91dCB0byB1c2Vyc3BhY2UgdmlhIGRlYnVnZnNcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMiAxMzoxMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NTA1CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogNjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBzZWUuLi4KCioqSW52ZXN0aWdhdGluZyB0aGUgcHRkdW1wIENvbmZpZ3VyYXRpb24qKgoKUmlnaHQsIHNvIGBDT05GSUdfUFREVU1QX0RFQlVHRlNgIGlzIHRoZSBmbGFnIHdlJiMzOTtyZSB3b3JraW5nIHdpdGggaGVyZSB0byBlbmFibGUgcHRkdW1wLCBnb3QgaXQuIE5vdyBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgZGVwZW5kZW5jaWVzIGFuZCB3aGVyZSB0aGlzIGFjdHVhbGx5IGdldHMgdXNlZC4gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gY2hlY2sgYGFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmNgLiBJIHdvbmRlciwgaXMgaXQgY29uZGl0aW9uYWxseSBjb21waWxlZCBiYXNlZCBvbiBgQ09ORklHX1g4Nl9QQVRgLCBvciBpcyBpdCBhbHdheXMgaW5jbHVkZWQgaWYgd2UmIzM5O3JlIG9uIGFuIHg4NiBhcmNoaXRlY3R1cmU/IEkgc2hvdWxkIHByb2JhYmx5IGNyb3NzLXJlZmVyZW5jZSB0aGUgYnVpbGQgY29uZmlndXJhdGlvbiBhbmQgc2VlIGhvdyB0aG9zZSB0d28gYXJlIHJlbGF0ZWQuIEtub3dpbmcgdGhpcyB3aWxsIGhlbHAgbWUgdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIGVuYWJsaW5nIGBDT05GSUdfUFREVU1QX0RFQlVHRlNgIGFuZCB3aGV0aGVyIHdlJiMzOTtyZSBwb3RlbnRpYWxseSBpbnRyb2R1Y2luZyBjb2RlIGJsb2F0IG9yIHVuaW50ZW5kZWQgYmVoYXZpb3Igb24gc3BlY2lmaWMgeDg2IHBsYXRmb3Jtcy4gVGltZSB0byBkaXZlIGludG8gdGhlIHNvdXJjZSBhbmQgdGhlIHJlbGV2YW50IEtjb25maWcgZmlsZXMhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTIgMTM6MTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2V0X21lbW9yeVxcLm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4Ni9tbS9wYXQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L21tL3BhdC9NYWtlZmlsZS0yLVxuYXJjaC94ODYvbW0vcGF0L01ha2VmaWxlOjM6b2JqLXlcdFx0XHRcdDo9IHNldF9tZW1vcnkubyBtZW10eXBlLm9cbmFyY2gveDg2L21tL3BhdC9NYWtlZmlsZS00LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEyIDEzOjEyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc4NjUKCQkJCQkJCW91dHB1dDogMjQKCQkJCQkJCXRob3VnaHRzOiAyOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgcHJlc2VudGVkIGFzIGEgZmlyc3QtcGVyc29uIGV4cGVydCBzdW1tYXJ5OgoKKipYODYgQmlhcyBhbmQgSHVnZSB2bWFsbG9jIENvbnNpZGVyYXRpb25zKioKCkFscmlnaHQsIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGNvZGUgYW5kIGEgbmFnZ2luZyB0aG91Z2h0IGtlZXBzIHBvcHBpbmcgdXA6ICppdCYjMzk7cyBhbHdheXMgY29tcGlsZWQgb24geDg2Ki4gVGhhdCYjMzk7cyB0aGUgYmFzZWxpbmUsIHRoZSBhc3N1bWVkIGFyY2hpdGVjdHVyZS4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJiMzOTttIG5vdCBtYWtpbmcgaW1wbGljaXQgYXNzdW1wdGlvbnMgYWJvdXQgdGhlIGFyY2hpdGVjdHVyZS4gSSYjMzk7bSBnZXR0aW5nIGEgZmVlbGluZyB0aGF0IHNvbWV0aGluZyBtaWdodCBub3Qgd29yayBhcyBpdCBzaG91bGQgb24gb3RoZXIgYXJjaGl0ZWN0dXJlcy4KCk5vdyBJIG5lZWQgdG8gY2hlY2sgc29tZXRoaW5nIGltcG9ydGFudC4gVGhhdCBgQ09ORklHX0hBVkVfQVJDSF9IVUdFX1ZNQUxMT0NgIGRlZmluZS4uLndoYXQmIzM5O3MgdGhlIGRlYWwgd2l0aCB0aGF0PyBJcyBpdCBlbmFibGVkPyBJcyBpdCByZWxldmFudCBoZXJlPyBJIG5lZWQgdG8gdGhpbmsgdGhpcyB0aHJvdWdoLiBJcyB0aGUgY3VycmVudCBhcmNoaXRlY3R1cmUgZ29pbmcgdG8gd29yayB3aXRoIGBDT05GSUdfSEFWRV9BUkNIX0hVR0VfVk1BTExPQ2A/IFRoaXMgaXMgc29tZXRoaW5nIEkgd2lsbCBoYXZlIHRvIGludmVzdGlnYXRlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEyIDEzOjEyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBIQVZFX0FSQ0hfSFVHRV9WTUFMTE9DJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvS2NvbmZpZz0xMDkyPWNvbmZpZyBIQVZFX0FSQ0hfSFVHRV9WTUFQXG4tLVxuYXJjaC9LY29uZmlnLTEwOTktI1xuYXJjaC9LY29uZmlnOjExMDA6Y29uZmlnIEhBVkVfQVJDSF9IVUdFX1ZNQUxMT0NcbmFyY2gvS2NvbmZpZy0xMTAxLVx0ZGVwZW5kcyBvbiBIQVZFX0FSQ0hfSFVHRV9WTUFQXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTIgMTM6MTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODE5NgoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDIyNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIFBvdGVudGlhbDogQSBEZWVwIERpdmUgaW50byBNZW1vcnkgTWFuYWdlbWVudCoqCgpPa2F5LCBsZXQmIzM5O3MgdGhpbmsgdGhpcyB0aHJvdWdoLiBNeSBpbml0aWFsIGh1bmNoIGlzIHRvIHRhcmdldCBgcHRkdW1wX3dhbGtfcGdkYCBmb3IgZnV6emluZy4gSXQmIzM5O3MgY2FsbGVkIGZyb20gYHB0ZHVtcF93YWxrYCwgd2hpY2ggaXMgaW4gdHVybiB0cmlnZ2VyZWQgYnkgdGhlIGRlYnVnZnMgcmVhZCBmdW5jdGlvbmFsaXR5LiBUaGF0JiMzOTtzIGEgZGVjZW50IHN0YXJ0aW5nIHBvaW50LgoKTm93LCBsZXQmIzM5O3MgZXhwbG9yZSBvdGhlciBhdmVudWVzLiBgdm1hcF90cnlfaHVnZV9wbWRgIHNlZW1zIHByb21pc2luZy4gSXQmIzM5O3MgY2FsbGVkIHdpdGhpbiBgdm1hcF9wbWRfcmFuZ2VgLCB3aGljaCBoYXMgdGhpcyBjaGFpbjogYHZtYXBfcHVkX3JhbmdlYCAtJmd0OyBgdm1hcF9wNGRfcmFuZ2VgIC0mZ3Q7IGB2bWFwX3BhZ2VfcmFuZ2VgIC0mZ3Q7IGB2bWFwX3JhbmdlYCAtJmd0OyBlaXRoZXIgYF9fdm1hbGxvY19hcmVhX25vZGVgIG9yIGp1c3QgcGxhaW4gYHZtYXBgLiBUbyBmdXp6ICp0aGlzKiwgd2UmIzM5O2QgZXNzZW50aWFsbHkgaGF2ZSB0byB0cmlnZ2VyIGEgYHZtYWxsb2NgIHdpdGggaHVnZSBwYWdlcyB3aGlsZSBjb25jdXJyZW50bHkgcmVhZGluZyB0aGUgYHB0ZHVtcGAgZGVidWdmcyBlbnRyeSBwb2ludC4gVGhhdCBvcGVucyB1cCBzb21lIGludGVyZXN0aW5nIGF0dGFjayB2ZWN0b3JzLgoKU28sIGB2bWFwX3RyeV9odWdlX3BtZGAgaXMgZGVmaW5pdGVseSBhIHN0cm9uZyBjb250ZW5kZXIsIGFsb25nIHdpdGggYHB0ZHVtcF93YWxrX3BnZGAuIEkgc2hvdWxkIGFsc28ga2VlcCBhbiBleWUgb24gYGNwYV9jb2xsYXBzZV9sYXJnZV9wYWdlc2AgYW5kIGBwbWRfZnJlZV9wdGVfcGFnZWAgdG8gc2VlIGhvdyB0aG9zZSBjb3VsZCBwb3RlbnRpYWxseSBiZSBleHBsb2l0ZWQuCgpGb3Igbm93LCBJJiMzOTttIGdvaW5nIHRvIHN0YXJ0IGJ5IHJldmlld2luZyB0aGUgZnVuY3Rpb25zIHdpdGhpbiBgbW0vcHRkdW1wLmNgIHRvIHVuZGVyc3RhbmQgdGhlIGJpZ2dlciBwaWN0dXJlIGFuZCBwb3RlbnRpYWwgaW50ZXJhY3Rpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMiAxMzoxMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwdGR1bXBfd2Fsa19wZ2QmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9wdGR1bXAuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9wdGR1bXAuYz0xNjY9c3RhdGljIGNvbnN0IHN0cnVjdCBtbV93YWxrX29wcyBwdGR1bXBfb3BzID0ge1xuLS1cbm1tL3B0ZHVtcC5jLTE3NC1cbm1tL3B0ZHVtcC5jOjE3NTp2b2lkIHB0ZHVtcF93YWxrX3BnZChzdHJ1Y3QgcHRkdW1wX3N0YXRlICpzdCwgc3RydWN0IG1tX3N0cnVjdCAqbW0sIHBnZF90ICpwZ2QpXG5tbS9wdGR1bXAuYy0xNzYte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMiAxMzoxMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4ODc4CgkJCQkJCQlvdXRwdXQ6IDQzCgkJCQkJCQl0aG91Z2h0czogMzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gYGNwYV9jb2xsYXBzZV9sYXJnZV9wYWdlc2AgaW4geDg2JiMzOTtzIE1lbW9yeSBNYW5hZ2VtZW50KioKCkFscmlnaHQsIHNvIHRoZSBmaXJzdCB0aGluZyBJJiMzOTttIGRvaW5nIGlzIHplcm9pbmcgaW4gb24gYGFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmNgLiBUaGUgZmFjdCB0aGF0IEkmIzM5O20gc3BlY2lmaWNhbGx5IHRhcmdldGluZyB0aGF0IGZpbGUgaXMgYSBjbHVlOyBpdCBtZWFucyBJJiMzOTttIHByb2JhYmx5IGxvb2tpbmcgYXQgaG93IHRoZSBQYWdlIEF0dHJpYnV0ZSBUYWJsZSAoUEFUKSBpbnRlcmFjdHMgd2l0aCBtZW1vcnkgbWFuYWdlbWVudCBvbiB4ODYsIGFuZCBzcGVjaWZpY2FsbHksIGhvdyBsYXJnZSBwYWdlIHN1cHBvcnQgbWlnaHQgYmUgaGFuZGxlZC4gVGhlIG1lbnRpb24gb2YgYGNwYV9jb2xsYXBzZV9sYXJnZV9wYWdlc2AgaXMga2V5LiBNeSBpbml0aWFsIHRob3VnaHQgcHJvY2VzcyBub3cgaXM6CgoqICAgKipQQVQgYW5kIExhcmdlIFBhZ2VzOioqIEkmIzM5O20gbGlrZWx5IGludGVyZXN0ZWQgaW4gaG93IHRoZSBrZXJuZWwgaW50ZXJhY3RzIHdpdGggdGhlIFBBVCB0byBtYXAgYW5kIHVubWFwIGxhcmdlIHBhZ2VzLiBUaGUgUEFUIGFsbG93cyBmb3IgZ3JhbnVsYXIgY29udHJvbCBvdmVyIG1lbW9yeSBhdHRyaWJ1dGVzIChlLmcuLCBjYWNoaW5nLCB3cml0ZSBjb21iaW5pbmcpIGFuZCBpcyBjcnVjaWFsIGZvciBwZXJmb3JtYW5jZS4gSSBuZWVkIHRvIHNlZSAqaG93KiB0aGlzIGBjcGFfY29sbGFwc2VfbGFyZ2VfcGFnZXNgIGZ1bmN0aW9uIGZpZ3VyZXMgaW4gdG8gdGhlIHByb2Nlc3MuCiogICAqKkNvbGxhcHNlIE9wZXJhdGlvbnMqKjogVGhlIHdvcmQgJiMzNDtjb2xsYXBzZSYjMzQ7IHN1Z2dlc3RzIEkmIzM5O20gbG9va2luZyBhdCBhICpyZWR1Y3Rpb24qIG9wZXJhdGlvbi4gQXJlIHdlIGRlYWxpbmcgd2l0aCBzb21ldGhpbmcgbGlrZSB1bm1hcHBpbmcgYSBsYXJnZSBwYWdlIGFuZCByZXZlcnRpbmcgYmFjayB0byBzbWFsbGVyIHBhZ2VzPyBPciwgaXMgaXQgaW52b2x2ZWQgaW4gYSBjb250ZXh0IHdoZXJlICpyZW1vdmluZyogYSBsYXJnZSBwYWdlIGlzIHBhcnQgb2YgdGhlIHByb2Nlc3M/CiogICAqKkNvbnRleHQgaXMga2V5Kio6IEkgbmVlZCB0byBleGFtaW5lIHRoZSBmdW5jdGlvbiYjMzk7cyB1c2FnZSBjb250ZXh0IHRvIHVuZGVyc3RhbmQgd2hhdCYjMzk7cyB0cmlnZ2VyaW5nIHRoaXMgY2FsbCwgYW5kIHdoYXQgdGhlIG92ZXJhbGwgZ29hbCBpcy4gSXMgdGhpcyBwYXJ0IG9mIGEgZGVmcmFnbWVudGF0aW9uIHN0cmF0ZWd5PyBBIE5VTUEgb3B0aW1pemF0aW9uPyBPciBzb21ldGhpbmcgcmVsYXRlZCB0byBtZW1vcnkgaG90cGx1Z2dpbmc/IEkga25vdyB0aGVyZSB3aWxsIGJlIGEgc3BlY2lmaWMgcmVhc29uIGZvciBpdC4KKiAgICoqUG90ZW50aWFsIGlzc3VlcyoqOiBJJiMzOTtsbCBiZSBrZWVwaW5nIGFuIGV5ZSBvdXQgZm9yIHBvdGVudGlhbCBpc3N1ZXMgbGlrZSBjYWNoZSBjb2hlcmVuY3kgcHJvYmxlbXMsIFRMQiBmbHVzaGVzLCBvciByYWNlIGNvbmRpdGlvbnMuIFRoZXNlIGFyZSBhbGwgdGhpbmdzIHRoYXQgY2FuIGNyb3AgdXAgd2hlbiB5b3UmIzM5O3JlIG11Y2tpbmcgYXJvdW5kIHdpdGggbWVtb3J5IG1hcHBpbmdzLCBlc3BlY2lhbGx5IHdoZW4gbGFyZ2UgcGFnZXMgYXJlIGludm9sdmVkLgoqICAgKipUaGUgYmlnZ2VyIHBpY3R1cmU6KiogSSYjMzk7bSBpbnRlcmVzdGVkIGluIHRoZSBvdmVyYWxsIG1lbW9yeSBtYW5hZ2VtZW50IHN0cmF0ZWd5LCBhbmQgaG93IHRoaXMgZnVuY3Rpb24gZml0cyBpbnRvIHRoYXQgc3RyYXRlZ3kuIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIGNvbW1lbnRzLCByZWxhdGVkIGZ1bmN0aW9ucywgYW5kIGFueSBvdGhlciBpbmRpY2F0b3JzIHRoYXQgbWlnaHQgc2hlZCBsaWdodCBvbiBpdHMgcm9sZSBpbiB0aGUgeDg2IGFyY2hpdGVjdHVyZS4KCkkmIzM5O20gcmVhZHkgdG8gZGlnIGluIGFuZCBmaWd1cmUgb3V0IHRoZSBleGFjdCBiZWhhdmlvciBhbmQgcmVhc29uaW5nIGJlaGluZCB0aGF0IGZ1bmN0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMiAxMzoxMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjcGFfY29sbGFwc2VfbGFyZ2VfcGFnZXMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM9NDEyPXN0YXRpYyBpbnQgY29sbGFwc2VfbGFyZ2VfcGFnZXModW5zaWduZWQgbG9uZyBhZGRyLCBzdHJ1Y3QgbGlzdF9oZWFkICpwZ3RhYmxlcyk7XG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTQxMy1cbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM6NDE0OnN0YXRpYyB2b2lkIGNwYV9jb2xsYXBzZV9sYXJnZV9wYWdlcyhzdHJ1Y3QgY3BhX2RhdGEgKmNwYSlcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtNDE1LXtcbi0tXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jPTQ1Mz1zdGF0aWMgdm9pZCBjcGFfZmx1c2goc3RydWN0IGNwYV9kYXRhICpjcGEsIGludCBjYWNoZSlcbi0tXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTQ4OC1cdGlmIChjcGEtXHUwMDNlZmxhZ3MgXHUwMDI2IENQQV9DT0xMQVBTRSlcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM6NDg5Olx0XHRjcGFfY29sbGFwc2VfbGFyZ2VfcGFnZXMoY3BhKTtcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtNDkwLX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTIgMTM6MTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTcyMAoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDI0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyB5b3UgcmVxdWVzdGVkOgoKKipOYXZpZ2F0aW5nIHRoZSBIdWdlIFBhZ2UgTGFuZHNjYXBlKioKCk9rYXksIHNvIHdlJiMzOTtyZSB0YWxraW5nIGFib3V0IGh1Z2UgcGFnZXMgYW5kLCBtb3JlIHNwZWNpZmljYWxseSwgdGhlIGB2bWFwX3RyeV9odWdlX3BtZGAgZnVuY3Rpb24uIEdpdmVuIHRoZSBjb250ZXh0LCBteSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZGl2ZSBzdHJhaWdodCBpbnRvIGBtbS92bWFsbG9jLmNgLiBUaGF0JiMzOTtzIHRoZSBsb2dpY2FsIHBsYWNlIHRvIHN0YXJ0IOKAkyBgdm1hbGxvY2AgaXMgZGlyZWN0bHkgaW52b2x2ZWQgaW4gYWxsb2NhdGluZyB2aXJ0dWFsIG1lbW9yeSwgYW5kIHRoZSBodWdlIHBhZ2UgaW1wbGVtZW50YXRpb24gd291bGQgYWxtb3N0IGNlcnRhaW5seSB0b3VjaCBvbiBpdHMgd29ya2luZ3MsIHBhcnRpY3VsYXJseSBkdXJpbmcgYXR0ZW1wdHMgdG8gdXRpbGl6ZSBsYXJnZSBwaHlzaWNhbCBwYWdlcyB3aXRoaW4gdGhlIHZpcnR1YWwgbWVtb3J5IHNwYWNlLiBJIHdhbnQgdG8gc2VlIGhvdyB0aGUgc3lzdGVtIGlzIHRyeWluZyB0byBtYXAgdGhlc2UgbGFyZ2UgcGFnZXMgd2l0aGluIHRoZSB2bWFsbG9jIGFyZW5hLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW50ZXJhY3Rpb24gYmV0d2VlbiBgdm1hcGAsIGh1Z2VwYWdlcyBhbmQgdGhlIHBhZ2UgdGFibGVzLiBMZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3Mgd2hhdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTIgMTM6MTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dm1hcF90cnlfaHVnZV9wbWQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS92bWFsbG9jLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vdm1hbGxvYy5jPTk1PXN0YXRpYyBpbnQgdm1hcF9wdGVfcmFuZ2UocG1kX3QgKnBtZCwgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCxcbi0tXG5tbS92bWFsbG9jLmMtMTQyLVxubW0vdm1hbGxvYy5jOjE0MzpzdGF0aWMgaW50IHZtYXBfdHJ5X2h1Z2VfcG1kKHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsXG5tbS92bWFsbG9jLmMtMTQ0LVx0XHRcdHBoeXNfYWRkcl90IHBoeXNfYWRkciwgcGdwcm90X3QgcHJvdCxcbi0tXG5tbS92bWFsbG9jLmM9MTgwPXN0YXRpYyBpbnQgdm1hcF9wbWRfcmFuZ2UocHVkX3QgKnB1ZCwgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCxcbi0tXG5tbS92bWFsbG9jLmMtMTkzLVxubW0vdm1hbGxvYy5jOjE5NDpcdFx0aWYgKHZtYXBfdHJ5X2h1Z2VfcG1kKHBtZCwgYWRkciwgbmV4dCwgcGh5c19hZGRyLCBwcm90LFxubW0vdm1hbGxvYy5jLTE5NS1cdFx0XHRcdFx0bWF4X3BhZ2Vfc2hpZnQpKSB7XG4tLVxubW0vdm1hbGxvYy5jPTIwNz1zdGF0aWMgaW50IHZtYXBfdHJ5X2h1Z2VfcHVkKHB1ZF90ICpwdWQsIHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsXG4tLVxubW0vdm1hbGxvYy5jLTIyOC1cbm1tL3ZtYWxsb2MuYzoyMjk6XHQvKiBTZWUgY29tbWVudCBpbiB2bWFwX3RyeV9odWdlX3BtZCgpLiAqL1xubW0vdm1hbGxvYy5jLTIzMC1cdHNjb3BlZF9jb25kX2d1YXJkKG1tYXBfcmVhZF9sb2NrX3RyeSwgcmV0dXJuIDAsIFx1MDAyNmluaXRfbW0pIHtcbi0tXG5tbS92bWFsbG9jLmM9MjY0PXN0YXRpYyBpbnQgdm1hcF90cnlfaHVnZV9wNGQocDRkX3QgKnA0ZCwgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCxcbi0tXG5tbS92bWFsbG9jLmMtMjg1LVxubW0vdm1hbGxvYy5jOjI4NjpcdC8qIFNlZSBjb21tZW50IGluIHZtYXBfdHJ5X2h1Z2VfcG1kKCkuICovXG5tbS92bWFsbG9jLmMtMjg3LVx0c2NvcGVkX2NvbmRfZ3VhcmQobW1hcF9yZWFkX2xvY2tfdHJ5LCByZXR1cm4gMCwgXHUwMDI2aW5pdF9tbSkge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMiAxMzoxMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDQzNQoJCQkJCQkJb3V0cHV0OiAyMAoJCQkJCQkJdGhvdWdodHM6IDI1MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLZXJuZWwgUGF0Y2ggQW5hbHlzaXMgJmFtcDsgRnV6emluZyBTdHJhdGVneSoqCgpPa2F5LCBzbyBsb29raW5nIGF0IHRoaXMgcGF0Y2gsIG15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IGl0JiMzOTtzIHRvdWNoaW5nIHNvbWUgcHJldHR5IGNyaXRpY2FsIGtlcm5lbCBhcmVhcy4gU3BlY2lmaWNhbGx5LCBpdCYjMzk7cyBtb2RpZnlpbmcgdGhlIGNvcmUgbG9naWMgZm9yIHBhZ2UgdGFibGUgZHVtcGluZyBhbmQgaG93IHZtYWxsb2MgaHVnZSBwYWdlcyBhcmUgbWFwcGVkLiBUaGF0IGltbWVkaWF0ZWx5IGZsYWdzIGl0IGFzIHNvbWV0aGluZyB3b3J0aCBhIGNsb3NlciBsb29rLCBlc3BlY2lhbGx5IGZvciBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzLgoKVGhlIGludHJvZHVjdGlvbiBvZiBsb2NrcyDigJMgYG1tYXBfcmVhZF9sb2NrX3RyeWAgb24gYGluaXRfbW1gIHdpdGhpbiBgdm1hcF90cnlfaHVnZV9wbWRgLCBgdm1hcF90cnlfaHVnZV9wdWRgLCBhbmQgYHZtYXBfdHJ5X2h1Z2VfcDRkYCwgYW5kIGBtbWFwX3JlYWRfbG9ja2AgaW4gYGNwYV9jb2xsYXBzZV9sYXJnZV9wYWdlc2AgcmVhbGx5IGNhdGNoZXMgbXkgZXllLiBMb2NraW5nIGlzc3VlcyBhcmUgYWx3YXlzIGEgcHJpbWUgdGFyZ2V0IGZvciBmdXp6aW5nLiBBbmQgdGhlIGBtbWFwX3dyaXRlX2xvY2tfbmVzdGVkYCBpbiBgcHRkdW1wX3dhbGtfcGdkYCBpcyBhbm90aGVyIGludGVyZXN0aW5nIHBvaW50LiBOZXN0aW5nLi4uIHRoYXQmIzM5O3MgYWx3YXlzIHRyaWNreS4KCkdpdmVuIHRob3NlIGxvY2tpbmcgY2hhbmdlcyBhbmQgdGhlIGFyZWFzIGJlaW5nIG1vZGlmaWVkLCB0aGlzIGlzIGRlZmluaXRlbHkgaGlnaC1wcmlvcml0eSBmb3IgZnV6emluZy4gSSYjMzk7bSBnb2luZyB0byBmb2N1cyBteSBpbml0aWFsIGZ1enppbmcgZWZmb3J0cyBvbiB0aGVzZSBzeW1ib2xzOiBgdm1hcF90cnlfaHVnZV9wbWRgLCBgdm1hcF90cnlfaHVnZV9wdWRgLCBgdm1hcF90cnlfaHVnZV9wNGRgLCBgY3BhX2NvbGxhcHNlX2xhcmdlX3BhZ2VzYCwgYHB0ZHVtcF93YWxrX3BnZGAsIGFuZCBgcG1kX2ZyZWVfcHRlX3BhZ2VgLiBUaGV5IGFwcGVhciB0byBiZSB0aGUgbW9zdCBsaWtlbHkgY2FuZGlkYXRlcyB0byBleHBvc2UgYW55IGNvbmN1cnJlbmN5IG9yIG1lbW9yeSBtYW5hZ2VtZW50IGJ1Z3MuCgpCZWZvcmUgSSBkaXZlIHRvbyBkZWVwLCBJIG5lZWQgdG8gY29uZmlybSB0aGF0IGBQVERVTVBfREVCVUdGU2AgaXMgdGhlIGNvcnJlY3QgY29uZmlnIHRvIGFjdGl2YXRlIHRoZSByZWxldmFudCBmdW5jdGlvbmFsaXR5LiBHb3R0YSBtYWtlIHN1cmUgSSYjMzk7bSB0ZXN0aW5nIHRoZSByaWdodCBjb2RlIHBhdGhzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMiAxMzoxMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgUFREVU1QX0RFQlVHRlMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vS2NvbmZpZy5kZWJ1Zz0yMTk9Y29uZmlnIFBURFVNUFxuLS1cbm1tL0tjb25maWcuZGVidWctMjIxLVxubW0vS2NvbmZpZy5kZWJ1ZzoyMjI6Y29uZmlnIFBURFVNUF9ERUJVR0ZTXG5tbS9LY29uZmlnLmRlYnVnLTIyMy1cdGJvb2wgXCYjMzQ7RXhwb3J0IGtlcm5lbCBwYWdldGFibGUgbGF5b3V0IHRvIHVzZXJzcGFjZSB2aWEgZGVidWdmc1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMiAxMzoxMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTE1MwoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDE0OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBQVERVTVAgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBgUFREVU1QX0RFQlVHRlNgIGlzIGluZGVlZCB0aGUgY29uZmlndXJhdGlvbiBpdGVtIHdlIHdhbnQuIElzIHRoZXJlIGFueXRoaW5nIGVsc2UgcmVsZXZhbnQgaGVyZT8gSSBrbm93IGBIQVZFX0FSQ0hfSFVHRV9WTUFMTE9DYCBpcyBhcmNoaXRlY3R1cmUtc3BlY2lmaWMsIHNvIHdlIGNhbiYjMzk7dCBqdXN0IGVuYWJsZSBpdCB1bml2ZXJzYWxseS4gSXQmIzM5O3MgYSBkZXBlbmRlbmN5LCBzZWxlY3RlZCBieSB0aGUgYXJjaGl0ZWN0dXJlIGl0c2VsZi4gTGV0JiMzOTtzIHNlZSBpZiB0aGVyZSBhcmUgYW55ICpvdGhlciogcmVsYXRlZCBjb25maWdzLiBBaCwgYENPTkZJR19ERUJVR19XWGAgZG9lcyB1c2UgYHB0ZHVtcGAsIGJ1dCB0aGF0IGFwcGVhcnMgdG8gYmUgdHJpZ2dlcmVkIGR1cmluZyB0aGUgYm9vdCBwcm9jZXNzLiBOb3Qgd2hhdCBJJiMzOTttIGFmdGVyLiBgQ09ORklHX1BURFVNUF9ERUJVR0ZTYCwgaG93ZXZlciwgdGhhdCYjMzk7cyB0aGUga2V5LiBJdCBhbGxvd3MgYSB1c2Vyc3BhY2UgcHJvZ3JhbSB0byB0cmlnZ2VyIGBwdGR1bXBgIHRocm91Z2ggZGVidWdmcywgd2hpY2ggbWFrZXMgaXQgYWJzb2x1dGVseSBpZGVhbCBmb3IgZnV6emluZy4gUGVyZmVjdC4gTm93LCBJIG5lZWQgdG8gY2hlY2sgYGFyY2gvYXJtNjQvbW0vbW11LmNgIHRvIGxvb2sgYXQgaG93IGBwbWRfZnJlZV9wdGVfcGFnZWAgaGFuZGxlcyBtZW1vcnkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEyIDEzOjEyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3BtZF9mcmVlX3B0ZV9wYWdlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC9hcm02NC9tbS9tbXUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL2FybTY0L21tL21tdS5jPTE4NTc9aW50IHBtZF9jbGVhcl9odWdlKHBtZF90ICpwbWRwKVxuLS1cbmFyY2gvYXJtNjQvbW0vbW11LmMtMTg2NC1cbmFyY2gvYXJtNjQvbW0vbW11LmM6MTg2NTppbnQgcG1kX2ZyZWVfcHRlX3BhZ2UocG1kX3QgKnBtZHAsIHVuc2lnbmVkIGxvbmcgYWRkcilcbmFyY2gvYXJtNjQvbW0vbW11LmMtMTg2Ni17XG4tLVxuYXJjaC9hcm02NC9tbS9tbXUuYz0xODg0PWludCBwdWRfZnJlZV9wbWRfcGFnZShwdWRfdCAqcHVkcCwgdW5zaWduZWQgbG9uZyBhZGRyKVxuLS1cbmFyY2gvYXJtNjQvbW0vbW11LmMtMTkwMy1cdFx0aWYgKHBtZF9wcmVzZW50KHBtZHBfZ2V0KHBtZHApKSlcbmFyY2gvYXJtNjQvbW0vbW11LmM6MTkwNDpcdFx0XHRwbWRfZnJlZV9wdGVfcGFnZShwbWRwLCBuZXh0KTtcbmFyY2gvYXJtNjQvbW0vbW11LmMtMTkwNS1cdH0gd2hpbGUgKHBtZHAmIzQzOyYjNDM7LCBuZXh0ICYjNDM7PSBQTURfU0laRSwgbmV4dCAhPSBlbmQpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMiAxMzoxMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTgyNwoJCQkJCQkJb3V0cHV0OiAyMgoJCQkJCQkJdGhvdWdodHM6IDU3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBmcm9tIG15IG93biBwZXJzcGVjdGl2ZToKCioqSW52ZXN0aWdhdGluZyBgcG1kX2ZyZWVfcHRlX3BhZ2VgIFVzYWdlIEFjcm9zcyBBcmNoaXRlY3R1cmVzKioKClJpZ2h0LCBsZXQgbWUgc2VlLi4uIEkmIzM5O20gbG9va2luZyBhdCBgcG1kX2ZyZWVfcHRlX3BhZ2VgLCBhbmQgaXQgYXBwZWFycyBpdCYjMzk7cyBkZWZpbmVkIHdpdGhpbiBgYXJjaC9hcm02NC9tbS9tbXUuY2AuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyB0aGlzIGZ1bmN0aW9uIGlzIGdlbmVyYWxseSB1c2VkLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgJiMzNDtPa2F5LCB3aGVyZSBlbHNlIGlzIHRoaXMgZnVuY3Rpb24gY2FsbGVkPyYjMzQ7IFRoZW4gSSByZW1lbWJlciBzZWVpbmcgaXQgcmVmZXJlbmNlZCB3aXRoaW4gYG1tL3ZtYWxsb2MuY2AuIEludGVyZXN0aW5nLiBBIGJpdCBvZiBhIHJlZCBmbGFnIHBvcHMgdXAgaW1tZWRpYXRlbHksIHRob3VnaC4uLiBJIG5lZWQgdG8gYXNjZXJ0YWluIGlmIHRoaXMgZnVuY3Rpb24gaXMgdW5pdmVyc2FsbHkgZGVmaW5lZCBhY3Jvc3MgYWxsIGFyY2hpdGVjdHVyZXMgc3VwcG9ydGVkIGJ5IHRoZSBrZXJuZWwsIG9yIGlmIGl0IGlzIGltcGxlbWVudGVkIGluIGFuIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBtYW5uZXIuIFRoaXMgaXMgY3J1Y2lhbCBmb3IgcG9ydGFiaWxpdHkuIElmIGl0JiMzOTtzIGEgZ2VuZXJpYyBpbnRlcmZhY2UgY2FsbCwgdGhlbiBJIGRvbiYjMzk7dCBoYXZlIHRvIHdvcnJ5LiBCdXQgaWYgbm90LCBJIG5lZWQgdG8gY2hlY2sgaXRzIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBpbXBsZW1lbnRhdGlvbnMuIEkgc2hvdWxkIG5vdGUsIGl0IGlzIGFsc28gaW1wb3J0YW50IHRvIGxvb2sgYXQgaG93IGRpZmZlcmVudCBhcmNoaXRlY3R1cmVzIGhhbmRsZSB2bWFsbG9jIHJlZ2lvbnMgYW5kIHBhZ2UgdGFibGUgbWFuYWdlbWVudC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTIgMTM6MTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cG1kX2ZyZWVfcHRlX3BhZ2UmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9hcm02NC9tbS9tbXUuYz0xODU3PWludCBwbWRfY2xlYXJfaHVnZShwbWRfdCAqcG1kcClcbi0tXG5hcmNoL2FybTY0L21tL21tdS5jLTE4NjQtXG5hcmNoL2FybTY0L21tL21tdS5jOjE4NjU6aW50IHBtZF9mcmVlX3B0ZV9wYWdlKHBtZF90ICpwbWRwLCB1bnNpZ25lZCBsb25nIGFkZHIpXG5hcmNoL2FybTY0L21tL21tdS5jLTE4NjYte1xuLS1cbmFyY2gvYXJtNjQvbW0vbW11LmM9MTg4ND1pbnQgcHVkX2ZyZWVfcG1kX3BhZ2UocHVkX3QgKnB1ZHAsIHVuc2lnbmVkIGxvbmcgYWRkcilcbi0tXG5hcmNoL2FybTY0L21tL21tdS5jLTE5MDMtXHRcdGlmIChwbWRfcHJlc2VudChwbWRwX2dldChwbWRwKSkpXG5hcmNoL2FybTY0L21tL21tdS5jOjE5MDQ6XHRcdFx0cG1kX2ZyZWVfcHRlX3BhZ2UocG1kcCwgbmV4dCk7XG5hcmNoL2FybTY0L21tL21tdS5jLTE5MDUtXHR9IHdoaWxlIChwbWRwJiM0MzsmIzQzOywgbmV4dCAmIzQzOz0gUE1EX1NJWkUsIG5leHQgIT0gZW5kKTtcbi0tXG5hcmNoL3Bvd2VycGMvbW0vYm9vazNzNjQvcmFkaXhfcGd0YWJsZS5jPTE2NzU9aW50IHBtZF9jbGVhcl9odWdlKHBtZF90ICpwbWQpXG4tLVxuYXJjaC9wb3dlcnBjL21tL2Jvb2szczY0L3JhZGl4X3BndGFibGUuYy0xNjg0LVxuYXJjaC9wb3dlcnBjL21tL2Jvb2szczY0L3JhZGl4X3BndGFibGUuYzoxNjg1OmludCBwbWRfZnJlZV9wdGVfcGFnZShwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIGFkZHIpXG5hcmNoL3Bvd2VycGMvbW0vYm9vazNzNjQvcmFkaXhfcGd0YWJsZS5jLTE2ODYte1xuLS1cbmFyY2gvcmlzY3YvbW0vcGd0YWJsZS5jPTExNz1pbnQgcG1kX2NsZWFyX2h1Z2UocG1kX3QgKnBtZClcbi0tXG5hcmNoL3Jpc2N2L21tL3BndGFibGUuYy0xMjQtXG5hcmNoL3Jpc2N2L21tL3BndGFibGUuYzoxMjU6aW50IHBtZF9mcmVlX3B0ZV9wYWdlKHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgYWRkcilcbmFyY2gvcmlzY3YvbW0vcGd0YWJsZS5jLTEyNi17XG4tLVxuYXJjaC94ODYvbW0vcGd0YWJsZS5jPTcxOD1pbnQgcHVkX2ZyZWVfcG1kX3BhZ2UocHVkX3QgKnB1ZCwgdW5zaWduZWQgbG9uZyBhZGRyKVxuLS1cbmFyY2gveDg2L21tL3BndGFibGUuYy03NTQtLyoqXG5hcmNoL3g4Ni9tbS9wZ3RhYmxlLmM6NzU1OiAqIHBtZF9mcmVlX3B0ZV9wYWdlIC0gQ2xlYXIgUE1EIGVudHJ5IGFuZCBmcmVlIFBURSBwYWdlLlxuYXJjaC94ODYvbW0vcGd0YWJsZS5jLTc1Ni0gKiBAcG1kOiBQb2ludGVyIHRvIHRoZSBQTURcbi0tXG5hcmNoL3g4Ni9tbS9wZ3RhYmxlLmMtNzYxLSAqL1xuYXJjaC94ODYvbW0vcGd0YWJsZS5jOjc2MjppbnQgcG1kX2ZyZWVfcHRlX3BhZ2UocG1kX3QgKnBtZCwgdW5zaWduZWQgbG9uZyBhZGRyKVxuYXJjaC94ODYvbW0vcGd0YWJsZS5jLTc2My17XG4tLVxuYXJjaC94ODYvbW0vcGd0YWJsZS5jLTc4Mi0gKi9cbmFyY2gveDg2L21tL3BndGFibGUuYzo3ODM6aW50IHBtZF9mcmVlX3B0ZV9wYWdlKHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgYWRkcilcbmFyY2gveDg2L21tL3BndGFibGUuYy03ODQte1xuLS1cbmluY2x1ZGUvbGludXgvcGd0YWJsZS5oPTIxNzY9aW50IHB1ZF9mcmVlX3BtZF9wYWdlKHB1ZF90ICpwdWQsIHVuc2lnbmVkIGxvbmcgYWRkcik7XG5pbmNsdWRlL2xpbnV4L3BndGFibGUuaDoyMTc3OmludCBwbWRfZnJlZV9wdGVfcGFnZShwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIGFkZHIpO1xuaW5jbHVkZS9saW51eC9wZ3RhYmxlLmgtMjE3OC0jZWxzZVx0LyogIUNPTkZJR19IQVZFX0FSQ0hfSFVHRV9WTUFQICovXG4tLVxuaW5jbHVkZS9saW51eC9wZ3RhYmxlLmg9MjIwND1zdGF0aWMgaW5saW5lIGludCBwdWRfZnJlZV9wbWRfcGFnZShwdWRfdCAqcHVkLCB1bnNpZ25lZCBsb25nIGFkZHIpXG4tLVxuaW5jbHVkZS9saW51eC9wZ3RhYmxlLmgtMjIwNy19XG5pbmNsdWRlL2xpbnV4L3BndGFibGUuaDoyMjA4OnN0YXRpYyBpbmxpbmUgaW50IHBtZF9mcmVlX3B0ZV9wYWdlKHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgYWRkcilcbmluY2x1ZGUvbGludXgvcGd0YWJsZS5oLTIyMDkte1xuLS1cbm1tL3ZtYWxsb2MuYz0xNDM9c3RhdGljIGludCB2bWFwX3RyeV9odWdlX3BtZChwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLFxuLS1cbm1tL3ZtYWxsb2MuYy0xNzMtXHRzY29wZWRfY29uZF9ndWFyZChtbWFwX3JlYWRfbG9ja190cnksIHJldHVybiAwLCBcdTAwMjZpbml0X21tKSB7XG5tbS92bWFsbG9jLmM6MTc0Olx0XHRpZiAoIXBtZF9mcmVlX3B0ZV9wYWdlKHBtZCwgYWRkcikpXG5tbS92bWFsbG9jLmMtMTc1LVx0XHRcdHJldHVybiAwO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMiAxMzoxMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzMwNwoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDE5NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgSHVnZSBWTUFQIFN1cHBvcnQgYW5kIFBhZ2UgVGFibGUgRHVtcGluZyoqCgpPa2F5LCBzbyB0aGlzIGlzIGRlZmluaXRlbHkgZGVmaW5lZCBmb3IgYXJjaGl0ZWN0dXJlcyB0aGF0IHN1cHBvcnQgdGhlIGh1Z2Ugdm1hcC4gSSBuZWVkIHRvIHJldmlzaXQgYGNwYV9jb2xsYXBzZV9sYXJnZV9wYWdlc2AgdG8gdW5kZXJzdGFuZCB0aGUgY3VycmVudCBzdGF0ZSBvZiB0aGluZ3MuIFJpZ2h0LCBpdCYjMzk7cyBpbiBgYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuY2AuIE5vdywgaXMgdGhlcmUgYW55IGNvbmZpZ3VyYXRpb24gdGllZCB0byBgc2V0X21lbW9yeS5jYD8gTm8sIGl0JiMzOTtzIGFsd2F5cyBjb21waWxlZCBmb3IgeDg2LiBHb29kLgoKU28sIHRoZSBrZXkgY29uZmlndXJhdGlvbnMgSSBuZWVkIHRvIGtlZXAgaW4gbWluZCBhcmUganVzdCBgUFREVU1QX0RFQlVHRlNgLgoKTXkgZm9jdXMgc3ltYm9scyBoZXJlIG5lZWQgdG8gYmU6CiogICBgdm1hcF90cnlfaHVnZV9wbWRgCiogICBgdm1hcF90cnlfaHVnZV9wdWRgCiogICBgdm1hcF90cnlfaHVnZV9wNGRgCiogICBgY3BhX2NvbGxhcHNlX2xhcmdlX3BhZ2VzYAoqICAgYHB0ZHVtcF93YWxrX3BnZGAKCkxldCBtZSBxdWlja2x5IGFzc2VzcyBpZiBgd2Fsa19wYWdlX3JhbmdlX2RlYnVnYCBpcyB3b3J0aCBleGFtaW5pbmcgZnVydGhlci4gQWgsIGl0JiMzOTtzIGluIGBtbS9wYWdld2Fsay5jYCwgdGhhdCBzZWVtcyBhcHByb3ByaWF0ZSwgbGV0JiMzOTtzIGtlZXAgdGhhdCBpbiBtaW5kLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMiAxMzoxMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt3YWxrX3BhZ2VfcmFuZ2VfZGVidWcmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9wYWdld2Fsay5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3BhZ2V3YWxrLmM9NjQ4PWludCB3YWxrX2tlcm5lbF9wYWdlX3RhYmxlX3JhbmdlX2xvY2tsZXNzKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLFxuLS1cbm1tL3BhZ2V3YWxrLmMtNjY3LS8qKlxubW0vcGFnZXdhbGsuYzo2Njg6ICogd2Fsa19wYWdlX3JhbmdlX2RlYnVnIC0gd2FsayBhIHJhbmdlIG9mIHBhZ2V0YWJsZXMgbm90IGJhY2tlZCBieSBhIHZtYVxubW0vcGFnZXdhbGsuYy02NjktICogQG1tOlx0XHRtbV9zdHJ1Y3QgcmVwcmVzZW50aW5nIHRoZSB0YXJnZXQgcHJvY2VzcyBvZiBwYWdlIHRhYmxlIHdhbGtcbi0tXG5tbS9wYWdld2Fsay5jLTY4My0gKi9cbm1tL3BhZ2V3YWxrLmM6Njg0OmludCB3YWxrX3BhZ2VfcmFuZ2VfZGVidWcoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgc3RhcnQsXG5tbS9wYWdld2Fsay5jLTY4NS1cdFx0XHQgIHVuc2lnbmVkIGxvbmcgZW5kLCBjb25zdCBzdHJ1Y3QgbW1fd2Fsa19vcHMgKm9wcyxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTIgMTM6MTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM5ODEKCQkJCQkJCW91dHB1dDogMjIKCQkJCQkJCXRob3VnaHRzOiAxMDgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIENvZGUgTW9kaWZpY2F0aW9ucyBhbmQgUG90ZW50aWFsIEltcGFjdHMqKgoKT2theSwgc28gSSBzZWUgdGhhdCBgd2Fsa19wYWdlX3JhbmdlX2RlYnVnYCBoYXMgYmVlbiBhZGp1c3RlZC4gU3BlY2lmaWNhbGx5LCB0aGUgYWRkaXRpb24gb2YgYG1tYXBfYXNzZXJ0X3dyaXRlX2xvY2tlZCgmYW1wO2luaXRfbW0pO2AgYW5kIHRoZSByZW1vdmFsIG9mIHRoZSBzcGVjaWFsIGNhc2luZyBmb3IgYGluaXRfbW1gIGp1bXAgb3V0IGltbWVkaWF0ZWx5LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgY2hhbmdlIHRob3JvdWdobHkuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IHRoaXMgbGlrZWx5IHRpZ2h0ZW5zIHVwIHRoZSBtZW1vcnkgbWFuYWdlbWVudCByZWxhdGVkIGFzc2VydGlvbnMsIHBhcnRpY3VsYXJseSBhcm91bmQgbG9ja2luZy4KCk5vdywgSSBuZWVkIHRvIGNoZWNrIGZvciByZWxhdGVkIGNvbmZpZ3VyYXRpb25zLiBgQ09ORklHX1BURFVNUF9ERUJVR0ZTYCBpcyB0aGUgcHJpbWFyeSBvbmUgdGhhdCBjb21lcyB0byBtaW5kLCBhcyBpdCYjMzk7cyBkaXJlY3RseSBsaW5rZWQgdG8gZGVidWdnaW5nIHBhZ2UgdGFibGVzLCB3aGljaCB0aGlzIG1vZGlmaWNhdGlvbiB0b3VjaGVzLiBMZXQmIzM5O3Mgc2VlIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXJzLiBIbW0sIHdoYXQgYWJvdXQgYENPTkZJR19ERUJVR19XWGA/IEl0IGRvZXMgaW52b2x2ZSBwdGR1bXAsIGJ1dCBpdCBzZWVtcyB0byBiZSBzb2xlbHkgYSBib290LXRpbWUgY29uZmlndXJhdGlvbi4gVGhhdCBzdWdnZXN0cyBpdCBtaWdodCBub3QgYmUgYSBkaXJlY3QgZmFjdG9yIGhlcmUsIGJ1dCBpdCYjMzk7cyB3b3J0aCBub3RpbmcgZm9yIGNvbXBsZXRlbmVzcy4gSSBzaG91bGQgYWxzbyBpbnZlc3RpZ2F0ZSBgQ09ORklHX1g4Nl9QVERVTVBgIOKAkyBpdCYjMzk7cyBjcnVjaWFsIHRvIHVuZGVyc3RhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSBhbHRlcmVkIGZ1bmN0aW9uLiBJIG5lZWQgdG8gbWFwIG91dCB0aGUgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMgYW5kIHVuZGVyc3RhbmQgdGhlIHNjb3BlIG9mIHRoZSBwb3RlbnRpYWwgaW1wYWN0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMiAxMzoxMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBYODZfUFREVU1QJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTIgMTM6MTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQzNzUKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiAxMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgYXNzdW1pbmcgSSYjMzk7bSBhbiBleHBlcnQgaW4gdGhpcyBmaWVsZCwgYW5kIHJlbmRlcmVkIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKkludmVzdGlnYXRpbmcgQ29yZSBEdW1wcyBhbmQgUG90ZW50aWFsIFN5c3RlbSBJbmZvcm1hdGlvbioqCgpNeSBpbW1lZGlhdGUgdGhvdWdodCwgd2hlbiBzZWVpbmcgdGhpcywgaXM6ICYjMzQ7UmlnaHQsIGBDT05GSUdfUFREVU1QX0NPUkVgLi4uIHdoYXQgYWJvdXQgaXQ/JiMzNDsgVGhpcyBzcGVjaWZpYyBjb25maWd1cmF0aW9uIG9wdGlvbiBpbW1lZGlhdGVseSBwaXF1ZXMgbXkgaW50ZXJlc3QgYmVjYXVzZSBpdCYjMzk7cyBkaXJlY3RseSByZWxhdGVkIHRvIHRoZSBnZW5lcmF0aW9uIGFuZCBoYW5kbGluZyBvZiBjb3JlIGR1bXBzLCB3aGljaCBhcmUgaW52YWx1YWJsZSBmb3IgZGVidWdnaW5nIGNyYXNoZXMgYW5kIHVuZGVyc3RhbmRpbmcgc3lzdGVtIGJlaGF2aW9yLiBJcyB0aGlzIG9wdGlvbiBlbmFibGVkPyBEaXNhYmxlZD8gV2hhdCYjMzk7cyB0aGUgY29udGV4dD8gQXJlIHdlIGxvb2tpbmcgdG8gYW5hbHl6ZSBhIHNwZWNpZmljIGNvcmUgZHVtcCwgb3IgaXMgdGhpcyBhYm91dCBzeXN0ZW0gY29uZmlndXJhdGlvbiBpbiBnZW5lcmFsPyBEZXBlbmRpbmcgb24gdGhlIHByb2plY3QsIHRoZSBhbnN3ZXJzIHRvIHRob3NlIHF1ZXN0aW9ucyBjYW4gc2lnbmlmaWNhbnRseSBjaGFuZ2UgbXkgbmV4dCBzdGVwcy4gSSYjMzk7bGwgbmVlZCB0byByZW1lbWJlciB0byBjaGVjayBpZiBpdCYjMzk7cyBvbiBvciBvZmYhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEyIDEzOjEzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFBURFVNUF9DT1JFJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTIgMTM6MTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQ1OTEKCQkJCQkJCW91dHB1dDogMTgKCQkJCQkJCXRob3VnaHRzOiAzMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0JiMzOTtzIGludGVybmFsIG1vbm9sb2d1ZToKCioqUXVpY2sgU2NhbjogUFREVU1QIE9wdGlvbnMqKgoKQWxyaWdodCwgdGhpcyBsb29rcyBzdHJhaWdodGZvcndhcmQuIFNlZW1zIGxpa2Ugd2UmIzM5O3JlIHplcm9pbmcgaW4gb24ga2VybmVsIGRlYnVnZ2luZyB0b29scyByZWxhdGVkIHRvIHBhZ2UgdGFibGUgZHVtcHMsIHNwZWNpZmljYWxseSBgQ09ORklHX1BURFVNUGAgYW5kIGBDT05GSUdfUFREVU1QX0RFQlVHRlNgLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgbGV0JiMzOTtzIGp1c3QgbWFrZSBzdXJlIHdlIHVuZGVyc3RhbmQgdGhlIHNjb3BlIG9mIGBDT05GSUdfUFREVU1QYC4gVGhhdCYjMzk7cyB0aGUgYmFzZWxpbmUsIHRoZSBjb3JlIGZ1bmN0aW9uYWxpdHkuIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgdGhlIGV4YWN0IGRlZmluaXRpb24gYW5kIHVzYWdlIG9mIHRoaXMgb3B0aW9uLiBJIHdhbnQgdG8gc2VlIGhvdyB0aGlzIHdvcmtzIGFuZCBhbnkgcG90ZW50aWFsIGNhdmVhdHMuIEkmIzM5O20gYXNzdW1pbmcgdGhhdCBgQ09ORklHX1BURFVNUF9ERUJVR0ZTYCBidWlsZHMgb24gdG9wIG9mIGBDT05GSUdfUFREVU1QYCwgbGlrZWx5IGVuYWJsaW5nIGFjY2VzcyB2aWEgZGVidWdmcy4gTGV0JiMzOTtzIGRpZyBpbiBhbmQgZmlndXJlIG91dCBob3cgaXQgYWxsIGZpdHMgdG9nZXRoZXIuIFRoaXMgc2hvdWxkIGJlIGEgcXVpY2sgb25lLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMiAxMzoxMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgUFREVU1QJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvYXJtNjQva3ZtL0tjb25maWc9NDU9aWYgS1ZNXG5hcmNoL2FybTY0L2t2bS9LY29uZmlnLTQ2LVxuYXJjaC9hcm02NC9rdm0vS2NvbmZpZzo0Nzpjb25maWcgUFREVU1QX1NUQUdFMl9ERUJVR0ZTXG5hcmNoL2FybTY0L2t2bS9LY29uZmlnLTQ4LVx0Ym9vbCBcJiMzNDtQcmVzZW50IHRoZSBzdGFnZS0yIHBhZ2V0YWJsZXMgdG8gZGVidWdmc1wmIzM0O1xuLS1cbm1tL0tjb25maWcuZGVidWc9MjE2PWNvbmZpZyBBUkNIX0hBU19QVERVTVBcbi0tXG5tbS9LY29uZmlnLmRlYnVnLTIxOC1cbm1tL0tjb25maWcuZGVidWc6MjE5OmNvbmZpZyBQVERVTVBcbm1tL0tjb25maWcuZGVidWctMjIwLVx0Ym9vbFxubW0vS2NvbmZpZy5kZWJ1Zy0yMjEtXG5tbS9LY29uZmlnLmRlYnVnOjIyMjpjb25maWcgUFREVU1QX0RFQlVHRlNcbm1tL0tjb25maWcuZGVidWctMjIzLVx0Ym9vbCBcJiMzNDtFeHBvcnQga2VybmVsIHBhZ2V0YWJsZSBsYXlvdXQgdG8gdXNlcnNwYWNlIHZpYSBkZWJ1Z2ZzXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEyIDEzOjEzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1MDU1CgkJCQkJCQlvdXRwdXQ6IDE1NAoJCQkJCQkJdGhvdWdodHM6IDMxMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiBUaGlzIEtlcm5lbCBQYXRjaCoqCgpPa2F5LCBzbyBoZXJlJiMzOTtzIHdoYXQgSSYjMzk7bSB0aGlua2luZyBhYm91dCB0aGlzIHBhdGNoLiBgQ09ORklHX1BURFVNUGAgaXMgYSBib29sZWFuLCBidXQgaXQmIzM5O3MgaW5kaXJlY3RseSBlbmFibGVkIGJ5IGBQVERVTVBfREVCVUdGU2AuIFRoYXQgbWVhbnMgYFBURFVNUF9ERUJVR0ZTYCBpcyB0aGUgcmVhbCBrZXkgdG8gZW5hYmxpbmcgdGhlIGZ1bmN0aW9uYWxpdHkgd2UmIzM5O3JlIGludGVyZXN0ZWQgaW4uCgpGcm9tIG15IGV4cGVydCBwZXJzcGVjdGl2ZSwgdGhpcyBkZWZpbml0ZWx5IGxvb2tzIHdvcnRoIGZ1enppbmcuIFRoZSBwYXRjaCBpcyBjaGFuZ2luZyBjb3JlIGtlcm5lbCBsb2dpYywgc3BlY2lmaWNhbGx5IGFyb3VuZCBwYWdlIHRhYmxlIGR1bXBpbmcgYW5kIGhvdyB2bWFsbG9jIGh1Z2UgcGFnZXMgYXJlIG1hcHBlZC4gVGhlIGZhY3QgdGhhdCB0aGV5JiMzOTtyZSBhZGRpbmcgbG9ja2luZyBvbiBgaW5pdF9tbWAgdG8gYXZvaWQgdXNlLWFmdGVyLWZyZWUgY29uZGl0aW9ucyBkdXJpbmcgY29uY3VycmVudCBwYWdlIHRhYmxlIG1vZGlmaWNhdGlvbnMgaW1tZWRpYXRlbHkgZ3JhYnMgbXkgYXR0ZW50aW9uIOKAkyB0aGF0JiMzOTtzIGEgY2xhc3NpYyBhcmVhIGZvciBtZW1vcnkgY29ycnVwdGlvbiBidWdzLiBBbmQsIGNydWNpYWxseSwgdGhpcyBmdW5jdGlvbmFsaXR5IGlzIGFjY2Vzc2libGUgdGhyb3VnaCBkZWJ1Z2ZzIGFuZCB2bWFsbG9jIGNhbGxzLCB3aGljaCBtYWtlcyBpdCBlYXNpZXIgdG8gdHJpZ2dlciBpbiBhIGNvbnRyb2xsZWQgZW52aXJvbm1lbnQuCgpUaGUga2V5IHN5bWJvbHMgSSYjMzk7dmUgaWRlbnRpZmllZCBhcyBsaWtlbHkgdGFyZ2V0cyBhcmU6CgoqICAgYHZtYXBfdHJ5X2h1Z2VfcG1kYAoqICAgYHZtYXBfdHJ5X2h1Z2VfcHVkYAoqICAgYHZtYXBfdHJ5X2h1Z2VfcDRkYAoqICAgYGNwYV9jb2xsYXBzZV9sYXJnZV9wYWdlc2AKKiAgIGBwdGR1bXBfd2Fsa19wZ2RgCiogICBgd2Fsa19wYWdlX3JhbmdlX2RlYnVnYAoKSSYjMzk7dmUgY29uZmlybWVkIHRoYXQgYGNwYV9jb2xsYXBzZV9sYXJnZV9wYWdlc2AgYW5kIGB2bWFwX3RyeV9odWdlX3BtZGAgYXJlIHN0YXRpYyBmdW5jdGlvbnMsIHdoaWNoIGlzIGZpbmUgdG8gaW5jbHVkZSBzaW5jZSB0aGV5IGFyZSByZWxldmFudCB0byB0aGUgcGF0Y2guIFRoZSBvdGhlciBmdW5jdGlvbnMgYXJlIGV4cG9ydGVkL2dsb2JhbC4KClNvLCBpbiBzaG9ydCwgSSYjMzk7bGwgYmUgZW5hYmxpbmcgYFBURFVNUF9ERUJVR0ZTYCBhcyB0aGUgY29uZmlndXJhdGlvbiBvcHRpb24gdG8gZm9jdXMgb24sIGFuZCB3aWxsIGNvbmNlbnRyYXRlIG15IGZ1enppbmcgZWZmb3J0cyBvbiB0aGVzZSBzcGVjaWZpYyBmdW5jdGlvbnMuIE5vdywgbGV0JiMzOTtzIGdldCB0aGUgcmVzdWx0cyBzZXQgdXAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEyIDEzOjEzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtQVERVTVBfREVCVUdGUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3ZtYXBfdHJ5X2h1Z2VfcG1kJiMzNDssCiAgICAmIzM0O3ZtYXBfdHJ5X2h1Z2VfcHVkJiMzNDssCiAgICAmIzM0O3ZtYXBfdHJ5X2h1Z2VfcDRkJiMzNDssCiAgICAmIzM0O2NwYV9jb2xsYXBzZV9sYXJnZV9wYWdlcyYjMzQ7LAogICAgJiMzNDtwdGR1bXBfd2Fsa19wZ2QmIzM0OywKICAgICYjMzQ7d2Fsa19wYWdlX3JhbmdlX2RlYnVnJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUga2VybmVsIGxvZ2ljIGZvciBwYWdlIHRhYmxlIGR1bXBpbmcgYW5kIHZtYWxsb2MgaHVnZSBwYWdlIG1hcHBpbmdzLCBpbnRyb2R1Y2luZyBsb2NraW5nIG9uIGBpbml0X21tYCB0byBwcmV2ZW50IHVzZS1hZnRlci1mcmVlIGR1cmluZyBjb25jdXJyZW50IHBhZ2UgdGFibGUgbW9kaWZpY2F0aW9ucy4gVGhpcyBpcyByZWFjaGFibGUgdmlhIGRlYnVnZnMgYW5kIHZtYWxsb2MgY2FsbHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1BURFVNUF9ERUJVR0ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dm1hcF90cnlfaHVnZV9wbWQmIzM0OywKICAgICYjMzQ7dm1hcF90cnlfaHVnZV9wdWQmIzM0OywKICAgICYjMzQ7dm1hcF90cnlfaHVnZV9wNGQmIzM0OywKICAgICYjMzQ7Y3BhX2NvbGxhcHNlX2xhcmdlX3BhZ2VzJiMzNDssCiAgICAmIzM0O3B0ZHVtcF93YWxrX3BnZCYjMzQ7LAogICAgJiMzNDt3YWxrX3BhZ2VfcmFuZ2VfZGVidWcmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBrZXJuZWwgbG9naWMgZm9yIHBhZ2UgdGFibGUgZHVtcGluZyBhbmQgdm1hbGxvYyBodWdlIHBhZ2UgbWFwcGluZ3MsIGludHJvZHVjaW5nIGxvY2tpbmcgb24gYGluaXRfbW1gIHRvIHByZXZlbnQgdXNlLWFmdGVyLWZyZWUgZHVyaW5nIGNvbmN1cnJlbnQgcGFnZSB0YWJsZSBtb2RpZmljYXRpb25zLiBUaGlzIGlzIHJlYWNoYWJsZSB2aWEgZGVidWdmcyBhbmQgdm1hbGxvYyBjYWxscy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEyVDEzOjEyOjAwLjgyNDQwMjgzOVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc3MjA0NTIxMjE2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlBURFVNUF9ERUJVR0ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidm1hcF90cnlfaHVnZV9wbWRcIixcbiAgICBcInZtYXBfdHJ5X2h1Z2VfcHVkXCIsXG4gICAgXCJ2bWFwX3RyeV9odWdlX3A0ZFwiLFxuICAgIFwiY3BhX2NvbGxhcHNlX2xhcmdlX3BhZ2VzXCIsXG4gICAgXCJwdGR1bXBfd2Fsa19wZ2RcIixcbiAgICBcIndhbGtfcGFnZV9yYW5nZV9kZWJ1Z1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUga2VybmVsIGxvZ2ljIGZvciBwYWdlIHRhYmxlIGR1bXBpbmcgYW5kIHZtYWxsb2MgaHVnZSBwYWdlIG1hcHBpbmdzLCBpbnRyb2R1Y2luZyBsb2NraW5nIG9uIGBpbml0X21tYCB0byBwcmV2ZW50IHVzZS1hZnRlci1mcmVlIGR1cmluZyBjb25jdXJyZW50IHBhZ2UgdGFibGUgbW9kaWZpY2F0aW9ucy4gVGhpcyBpcyByZWFjaGFibGUgdmlhIGRlYnVnZnMgYW5kIHZtYWxsb2MgY2FsbHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEyVDEzOjEyOjAwLjgyNDQwNzYxOVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTI4MzU5NjE4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgZTViZjhkZDk4MTMyZDdlNjExZjM2NmM2MTRkZmU1OTc4OGQwNWUzY1xcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgU3VuIEp1bCAxMiAxMzoxMTo1OSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3B0ZHVtcC5oIGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9wdGR1bXAuaFxcbmluZGV4IDViMzc0YTZhYjM0YTRlLi41MGExOTVlZGE4ZWQyMiAxMDA2NDRcXG4tLS0gYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3B0ZHVtcC5oXFxuKysrIGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9wdGR1bXAuaFxcbkBAIC03LDggKzcsNiBAQFxcbiBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3B0ZHVtcC5oXFx1MDAzZVxcbiBcXG4tREVDTEFSRV9TVEFUSUNfS0VZX0ZBTFNFKGFybTY0X3B0ZHVtcF9sb2NrX2tleSk7XFxuLVxcbiAjaWZkZWYgQ09ORklHX1BURFVNUFxcbiBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L21tX3R5cGVzLmhcXHUwMDNlXFxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvbW0vbW11LmMgYi9hcmNoL2FybTY0L21tL21tdS5jXFxuaW5kZXggYTI1ZDhiZWFjYzgzMTAuLmJkNTJmY2E2ZTg3MjBiIDEwMDY0NFxcbi0tLSBhL2FyY2gvYXJtNjQvbW0vbW11LmNcXG4rKysgYi9hcmNoL2FybTY0L21tL21tdS5jXFxuQEAgLTQ5LDggKzQ5LDYgQEBcXG4gI2RlZmluZSBOT19DT05UX01BUFBJTkdTXFx0QklUKDEpXFxuICNkZWZpbmUgTk9fRVhFQ19NQVBQSU5HU1xcdEJJVCgyKVxcdC8qIGFzc3VtZXMgRkVBVF9IUERTIGlzIG5vdCB1c2VkICovXFxuIFxcbi1ERUZJTkVfU1RBVElDX0tFWV9GQUxTRShhcm02NF9wdGR1bXBfbG9ja19rZXkpO1xcbi1cXG4gdTY0IGtpbWFnZV92b2Zmc2V0IF9fcm9fYWZ0ZXJfaW5pdDtcXG4gRVhQT1JUX1NZTUJPTChraW1hZ2Vfdm9mZnNldCk7XFxuIFxcbkBAIC0xODY0LDggKzE4NjIsNyBAQCBpbnQgcG1kX2NsZWFyX2h1Z2UocG1kX3QgKnBtZHApXFxuIFxcdHJldHVybiAxO1xcbiB9XFxuIFxcbi1zdGF0aWMgaW50IF9fcG1kX2ZyZWVfcHRlX3BhZ2UocG1kX3QgKnBtZHAsIHVuc2lnbmVkIGxvbmcgYWRkcixcXG4tXFx0XFx0XFx0ICAgICAgIGJvb2wgYWNxdWlyZV9tbWFwX2xvY2spXFxuK2ludCBwbWRfZnJlZV9wdGVfcGFnZShwbWRfdCAqcG1kcCwgdW5zaWduZWQgbG9uZyBhZGRyKVxcbiB7XFxuIFxcdHB0ZV90ICp0YWJsZTtcXG4gXFx0cG1kX3QgcG1kO1xcbkBAIC0xODc3LDI1ICsxODc0LDEzIEBAIHN0YXRpYyBpbnQgX19wbWRfZnJlZV9wdGVfcGFnZShwbWRfdCAqcG1kcCwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbiBcXHRcXHRyZXR1cm4gMTtcXG4gXFx0fVxcbiBcXG4tXFx0LyogU2VlIGNvbW1lbnQgaW4gcHVkX2ZyZWVfcG1kX3BhZ2UgZm9yIHN0YXRpYyBrZXkgbG9naWMgKi9cXG4gXFx0dGFibGUgPSBwdGVfb2Zmc2V0X2tlcm5lbChwbWRwLCBhZGRyKTtcXG4gXFx0cG1kX2NsZWFyKHBtZHApO1xcbiBcXHRfX2ZsdXNoX3RsYl9rZXJuZWxfcGd0YWJsZShhZGRyKTtcXG4tXFx0aWYgKHN0YXRpY19icmFuY2hfdW5saWtlbHkoXFx1MDAyNmFybTY0X3B0ZHVtcF9sb2NrX2tleSkgXFx1MDAyNlxcdTAwMjYgYWNxdWlyZV9tbWFwX2xvY2spIHtcXG4tXFx0XFx0bW1hcF9yZWFkX2xvY2soXFx1MDAyNmluaXRfbW0pO1xcbi1cXHRcXHRtbWFwX3JlYWRfdW5sb2NrKFxcdTAwMjZpbml0X21tKTtcXG4tXFx0fVxcbi1cXG4gXFx0cHRlX2ZyZWVfa2VybmVsKE5VTEwsIHRhYmxlKTtcXG4gXFx0cmV0dXJuIDE7XFxuIH1cXG4gXFxuLWludCBwbWRfZnJlZV9wdGVfcGFnZShwbWRfdCAqcG1kcCwgdW5zaWduZWQgbG9uZyBhZGRyKVxcbi17XFxuLVxcdC8qIElmIHB0ZHVtcCBpcyB3YWxraW5nIHRoZSBwYWdldGFibGVzLCBhY3F1aXJlIGluaXRfbW0ubW1hcF9sb2NrICovXFxuLVxcdHJldHVybiBfX3BtZF9mcmVlX3B0ZV9wYWdlKHBtZHAsIGFkZHIsIC8qIGFjcXVpcmVfbW1hcF9sb2NrID0gKi8gdHJ1ZSk7XFxuLX1cXG4tXFxuIGludCBwdWRfZnJlZV9wbWRfcGFnZShwdWRfdCAqcHVkcCwgdW5zaWduZWQgbG9uZyBhZGRyKVxcbiB7XFxuIFxcdHBtZF90ICp0YWJsZTtcXG5AQCAtMTkxMSwzNiArMTg5NiwxNiBAQCBpbnQgcHVkX2ZyZWVfcG1kX3BhZ2UocHVkX3QgKnB1ZHAsIHVuc2lnbmVkIGxvbmcgYWRkcilcXG4gXFx0fVxcbiBcXG4gXFx0dGFibGUgPSBwbWRfb2Zmc2V0KHB1ZHAsIGFkZHIpO1xcbi1cXG4tXFx0LypcXG4tXFx0ICogT3VyIG9iamVjdGl2ZSBpcyB0byBwcmV2ZW50IHB0ZHVtcCBmcm9tIHJlYWRpbmcgYSBQTUQgdGFibGUgd2hpY2ggaGFzXFxuLVxcdCAqIGJlZW4gZnJlZWQuIEluIHRoaXMgcmFjZSwgaWYgcHVkX2ZyZWVfcG1kX3BhZ2Ugb2JzZXJ2ZXMgdGhlIGtleSBvblxcbi1cXHQgKiAod2hpY2ggZ290IGZsaXBwZWQgYnkgcHRkdW1wKSB0aGVuIHRoZSBtbWFwIGxvY2sgc2VxdWVuY2UgaGVyZSB3aWxsLFxcbi1cXHQgKiBhcyBhIHJlc3VsdCBvZiB0aGUgbW1hcCB3cml0ZSBsb2NrL3VubG9jayBzZXF1ZW5jZSBpbiBwdGR1bXAsIGdpdmVcXG4tXFx0ICogdXMgdGhlIGNvcnJlY3Qgc3luY2hyb25pemF0aW9uLiBJZiBub3QsIHRoaXMgbWVhbnMgdGhhdCBwdGR1bXAgaGFzXFxuLVxcdCAqIHlldCBub3Qgc3RhcnRlZCB3YWxraW5nIHRoZSBwYWdldGFibGVzIC0gdGhlIHNlcXVlbmNlIG9mIGJhcnJpZXJzXFxuLVxcdCAqIGlzc3VlZCBieSBfX2ZsdXNoX3RsYl9rZXJuZWxfcGd0YWJsZSgpIGd1YXJhbnRlZXMgdGhhdCBwdGR1bXAgd2lsbFxcbi1cXHQgKiBvYnNlcnZlIGFuIGVtcHR5IFBVRC5cXG4tXFx0ICovXFxuLVxcdHB1ZF9jbGVhcihwdWRwKTtcXG4tXFx0X19mbHVzaF90bGJfa2VybmVsX3BndGFibGUoYWRkcik7XFxuLVxcdGlmIChzdGF0aWNfYnJhbmNoX3VubGlrZWx5KFxcdTAwMjZhcm02NF9wdGR1bXBfbG9ja19rZXkpKSB7XFxuLVxcdFxcdG1tYXBfcmVhZF9sb2NrKFxcdTAwMjZpbml0X21tKTtcXG4tXFx0XFx0bW1hcF9yZWFkX3VubG9jayhcXHUwMDI2aW5pdF9tbSk7XFxuLVxcdH1cXG4tXFxuIFxcdHBtZHAgPSB0YWJsZTtcXG4gXFx0bmV4dCA9IGFkZHI7XFxuIFxcdGVuZCA9IGFkZHIgKyBQVURfU0laRTtcXG4gXFx0ZG8ge1xcbiBcXHRcXHRpZiAocG1kX3ByZXNlbnQocG1kcF9nZXQocG1kcCkpKVxcbi1cXHRcXHRcXHQvKlxcbi1cXHRcXHRcXHQgKiBQTUQgaGFzIGJlZW4gaXNvbGF0ZWQsIHNvIHB0ZHVtcCB3b24ndCBzZWUgaXQuIE5vXFxuLVxcdFxcdFxcdCAqIG5lZWQgdG8gYWNxdWlyZSBpbml0X21tLm1tYXBfbG9jay5cXG4tXFx0XFx0XFx0ICovXFxuLVxcdFxcdFxcdF9fcG1kX2ZyZWVfcHRlX3BhZ2UocG1kcCwgbmV4dCwgLyogYWNxdWlyZV9tbWFwX2xvY2sgPSAqLyBmYWxzZSk7XFxuK1xcdFxcdFxcdHBtZF9mcmVlX3B0ZV9wYWdlKHBtZHAsIG5leHQpO1xcbiBcXHR9IHdoaWxlIChwbWRwKyssIG5leHQgKz0gUE1EX1NJWkUsIG5leHQgIT0gZW5kKTtcXG4gXFxuK1xcdHB1ZF9jbGVhcihwdWRwKTtcXG4rXFx0X19mbHVzaF90bGJfa2VybmVsX3BndGFibGUoYWRkcik7XFxuIFxcdHBtZF9mcmVlKE5VTEwsIHRhYmxlKTtcXG4gXFx0cmV0dXJuIDE7XFxuIH1cXG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9tbS9wdGR1bXAuYyBiL2FyY2gvYXJtNjQvbW0vcHRkdW1wLmNcXG5pbmRleCAxYzIwMTQ0NzAwZDdkNy4uNWE3NmM1OWI1YWRhNTUgMTAwNjQ0XFxuLS0tIGEvYXJjaC9hcm02NC9tbS9wdGR1bXAuY1xcbisrKyBiL2FyY2gvYXJtNjQvbW0vcHRkdW1wLmNcXG5AQCAtMjgzLDEzICsyODMsNiBAQCB2b2lkIG5vdGVfcGFnZV9mbHVzaChzdHJ1Y3QgcHRkdW1wX3N0YXRlICpwdF9zdClcXG4gXFx0bm90ZV9wYWdlKHB0X3N0LCAwLCAtMSwgcHRlX3ZhbChwdGVfemVybykpO1xcbiB9XFxuIFxcbi1zdGF0aWMgdm9pZCBhcm02NF9wdGR1bXBfd2Fsa19wZ2Qoc3RydWN0IHB0ZHVtcF9zdGF0ZSAqc3QsIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxcbi17XFxuLVxcdHN0YXRpY19icmFuY2hfaW5jKFxcdTAwMjZhcm02NF9wdGR1bXBfbG9ja19rZXkpO1xcbi1cXHRwdGR1bXBfd2Fsa19wZ2Qoc3QsIG1tLCBOVUxMKTtcXG4tXFx0c3RhdGljX2JyYW5jaF9kZWMoXFx1MDAyNmFybTY0X3B0ZHVtcF9sb2NrX2tleSk7XFxuLX1cXG4tXFxuIHZvaWQgcHRkdW1wX3dhbGsoc3RydWN0IHNlcV9maWxlICpzLCBzdHJ1Y3QgcHRkdW1wX2luZm8gKmluZm8pXFxuIHtcXG4gXFx0dW5zaWduZWQgbG9uZyBlbmQgPSB+MFVMO1xcbkBAIC0zMTgsNyArMzExLDcgQEAgdm9pZCBwdGR1bXBfd2FsayhzdHJ1Y3Qgc2VxX2ZpbGUgKnMsIHN0cnVjdCBwdGR1bXBfaW5mbyAqaW5mbylcXG4gXFx0XFx0fVxcbiBcXHR9O1xcbiBcXG4tXFx0YXJtNjRfcHRkdW1wX3dhbGtfcGdkKFxcdTAwMjZzdC5wdGR1bXAsIGluZm8tXFx1MDAzZW1tKTtcXG4rXFx0cHRkdW1wX3dhbGtfcGdkKFxcdTAwMjZzdC5wdGR1bXAsIGluZm8tXFx1MDAzZW1tLCBOVUxMKTtcXG4gfVxcbiBcXG4gc3RhdGljIHZvaWQgX19pbml0IHB0ZHVtcF9pbml0aWFsaXplKHZvaWQpXFxuQEAgLTM2MCw3ICszNTMsNyBAQCBib29sIHB0ZHVtcF9jaGVja193eCh2b2lkKVxcbiBcXHRcXHR9XFxuIFxcdH07XFxuIFxcbi1cXHRhcm02NF9wdGR1bXBfd2Fsa19wZ2QoXFx1MDAyNnN0LnB0ZHVtcCwgXFx1MDAyNmluaXRfbW0pO1xcbitcXHRwdGR1bXBfd2Fsa19wZ2QoXFx1MDAyNnN0LnB0ZHVtcCwgXFx1MDAyNmluaXRfbW0sIE5VTEwpO1xcbiBcXG4gXFx0aWYgKHN0Lnd4X3BhZ2VzIHx8IHN0LnV4bl9wYWdlcykge1xcbiBcXHRcXHRwcl93YXJuKFxcXCJDaGVja2VkIFcrWCBtYXBwaW5nczogRkFJTEVELCAlbHUgVytYIHBhZ2VzIGZvdW5kLCAlbHUgbm9uLVVYTiBwYWdlcyBmb3VuZFxcXFxuXFxcIixcXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYyBiL2FyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmNcXG5pbmRleCBkMDIzYTQwYTFlMDM0NS4uNGM0YjgyNDQ1MDJmY2UgMTAwNjQ0XFxuLS0tIGEvYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuY1xcbisrKyBiL2FyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmNcXG5AQCAtMjIsNiArMjIsNyBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvY2NfcGxhdGZvcm0uaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3NldF9tZW1vcnkuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L21lbXJlZ2lvbi5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvY2xlYW51cC5oXFx1MDAzZVxcbiBcXG4gI2luY2x1ZGUgXFx1MDAzY2FzbS9lODIwL2FwaS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjYXNtL3Byb2Nlc3Nvci5oXFx1MDAzZVxcbkBAIC00MzYsOSArNDM3LDE2IEBAIHN0YXRpYyB2b2lkIGNwYV9jb2xsYXBzZV9sYXJnZV9wYWdlcyhzdHJ1Y3QgY3BhX2RhdGEgKmNwYSlcXG4gXFxuIFxcdGZsdXNoX3RsYl9hbGwoKTtcXG4gXFxuLVxcdGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShwdGRlc2MsIHRtcCwgXFx1MDAyNnBndGFibGVzLCBwdF9saXN0KSB7XFxuLVxcdFxcdGxpc3RfZGVsKFxcdTAwMjZwdGRlc2MtXFx1MDAzZXB0X2xpc3QpO1xcbi1cXHRcXHRwYWdldGFibGVfZnJlZShwdGRlc2MpO1xcbitcXHQvKlxcbitcXHQgKiBwdGR1bXAgbWlnaHQgcmVhZCB0aGVzZSBwYWdlIHRhYmxlcywgc28gYXZvaWQgYSB1c2UtYWZ0ZXItZnJlZSBieVxcbitcXHQgKiBhY3F1aXJpbmcgdGhlIG1tYXAgcmVhZCBsb2NrIG9uIGluaXRfbW0gKHB0ZHVtcCBhY3F1aXJlcyB0aGUgbW1hcFxcbitcXHQgKiB3cml0ZSBsb2NrKS5cXG4rXFx0ICovXFxuK1xcdHNjb3BlZF9ndWFyZChtbWFwX3JlYWRfbG9jaywgXFx1MDAyNmluaXRfbW0pIHtcXG4rXFx0XFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHB0ZGVzYywgdG1wLCBcXHUwMDI2cGd0YWJsZXMsIHB0X2xpc3QpIHtcXG4rXFx0XFx0XFx0bGlzdF9kZWwoXFx1MDAyNnB0ZGVzYy1cXHUwMDNlcHRfbGlzdCk7XFxuK1xcdFxcdFxcdHBhZ2V0YWJsZV9mcmVlKHB0ZGVzYyk7XFxuK1xcdFxcdH1cXG4gXFx0fVxcbiB9XFxuIFxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21tYXBfbG9jay5oIGIvaW5jbHVkZS9saW51eC9tbWFwX2xvY2suaFxcbmluZGV4IDA0YjhmNjFlY2U1ZDhlLi42YjVjMjM5MGNjMzAxZiAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L21tYXBfbG9jay5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9tbWFwX2xvY2suaFxcbkBAIC02MjEsNiArNjIxLDcgQEAgc3RhdGljIGlubGluZSB2b2lkIG1tYXBfcmVhZF91bmxvY2soc3RydWN0IG1tX3N0cnVjdCAqbW0pXFxuIFxcbiBERUZJTkVfR1VBUkQobW1hcF9yZWFkX2xvY2ssIHN0cnVjdCBtbV9zdHJ1Y3QgKixcXG4gXFx0ICAgICBtbWFwX3JlYWRfbG9jayhfVCksIG1tYXBfcmVhZF91bmxvY2soX1QpKVxcbitERUZJTkVfR1VBUkRfQ09ORChtbWFwX3JlYWRfbG9jaywgX3RyeSwgbW1hcF9yZWFkX3RyeWxvY2soX1QpKVxcbiBcXG4gc3RhdGljIGlubGluZSB2b2lkIG1tYXBfcmVhZF91bmxvY2tfbm9uX293bmVyKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxcbiB7XFxuZGlmZiAtLWdpdCBhL21tL3BhZ2V3YWxrLmMgYi9tbS9wYWdld2Fsay5jXFxuaW5kZXggM2FlMjU4NmZmNDViNDQuLjVkODdjNjMyYTI1NTA3IDEwMDY0NFxcbi0tLSBhL21tL3BhZ2V3YWxrLmNcXG4rKysgYi9tbS9wYWdld2Fsay5jXFxuQEAgLTY3OCw2ICs2NzgsOCBAQCBpbnQgd2Fsa19rZXJuZWxfcGFnZV90YWJsZV9yYW5nZV9sb2NrbGVzcyh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZFxcbiAgKiB3aWxsIGFsc28gbm90IGxvY2sgdGhlIFBURXMgZm9yIHRoZSBwdGVfZW50cnkoKSBjYWxsYmFjay5cXG4gICpcXG4gICogVGhpcyBpcyBmb3IgZGVidWdnaW5nIHB1cnBvc2VzIE9OTFkuXFxuKyAqXFxuKyAqIFRoZSBtbWFwIHdyaXRlIGxvY2sgbXVzdCBiZSBoZWxkLlxcbiAgKi9cXG4gaW50IHdhbGtfcGFnZV9yYW5nZV9kZWJ1ZyhzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBzdGFydCxcXG4gXFx0XFx0XFx0ICB1bnNpZ25lZCBsb25nIGVuZCwgY29uc3Qgc3RydWN0IG1tX3dhbGtfb3BzICpvcHMsXFxuQEAgLTY5MSwyNCArNjkzLDI4IEBAIGludCB3YWxrX3BhZ2VfcmFuZ2VfZGVidWcoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgc3RhcnQsXFxuIFxcdFxcdC5ub192bWFcXHRcXHQ9IHRydWVcXG4gXFx0fTtcXG4gXFxuLVxcdC8qIEZvciBjb252ZW5pZW5jZSwgd2UgYWxsb3cgdHJhdmVyc2FsIG9mIGtlcm5lbCBtYXBwaW5ncy4gKi9cXG4tXFx0aWYgKG1tID09IFxcdTAwMjZpbml0X21tKVxcbi1cXHRcXHRyZXR1cm4gd2Fsa19rZXJuZWxfcGFnZV90YWJsZV9yYW5nZShzdGFydCwgZW5kLCBvcHMsXFxuLVxcdFxcdFxcdFxcdFxcdFxcdCAgICBwZ2QsIHByaXZhdGUpO1xcbi1cXHRpZiAoc3RhcnQgXFx1MDAzZT0gZW5kIHx8ICF3YWxrLm1tKVxcbi1cXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4tXFx0aWYgKCFjaGVja19vcHNfc2FmZShvcHMpKVxcbi1cXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4tXFxuIFxcdC8qXFxuLVxcdCAqIFRoZSBtbWFwIGxvY2sgcHJvdGVjdHMgdGhlIHBhZ2Ugd2Fsa2VyIGZyb20gY2hhbmdlcyB0byB0aGUgcGFnZVxcbi1cXHQgKiB0YWJsZXMgZHVyaW5nIHRoZSB3YWxrLiAgSG93ZXZlciBhIHJlYWQgbG9jayBpcyBpbnN1ZmZpY2llbnQgdG9cXG4tXFx0ICogcHJvdGVjdCB0aG9zZSBhcmVhcyB3aGljaCBkb24ndCBoYXZlIGEgVk1BIGFzIG11bm1hcCgpIGRldGFjaGVzXFxuLVxcdCAqIHRoZSBWTUFzIGJlZm9yZSBkb3duZ3JhZGluZyB0byBhIHJlYWQgbG9jayBhbmQgYWN0dWFsbHkgdGVhcmluZ1xcbi1cXHQgKiBkb3duIFBURXMvcGFnZSB0YWJsZXMuIEluIHdoaWNoIGNhc2UsIHRoZSBtbWFwIHdyaXRlIGxvY2sgc2hvdWxkXFxuLVxcdCAqIGJlIGhlbGQuXFxuK1xcdCAqIFdoZW4gd2Fsa2luZyB1c2VybGFuZCBwYWdlIHRhYmxlcywgYW4gbW1hcCB3cml0ZSBsb2NrIG11c3QgYmUgaGVsZCB0b1xcbitcXHQgKiBhY2NvdW50IGZvciBtdW5tYXAoKSBkb3duZ3JhZGluZyB0byBhbiBtbWFwIHJlYWQgbG9jayB3aGVuIHRlYXJpbmdcXG4rXFx0ICogZG93biBwYWdlIHRhYmxlcy5cXG4rXFx0ICpcXG4rXFx0ICogV2hlbiB3YWxraW5nIGtlcm5lbCBwYWdlIHRhYmxlcywgYW4gbW1hcCB3cml0ZSBsb2NrIG11c3QgYWxzbyBiZSBoZWxkXFxuK1xcdCAqIHRvIGFjY291bnQgZm9yIHBhZ2UgdGFibGUgZnJlZWluZyBvbiB2bWFwIGh1Z2UgcGFnZSBtYXBwaW5nLlxcbiBcXHQgKi9cXG4gXFx0bW1hcF9hc3NlcnRfd3JpdGVfbG9ja2VkKG1tKTtcXG4rXFx0LypcXG4rXFx0ICogeDg2LCBhcm02NCBwdGR1bXAgYWxsb3cgd2Fsa3Mgb2YgZWZpIG1tJ3MgYW5kIHg4NiBwdGR1bXAgYWxsb3dzIHdhbGtzXFxuK1xcdCAqIG9mIGFyYml0cmFyeSBtbSdzLlxcbitcXHQgKlxcbitcXHQgKiBIb3dldmVyLCB0aGV5IGJvdGggbXVzdCBhbHNvIGhvbGQgdGhlIGluaXRfbW0gbG9jayB0byBhY2NvdW50IGZvclxcbitcXHQgKiBjb25jdXJyZW50IGtlcm5lbCBwYWdlIHRhYmxlIGZyZWVpbmcuXFxuK1xcdCAqL1xcbitcXHRtbWFwX2Fzc2VydF93cml0ZV9sb2NrZWQoXFx1MDAyNmluaXRfbW0pO1xcbitcXG4rXFx0aWYgKHN0YXJ0IFxcdTAwM2U9IGVuZClcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcdGlmICghY2hlY2tfb3BzX3NhZmUob3BzKSlcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIFxcbiBcXHRyZXR1cm4gd2Fsa19wZ2RfcmFuZ2Uoc3RhcnQsIGVuZCwgXFx1MDAyNndhbGspO1xcbiB9XFxuZGlmZiAtLWdpdCBhL21tL3B0ZHVtcC5jIGIvbW0vcHRkdW1wLmNcXG5pbmRleCA5NzMwMjAwMDAwOTZjZi4uNTg1MTA5NmU2ZjY1NmMgMTAwNjQ0XFxuLS0tIGEvbW0vcHRkdW1wLmNcXG4rKysgYi9tbS9wdGR1bXAuY1xcbkBAIC0xNzgsMTEgKzE3OCwxOCBAQCB2b2lkIHB0ZHVtcF93YWxrX3BnZChzdHJ1Y3QgcHRkdW1wX3N0YXRlICpzdCwgc3RydWN0IG1tX3N0cnVjdCAqbW0sIHBnZF90ICpwZ2QpXFxuIFxcbiBcXHRnZXRfb25saW5lX21lbXMoKTtcXG4gXFx0bW1hcF93cml0ZV9sb2NrKG1tKTtcXG4rXFx0LyogVG8gc3RhYmlsaXNlIGtlcm5lbCBwYWdlIHRhYmxlcyB3ZSBtdXN0IGhvbGQgdGhlIGluaXRfbW0gbG9jayB0b28uICovXFxuK1xcdGlmIChtbSAhPSBcXHUwMDI2aW5pdF9tbSlcXG4rXFx0XFx0bW1hcF93cml0ZV9sb2NrX25lc3RlZChcXHUwMDI2aW5pdF9tbSwgU0lOR0xFX0RFUFRIX05FU1RJTkcpO1xcbitcXG4gXFx0d2hpbGUgKHJhbmdlLVxcdTAwM2VzdGFydCAhPSByYW5nZS1cXHUwMDNlZW5kKSB7XFxuIFxcdFxcdHdhbGtfcGFnZV9yYW5nZV9kZWJ1ZyhtbSwgcmFuZ2UtXFx1MDAzZXN0YXJ0LCByYW5nZS1cXHUwMDNlZW5kLFxcbiBcXHRcXHRcXHRcXHQgICAgICBcXHUwMDI2cHRkdW1wX29wcywgcGdkLCBzdCk7XFxuIFxcdFxcdHJhbmdlKys7XFxuIFxcdH1cXG4rXFxuK1xcdGlmIChtbSAhPSBcXHUwMDI2aW5pdF9tbSlcXG4rXFx0XFx0bW1hcF93cml0ZV91bmxvY2soXFx1MDAyNmluaXRfbW0pO1xcbiBcXHRtbWFwX3dyaXRlX3VubG9jayhtbSk7XFxuIFxcdHB1dF9vbmxpbmVfbWVtcygpO1xcbiBcXG5kaWZmIC0tZ2l0IGEvbW0vdm1hbGxvYy5jIGIvbW0vdm1hbGxvYy5jXFxuaW5kZXggMWFmY2EzNTY4YjliNjUuLjQwMDU2M2FjNmQ1ZDdiIDEwMDY0NFxcbi0tLSBhL21tL3ZtYWxsb2MuY1xcbisrKyBiL21tL3ZtYWxsb2MuY1xcbkBAIC00Myw2ICs0Myw3IEBAXFxuICNpbmNsdWRlIFxcdTAwM2Nhc20vdGxiZmx1c2guaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2FzbS9zaG1wYXJhbS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvcGFnZV9vd25lci5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvY2xlYW51cC5oXFx1MDAzZVxcbiBcXG4gI2RlZmluZSBDUkVBVEVfVFJBQ0VfUE9JTlRTXFxuICNpbmNsdWRlIFxcdTAwM2N0cmFjZS9ldmVudHMvdm1hbGxvYy5oXFx1MDAzZVxcbkBAIC0xNTgsMTAgKzE1OSwyMiBAQCBzdGF0aWMgaW50IHZtYXBfdHJ5X2h1Z2VfcG1kKHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsXFxuIFxcdGlmICghSVNfQUxJR05FRChwaHlzX2FkZHIsIFBNRF9TSVpFKSlcXG4gXFx0XFx0cmV0dXJuIDA7XFxuIFxcbi1cXHRpZiAocG1kX3ByZXNlbnQoKnBtZCkgXFx1MDAyNlxcdTAwMjYgIXBtZF9mcmVlX3B0ZV9wYWdlKHBtZCwgYWRkcikpXFxuLVxcdFxcdHJldHVybiAwO1xcbitcXHRpZiAoIXBtZF9wcmVzZW50KCpwbWQpKVxcbitcXHRcXHRyZXR1cm4gcG1kX3NldF9odWdlKHBtZCwgcGh5c19hZGRyLCBwcm90KTtcXG4gXFxuLVxcdHJldHVybiBwbWRfc2V0X2h1Z2UocG1kLCBwaHlzX2FkZHIsIHByb3QpO1xcbitcXHQvKlxcbitcXHQgKiBLZXJuZWwgcGFnZSB0YWJsZSB3YWxrZXJzIGVpdGhlciB3YWxrIHJhbmdlcyB0aGV5IG93biBleGNsdXNpdmVseSBvclxcbitcXHQgKiBob2xkIHRoZSBtbWFwIHdyaXRlIGxvY2sgb24gaW5pdF9tbSAocHRkdW1wIGJlaW5nIHRoZSBtb3RpdmF0aW5nXFxuK1xcdCAqIGNhc2UpLlxcbitcXHQgKlxcbitcXHQgKiBUaGVyZWZvcmUsIGFjcXVpcmUgdGhlIG1tYXAgcmVhZCBsb2NrIHRvIHByZXZlbnQgdXNlLWFmdGVyLWZyZWUgd2hlblxcbitcXHQgKiBmcmVlaW5nIHBhZ2UgdGFibGVzLlxcbitcXHQgKi9cXG4rXFx0c2NvcGVkX2NvbmRfZ3VhcmQobW1hcF9yZWFkX2xvY2tfdHJ5LCByZXR1cm4gMCwgXFx1MDAyNmluaXRfbW0pIHtcXG4rXFx0XFx0aWYgKCFwbWRfZnJlZV9wdGVfcGFnZShwbWQsIGFkZHIpKVxcbitcXHRcXHRcXHRyZXR1cm4gMDtcXG4rXFx0XFx0cmV0dXJuIHBtZF9zZXRfaHVnZShwbWQsIHBoeXNfYWRkciwgcHJvdCk7XFxuK1xcdH1cXG4gfVxcbiBcXG4gc3RhdGljIGludCB2bWFwX3BtZF9yYW5nZShwdWRfdCAqcHVkLCB1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLFxcbkBAIC0yMTAsMTAgKzIyMywxNSBAQCBzdGF0aWMgaW50IHZtYXBfdHJ5X2h1Z2VfcHVkKHB1ZF90ICpwdWQsIHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsXFxuIFxcdGlmICghSVNfQUxJR05FRChwaHlzX2FkZHIsIFBVRF9TSVpFKSlcXG4gXFx0XFx0cmV0dXJuIDA7XFxuIFxcbi1cXHRpZiAocHVkX3ByZXNlbnQoKnB1ZCkgXFx1MDAyNlxcdTAwMjYgIXB1ZF9mcmVlX3BtZF9wYWdlKHB1ZCwgYWRkcikpXFxuLVxcdFxcdHJldHVybiAwO1xcbitcXHRpZiAoIXB1ZF9wcmVzZW50KCpwdWQpKVxcbitcXHRcXHRyZXR1cm4gcHVkX3NldF9odWdlKHB1ZCwgcGh5c19hZGRyLCBwcm90KTtcXG4gXFxuLVxcdHJldHVybiBwdWRfc2V0X2h1Z2UocHVkLCBwaHlzX2FkZHIsIHByb3QpO1xcbitcXHQvKiBTZWUgY29tbWVudCBpbiB2bWFwX3RyeV9odWdlX3BtZCgpLiAqL1xcbitcXHRzY29wZWRfY29uZF9ndWFyZChtbWFwX3JlYWRfbG9ja190cnksIHJldHVybiAwLCBcXHUwMDI2aW5pdF9tbSkge1xcbitcXHRcXHRpZiAoIXB1ZF9mcmVlX3BtZF9wYWdlKHB1ZCwgYWRkcikpXFxuK1xcdFxcdFxcdHJldHVybiAwO1xcbitcXHRcXHRyZXR1cm4gcHVkX3NldF9odWdlKHB1ZCwgcGh5c19hZGRyLCBwcm90KTtcXG4rXFx0fVxcbiB9XFxuIFxcbiBzdGF0aWMgaW50IHZtYXBfcHVkX3JhbmdlKHA0ZF90ICpwNGQsIHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsXFxuQEAgLTI2MiwxMCArMjgwLDE1IEBAIHN0YXRpYyBpbnQgdm1hcF90cnlfaHVnZV9wNGQocDRkX3QgKnA0ZCwgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCxcXG4gXFx0aWYgKCFJU19BTElHTkVEKHBoeXNfYWRkciwgUDREX1NJWkUpKVxcbiBcXHRcXHRyZXR1cm4gMDtcXG4gXFxuLVxcdGlmIChwNGRfcHJlc2VudCgqcDRkKSBcXHUwMDI2XFx1MDAyNiAhcDRkX2ZyZWVfcHVkX3BhZ2UocDRkLCBhZGRyKSlcXG4tXFx0XFx0cmV0dXJuIDA7XFxuK1xcdGlmICghcDRkX3ByZXNlbnQoKnA0ZCkpXFxuK1xcdFxcdHJldHVybiBwNGRfc2V0X2h1Z2UocDRkLCBwaHlzX2FkZHIsIHByb3QpO1xcbiBcXG4tXFx0cmV0dXJuIHA0ZF9zZXRfaHVnZShwNGQsIHBoeXNfYWRkciwgcHJvdCk7XFxuK1xcdC8qIFNlZSBjb21tZW50IGluIHZtYXBfdHJ5X2h1Z2VfcG1kKCkuICovXFxuK1xcdHNjb3BlZF9jb25kX2d1YXJkKG1tYXBfcmVhZF9sb2NrX3RyeSwgcmV0dXJuIDAsIFxcdTAwMjZpbml0X21tKSB7XFxuK1xcdFxcdGlmICghcDRkX2ZyZWVfcHVkX3BhZ2UocDRkLCBhZGRyKSlcXG4rXFx0XFx0XFx0cmV0dXJuIDA7XFxuK1xcdFxcdHJldHVybiBwNGRfc2V0X2h1Z2UocDRkLCBwaHlzX2FkZHIsIHByb3QpO1xcbitcXHR9XFxuIH1cXG4gXFxuIHN0YXRpYyBpbnQgdm1hcF9wNGRfcmFuZ2UocGdkX3QgKnBnZCwgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTJUMTM6MTI6MDEuMzUzNTU0OTE2WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3NjY3NTM2MTIwOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJQVERVTVBfREVCVUdGU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInZtYXBfdHJ5X2h1Z2VfcG1kXCIsXG4gICAgXCJ2bWFwX3RyeV9odWdlX3B1ZFwiLFxuICAgIFwidm1hcF90cnlfaHVnZV9wNGRcIixcbiAgICBcImNwYV9jb2xsYXBzZV9sYXJnZV9wYWdlc1wiLFxuICAgIFwicHRkdW1wX3dhbGtfcGdkXCIsXG4gICAgXCJ3YWxrX3BhZ2VfcmFuZ2VfZGVidWdcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBjb3JlIGtlcm5lbCBsb2dpYyBmb3IgcGFnZSB0YWJsZSBkdW1waW5nIGFuZCB2bWFsbG9jIGh1Z2UgcGFnZSBtYXBwaW5ncywgaW50cm9kdWNpbmcgbG9ja2luZyBvbiBgaW5pdF9tbWAgdG8gcHJldmVudCB1c2UtYWZ0ZXItZnJlZSBkdXJpbmcgY29uY3VycmVudCBwYWdlIHRhYmxlIG1vZGlmaWNhdGlvbnMuIFRoaXMgaXMgcmVhY2hhYmxlIHZpYSBkZWJ1Z2ZzIGFuZCB2bWFsbG9jIGNhbGxzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG5ldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0XG4gICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksXG4gICBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGU1YmY4ZGQ5ODEzMmQ3ZTYxMWYzNjZjNjE0ZGZlNTk3ODhkMDVlM2NcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU3VuIEp1bCAxMiAxMzoxMTo1OSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vcHRkdW1wLmggYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3B0ZHVtcC5oXG5pbmRleCA1YjM3NGE2YWIzNGE0ZS4uNTBhMTk1ZWRhOGVkMjIgMTAwNjQ0XG4tLS0gYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3B0ZHVtcC5oXG4rKysgYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3B0ZHVtcC5oXG5AQCAtNyw4ICs3LDYgQEBcbiBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9wdGR1bXAuaFx1MDAzZVxuIFxuLURFQ0xBUkVfU1RBVElDX0tFWV9GQUxTRShhcm02NF9wdGR1bXBfbG9ja19rZXkpO1xuLVxuICNpZmRlZiBDT05GSUdfUFREVU1QXG4gXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbW1fdHlwZXMuaFx1MDAzZVxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvbW0vbW11LmMgYi9hcmNoL2FybTY0L21tL21tdS5jXG5pbmRleCBhMjVkOGJlYWNjODMxMC4uYmQ1MmZjYTZlODcyMGIgMTAwNjQ0XG4tLS0gYS9hcmNoL2FybTY0L21tL21tdS5jXG4rKysgYi9hcmNoL2FybTY0L21tL21tdS5jXG5AQCAtNDksOCArNDksNiBAQFxuICNkZWZpbmUgTk9fQ09OVF9NQVBQSU5HU1x0QklUKDEpXG4gI2RlZmluZSBOT19FWEVDX01BUFBJTkdTXHRCSVQoMilcdC8qIGFzc3VtZXMgRkVBVF9IUERTIGlzIG5vdCB1c2VkICovXG4gXG4tREVGSU5FX1NUQVRJQ19LRVlfRkFMU0UoYXJtNjRfcHRkdW1wX2xvY2tfa2V5KTtcbi1cbiB1NjQga2ltYWdlX3ZvZmZzZXQgX19yb19hZnRlcl9pbml0O1xuIEVYUE9SVF9TWU1CT0woa2ltYWdlX3ZvZmZzZXQpO1xuIFxuQEAgLTE4NjQsOCArMTg2Miw3IEBAIGludCBwbWRfY2xlYXJfaHVnZShwbWRfdCAqcG1kcClcbiBcdHJldHVybiAxO1xuIH1cbiBcbi1zdGF0aWMgaW50IF9fcG1kX2ZyZWVfcHRlX3BhZ2UocG1kX3QgKnBtZHAsIHVuc2lnbmVkIGxvbmcgYWRkcixcbi1cdFx0XHQgICAgICAgYm9vbCBhY3F1aXJlX21tYXBfbG9jaylcbitpbnQgcG1kX2ZyZWVfcHRlX3BhZ2UocG1kX3QgKnBtZHAsIHVuc2lnbmVkIGxvbmcgYWRkcilcbiB7XG4gXHRwdGVfdCAqdGFibGU7XG4gXHRwbWRfdCBwbWQ7XG5AQCAtMTg3NywyNSArMTg3NCwxMyBAQCBzdGF0aWMgaW50IF9fcG1kX2ZyZWVfcHRlX3BhZ2UocG1kX3QgKnBtZHAsIHVuc2lnbmVkIGxvbmcgYWRkcixcbiBcdFx0cmV0dXJuIDE7XG4gXHR9XG4gXG4tXHQvKiBTZWUgY29tbWVudCBpbiBwdWRfZnJlZV9wbWRfcGFnZSBmb3Igc3RhdGljIGtleSBsb2dpYyAqL1xuIFx0dGFibGUgPSBwdGVfb2Zmc2V0X2tlcm5lbChwbWRwLCBhZGRyKTtcbiBcdHBtZF9jbGVhcihwbWRwKTtcbiBcdF9fZmx1c2hfdGxiX2tlcm5lbF9wZ3RhYmxlKGFkZHIpO1xuLVx0aWYgKHN0YXRpY19icmFuY2hfdW5saWtlbHkoXHUwMDI2YXJtNjRfcHRkdW1wX2xvY2tfa2V5KSBcdTAwMjZcdTAwMjYgYWNxdWlyZV9tbWFwX2xvY2spIHtcbi1cdFx0bW1hcF9yZWFkX2xvY2soXHUwMDI2aW5pdF9tbSk7XG4tXHRcdG1tYXBfcmVhZF91bmxvY2soXHUwMDI2aW5pdF9tbSk7XG4tXHR9XG4tXG4gXHRwdGVfZnJlZV9rZXJuZWwoTlVMTCwgdGFibGUpO1xuIFx0cmV0dXJuIDE7XG4gfVxuIFxuLWludCBwbWRfZnJlZV9wdGVfcGFnZShwbWRfdCAqcG1kcCwgdW5zaWduZWQgbG9uZyBhZGRyKVxuLXtcbi1cdC8qIElmIHB0ZHVtcCBpcyB3YWxraW5nIHRoZSBwYWdldGFibGVzLCBhY3F1aXJlIGluaXRfbW0ubW1hcF9sb2NrICovXG4tXHRyZXR1cm4gX19wbWRfZnJlZV9wdGVfcGFnZShwbWRwLCBhZGRyLCAvKiBhY3F1aXJlX21tYXBfbG9jayA9ICovIHRydWUpO1xuLX1cbi1cbiBpbnQgcHVkX2ZyZWVfcG1kX3BhZ2UocHVkX3QgKnB1ZHAsIHVuc2lnbmVkIGxvbmcgYWRkcilcbiB7XG4gXHRwbWRfdCAqdGFibGU7XG5AQCAtMTkxMSwzNiArMTg5NiwxNiBAQCBpbnQgcHVkX2ZyZWVfcG1kX3BhZ2UocHVkX3QgKnB1ZHAsIHVuc2lnbmVkIGxvbmcgYWRkcilcbiBcdH1cbiBcbiBcdHRhYmxlID0gcG1kX29mZnNldChwdWRwLCBhZGRyKTtcbi1cbi1cdC8qXG4tXHQgKiBPdXIgb2JqZWN0aXZlIGlzIHRvIHByZXZlbnQgcHRkdW1wIGZyb20gcmVhZGluZyBhIFBNRCB0YWJsZSB3aGljaCBoYXNcbi1cdCAqIGJlZW4gZnJlZWQuIEluIHRoaXMgcmFjZSwgaWYgcHVkX2ZyZWVfcG1kX3BhZ2Ugb2JzZXJ2ZXMgdGhlIGtleSBvblxuLVx0ICogKHdoaWNoIGdvdCBmbGlwcGVkIGJ5IHB0ZHVtcCkgdGhlbiB0aGUgbW1hcCBsb2NrIHNlcXVlbmNlIGhlcmUgd2lsbCxcbi1cdCAqIGFzIGEgcmVzdWx0IG9mIHRoZSBtbWFwIHdyaXRlIGxvY2svdW5sb2NrIHNlcXVlbmNlIGluIHB0ZHVtcCwgZ2l2ZVxuLVx0ICogdXMgdGhlIGNvcnJlY3Qgc3luY2hyb25pemF0aW9uLiBJZiBub3QsIHRoaXMgbWVhbnMgdGhhdCBwdGR1bXAgaGFzXG4tXHQgKiB5ZXQgbm90IHN0YXJ0ZWQgd2Fsa2luZyB0aGUgcGFnZXRhYmxlcyAtIHRoZSBzZXF1ZW5jZSBvZiBiYXJyaWVyc1xuLVx0ICogaXNzdWVkIGJ5IF9fZmx1c2hfdGxiX2tlcm5lbF9wZ3RhYmxlKCkgZ3VhcmFudGVlcyB0aGF0IHB0ZHVtcCB3aWxsXG4tXHQgKiBvYnNlcnZlIGFuIGVtcHR5IFBVRC5cbi1cdCAqL1xuLVx0cHVkX2NsZWFyKHB1ZHApO1xuLVx0X19mbHVzaF90bGJfa2VybmVsX3BndGFibGUoYWRkcik7XG4tXHRpZiAoc3RhdGljX2JyYW5jaF91bmxpa2VseShcdTAwMjZhcm02NF9wdGR1bXBfbG9ja19rZXkpKSB7XG4tXHRcdG1tYXBfcmVhZF9sb2NrKFx1MDAyNmluaXRfbW0pO1xuLVx0XHRtbWFwX3JlYWRfdW5sb2NrKFx1MDAyNmluaXRfbW0pO1xuLVx0fVxuLVxuIFx0cG1kcCA9IHRhYmxlO1xuIFx0bmV4dCA9IGFkZHI7XG4gXHRlbmQgPSBhZGRyICsgUFVEX1NJWkU7XG4gXHRkbyB7XG4gXHRcdGlmIChwbWRfcHJlc2VudChwbWRwX2dldChwbWRwKSkpXG4tXHRcdFx0Lypcbi1cdFx0XHQgKiBQTUQgaGFzIGJlZW4gaXNvbGF0ZWQsIHNvIHB0ZHVtcCB3b24ndCBzZWUgaXQuIE5vXG4tXHRcdFx0ICogbmVlZCB0byBhY3F1aXJlIGluaXRfbW0ubW1hcF9sb2NrLlxuLVx0XHRcdCAqL1xuLVx0XHRcdF9fcG1kX2ZyZWVfcHRlX3BhZ2UocG1kcCwgbmV4dCwgLyogYWNxdWlyZV9tbWFwX2xvY2sgPSAqLyBmYWxzZSk7XG4rXHRcdFx0cG1kX2ZyZWVfcHRlX3BhZ2UocG1kcCwgbmV4dCk7XG4gXHR9IHdoaWxlIChwbWRwKyssIG5leHQgKz0gUE1EX1NJWkUsIG5leHQgIT0gZW5kKTtcbiBcbitcdHB1ZF9jbGVhcihwdWRwKTtcbitcdF9fZmx1c2hfdGxiX2tlcm5lbF9wZ3RhYmxlKGFkZHIpO1xuIFx0cG1kX2ZyZWUoTlVMTCwgdGFibGUpO1xuIFx0cmV0dXJuIDE7XG4gfVxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvbW0vcHRkdW1wLmMgYi9hcmNoL2FybTY0L21tL3B0ZHVtcC5jXG5pbmRleCAxYzIwMTQ0NzAwZDdkNy4uNWE3NmM1OWI1YWRhNTUgMTAwNjQ0XG4tLS0gYS9hcmNoL2FybTY0L21tL3B0ZHVtcC5jXG4rKysgYi9hcmNoL2FybTY0L21tL3B0ZHVtcC5jXG5AQCAtMjgzLDEzICsyODMsNiBAQCB2b2lkIG5vdGVfcGFnZV9mbHVzaChzdHJ1Y3QgcHRkdW1wX3N0YXRlICpwdF9zdClcbiBcdG5vdGVfcGFnZShwdF9zdCwgMCwgLTEsIHB0ZV92YWwocHRlX3plcm8pKTtcbiB9XG4gXG4tc3RhdGljIHZvaWQgYXJtNjRfcHRkdW1wX3dhbGtfcGdkKHN0cnVjdCBwdGR1bXBfc3RhdGUgKnN0LCBzdHJ1Y3QgbW1fc3RydWN0ICptbSlcbi17XG4tXHRzdGF0aWNfYnJhbmNoX2luYyhcdTAwMjZhcm02NF9wdGR1bXBfbG9ja19rZXkpO1xuLVx0cHRkdW1wX3dhbGtfcGdkKHN0LCBtbSwgTlVMTCk7XG4tXHRzdGF0aWNfYnJhbmNoX2RlYyhcdTAwMjZhcm02NF9wdGR1bXBfbG9ja19rZXkpO1xuLX1cbi1cbiB2b2lkIHB0ZHVtcF93YWxrKHN0cnVjdCBzZXFfZmlsZSAqcywgc3RydWN0IHB0ZHVtcF9pbmZvICppbmZvKVxuIHtcbiBcdHVuc2lnbmVkIGxvbmcgZW5kID0gfjBVTDtcbkBAIC0zMTgsNyArMzExLDcgQEAgdm9pZCBwdGR1bXBfd2FsayhzdHJ1Y3Qgc2VxX2ZpbGUgKnMsIHN0cnVjdCBwdGR1bXBfaW5mbyAqaW5mbylcbiBcdFx0fVxuIFx0fTtcbiBcbi1cdGFybTY0X3B0ZHVtcF93YWxrX3BnZChcdTAwMjZzdC5wdGR1bXAsIGluZm8tXHUwMDNlbW0pO1xuK1x0cHRkdW1wX3dhbGtfcGdkKFx1MDAyNnN0LnB0ZHVtcCwgaW5mby1cdTAwM2VtbSwgTlVMTCk7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIF9faW5pdCBwdGR1bXBfaW5pdGlhbGl6ZSh2b2lkKVxuQEAgLTM2MCw3ICszNTMsNyBAQCBib29sIHB0ZHVtcF9jaGVja193eCh2b2lkKVxuIFx0XHR9XG4gXHR9O1xuIFxuLVx0YXJtNjRfcHRkdW1wX3dhbGtfcGdkKFx1MDAyNnN0LnB0ZHVtcCwgXHUwMDI2aW5pdF9tbSk7XG4rXHRwdGR1bXBfd2Fsa19wZ2QoXHUwMDI2c3QucHRkdW1wLCBcdTAwMjZpbml0X21tLCBOVUxMKTtcbiBcbiBcdGlmIChzdC53eF9wYWdlcyB8fCBzdC51eG5fcGFnZXMpIHtcbiBcdFx0cHJfd2FybihcIkNoZWNrZWQgVytYIG1hcHBpbmdzOiBGQUlMRUQsICVsdSBXK1ggcGFnZXMgZm91bmQsICVsdSBub24tVVhOIHBhZ2VzIGZvdW5kXFxuXCIsXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYyBiL2FyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmNcbmluZGV4IGQwMjNhNDBhMWUwMzQ1Li40YzRiODI0NDUwMmZjZSAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmNcbisrKyBiL2FyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmNcbkBAIC0yMiw2ICsyMiw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvY2NfcGxhdGZvcm0uaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NldF9tZW1vcnkuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L21lbXJlZ2lvbi5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvY2xlYW51cC5oXHUwMDNlXG4gXG4gI2luY2x1ZGUgXHUwMDNjYXNtL2U4MjAvYXBpLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2Nhc20vcHJvY2Vzc29yLmhcdTAwM2VcbkBAIC00MzYsOSArNDM3LDE2IEBAIHN0YXRpYyB2b2lkIGNwYV9jb2xsYXBzZV9sYXJnZV9wYWdlcyhzdHJ1Y3QgY3BhX2RhdGEgKmNwYSlcbiBcbiBcdGZsdXNoX3RsYl9hbGwoKTtcbiBcbi1cdGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShwdGRlc2MsIHRtcCwgXHUwMDI2cGd0YWJsZXMsIHB0X2xpc3QpIHtcbi1cdFx0bGlzdF9kZWwoXHUwMDI2cHRkZXNjLVx1MDAzZXB0X2xpc3QpO1xuLVx0XHRwYWdldGFibGVfZnJlZShwdGRlc2MpO1xuK1x0LypcbitcdCAqIHB0ZHVtcCBtaWdodCByZWFkIHRoZXNlIHBhZ2UgdGFibGVzLCBzbyBhdm9pZCBhIHVzZS1hZnRlci1mcmVlIGJ5XG4rXHQgKiBhY3F1aXJpbmcgdGhlIG1tYXAgcmVhZCBsb2NrIG9uIGluaXRfbW0gKHB0ZHVtcCBhY3F1aXJlcyB0aGUgbW1hcFxuK1x0ICogd3JpdGUgbG9jaykuXG4rXHQgKi9cbitcdHNjb3BlZF9ndWFyZChtbWFwX3JlYWRfbG9jaywgXHUwMDI2aW5pdF9tbSkge1xuK1x0XHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocHRkZXNjLCB0bXAsIFx1MDAyNnBndGFibGVzLCBwdF9saXN0KSB7XG4rXHRcdFx0bGlzdF9kZWwoXHUwMDI2cHRkZXNjLVx1MDAzZXB0X2xpc3QpO1xuK1x0XHRcdHBhZ2V0YWJsZV9mcmVlKHB0ZGVzYyk7XG4rXHRcdH1cbiBcdH1cbiB9XG4gXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tbWFwX2xvY2suaCBiL2luY2x1ZGUvbGludXgvbW1hcF9sb2NrLmhcbmluZGV4IDA0YjhmNjFlY2U1ZDhlLi42YjVjMjM5MGNjMzAxZiAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvbW1hcF9sb2NrLmhcbisrKyBiL2luY2x1ZGUvbGludXgvbW1hcF9sb2NrLmhcbkBAIC02MjEsNiArNjIxLDcgQEAgc3RhdGljIGlubGluZSB2b2lkIG1tYXBfcmVhZF91bmxvY2soc3RydWN0IG1tX3N0cnVjdCAqbW0pXG4gXG4gREVGSU5FX0dVQVJEKG1tYXBfcmVhZF9sb2NrLCBzdHJ1Y3QgbW1fc3RydWN0ICosXG4gXHQgICAgIG1tYXBfcmVhZF9sb2NrKF9UKSwgbW1hcF9yZWFkX3VubG9jayhfVCkpXG4rREVGSU5FX0dVQVJEX0NPTkQobW1hcF9yZWFkX2xvY2ssIF90cnksIG1tYXBfcmVhZF90cnlsb2NrKF9UKSlcbiBcbiBzdGF0aWMgaW5saW5lIHZvaWQgbW1hcF9yZWFkX3VubG9ja19ub25fb3duZXIoc3RydWN0IG1tX3N0cnVjdCAqbW0pXG4ge1xuZGlmZiAtLWdpdCBhL21tL3BhZ2V3YWxrLmMgYi9tbS9wYWdld2Fsay5jXG5pbmRleCAzYWUyNTg2ZmY0NWI0NC4uNWQ4N2M2MzJhMjU1MDcgMTAwNjQ0XG4tLS0gYS9tbS9wYWdld2Fsay5jXG4rKysgYi9tbS9wYWdld2Fsay5jXG5AQCAtNjc4LDYgKzY3OCw4IEBAIGludCB3YWxrX2tlcm5lbF9wYWdlX3RhYmxlX3JhbmdlX2xvY2tsZXNzKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kXG4gICogd2lsbCBhbHNvIG5vdCBsb2NrIHRoZSBQVEVzIGZvciB0aGUgcHRlX2VudHJ5KCkgY2FsbGJhY2suXG4gICpcbiAgKiBUaGlzIGlzIGZvciBkZWJ1Z2dpbmcgcHVycG9zZXMgT05MWS5cbisgKlxuKyAqIFRoZSBtbWFwIHdyaXRlIGxvY2sgbXVzdCBiZSBoZWxkLlxuICAqL1xuIGludCB3YWxrX3BhZ2VfcmFuZ2VfZGVidWcoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgc3RhcnQsXG4gXHRcdFx0ICB1bnNpZ25lZCBsb25nIGVuZCwgY29uc3Qgc3RydWN0IG1tX3dhbGtfb3BzICpvcHMsXG5AQCAtNjkxLDI0ICs2OTMsMjggQEAgaW50IHdhbGtfcGFnZV9yYW5nZV9kZWJ1ZyhzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBzdGFydCxcbiBcdFx0Lm5vX3ZtYVx0XHQ9IHRydWVcbiBcdH07XG4gXG4tXHQvKiBGb3IgY29udmVuaWVuY2UsIHdlIGFsbG93IHRyYXZlcnNhbCBvZiBrZXJuZWwgbWFwcGluZ3MuICovXG4tXHRpZiAobW0gPT0gXHUwMDI2aW5pdF9tbSlcbi1cdFx0cmV0dXJuIHdhbGtfa2VybmVsX3BhZ2VfdGFibGVfcmFuZ2Uoc3RhcnQsIGVuZCwgb3BzLFxuLVx0XHRcdFx0XHRcdCAgICBwZ2QsIHByaXZhdGUpO1xuLVx0aWYgKHN0YXJ0IFx1MDAzZT0gZW5kIHx8ICF3YWxrLm1tKVxuLVx0XHRyZXR1cm4gLUVJTlZBTDtcbi1cdGlmICghY2hlY2tfb3BzX3NhZmUob3BzKSlcbi1cdFx0cmV0dXJuIC1FSU5WQUw7XG4tXG4gXHQvKlxuLVx0ICogVGhlIG1tYXAgbG9jayBwcm90ZWN0cyB0aGUgcGFnZSB3YWxrZXIgZnJvbSBjaGFuZ2VzIHRvIHRoZSBwYWdlXG4tXHQgKiB0YWJsZXMgZHVyaW5nIHRoZSB3YWxrLiAgSG93ZXZlciBhIHJlYWQgbG9jayBpcyBpbnN1ZmZpY2llbnQgdG9cbi1cdCAqIHByb3RlY3QgdGhvc2UgYXJlYXMgd2hpY2ggZG9uJ3QgaGF2ZSBhIFZNQSBhcyBtdW5tYXAoKSBkZXRhY2hlc1xuLVx0ICogdGhlIFZNQXMgYmVmb3JlIGRvd25ncmFkaW5nIHRvIGEgcmVhZCBsb2NrIGFuZCBhY3R1YWxseSB0ZWFyaW5nXG4tXHQgKiBkb3duIFBURXMvcGFnZSB0YWJsZXMuIEluIHdoaWNoIGNhc2UsIHRoZSBtbWFwIHdyaXRlIGxvY2sgc2hvdWxkXG4tXHQgKiBiZSBoZWxkLlxuK1x0ICogV2hlbiB3YWxraW5nIHVzZXJsYW5kIHBhZ2UgdGFibGVzLCBhbiBtbWFwIHdyaXRlIGxvY2sgbXVzdCBiZSBoZWxkIHRvXG4rXHQgKiBhY2NvdW50IGZvciBtdW5tYXAoKSBkb3duZ3JhZGluZyB0byBhbiBtbWFwIHJlYWQgbG9jayB3aGVuIHRlYXJpbmdcbitcdCAqIGRvd24gcGFnZSB0YWJsZXMuXG4rXHQgKlxuK1x0ICogV2hlbiB3YWxraW5nIGtlcm5lbCBwYWdlIHRhYmxlcywgYW4gbW1hcCB3cml0ZSBsb2NrIG11c3QgYWxzbyBiZSBoZWxkXG4rXHQgKiB0byBhY2NvdW50IGZvciBwYWdlIHRhYmxlIGZyZWVpbmcgb24gdm1hcCBodWdlIHBhZ2UgbWFwcGluZy5cbiBcdCAqL1xuIFx0bW1hcF9hc3NlcnRfd3JpdGVfbG9ja2VkKG1tKTtcbitcdC8qXG4rXHQgKiB4ODYsIGFybTY0IHB0ZHVtcCBhbGxvdyB3YWxrcyBvZiBlZmkgbW0ncyBhbmQgeDg2IHB0ZHVtcCBhbGxvd3Mgd2Fsa3NcbitcdCAqIG9mIGFyYml0cmFyeSBtbSdzLlxuK1x0ICpcbitcdCAqIEhvd2V2ZXIsIHRoZXkgYm90aCBtdXN0IGFsc28gaG9sZCB0aGUgaW5pdF9tbSBsb2NrIHRvIGFjY291bnQgZm9yXG4rXHQgKiBjb25jdXJyZW50IGtlcm5lbCBwYWdlIHRhYmxlIGZyZWVpbmcuXG4rXHQgKi9cbitcdG1tYXBfYXNzZXJ0X3dyaXRlX2xvY2tlZChcdTAwMjZpbml0X21tKTtcbitcbitcdGlmIChzdGFydCBcdTAwM2U9IGVuZClcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHRpZiAoIWNoZWNrX29wc19zYWZlKG9wcykpXG4rXHRcdHJldHVybiAtRUlOVkFMO1xuIFxuIFx0cmV0dXJuIHdhbGtfcGdkX3JhbmdlKHN0YXJ0LCBlbmQsIFx1MDAyNndhbGspO1xuIH1cbmRpZmYgLS1naXQgYS9tbS9wdGR1bXAuYyBiL21tL3B0ZHVtcC5jXG5pbmRleCA5NzMwMjAwMDAwOTZjZi4uNTg1MTA5NmU2ZjY1NmMgMTAwNjQ0XG4tLS0gYS9tbS9wdGR1bXAuY1xuKysrIGIvbW0vcHRkdW1wLmNcbkBAIC0xNzgsMTEgKzE3OCwxOCBAQCB2b2lkIHB0ZHVtcF93YWxrX3BnZChzdHJ1Y3QgcHRkdW1wX3N0YXRlICpzdCwgc3RydWN0IG1tX3N0cnVjdCAqbW0sIHBnZF90ICpwZ2QpXG4gXG4gXHRnZXRfb25saW5lX21lbXMoKTtcbiBcdG1tYXBfd3JpdGVfbG9jayhtbSk7XG4rXHQvKiBUbyBzdGFiaWxpc2Uga2VybmVsIHBhZ2UgdGFibGVzIHdlIG11c3QgaG9sZCB0aGUgaW5pdF9tbSBsb2NrIHRvby4gKi9cbitcdGlmIChtbSAhPSBcdTAwMjZpbml0X21tKVxuK1x0XHRtbWFwX3dyaXRlX2xvY2tfbmVzdGVkKFx1MDAyNmluaXRfbW0sIFNJTkdMRV9ERVBUSF9ORVNUSU5HKTtcbitcbiBcdHdoaWxlIChyYW5nZS1cdTAwM2VzdGFydCAhPSByYW5nZS1cdTAwM2VlbmQpIHtcbiBcdFx0d2Fsa19wYWdlX3JhbmdlX2RlYnVnKG1tLCByYW5nZS1cdTAwM2VzdGFydCwgcmFuZ2UtXHUwMDNlZW5kLFxuIFx0XHRcdFx0ICAgICAgXHUwMDI2cHRkdW1wX29wcywgcGdkLCBzdCk7XG4gXHRcdHJhbmdlKys7XG4gXHR9XG4rXG4rXHRpZiAobW0gIT0gXHUwMDI2aW5pdF9tbSlcbitcdFx0bW1hcF93cml0ZV91bmxvY2soXHUwMDI2aW5pdF9tbSk7XG4gXHRtbWFwX3dyaXRlX3VubG9jayhtbSk7XG4gXHRwdXRfb25saW5lX21lbXMoKTtcbiBcbmRpZmYgLS1naXQgYS9tbS92bWFsbG9jLmMgYi9tbS92bWFsbG9jLmNcbmluZGV4IDFhZmNhMzU2OGI5YjY1Li40MDA1NjNhYzZkNWQ3YiAxMDA2NDRcbi0tLSBhL21tL3ZtYWxsb2MuY1xuKysrIGIvbW0vdm1hbGxvYy5jXG5AQCAtNDMsNiArNDMsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2FzbS90bGJmbHVzaC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjYXNtL3NobXBhcmFtLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9wYWdlX293bmVyLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9jbGVhbnVwLmhcdTAwM2VcbiBcbiAjZGVmaW5lIENSRUFURV9UUkFDRV9QT0lOVFNcbiAjaW5jbHVkZSBcdTAwM2N0cmFjZS9ldmVudHMvdm1hbGxvYy5oXHUwMDNlXG5AQCAtMTU4LDEwICsxNTksMjIgQEAgc3RhdGljIGludCB2bWFwX3RyeV9odWdlX3BtZChwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLFxuIFx0aWYgKCFJU19BTElHTkVEKHBoeXNfYWRkciwgUE1EX1NJWkUpKVxuIFx0XHRyZXR1cm4gMDtcbiBcbi1cdGlmIChwbWRfcHJlc2VudCgqcG1kKSBcdTAwMjZcdTAwMjYgIXBtZF9mcmVlX3B0ZV9wYWdlKHBtZCwgYWRkcikpXG4tXHRcdHJldHVybiAwO1xuK1x0aWYgKCFwbWRfcHJlc2VudCgqcG1kKSlcbitcdFx0cmV0dXJuIHBtZF9zZXRfaHVnZShwbWQsIHBoeXNfYWRkciwgcHJvdCk7XG4gXG4tXHRyZXR1cm4gcG1kX3NldF9odWdlKHBtZCwgcGh5c19hZGRyLCBwcm90KTtcbitcdC8qXG4rXHQgKiBLZXJuZWwgcGFnZSB0YWJsZSB3YWxrZXJzIGVpdGhlciB3YWxrIHJhbmdlcyB0aGV5IG93biBleGNsdXNpdmVseSBvclxuK1x0ICogaG9sZCB0aGUgbW1hcCB3cml0ZSBsb2NrIG9uIGluaXRfbW0gKHB0ZHVtcCBiZWluZyB0aGUgbW90aXZhdGluZ1xuK1x0ICogY2FzZSkuXG4rXHQgKlxuK1x0ICogVGhlcmVmb3JlLCBhY3F1aXJlIHRoZSBtbWFwIHJlYWQgbG9jayB0byBwcmV2ZW50IHVzZS1hZnRlci1mcmVlIHdoZW5cbitcdCAqIGZyZWVpbmcgcGFnZSB0YWJsZXMuXG4rXHQgKi9cbitcdHNjb3BlZF9jb25kX2d1YXJkKG1tYXBfcmVhZF9sb2NrX3RyeSwgcmV0dXJuIDAsIFx1MDAyNmluaXRfbW0pIHtcbitcdFx0aWYgKCFwbWRfZnJlZV9wdGVfcGFnZShwbWQsIGFkZHIpKVxuK1x0XHRcdHJldHVybiAwO1xuK1x0XHRyZXR1cm4gcG1kX3NldF9odWdlKHBtZCwgcGh5c19hZGRyLCBwcm90KTtcbitcdH1cbiB9XG4gXG4gc3RhdGljIGludCB2bWFwX3BtZF9yYW5nZShwdWRfdCAqcHVkLCB1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLFxuQEAgLTIxMCwxMCArMjIzLDE1IEBAIHN0YXRpYyBpbnQgdm1hcF90cnlfaHVnZV9wdWQocHVkX3QgKnB1ZCwgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCxcbiBcdGlmICghSVNfQUxJR05FRChwaHlzX2FkZHIsIFBVRF9TSVpFKSlcbiBcdFx0cmV0dXJuIDA7XG4gXG4tXHRpZiAocHVkX3ByZXNlbnQoKnB1ZCkgXHUwMDI2XHUwMDI2ICFwdWRfZnJlZV9wbWRfcGFnZShwdWQsIGFkZHIpKVxuLVx0XHRyZXR1cm4gMDtcbitcdGlmICghcHVkX3ByZXNlbnQoKnB1ZCkpXG4rXHRcdHJldHVybiBwdWRfc2V0X2h1Z2UocHVkLCBwaHlzX2FkZHIsIHByb3QpO1xuIFxuLVx0cmV0dXJuIHB1ZF9zZXRfaHVnZShwdWQsIHBoeXNfYWRkciwgcHJvdCk7XG4rXHQvKiBTZWUgY29tbWVudCBpbiB2bWFwX3RyeV9odWdlX3BtZCgpLiAqL1xuK1x0c2NvcGVkX2NvbmRfZ3VhcmQobW1hcF9yZWFkX2xvY2tfdHJ5LCByZXR1cm4gMCwgXHUwMDI2aW5pdF9tbSkge1xuK1x0XHRpZiAoIXB1ZF9mcmVlX3BtZF9wYWdlKHB1ZCwgYWRkcikpXG4rXHRcdFx0cmV0dXJuIDA7XG4rXHRcdHJldHVybiBwdWRfc2V0X2h1Z2UocHVkLCBwaHlzX2FkZHIsIHByb3QpO1xuK1x0fVxuIH1cbiBcbiBzdGF0aWMgaW50IHZtYXBfcHVkX3JhbmdlKHA0ZF90ICpwNGQsIHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsXG5AQCAtMjYyLDEwICsyODAsMTUgQEAgc3RhdGljIGludCB2bWFwX3RyeV9odWdlX3A0ZChwNGRfdCAqcDRkLCB1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLFxuIFx0aWYgKCFJU19BTElHTkVEKHBoeXNfYWRkciwgUDREX1NJWkUpKVxuIFx0XHRyZXR1cm4gMDtcbiBcbi1cdGlmIChwNGRfcHJlc2VudCgqcDRkKSBcdTAwMjZcdTAwMjYgIXA0ZF9mcmVlX3B1ZF9wYWdlKHA0ZCwgYWRkcikpXG4tXHRcdHJldHVybiAwO1xuK1x0aWYgKCFwNGRfcHJlc2VudCgqcDRkKSlcbitcdFx0cmV0dXJuIHA0ZF9zZXRfaHVnZShwNGQsIHBoeXNfYWRkciwgcHJvdCk7XG4gXG4tXHRyZXR1cm4gcDRkX3NldF9odWdlKHA0ZCwgcGh5c19hZGRyLCBwcm90KTtcbitcdC8qIFNlZSBjb21tZW50IGluIHZtYXBfdHJ5X2h1Z2VfcG1kKCkuICovXG4rXHRzY29wZWRfY29uZF9ndWFyZChtbWFwX3JlYWRfbG9ja190cnksIHJldHVybiAwLCBcdTAwMjZpbml0X21tKSB7XG4rXHRcdGlmICghcDRkX2ZyZWVfcHVkX3BhZ2UocDRkLCBhZGRyKSlcbitcdFx0XHRyZXR1cm4gMDtcbitcdFx0cmV0dXJuIHA0ZF9zZXRfaHVnZShwNGQsIHBoeXNfYWRkciwgcHJvdCk7XG4rXHR9XG4gfVxuIFxuIHN0YXRpYyBpbnQgdm1hcF9wNGRfcmFuZ2UocGdkX3QgKnBnZCwgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCxcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEyVDEzOjEyOjAxLjM1MzU1NjY1NloiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc0OTA2NDkxOTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBQYWdlIFRhYmxlIER1bXBpbmcgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoLiBJdCBzZWVtcyBsaWtlIGEgcHJldHR5IHNpZ25pZmljYW50IGNoYW5nZSwgc3BlY2lmaWNhbGx5IHRhcmdldGluZyB0aGUgc3luY2hyb25pemF0aW9uIG1lY2hhbmlzbSBmb3IgcGFnZSB0YWJsZSBkdW1waW5nIChgcHRkdW1wYCkgYW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB2bWFsbG9jIGh1Z2UgcGFnZSBtYXBwaW5ncywgd2hpY2ggaXMgYSBrZXkgYXJlYSBmb3IgaGlnaC1wZXJmb3JtYW5jZSBtZW1vcnkgbWFuYWdlbWVudCwgYW5kIGFsc28gaW1wYWN0cyB4ODYgQ1BBLiBGcm9tIHdoYXQgSSBjYW4gZ2F0aGVyLCBpdCByZW1vdmVzIHRoZSBgYXJtNjRfcHRkdW1wX2xvY2tfa2V5YCBzdGF0aWMga2V5IG9uIEFSTTY0IGFuZCByZXBsYWNlcyBpdCB3aXRoIHRoZSBtb3JlIGNvbnZlbnRpb25hbCBgbW1hcF9yZWFkX2xvY2tgL2BtbWFwX3dyaXRlX2xvY2tgIGxvY2tzIG9uIGBpbml0X21tYCB0byBwcm90ZWN0IGFnYWluc3QgY29uY3VycmVudCBtb2RpZmljYXRpb25zLiBUaGlzIGFmZmVjdHMgY29yZSBrZXJuZWwgZmlsZXM6IGBtbS92bWFsbG9jLmNgLCBgYXJjaC9hcm02NC9tbS9tbXUuY2AsIGBhcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jYCwgYW5kIGBtbS9wdGR1bXAuY2AuXG5cbk15IGltbWVkaWF0ZSBjb25jZXJuIGlzIHdoZXRoZXIgdGhpcyBjaGFuZ2UgaXMgYWN0dWFsbHkgKnJlYWNoYWJsZSogYW5kICp0ZXN0YWJsZSogaW4gYSBwcmFjdGljYWwgc2NlbmFyaW8uICBgcHRkdW1wYCBpdHNlbGYgaXMsIG9mIGNvdXJzZSwgdXN1YWxseSBhY2Nlc3NlZCB2aWEgZGVidWdmcyB1bmRlciBgL3N5cy9rZXJuZWwvZGVidWcvcGFnZV90YWJsZXMva2VybmVsYCAoYW5kIHNpbWlsYXIgcGF0aHMpLCBzbyB0aGF0J3MgdGhlIG9idmlvdXMgZW50cnkgcG9pbnQuICBUaGVuIEkgbmVlZCB0byB0aGluayBhYm91dCBgdm1hbGxvY2AgaHVnZSBwYWdlcy4gIFRoZXkgYXJlIG9ubHkgZW5nYWdlZCBpZiBgQ09ORklHX0hBVkVfQVJDSF9IVUdFX1ZNQUxMT0NgIGlzIGVuYWJsZWQgYW5kIGB2bWFsbG9jYCBpcyBjYWxsZWQgd2l0aCB0aGUgcmlnaHQgZmxhZ3MuIFRoZSBwYXRjaCBzZWVtcyB0byBiZSB0b3VjaGluZyBgdm1hcF90cnlfaHVnZV9wbWRgLCBgdm1hcF90cnlfaHVnZV9wdWRgLCBgdm1hcF90cnlfaHVnZV9wNGRgIGluIGBtbS92bWFsbG9jLmNgLCBhbmQgYGNwYV9jb2xsYXBzZV9sYXJnZV9wYWdlc2AgaW4gYGFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmNgIGFuZCBgcHRkdW1wX3dhbGtfcGdkYCBpbiBgbW0vcHRkdW1wLmNgLiBUaGF0IGdpdmVzIG1lIGEgZGVjZW50IGlkZWEgb2YgaG93IHRoZXNlIGRpZmZlcmVudCBhc3BlY3RzIG9mIHRoZSBwYWdlIHRhYmxlIHN5c3RlbSByZWxhdGUgdG8gZWFjaCBvdGhlci5cblxuTm93LCBsZXQncyBuYWlsIGRvd24gdGhvc2UgY29uZmlnIG9wdGlvbnMuIGBDT05GSUdfUFREVU1QX0NPUkVgIHNlZW1zIHRvIGJlIHRoZSBmdW5kYW1lbnRhbCBlbmFibGluZyBvcHRpb24sIHR5cGljYWxseSBzZWxlY3RlZCB0aHJvdWdoIGBDT05GSUdfUFREVU1QX0RFQlVHRlNgLCB3aGljaCBpcyBwcmV0dHkgc3RhbmRhcmQuIEkgbmVlZCB0byBkb3VibGUtY2hlY2sgYG1tL3B0ZHVtcC5jYCBhbmQgcG90ZW50aWFsbHkgYGFyY2gvYXJtNjQvbW0vcHRkdW1wLmNgIHRvIGJlIGNlcnRhaW4sIHRvIHVuZGVyc3RhbmQgdGhlIGV4YWN0IGNvbmRpdGlvbnMgdW5kZXIgd2hpY2ggdGhpcyBjb2RlIGlzIGFjdGl2ZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NjM2NSwiT3V0cHV0VG9rZW5zIjoxOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM4MSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEyVDEzOjEyOjA4Ljg0NDIwNzk2MVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzI4NzU3ODczLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBQVERVTVBcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9hcm02NC9rdm0vS2NvbmZpZz00NT1pZiBLVk1cXG5hcmNoL2FybTY0L2t2bS9LY29uZmlnLTQ2LVxcbmFyY2gvYXJtNjQva3ZtL0tjb25maWc6NDc6Y29uZmlnIFBURFVNUF9TVEFHRTJfREVCVUdGU1xcbmFyY2gvYXJtNjQva3ZtL0tjb25maWctNDgtXFx0Ym9vbCBcXFwiUHJlc2VudCB0aGUgc3RhZ2UtMiBwYWdldGFibGVzIHRvIGRlYnVnZnNcXFwiXFxuLS1cXG5tbS9LY29uZmlnLmRlYnVnPTIxNj1jb25maWcgQVJDSF9IQVNfUFREVU1QXFxuLS1cXG5tbS9LY29uZmlnLmRlYnVnLTIxOC1cXG5tbS9LY29uZmlnLmRlYnVnOjIxOTpjb25maWcgUFREVU1QXFxubW0vS2NvbmZpZy5kZWJ1Zy0yMjAtXFx0Ym9vbFxcbm1tL0tjb25maWcuZGVidWctMjIxLVxcbm1tL0tjb25maWcuZGVidWc6MjIyOmNvbmZpZyBQVERVTVBfREVCVUdGU1xcbm1tL0tjb25maWcuZGVidWctMjIzLVxcdGJvb2wgXFxcIkV4cG9ydCBrZXJuZWwgcGFnZXRhYmxlIGxheW91dCB0byB1c2Vyc3BhY2UgdmlhIGRlYnVnZnNcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEyVDEzOjEyOjExLjE3Mjk3Mzg5NFoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0Nzk5MzkzOTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIHNlZS4uLlxuXG4qKkludmVzdGlnYXRpbmcgdGhlIHB0ZHVtcCBDb25maWd1cmF0aW9uKipcblxuUmlnaHQsIHNvIGBDT05GSUdfUFREVU1QX0RFQlVHRlNgIGlzIHRoZSBmbGFnIHdlJ3JlIHdvcmtpbmcgd2l0aCBoZXJlIHRvIGVuYWJsZSBwdGR1bXAsIGdvdCBpdC4gTm93IEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBkZXBlbmRlbmNpZXMgYW5kIHdoZXJlIHRoaXMgYWN0dWFsbHkgZ2V0cyB1c2VkLiBNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byBjaGVjayBgYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuY2AuIEkgd29uZGVyLCBpcyBpdCBjb25kaXRpb25hbGx5IGNvbXBpbGVkIGJhc2VkIG9uIGBDT05GSUdfWDg2X1BBVGAsIG9yIGlzIGl0IGFsd2F5cyBpbmNsdWRlZCBpZiB3ZSdyZSBvbiBhbiB4ODYgYXJjaGl0ZWN0dXJlPyBJIHNob3VsZCBwcm9iYWJseSBjcm9zcy1yZWZlcmVuY2UgdGhlIGJ1aWxkIGNvbmZpZ3VyYXRpb24gYW5kIHNlZSBob3cgdGhvc2UgdHdvIGFyZSByZWxhdGVkLiBLbm93aW5nIHRoaXMgd2lsbCBoZWxwIG1lIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiBlbmFibGluZyBgQ09ORklHX1BURFVNUF9ERUJVR0ZTYCBhbmQgd2hldGhlciB3ZSdyZSBwb3RlbnRpYWxseSBpbnRyb2R1Y2luZyBjb2RlIGJsb2F0IG9yIHVuaW50ZW5kZWQgYmVoYXZpb3Igb24gc3BlY2lmaWMgeDg2IHBsYXRmb3Jtcy4gVGltZSB0byBkaXZlIGludG8gdGhlIHNvdXJjZSBhbmQgdGhlIHJlbGV2YW50IEtjb25maWcgZmlsZXMhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc1MDUsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xMlQxMzoxMjoxNC42NTI5MTUzNjFaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTQ4OTc0NDYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2V0X21lbW9yeVxcXFwub1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3g4Ni9tbS9wYXQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L21tL3BhdC9NYWtlZmlsZS0yLVxcbmFyY2gveDg2L21tL3BhdC9NYWtlZmlsZTozOm9iai15XFx0XFx0XFx0XFx0Oj0gc2V0X21lbW9yeS5vIG1lbXR5cGUub1xcbmFyY2gveDg2L21tL3BhdC9NYWtlZmlsZS00LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMlQxMzoxMjoxNC43MDc4MzgyNzdaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNTkwOTMzOTE4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHByZXNlbnRlZCBhcyBhIGZpcnN0LXBlcnNvbiBleHBlcnQgc3VtbWFyeTpcblxuKipYODYgQmlhcyBhbmQgSHVnZSB2bWFsbG9jIENvbnNpZGVyYXRpb25zKipcblxuQWxyaWdodCwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCBhIG5hZ2dpbmcgdGhvdWdodCBrZWVwcyBwb3BwaW5nIHVwOiAqaXQncyBhbHdheXMgY29tcGlsZWQgb24geDg2Ki4gVGhhdCdzIHRoZSBiYXNlbGluZSwgdGhlIGFzc3VtZWQgYXJjaGl0ZWN0dXJlLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEknbSBub3QgbWFraW5nIGltcGxpY2l0IGFzc3VtcHRpb25zIGFib3V0IHRoZSBhcmNoaXRlY3R1cmUuIEknbSBnZXR0aW5nIGEgZmVlbGluZyB0aGF0IHNvbWV0aGluZyBtaWdodCBub3Qgd29yayBhcyBpdCBzaG91bGQgb24gb3RoZXIgYXJjaGl0ZWN0dXJlcy5cblxuTm93IEkgbmVlZCB0byBjaGVjayBzb21ldGhpbmcgaW1wb3J0YW50LiBUaGF0IGBDT05GSUdfSEFWRV9BUkNIX0hVR0VfVk1BTExPQ2AgZGVmaW5lLi4ud2hhdCdzIHRoZSBkZWFsIHdpdGggdGhhdD8gSXMgaXQgZW5hYmxlZD8gSXMgaXQgcmVsZXZhbnQgaGVyZT8gSSBuZWVkIHRvIHRoaW5rIHRoaXMgdGhyb3VnaC4gSXMgdGhlIGN1cnJlbnQgYXJjaGl0ZWN0dXJlIGdvaW5nIHRvIHdvcmsgd2l0aCBgQ09ORklHX0hBVkVfQVJDSF9IVUdFX1ZNQUxMT0NgPyBUaGlzIGlzIHNvbWV0aGluZyBJIHdpbGwgaGF2ZSB0byBpbnZlc3RpZ2F0ZS5cblxuXG4iLCJJbnB1dFRva2VucyI6Nzg2NSwiT3V0cHV0VG9rZW5zIjoyNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEyVDEzOjEyOjE4LjI5ODc3Mzk1NVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODg4NzUyODk3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBIQVZFX0FSQ0hfSFVHRV9WTUFMTE9DXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvS2NvbmZpZz0xMDkyPWNvbmZpZyBIQVZFX0FSQ0hfSFVHRV9WTUFQXFxuLS1cXG5hcmNoL0tjb25maWctMTA5OS0jXFxuYXJjaC9LY29uZmlnOjExMDA6Y29uZmlnIEhBVkVfQVJDSF9IVUdFX1ZNQUxMT0NcXG5hcmNoL0tjb25maWctMTEwMS1cXHRkZXBlbmRzIG9uIEhBVkVfQVJDSF9IVUdFX1ZNQVBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTJUMTM6MTI6MjAuMTg3NTM1NzgyWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTA2NTIzODQ1NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIFBvdGVudGlhbDogQSBEZWVwIERpdmUgaW50byBNZW1vcnkgTWFuYWdlbWVudCoqXG5cbk9rYXksIGxldCdzIHRoaW5rIHRoaXMgdGhyb3VnaC4gTXkgaW5pdGlhbCBodW5jaCBpcyB0byB0YXJnZXQgYHB0ZHVtcF93YWxrX3BnZGAgZm9yIGZ1enppbmcuIEl0J3MgY2FsbGVkIGZyb20gYHB0ZHVtcF93YWxrYCwgd2hpY2ggaXMgaW4gdHVybiB0cmlnZ2VyZWQgYnkgdGhlIGRlYnVnZnMgcmVhZCBmdW5jdGlvbmFsaXR5LiBUaGF0J3MgYSBkZWNlbnQgc3RhcnRpbmcgcG9pbnQuXG5cbk5vdywgbGV0J3MgZXhwbG9yZSBvdGhlciBhdmVudWVzLiBgdm1hcF90cnlfaHVnZV9wbWRgIHNlZW1zIHByb21pc2luZy4gSXQncyBjYWxsZWQgd2l0aGluIGB2bWFwX3BtZF9yYW5nZWAsIHdoaWNoIGhhcyB0aGlzIGNoYWluOiBgdm1hcF9wdWRfcmFuZ2VgIC1cdTAwM2UgYHZtYXBfcDRkX3JhbmdlYCAtXHUwMDNlIGB2bWFwX3BhZ2VfcmFuZ2VgIC1cdTAwM2UgYHZtYXBfcmFuZ2VgIC1cdTAwM2UgZWl0aGVyIGBfX3ZtYWxsb2NfYXJlYV9ub2RlYCBvciBqdXN0IHBsYWluIGB2bWFwYC4gVG8gZnV6eiAqdGhpcyosIHdlJ2QgZXNzZW50aWFsbHkgaGF2ZSB0byB0cmlnZ2VyIGEgYHZtYWxsb2NgIHdpdGggaHVnZSBwYWdlcyB3aGlsZSBjb25jdXJyZW50bHkgcmVhZGluZyB0aGUgYHB0ZHVtcGAgZGVidWdmcyBlbnRyeSBwb2ludC4gVGhhdCBvcGVucyB1cCBzb21lIGludGVyZXN0aW5nIGF0dGFjayB2ZWN0b3JzLlxuXG5TbywgYHZtYXBfdHJ5X2h1Z2VfcG1kYCBpcyBkZWZpbml0ZWx5IGEgc3Ryb25nIGNvbnRlbmRlciwgYWxvbmcgd2l0aCBgcHRkdW1wX3dhbGtfcGdkYC4gSSBzaG91bGQgYWxzbyBrZWVwIGFuIGV5ZSBvbiBgY3BhX2NvbGxhcHNlX2xhcmdlX3BhZ2VzYCBhbmQgYHBtZF9mcmVlX3B0ZV9wYWdlYCB0byBzZWUgaG93IHRob3NlIGNvdWxkIHBvdGVudGlhbGx5IGJlIGV4cGxvaXRlZC5cblxuRm9yIG5vdywgSSdtIGdvaW5nIHRvIHN0YXJ0IGJ5IHJldmlld2luZyB0aGUgZnVuY3Rpb25zIHdpdGhpbiBgbW0vcHRkdW1wLmNgIHRvIHVuZGVyc3RhbmQgdGhlIGJpZ2dlciBwaWN0dXJlIGFuZCBwb3RlbnRpYWwgaW50ZXJhY3Rpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4MTk2LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjI2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEyVDEzOjEyOjI1LjI1Mjc3NjAzOVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjE3OTk0ODUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicHRkdW1wX3dhbGtfcGdkXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL3B0ZHVtcC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3B0ZHVtcC5jPTE2Nj1zdGF0aWMgY29uc3Qgc3RydWN0IG1tX3dhbGtfb3BzIHB0ZHVtcF9vcHMgPSB7XFxuLS1cXG5tbS9wdGR1bXAuYy0xNzQtXFxubW0vcHRkdW1wLmM6MTc1OnZvaWQgcHRkdW1wX3dhbGtfcGdkKHN0cnVjdCBwdGR1bXBfc3RhdGUgKnN0LCBzdHJ1Y3QgbW1fc3RydWN0ICptbSwgcGdkX3QgKnBnZClcXG5tbS9wdGR1bXAuYy0xNzYte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMlQxMzoxMjoyNS4zMTQ1ODA1NDRaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDcxNDQ5MDc2MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gYGNwYV9jb2xsYXBzZV9sYXJnZV9wYWdlc2AgaW4geDg2J3MgTWVtb3J5IE1hbmFnZW1lbnQqKlxuXG5BbHJpZ2h0LCBzbyB0aGUgZmlyc3QgdGhpbmcgSSdtIGRvaW5nIGlzIHplcm9pbmcgaW4gb24gYGFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmNgLiBUaGUgZmFjdCB0aGF0IEknbSBzcGVjaWZpY2FsbHkgdGFyZ2V0aW5nIHRoYXQgZmlsZSBpcyBhIGNsdWU7IGl0IG1lYW5zIEknbSBwcm9iYWJseSBsb29raW5nIGF0IGhvdyB0aGUgUGFnZSBBdHRyaWJ1dGUgVGFibGUgKFBBVCkgaW50ZXJhY3RzIHdpdGggbWVtb3J5IG1hbmFnZW1lbnQgb24geDg2LCBhbmQgc3BlY2lmaWNhbGx5LCBob3cgbGFyZ2UgcGFnZSBzdXBwb3J0IG1pZ2h0IGJlIGhhbmRsZWQuIFRoZSBtZW50aW9uIG9mIGBjcGFfY29sbGFwc2VfbGFyZ2VfcGFnZXNgIGlzIGtleS4gTXkgaW5pdGlhbCB0aG91Z2h0IHByb2Nlc3Mgbm93IGlzOlxuXG4qICAgKipQQVQgYW5kIExhcmdlIFBhZ2VzOioqIEknbSBsaWtlbHkgaW50ZXJlc3RlZCBpbiBob3cgdGhlIGtlcm5lbCBpbnRlcmFjdHMgd2l0aCB0aGUgUEFUIHRvIG1hcCBhbmQgdW5tYXAgbGFyZ2UgcGFnZXMuIFRoZSBQQVQgYWxsb3dzIGZvciBncmFudWxhciBjb250cm9sIG92ZXIgbWVtb3J5IGF0dHJpYnV0ZXMgKGUuZy4sIGNhY2hpbmcsIHdyaXRlIGNvbWJpbmluZykgYW5kIGlzIGNydWNpYWwgZm9yIHBlcmZvcm1hbmNlLiBJIG5lZWQgdG8gc2VlICpob3cqIHRoaXMgYGNwYV9jb2xsYXBzZV9sYXJnZV9wYWdlc2AgZnVuY3Rpb24gZmlndXJlcyBpbiB0byB0aGUgcHJvY2Vzcy5cbiogICAqKkNvbGxhcHNlIE9wZXJhdGlvbnMqKjogVGhlIHdvcmQgXCJjb2xsYXBzZVwiIHN1Z2dlc3RzIEknbSBsb29raW5nIGF0IGEgKnJlZHVjdGlvbiogb3BlcmF0aW9uLiBBcmUgd2UgZGVhbGluZyB3aXRoIHNvbWV0aGluZyBsaWtlIHVubWFwcGluZyBhIGxhcmdlIHBhZ2UgYW5kIHJldmVydGluZyBiYWNrIHRvIHNtYWxsZXIgcGFnZXM/IE9yLCBpcyBpdCBpbnZvbHZlZCBpbiBhIGNvbnRleHQgd2hlcmUgKnJlbW92aW5nKiBhIGxhcmdlIHBhZ2UgaXMgcGFydCBvZiB0aGUgcHJvY2Vzcz9cbiogICAqKkNvbnRleHQgaXMga2V5Kio6IEkgbmVlZCB0byBleGFtaW5lIHRoZSBmdW5jdGlvbidzIHVzYWdlIGNvbnRleHQgdG8gdW5kZXJzdGFuZCB3aGF0J3MgdHJpZ2dlcmluZyB0aGlzIGNhbGwsIGFuZCB3aGF0IHRoZSBvdmVyYWxsIGdvYWwgaXMuIElzIHRoaXMgcGFydCBvZiBhIGRlZnJhZ21lbnRhdGlvbiBzdHJhdGVneT8gQSBOVU1BIG9wdGltaXphdGlvbj8gT3Igc29tZXRoaW5nIHJlbGF0ZWQgdG8gbWVtb3J5IGhvdHBsdWdnaW5nPyBJIGtub3cgdGhlcmUgd2lsbCBiZSBhIHNwZWNpZmljIHJlYXNvbiBmb3IgaXQuXG4qICAgKipQb3RlbnRpYWwgaXNzdWVzKio6IEknbGwgYmUga2VlcGluZyBhbiBleWUgb3V0IGZvciBwb3RlbnRpYWwgaXNzdWVzIGxpa2UgY2FjaGUgY29oZXJlbmN5IHByb2JsZW1zLCBUTEIgZmx1c2hlcywgb3IgcmFjZSBjb25kaXRpb25zLiBUaGVzZSBhcmUgYWxsIHRoaW5ncyB0aGF0IGNhbiBjcm9wIHVwIHdoZW4geW91J3JlIG11Y2tpbmcgYXJvdW5kIHdpdGggbWVtb3J5IG1hcHBpbmdzLCBlc3BlY2lhbGx5IHdoZW4gbGFyZ2UgcGFnZXMgYXJlIGludm9sdmVkLlxuKiAgICoqVGhlIGJpZ2dlciBwaWN0dXJlOioqIEknbSBpbnRlcmVzdGVkIGluIHRoZSBvdmVyYWxsIG1lbW9yeSBtYW5hZ2VtZW50IHN0cmF0ZWd5LCBhbmQgaG93IHRoaXMgZnVuY3Rpb24gZml0cyBpbnRvIHRoYXQgc3RyYXRlZ3kuIEknbGwgYmUgbG9va2luZyBmb3IgY29tbWVudHMsIHJlbGF0ZWQgZnVuY3Rpb25zLCBhbmQgYW55IG90aGVyIGluZGljYXRvcnMgdGhhdCBtaWdodCBzaGVkIGxpZ2h0IG9uIGl0cyByb2xlIGluIHRoZSB4ODYgYXJjaGl0ZWN0dXJlLlxuXG5JJ20gcmVhZHkgdG8gZGlnIGluIGFuZCBmaWd1cmUgb3V0IHRoZSBleGFjdCBiZWhhdmlvciBhbmQgcmVhc29uaW5nIGJlaGluZCB0aGF0IGZ1bmN0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4ODc4LCJPdXRwdXRUb2tlbnMiOjQzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTJUMTM6MTI6MzAuMDI5MDczNjY3WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NzcyODUzNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjcGFfY29sbGFwc2VfbGFyZ2VfcGFnZXNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jPTQxMj1zdGF0aWMgaW50IGNvbGxhcHNlX2xhcmdlX3BhZ2VzKHVuc2lnbmVkIGxvbmcgYWRkciwgc3RydWN0IGxpc3RfaGVhZCAqcGd0YWJsZXMpO1xcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtNDEzLVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM6NDE0OnN0YXRpYyB2b2lkIGNwYV9jb2xsYXBzZV9sYXJnZV9wYWdlcyhzdHJ1Y3QgY3BhX2RhdGEgKmNwYSlcXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTQxNS17XFxuLS1cXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jPTQ1Mz1zdGF0aWMgdm9pZCBjcGFfZmx1c2goc3RydWN0IGNwYV9kYXRhICpjcGEsIGludCBjYWNoZSlcXG4tLVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtNDg4LVxcdGlmIChjcGEtXFx1MDAzZWZsYWdzIFxcdTAwMjYgQ1BBX0NPTExBUFNFKVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM6NDg5OlxcdFxcdGNwYV9jb2xsYXBzZV9sYXJnZV9wYWdlcyhjcGEpO1xcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtNDkwLX1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTJUMTM6MTI6MzAuMDg2ODA2MjQzWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI5MjQ3Mjk1NjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgeW91IHJlcXVlc3RlZDpcblxuKipOYXZpZ2F0aW5nIHRoZSBIdWdlIFBhZ2UgTGFuZHNjYXBlKipcblxuT2theSwgc28gd2UncmUgdGFsa2luZyBhYm91dCBodWdlIHBhZ2VzIGFuZCwgbW9yZSBzcGVjaWZpY2FsbHksIHRoZSBgdm1hcF90cnlfaHVnZV9wbWRgIGZ1bmN0aW9uLiBHaXZlbiB0aGUgY29udGV4dCwgbXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGRpdmUgc3RyYWlnaHQgaW50byBgbW0vdm1hbGxvYy5jYC4gVGhhdCdzIHRoZSBsb2dpY2FsIHBsYWNlIHRvIHN0YXJ0IOKAkyBgdm1hbGxvY2AgaXMgZGlyZWN0bHkgaW52b2x2ZWQgaW4gYWxsb2NhdGluZyB2aXJ0dWFsIG1lbW9yeSwgYW5kIHRoZSBodWdlIHBhZ2UgaW1wbGVtZW50YXRpb24gd291bGQgYWxtb3N0IGNlcnRhaW5seSB0b3VjaCBvbiBpdHMgd29ya2luZ3MsIHBhcnRpY3VsYXJseSBkdXJpbmcgYXR0ZW1wdHMgdG8gdXRpbGl6ZSBsYXJnZSBwaHlzaWNhbCBwYWdlcyB3aXRoaW4gdGhlIHZpcnR1YWwgbWVtb3J5IHNwYWNlLiBJIHdhbnQgdG8gc2VlIGhvdyB0aGUgc3lzdGVtIGlzIHRyeWluZyB0byBtYXAgdGhlc2UgbGFyZ2UgcGFnZXMgd2l0aGluIHRoZSB2bWFsbG9jIGFyZW5hLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW50ZXJhY3Rpb24gYmV0d2VlbiBgdm1hcGAsIGh1Z2VwYWdlcyBhbmQgdGhlIHBhZ2UgdGFibGVzLiBMZXQncyBzZWUgd2hhdCdzIHdoYXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk3MjAsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xMlQxMzoxMjozMy4wMTE1Mzc1MTJaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU2NDQzOTM2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInZtYXBfdHJ5X2h1Z2VfcG1kXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL3ZtYWxsb2MuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS92bWFsbG9jLmM9OTU9c3RhdGljIGludCB2bWFwX3B0ZV9yYW5nZShwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLFxcbi0tXFxubW0vdm1hbGxvYy5jLTE0Mi1cXG5tbS92bWFsbG9jLmM6MTQzOnN0YXRpYyBpbnQgdm1hcF90cnlfaHVnZV9wbWQocG1kX3QgKnBtZCwgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCxcXG5tbS92bWFsbG9jLmMtMTQ0LVxcdFxcdFxcdHBoeXNfYWRkcl90IHBoeXNfYWRkciwgcGdwcm90X3QgcHJvdCxcXG4tLVxcbm1tL3ZtYWxsb2MuYz0xODA9c3RhdGljIGludCB2bWFwX3BtZF9yYW5nZShwdWRfdCAqcHVkLCB1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLFxcbi0tXFxubW0vdm1hbGxvYy5jLTE5My1cXG5tbS92bWFsbG9jLmM6MTk0OlxcdFxcdGlmICh2bWFwX3RyeV9odWdlX3BtZChwbWQsIGFkZHIsIG5leHQsIHBoeXNfYWRkciwgcHJvdCxcXG5tbS92bWFsbG9jLmMtMTk1LVxcdFxcdFxcdFxcdFxcdG1heF9wYWdlX3NoaWZ0KSkge1xcbi0tXFxubW0vdm1hbGxvYy5jPTIwNz1zdGF0aWMgaW50IHZtYXBfdHJ5X2h1Z2VfcHVkKHB1ZF90ICpwdWQsIHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsXFxuLS1cXG5tbS92bWFsbG9jLmMtMjI4LVxcbm1tL3ZtYWxsb2MuYzoyMjk6XFx0LyogU2VlIGNvbW1lbnQgaW4gdm1hcF90cnlfaHVnZV9wbWQoKS4gKi9cXG5tbS92bWFsbG9jLmMtMjMwLVxcdHNjb3BlZF9jb25kX2d1YXJkKG1tYXBfcmVhZF9sb2NrX3RyeSwgcmV0dXJuIDAsIFxcdTAwMjZpbml0X21tKSB7XFxuLS1cXG5tbS92bWFsbG9jLmM9MjY0PXN0YXRpYyBpbnQgdm1hcF90cnlfaHVnZV9wNGQocDRkX3QgKnA0ZCwgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCxcXG4tLVxcbm1tL3ZtYWxsb2MuYy0yODUtXFxubW0vdm1hbGxvYy5jOjI4NjpcXHQvKiBTZWUgY29tbWVudCBpbiB2bWFwX3RyeV9odWdlX3BtZCgpLiAqL1xcbm1tL3ZtYWxsb2MuYy0yODctXFx0c2NvcGVkX2NvbmRfZ3VhcmQobW1hcF9yZWFkX2xvY2tfdHJ5LCByZXR1cm4gMCwgXFx1MDAyNmluaXRfbW0pIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTJUMTM6MTI6MzMuMDY3OTg1OTQ3WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY0OTQ2NTI0MjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqS2VybmVsIFBhdGNoIEFuYWx5c2lzIFx1MDAyNiBGdXp6aW5nIFN0cmF0ZWd5KipcblxuT2theSwgc28gbG9va2luZyBhdCB0aGlzIHBhdGNoLCBteSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgdGhhdCBpdCdzIHRvdWNoaW5nIHNvbWUgcHJldHR5IGNyaXRpY2FsIGtlcm5lbCBhcmVhcy4gU3BlY2lmaWNhbGx5LCBpdCdzIG1vZGlmeWluZyB0aGUgY29yZSBsb2dpYyBmb3IgcGFnZSB0YWJsZSBkdW1waW5nIGFuZCBob3cgdm1hbGxvYyBodWdlIHBhZ2VzIGFyZSBtYXBwZWQuIFRoYXQgaW1tZWRpYXRlbHkgZmxhZ3MgaXQgYXMgc29tZXRoaW5nIHdvcnRoIGEgY2xvc2VyIGxvb2ssIGVzcGVjaWFsbHkgZm9yIHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXMuXG5cblRoZSBpbnRyb2R1Y3Rpb24gb2YgbG9ja3Mg4oCTIGBtbWFwX3JlYWRfbG9ja190cnlgIG9uIGBpbml0X21tYCB3aXRoaW4gYHZtYXBfdHJ5X2h1Z2VfcG1kYCwgYHZtYXBfdHJ5X2h1Z2VfcHVkYCwgYW5kIGB2bWFwX3RyeV9odWdlX3A0ZGAsIGFuZCBgbW1hcF9yZWFkX2xvY2tgIGluIGBjcGFfY29sbGFwc2VfbGFyZ2VfcGFnZXNgIHJlYWxseSBjYXRjaGVzIG15IGV5ZS4gTG9ja2luZyBpc3N1ZXMgYXJlIGFsd2F5cyBhIHByaW1lIHRhcmdldCBmb3IgZnV6emluZy4gQW5kIHRoZSBgbW1hcF93cml0ZV9sb2NrX25lc3RlZGAgaW4gYHB0ZHVtcF93YWxrX3BnZGAgaXMgYW5vdGhlciBpbnRlcmVzdGluZyBwb2ludC4gTmVzdGluZy4uLiB0aGF0J3MgYWx3YXlzIHRyaWNreS5cblxuR2l2ZW4gdGhvc2UgbG9ja2luZyBjaGFuZ2VzIGFuZCB0aGUgYXJlYXMgYmVpbmcgbW9kaWZpZWQsIHRoaXMgaXMgZGVmaW5pdGVseSBoaWdoLXByaW9yaXR5IGZvciBmdXp6aW5nLiBJJ20gZ29pbmcgdG8gZm9jdXMgbXkgaW5pdGlhbCBmdXp6aW5nIGVmZm9ydHMgb24gdGhlc2Ugc3ltYm9sczogYHZtYXBfdHJ5X2h1Z2VfcG1kYCwgYHZtYXBfdHJ5X2h1Z2VfcHVkYCwgYHZtYXBfdHJ5X2h1Z2VfcDRkYCwgYGNwYV9jb2xsYXBzZV9sYXJnZV9wYWdlc2AsIGBwdGR1bXBfd2Fsa19wZ2RgLCBhbmQgYHBtZF9mcmVlX3B0ZV9wYWdlYC4gVGhleSBhcHBlYXIgdG8gYmUgdGhlIG1vc3QgbGlrZWx5IGNhbmRpZGF0ZXMgdG8gZXhwb3NlIGFueSBjb25jdXJyZW5jeSBvciBtZW1vcnkgbWFuYWdlbWVudCBidWdzLlxuXG5CZWZvcmUgSSBkaXZlIHRvbyBkZWVwLCBJIG5lZWQgdG8gY29uZmlybSB0aGF0IGBQVERVTVBfREVCVUdGU2AgaXMgdGhlIGNvcnJlY3QgY29uZmlnIHRvIGFjdGl2YXRlIHRoZSByZWxldmFudCBmdW5jdGlvbmFsaXR5LiBHb3R0YSBtYWtlIHN1cmUgSSdtIHRlc3RpbmcgdGhlIHJpZ2h0IGNvZGUgcGF0aHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNDM1LCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjUwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEyVDEzOjEyOjM5LjU2MjY0MDc4NloiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTgwNzk4Nzk3MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgUFREVU1QX0RFQlVHRlNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vS2NvbmZpZy5kZWJ1Zz0yMTk9Y29uZmlnIFBURFVNUFxcbi0tXFxubW0vS2NvbmZpZy5kZWJ1Zy0yMjEtXFxubW0vS2NvbmZpZy5kZWJ1ZzoyMjI6Y29uZmlnIFBURFVNUF9ERUJVR0ZTXFxubW0vS2NvbmZpZy5kZWJ1Zy0yMjMtXFx0Ym9vbCBcXFwiRXhwb3J0IGtlcm5lbCBwYWdldGFibGUgbGF5b3V0IHRvIHVzZXJzcGFjZSB2aWEgZGVidWdmc1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTJUMTM6MTI6NDEuMzcwNjM4MTI5WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQyNTM3MjQ2MzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgUFREVU1QIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBgUFREVU1QX0RFQlVHRlNgIGlzIGluZGVlZCB0aGUgY29uZmlndXJhdGlvbiBpdGVtIHdlIHdhbnQuIElzIHRoZXJlIGFueXRoaW5nIGVsc2UgcmVsZXZhbnQgaGVyZT8gSSBrbm93IGBIQVZFX0FSQ0hfSFVHRV9WTUFMTE9DYCBpcyBhcmNoaXRlY3R1cmUtc3BlY2lmaWMsIHNvIHdlIGNhbid0IGp1c3QgZW5hYmxlIGl0IHVuaXZlcnNhbGx5LiBJdCdzIGEgZGVwZW5kZW5jeSwgc2VsZWN0ZWQgYnkgdGhlIGFyY2hpdGVjdHVyZSBpdHNlbGYuIExldCdzIHNlZSBpZiB0aGVyZSBhcmUgYW55ICpvdGhlciogcmVsYXRlZCBjb25maWdzLiBBaCwgYENPTkZJR19ERUJVR19XWGAgZG9lcyB1c2UgYHB0ZHVtcGAsIGJ1dCB0aGF0IGFwcGVhcnMgdG8gYmUgdHJpZ2dlcmVkIGR1cmluZyB0aGUgYm9vdCBwcm9jZXNzLiBOb3Qgd2hhdCBJJ20gYWZ0ZXIuIGBDT05GSUdfUFREVU1QX0RFQlVHRlNgLCBob3dldmVyLCB0aGF0J3MgdGhlIGtleS4gSXQgYWxsb3dzIGEgdXNlcnNwYWNlIHByb2dyYW0gdG8gdHJpZ2dlciBgcHRkdW1wYCB0aHJvdWdoIGRlYnVnZnMsIHdoaWNoIG1ha2VzIGl0IGFic29sdXRlbHkgaWRlYWwgZm9yIGZ1enppbmcuIFBlcmZlY3QuIE5vdywgSSBuZWVkIHRvIGNoZWNrIGBhcmNoL2FybTY0L21tL21tdS5jYCB0byBsb29rIGF0IGhvdyBgcG1kX2ZyZWVfcHRlX3BhZ2VgIGhhbmRsZXMgbWVtb3J5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTE1MywiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xMlQxMzoxMjo0NS42MjQzNjUzNTdaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0MDAwNTE2MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwbWRfZnJlZV9wdGVfcGFnZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL2FybTY0L21tL21tdS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvYXJtNjQvbW0vbW11LmM9MTg1Nz1pbnQgcG1kX2NsZWFyX2h1Z2UocG1kX3QgKnBtZHApXFxuLS1cXG5hcmNoL2FybTY0L21tL21tdS5jLTE4NjQtXFxuYXJjaC9hcm02NC9tbS9tbXUuYzoxODY1OmludCBwbWRfZnJlZV9wdGVfcGFnZShwbWRfdCAqcG1kcCwgdW5zaWduZWQgbG9uZyBhZGRyKVxcbmFyY2gvYXJtNjQvbW0vbW11LmMtMTg2Ni17XFxuLS1cXG5hcmNoL2FybTY0L21tL21tdS5jPTE4ODQ9aW50IHB1ZF9mcmVlX3BtZF9wYWdlKHB1ZF90ICpwdWRwLCB1bnNpZ25lZCBsb25nIGFkZHIpXFxuLS1cXG5hcmNoL2FybTY0L21tL21tdS5jLTE5MDMtXFx0XFx0aWYgKHBtZF9wcmVzZW50KHBtZHBfZ2V0KHBtZHApKSlcXG5hcmNoL2FybTY0L21tL21tdS5jOjE5MDQ6XFx0XFx0XFx0cG1kX2ZyZWVfcHRlX3BhZ2UocG1kcCwgbmV4dCk7XFxuYXJjaC9hcm02NC9tbS9tbXUuYy0xOTA1LVxcdH0gd2hpbGUgKHBtZHArKywgbmV4dCArPSBQTURfU0laRSwgbmV4dCAhPSBlbmQpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMlQxMzoxMjo0NS44NjQzNzk1NzlaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzcxODgxNTc1OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBmcm9tIG15IG93biBwZXJzcGVjdGl2ZTpcblxuKipJbnZlc3RpZ2F0aW5nIGBwbWRfZnJlZV9wdGVfcGFnZWAgVXNhZ2UgQWNyb3NzIEFyY2hpdGVjdHVyZXMqKlxuXG5SaWdodCwgbGV0IG1lIHNlZS4uLiBJJ20gbG9va2luZyBhdCBgcG1kX2ZyZWVfcHRlX3BhZ2VgLCBhbmQgaXQgYXBwZWFycyBpdCdzIGRlZmluZWQgd2l0aGluIGBhcmNoL2FybTY0L21tL21tdS5jYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IHRoaXMgZnVuY3Rpb24gaXMgZ2VuZXJhbGx5IHVzZWQuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBcIk9rYXksIHdoZXJlIGVsc2UgaXMgdGhpcyBmdW5jdGlvbiBjYWxsZWQ/XCIgVGhlbiBJIHJlbWVtYmVyIHNlZWluZyBpdCByZWZlcmVuY2VkIHdpdGhpbiBgbW0vdm1hbGxvYy5jYC4gSW50ZXJlc3RpbmcuIEEgYml0IG9mIGEgcmVkIGZsYWcgcG9wcyB1cCBpbW1lZGlhdGVseSwgdGhvdWdoLi4uIEkgbmVlZCB0byBhc2NlcnRhaW4gaWYgdGhpcyBmdW5jdGlvbiBpcyB1bml2ZXJzYWxseSBkZWZpbmVkIGFjcm9zcyBhbGwgYXJjaGl0ZWN0dXJlcyBzdXBwb3J0ZWQgYnkgdGhlIGtlcm5lbCwgb3IgaWYgaXQgaXMgaW1wbGVtZW50ZWQgaW4gYW4gYXJjaGl0ZWN0dXJlLXNwZWNpZmljIG1hbm5lci4gVGhpcyBpcyBjcnVjaWFsIGZvciBwb3J0YWJpbGl0eS4gSWYgaXQncyBhIGdlbmVyaWMgaW50ZXJmYWNlIGNhbGwsIHRoZW4gSSBkb24ndCBoYXZlIHRvIHdvcnJ5LiBCdXQgaWYgbm90LCBJIG5lZWQgdG8gY2hlY2sgaXRzIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBpbXBsZW1lbnRhdGlvbnMuIEkgc2hvdWxkIG5vdGUsIGl0IGlzIGFsc28gaW1wb3J0YW50IHRvIGxvb2sgYXQgaG93IGRpZmZlcmVudCBhcmNoaXRlY3R1cmVzIGhhbmRsZSB2bWFsbG9jIHJlZ2lvbnMgYW5kIHBhZ2UgdGFibGUgbWFuYWdlbWVudC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE4MjcsIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xMlQxMzoxMjo0OS41ODMxOTczNzdaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3MTI0MDA3MjEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicG1kX2ZyZWVfcHRlX3BhZ2VcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9hcm02NC9tbS9tbXUuYz0xODU3PWludCBwbWRfY2xlYXJfaHVnZShwbWRfdCAqcG1kcClcXG4tLVxcbmFyY2gvYXJtNjQvbW0vbW11LmMtMTg2NC1cXG5hcmNoL2FybTY0L21tL21tdS5jOjE4NjU6aW50IHBtZF9mcmVlX3B0ZV9wYWdlKHBtZF90ICpwbWRwLCB1bnNpZ25lZCBsb25nIGFkZHIpXFxuYXJjaC9hcm02NC9tbS9tbXUuYy0xODY2LXtcXG4tLVxcbmFyY2gvYXJtNjQvbW0vbW11LmM9MTg4ND1pbnQgcHVkX2ZyZWVfcG1kX3BhZ2UocHVkX3QgKnB1ZHAsIHVuc2lnbmVkIGxvbmcgYWRkcilcXG4tLVxcbmFyY2gvYXJtNjQvbW0vbW11LmMtMTkwMy1cXHRcXHRpZiAocG1kX3ByZXNlbnQocG1kcF9nZXQocG1kcCkpKVxcbmFyY2gvYXJtNjQvbW0vbW11LmM6MTkwNDpcXHRcXHRcXHRwbWRfZnJlZV9wdGVfcGFnZShwbWRwLCBuZXh0KTtcXG5hcmNoL2FybTY0L21tL21tdS5jLTE5MDUtXFx0fSB3aGlsZSAocG1kcCsrLCBuZXh0ICs9IFBNRF9TSVpFLCBuZXh0ICE9IGVuZCk7XFxuLS1cXG5hcmNoL3Bvd2VycGMvbW0vYm9vazNzNjQvcmFkaXhfcGd0YWJsZS5jPTE2NzU9aW50IHBtZF9jbGVhcl9odWdlKHBtZF90ICpwbWQpXFxuLS1cXG5hcmNoL3Bvd2VycGMvbW0vYm9vazNzNjQvcmFkaXhfcGd0YWJsZS5jLTE2ODQtXFxuYXJjaC9wb3dlcnBjL21tL2Jvb2szczY0L3JhZGl4X3BndGFibGUuYzoxNjg1OmludCBwbWRfZnJlZV9wdGVfcGFnZShwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIGFkZHIpXFxuYXJjaC9wb3dlcnBjL21tL2Jvb2szczY0L3JhZGl4X3BndGFibGUuYy0xNjg2LXtcXG4tLVxcbmFyY2gvcmlzY3YvbW0vcGd0YWJsZS5jPTExNz1pbnQgcG1kX2NsZWFyX2h1Z2UocG1kX3QgKnBtZClcXG4tLVxcbmFyY2gvcmlzY3YvbW0vcGd0YWJsZS5jLTEyNC1cXG5hcmNoL3Jpc2N2L21tL3BndGFibGUuYzoxMjU6aW50IHBtZF9mcmVlX3B0ZV9wYWdlKHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgYWRkcilcXG5hcmNoL3Jpc2N2L21tL3BndGFibGUuYy0xMjYte1xcbi0tXFxuYXJjaC94ODYvbW0vcGd0YWJsZS5jPTcxOD1pbnQgcHVkX2ZyZWVfcG1kX3BhZ2UocHVkX3QgKnB1ZCwgdW5zaWduZWQgbG9uZyBhZGRyKVxcbi0tXFxuYXJjaC94ODYvbW0vcGd0YWJsZS5jLTc1NC0vKipcXG5hcmNoL3g4Ni9tbS9wZ3RhYmxlLmM6NzU1OiAqIHBtZF9mcmVlX3B0ZV9wYWdlIC0gQ2xlYXIgUE1EIGVudHJ5IGFuZCBmcmVlIFBURSBwYWdlLlxcbmFyY2gveDg2L21tL3BndGFibGUuYy03NTYtICogQHBtZDogUG9pbnRlciB0byB0aGUgUE1EXFxuLS1cXG5hcmNoL3g4Ni9tbS9wZ3RhYmxlLmMtNzYxLSAqL1xcbmFyY2gveDg2L21tL3BndGFibGUuYzo3NjI6aW50IHBtZF9mcmVlX3B0ZV9wYWdlKHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgYWRkcilcXG5hcmNoL3g4Ni9tbS9wZ3RhYmxlLmMtNzYzLXtcXG4tLVxcbmFyY2gveDg2L21tL3BndGFibGUuYy03ODItICovXFxuYXJjaC94ODYvbW0vcGd0YWJsZS5jOjc4MzppbnQgcG1kX2ZyZWVfcHRlX3BhZ2UocG1kX3QgKnBtZCwgdW5zaWduZWQgbG9uZyBhZGRyKVxcbmFyY2gveDg2L21tL3BndGFibGUuYy03ODQte1xcbi0tXFxuaW5jbHVkZS9saW51eC9wZ3RhYmxlLmg9MjE3Nj1pbnQgcHVkX2ZyZWVfcG1kX3BhZ2UocHVkX3QgKnB1ZCwgdW5zaWduZWQgbG9uZyBhZGRyKTtcXG5pbmNsdWRlL2xpbnV4L3BndGFibGUuaDoyMTc3OmludCBwbWRfZnJlZV9wdGVfcGFnZShwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIGFkZHIpO1xcbmluY2x1ZGUvbGludXgvcGd0YWJsZS5oLTIxNzgtI2Vsc2VcXHQvKiAhQ09ORklHX0hBVkVfQVJDSF9IVUdFX1ZNQVAgKi9cXG4tLVxcbmluY2x1ZGUvbGludXgvcGd0YWJsZS5oPTIyMDQ9c3RhdGljIGlubGluZSBpbnQgcHVkX2ZyZWVfcG1kX3BhZ2UocHVkX3QgKnB1ZCwgdW5zaWduZWQgbG9uZyBhZGRyKVxcbi0tXFxuaW5jbHVkZS9saW51eC9wZ3RhYmxlLmgtMjIwNy19XFxuaW5jbHVkZS9saW51eC9wZ3RhYmxlLmg6MjIwODpzdGF0aWMgaW5saW5lIGludCBwbWRfZnJlZV9wdGVfcGFnZShwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIGFkZHIpXFxuaW5jbHVkZS9saW51eC9wZ3RhYmxlLmgtMjIwOS17XFxuLS1cXG5tbS92bWFsbG9jLmM9MTQzPXN0YXRpYyBpbnQgdm1hcF90cnlfaHVnZV9wbWQocG1kX3QgKnBtZCwgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCxcXG4tLVxcbm1tL3ZtYWxsb2MuYy0xNzMtXFx0c2NvcGVkX2NvbmRfZ3VhcmQobW1hcF9yZWFkX2xvY2tfdHJ5LCByZXR1cm4gMCwgXFx1MDAyNmluaXRfbW0pIHtcXG5tbS92bWFsbG9jLmM6MTc0OlxcdFxcdGlmICghcG1kX2ZyZWVfcHRlX3BhZ2UocG1kLCBhZGRyKSlcXG5tbS92bWFsbG9jLmMtMTc1LVxcdFxcdFxcdHJldHVybiAwO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMlQxMzoxMjo1MS4yOTU2MDMzNjhaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDU0NjU5NjI3NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgSHVnZSBWTUFQIFN1cHBvcnQgYW5kIFBhZ2UgVGFibGUgRHVtcGluZyoqXG5cbk9rYXksIHNvIHRoaXMgaXMgZGVmaW5pdGVseSBkZWZpbmVkIGZvciBhcmNoaXRlY3R1cmVzIHRoYXQgc3VwcG9ydCB0aGUgaHVnZSB2bWFwLiBJIG5lZWQgdG8gcmV2aXNpdCBgY3BhX2NvbGxhcHNlX2xhcmdlX3BhZ2VzYCB0byB1bmRlcnN0YW5kIHRoZSBjdXJyZW50IHN0YXRlIG9mIHRoaW5ncy4gUmlnaHQsIGl0J3MgaW4gYGFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmNgLiBOb3csIGlzIHRoZXJlIGFueSBjb25maWd1cmF0aW9uIHRpZWQgdG8gYHNldF9tZW1vcnkuY2A/IE5vLCBpdCdzIGFsd2F5cyBjb21waWxlZCBmb3IgeDg2LiBHb29kLlxuXG5TbywgdGhlIGtleSBjb25maWd1cmF0aW9ucyBJIG5lZWQgdG8ga2VlcCBpbiBtaW5kIGFyZSBqdXN0IGBQVERVTVBfREVCVUdGU2AuXG5cbk15IGZvY3VzIHN5bWJvbHMgaGVyZSBuZWVkIHRvIGJlOlxuKiAgIGB2bWFwX3RyeV9odWdlX3BtZGBcbiogICBgdm1hcF90cnlfaHVnZV9wdWRgXG4qICAgYHZtYXBfdHJ5X2h1Z2VfcDRkYFxuKiAgIGBjcGFfY29sbGFwc2VfbGFyZ2VfcGFnZXNgXG4qICAgYHB0ZHVtcF93YWxrX3BnZGBcblxuTGV0IG1lIHF1aWNrbHkgYXNzZXNzIGlmIGB3YWxrX3BhZ2VfcmFuZ2VfZGVidWdgIGlzIHdvcnRoIGV4YW1pbmluZyBmdXJ0aGVyLiBBaCwgaXQncyBpbiBgbW0vcGFnZXdhbGsuY2AsIHRoYXQgc2VlbXMgYXBwcm9wcmlhdGUsIGxldCdzIGtlZXAgdGhhdCBpbiBtaW5kLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzMwNywiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xMlQxMzoxMjo1NS44NDIyMDExMTNaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU5NzA1MDc1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIndhbGtfcGFnZV9yYW5nZV9kZWJ1Z1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9wYWdld2Fsay5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3BhZ2V3YWxrLmM9NjQ4PWludCB3YWxrX2tlcm5lbF9wYWdlX3RhYmxlX3JhbmdlX2xvY2tsZXNzKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLFxcbi0tXFxubW0vcGFnZXdhbGsuYy02NjctLyoqXFxubW0vcGFnZXdhbGsuYzo2Njg6ICogd2Fsa19wYWdlX3JhbmdlX2RlYnVnIC0gd2FsayBhIHJhbmdlIG9mIHBhZ2V0YWJsZXMgbm90IGJhY2tlZCBieSBhIHZtYVxcbm1tL3BhZ2V3YWxrLmMtNjY5LSAqIEBtbTpcXHRcXHRtbV9zdHJ1Y3QgcmVwcmVzZW50aW5nIHRoZSB0YXJnZXQgcHJvY2VzcyBvZiBwYWdlIHRhYmxlIHdhbGtcXG4tLVxcbm1tL3BhZ2V3YWxrLmMtNjgzLSAqL1xcbm1tL3BhZ2V3YWxrLmM6Njg0OmludCB3YWxrX3BhZ2VfcmFuZ2VfZGVidWcoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgc3RhcnQsXFxubW0vcGFnZXdhbGsuYy02ODUtXFx0XFx0XFx0ICB1bnNpZ25lZCBsb25nIGVuZCwgY29uc3Qgc3RydWN0IG1tX3dhbGtfb3BzICpvcHMsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEyVDEzOjEyOjU1LjkwMTkxMjkxOVoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MTMxMzc5MjQ3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBDb2RlIE1vZGlmaWNhdGlvbnMgYW5kIFBvdGVudGlhbCBJbXBhY3RzKipcblxuT2theSwgc28gSSBzZWUgdGhhdCBgd2Fsa19wYWdlX3JhbmdlX2RlYnVnYCBoYXMgYmVlbiBhZGp1c3RlZC4gU3BlY2lmaWNhbGx5LCB0aGUgYWRkaXRpb24gb2YgYG1tYXBfYXNzZXJ0X3dyaXRlX2xvY2tlZChcdTAwMjZpbml0X21tKTtgIGFuZCB0aGUgcmVtb3ZhbCBvZiB0aGUgc3BlY2lhbCBjYXNpbmcgZm9yIGBpbml0X21tYCBqdW1wIG91dCBpbW1lZGlhdGVseS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIGNoYW5nZSB0aG9yb3VnaGx5LiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCB0aGlzIGxpa2VseSB0aWdodGVucyB1cCB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgcmVsYXRlZCBhc3NlcnRpb25zLCBwYXJ0aWN1bGFybHkgYXJvdW5kIGxvY2tpbmcuXG5cbk5vdywgSSBuZWVkIHRvIGNoZWNrIGZvciByZWxhdGVkIGNvbmZpZ3VyYXRpb25zLiBgQ09ORklHX1BURFVNUF9ERUJVR0ZTYCBpcyB0aGUgcHJpbWFyeSBvbmUgdGhhdCBjb21lcyB0byBtaW5kLCBhcyBpdCdzIGRpcmVjdGx5IGxpbmtlZCB0byBkZWJ1Z2dpbmcgcGFnZSB0YWJsZXMsIHdoaWNoIHRoaXMgbW9kaWZpY2F0aW9uIHRvdWNoZXMuIExldCdzIHNlZSBpZiB0aGVyZSBhcmUgYW55IG90aGVycy4gSG1tLCB3aGF0IGFib3V0IGBDT05GSUdfREVCVUdfV1hgPyBJdCBkb2VzIGludm9sdmUgcHRkdW1wLCBidXQgaXQgc2VlbXMgdG8gYmUgc29sZWx5IGEgYm9vdC10aW1lIGNvbmZpZ3VyYXRpb24uIFRoYXQgc3VnZ2VzdHMgaXQgbWlnaHQgbm90IGJlIGEgZGlyZWN0IGZhY3RvciBoZXJlLCBidXQgaXQncyB3b3J0aCBub3RpbmcgZm9yIGNvbXBsZXRlbmVzcy4gSSBzaG91bGQgYWxzbyBpbnZlc3RpZ2F0ZSBgQ09ORklHX1g4Nl9QVERVTVBgIOKAkyBpdCdzIGNydWNpYWwgdG8gdW5kZXJzdGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIGFsdGVyZWQgZnVuY3Rpb24uIEkgbmVlZCB0byBtYXAgb3V0IHRoZSBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcyBhbmQgdW5kZXJzdGFuZCB0aGUgc2NvcGUgb2YgdGhlIHBvdGVudGlhbCBpbXBhY3QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzOTgxLCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTA4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEyVDEzOjEzOjAwLjAzMzI5NDc0NloiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTczNjEwNzI2OSwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFg4Nl9QVERVTVBcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEyVDEzOjEzOjAxLjc2OTQwOTEwNVoiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyODk4Nzk3OTEwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzc3VtaW5nIEknbSBhbiBleHBlcnQgaW4gdGhpcyBmaWVsZCwgYW5kIHJlbmRlcmVkIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqSW52ZXN0aWdhdGluZyBDb3JlIER1bXBzIGFuZCBQb3RlbnRpYWwgU3lzdGVtIEluZm9ybWF0aW9uKipcblxuTXkgaW1tZWRpYXRlIHRob3VnaHQsIHdoZW4gc2VlaW5nIHRoaXMsIGlzOiBcIlJpZ2h0LCBgQ09ORklHX1BURFVNUF9DT1JFYC4uLiB3aGF0IGFib3V0IGl0P1wiIFRoaXMgc3BlY2lmaWMgY29uZmlndXJhdGlvbiBvcHRpb24gaW1tZWRpYXRlbHkgcGlxdWVzIG15IGludGVyZXN0IGJlY2F1c2UgaXQncyBkaXJlY3RseSByZWxhdGVkIHRvIHRoZSBnZW5lcmF0aW9uIGFuZCBoYW5kbGluZyBvZiBjb3JlIGR1bXBzLCB3aGljaCBhcmUgaW52YWx1YWJsZSBmb3IgZGVidWdnaW5nIGNyYXNoZXMgYW5kIHVuZGVyc3RhbmRpbmcgc3lzdGVtIGJlaGF2aW9yLiBJcyB0aGlzIG9wdGlvbiBlbmFibGVkPyBEaXNhYmxlZD8gV2hhdCdzIHRoZSBjb250ZXh0PyBBcmUgd2UgbG9va2luZyB0byBhbmFseXplIGEgc3BlY2lmaWMgY29yZSBkdW1wLCBvciBpcyB0aGlzIGFib3V0IHN5c3RlbSBjb25maWd1cmF0aW9uIGluIGdlbmVyYWw/IERlcGVuZGluZyBvbiB0aGUgcHJvamVjdCwgdGhlIGFuc3dlcnMgdG8gdGhvc2UgcXVlc3Rpb25zIGNhbiBzaWduaWZpY2FudGx5IGNoYW5nZSBteSBuZXh0IHN0ZXBzLiBJJ2xsIG5lZWQgdG8gcmVtZW1iZXIgdG8gY2hlY2sgaWYgaXQncyBvbiBvciBvZmYhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0Mzc1LCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTJUMTM6MTM6MDQuNjY4MjA5MTc2WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzM2NTQxNTY5LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgUFREVU1QX0NPUkVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEyVDEzOjEzOjA2LjQwNDc2MDYyNFoiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyOTMwNTQ3ODI4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipRdWljayBTY2FuOiBQVERVTVAgT3B0aW9ucyoqXG5cbkFscmlnaHQsIHRoaXMgbG9va3Mgc3RyYWlnaHRmb3J3YXJkLiBTZWVtcyBsaWtlIHdlJ3JlIHplcm9pbmcgaW4gb24ga2VybmVsIGRlYnVnZ2luZyB0b29scyByZWxhdGVkIHRvIHBhZ2UgdGFibGUgZHVtcHMsIHNwZWNpZmljYWxseSBgQ09ORklHX1BURFVNUGAgYW5kIGBDT05GSUdfUFREVU1QX0RFQlVHRlNgLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgbGV0J3MganVzdCBtYWtlIHN1cmUgd2UgdW5kZXJzdGFuZCB0aGUgc2NvcGUgb2YgYENPTkZJR19QVERVTVBgLiBUaGF0J3MgdGhlIGJhc2VsaW5lLCB0aGUgY29yZSBmdW5jdGlvbmFsaXR5LiBJJ2xsIG5lZWQgdG8gY2hlY2sgdGhlIGV4YWN0IGRlZmluaXRpb24gYW5kIHVzYWdlIG9mIHRoaXMgb3B0aW9uLiBJIHdhbnQgdG8gc2VlIGhvdyB0aGlzIHdvcmtzIGFuZCBhbnkgcG90ZW50aWFsIGNhdmVhdHMuIEknbSBhc3N1bWluZyB0aGF0IGBDT05GSUdfUFREVU1QX0RFQlVHRlNgIGJ1aWxkcyBvbiB0b3Agb2YgYENPTkZJR19QVERVTVBgLCBsaWtlbHkgZW5hYmxpbmcgYWNjZXNzIHZpYSBkZWJ1Z2ZzLiBMZXQncyBkaWcgaW4gYW5kIGZpZ3VyZSBvdXQgaG93IGl0IGFsbCBmaXRzIHRvZ2V0aGVyLiBUaGlzIHNob3VsZCBiZSBhIHF1aWNrIG9uZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ1OTEsIk91dHB1dFRva2VucyI6MTgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xMlQxMzoxMzowOS4zMzUzMTAzMjJaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3NDkyNDc0NzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFBURFVNUFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL2FybTY0L2t2bS9LY29uZmlnPTQ1PWlmIEtWTVxcbmFyY2gvYXJtNjQva3ZtL0tjb25maWctNDYtXFxuYXJjaC9hcm02NC9rdm0vS2NvbmZpZzo0Nzpjb25maWcgUFREVU1QX1NUQUdFMl9ERUJVR0ZTXFxuYXJjaC9hcm02NC9rdm0vS2NvbmZpZy00OC1cXHRib29sIFxcXCJQcmVzZW50IHRoZSBzdGFnZS0yIHBhZ2V0YWJsZXMgdG8gZGVidWdmc1xcXCJcXG4tLVxcbm1tL0tjb25maWcuZGVidWc9MjE2PWNvbmZpZyBBUkNIX0hBU19QVERVTVBcXG4tLVxcbm1tL0tjb25maWcuZGVidWctMjE4LVxcbm1tL0tjb25maWcuZGVidWc6MjE5OmNvbmZpZyBQVERVTVBcXG5tbS9LY29uZmlnLmRlYnVnLTIyMC1cXHRib29sXFxubW0vS2NvbmZpZy5kZWJ1Zy0yMjEtXFxubW0vS2NvbmZpZy5kZWJ1ZzoyMjI6Y29uZmlnIFBURFVNUF9ERUJVR0ZTXFxubW0vS2NvbmZpZy5kZWJ1Zy0yMjMtXFx0Ym9vbCBcXFwiRXhwb3J0IGtlcm5lbCBwYWdldGFibGUgbGF5b3V0IHRvIHVzZXJzcGFjZSB2aWEgZGVidWdmc1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTJUMTM6MTM6MTEuMDg0NTYzMDlaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Njg2NjgzNDc1MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiBUaGlzIEtlcm5lbCBQYXRjaCoqXG5cbk9rYXksIHNvIGhlcmUncyB3aGF0IEknbSB0aGlua2luZyBhYm91dCB0aGlzIHBhdGNoLiBgQ09ORklHX1BURFVNUGAgaXMgYSBib29sZWFuLCBidXQgaXQncyBpbmRpcmVjdGx5IGVuYWJsZWQgYnkgYFBURFVNUF9ERUJVR0ZTYC4gVGhhdCBtZWFucyBgUFREVU1QX0RFQlVHRlNgIGlzIHRoZSByZWFsIGtleSB0byBlbmFibGluZyB0aGUgZnVuY3Rpb25hbGl0eSB3ZSdyZSBpbnRlcmVzdGVkIGluLlxuXG5Gcm9tIG15IGV4cGVydCBwZXJzcGVjdGl2ZSwgdGhpcyBkZWZpbml0ZWx5IGxvb2tzIHdvcnRoIGZ1enppbmcuIFRoZSBwYXRjaCBpcyBjaGFuZ2luZyBjb3JlIGtlcm5lbCBsb2dpYywgc3BlY2lmaWNhbGx5IGFyb3VuZCBwYWdlIHRhYmxlIGR1bXBpbmcgYW5kIGhvdyB2bWFsbG9jIGh1Z2UgcGFnZXMgYXJlIG1hcHBlZC4gVGhlIGZhY3QgdGhhdCB0aGV5J3JlIGFkZGluZyBsb2NraW5nIG9uIGBpbml0X21tYCB0byBhdm9pZCB1c2UtYWZ0ZXItZnJlZSBjb25kaXRpb25zIGR1cmluZyBjb25jdXJyZW50IHBhZ2UgdGFibGUgbW9kaWZpY2F0aW9ucyBpbW1lZGlhdGVseSBncmFicyBteSBhdHRlbnRpb24g4oCTIHRoYXQncyBhIGNsYXNzaWMgYXJlYSBmb3IgbWVtb3J5IGNvcnJ1cHRpb24gYnVncy4gQW5kLCBjcnVjaWFsbHksIHRoaXMgZnVuY3Rpb25hbGl0eSBpcyBhY2Nlc3NpYmxlIHRocm91Z2ggZGVidWdmcyBhbmQgdm1hbGxvYyBjYWxscywgd2hpY2ggbWFrZXMgaXQgZWFzaWVyIHRvIHRyaWdnZXIgaW4gYSBjb250cm9sbGVkIGVudmlyb25tZW50LlxuXG5UaGUga2V5IHN5bWJvbHMgSSd2ZSBpZGVudGlmaWVkIGFzIGxpa2VseSB0YXJnZXRzIGFyZTpcblxuKiAgIGB2bWFwX3RyeV9odWdlX3BtZGBcbiogICBgdm1hcF90cnlfaHVnZV9wdWRgXG4qICAgYHZtYXBfdHJ5X2h1Z2VfcDRkYFxuKiAgIGBjcGFfY29sbGFwc2VfbGFyZ2VfcGFnZXNgXG4qICAgYHB0ZHVtcF93YWxrX3BnZGBcbiogICBgd2Fsa19wYWdlX3JhbmdlX2RlYnVnYFxuXG5JJ3ZlIGNvbmZpcm1lZCB0aGF0IGBjcGFfY29sbGFwc2VfbGFyZ2VfcGFnZXNgIGFuZCBgdm1hcF90cnlfaHVnZV9wbWRgIGFyZSBzdGF0aWMgZnVuY3Rpb25zLCB3aGljaCBpcyBmaW5lIHRvIGluY2x1ZGUgc2luY2UgdGhleSBhcmUgcmVsZXZhbnQgdG8gdGhlIHBhdGNoLiBUaGUgb3RoZXIgZnVuY3Rpb25zIGFyZSBleHBvcnRlZC9nbG9iYWwuXG5cblNvLCBpbiBzaG9ydCwgSSdsbCBiZSBlbmFibGluZyBgUFREVU1QX0RFQlVHRlNgIGFzIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbiB0byBmb2N1cyBvbiwgYW5kIHdpbGwgY29uY2VudHJhdGUgbXkgZnV6emluZyBlZmZvcnRzIG9uIHRoZXNlIHNwZWNpZmljIGZ1bmN0aW9ucy4gTm93LCBsZXQncyBnZXQgdGhlIHJlc3VsdHMgc2V0IHVwLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTA1NSwiT3V0cHV0VG9rZW5zIjoxNTQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMTEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTJUMTM6MTM6MTcuOTUxNDAwMzZaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NzUxMTI3NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiUFREVU1QX0RFQlVHRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ2bWFwX3RyeV9odWdlX3BtZFwiLFxuICAgIFwidm1hcF90cnlfaHVnZV9wdWRcIixcbiAgICBcInZtYXBfdHJ5X2h1Z2VfcDRkXCIsXG4gICAgXCJjcGFfY29sbGFwc2VfbGFyZ2VfcGFnZXNcIixcbiAgICBcInB0ZHVtcF93YWxrX3BnZFwiLFxuICAgIFwid2Fsa19wYWdlX3JhbmdlX2RlYnVnXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBrZXJuZWwgbG9naWMgZm9yIHBhZ2UgdGFibGUgZHVtcGluZyBhbmQgdm1hbGxvYyBodWdlIHBhZ2UgbWFwcGluZ3MsIGludHJvZHVjaW5nIGxvY2tpbmcgb24gYGluaXRfbW1gIHRvIHByZXZlbnQgdXNlLWFmdGVyLWZyZWUgZHVyaW5nIGNvbmN1cnJlbnQgcGFnZSB0YWJsZSBtb2RpZmljYXRpb25zLiBUaGlzIGlzIHJlYWNoYWJsZSB2aWEgZGVidWdmcyBhbmQgdm1hbGxvYyBjYWxscy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJQVERVTVBfREVCVUdGU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInZtYXBfdHJ5X2h1Z2VfcG1kXCIsXG4gICAgXCJ2bWFwX3RyeV9odWdlX3B1ZFwiLFxuICAgIFwidm1hcF90cnlfaHVnZV9wNGRcIixcbiAgICBcImNwYV9jb2xsYXBzZV9sYXJnZV9wYWdlc1wiLFxuICAgIFwicHRkdW1wX3dhbGtfcGdkXCIsXG4gICAgXCJ3YWxrX3BhZ2VfcmFuZ2VfZGVidWdcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBjb3JlIGtlcm5lbCBsb2dpYyBmb3IgcGFnZSB0YWJsZSBkdW1waW5nIGFuZCB2bWFsbG9jIGh1Z2UgcGFnZSBtYXBwaW5ncywgaW50cm9kdWNpbmcgbG9ja2luZyBvbiBgaW5pdF9tbWAgdG8gcHJldmVudCB1c2UtYWZ0ZXItZnJlZSBkdXJpbmcgY29uY3VycmVudCBwYWdlIHRhYmxlIG1vZGlmaWNhdGlvbnMuIFRoaXMgaXMgcmVhY2hhYmxlIHZpYSBkZWJ1Z2ZzIGFuZCB2bWFsbG9jIGNhbGxzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowj2h8s[1] Phase: Succeeded StartedAt: 2026-07-12 13:13:29 +0000 UTC FinishedAt: 2026-07-12 13:13:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj2h8s[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-12 13:13:29 +0000 UTC FinishedAt: 2026-07-12 13:13:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj2h8s[2] Phase: Succeeded StartedAt: 2026-07-12 13:13:29 +0000 UTC FinishedAt: 2026-07-12 17:51:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj2h8s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"44696aa3a489d2baf58efa61b37833f100072bee","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTDUMP_DEBUGFS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["bpf"],"focus_symbols":["vmap_try_huge_pmd","vmap_try_huge_pud","vmap_try_huge_p4d","cpa_collapse_large_pages","ptdump_walk_pgd","walk_page_range_debug"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"44696aa3a489d2baf58efa61b37833f100072bee","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTDUMP_DEBUGFS"],"series_id":"6ed0e57f-8f83-472b-bc1b-aabbc1a237de","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-07-12 13:13:29 +0000 UTC FinishedAt: 2026-07-12 17:51:28 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"44696aa3a489d2baf58efa61b37833f100072bee","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTDUMP_DEBUGFS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["bpf"],"focus_symbols":["vmap_try_huge_pmd","vmap_try_huge_pud","vmap_try_huge_p4d","cpa_collapse_large_pages","ptdump_walk_pgd","walk_page_range_debug"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"44696aa3a489d2baf58efa61b37833f100072bee","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTDUMP_DEBUGFS"],"series_id":"6ed0e57f-8f83-472b-bc1b-aabbc1a237de","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowj2h8s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"44696aa3a489d2baf58efa61b37833f100072bee","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTDUMP_DEBUGFS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["bpf"],"focus_symbols":["vmap_try_huge_pmd","vmap_try_huge_pud","vmap_try_huge_p4d","cpa_collapse_large_pages","ptdump_walk_pgd","walk_page_range_debug"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"44696aa3a489d2baf58efa61b37833f100072bee","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTDUMP_DEBUGFS"],"series_id":"6ed0e57f-8f83-472b-bc1b-aabbc1a237de","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-07-12 13:13:29 +0000 UTC FinishedAt: 2026-07-12 13:13:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj2h8s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"44696aa3a489d2baf58efa61b37833f100072bee","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTDUMP_DEBUGFS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["bpf"],"focus_symbols":["vmap_try_huge_pmd","vmap_try_huge_pud","vmap_try_huge_p4d","cpa_collapse_large_pages","ptdump_walk_pgd","walk_page_range_debug"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"44696aa3a489d2baf58efa61b37833f100072bee","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTDUMP_DEBUGFS"],"series_id":"6ed0e57f-8f83-472b-bc1b-aabbc1a237de","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-07-12 13:13:29 +0000 UTC FinishedAt: 2026-07-12 13:13:34 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"44696aa3a489d2baf58efa61b37833f100072bee","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTDUMP_DEBUGFS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},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-workflowj2h8s/series-workflowj2h8s-convert-artifact-606932702/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowj2h8s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"44696aa3a489d2baf58efa61b37833f100072bee","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTDUMP_DEBUGFS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["bpf"],"focus_symbols":["vmap_try_huge_pmd","vmap_try_huge_pud","vmap_try_huge_p4d","cpa_collapse_large_pages","ptdump_walk_pgd","walk_page_range_debug"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"44696aa3a489d2baf58efa61b37833f100072bee","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTDUMP_DEBUGFS"],"series_id":"6ed0e57f-8f83-472b-bc1b-aabbc1a237de","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-07-12 13:13:39 +0000 UTC FinishedAt: 2026-07-12 13:54:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj2h8s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"44696aa3a489d2baf58efa61b37833f100072bee","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTDUMP_DEBUGFS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["bpf"],"focus_symbols":["vmap_try_huge_pmd","vmap_try_huge_pud","vmap_try_huge_p4d","cpa_collapse_large_pages","ptdump_walk_pgd","walk_page_range_debug"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"44696aa3a489d2baf58efa61b37833f100072bee","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTDUMP_DEBUGFS"],"series_id":"6ed0e57f-8f83-472b-bc1b-aabbc1a237de","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-07-12 13:13:39 +0000 UTC FinishedAt: 2026-07-12 13:54:35 +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:*a482f02e-fa76-4cd9-b539-66e845419b0d,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-workflowj2h8s/series-workflowj2h8s-convert-artifact-606932702/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": "43209cc9-3d95-4b50-9b84-54296cb610b0", "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-workflowj2h8s/series-workflowj2h8s-build-action-4188614596/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowj2h8s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"44696aa3a489d2baf58efa61b37833f100072bee","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTDUMP_DEBUGFS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["bpf"],"focus_symbols":["vmap_try_huge_pmd","vmap_try_huge_pud","vmap_try_huge_p4d","cpa_collapse_large_pages","ptdump_walk_pgd","walk_page_range_debug"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"44696aa3a489d2baf58efa61b37833f100072bee","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTDUMP_DEBUGFS"],"series_id":"6ed0e57f-8f83-472b-bc1b-aabbc1a237de","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-07-12 13:13:39 +0000 UTC FinishedAt: 2026-07-12 13:54:08 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*a482f02e-fa76-4cd9-b539-66e845419b0d,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-workflowj2h8s/series-workflowj2h8s-convert-artifact-606932702/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": "43209cc9-3d95-4b50-9b84-54296cb610b0", "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-workflowj2h8s/series-workflowj2h8s-build-action-4188614596/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowj2h8s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"44696aa3a489d2baf58efa61b37833f100072bee","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTDUMP_DEBUGFS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["bpf"],"focus_symbols":["vmap_try_huge_pmd","vmap_try_huge_pud","vmap_try_huge_p4d","cpa_collapse_large_pages","ptdump_walk_pgd","walk_page_range_debug"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"44696aa3a489d2baf58efa61b37833f100072bee","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTDUMP_DEBUGFS"],"series_id":"6ed0e57f-8f83-472b-bc1b-aabbc1a237de","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-07-12 13:54:35 +0000 UTC FinishedAt: 2026-07-12 13:54:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj2h8s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"44696aa3a489d2baf58efa61b37833f100072bee","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTDUMP_DEBUGFS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["bpf"],"focus_symbols":["vmap_try_huge_pmd","vmap_try_huge_pud","vmap_try_huge_p4d","cpa_collapse_large_pages","ptdump_walk_pgd","walk_page_range_debug"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"44696aa3a489d2baf58efa61b37833f100072bee","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTDUMP_DEBUGFS"],"series_id":"6ed0e57f-8f83-472b-bc1b-aabbc1a237de","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-07-12 13:54:35 +0000 UTC FinishedAt: 2026-07-12 13:54:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj2h8s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"44696aa3a489d2baf58efa61b37833f100072bee","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTDUMP_DEBUGFS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["bpf"],"focus_symbols":["vmap_try_huge_pmd","vmap_try_huge_pud","vmap_try_huge_p4d","cpa_collapse_large_pages","ptdump_walk_pgd","walk_page_range_debug"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"44696aa3a489d2baf58efa61b37833f100072bee","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTDUMP_DEBUGFS"],"series_id":"6ed0e57f-8f83-472b-bc1b-aabbc1a237de","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-07-12 13:54:35 +0000 UTC FinishedAt: 2026-07-12 13:54:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj2h8s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"44696aa3a489d2baf58efa61b37833f100072bee","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTDUMP_DEBUGFS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["bpf"],"focus_symbols":["vmap_try_huge_pmd","vmap_try_huge_pud","vmap_try_huge_p4d","cpa_collapse_large_pages","ptdump_walk_pgd","walk_page_range_debug"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"44696aa3a489d2baf58efa61b37833f100072bee","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTDUMP_DEBUGFS"],"series_id":"6ed0e57f-8f83-472b-bc1b-aabbc1a237de","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-07-12 13:54:35 +0000 UTC FinishedAt: 2026-07-12 13:54:45 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"44696aa3a489d2baf58efa61b37833f100072bee","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTDUMP_DEBUGFS"],"series_id":"6ed0e57f-8f83-472b-bc1b-aabbc1a237de","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},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-workflowj2h8s/series-workflowj2h8s-convert-artifact-1905648785/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowj2h8s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"44696aa3a489d2baf58efa61b37833f100072bee","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTDUMP_DEBUGFS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["bpf"],"focus_symbols":["vmap_try_huge_pmd","vmap_try_huge_pud","vmap_try_huge_p4d","cpa_collapse_large_pages","ptdump_walk_pgd","walk_page_range_debug"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"44696aa3a489d2baf58efa61b37833f100072bee","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTDUMP_DEBUGFS"],"series_id":"6ed0e57f-8f83-472b-bc1b-aabbc1a237de","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-07-12 13:54:56 +0000 UTC FinishedAt: 2026-07-12 13:57:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj2h8s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"44696aa3a489d2baf58efa61b37833f100072bee","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTDUMP_DEBUGFS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["bpf"],"focus_symbols":["vmap_try_huge_pmd","vmap_try_huge_pud","vmap_try_huge_p4d","cpa_collapse_large_pages","ptdump_walk_pgd","walk_page_range_debug"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"44696aa3a489d2baf58efa61b37833f100072bee","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTDUMP_DEBUGFS"],"series_id":"6ed0e57f-8f83-472b-bc1b-aabbc1a237de","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-07-12 13:54:56 +0000 UTC FinishedAt: 2026-07-12 13:56:58 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*43209cc9-3d95-4b50-9b84-54296cb610b0,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-workflowj2h8s/series-workflowj2h8s-build-action-4188614596/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-workflowj2h8s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"44696aa3a489d2baf58efa61b37833f100072bee","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTDUMP_DEBUGFS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["bpf"],"focus_symbols":["vmap_try_huge_pmd","vmap_try_huge_pud","vmap_try_huge_p4d","cpa_collapse_large_pages","ptdump_walk_pgd","walk_page_range_debug"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"44696aa3a489d2baf58efa61b37833f100072bee","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTDUMP_DEBUGFS"],"series_id":"6ed0e57f-8f83-472b-bc1b-aabbc1a237de","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-07-12 13:57:08 +0000 UTC FinishedAt: 2026-07-12 13:57:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj2h8s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"44696aa3a489d2baf58efa61b37833f100072bee","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTDUMP_DEBUGFS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["bpf"],"focus_symbols":["vmap_try_huge_pmd","vmap_try_huge_pud","vmap_try_huge_p4d","cpa_collapse_large_pages","ptdump_walk_pgd","walk_page_range_debug"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"44696aa3a489d2baf58efa61b37833f100072bee","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTDUMP_DEBUGFS"],"series_id":"6ed0e57f-8f83-472b-bc1b-aabbc1a237de","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-07-12 13:57:08 +0000 UTC FinishedAt: 2026-07-12 13:57:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj2h8s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"44696aa3a489d2baf58efa61b37833f100072bee","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTDUMP_DEBUGFS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["bpf"],"focus_symbols":["vmap_try_huge_pmd","vmap_try_huge_pud","vmap_try_huge_p4d","cpa_collapse_large_pages","ptdump_walk_pgd","walk_page_range_debug"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"44696aa3a489d2baf58efa61b37833f100072bee","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTDUMP_DEBUGFS"],"series_id":"6ed0e57f-8f83-472b-bc1b-aabbc1a237de","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-07-12 13:57:08 +0000 UTC FinishedAt: 2026-07-12 14:46:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj2h8s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"44696aa3a489d2baf58efa61b37833f100072bee","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTDUMP_DEBUGFS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["bpf"],"focus_symbols":["vmap_try_huge_pmd","vmap_try_huge_pud","vmap_try_huge_p4d","cpa_collapse_large_pages","ptdump_walk_pgd","walk_page_range_debug"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"44696aa3a489d2baf58efa61b37833f100072bee","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTDUMP_DEBUGFS"],"series_id":"6ed0e57f-8f83-472b-bc1b-aabbc1a237de","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-07-12 13:57:08 +0000 UTC FinishedAt: 2026-07-12 14:46:44 +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:*a482f02e-fa76-4cd9-b539-66e845419b0d,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-workflowj2h8s/series-workflowj2h8s-convert-artifact-1905648785/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": "a13bede8-38ae-4426-847d-7daa956d190d", "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-workflowj2h8s/series-workflowj2h8s-build-action-665637981/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowj2h8s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"44696aa3a489d2baf58efa61b37833f100072bee","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTDUMP_DEBUGFS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["bpf"],"focus_symbols":["vmap_try_huge_pmd","vmap_try_huge_pud","vmap_try_huge_p4d","cpa_collapse_large_pages","ptdump_walk_pgd","walk_page_range_debug"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"44696aa3a489d2baf58efa61b37833f100072bee","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTDUMP_DEBUGFS"],"series_id":"6ed0e57f-8f83-472b-bc1b-aabbc1a237de","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-07-12 13:57:08 +0000 UTC FinishedAt: 2026-07-12 14:46:34 +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:*a482f02e-fa76-4cd9-b539-66e845419b0d,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-workflowj2h8s/series-workflowj2h8s-convert-artifact-1905648785/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": "a13bede8-38ae-4426-847d-7daa956d190d", "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-workflowj2h8s/series-workflowj2h8s-build-action-665637981/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowj2h8s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"44696aa3a489d2baf58efa61b37833f100072bee","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTDUMP_DEBUGFS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["bpf"],"focus_symbols":["vmap_try_huge_pmd","vmap_try_huge_pud","vmap_try_huge_p4d","cpa_collapse_large_pages","ptdump_walk_pgd","walk_page_range_debug"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"44696aa3a489d2baf58efa61b37833f100072bee","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTDUMP_DEBUGFS"],"series_id":"6ed0e57f-8f83-472b-bc1b-aabbc1a237de","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-07-12 14:46:44 +0000 UTC FinishedAt: 2026-07-12 14:46:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj2h8s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"44696aa3a489d2baf58efa61b37833f100072bee","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTDUMP_DEBUGFS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["bpf"],"focus_symbols":["vmap_try_huge_pmd","vmap_try_huge_pud","vmap_try_huge_p4d","cpa_collapse_large_pages","ptdump_walk_pgd","walk_page_range_debug"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"44696aa3a489d2baf58efa61b37833f100072bee","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTDUMP_DEBUGFS"],"series_id":"6ed0e57f-8f83-472b-bc1b-aabbc1a237de","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-07-12 14:46:44 +0000 UTC FinishedAt: 2026-07-12 14:46:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj2h8s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"44696aa3a489d2baf58efa61b37833f100072bee","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTDUMP_DEBUGFS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["bpf"],"focus_symbols":["vmap_try_huge_pmd","vmap_try_huge_pud","vmap_try_huge_p4d","cpa_collapse_large_pages","ptdump_walk_pgd","walk_page_range_debug"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"44696aa3a489d2baf58efa61b37833f100072bee","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTDUMP_DEBUGFS"],"series_id":"6ed0e57f-8f83-472b-bc1b-aabbc1a237de","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-07-12 14:46:44 +0000 UTC FinishedAt: 2026-07-12 14:48:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj2h8s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"44696aa3a489d2baf58efa61b37833f100072bee","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTDUMP_DEBUGFS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["bpf"],"focus_symbols":["vmap_try_huge_pmd","vmap_try_huge_pud","vmap_try_huge_p4d","cpa_collapse_large_pages","ptdump_walk_pgd","walk_page_range_debug"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"44696aa3a489d2baf58efa61b37833f100072bee","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTDUMP_DEBUGFS"],"series_id":"6ed0e57f-8f83-472b-bc1b-aabbc1a237de","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-07-12 14:46:44 +0000 UTC FinishedAt: 2026-07-12 14:48:27 +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:*a13bede8-38ae-4426-847d-7daa956d190d,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-workflowj2h8s/series-workflowj2h8s-build-action-665637981/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-workflowj2h8s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"44696aa3a489d2baf58efa61b37833f100072bee","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTDUMP_DEBUGFS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["bpf"],"focus_symbols":["vmap_try_huge_pmd","vmap_try_huge_pud","vmap_try_huge_p4d","cpa_collapse_large_pages","ptdump_walk_pgd","walk_page_range_debug"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"44696aa3a489d2baf58efa61b37833f100072bee","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTDUMP_DEBUGFS"],"series_id":"6ed0e57f-8f83-472b-bc1b-aabbc1a237de","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-07-12 14:48:37 +0000 UTC FinishedAt: 2026-07-12 17:51:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj2h8s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"44696aa3a489d2baf58efa61b37833f100072bee","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTDUMP_DEBUGFS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["bpf"],"focus_symbols":["vmap_try_huge_pmd","vmap_try_huge_pud","vmap_try_huge_p4d","cpa_collapse_large_pages","ptdump_walk_pgd","walk_page_range_debug"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"44696aa3a489d2baf58efa61b37833f100072bee","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTDUMP_DEBUGFS"],"series_id":"6ed0e57f-8f83-472b-bc1b-aabbc1a237de","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-07-12 14:48:37 +0000 UTC FinishedAt: 2026-07-12 17:51: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","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["bpf"],"focus_symbols":["vmap_try_huge_pmd","vmap_try_huge_pud","vmap_try_huge_p4d","cpa_collapse_large_pages","ptdump_walk_pgd","walk_page_range_debug"],"skip_cover_check":true},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:track,Default:nil,Value:*KASAN,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:base-build-id,Default:nil,Value:*43209cc9-3d95-4b50-9b84-54296cb610b0,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*a13bede8-38ae-4426-847d-7daa956d190d,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-workflowj2h8s/series-workflowj2h8s-build-action-4188614596/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-workflowj2h8s/series-workflowj2h8s-build-action-665637981/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowj2h8s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"44696aa3a489d2baf58efa61b37833f100072bee","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTDUMP_DEBUGFS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["bpf"],"focus_symbols":["vmap_try_huge_pmd","vmap_try_huge_pud","vmap_try_huge_p4d","cpa_collapse_large_pages","ptdump_walk_pgd","walk_page_range_debug"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"44696aa3a489d2baf58efa61b37833f100072bee","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTDUMP_DEBUGFS"],"series_id":"6ed0e57f-8f83-472b-bc1b-aabbc1a237de","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-07-12 14:48:37 +0000 UTC FinishedAt: 2026-07-12 14:48:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj2h8s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"44696aa3a489d2baf58efa61b37833f100072bee","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTDUMP_DEBUGFS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["bpf"],"focus_symbols":["vmap_try_huge_pmd","vmap_try_huge_pud","vmap_try_huge_p4d","cpa_collapse_large_pages","ptdump_walk_pgd","walk_page_range_debug"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"44696aa3a489d2baf58efa61b37833f100072bee","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTDUMP_DEBUGFS"],"series_id":"6ed0e57f-8f83-472b-bc1b-aabbc1a237de","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-07-12 14:48:37 +0000 UTC FinishedAt: 2026-07-12 14:48:41 +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","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["bpf"],"focus_symbols":["vmap_try_huge_pmd","vmap_try_huge_pud","vmap_try_huge_p4d","cpa_collapse_large_pages","ptdump_walk_pgd","walk_page_range_debug"],"skip_cover_check":true},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowj2h8s/series-workflowj2h8s-convert-artifact-3702403526/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowj2h8s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"44696aa3a489d2baf58efa61b37833f100072bee","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTDUMP_DEBUGFS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["bpf"],"focus_symbols":["vmap_try_huge_pmd","vmap_try_huge_pud","vmap_try_huge_p4d","cpa_collapse_large_pages","ptdump_walk_pgd","walk_page_range_debug"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"44696aa3a489d2baf58efa61b37833f100072bee","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTDUMP_DEBUGFS"],"series_id":"6ed0e57f-8f83-472b-bc1b-aabbc1a237de","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-07-12 14:48:37 +0000 UTC FinishedAt: 2026-07-12 14:48:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj2h8s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"44696aa3a489d2baf58efa61b37833f100072bee","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTDUMP_DEBUGFS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["bpf"],"focus_symbols":["vmap_try_huge_pmd","vmap_try_huge_pud","vmap_try_huge_p4d","cpa_collapse_large_pages","ptdump_walk_pgd","walk_page_range_debug"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"44696aa3a489d2baf58efa61b37833f100072bee","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTDUMP_DEBUGFS"],"series_id":"6ed0e57f-8f83-472b-bc1b-aabbc1a237de","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-07-12 14:48:37 +0000 UTC FinishedAt: 2026-07-12 14:48:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj2h8s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"44696aa3a489d2baf58efa61b37833f100072bee","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTDUMP_DEBUGFS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["bpf"],"focus_symbols":["vmap_try_huge_pmd","vmap_try_huge_pud","vmap_try_huge_p4d","cpa_collapse_large_pages","ptdump_walk_pgd","walk_page_range_debug"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"44696aa3a489d2baf58efa61b37833f100072bee","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTDUMP_DEBUGFS"],"series_id":"6ed0e57f-8f83-472b-bc1b-aabbc1a237de","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-07-12 14:48:37 +0000 UTC FinishedAt: 2026-07-12 14:48:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj2h8s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"44696aa3a489d2baf58efa61b37833f100072bee","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTDUMP_DEBUGFS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["bpf"],"focus_symbols":["vmap_try_huge_pmd","vmap_try_huge_pud","vmap_try_huge_p4d","cpa_collapse_large_pages","ptdump_walk_pgd","walk_page_range_debug"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"44696aa3a489d2baf58efa61b37833f100072bee","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTDUMP_DEBUGFS"],"series_id":"6ed0e57f-8f83-472b-bc1b-aabbc1a237de","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-07-12 14:48:47 +0000 UTC FinishedAt: 2026-07-12 17:51:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj2h8s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"44696aa3a489d2baf58efa61b37833f100072bee","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTDUMP_DEBUGFS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["bpf"],"focus_symbols":["vmap_try_huge_pmd","vmap_try_huge_pud","vmap_try_huge_p4d","cpa_collapse_large_pages","ptdump_walk_pgd","walk_page_range_debug"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"44696aa3a489d2baf58efa61b37833f100072bee","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTDUMP_DEBUGFS"],"series_id":"6ed0e57f-8f83-472b-bc1b-aabbc1a237de","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-07-12 14:48:47 +0000 UTC FinishedAt: 2026-07-12 17:51:18 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*43209cc9-3d95-4b50-9b84-54296cb610b0,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*a13bede8-38ae-4426-847d-7daa956d190d,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-workflowj2h8s/series-workflowj2h8s-build-action-4188614596/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-workflowj2h8s/series-workflowj2h8s-build-action-665637981/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-workflowj2h8s/series-workflowj2h8s-convert-artifact-3702403526/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,}