Name: series-workflowqkzn6 Phase: Succeeded StartedAt: 2026-08-06 19:40:48 +0000 UTC FinishedAt: 2026-08-06 23:28:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqkzn6[0] Phase: Succeeded StartedAt: 2026-08-06 19:40:48 +0000 UTC FinishedAt: 2026-08-06 19:44:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqkzn6[0].run-triage Phase: Succeeded StartedAt: 2026-08-06 19:40:48 +0000 UTC FinishedAt: 2026-08-06 19:44:59 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "11c1e836710dcba03e50454a4eedfdbaf8d3050e", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL", "BPF_JIT" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "11c1e836710dcba03e50454a4eedfdbaf8d3050e", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL", "BPF_JIT" ], "series_id": "6985708a-edac-4791-8132-bf1f0839f3d2" }, "track": "KASAN", "fuzz": { "focus": [ "bpf" ], "focus_symbols": [ "percpu_array_map_direct_value_addr", "percpu_array_map_direct_value_meta", "bpf_do_misc_fixups", "bpf_map_direct_read" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDE5OjQyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDssCiAgICAmIzM0O0JQRl9KSVQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtwZXJjcHVfYXJyYXlfbWFwX2RpcmVjdF92YWx1ZV9hZGRyJiMzNDssCiAgICAmIzM0O3BlcmNwdV9hcnJheV9tYXBfZGlyZWN0X3ZhbHVlX21ldGEmIzM0OywKICAgICYjMzQ7YnBmX2RvX21pc2NfZml4dXBzJiMzNDssCiAgICAmIzM0O2JwZl9tYXBfZGlyZWN0X3JlYWQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBzdXBwb3J0IGZvciBgLnBlcmNwdWAgZ2xvYmFsIGRhdGEgbWFwcyBpbiBCUEYuIEl0IG1vZGlmaWVzIHRoZSBCUEYgdmVyaWZpZXIgdG8gaGFuZGxlIGRpcmVjdCBtZW1vcnkgcmVhZHMgZnJvbSBgQlBGX01BUF9UWVBFX1BFUkNQVV9BUlJBWWAgbWFwcyBhbmQgYWRkcyBKSVQgZml4dXBzIHRvIHBhdGNoIGBsZF9pbW02NGAgaW5zdHJ1Y3Rpb25zIHdpdGggcGVyLUNQVSByZWdpc3RlciBtb3Zlcy4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUgY29yZSBCUEYgc3Vic3lzdGVtIGFuZCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBtZW1vcnkgc2FmZXR5IGFuZCBjb3JyZWN0IHZlcmlmaWVyIGJlaGF2aW9yLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDE5OjQyPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgZDE1MWQzZDA5MzJhMzMxYzNlZjM4OWY4NjY3ODFhYTk1OGViODM5ZFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgQXVnIDYgMTk6NDI6MjAgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9hcnJheW1hcC5jIGIva2VybmVsL2JwZi9hcnJheW1hcC5jXG5pbmRleCAyNDhiNDgxODE3OGNkLi4zNDg2NTcwMWY3Zjc1IDEwMDY0NFxuLS0tIGEva2VybmVsL2JwZi9hcnJheW1hcC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvYnBmL2FycmF5bWFwLmNcbkBAIC0yNTksNiAmIzQzOzI1OSwzNyBAQCBzdGF0aWMgdm9pZCAqcGVyY3B1X2FycmF5X21hcF9sb29rdXBfZWxlbShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXkpXG4gXHRyZXR1cm4gdGhpc19jcHVfcHRyKGFycmF5LVx1MDAzZXBwdHJzW2luZGV4IFx1MDAyNiBhcnJheS1cdTAwM2VpbmRleF9tYXNrXSk7XG4gfVxuIFxuJiM0MztzdGF0aWMgaW50IHBlcmNwdV9hcnJheV9tYXBfZGlyZWN0X3ZhbHVlX2FkZHIoY29uc3Qgc3RydWN0IGJwZl9tYXAgKm1hcCwgdTY0ICppbW0sIHUzMiBvZmYpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgYnBmX2FycmF5ICphcnJheSA9IGNvbnRhaW5lcl9vZihtYXAsIHN0cnVjdCBicGZfYXJyYXksIG1hcCk7XG4mIzQzO1xuJiM0MztcdGlmICghYnBmX2ppdF9zdXBwb3J0c19wZXJjcHVfaW5zbigpKVxuJiM0MztcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuJiM0MztcdGlmIChtYXAtXHUwMDNlbWF4X2VudHJpZXMgIT0gMSlcbiYjNDM7XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiYjNDM7XHRpZiAob2ZmIFx1MDAzZT0gbWFwLVx1MDAzZXZhbHVlX3NpemUpXG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XG4mIzQzO1x0KmltbSA9ICh1NjQpKF9fZm9yY2UgdW5zaWduZWQgbG9uZykgYXJyYXktXHUwMDNlcHB0cnNbMF07XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgcGVyY3B1X2FycmF5X21hcF9kaXJlY3RfdmFsdWVfbWV0YShjb25zdCBzdHJ1Y3QgYnBmX21hcCAqbWFwLCB1NjQgaW1tLCB1MzIgKm9mZilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBicGZfYXJyYXkgKmFycmF5ID0gY29udGFpbmVyX29mKG1hcCwgc3RydWN0IGJwZl9hcnJheSwgbWFwKTtcbiYjNDM7XHR1NjQgYmFzZSA9ICh1NjQpKF9fZm9yY2UgdW5zaWduZWQgbG9uZykgYXJyYXktXHUwMDNlcHB0cnNbMF07XG4mIzQzO1xuJiM0MztcdGlmICghYnBmX2ppdF9zdXBwb3J0c19wZXJjcHVfaW5zbigpKVxuJiM0MztcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuJiM0MztcdGlmIChtYXAtXHUwMDNlbWF4X2VudHJpZXMgIT0gMSlcbiYjNDM7XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiYjNDM7XHRpZiAoaW1tIFx1MDAzYyBiYXNlIHx8IGltbSBcdTAwM2U9IGJhc2UgJiM0MzsgYXJyYXktXHUwMDNlZWxlbV9zaXplKVxuJiM0MztcdFx0cmV0dXJuIC1FTk9FTlQ7XG4mIzQzO1xuJiM0MztcdCpvZmYgPSBpbW0gLSBiYXNlO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuIC8qIGVtaXQgQlBGIGluc3RydWN0aW9ucyBlcXVpdmFsZW50IHRvIEMgY29kZSBvZiBwZXJjcHVfYXJyYXlfbWFwX2xvb2t1cF9lbGVtKCkgKi9cbiBzdGF0aWMgaW50IHBlcmNwdV9hcnJheV9tYXBfZ2VuX2xvb2t1cChzdHJ1Y3QgYnBmX21hcCAqbWFwLCBzdHJ1Y3QgYnBmX2luc24gKmluc25fYnVmKVxuIHtcbkBAIC01NTEsOSAmIzQzOzU4MiwxMCBAQCBzdGF0aWMgaW50IGFycmF5X21hcF9jaGVja19idGYoc3RydWN0IGJwZl9tYXAgKm1hcCxcbiBcdFx0XHQgICAgICAgY29uc3Qgc3RydWN0IGJ0Zl90eXBlICprZXlfdHlwZSxcbiBcdFx0XHQgICAgICAgY29uc3Qgc3RydWN0IGJ0Zl90eXBlICp2YWx1ZV90eXBlKVxuIHtcbi1cdC8qIE9uZSBleGNlcHRpb24gZm9yIGtleWxlc3MgQlRGOiAuYnNzLy5kYXRhLy5yb2RhdGEgbWFwICovXG4mIzQzO1x0LyogT25lIGV4Y2VwdGlvbiBmb3Iga2V5bGVzcyBCVEY6IC5ic3MvLmRhdGEvLnJvZGF0YS8ucGVyY3B1IG1hcCAqL1xuIFx0aWYgKGJ0Zl90eXBlX2lzX3ZvaWQoa2V5X3R5cGUpKSB7XG4tXHRcdGlmIChtYXAtXHUwMDNlbWFwX3R5cGUgIT0gQlBGX01BUF9UWVBFX0FSUkFZIHx8XG4mIzQzO1x0XHRpZiAoKG1hcC1cdTAwM2VtYXBfdHlwZSAhPSBCUEZfTUFQX1RZUEVfQVJSQVkgXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHQgICAgIG1hcC1cdTAwM2VtYXBfdHlwZSAhPSBCUEZfTUFQX1RZUEVfUEVSQ1BVX0FSUkFZKSB8fFxuIFx0XHQgICAgbWFwLVx1MDAzZW1heF9lbnRyaWVzICE9IDEpXG4gXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG5AQCAtODMyLDYgJiM0Mzs4NjQsOCBAQCBjb25zdCBzdHJ1Y3QgYnBmX21hcF9vcHMgcGVyY3B1X2FycmF5X21hcF9vcHMgPSB7XG4gXHQubWFwX2dldF9uZXh0X2tleSA9IGJwZl9hcnJheV9nZXRfbmV4dF9rZXksXG4gXHQubWFwX2xvb2t1cF9lbGVtID0gcGVyY3B1X2FycmF5X21hcF9sb29rdXBfZWxlbSxcbiBcdC5tYXBfZ2VuX2xvb2t1cCA9IHBlcmNwdV9hcnJheV9tYXBfZ2VuX2xvb2t1cCxcbiYjNDM7XHQubWFwX2RpcmVjdF92YWx1ZV9hZGRyID0gcGVyY3B1X2FycmF5X21hcF9kaXJlY3RfdmFsdWVfYWRkcixcbiYjNDM7XHQubWFwX2RpcmVjdF92YWx1ZV9tZXRhID0gcGVyY3B1X2FycmF5X21hcF9kaXJlY3RfdmFsdWVfbWV0YSxcbiBcdC5tYXBfdXBkYXRlX2VsZW0gPSBhcnJheV9tYXBfdXBkYXRlX2VsZW0sXG4gXHQubWFwX2RlbGV0ZV9lbGVtID0gYXJyYXlfbWFwX2RlbGV0ZV9lbGVtLFxuIFx0Lm1hcF9sb29rdXBfcGVyY3B1X2VsZW0gPSBwZXJjcHVfYXJyYXlfbWFwX2xvb2t1cF9wZXJjcHVfZWxlbSxcbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL2JhY2t0cmFjay5jIGIva2VybmVsL2JwZi9iYWNrdHJhY2suY1xuaW5kZXggMmY0NzNhZDRmZDdjMS4uM2YxNTBlODU4YWU4YSAxMDA2NDRcbi0tLSBhL2tlcm5lbC9icGYvYmFja3RyYWNrLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9icGYvYmFja3RyYWNrLmNcbkBAIC0yMTQsNyAmIzQzOzIxNCw2IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBidF9pc19yZWdfc2V0KHN0cnVjdCBiYWNrdHJhY2tfc3RhdGUgKmJ0LCB1MzIgcmVnKVxuIFx0cmV0dXJuIGJ0LVx1MDAzZXJlZ19tYXNrc1tidC1cdTAwM2VmcmFtZV0gXHUwMDI2ICgxIFx1MDAzY1x1MDAzYyByZWcpO1xuIH1cbiBcbi1cbiAvKiBmb3JtYXQgcmVnaXN0ZXJzIGJpdG1hc2ssIGUuZy4sIFwmIzM0O3IwLHIyLHI0XCYjMzQ7IGZvciAweDE1IG1hc2sgKi9cbiBzdGF0aWMgdm9pZCBmbXRfcmVnX21hc2soY2hhciAqYnVmLCBzc2l6ZV90IGJ1Zl9zeiwgdTMyIHJlZ19tYXNrKVxuIHtcbkBAIC0yNTQsNyAmIzQzOzI1Myw2IEBAIHZvaWQgYnBmX2ZtdF9zdGFja19tYXNrKGNoYXIgKmJ1Ziwgc3NpemVfdCBidWZfc3osIHU2NCBzdGFja19tYXNrKVxuIFx0fVxuIH1cbiBcbi1cbiAvKiBGb3IgZ2l2ZW4gdmVyaWZpZXIgc3RhdGUgYmFja3RyYWNrX2luc24oKSBpcyBjYWxsZWQgZnJvbSB0aGUgbGFzdCBpbnNuIHRvXG4gICogdGhlIGZpcnN0IGluc24uIEl0cyBwdXJwb3NlIGlzIHRvIGNvbXB1dGUgYSBiaXRtYXNrIG9mIHJlZ2lzdGVycyBhbmRcbiAgKiBzdGFjayBzbG90cyB0aGF0IG5lZWRzIHByZWNpc2lvbiBpbiB0aGUgcGFyZW50IHZlcmlmaWVyIHN0YXRlLlxuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvYnRmLmMgYi9rZXJuZWwvYnBmL2J0Zi5jXG5pbmRleCA0MjQxNDYzM2NmMjYzLi5jODA3YWQyNjNlNmY4IDEwMDY0NFxuLS0tIGEva2VybmVsL2JwZi9idGYuY1xuJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2JwZi9idGYuY1xuQEAgLTI1MzQsNyAmIzQzOzI1MzQsNiBAQCBzdGF0aWMgdm9pZCBidGZfYml0ZmllbGRfc2hvdyh2b2lkICpkYXRhLCB1OCBiaXRzX29mZnNldCxcbiBcdGJ0Zl9pbnQxMjhfcHJpbnQoc2hvdywgcHJpbnRfbnVtKTtcbiB9XG4gXG4tXG4gc3RhdGljIHZvaWQgYnRmX2ludF9iaXRzX3Nob3coY29uc3Qgc3RydWN0IGJ0ZiAqYnRmLFxuIFx0XHRcdCAgICAgIGNvbnN0IHN0cnVjdCBidGZfdHlwZSAqdCxcbiBcdFx0XHQgICAgICB2b2lkICpkYXRhLCB1OCBiaXRzX29mZnNldCxcbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL2NmZy5jIGIva2VybmVsL2JwZi9jZmcuY1xuaW5kZXggZGIzNDE2YTdjOTA0Ny4uODE4ZjdhZmFjODNhNSAxMDA2NDRcbi0tLSBhL2tlcm5lbC9icGYvY2ZnLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9icGYvY2ZnLmNcbkBAIC00Nyw3ICYjNDM7NDcsNiBAQCBlbnVtIHtcbiBcdEJSQU5DSCA9IDIsXG4gfTtcbiBcbi1cbiBzdGF0aWMgdm9pZCBtYXJrX3N1YnByb2dfY2hhbmdlc19wa3RfZGF0YShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBpbnQgb2ZmKVxuIHtcbiBcdHN0cnVjdCBicGZfc3VicHJvZ19pbmZvICpzdWJwcm9nO1xuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvY29uc3RfZm9sZC5jIGIva2VybmVsL2JwZi9jb25zdF9mb2xkLmNcbmluZGV4IGIyYTE5YWNhZGI5MWUuLjU3ODcyNDZiZWYzMDEgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvYnBmL2NvbnN0X2ZvbGQuY1xuJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2JwZi9jb25zdF9mb2xkLmNcbkBAIC0xODIsNyAmIzQzOzE4Miw2IEBAIHN0YXRpYyB2b2lkIGNvbnN0X3JlZ194ZmVyKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBjb25zdF9hcmdfaW5mbyAqXG4gXHRcdHU2NCB2YWwgPSAwO1xuIFxuIFx0XHRpZiAoIWJwZl9tYXBfaXNfcmRvbmx5KG1hcCkgfHwgIW1hcC1cdTAwM2VvcHMtXHUwMDNlbWFwX2RpcmVjdF92YWx1ZV9hZGRyIHx8XG4tXHRcdCAgICBtYXAtXHUwMDNlbWFwX3R5cGUgPT0gQlBGX01BUF9UWVBFX0lOU05fQVJSQVkgfHxcbiBcdFx0ICAgIG9mZiBcdTAwM2MgMCB8fCBvZmYgJiM0Mzsgc2l6ZSBcdTAwM2UgbWFwLVx1MDAzZXZhbHVlX3NpemUgfHxcbiBcdFx0ICAgIGJwZl9tYXBfZGlyZWN0X3JlYWQobWFwLCBvZmYsIHNpemUsIFx1MDAyNnZhbCwgaXNfbGRzeCkpIHtcbiBcdFx0XHQqZHN0ID0gdW5rbm93bjtcbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL2ZpeHVwcy5jIGIva2VybmVsL2JwZi9maXh1cHMuY1xuaW5kZXggYTBiZGRhZGE3OTY0ZS4uZjIzOTg3NDkxMDNiYSAxMDA2NDRcbi0tLSBhL2tlcm5lbC9icGYvZml4dXBzLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9icGYvZml4dXBzLmNcbkBAIC0xNDQ2LDcgJiM0MzsxNDQ2LDYgQEAgaW50IGJwZl9maXh1cF9jYWxsX2FyZ3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcbiBcdHJldHVybiBlcnI7XG4gfVxuIFxuLVxuIC8qIFRoZSBmdW5jdGlvbiByZXF1aXJlcyB0aGF0IGZpcnN0IGluc3RydWN0aW9uIGluICYjMzk7cGF0Y2gmIzM5OyBpcyBpbnNuc2lbcHJvZy1cdTAwM2VsZW4gLSAxXSAqL1xuIHN0YXRpYyBpbnQgYWRkX2hpZGRlbl9zdWJwcm9nKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqcGF0Y2gsIGludCBsZW4pXG4ge1xuQEAgLTE4MTgsNiAmIzQzOzE4MTcsNDMgQEAgaW50IGJwZl9kb19taXNjX2ZpeHVwcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxuIFx0XHRcdGdvdG8gbmV4dF9pbnNuO1xuIFx0XHR9XG4gXG4mIzQzO1x0XHRpZiAoYnBmX2ppdF9zdXBwb3J0c19wZXJjcHVfaW5zbigpIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0ICAgIGluc24tXHUwMDNlY29kZSA9PSAoQlBGX0xEIHwgQlBGX0lNTSB8IEJQRl9EVykgXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHQgICAgKGluc24tXHUwMDNlc3JjX3JlZyA9PSBCUEZfUFNFVURPX01BUF9WQUxVRSB8fFxuJiM0MztcdFx0ICAgICBpbnNuLVx1MDAzZXNyY19yZWcgPT0gQlBGX1BTRVVET19NQVBfSURYX1ZBTFVFKSkge1xuJiM0MztcdFx0XHRzdHJ1Y3QgYnBmX21hcCAqbWFwO1xuJiM0MztcbiYjNDM7XHRcdFx0YXV4ID0gXHUwMDI2ZW52LVx1MDAzZWluc25fYXV4X2RhdGFbaSAmIzQzOyBkZWx0YV07XG4mIzQzO1x0XHRcdG1hcCA9IGVudi1cdTAwM2V1c2VkX21hcHNbYXV4LVx1MDAzZW1hcF9pbmRleF07XG4mIzQzO1x0XHRcdGlmIChtYXAtXHUwMDNlbWFwX3R5cGUgIT0gQlBGX01BUF9UWVBFX1BFUkNQVV9BUlJBWSlcbiYjNDM7XHRcdFx0XHRnb3RvIG5leHRfaW5zbjtcbiYjNDM7XG4mIzQzO1x0XHRcdHByb2ctXHUwMDNlaml0X3JlcXVpcmVkID0gdHJ1ZTtcbiYjNDM7XG4mIzQzO1x0XHRcdC8qXG4mIzQzO1x0XHRcdCAqIFdlIGFyZSAqc2tpcHBpbmcqIGZpcnN0IGhhbGYgb2YgbGRfaW1tNjQgaW5zblxuJiM0MztcdFx0XHQgKiB3aXRoICYjMzk7aSYjNDM7JiM0Mzs7JiMzOTssIHBhdGNoaW5nIG92ZXIgc2Vjb25kIGhhbGYgb2YgaXRcbiYjNDM7XHRcdFx0ICogd2l0aCB0aGF0IHNhbWUgaGFsZiAmIzQzOyBtb3Y2NF9wZXJjcHVfcmVnIGluc24uXG4mIzQzO1x0XHRcdCAqIEFsbCBiZWNhdXNlIGJwZl9wYXRjaF9pbnNuX2RhdGEoKSBjYW4gb25seVxuJiM0MztcdFx0XHQgKiByZXBsYWNlIG9uZSA4LWJ5dGUgaW5zbiwgd2hpY2ggZG9lcyBub3Qgd29ya1xuJiM0MztcdFx0XHQgKiB3ZWxsIGZvciBsZF9pbW02NCBpbnNuLlxuJiM0MztcdFx0XHQgKi9cbiYjNDM7XG4mIzQzO1x0XHRcdGluc25fYnVmWzBdID0gaW5zblsxXTtcbiYjNDM7XHRcdFx0aW5zbl9idWZbMV0gPSBCUEZfTU9WNjRfUEVSQ1BVX1JFRyhpbnNuLVx1MDAzZWRzdF9yZWcsIGluc24tXHUwMDNlZHN0X3JlZyk7XG4mIzQzO1x0XHRcdGNudCA9IDI7XG4mIzQzO1xuJiM0MztcdFx0XHRpJiM0MzsmIzQzOztcbiYjNDM7XHRcdFx0bmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgaSAmIzQzOyBkZWx0YSwgaW5zbl9idWYsIGNudCk7XG4mIzQzO1x0XHRcdGlmICghbmV3X3Byb2cpXG4mIzQzO1x0XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4mIzQzO1xuJiM0MztcdFx0XHRkZWx0YSAgICAmIzQzOz0gY250IC0gMTtcbiYjNDM7XHRcdFx0ZW52LVx1MDAzZXByb2cgPSBwcm9nID0gbmV3X3Byb2c7XG4mIzQzO1x0XHRcdGluc24gICAgICA9IG5ld19wcm9nLVx1MDAzZWluc25zaSAmIzQzOyBpICYjNDM7IGRlbHRhO1xuJiM0MztcdFx0XHRnb3RvIG5leHRfaW5zbjtcbiYjNDM7XHRcdH1cbiYjNDM7XG4gXHRcdGlmIChpbnNuLVx1MDAzZWNvZGUgIT0gKEJQRl9KTVAgfCBCUEZfQ0FMTCkpXG4gXHRcdFx0Z290byBuZXh0X2luc247XG4gXHRcdGlmIChpbnNuLVx1MDAzZXNyY19yZWcgPT0gQlBGX1BTRVVET19DQUxMKVxuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvaGFzaHRhYi5jIGIva2VybmVsL2JwZi9oYXNodGFiLmNcbmluZGV4IDlmMzk0ZTFhYTJlODUuLmQ0MGNiNWRkNDQ2Y2EgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvYnBmL2hhc2h0YWIuY1xuJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2JwZi9oYXNodGFiLmNcbkBAIC05OTgsNyAmIzQzOzk5OCw2IEBAIHN0YXRpYyB2b2lkIGRlY19lbGVtX2NvdW50KHN0cnVjdCBicGZfaHRhYiAqaHRhYilcbiBcdFx0YXRvbWljX2RlYyhcdTAwMjZodGFiLVx1MDAzZWNvdW50KTtcbiB9XG4gXG4tXG4gc3RhdGljIHZvaWQgZnJlZV9odGFiX2VsZW0oc3RydWN0IGJwZl9odGFiICpodGFiLCBzdHJ1Y3QgaHRhYl9lbGVtICpsKVxuIHtcbiBcdGh0YWJfcHV0X2ZkX3ZhbHVlKGh0YWIsIGwpO1xuQEAgLTI5NzAsNyAmIzQzOzI5NjksNiBAQCBzdGF0aWMgaW50IHJodGFiX2RlbGV0ZV9lbGVtKHN0cnVjdCBicGZfcmh0YWIgKnJodGFiLCBzdHJ1Y3Qgcmh0YWJfZWxlbSAqZWxlbSwgdlxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuLVxuIHN0YXRpYyBsb25nIHJodGFiX21hcF9kZWxldGVfZWxlbShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXkpXG4ge1xuIFx0c3RydWN0IGJwZl9yaHRhYiAqcmh0YWIgPSBjb250YWluZXJfb2YobWFwLCBzdHJ1Y3QgYnBmX3JodGFiLCBtYXApO1xuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvaGVscGVycy5jIGIva2VybmVsL2JwZi9oZWxwZXJzLmNcbmluZGV4IDQ3MDlhNWFkMDQ3NDcuLjVlNjhhMGFkYjE0YjQgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvYnBmL2hlbHBlcnMuY1xuJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2JwZi9oZWxwZXJzLmNcbkBAIC00ODY5LDcgJiM0Mzs0ODY5LDYgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBidGZfa2Z1bmNfaWRfc2V0IGdlbmVyaWNfa2Z1bmNfc2V0ID0ge1xuIFx0LnNldCAgID0gXHUwMDI2Z2VuZXJpY19idGZfaWRzLFxuIH07XG4gXG4tXG4gQlRGX0lEX0xJU1QoZ2VuZXJpY19kdG9yX2lkcylcbiBCVEZfSUQoc3RydWN0LCB0YXNrX3N0cnVjdClcbiBCVEZfSUQoZnVuYywgYnBmX3Rhc2tfcmVsZWFzZV9kdG9yKVxuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvbGl2ZW5lc3MuYyBiL2tlcm5lbC9icGYvbGl2ZW5lc3MuY1xuaW5kZXggMGFhZGZiYWUwYWNjNS4uOWUyNWUyNDFlMWZmNCAxMDA2NDRcbi0tLSBhL2tlcm5lbC9icGYvbGl2ZW5lc3MuY1xuJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2JwZi9saXZlbmVzcy5jXG5AQCAtMjY5LDcgJiM0MzsyNjksNiBAQCBicGZfaW5zbl9zdWNjZXNzb3JzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHUzMiBpZHgpXG4gXG4gX19kaWFnX3BvcCgpO1xuIFxuLVxuIHN0YXRpYyBpbmxpbmUgYm9vbCB1cGRhdGVfaW5zbihzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuIFx0XHRcdCAgICAgICBzdHJ1Y3QgZnVuY19pbnN0YW5jZSAqaW5zdGFuY2UsIHUzMiBmcmFtZSwgdTMyIGluc25faWR4KVxuIHtcbkBAIC0xODY4LDcgJiM0MzsxODY3LDYgQEAgc3RhdGljIGludCBhbmFseXplX3N1YnByb2coc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbiBcdGlmIChuZWVkX3Jlc2NoZWQoKSlcbiBcdFx0Y29uZF9yZXNjaGVkKCk7XG4gXG4tXG4gXHQvKlxuIFx0ICogV2hlbiBhbiBpbnN0YW5jZSBpcyByZXVzZWQgKG11c3Rfd3JpdGVfaW5pdGlhbGl6ZWQgPT0gdHJ1ZSksXG4gXHQgKiByZWNvcmQgaW50byBhIGZyZXNoIGluc3RhbmNlIGFuZCBtZXJnZSBhZnRlcndhcmQuICBUaGlzIGF2b2lkc1xuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvcXVldWVfc3RhY2tfbWFwcy5jIGIva2VybmVsL2JwZi9xdWV1ZV9zdGFja19tYXBzLmNcbmluZGV4IGMxYzlkZWU0ZGNkZDAuLjZlOGIxOGMzMmExMDYgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvYnBmL3F1ZXVlX3N0YWNrX21hcHMuY1xuJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2JwZi9xdWV1ZV9zdGFja19tYXBzLmNcbkBAIC0xMjMsNyAmIzQzOzEyMyw2IEBAIHN0YXRpYyBsb25nIF9fcXVldWVfbWFwX2dldChzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICp2YWx1ZSwgYm9vbCBkZWxldGUpXG4gXHRyZXR1cm4gZXJyO1xuIH1cbiBcbi1cbiBzdGF0aWMgbG9uZyBfX3N0YWNrX21hcF9nZXQoc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqdmFsdWUsIGJvb2wgZGVsZXRlKVxuIHtcbiBcdHN0cnVjdCBicGZfcXVldWVfc3RhY2sgKnFzID0gYnBmX3F1ZXVlX3N0YWNrKG1hcCk7XG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9zeXNjYWxsLmMgYi9rZXJuZWwvYnBmL3N5c2NhbGwuY1xuaW5kZXggOGQxMTFkYTg4NjU1My4uN2Q4YzNlOGU2ZDYyZSAxMDA2NDRcbi0tLSBhL2tlcm5lbC9icGYvc3lzY2FsbC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvYnBmL3N5c2NhbGwuY1xuQEAgLTYzNiw3ICYjNDM7NjM2LDYgQEAgaW50IGJwZl9tYXBfYWxsb2NfcGFnZXMoY29uc3Qgc3RydWN0IGJwZl9tYXAgKm1hcCwgaW50IG5pZCxcbiBcdHJldHVybiByZXQ7XG4gfVxuIFxuLVxuIHN0YXRpYyBpbnQgYnRmX2ZpZWxkX2NtcChjb25zdCB2b2lkICphLCBjb25zdCB2b2lkICpiKVxuIHtcbiBcdGNvbnN0IHN0cnVjdCBidGZfZmllbGQgKmYxID0gYSwgKmYyID0gYjtcbkBAIC0xODMwLDcgJiM0MzsxODI5LDYgQEAgc3RhdGljIGludCBtYXBfbG9va3VwX2VsZW0odW5pb24gYnBmX2F0dHIgKmF0dHIpXG4gXHRyZXR1cm4gZXJyO1xuIH1cbiBcbi1cbiAjZGVmaW5lIEJQRl9NQVBfVVBEQVRFX0VMRU1fTEFTVF9GSUVMRCBmbGFnc1xuIFxuIHN0YXRpYyBpbnQgbWFwX3VwZGF0ZV9lbGVtKHVuaW9uIGJwZl9hdHRyICphdHRyLCBicGZwdHJfdCB1YXR0cilcbkBAIC0zNDk3LDcgJiM0MzszNDk1LDYgQEAgaW50IGJwZl9saW5rX3ByaW1lKHN0cnVjdCBicGZfbGluayAqbGluaywgc3RydWN0IGJwZl9saW5rX3ByaW1lciAqcHJpbWVyKVxuIFx0aWYgKGZkIFx1MDAzYyAwKVxuIFx0XHRyZXR1cm4gZmQ7XG4gXG4tXG4gXHRpZCA9IGJwZl9saW5rX2FsbG9jX2lkKGxpbmspO1xuIFx0aWYgKGlkIFx1MDAzYyAwKSB7XG4gXHRcdHB1dF91bnVzZWRfZmQoZmQpO1xuQEAgLTU1MDUsNyAmIzQzOzU1MDIsNiBAQCBzdGF0aWMgaW50IGJwZl9saW5rX2dldF9pbmZvX2J5X2ZkKHN0cnVjdCBmaWxlICpmaWxlLFxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuLVxuIHN0YXRpYyBpbnQgdG9rZW5fZ2V0X2luZm9fYnlfZmQoc3RydWN0IGZpbGUgKmZpbGUsXG4gXHRcdFx0XHRzdHJ1Y3QgYnBmX3Rva2VuICp0b2tlbixcbiBcdFx0XHRcdGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyLFxuQEAgLTY1MDcsNyAmIzQzOzY1MDMsNiBAQCBCUEZfQ0FMTF8zKGJwZl9zeXNfYnBmLCBpbnQsIGNtZCwgdW5pb24gYnBmX2F0dHIgKiwgYXR0ciwgdTMyLCBhdHRyX3NpemUpXG4gXHRyZXR1cm4gX19zeXNfYnBmKGNtZCwgS0VSTkVMX0JQRlBUUihhdHRyKSwgYXR0cl9zaXplLCBLRVJORUxfQlBGUFRSKE5VTEwpLCAwKTtcbiB9XG4gXG4tXG4gLyogVG8gc2h1dCB1cCAtV21pc3NpbmctcHJvdG90eXBlcy5cbiAgKiBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgYnkgdGhlIGtlcm5lbCBsaWdodCBza2VsZXRvblxuICAqIHRvIGxvYWQgYnBmIHByb2dyYW1zIHdoZW4gbW9kdWxlcyBhcmUgbG9hZGVkIG9yIGR1cmluZyBrZXJuZWwgYm9vdC5cbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL3ZlcmlmaWVyLmMgYi9rZXJuZWwvYnBmL3ZlcmlmaWVyLmNcbmluZGV4IGQ5MjUxOTdjMmU1ZjcuLjM5NzcyMDAyY2I3YmYgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvYnBmL3ZlcmlmaWVyLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9icGYvdmVyaWZpZXIuY1xuQEAgLTYzNSw3ICYjNDM7NjM1LDYgQEAgc3RhdGljIHZvaWQgX19tYXJrX2R5bnB0cl9yZWcoc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZyxcbiBcdFx0XHQgICAgICBlbnVtIGJwZl9keW5wdHJfdHlwZSB0eXBlLFxuIFx0XHRcdCAgICAgIGJvb2wgZmlyc3Rfc2xvdCwgaW50IGlkLCBpbnQgcGFyZW50X2lkKTtcbiBcbi1cbiBzdGF0aWMgdm9pZCBtYXJrX2R5bnB0cl9zdGFja19yZWdzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4gXHRcdFx0XHQgICBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqc3JlZzEsXG4gXHRcdFx0XHQgICBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqc3JlZzIsXG5AQCAtMTY3Miw3ICYjNDM7MTY3MSw2IEBAIHN0YXRpYyBib29sIHNhbWVfY2FsbHNpdGVzKHN0cnVjdCBicGZfdmVyaWZpZXJfc3RhdGUgKmEsIHN0cnVjdCBicGZfdmVyaWZpZXJfc3RhXG4gXHRyZXR1cm4gdHJ1ZTtcbiB9XG4gXG4tXG4gdm9pZCBicGZfZnJlZV9iYWNrZWRnZXMoc3RydWN0IGJwZl9zY2NfdmlzaXQgKnZpc2l0KVxuIHtcbiBcdHN0cnVjdCBicGZfc2NjX2JhY2tlZGdlICpiYWNrZWRnZSwgKm5leHQ7XG5AQCAtMjI5NCw3ICYjNDM7MjI5Miw2IEBAIHN0YXRpYyBzdHJ1Y3QgYnBmX3ZlcmlmaWVyX3N0YXRlICpwdXNoX2FzeW5jX2NiKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4gXHRyZXR1cm4gXHUwMDI2ZWxlbS1cdTAwM2VzdDtcbiB9XG4gXG4tXG4gc3RhdGljIGludCBjbXBfc3VicHJvZ3MoY29uc3Qgdm9pZCAqYSwgY29uc3Qgdm9pZCAqYilcbiB7XG4gXHRyZXR1cm4gKChzdHJ1Y3QgYnBmX3N1YnByb2dfaW5mbyAqKWEpLVx1MDAzZXN0YXJ0IC1cbkBAIC00MDcxLDcgJiM0Mzs0MDY4LDYgQEAgc3RhdGljIGludCBjaGVja19zdGFja19yZWFkKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4gXHRyZXR1cm4gZXJyO1xuIH1cbiBcbi1cbiAvKiBjaGVja19zdGFja193cml0ZSBkaXNwYXRjaGVzIHRvIGNoZWNrX3N0YWNrX3dyaXRlX2ZpeGVkX29mZiBvclxuICAqIGNoZWNrX3N0YWNrX3dyaXRlX3Zhcl9vZmYuXG4gICpcbkBAIC00ODY3LDcgJiM0Mzs0ODYzLDYgQEAgc3RhdGljIGludCBjaGVja19zb2NrX2FjY2VzcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBpbnQgaW5zbl9pZHgsXG4gXHRcdHZhbGlkID0gZmFsc2U7XG4gXHR9XG4gXG4tXG4gXHRpZiAodmFsaWQpIHtcbiBcdFx0ZW52LVx1MDAzZWluc25fYXV4X2RhdGFbaW5zbl9pZHhdLmN0eF9maWVsZF9zaXplID1cbiBcdFx0XHRpbmZvLmN0eF9maWVsZF9zaXplO1xuQEAgLTU2NjIsNiAmIzQzOzU2NTcsOCBAQCBpbnQgYnBmX21hcF9kaXJlY3RfcmVhZChzdHJ1Y3QgYnBmX21hcCAqbWFwLCBpbnQgb2ZmLCBpbnQgc2l6ZSwgdTY0ICp2YWwsXG4gXHR1NjQgYWRkcjtcbiBcdGludCBlcnI7XG4gXG4mIzQzO1x0aWYgKG1hcC1cdTAwM2VtYXBfdHlwZSA9PSBCUEZfTUFQX1RZUEVfSU5TTl9BUlJBWSB8fCBtYXAtXHUwMDNlbWFwX3R5cGUgPT0gQlBGX01BUF9UWVBFX1BFUkNQVV9BUlJBWSlcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuIFx0ZXJyID0gbWFwLVx1MDAzZW9wcy1cdTAwM2VtYXBfZGlyZWN0X3ZhbHVlX2FkZHIobWFwLCBcdTAwMjZhZGRyLCBvZmYpO1xuIFx0aWYgKGVycilcbiBcdFx0cmV0dXJuIGVycjtcbkBAIC02MTU4LDYgJiM0Mzs2MTU1LDUxIEBAIHN0YXRpYyB2b2lkIGFkZF9zY2FsYXJfdG9fcmVnKHN0cnVjdCBicGZfcmVnX3N0YXRlICpkc3RfcmVnLCBzNjQgdmFsKVxuIFx0cmVnX2JvdW5kc19zeW5jKGRzdF9yZWcpO1xuIH1cbiBcbiYjNDM7c3RhdGljIGludCBjaGVja19tYXBfbWVtX3JlYWQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZywgaW50IG9mZixcbiYjNDM7XHRcdFx0ICAgICAgaW50IGJwZl9zaXplLCBpbnQgdmFsdWVfcmVnbm8sIGJvb2wgaXNfbGRzeClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWdzID0gY3VyX3JlZ3MoZW52KTtcbiYjNDM7XHRpbnQgc2l6ZSA9IGJwZl9zaXplX3RvX2J5dGVzKGJwZl9zaXplKTtcbiYjNDM7XHRzdHJ1Y3QgYnBmX21hcCAqbWFwID0gcmVnLVx1MDAzZW1hcF9wdHI7XG4mIzQzO1xuJiM0MztcdHN3aXRjaCAobWFwLVx1MDAzZW1hcF90eXBlKSB7XG4mIzQzO1x0Y2FzZSBCUEZfTUFQX1RZUEVfSU5TTl9BUlJBWTpcbiYjNDM7XHRcdGlmIChicGZfc2l6ZSAhPSBCUEZfRFcpIHtcbiYjNDM7XHRcdFx0dmVyYm9zZShlbnYsIFwmIzM0O0ludmFsaWQgcmVhZCBvZiAlZCBieXRlcyBmcm9tIGluc25fYXJyYXlcXG5cJiMzNDssIHNpemUpO1xuJiM0MztcdFx0XHRyZXR1cm4gLUVBQ0NFUztcbiYjNDM7XHRcdH1cbiYjNDM7XHRcdHJlZ3NbdmFsdWVfcmVnbm9dID0gKnJlZztcbiYjNDM7XHRcdGFkZF9zY2FsYXJfdG9fcmVnKFx1MDAyNnJlZ3NbdmFsdWVfcmVnbm9dLCBvZmYpO1xuJiM0MztcdFx0cmVnc1t2YWx1ZV9yZWdub10udHlwZSA9IFBUUl9UT19JTlNOO1xuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1x0Y2FzZSBCUEZfTUFQX1RZUEVfUEVSQ1BVX0FSUkFZOlxuJiM0MztcdFx0Z290byByZWdfdW5rbm93bjtcbiYjNDM7XHRkZWZhdWx0OlxuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHQvKiBJZiBtYXAgaXMgcmVhZC1vbmx5LCB0cmFjayBpdHMgY29udGVudHMgYXMgc2NhbGFycy4gKi9cbiYjNDM7XHRpZiAodG51bV9pc19jb25zdChyZWctXHUwMDNldmFyX29mZikgXHUwMDI2XHUwMDI2XG4mIzQzO1x0ICAgIGJwZl9tYXBfaXNfcmRvbmx5KG1hcCkgXHUwMDI2XHUwMDI2XG4mIzQzO1x0ICAgIG1hcC1cdTAwM2VvcHMtXHUwMDNlbWFwX2RpcmVjdF92YWx1ZV9hZGRyKSB7XG4mIzQzO1x0XHRpbnQgbWFwX29mZiA9IG9mZiAmIzQzOyByZWctXHUwMDNldmFyX29mZi52YWx1ZTtcbiYjNDM7XHRcdHU2NCB2YWwgPSAwO1xuJiM0MztcdFx0aW50IGVycjtcbiYjNDM7XG4mIzQzO1x0XHRlcnIgPSBicGZfbWFwX2RpcmVjdF9yZWFkKG1hcCwgbWFwX29mZiwgc2l6ZSwgXHUwMDI2dmFsLCBpc19sZHN4KTtcbiYjNDM7XHRcdGlmIChlcnIpXG4mIzQzO1x0XHRcdHJldHVybiBlcnI7XG4mIzQzO1xuJiM0MztcdFx0cmVnc1t2YWx1ZV9yZWdub10udHlwZSA9IFNDQUxBUl9WQUxVRTtcbiYjNDM7XHRcdF9fbWFya19yZWdfa25vd24oXHUwMDI2cmVnc1t2YWx1ZV9yZWdub10sIHZhbCk7XG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztyZWdfdW5rbm93bjpcbiYjNDM7XHRtYXJrX3JlZ191bmtub3duKGVudiwgcmVncywgdmFsdWVfcmVnbm8pO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuIC8qIGNoZWNrIHdoZXRoZXIgbWVtb3J5IGF0IChyZWdubyAmIzQzOyBvZmYpIGlzIGFjY2Vzc2libGUgZm9yIHQgPSAocmVhZCB8IHdyaXRlKVxuICAqIGlmIHQ9PXdyaXRlLCB2YWx1ZV9yZWdubyBpcyBhIHJlZ2lzdGVyIHdoaWNoIHZhbHVlIGlzIHN0b3JlZCBpbnRvIG1lbW9yeVxuICAqIGlmIHQ9PXJlYWQsIHZhbHVlX3JlZ25vIGlzIGEgcmVnaXN0ZXIgd2hpY2ggd2lsbCByZWNlaXZlIHRoZSB2YWx1ZSBmcm9tIG1lbW9yeVxuQEAgLTYyMTIsMzggJiM0Mzs2MjU0LDcgQEAgc3RhdGljIGludCBjaGVja19tZW1fYWNjZXNzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGludCBpbnNuX2lkeCwgc3RydWN0IGJcbiBcdFx0aWYgKGtwdHJfZmllbGQpIHtcbiBcdFx0XHRlcnIgPSBjaGVja19tYXBfa3B0cl9hY2Nlc3MoZW52LCB2YWx1ZV9yZWdubywgaW5zbl9pZHgsIGtwdHJfZmllbGQpO1xuIFx0XHR9IGVsc2UgaWYgKHQgPT0gQlBGX1JFQUQgXHUwMDI2XHUwMDI2IHZhbHVlX3JlZ25vIFx1MDAzZT0gMCkge1xuLVx0XHRcdHN0cnVjdCBicGZfbWFwICptYXAgPSByZWctXHUwMDNlbWFwX3B0cjtcbi1cbi1cdFx0XHQvKlxuLVx0XHRcdCAqIElmIG1hcCBpcyByZWFkLW9ubHksIHRyYWNrIGl0cyBjb250ZW50cyBhcyBzY2FsYXJzLFxuLVx0XHRcdCAqIHVubGVzcyBpdCBpcyBhbiBpbnNuIGFycmF5IChzZWUgdGhlIHNwZWNpYWwgY2FzZSBiZWxvdylcbi1cdFx0XHQgKi9cbi1cdFx0XHRpZiAodG51bV9pc19jb25zdChyZWctXHUwMDNldmFyX29mZikgXHUwMDI2XHUwMDI2XG4tXHRcdFx0ICAgIGJwZl9tYXBfaXNfcmRvbmx5KG1hcCkgXHUwMDI2XHUwMDI2XG4tXHRcdFx0ICAgIG1hcC1cdTAwM2VvcHMtXHUwMDNlbWFwX2RpcmVjdF92YWx1ZV9hZGRyIFx1MDAyNlx1MDAyNlxuLVx0XHRcdCAgICBtYXAtXHUwMDNlbWFwX3R5cGUgIT0gQlBGX01BUF9UWVBFX0lOU05fQVJSQVkpIHtcbi1cdFx0XHRcdGludCBtYXBfb2ZmID0gb2ZmICYjNDM7IHJlZy1cdTAwM2V2YXJfb2ZmLnZhbHVlO1xuLVx0XHRcdFx0dTY0IHZhbCA9IDA7XG4tXG4tXHRcdFx0XHRlcnIgPSBicGZfbWFwX2RpcmVjdF9yZWFkKG1hcCwgbWFwX29mZiwgc2l6ZSxcbi1cdFx0XHRcdFx0XHRcdCAgXHUwMDI2dmFsLCBpc19sZHN4KTtcbi1cdFx0XHRcdGlmIChlcnIpXG4tXHRcdFx0XHRcdHJldHVybiBlcnI7XG4tXG4tXHRcdFx0XHRyZWdzW3ZhbHVlX3JlZ25vXS50eXBlID0gU0NBTEFSX1ZBTFVFO1xuLVx0XHRcdFx0X19tYXJrX3JlZ19rbm93bihcdTAwMjZyZWdzW3ZhbHVlX3JlZ25vXSwgdmFsKTtcbi1cdFx0XHR9IGVsc2UgaWYgKG1hcC1cdTAwM2VtYXBfdHlwZSA9PSBCUEZfTUFQX1RZUEVfSU5TTl9BUlJBWSkge1xuLVx0XHRcdFx0aWYgKGJwZl9zaXplICE9IEJQRl9EVykge1xuLVx0XHRcdFx0XHR2ZXJib3NlKGVudiwgXCYjMzQ7SW52YWxpZCByZWFkIG9mICVkIGJ5dGVzIGZyb20gaW5zbl9hcnJheVxcblwmIzM0Oyxcbi1cdFx0XHRcdFx0XHQgICAgIHNpemUpO1xuLVx0XHRcdFx0XHRyZXR1cm4gLUVBQ0NFUztcbi1cdFx0XHRcdH1cbi1cdFx0XHRcdHJlZ3NbdmFsdWVfcmVnbm9dID0gKnJlZztcbi1cdFx0XHRcdGFkZF9zY2FsYXJfdG9fcmVnKFx1MDAyNnJlZ3NbdmFsdWVfcmVnbm9dLCBvZmYpO1xuLVx0XHRcdFx0cmVnc1t2YWx1ZV9yZWdub10udHlwZSA9IFBUUl9UT19JTlNOO1xuLVx0XHRcdH0gZWxzZSB7XG4tXHRcdFx0XHRtYXJrX3JlZ191bmtub3duKGVudiwgcmVncywgdmFsdWVfcmVnbm8pO1xuLVx0XHRcdH1cbiYjNDM7XHRcdFx0ZXJyID0gY2hlY2tfbWFwX21lbV9yZWFkKGVudiwgcmVnLCBvZmYsIGJwZl9zaXplLCB2YWx1ZV9yZWdubywgaXNfbGRzeCk7XG4gXHRcdH1cbiBcdH0gZWxzZSBpZiAoYmFzZV90eXBlKHJlZy1cdTAwM2V0eXBlKSA9PSBQVFJfVE9fTUVNKSB7XG4gXHRcdGJvb2wgcmRvbmx5X21lbSA9IHR5cGVfaXNfcmRvbmx5X21lbShyZWctXHUwMDNldHlwZSk7XG5AQCAtNjcyNSw3ICYjNDM7NjczNiw2IEBAIHN0YXRpYyBpbnQgY2hlY2tfc3RhY2tfcmFuZ2VfaW5pdGlhbGl6ZWQoXG4gXHRpZiAoZXJyKVxuIFx0XHRyZXR1cm4gZXJyO1xuIFxuLVxuIFx0aWYgKHRudW1faXNfY29uc3QocmVnLVx1MDAzZXZhcl9vZmYpKSB7XG4gXHRcdG1pbl9vZmYgPSBtYXhfb2ZmID0gcmVnLVx1MDAzZXZhcl9vZmYudmFsdWUgJiM0Mzsgb2ZmO1xuIFx0fSBlbHNlIHtcbkBAIC03NDQzLDcgJiM0Mzs3NDUzLDYgQEAgc3RhdGljIGJvb2wgaXNfaXRlcl9uZXdfa2Z1bmMoc3RydWN0IGJwZl9jYWxsX2FyZ19tZXRhICptZXRhKVxuIFx0cmV0dXJuIG1ldGEtXHUwMDNla2Z1bmNfZmxhZ3MgXHUwMDI2IEtGX0lURVJfTkVXO1xuIH1cbiBcbi1cbiBzdGF0aWMgYm9vbCBpc19pdGVyX2Rlc3Ryb3lfa2Z1bmMoc3RydWN0IGJwZl9jYWxsX2FyZ19tZXRhICptZXRhKVxuIHtcbiBcdHJldHVybiBtZXRhLVx1MDAzZWtmdW5jX2ZsYWdzIFx1MDAyNiBLRl9JVEVSX0RFU1RST1k7XG5AQCAtODIyMSw2ICYjNDM7ODIzMCwxMiBAQCBzdGF0aWMgaW50IGNoZWNrX2FyZ19jb25zdF9zdHIoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbiBcdFx0cmV0dXJuIC1FQUNDRVM7XG4gXHR9XG4gXG4mIzQzO1x0aWYgKG1hcC1cdTAwM2VtYXBfdHlwZSA9PSBCUEZfTUFQX1RZUEVfUEVSQ1BVX0FSUkFZKSB7XG4mIzQzO1x0XHR2ZXJib3NlKGVudiwgXCYjMzQ7JXMgcG9pbnRzIHRvIHBlcmNwdV9hcnJheSBtYXAgd2hpY2ggY2Fubm90IGJlIHVzZWQgYXMgY29uc3Qgc3RyaW5nXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRyZWdfYXJnX25hbWUoZW52LCBhcmdubykpO1xuJiM0MztcdFx0cmV0dXJuIC1FQUNDRVM7XG4mIzQzO1x0fVxuJiM0MztcbiBcdGlmICghYnBmX21hcF9pc19yZG9ubHkobWFwKSkge1xuIFx0XHR2ZXJib3NlKGVudiwgXCYjMzQ7JXMgZG9lcyBub3QgcG9pbnQgdG8gYSByZWFkb25seSBtYXAmIzM5O1xcblwmIzM0OywgcmVnX2FyZ19uYW1lKGVudiwgYXJnbm8pKTtcbiBcdFx0cmV0dXJuIC1FQUNDRVM7XG5AQCAtMTE2NjcsNyAmIzQzOzExNjgyLDYgQEAgc3RhdGljIGludCBwcm9jZXNzX2lycV9mbGFnKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcmVnX3N0YXRlICpcbiBcdHJldHVybiAwO1xuIH1cbiBcbi1cbiBzdGF0aWMgaW50IHJlZl9zZXRfbm9uX293bmluZyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnKVxuIHtcbiBcdHN0cnVjdCBidGZfcmVjb3JkICpyZWMgPSByZWdfYnRmX3JlY29yZChyZWcpO1xuQEAgLTE2NTE1LDcgJiM0MzsxNjUyOSw2IEBAIHN0YXRpYyBpbnQgY2hlY2tfbGRfYWJzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqaW5zbilcbiBcdHJldHVybiAwO1xuIH1cbiBcbi1cbiBzdGF0aWMgYm9vbCByZXR1cm5fcmV0dmFsX3JhbmdlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcmV0dmFsX3JhbmdlICpyYW5nZSlcbiB7XG4gXHRlbnVtIGJwZl9wcm9nX3R5cGUgcHJvZ190eXBlID0gcmVzb2x2ZV9wcm9nX3R5cGUoZW52LVx1MDAzZXByb2cpO1xuQEAgLTE4NDYxLDggJiM0MzsxODQ3NCw2IEBAIHN0YXRpYyB2b2lkIHJlbGVhc2VfaW5zbl9hcnJheXMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcbiBcdFx0YnBmX2luc25fYXJyYXlfcmVsZWFzZShlbnYtXHUwMDNlaW5zbl9hcnJheV9tYXBzW2ldKTtcbiB9XG4gXG4tXG4tXG4gLyogVGhlIHZlcmlmaWVyIGRvZXMgbW9yZSBkYXRhIGZsb3cgYW5hbHlzaXMgdGhhbiBsbHZtIGFuZCB3aWxsIG5vdFxuICAqIGV4cGxvcmUgYnJhbmNoZXMgdGhhdCBhcmUgZGVhZCBhdCBydW4gdGltZS4gTWFsaWNpb3VzIHByb2dyYW1zIGNhblxuICAqIGhhdmUgZGVhZCBjb2RlIHRvby4gVGhlcmVmb3JlIHJlcGxhY2UgYWxsIGRlYWQgYXQtcnVuLXRpbWUgY29kZVxuQEAgLTE4NDkwLDggJiM0MzsxODUwMSw2IEBAIHN0YXRpYyB2b2lkIHNhbml0aXplX2RlYWRfY29kZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxuIFx0fVxuIH1cbiBcbi1cbi1cbiBzdGF0aWMgdm9pZCBmcmVlX3N0YXRlcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxuIHtcbiBcdHN0cnVjdCBicGZfdmVyaWZpZXJfc3RhdGVfbGlzdCAqc2w7XG5AQCAtMTg3NzMsNyAmIzQzOzE4NzgyLDYgQEAgc3RhdGljIGludCBkb19jaGVja19tYWluKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXG4gXHRyZXR1cm4gcmV0O1xuIH1cbiBcbi1cbiBzdGF0aWMgdm9pZCBwcmludF92ZXJpZmljYXRpb25fc3RhdHMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcbiB7XG4gXHQvKiBTa2lwIG92ZXIgaGlkZGVuIHN1YnByb2dzIHdoaWNoIGFyZSBub3QgdmVyaWZpZWQuICovXG5kaWZmIC0tZ2l0IGEvdG9vbHMvYnBmL2JwZnRvb2wvZ2VuLmMgYi90b29scy9icGYvYnBmdG9vbC9nZW4uY1xuaW5kZXggYTAxZDA2ZDIyZDFhMy4uYTUwNTQwZWY2NTIxYyAxMDA2NDRcbi0tLSBhL3Rvb2xzL2JwZi9icGZ0b29sL2dlbi5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy9icGYvYnBmdG9vbC9nZW4uY1xuQEAgLTEwMSw2ICYjNDM7MTAxLDEyIEBAIHN0YXRpYyBib29sIGdldF9tYXBfaWRlbnQoY29uc3Qgc3RydWN0IGJwZl9tYXAgKm1hcCwgY2hhciAqYnVmLCBzaXplX3QgYnVmX3N6KVxuIFx0XHRyZXR1cm4gdHJ1ZTtcbiBcdH1cbiBcbiYjNDM7XHRpZiAoYnBmX21hcF9fdHlwZShtYXApID09IEJQRl9NQVBfVFlQRV9QRVJDUFVfQVJSQVkpIHtcbiYjNDM7XHRcdHNucHJpbnRmKGJ1ZiwgYnVmX3N6LCBcJiMzNDslc1wmIzM0OywgbmFtZSAmIzQzOyAxKTtcbiYjNDM7XHRcdHNhbml0aXplX2lkZW50aWZpZXIoYnVmKTtcbiYjNDM7XHRcdHJldHVybiB0cnVlO1xuJiM0MztcdH1cbiYjNDM7XG4gXHRmb3IgIChpID0gMCwgbiA9IEFSUkFZX1NJWkUoc2Z4cyk7IGkgXHUwMDNjIG47IGkmIzQzOyYjNDM7KSB7XG4gXHRcdGNvbnN0IGNoYXIgKnNmeCA9IHNmeHNbaV0sICpwO1xuIFxuQEAgLTExNyw3ICYjNDM7MTIzLDcgQEAgc3RhdGljIGJvb2wgZ2V0X21hcF9pZGVudChjb25zdCBzdHJ1Y3QgYnBmX21hcCAqbWFwLCBjaGFyICpidWYsIHNpemVfdCBidWZfc3opXG4gXG4gc3RhdGljIGJvb2wgZ2V0X2RhdGFzZWNfaWRlbnQoY29uc3QgY2hhciAqc2VjX25hbWUsIGNoYXIgKmJ1Ziwgc2l6ZV90IGJ1Zl9zeilcbiB7XG4tXHRzdGF0aWMgY29uc3QgY2hhciAqcGZ4c1tdID0geyBcJiMzNDsuZGF0YVwmIzM0OywgXCYjMzQ7LnJvZGF0YVwmIzM0OywgXCYjMzQ7LmJzc1wmIzM0OywgXCYjMzQ7Lmtjb25maWdcJiMzNDsgfTtcbiYjNDM7XHRzdGF0aWMgY29uc3QgY2hhciAqcGZ4c1tdID0geyBcJiMzNDsuZGF0YVwmIzM0OywgXCYjMzQ7LnJvZGF0YVwmIzM0OywgXCYjMzQ7LmJzc1wmIzM0OywgXCYjMzQ7LnBlcmNwdVwmIzM0OywgXCYjMzQ7Lmtjb25maWdcJiMzNDsgfTtcbiBcdGludCBpLCBuO1xuIFxuIFx0LyogcmVjb2duaXplIGhhcmQgY29kZWQgTExWTSBzZWN0aW9uIG5hbWUgKi9cbkBAIC0yNTQsNyAmIzQzOzI2MCw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYnRmX3R5cGUgKmZpbmRfdHlwZV9mb3JfbWFwKHN0cnVjdCBidGYgKmJ0ZiwgY29uc3QgY2hhciAqbWFwXG4gXHRyZXR1cm4gTlVMTDtcbiB9XG4gXG4tc3RhdGljIGJvb2wgaXNfbW1hcGFibGVfbWFwKGNvbnN0IHN0cnVjdCBicGZfbWFwICptYXAsIGNoYXIgKmJ1Ziwgc2l6ZV90IHN6KVxuJiM0MztzdGF0aWMgYm9vbCBpc19za2VsX2RhdGEoY29uc3Qgc3RydWN0IGJwZl9tYXAgKm1hcCwgY2hhciAqYnVmLCBzaXplX3Qgc3opXG4ge1xuIFx0c2l6ZV90IHRtcF9zejtcbiBcbkBAIC0yNjMsMTMgJiM0MzsyNjksMjQgQEAgc3RhdGljIGJvb2wgaXNfbW1hcGFibGVfbWFwKGNvbnN0IHN0cnVjdCBicGZfbWFwICptYXAsIGNoYXIgKmJ1Ziwgc2l6ZV90IHN6KVxuIFx0XHRyZXR1cm4gdHJ1ZTtcbiBcdH1cbiBcbi1cdGlmICghYnBmX21hcF9faXNfaW50ZXJuYWwobWFwKSB8fCAhKGJwZl9tYXBfX21hcF9mbGFncyhtYXApIFx1MDAyNiBCUEZfRl9NTUFQQUJMRSkpXG4mIzQzO1x0aWYgKCFicGZfbWFwX19pc19pbnRlcm5hbChtYXApKVxuIFx0XHRyZXR1cm4gZmFsc2U7XG4gXG4gXHRpZiAoIWdldF9tYXBfaWRlbnQobWFwLCBidWYsIHN6KSlcbiBcdFx0cmV0dXJuIGZhbHNlO1xuIFxuLVx0cmV0dXJuIHRydWU7XG4mIzQzO1x0aWYgKGJwZl9tYXBfX21hcF9mbGFncyhtYXApIFx1MDAyNiBCUEZfRl9NTUFQQUJMRSlcbiYjNDM7XHRcdHJldHVybiB0cnVlO1xuJiM0MztcbiYjNDM7XHRpZiAoYnBmX21hcF9fdHlwZShtYXApID09IEJQRl9NQVBfVFlQRV9QRVJDUFVfQVJSQVkpXG4mIzQzO1x0XHRyZXR1cm4gYnBmX21hcF9fYnRmX3ZhbHVlX3R5cGVfaWQobWFwKSAhPSAwO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gZmFsc2U7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBib29sIGlzX21tYXBhYmxlX21hcChjb25zdCBzdHJ1Y3QgYnBmX21hcCAqbWFwLCBjaGFyICpidWYsIHNpemVfdCBzeilcbiYjNDM7e1xuJiM0MztcdHJldHVybiBpc19za2VsX2RhdGEobWFwLCBidWYsIHN6KSBcdTAwMjZcdTAwMjYgYnBmX21hcF9fdHlwZShtYXApICE9IEJQRl9NQVBfVFlQRV9QRVJDUFVfQVJSQVk7XG4gfVxuIFxuIHN0YXRpYyBpbnQgY29kZWdlbl9kYXRhc2VjcyhzdHJ1Y3QgYnBmX29iamVjdCAqb2JqLCBjb25zdCBjaGFyICpvYmpfbmFtZSlcbkBAIC0yODcsNyAmIzQzOzMwNCw3IEBAIHN0YXRpYyBpbnQgY29kZWdlbl9kYXRhc2VjcyhzdHJ1Y3QgYnBmX29iamVjdCAqb2JqLCBjb25zdCBjaGFyICpvYmpfbmFtZSlcbiBcbiBcdGJwZl9vYmplY3RfX2Zvcl9lYWNoX21hcChtYXAsIG9iaikge1xuIFx0XHQvKiBvbmx5IGdlbmVyYXRlIGRlZmluaXRpb25zIGZvciBtZW1vcnktbWFwcGVkIGludGVybmFsIG1hcHMgKi9cbi1cdFx0aWYgKCFpc19tbWFwYWJsZV9tYXAobWFwLCBtYXBfaWRlbnQsIHNpemVvZihtYXBfaWRlbnQpKSlcbiYjNDM7XHRcdGlmICghaXNfc2tlbF9kYXRhKG1hcCwgbWFwX2lkZW50LCBzaXplb2YobWFwX2lkZW50KSkpXG4gXHRcdFx0Y29udGludWU7XG4gXG4gXHRcdHNlYyA9IGZpbmRfdHlwZV9mb3JfbWFwKGJ0ZiwgbWFwX2lkZW50KTtcbkBAIC01MTcsNyAmIzQzOzUzNCw3IEBAIHN0YXRpYyB2b2lkIGNvZGVnZW5fYXNzZXJ0cyhzdHJ1Y3QgYnBmX29iamVjdCAqb2JqLCBjb25zdCBjaGFyICpvYmpfbmFtZSlcbiBcdFx0XCYjMzQ7LCBvYmpfbmFtZSk7XG4gXG4gXHRicGZfb2JqZWN0X19mb3JfZWFjaF9tYXAobWFwLCBvYmopIHtcbi1cdFx0aWYgKCFpc19tbWFwYWJsZV9tYXAobWFwLCBtYXBfaWRlbnQsIHNpemVvZihtYXBfaWRlbnQpKSlcbiYjNDM7XHRcdGlmICghaXNfc2tlbF9kYXRhKG1hcCwgbWFwX2lkZW50LCBzaXplb2YobWFwX2lkZW50KSkpXG4gXHRcdFx0Y29udGludWU7XG4gXG4gXHRcdHNlYyA9IGZpbmRfdHlwZV9mb3JfbWFwKGJ0ZiwgbWFwX2lkZW50KTtcbkBAIC02NjgsOCAmIzQzOzY4NSw3IEBAIHN0YXRpYyB2b2lkIGNvZGVnZW5fZGVzdHJveShzdHJ1Y3QgYnBmX29iamVjdCAqb2JqLCBjb25zdCBjaGFyICpvYmpfbmFtZSlcbiBcdGJwZl9vYmplY3RfX2Zvcl9lYWNoX21hcChtYXAsIG9iaikge1xuIFx0XHRpZiAoIWdldF9tYXBfaWRlbnQobWFwLCBpZGVudCwgc2l6ZW9mKGlkZW50KSkpXG4gXHRcdFx0Y29udGludWU7XG4tXHRcdGlmIChicGZfbWFwX19pc19pbnRlcm5hbChtYXApIFx1MDAyNlx1MDAyNlxuLVx0XHQgICAgKGJwZl9tYXBfX21hcF9mbGFncyhtYXApIFx1MDAyNiBCUEZfRl9NTUFQQUJMRSkpXG4mIzQzO1x0XHRpZiAoaXNfc2tlbF9kYXRhKG1hcCwgaWRlbnQsIHNpemVvZihpZGVudCkpKVxuIFx0XHRcdHByaW50ZihcJiMzNDtcXHRza2VsX2ZyZWVfbWFwX2RhdGEoc2tlbC1cdTAwM2UlMSRzLCBza2VsLVx1MDAzZW1hcHMuJTEkcy5pbml0aWFsX3ZhbHVlLCAlMiR6dSk7XFxuXCYjMzQ7LFxuIFx0XHRcdCAgICAgICBpZGVudCwgYnBmX21hcF9tbWFwX3N6KG1hcCkpO1xuIFx0XHRjb2RlZ2VuKFwmIzM0O1xcXG5AQCAtNzQxLDcgJiM0Mzs3NTcsNyBAQCBzdGF0aWMgaW50IGdlbl90cmFjZShzdHJ1Y3QgYnBmX29iamVjdCAqb2JqLCBjb25zdCBjaGFyICpvYmpfbmFtZSwgY29uc3QgY2hhciAqaFxuIFx0XHRjb25zdCB2b2lkICptbWFwX2RhdGEgPSBOVUxMO1xuIFx0XHRzaXplX3QgbW1hcF9zaXplID0gMDtcbiBcbi1cdFx0aWYgKCFpc19tbWFwYWJsZV9tYXAobWFwLCBpZGVudCwgc2l6ZW9mKGlkZW50KSkpXG4mIzQzO1x0XHRpZiAoIWlzX3NrZWxfZGF0YShtYXAsIGlkZW50LCBzaXplb2YoaWRlbnQpKSlcbiBcdFx0XHRjb250aW51ZTtcbiBcbiBcdFx0Y29kZWdlbihcJiMzNDtcXFxuQEAgLTg0OSw5ICYjNDM7ODY1LDIzIEBAIHN0YXRpYyBpbnQgZ2VuX3RyYWNlKHN0cnVjdCBicGZfb2JqZWN0ICpvYmosIGNvbnN0IGNoYXIgKm9ial9uYW1lLCBjb25zdCBjaGFyICpoXG4gXHRicGZfb2JqZWN0X19mb3JfZWFjaF9tYXAobWFwLCBvYmopIHtcbiBcdFx0Y29uc3QgY2hhciAqbW1hcF9mbGFncztcbiBcbi1cdFx0aWYgKCFpc19tbWFwYWJsZV9tYXAobWFwLCBpZGVudCwgc2l6ZW9mKGlkZW50KSkpXG4mIzQzO1x0XHRpZiAoIWlzX3NrZWxfZGF0YShtYXAsIGlkZW50LCBzaXplb2YoaWRlbnQpKSlcbiBcdFx0XHRjb250aW51ZTtcbiBcbiYjNDM7XHRcdGlmIChicGZfbWFwX190eXBlKG1hcCkgPT0gQlBGX01BUF9UWVBFX1BFUkNQVV9BUlJBWSkge1xuJiM0MztcdFx0XHRjb2RlZ2VuKFwmIzM0O1xcXG4mIzQzO1x0XHRcXG5cXFxuJiM0MztcdFx0XHRlcnIgPSBza2VsX3Byb3RlY3RfbWFwX2RhdGEoc2tlbC1cdTAwM2UlMSRzLCBcdTAwMjZza2VsLVx1MDAzZW1hcHMuJTEkcy5pbml0aWFsX3ZhbHVlLCAlMiR6ZCk7XFxuXFxcbiYjNDM7XHRcdFx0aWYgKGVycilcdFx0XHRcdFx0ICAgIFxcblxcXG4mIzQzO1x0XHRcdFx0cmV0dXJuIGVycjtcdFx0XHRcdCAgICBcXG5cXFxuJiM0MztcdFx0I2lmZGVmIF9fS0VSTkVMX19cdFx0XHRcdFx0ICAgIFxcblxcXG4mIzQzO1x0XHRcdHNrZWwtXHUwMDNlJTEkcyA9IE5VTEw7XHRcdFx0XHQgICAgXFxuXFxcbiYjNDM7XHRcdCNlbmRpZlx0XHRcdFx0XHRcdFx0ICAgIFxcblxcXG4mIzQzO1x0XHRcdFwmIzM0OyxcbiYjNDM7XHRcdFx0aWRlbnQsIGJwZl9tYXBfbW1hcF9zeihtYXApKTtcbiYjNDM7XHRcdFx0Y29udGludWU7XG4mIzQzO1x0XHR9XG4mIzQzO1xuIFx0XHRpZiAoYnBmX21hcF9fbWFwX2ZsYWdzKG1hcCkgXHUwMDI2IEJQRl9GX1JET05MWV9QUk9HKVxuIFx0XHRcdG1tYXBfZmxhZ3MgPSBcJiMzNDtQUk9UX1JFQURcJiMzNDs7XG4gXHRcdGVsc2VcbkBAIC05NTUsOCAmIzQzOzk4NSw3IEBAIGNvZGVnZW5fbWFwc19za2VsZXRvbihzdHJ1Y3QgYnBmX29iamVjdCAqb2JqLCBzaXplX3QgbWFwX2NudCwgYm9vbCBtbWFwZWQsIGJvb2xcbiBcdFx0XHRcdG1hcC1cdTAwM2VtYXAgPSBcdTAwMjZvYmotXHUwMDNlbWFwcy4lcztcdCAgICBcXG5cXFxuIFx0XHRcdFwmIzM0OyxcbiBcdFx0XHRpLCBicGZfbWFwX19uYW1lKG1hcCksIGlkZW50KTtcbi1cdFx0LyogbWVtb3J5LW1hcHBlZCBpbnRlcm5hbCBtYXBzICovXG4tXHRcdGlmIChtbWFwZWQgXHUwMDI2XHUwMDI2IGlzX21tYXBhYmxlX21hcChtYXAsIGlkZW50LCBzaXplb2YoaWRlbnQpKSkge1xuJiM0MztcdFx0aWYgKG1tYXBlZCBcdTAwMjZcdTAwMjYgaXNfc2tlbF9kYXRhKG1hcCwgaWRlbnQsIHNpemVvZihpZGVudCkpKSB7XG4gXHRcdFx0cHJpbnRmKFwmIzM0O1xcdG1hcC1cdTAwM2VtbWFwZWQgPSAodm9pZCAqKilcdTAwMjZvYmotXHUwMDNlJXM7XFxuXCYjMzQ7LCBpZGVudCk7XG4gXHRcdH1cbiBcbmRpZmYgLS1naXQgYS90b29scy9saWIvYnBmL2JwZl9nZW5faW50ZXJuYWwuaCBiL3Rvb2xzL2xpYi9icGYvYnBmX2dlbl9pbnRlcm5hbC5oXG5pbmRleCAwNDI1NjkxODc3NTIxLi42YzVhZDZjNTVlOGE2IDEwMDY0NFxuLS0tIGEvdG9vbHMvbGliL2JwZi9icGZfZ2VuX2ludGVybmFsLmhcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL2xpYi9icGYvYnBmX2dlbl9pbnRlcm5hbC5oXG5AQCAtNjUsNyAmIzQzOzY1LDggQEAgdm9pZCBicGZfZ2VuX19wcm9nX2xvYWQoc3RydWN0IGJwZl9nZW4gKmdlbixcbiBcdFx0XHRlbnVtIGJwZl9wcm9nX3R5cGUgcHJvZ190eXBlLCBjb25zdCBjaGFyICpwcm9nX25hbWUsXG4gXHRcdFx0Y29uc3QgY2hhciAqbGljZW5zZSwgc3RydWN0IGJwZl9pbnNuICppbnNucywgc2l6ZV90IGluc25fY250LFxuIFx0XHRcdHN0cnVjdCBicGZfcHJvZ19sb2FkX29wdHMgKmxvYWRfYXR0ciwgaW50IHByb2dfaWR4KTtcbi12b2lkIGJwZl9nZW5fX21hcF91cGRhdGVfZWxlbShzdHJ1Y3QgYnBmX2dlbiAqZ2VuLCBpbnQgbWFwX2lkeCwgdm9pZCAqdmFsdWUsIF9fdTMyIHZhbHVlX3NpemUpO1xuJiM0Mzt2b2lkIGJwZl9nZW5fX21hcF91cGRhdGVfZWxlbShzdHJ1Y3QgYnBmX2dlbiAqZ2VuLCBpbnQgbWFwX2lkeCwgdm9pZCAqdmFsdWUsIF9fdTMyIHZhbHVlX3NpemUsXG4mIzQzO1x0XHRcdCAgICAgIF9fdTY0IGZsYWdzKTtcbiB2b2lkIGJwZl9nZW5fX21hcF9mcmVlemUoc3RydWN0IGJwZl9nZW4gKmdlbiwgaW50IG1hcF9pZHgpO1xuIHZvaWQgYnBmX2dlbl9fcmVjb3JkX2F0dGFjaF90YXJnZXQoc3RydWN0IGJwZl9nZW4gKmdlbiwgY29uc3QgY2hhciAqbmFtZSwgZW51bSBicGZfYXR0YWNoX3R5cGUgdHlwZSk7XG4gdm9pZCBicGZfZ2VuX19yZWNvcmRfZXh0ZXJuKHN0cnVjdCBicGZfZ2VuICpnZW4sIGNvbnN0IGNoYXIgKm5hbWUsIGJvb2wgaXNfd2VhayxcbmRpZmYgLS1naXQgYS90b29scy9saWIvYnBmL2ZlYXR1cmVzLmMgYi90b29scy9saWIvYnBmL2ZlYXR1cmVzLmNcbmluZGV4IGI3ZTM4OGY5OWQwYmIuLmVmOTU4MWMxMTMwMzUgMTAwNjQ0XG4tLS0gYS90b29scy9saWIvYnBmL2ZlYXR1cmVzLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL2xpYi9icGYvZmVhdHVyZXMuY1xuQEAgLTYyMCw2ICYjNDM7NjIwLDM4IEBAIHN0YXRpYyBpbnQgcHJvYmVfYnBmX3N5c2NhbGxfY29tbW9uX2F0dHJzKGludCB0b2tlbl9mZClcbiBcdHJldHVybiBwcm9iZV9zeXNfYnBmX2V4dCgpO1xuIH1cbiBcbiYjNDM7c3RhdGljIGludCBwcm9iZV9rZXJuX3BlcmNwdV9kYXRhKGludCB0b2tlbl9mZClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBicGZfaW5zbiBpbnNuc1tdID0ge1xuJiM0MztcdFx0QlBGX0xEX01BUF9WQUxVRShCUEZfUkVHXzEsIDAsIDApLFxuJiM0MztcdFx0QlBGX0xEWF9NRU0oQlBGX0RXLCBCUEZfUkVHXzAsIEJQRl9SRUdfMSwgMCksXG4mIzQzO1x0XHRCUEZfRVhJVF9JTlNOKCksXG4mIzQzO1x0fTtcbiYjNDM7XHRMSUJCUEZfT1BUUyhicGZfbWFwX2NyZWF0ZV9vcHRzLCBtYXBfb3B0cyxcbiYjNDM7XHRcdC50b2tlbl9mZCA9IHRva2VuX2ZkLFxuJiM0MztcdFx0Lm1hcF9mbGFncyA9IHRva2VuX2ZkID8gQlBGX0ZfVE9LRU5fRkQgOiAwLFxuJiM0MztcdCk7XG4mIzQzO1x0TElCQlBGX09QVFMoYnBmX3Byb2dfbG9hZF9vcHRzLCBwcm9nX29wdHMsXG4mIzQzO1x0XHQudG9rZW5fZmQgPSB0b2tlbl9mZCxcbiYjNDM7XHRcdC5wcm9nX2ZsYWdzID0gdG9rZW5fZmQgPyBCUEZfRl9UT0tFTl9GRCA6IDAsXG4mIzQzO1x0KTtcbiYjNDM7XHRpbnQgcmV0LCBtYXAsIGluc25fY250ID0gQVJSQVlfU0laRShpbnNucyk7XG4mIzQzO1xuJiM0MztcdG1hcCA9IGJwZl9tYXBfY3JlYXRlKEJQRl9NQVBfVFlQRV9QRVJDUFVfQVJSQVksIFwmIzM0O2xpYmJwZl9wZXJjcHVcJiMzNDssIHNpemVvZihpbnQpLCA4LCAxLFxuJiM0MztcdFx0XHQgICAgIFx1MDAyNm1hcF9vcHRzKTtcbiYjNDM7XHRpZiAobWFwIFx1MDAzYyAwKSB7XG4mIzQzO1x0XHRwcl93YXJuKFwmIzM0O0Vycm9yIGluICVzKCk6ICVzLiBDb3VsZG4mIzM5O3QgY3JlYXRlIHNpbXBsZSBwZXJjcHVfYXJyYXkgbWFwLlxcblwmIzM0OyxcbiYjNDM7XHRcdFx0X19mdW5jX18sIGVycnN0cihtYXApKTtcbiYjNDM7XHRcdHJldHVybiBtYXA7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpbnNuc1swXS5pbW0gPSBtYXA7XG4mIzQzO1xuJiM0MztcdHJldCA9IGJwZl9wcm9nX2xvYWQoQlBGX1BST0dfVFlQRV9TT0NLRVRfRklMVEVSLCBOVUxMLCBcJiMzNDtHUExcJiMzNDssIGluc25zLCBpbnNuX2NudCwgXHUwMDI2cHJvZ19vcHRzKTtcbiYjNDM7XHRjbG9zZShtYXApO1xuJiM0MztcdHJldHVybiBwcm9iZV9mZChyZXQpO1xuJiM0Mzt9XG4mIzQzO1xuIHR5cGVkZWYgaW50ICgqZmVhdHVyZV9wcm9iZV9mbikoaW50IC8qIHRva2VuX2ZkICovKTtcbiBcbiBzdGF0aWMgc3RydWN0IGtlcm5fZmVhdHVyZV9jYWNoZSBmZWF0dXJlX2NhY2hlO1xuQEAgLTcwNyw2ICYjNDM7NzM5LDkgQEAgc3RhdGljIHN0cnVjdCBrZXJuX2ZlYXR1cmVfZGVzYyB7XG4gXHRbRkVBVF9CUEZfU1lTQ0FMTF9DT01NT05fQVRUUlNdID0ge1xuIFx0XHRcJiMzNDtCUEYgc3lzY2FsbCBjb21tb24gYXR0cmlidXRlcyBzdXBwb3J0XCYjMzQ7LCBwcm9iZV9icGZfc3lzY2FsbF9jb21tb25fYXR0cnMsXG4gXHR9LFxuJiM0MztcdFtGRUFUX1BFUkNQVV9EQVRBXSA9IHtcbiYjNDM7XHRcdFwmIzM0O2tlcm5lbCBzdXBwb3J0cyBwZXJjcHUgZGF0YVwmIzM0OywgcHJvYmVfa2Vybl9wZXJjcHVfZGF0YSxcbiYjNDM7XHR9LFxuIH07XG4gXG4gYm9vbCBmZWF0X3N1cHBvcnRlZChzdHJ1Y3Qga2Vybl9mZWF0dXJlX2NhY2hlICpjYWNoZSwgZW51bSBrZXJuX2ZlYXR1cmVfaWQgZmVhdF9pZClcbmRpZmYgLS1naXQgYS90b29scy9saWIvYnBmL2dlbl9sb2FkZXIuYyBiL3Rvb2xzL2xpYi9icGYvZ2VuX2xvYWRlci5jXG5pbmRleCA2ZTNkZDUyNDI3NjE4Li5hZjNhMDRmMTYxYWMxIDEwMDY0NFxuLS0tIGEvdG9vbHMvbGliL2JwZi9nZW5fbG9hZGVyLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL2xpYi9icGYvZ2VuX2xvYWRlci5jXG5AQCAtMTEyOCw3ICYjNDM7MTEyOCw3IEBAIHZvaWQgYnBmX2dlbl9fcHJvZ19sb2FkKHN0cnVjdCBicGZfZ2VuICpnZW4sXG4gfVxuIFxuIHZvaWQgYnBmX2dlbl9fbWFwX3VwZGF0ZV9lbGVtKHN0cnVjdCBicGZfZ2VuICpnZW4sIGludCBtYXBfaWR4LCB2b2lkICpwdmFsdWUsXG4tXHRcdFx0ICAgICAgX191MzIgdmFsdWVfc2l6ZSlcbiYjNDM7XHRcdFx0ICAgICAgX191MzIgdmFsdWVfc2l6ZSwgX191NjQgZmxhZ3MpXG4ge1xuIFx0aW50IGF0dHJfc2l6ZSA9IG9mZnNldG9mZW5kKHVuaW9uIGJwZl9hdHRyLCBmbGFncyk7XG4gXHRpbnQgbWFwX3VwZGF0ZV9hdHRyLCB2YWx1ZSwga2V5O1xuQEAgLTExMzYsNiAmIzQzOzExMzYsNyBAQCB2b2lkIGJwZl9nZW5fX21hcF91cGRhdGVfZWxlbShzdHJ1Y3QgYnBmX2dlbiAqZ2VuLCBpbnQgbWFwX2lkeCwgdm9pZCAqcHZhbHVlLFxuIFx0aW50IHplcm8gPSAwO1xuIFxuIFx0bWVtc2V0KFx1MDAyNmF0dHIsIDAsIGF0dHJfc2l6ZSk7XG4mIzQzO1x0YXR0ci5mbGFncyA9IHRndF9lbmRpYW4oZmxhZ3MpO1xuIFxuIFx0dmFsdWUgPSBhZGRfZGF0YShnZW4sIHB2YWx1ZSwgdmFsdWVfc2l6ZSk7XG4gXHRrZXkgPSBhZGRfZGF0YShnZW4sIFx1MDAyNnplcm8sIHNpemVvZih6ZXJvKSk7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvbGliL2JwZi9saWJicGYuYyBiL3Rvb2xzL2xpYi9icGYvbGliYnBmLmNcbmluZGV4IDUxNGU0ZTlkYWE4MjUuLjlmNzlhOGU4NTBmZGIgMTAwNjQ0XG4tLS0gYS90b29scy9saWIvYnBmL2xpYmJwZi5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy9saWIvYnBmL2xpYmJwZi5jXG5AQCAtNTQxLDYgJiM0Mzs1NDEsNyBAQCBzdHJ1Y3QgYnBmX3N0cnVjdF9vcHMge1xuIH07XG4gXG4gI2RlZmluZSBEQVRBX1NFQyBcJiMzNDsuZGF0YVwmIzM0O1xuJiM0MzsjZGVmaW5lIFBFUkNQVV9TRUMgXCYjMzQ7LnBlcmNwdVwmIzM0O1xuICNkZWZpbmUgQlNTX1NFQyBcJiMzNDsuYnNzXCYjMzQ7XG4gI2RlZmluZSBST0RBVEFfU0VDIFwmIzM0Oy5yb2RhdGFcJiMzNDtcbiAjZGVmaW5lIEtDT05GSUdfU0VDIFwmIzM0Oy5rY29uZmlnXCYjMzQ7XG5AQCAtNTU1LDYgJiM0Mzs1NTYsNyBAQCBlbnVtIGxpYmJwZl9tYXBfdHlwZSB7XG4gXHRMSUJCUEZfTUFQX0JTUyxcbiBcdExJQkJQRl9NQVBfUk9EQVRBLFxuIFx0TElCQlBGX01BUF9LQ09ORklHLFxuJiM0MztcdExJQkJQRl9NQVBfUEVSQ1BVLFxuIH07XG4gXG4gc3RydWN0IGJwZl9tYXBfZGVmIHtcbkBAIC02NjYsNiAmIzQzOzY2OCw3IEBAIGVudW0gc2VjX3R5cGUge1xuIFx0U0VDX0RBVEEsXG4gXHRTRUNfUk9EQVRBLFxuIFx0U0VDX1NUX09QUyxcbiYjNDM7XHRTRUNfUEVSQ1BVLFxuIH07XG4gXG4gc3RydWN0IGVsZl9zZWNfZGVzYyB7XG5AQCAtMTgzOSw2ICYjNDM7MTg0Miw4IEBAIHN0YXRpYyBzaXplX3QgYnBmX21hcF9tbWFwX3N6KGNvbnN0IHN0cnVjdCBicGZfbWFwICptYXApXG4gXHRzd2l0Y2ggKG1hcC1cdTAwM2VkZWYudHlwZSkge1xuIFx0Y2FzZSBCUEZfTUFQX1RZUEVfQVJSQVk6XG4gXHRcdHJldHVybiBhcnJheV9tYXBfbW1hcF9zeihtYXAtXHUwMDNlZGVmLnZhbHVlX3NpemUsIG1hcC1cdTAwM2VkZWYubWF4X2VudHJpZXMpO1xuJiM0MztcdGNhc2UgQlBGX01BUF9UWVBFX1BFUkNQVV9BUlJBWTpcbiYjNDM7XHRcdHJldHVybiBtYXAtXHUwMDNlZGVmLnZhbHVlX3NpemU7XG4gXHRjYXNlIEJQRl9NQVBfVFlQRV9BUkVOQTpcbiBcdFx0cmV0dXJuIHBhZ2Vfc3ogKiBtYXAtXHUwMDNlZGVmLm1heF9lbnRyaWVzO1xuIFx0ZGVmYXVsdDpcbkBAIC0xODY2LDcgJiM0MzsxODcxLDggQEAgc3RhdGljIGludCBicGZfbWFwX21tYXBfcmVzaXplKHN0cnVjdCBicGZfbWFwICptYXAsIHNpemVfdCBvbGRfc3osIHNpemVfdCBuZXdfc3pcbiBcdHJldHVybiAwO1xuIH1cbiBcbi1zdGF0aWMgY2hhciAqaW50ZXJuYWxfbWFwX25hbWUoc3RydWN0IGJwZl9vYmplY3QgKm9iaiwgY29uc3QgY2hhciAqcmVhbF9uYW1lKVxuJiM0MztzdGF0aWMgY2hhciAqaW50ZXJuYWxfbWFwX25hbWUoc3RydWN0IGJwZl9vYmplY3QgKm9iaiwgY29uc3QgY2hhciAqcmVhbF9uYW1lLFxuJiM0MztcdFx0XHQgICAgICAgZW51bSBsaWJicGZfbWFwX3R5cGUgdHlwZSlcbiB7XG4gXHRjaGFyIG1hcF9uYW1lW0JQRl9PQkpfTkFNRV9MRU5dLCAqcDtcbiBcdGludCBwZnhfbGVuLCBzZnhfbGVuID0gbWF4KChzaXplX3QpNywgc3RybGVuKHJlYWxfbmFtZSkpO1xuQEAgLTE5MDcsOCAmIzQzOzE5MTMsMTEgQEAgc3RhdGljIGNoYXIgKmludGVybmFsX21hcF9uYW1lKHN0cnVjdCBicGZfb2JqZWN0ICpvYmosIGNvbnN0IGNoYXIgKnJlYWxfbmFtZSlcbiBcdGlmIChzZnhfbGVuIFx1MDAzZT0gQlBGX09CSl9OQU1FX0xFTilcbiBcdFx0c2Z4X2xlbiA9IEJQRl9PQkpfTkFNRV9MRU4gLSAxO1xuIFxuLVx0LyogaWYgdGhlcmUgYXJlIHR3byBvciBtb3JlIGRvdHMgaW4gbWFwIG5hbWUsIGl0JiMzOTtzIGEgY3VzdG9tIGRvdCBtYXAgKi9cbi1cdGlmIChzdHJjaHIocmVhbF9uYW1lICYjNDM7IDEsICYjMzk7LiYjMzk7KSAhPSBOVUxMKVxuJiM0MztcdC8qXG4mIzQzO1x0ICogRG9uJiMzOTt0IHByZWZpeCB0aGUgYnBmX29iamVjdCBuYW1lIGlmIHRoaXMgaXMgYSBjdXN0b20gZG90IG1hcFxuJiM0MztcdCAqIChjb250YWluaW5nIHR3byBvciBtb3JlIGRvdHMpIG9yIGEgcGVyY3B1IGRhdGEgbWFwLlxuJiM0MztcdCAqL1xuJiM0MztcdGlmIChzdHJjaHIocmVhbF9uYW1lICYjNDM7IDEsICYjMzk7LiYjMzk7KSAhPSBOVUxMIHx8IHR5cGUgPT0gTElCQlBGX01BUF9QRVJDUFUpXG4gXHRcdHBmeF9sZW4gPSAwO1xuIFx0ZWxzZVxuIFx0XHRwZnhfbGVuID0gbWluKChzaXplX3QpQlBGX09CSl9OQU1FX0xFTiAtIHNmeF9sZW4gLSAxLCBzdHJsZW4ob2JqLVx1MDAzZW5hbWUpKTtcbkBAIC0xOTQxLDYgJiM0MzsxOTUwLDEzIEBAIHN0YXRpYyBib29sIG1hcF9pc19tbWFwYWJsZShzdHJ1Y3QgYnBmX29iamVjdCAqb2JqLCBzdHJ1Y3QgYnBmX21hcCAqbWFwKVxuIFx0aWYgKCFtYXAtXHUwMDNlYnRmX3ZhbHVlX3R5cGVfaWQpXG4gXHRcdHJldHVybiBmYWxzZTtcbiBcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFRoZSBpbnRlcm5hbCBQRVJDUFUgbWFwcyBhcmUgbm90IG1tYXBibGUgYmVjYXVzZSB0aGUgdW5kZXJseWluZ1xuJiM0MztcdCAqIHBlcmNwdV9hcnJheSBtYXBzIGRvIG5vdCBoYXZlIG1tYXAgc3VwcG9ydC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAobWFwLVx1MDAzZWxpYmJwZl90eXBlID09IExJQkJQRl9NQVBfUEVSQ1BVKVxuJiM0MztcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcbiBcdHQgPSBidGZfX3R5cGVfYnlfaWQob2JqLVx1MDAzZWJ0ZiwgbWFwLVx1MDAzZWJ0Zl92YWx1ZV90eXBlX2lkKTtcbiBcdGlmICghYnRmX2lzX2RhdGFzZWModCkpXG4gXHRcdHJldHVybiBmYWxzZTtcbkBAIC0xOTYyLDYgJiM0MzsxOTc4LDcgQEAgc3RhdGljIGludFxuIGJwZl9vYmplY3RfX2luaXRfaW50ZXJuYWxfbWFwKHN0cnVjdCBicGZfb2JqZWN0ICpvYmosIGVudW0gbGliYnBmX21hcF90eXBlIHR5cGUsXG4gXHRcdFx0ICAgICAgY29uc3QgY2hhciAqcmVhbF9uYW1lLCBpbnQgc2VjX2lkeCwgdm9pZCAqZGF0YSwgc2l6ZV90IGRhdGFfc3opXG4ge1xuJiM0MztcdGJvb2wgaXNfcGVyY3B1ID0gdHlwZSA9PSBMSUJCUEZfTUFQX1BFUkNQVTtcbiBcdHN0cnVjdCBicGZfbWFwX2RlZiAqZGVmO1xuIFx0c3RydWN0IGJwZl9tYXAgKm1hcDtcbiBcdHNpemVfdCBtbWFwX3N6O1xuQEAgLTE5NzUsNyAmIzQzOzE5OTIsNyBAQCBicGZfb2JqZWN0X19pbml0X2ludGVybmFsX21hcChzdHJ1Y3QgYnBmX29iamVjdCAqb2JqLCBlbnVtIGxpYmJwZl9tYXBfdHlwZSB0eXBlLFxuIFx0bWFwLVx1MDAzZXNlY19pZHggPSBzZWNfaWR4O1xuIFx0bWFwLVx1MDAzZXNlY19vZmZzZXQgPSAwO1xuIFx0bWFwLVx1MDAzZXJlYWxfbmFtZSA9IHN0cmR1cChyZWFsX25hbWUpO1xuLVx0bWFwLVx1MDAzZW5hbWUgPSBpbnRlcm5hbF9tYXBfbmFtZShvYmosIHJlYWxfbmFtZSk7XG4mIzQzO1x0bWFwLVx1MDAzZW5hbWUgPSBpbnRlcm5hbF9tYXBfbmFtZShvYmosIHJlYWxfbmFtZSwgdHlwZSk7XG4gXHRpZiAoIW1hcC1cdTAwM2VyZWFsX25hbWUgfHwgIW1hcC1cdTAwM2VuYW1lKSB7XG4gXHRcdHpmcmVlKFx1MDAyNm1hcC1cdTAwM2VyZWFsX25hbWUpO1xuIFx0XHR6ZnJlZShcdTAwMjZtYXAtXHUwMDNlbmFtZSk7XG5AQCAtMTk4Myw3ICYjNDM7MjAwMCw3IEBAIGJwZl9vYmplY3RfX2luaXRfaW50ZXJuYWxfbWFwKHN0cnVjdCBicGZfb2JqZWN0ICpvYmosIGVudW0gbGliYnBmX21hcF90eXBlIHR5cGUsXG4gXHR9XG4gXG4gXHRkZWYgPSBcdTAwMjZtYXAtXHUwMDNlZGVmO1xuLVx0ZGVmLVx1MDAzZXR5cGUgPSBCUEZfTUFQX1RZUEVfQVJSQVk7XG4mIzQzO1x0ZGVmLVx1MDAzZXR5cGUgPSBpc19wZXJjcHUgPyBCUEZfTUFQX1RZUEVfUEVSQ1BVX0FSUkFZIDogQlBGX01BUF9UWVBFX0FSUkFZO1xuIFx0ZGVmLVx1MDAzZWtleV9zaXplID0gc2l6ZW9mKGludCk7XG4gXHRkZWYtXHUwMDNldmFsdWVfc2l6ZSA9IGRhdGFfc3o7XG4gXHRkZWYtXHUwMDNlbWF4X2VudHJpZXMgPSAxO1xuQEAgLTE5OTYsOCAmIzQzOzIwMTMsOSBAQCBicGZfb2JqZWN0X19pbml0X2ludGVybmFsX21hcChzdHJ1Y3QgYnBmX29iamVjdCAqb2JqLCBlbnVtIGxpYmJwZl9tYXBfdHlwZSB0eXBlLFxuIFx0aWYgKG1hcF9pc19tbWFwYWJsZShvYmosIG1hcCkpXG4gXHRcdGRlZi1cdTAwM2VtYXBfZmxhZ3MgfD0gQlBGX0ZfTU1BUEFCTEU7XG4gXG4tXHRwcl9kZWJ1ZyhcJiMzNDttYXAgJiMzOTslcyYjMzk7IChnbG9iYWwgZGF0YSk6IGF0IHNlY19pZHggJWQsIG9mZnNldCAlenUsIGZsYWdzICV4LlxcblwmIzM0Oyxcbi1cdFx0IG1hcC1cdTAwM2VuYW1lLCBtYXAtXHUwMDNlc2VjX2lkeCwgbWFwLVx1MDAzZXNlY19vZmZzZXQsIGRlZi1cdTAwM2VtYXBfZmxhZ3MpO1xuJiM0MztcdHByX2RlYnVnKFwmIzM0O21hcCAmIzM5OyVzJiMzOTsgKGdsb2JhbCAlc2RhdGEpOiBhdCBzZWNfaWR4ICVkLCBvZmZzZXQgJXp1LCBmbGFncyAleC5cXG5cJiMzNDssXG4mIzQzO1x0XHQgbWFwLVx1MDAzZW5hbWUsIGlzX3BlcmNwdSA/IFwmIzM0O3BlcmNwdSBcJiMzNDsgOiBcJiMzNDtcJiMzNDssIG1hcC1cdTAwM2VzZWNfaWR4LFxuJiM0MztcdFx0IG1hcC1cdTAwM2VzZWNfb2Zmc2V0LCBkZWYtXHUwMDNlbWFwX2ZsYWdzKTtcbiBcbiBcdG1tYXBfc3ogPSBicGZfbWFwX21tYXBfc3oobWFwKTtcbiBcdG1hcC1cdTAwM2VtbWFwZWQgPSBtbWFwKE5VTEwsIG1tYXBfc3osIFBST1RfUkVBRCB8IFBST1RfV1JJVEUsXG5AQCAtMjA1Nyw2ICYjNDM7MjA3NSwxMyBAQCBzdGF0aWMgaW50IGJwZl9vYmplY3RfX2luaXRfZ2xvYmFsX2RhdGFfbWFwcyhzdHJ1Y3QgYnBmX29iamVjdCAqb2JqKVxuIFx0XHRcdFx0XHRcdFx0ICAgIE5VTEwsXG4gXHRcdFx0XHRcdFx0XHQgICAgc2VjX2Rlc2MtXHUwMDNlZGF0YS1cdTAwM2VkX3NpemUpO1xuIFx0XHRcdGJyZWFrO1xuJiM0MztcdFx0Y2FzZSBTRUNfUEVSQ1BVOlxuJiM0MztcdFx0XHRzZWNfbmFtZSA9IGVsZl9zZWNfbmFtZShvYmosIGVsZl9zZWNfYnlfaWR4KG9iaiwgc2VjX2lkeCkpO1xuJiM0MztcdFx0XHRlcnIgPSBicGZfb2JqZWN0X19pbml0X2ludGVybmFsX21hcChvYmosIExJQkJQRl9NQVBfUEVSQ1BVLFxuJiM0MztcdFx0XHRcdFx0XHRcdCAgICBzZWNfbmFtZSwgc2VjX2lkeCxcbiYjNDM7XHRcdFx0XHRcdFx0XHQgICAgc2VjX2Rlc2MtXHUwMDNlZGF0YS1cdTAwM2VkX2J1ZixcbiYjNDM7XHRcdFx0XHRcdFx0XHQgICAgc2VjX2Rlc2MtXHUwMDNlZGF0YS1cdTAwM2VkX3NpemUpO1xuJiM0MztcdFx0XHRicmVhaztcbiBcdFx0ZGVmYXVsdDpcbiBcdFx0XHQvKiBza2lwICovXG4gXHRcdFx0YnJlYWs7XG5AQCAtNDAxNiw2ICYjNDM7NDA0MSwxMSBAQCBzdGF0aWMgaW50IGJwZl9vYmplY3RfX2VsZl9jb2xsZWN0KHN0cnVjdCBicGZfb2JqZWN0ICpvYmopXG4gXHRcdFx0XHRzZWNfZGVzYy1cdTAwM2VzZWNfdHlwZSA9IFNFQ19ST0RBVEE7XG4gXHRcdFx0XHRzZWNfZGVzYy1cdTAwM2VzaGRyID0gc2g7XG4gXHRcdFx0XHRzZWNfZGVzYy1cdTAwM2VkYXRhID0gZGF0YTtcbiYjNDM7XHRcdFx0fSBlbHNlIGlmIChzdHJjbXAobmFtZSwgUEVSQ1BVX1NFQykgPT0gMCB8fFxuJiM0MztcdFx0XHRcdCAgIHN0cl9oYXNfcGZ4KG5hbWUsIFBFUkNQVV9TRUMgXCYjMzQ7LlwmIzM0OykpIHtcbiYjNDM7XHRcdFx0XHRzZWNfZGVzYy1cdTAwM2VzZWNfdHlwZSA9IFNFQ19QRVJDUFU7XG4mIzQzO1x0XHRcdFx0c2VjX2Rlc2MtXHUwMDNlc2hkciA9IHNoO1xuJiM0MztcdFx0XHRcdHNlY19kZXNjLVx1MDAzZWRhdGEgPSBkYXRhO1xuIFx0XHRcdH0gZWxzZSBpZiAoc3RyY21wKG5hbWUsIFNUUlVDVF9PUFNfU0VDKSA9PSAwIHx8XG4gXHRcdFx0XHQgICBzdHJjbXAobmFtZSwgU1RSVUNUX09QU19MSU5LX1NFQykgPT0gMCB8fFxuIFx0XHRcdFx0ICAgc3RyY21wKG5hbWUsIFwmIzM0Oz9cJiMzNDsgU1RSVUNUX09QU19TRUMpID09IDAgfHxcbkBAIC00NTQ0LDYgJiM0Mzs0NTc0LDcgQEAgc3RhdGljIGJvb2wgYnBmX29iamVjdF9fc2huZHhfaXNfZGF0YShjb25zdCBzdHJ1Y3QgYnBmX29iamVjdCAqb2JqLFxuIFx0Y2FzZSBTRUNfQlNTOlxuIFx0Y2FzZSBTRUNfREFUQTpcbiBcdGNhc2UgU0VDX1JPREFUQTpcbiYjNDM7XHRjYXNlIFNFQ19QRVJDUFU6XG4gXHRcdHJldHVybiB0cnVlO1xuIFx0ZGVmYXVsdDpcbiBcdFx0cmV0dXJuIGZhbHNlO1xuQEAgLTQ1NjksNiAmIzQzOzQ2MDAsOCBAQCBicGZfb2JqZWN0X19zZWN0aW9uX3RvX2xpYmJwZl9tYXBfdHlwZShjb25zdCBzdHJ1Y3QgYnBmX29iamVjdCAqb2JqLCBpbnQgc2huZHgpXG4gXHRcdHJldHVybiBMSUJCUEZfTUFQX0RBVEE7XG4gXHRjYXNlIFNFQ19ST0RBVEE6XG4gXHRcdHJldHVybiBMSUJCUEZfTUFQX1JPREFUQTtcbiYjNDM7XHRjYXNlIFNFQ19QRVJDUFU6XG4mIzQzO1x0XHRyZXR1cm4gTElCQlBGX01BUF9QRVJDUFU7XG4gXHRkZWZhdWx0OlxuIFx0XHRyZXR1cm4gTElCQlBGX01BUF9VTlNQRUM7XG4gXHR9XG5AQCAtNDk0NCw3ICYjNDM7NDk3Nyw3IEBAIHN0YXRpYyBpbnQgbWFwX2ZpbGxfYnRmX3R5cGVfaW5mbyhzdHJ1Y3QgYnBmX29iamVjdCAqb2JqLCBzdHJ1Y3QgYnBmX21hcCAqbWFwKVxuIFxuIFx0LypcbiBcdCAqIExMVk0gYW5ub3RhdGVzIGdsb2JhbCBkYXRhIGRpZmZlcmVudGx5IGluIEJURiwgdGhhdCBpcyxcbi1cdCAqIG9ubHkgYXMgJiMzOTsuZGF0YSYjMzk7LCAmIzM5Oy5ic3MmIzM5OyBvciAmIzM5Oy5yb2RhdGEmIzM5Oy5cbiYjNDM7XHQgKiBvbmx5IGFzICYjMzk7LmRhdGEmIzM5OywgJiMzOTsuYnNzJiMzOTssICYjMzk7LnBlcmNwdSYjMzk7IG9yICYjMzk7LnJvZGF0YSYjMzk7LlxuIFx0ICovXG4gXHRpZiAoIWJwZl9tYXBfX2lzX2ludGVybmFsKG1hcCkpXG4gXHRcdHJldHVybiAtRU5PRU5UO1xuQEAgLTUyOTMsMTggJiM0Mzs1MzI2LDI2IEBAIHN0YXRpYyBpbnRcbiBicGZfb2JqZWN0X19wb3B1bGF0ZV9pbnRlcm5hbF9tYXAoc3RydWN0IGJwZl9vYmplY3QgKm9iaiwgc3RydWN0IGJwZl9tYXAgKm1hcClcbiB7XG4gXHRlbnVtIGxpYmJwZl9tYXBfdHlwZSBtYXBfdHlwZSA9IG1hcC1cdTAwM2VsaWJicGZfdHlwZTtcbiYjNDM7XHRib29sIGlzX3BlcmNwdSA9IG1hcF90eXBlID09IExJQkJQRl9NQVBfUEVSQ1BVO1xuJiM0MztcdGNvbnN0IF9fdTY0IHVwZGF0ZV9mbGFncyA9IGlzX3BlcmNwdSA/IEJQRl9GX0FMTF9DUFVTIDogMDtcbiBcdGludCBlcnIsIHplcm8gPSAwO1xuIFx0c2l6ZV90IG1tYXBfc3o7XG4gXG4mIzQzO1x0aWYgKGlzX3BlcmNwdSBcdTAwMjZcdTAwMjYgIW9iai1cdTAwM2VnZW5fbG9hZGVyIFx1MDAyNlx1MDAyNiAha2VybmVsX3N1cHBvcnRzKG9iaiwgRkVBVF9QRVJDUFVfREFUQSkpIHtcbiYjNDM7XHRcdHByX3dhcm4oXCYjMzQ7bWFwICYjMzk7JXMmIzM5Ozoga2VybmVsIGRvZXMgbm90IHN1cHBvcnQgcGVyY3B1IGRhdGEuXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRicGZfbWFwX19uYW1lKG1hcCkpO1xuJiM0MztcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuJiM0MztcdH1cbiYjNDM7XG4gXHRpZiAob2JqLVx1MDAzZWdlbl9sb2FkZXIpIHtcbiBcdFx0YnBmX2dlbl9fbWFwX3VwZGF0ZV9lbGVtKG9iai1cdTAwM2VnZW5fbG9hZGVyLCBtYXAgLSBvYmotXHUwMDNlbWFwcyxcbi1cdFx0XHRcdFx0IG1hcC1cdTAwM2VtbWFwZWQsIG1hcC1cdTAwM2VkZWYudmFsdWVfc2l6ZSk7XG4mIzQzO1x0XHRcdFx0XHQgbWFwLVx1MDAzZW1tYXBlZCwgbWFwLVx1MDAzZWRlZi52YWx1ZV9zaXplLCB1cGRhdGVfZmxhZ3MpO1xuIFx0XHRpZiAobWFwX3R5cGUgPT0gTElCQlBGX01BUF9ST0RBVEEgfHwgbWFwX3R5cGUgPT0gTElCQlBGX01BUF9LQ09ORklHKVxuIFx0XHRcdGJwZl9nZW5fX21hcF9mcmVlemUob2JqLVx1MDAzZWdlbl9sb2FkZXIsIG1hcCAtIG9iai1cdTAwM2VtYXBzKTtcbiBcdFx0cmV0dXJuIDA7XG4gXHR9XG4gXG4tXHRlcnIgPSBicGZfbWFwX3VwZGF0ZV9lbGVtKG1hcC1cdTAwM2VmZCwgXHUwMDI2emVybywgbWFwLVx1MDAzZW1tYXBlZCwgMCk7XG4mIzQzO1x0ZXJyID0gYnBmX21hcF91cGRhdGVfZWxlbShtYXAtXHUwMDNlZmQsIFx1MDAyNnplcm8sIG1hcC1cdTAwM2VtbWFwZWQsIHVwZGF0ZV9mbGFncyk7XG4gXHRpZiAoZXJyKSB7XG4gXHRcdGVyciA9IC1lcnJubztcbiBcdFx0cHJfd2FybihcJiMzNDttYXAgJiMzOTslcyYjMzk7OiBmYWlsZWQgdG8gc2V0IGluaXRpYWwgY29udGVudHM6ICVzXFxuXCYjMzQ7LFxuQEAgLTUzNDksNiAmIzQzOzUzOTAsMTMgQEAgYnBmX29iamVjdF9fcG9wdWxhdGVfaW50ZXJuYWxfbWFwKHN0cnVjdCBicGZfb2JqZWN0ICpvYmosIHN0cnVjdCBicGZfbWFwICptYXApXG4gXHRcdFx0cmV0dXJuIGVycjtcbiBcdFx0fVxuIFx0XHRtYXAtXHUwMDNlbW1hcGVkID0gbW1hcGVkO1xuJiM0MztcdH0gZWxzZSBpZiAoaXNfcGVyY3B1KSB7XG4mIzQzO1x0XHRpZiAobXByb3RlY3QobWFwLVx1MDAzZW1tYXBlZCwgbW1hcF9zeiwgUFJPVF9SRUFEKSkge1xuJiM0MztcdFx0XHRlcnIgPSAtZXJybm87XG4mIzQzO1x0XHRcdHByX3dhcm4oXCYjMzQ7bWFwICYjMzk7JXMmIzM5OzogZmFpbGVkIHRvIG1wcm90ZWN0KCkgY29udGVudHM6ICVzXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRcdGJwZl9tYXBfX25hbWUobWFwKSwgZXJyc3RyKGVycikpO1xuJiM0MztcdFx0XHRyZXR1cm4gZXJyO1xuJiM0MztcdFx0fVxuIFx0fSBlbHNlIGlmIChtYXAtXHUwMDNlbW1hcGVkKSB7XG4gXHRcdG11bm1hcChtYXAtXHUwMDNlbW1hcGVkLCBtbWFwX3N6KTtcbiBcdFx0bWFwLVx1MDAzZW1tYXBlZCA9IE5VTEw7XG5AQCAtNTYyNyw2ICYjNDM7NTY3NSw5IEBAIGJwZl9vYmplY3RfX2NyZWF0ZV9tYXBzKHN0cnVjdCBicGZfb2JqZWN0ICpvYmopXG4gXHRcdCAqL1xuIFx0XHRpZiAoYnBmX21hcF9faXNfaW50ZXJuYWwobWFwKSBcdTAwMjZcdTAwMjYgIWtlcm5lbF9zdXBwb3J0cyhvYmosIEZFQVRfR0xPQkFMX0RBVEEpKVxuIFx0XHRcdG1hcC1cdTAwM2VhdXRvY3JlYXRlID0gZmFsc2U7XG4mIzQzO1x0XHRpZiAoYnBmX21hcF9faXNfaW50ZXJuYWwobWFwKSBcdTAwMjZcdTAwMjYgYnBmX21hcF9fdHlwZShtYXApID09IEJQRl9NQVBfVFlQRV9QRVJDUFVfQVJSQVkgXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHQgICAgIWtlcm5lbF9zdXBwb3J0cyhvYmosIEZFQVRfUEVSQ1BVX0RBVEEpKVxuJiM0MztcdFx0XHRtYXAtXHUwMDNlYXV0b2NyZWF0ZSA9IGZhbHNlO1xuIFxuIFx0XHRpZiAoIW1hcC1cdTAwM2VhdXRvY3JlYXRlKSB7XG4gXHRcdFx0cHJfZGVidWcoXCYjMzQ7bWFwICYjMzk7JXMmIzM5Ozogc2tpcHBlZCBhdXRvLWNyZWF0aW5nLi4uXFxuXCYjMzQ7LCBtYXAtXHUwMDNlbmFtZSk7XG5AQCAtMTA4MDcsMTEgJiM0MzsxMDg1OCwxNiBAQCBzdGF0aWMgYm9vbCBtYXBfdXNlc19yZWFsX25hbWUoY29uc3Qgc3RydWN0IGJwZl9tYXAgKm1hcClcbiBcdCAqIHN1Y2ggbWFwJiMzOTtzIGNvcnJlc3BvbmRpbmcgRUxGIHNlY3Rpb24gbmFtZSBhcyBhIG1hcCBuYW1lLlxuIFx0ICogVGhpcyBjaGVjayBkaXN0aW5ndWlzaGVzIC5kYXRhLy5yb2RhdGEgZnJvbSAuZGF0YS4qIGFuZCAucm9kYXRhLipcbiBcdCAqIG1hcHMgdG8ga25vdyB3aGljaCBuYW1lIGhhcyB0byBiZSByZXR1cm5lZCB0byB0aGUgdXNlci5cbiYjNDM7XHQgKiBNYXAgbmFtZSBvZiB0aGUgY3VzdG9tIC5wZXJjcHUuKiBtYXBzIG1pZ2h0IGJlIHRydW5jYXRlZCB0b1xuJiM0MztcdCAqIEJQRl9PQkpfTkFNRV9MRU4tMSBjaGFycyBpbiBpbnRlcm5hbF9tYXBfbmFtZSgpLiBIZW5jZSwgcGVyY3B1IGRhdGFcbiYjNDM7XHQgKiBtYXBzIG11c3QgdXNlIHJlYWwgbmFtZSBmb3IgdGhlaXIgdXNlci12aXNpYmxlIG5hbWUuXG4gXHQgKi9cbiBcdGlmIChtYXAtXHUwMDNlbGliYnBmX3R5cGUgPT0gTElCQlBGX01BUF9EQVRBIFx1MDAyNlx1MDAyNiBzdHJjbXAobWFwLVx1MDAzZXJlYWxfbmFtZSwgREFUQV9TRUMpICE9IDApXG4gXHRcdHJldHVybiB0cnVlO1xuIFx0aWYgKG1hcC1cdTAwM2VsaWJicGZfdHlwZSA9PSBMSUJCUEZfTUFQX1JPREFUQSBcdTAwMjZcdTAwMjYgc3RyY21wKG1hcC1cdTAwM2VyZWFsX25hbWUsIFJPREFUQV9TRUMpICE9IDApXG4gXHRcdHJldHVybiB0cnVlO1xuJiM0MztcdGlmIChtYXAtXHUwMDNlbGliYnBmX3R5cGUgPT0gTElCQlBGX01BUF9QRVJDUFUpXG4mIzQzO1x0XHRyZXR1cm4gdHJ1ZTtcbiBcdHJldHVybiBmYWxzZTtcbiB9XG4gXG5kaWZmIC0tZ2l0IGEvdG9vbHMvbGliL2JwZi9saWJicGZfaW50ZXJuYWwuaCBiL3Rvb2xzL2xpYi9icGYvbGliYnBmX2ludGVybmFsLmhcbmluZGV4IDdhNzRhYmI5MDRmOGIuLjRjNDZkMzRmYzA1NWQgMTAwNjQ0XG4tLS0gYS90b29scy9saWIvYnBmL2xpYmJwZl9pbnRlcm5hbC5oXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy9saWIvYnBmL2xpYmJwZl9pbnRlcm5hbC5oXG5AQCAtNDAxLDYgJiM0Mzs0MDEsOCBAQCBlbnVtIGtlcm5fZmVhdHVyZV9pZCB7XG4gXHRGRUFUX0JURl9MQVlPVVQsXG4gXHQvKiBLZXJuZWwgc3VwcG9ydHMgQlBGIHN5c2NhbGwgY29tbW9uIGF0dHJpYnV0ZXMgKi9cbiBcdEZFQVRfQlBGX1NZU0NBTExfQ09NTU9OX0FUVFJTLFxuJiM0MztcdC8qIEtlcm5lbCBzdXBwb3J0cyBwZXJjcHUgZGF0YSAqL1xuJiM0MztcdEZFQVRfUEVSQ1BVX0RBVEEsXG4gXHRfX0ZFQVRfQ05ULFxuIH07XG4gXG5kaWZmIC0tZ2l0IGEvdG9vbHMvbGliL2JwZi9za2VsX2ludGVybmFsLmggYi90b29scy9saWIvYnBmL3NrZWxfaW50ZXJuYWwuaFxuaW5kZXggNTNmZWU1M2QzNmQ1MS4uMWYzZjMzMmRmZmJlOSAxMDA2NDRcbi0tLSBhL3Rvb2xzL2xpYi9icGYvc2tlbF9pbnRlcm5hbC5oXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy9saWIvYnBmL3NrZWxfaW50ZXJuYWwuaFxuQEAgLTEzMSw4ICYjNDM7MTMxLDEwIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBza2VsX2ZyZWVfbWFwX2RhdGEodm9pZCAqcCwgX191NjQgYWRkciwgc2l6ZV90IHN6KVxuIHtcbiBcdGlmIChhZGRyICE9IH4wVUxMKVxuIFx0XHRrdmZyZWUocCk7XG4tXHQvKiBXaGVuIGFkZHIgPT0gfjBVTEwgdGhlICYjMzk7cCYjMzk7IHBvaW50cyB0b1xuLVx0ICogKChzdHJ1Y3QgYnBmX2FycmF5ICopbWFwKS1cdTAwM2V2YWx1ZS4gU2VlIHNrZWxfZmluYWxpemVfbWFwX2RhdGEuXG4mIzQzO1x0LypcbiYjNDM7XHQgKiBXaGVuIGFkZHIgPT0gfjBVTEwgdGhlIGluaXQgYnVmZmVyIGhhcyBhbHJlYWR5IGJlZW4gcmVsZWFzZWQuXG4mIzQzO1x0ICogRm9yIHNrZWxfZmluYWxpemVfbWFwX2RhdGEoKSwgJiMzOTtwJiMzOTsgcG9pbnRzIHRvXG4mIzQzO1x0ICogKChzdHJ1Y3QgYnBmX2FycmF5ICopbWFwKS1cdTAwM2V2YWx1ZS5cbiBcdCAqL1xuIH1cbiBcbkBAIC0xNzAsNiAmIzQzOzE3MiwxNSBAQCBzdGF0aWMgaW5saW5lIHZvaWQgKnNrZWxfZmluYWxpemVfbWFwX2RhdGEoX191NjQgKmluaXRfdmFsLCBzaXplX3QgbW1hcF9zeiwgaW50XG4gXHRyZXR1cm4gYWRkcjtcbiB9XG4gXG4mIzQzO3N0YXRpYyBpbmxpbmUgaW50IHNrZWxfcHJvdGVjdF9tYXBfZGF0YSh2b2lkICpwLCBfX3U2NCAqaW5pdF92YWwsIHNpemVfdCBzeilcbiYjNDM7e1xuJiM0MztcdCh2b2lkKXN6O1xuJiM0MztcbiYjNDM7XHRrdmZyZWUocCk7XG4mIzQzO1x0KmluaXRfdmFsID0gfjBVTEw7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4gI2Vsc2VcbiBcbiBzdGF0aWMgaW5saW5lIHZvaWQgKnNrZWxfYWxsb2Moc2l6ZV90IHNpemUpXG5AQCAtMjA4LDYgJiM0MzsyMTksMTUgQEAgc3RhdGljIGlubGluZSB2b2lkICpza2VsX2ZpbmFsaXplX21hcF9kYXRhKF9fdTY0ICppbml0X3ZhbCwgc2l6ZV90IG1tYXBfc3osIGludFxuIFx0XHRyZXR1cm4gTlVMTDtcbiBcdHJldHVybiBhZGRyO1xuIH1cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbmxpbmUgaW50IHNrZWxfcHJvdGVjdF9tYXBfZGF0YSh2b2lkICpwLCBfX3U2NCAqaW5pdF92YWwsIHNpemVfdCBzeilcbiYjNDM7e1xuJiM0MztcdCh2b2lkKWluaXRfdmFsO1xuJiM0MztcbiYjNDM7XHRpZiAobXByb3RlY3QocCwgc3osIFBST1RfUkVBRCkpXG4mIzQzO1x0XHRyZXR1cm4gLWVycm5vO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4gI2VuZGlmXG4gXG4gc3RhdGljIGlubGluZSBpbnQgc2tlbF9jbG9zZW56KGludCBmZClcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvTWFrZWZpbGUgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvTWFrZWZpbGVcbmluZGV4IGQzNjU1YTcwNjQ4MjYuLjU2MGNlNDAxNmZiZmYgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvTWFrZWZpbGVcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9NYWtlZmlsZVxuQEAgLTUzMSw3ICYjNDM7NTMxLDcgQEAgTFNLRUxTX1NJR05FRCA6PSBmZW50cnlfdGVzdC5jIGZleGl0X3Rlc3QuYyBhdG9taWNzLmNcbiBcbiAjIEdlbmVyYXRlIGJvdGggbGlnaHQgc2tlbGV0b24gYW5kIGxpYmJwZiBza2VsZXRvbiBmb3IgdGhlc2VcbiBMU0tFTFNfRVhUUkEgOj0gdGVzdF9rc3ltc19tb2R1bGUuYyB0ZXN0X2tzeW1zX3dlYWsuYyBrZnVuY19jYWxsX3Rlc3QuYyBcXFxuLVx0a2Z1bmNfY2FsbF90ZXN0X3N1YnByb2cuY1xuJiM0MztcdGtmdW5jX2NhbGxfdGVzdF9zdWJwcm9nLmMgdGVzdF9nbG9iYWxfcGVyY3B1X2RhdGEuY1xuIFNLRUxfQkxBQ0tMSVNUICYjNDM7PSAkJChMU0tFTFMpICQkKExTS0VMU19TSUdORUQpXG4gXG4gdGVzdF9zdGF0aWNfbGlua2VkLnNrZWwuaC1kZXBzIDo9IHRlc3Rfc3RhdGljX2xpbmtlZDEuYnBmLm8gdGVzdF9zdGF0aWNfbGlua2VkMi5icGYub1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2dsb2JhbF9kYXRhX2luaXQuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2dsb2JhbF9kYXRhX2luaXQuY1xuaW5kZXggODQ2NjMzMmQ3NDA2Zi4uMjYyNTY1MWIzNGM3ZSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2dsb2JhbF9kYXRhX2luaXQuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvZ2xvYmFsX2RhdGFfaW5pdC5jXG5AQCAtMSw1ICYjNDM7MSw4IEBAXG4gLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiAjaW5jbHVkZSBcdTAwM2N0ZXN0X3Byb2dzLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7YnBmL2xpYmJwZl9pbnRlcm5hbC5oXCYjMzQ7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O3Rlc3RfZ2xvYmFsX3BlcmNwdV9kYXRhLnNrZWwuaFwmIzM0O1xuJiM0MzsjaW5jbHVkZSBcJiMzNDt0ZXN0X2dsb2JhbF9wZXJjcHVfZGF0YS5sc2tlbC5oXCYjMzQ7XG4gXG4gdm9pZCB0ZXN0X2dsb2JhbF9kYXRhX2luaXQodm9pZClcbiB7XG5AQCAtNjAsMyAmIzQzOzYzLDMxMCBAQCB2b2lkIHRlc3RfZ2xvYmFsX2RhdGFfaW5pdCh2b2lkKVxuIFx0ZnJlZShuZXd2YWwpO1xuIFx0YnBmX29iamVjdF9fY2xvc2Uob2JqKTtcbiB9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCB0ZXN0X3BlcmNwdV9kYXRhX29uX2NwdXMoc3RydWN0IGJwZl9tYXAgKm1hcCwgaW50IG1hcF9mZCwgaW50IHByb2dfZmQsIGludCAqcnVucClcbiYjNDM7e1xuJiM0MztcdF9fdTY0IGFyZ3NbMl0gPSB7MHgxMjM0VUxMLCAweDU2NzhVTEx9O1xuJiM0MztcdExJQkJQRl9PUFRTKGJwZl90ZXN0X3J1bl9vcHRzLCB0b3B0cyxcbiYjNDM7XHRcdCAgICAuY3R4X2luID0gYXJncyxcbiYjNDM7XHRcdCAgICAuY3R4X3NpemVfaW4gPSBzaXplb2YoYXJncyksXG4mIzQzO1x0XHQgICAgLmZsYWdzID0gQlBGX0ZfVEVTVF9SVU5fT05fQ1BVLFxuJiM0MztcdCk7XG4mIzQzO1x0aW50IGksIGVyciwga2V5ID0gMCwgbnVtX29ubGluZSwgcnVuID0gMDtcbiYjNDM7XHRib29sICpvbmxpbmU7XG4mIzQzO1xuJiM0MztcdGVyciA9IHBhcnNlX2NwdV9tYXNrX2ZpbGUoXCYjMzQ7L3N5cy9kZXZpY2VzL3N5c3RlbS9jcHUvb25saW5lXCYjMzQ7LCBcdTAwMjZvbmxpbmUsIFx1MDAyNm51bV9vbmxpbmUpO1xuJiM0MztcdGlmICghQVNTRVJUX09LKGVyciwgXCYjMzQ7cGFyc2VfY3B1X21hc2tfZmlsZVwmIzM0OykpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdC8qIHJ1biBvbiBldmVyeSBvbmxpbmUtQ1BVICovXG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgbnVtX29ubGluZTsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdHN0cnVjdCB0ZXN0X2dsb2JhbF9wZXJjcHVfZGF0YV9fcGVyY3B1IGRhdGEgPSB7fTtcbiYjNDM7XHRcdF9fdTY0IGZsYWdzO1xuJiM0MztcbiYjNDM7XHRcdGlmICghb25saW5lW2ldKVxuJiM0MztcdFx0XHRjb250aW51ZTtcbiYjNDM7XG4mIzQzO1x0XHR0b3B0cy5jcHUgPSBpO1xuJiM0MztcdFx0dG9wdHMucmV0dmFsID0gLTE7XG4mIzQzO1x0XHRlcnIgPSBicGZfcHJvZ190ZXN0X3J1bl9vcHRzKHByb2dfZmQsIFx1MDAyNnRvcHRzKTtcbiYjNDM7XHRcdEFTU0VSVF9PSyhlcnIsIFwmIzM0O2JwZl9wcm9nX3Rlc3RfcnVuX29wdHNcJiMzNDspO1xuJiM0MztcdFx0QVNTRVJUX0VRKHRvcHRzLnJldHZhbCwgMCwgXCYjMzQ7YnBmX3Byb2dfdGVzdF9ydW5fb3B0cyByZXR2YWxcJiMzNDspO1xuJiM0MztcbiYjNDM7XHRcdGZsYWdzID0gKChfX3U2NCkgaSBcdTAwM2NcdTAwM2MgMzIpIHwgQlBGX0ZfQ1BVO1xuJiM0MztcdFx0aWYgKG1hcClcbiYjNDM7XHRcdFx0ZXJyID0gYnBmX21hcF9fbG9va3VwX2VsZW0obWFwLCBcdTAwMjZrZXksIHNpemVvZihrZXkpLCBcdTAwMjZkYXRhLCBzaXplb2YoZGF0YSksXG4mIzQzO1x0XHRcdFx0XHRcdCAgIGZsYWdzKTtcbiYjNDM7XHRcdGVsc2VcbiYjNDM7XHRcdFx0ZXJyID0gYnBmX21hcF9sb29rdXBfZWxlbV9mbGFncyhtYXBfZmQsIFx1MDAyNmtleSwgXHUwMDI2ZGF0YSwgZmxhZ3MpO1xuJiM0MztcdFx0aWYgKCFBU1NFUlRfT0soZXJyLCBcJiMzNDtsb29rdXBfZWxlbSBvbiBjcHVcJiMzNDspKVxuJiM0MztcdFx0XHRicmVhaztcbiYjNDM7XG4mIzQzO1x0XHRBU1NFUlRfRVEoKnJ1bnAsICYjNDM7JiM0MztydW4sIFwmIzM0O3J1blwmIzM0Oyk7XG4mIzQzO1x0XHRBU1NFUlRfRVEoZGF0YS5jcHVfaWQsIGksIFwmIzM0O2RhdGEuY3B1X2lkXCYjMzQ7KTtcbiYjNDM7XHRcdEFTU0VSVF9FUShkYXRhLmRhdGEsIDEsIFwmIzM0O2RhdGEuZGF0YVwmIzM0Oyk7XG4mIzQzO1x0XHRBU1NFUlRfVFJVRShkYXRhLnNldCwgXCYjMzQ7ZGF0YS5zZXRcJiMzNDspO1xuJiM0MztcdFx0QVNTRVJUX0VRKGRhdGEubnVtc1s2XSwgMHhjMGRlLCBcJiMzNDtkYXRhLm51bXNbNl1cJiMzNDspO1xuJiM0MztcdFx0QVNTRVJUX0VRKGRhdGEuc3RydWN0X2RhdGEuaSwgMSwgXCYjMzQ7c3RydWN0X2RhdGEuaVwmIzM0Oyk7XG4mIzQzO1x0XHRBU1NFUlRfVFJVRShkYXRhLnN0cnVjdF9kYXRhLnNldCwgXCYjMzQ7c3RydWN0X2RhdGEuc2V0XCYjMzQ7KTtcbiYjNDM7XHRcdEFTU0VSVF9FUShkYXRhLnN0cnVjdF9kYXRhLm51bXNbNl0sIDB4YzBkZSwgXCYjMzQ7c3RydWN0X2RhdGEubnVtc1s2XVwmIzM0Oyk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRmcmVlKG9ubGluZSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIHRlc3RfZ2xvYmFsX3BlcmNwdV9kYXRhX2luaXQodm9pZClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB0ZXN0X2dsb2JhbF9wZXJjcHVfZGF0YV9fcGVyY3B1IGluaXRfdmFsdWUgPSB7fTtcbiYjNDM7XHRzdHJ1Y3QgdGVzdF9nbG9iYWxfcGVyY3B1X2RhdGFfX3BlcmNwdSAqaW5pdF9kYXRhO1xuJiM0MztcdHN0cnVjdCB0ZXN0X2dsb2JhbF9wZXJjcHVfZGF0YSAqc2tlbCA9IE5VTEw7XG4mIzQzO1x0c2l6ZV90IGluaXRfZGF0YV9zejtcbiYjNDM7XHRzdHJ1Y3QgYnBmX21hcCAqbWFwO1xuJiM0MztcdGludCBwcm9nX2ZkLCBlcnI7XG4mIzQzO1xuJiM0MztcdHNrZWwgPSB0ZXN0X2dsb2JhbF9wZXJjcHVfZGF0YV9fb3BlbigpO1xuJiM0MztcdGlmICghQVNTRVJUX09LX1BUUihza2VsLCBcJiMzNDt0ZXN0X2dsb2JhbF9wZXJjcHVfZGF0YV9fb3BlblwmIzM0OykpXG4mIzQzO1x0XHRnb3RvIG91dDtcbiYjNDM7XHRpZiAoIUFTU0VSVF9PS19QVFIoc2tlbC1cdTAwM2VwZXJjcHUsIFwmIzM0O3NrZWwtXHUwMDNlcGVyY3B1XCYjMzQ7KSlcbiYjNDM7XHRcdGdvdG8gb3V0O1xuJiM0MztcdGlmICghQVNTRVJUX09LX1BUUihza2VsLVx1MDAzZWRhdGFfcGVyY3B1LCBcJiMzNDtza2VsLVx1MDAzZWRhdGFfcGVyY3B1XCYjMzQ7KSlcbiYjNDM7XHRcdGdvdG8gb3V0O1xuJiM0MztcdGlmICghQVNTRVJUX09LX1BUUihza2VsLVx1MDAzZXBlcmNwdV9kYXRhLCBcJiMzNDtza2VsLVx1MDAzZXBlcmNwdV9kYXRhXCYjMzQ7KSlcbiYjNDM7XHRcdGdvdG8gb3V0O1xuJiM0MztcdGlmICghQVNTRVJUX09LX1BUUihza2VsLVx1MDAzZXBlcmNwdV9sb29vb29vb29vbmcsIFwmIzM0O3NrZWwtXHUwMDNlcGVyY3B1X2xvb29vb29vb29uZ1wmIzM0OykpXG4mIzQzO1x0XHRnb3RvIG91dDtcbiYjNDM7XG4mIzQzO1x0QVNTRVJUX1NUUkVRKGJwZl9tYXBfX25hbWUoc2tlbC1cdTAwM2VtYXBzLnBlcmNwdV9kYXRhKSwgXCYjMzQ7LnBlcmNwdS5kYXRhXCYjMzQ7LFxuJiM0MztcdFx0ICAgICBcJiMzNDsucGVyY3B1LmRhdGEgbWFwIG5hbWVcJiMzNDspO1xuJiM0MztcdEFTU0VSVF9TVFJFUShicGZfbWFwX19uYW1lKHNrZWwtXHUwMDNlbWFwcy5kYXRhX3BlcmNwdSksIFwmIzM0Oy5kYXRhLnBlcmNwdVwmIzM0OyxcbiYjNDM7XHRcdCAgICAgXCYjMzQ7LmRhdGEucGVyY3B1IG1hcCBuYW1lXCYjMzQ7KTtcbiYjNDM7XHRBU1NFUlRfU1RSRVEoYnBmX21hcF9fbmFtZShza2VsLVx1MDAzZW1hcHMucGVyY3B1X2xvb29vb29vb29uZyksIFwmIzM0Oy5wZXJjcHUubG9vb29vb29vb25nXCYjMzQ7LFxuJiM0MztcdFx0ICAgICBcJiMzNDtsb25nIG1hcCBuYW1lXCYjMzQ7KTtcbiYjNDM7XHRBU1NFUlRfU1RSRVEoYnBmX21hcF9fbmFtZShza2VsLVx1MDAzZW1hcHMucGVyY3B1KSwgXCYjMzQ7LnBlcmNwdVwmIzM0OywgXCYjMzQ7bWFwIG5hbWVcJiMzNDspO1xuJiM0MztcdEFTU0VSVF9FUShza2VsLVx1MDAzZXBlcmNwdS1cdTAwM2VkYXRhLCAtMSwgXCYjMzQ7c2tlbC1cdTAwM2VwZXJjcHUtXHUwMDNlZGF0YVwmIzM0Oyk7XG4mIzQzO1x0QVNTRVJUX0ZBTFNFKHNrZWwtXHUwMDNlcGVyY3B1LVx1MDAzZXNldCwgXCYjMzQ7c2tlbC1cdTAwM2VwZXJjcHUtXHUwMDNlc2V0XCYjMzQ7KTtcbiYjNDM7XHRBU1NFUlRfRVEoc2tlbC1cdTAwM2VwZXJjcHUtXHUwMDNlbnVtc1s2XSwgMCwgXCYjMzQ7c2tlbC1cdTAwM2VwZXJjcHUtXHUwMDNlbnVtc1s2XVwmIzM0Oyk7XG4mIzQzO1x0QVNTRVJUX0VRKHNrZWwtXHUwMDNlcGVyY3B1LVx1MDAzZXN0cnVjdF9kYXRhLmksIC0xLCBcJiMzNDtzdHJ1Y3RfZGF0YS5pXCYjMzQ7KTtcbiYjNDM7XHRBU1NFUlRfRkFMU0Uoc2tlbC1cdTAwM2VwZXJjcHUtXHUwMDNlc3RydWN0X2RhdGEuc2V0LCBcJiMzNDtzdHJ1Y3RfZGF0YS5zZXRcJiMzNDspO1xuJiM0MztcdEFTU0VSVF9FUShza2VsLVx1MDAzZXBlcmNwdS1cdTAwM2VzdHJ1Y3RfZGF0YS5udW1zWzZdLCAwLCBcJiMzNDtzdHJ1Y3RfZGF0YS5udW1zWzZdXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0bWFwID0gc2tlbC1cdTAwM2VtYXBzLnBlcmNwdTtcbiYjNDM7XHRpZiAoIUFTU0VSVF9FUShicGZfbWFwX190eXBlKG1hcCksIEJQRl9NQVBfVFlQRV9QRVJDUFVfQVJSQVksIFwmIzM0O2JwZl9tYXBfX3R5cGVcJiMzNDspKVxuJiM0MztcdFx0Z290byBvdXQ7XG4mIzQzO1xuJiM0MztcdGluaXRfdmFsdWUuZGF0YSA9IDI7XG4mIzQzO1x0aW5pdF92YWx1ZS5udW1zWzZdID0gLTE7XG4mIzQzO1x0aW5pdF92YWx1ZS5zdHJ1Y3RfZGF0YS5pID0gMjtcbiYjNDM7XHRpbml0X3ZhbHVlLnN0cnVjdF9kYXRhLm51bXNbNl0gPSAtMTtcbiYjNDM7XHRlcnIgPSBicGZfbWFwX19zZXRfaW5pdGlhbF92YWx1ZShtYXAsIFx1MDAyNmluaXRfdmFsdWUsIHNpemVvZihpbml0X3ZhbHVlKSk7XG4mIzQzO1x0aWYgKCFBU1NFUlRfT0soZXJyLCBcJiMzNDticGZfbWFwX19zZXRfaW5pdGlhbF92YWx1ZVwmIzM0OykpXG4mIzQzO1x0XHRnb3RvIG91dDtcbiYjNDM7XG4mIzQzO1x0aW5pdF9kYXRhID0gYnBmX21hcF9faW5pdGlhbF92YWx1ZShtYXAsIFx1MDAyNmluaXRfZGF0YV9zeik7XG4mIzQzO1x0aWYgKCFBU1NFUlRfT0tfUFRSKGluaXRfZGF0YSwgXCYjMzQ7YnBmX21hcF9faW5pdGlhbF92YWx1ZVwmIzM0OykpXG4mIzQzO1x0XHRnb3RvIG91dDtcbiYjNDM7XG4mIzQzO1x0QVNTRVJUX0VRKGluaXRfZGF0YS1cdTAwM2VkYXRhLCBpbml0X3ZhbHVlLmRhdGEsIFwmIzM0O2luaXRfdmFsdWUgZGF0YVwmIzM0Oyk7XG4mIzQzO1x0QVNTRVJUX0VRKGluaXRfZGF0YS1cdTAwM2VzZXQsIGluaXRfdmFsdWUuc2V0LCBcJiMzNDtpbml0X3ZhbHVlIHNldFwmIzM0Oyk7XG4mIzQzO1x0QVNTRVJUX0VRKGluaXRfZGF0YS1cdTAwM2VzdHJ1Y3RfZGF0YS5pLCBpbml0X3ZhbHVlLnN0cnVjdF9kYXRhLmksIFwmIzM0O2luaXRfdmFsdWUgc3RydWN0X2RhdGEuaVwmIzM0Oyk7XG4mIzQzO1x0QVNTRVJUX0VRKGluaXRfZGF0YS1cdTAwM2VzdHJ1Y3RfZGF0YS5udW1zWzZdLCBpbml0X3ZhbHVlLnN0cnVjdF9kYXRhLm51bXNbNl0sXG4mIzQzO1x0XHQgIFwmIzM0O2luaXRfdmFsdWUgc3RydWN0X2RhdGEubnVtc1s2XVwmIzM0Oyk7XG4mIzQzO1x0QVNTRVJUX0VRKGluaXRfZGF0YV9zeiwgc2l6ZW9mKGluaXRfdmFsdWUpLCBcJiMzNDtpbml0X3ZhbHVlIHNpemVcJiMzNDspO1xuJiM0MztcdEFTU0VSVF9FUSgodm9pZCAqKSBpbml0X2RhdGEsICh2b2lkICopIHNrZWwtXHUwMDNlcGVyY3B1LCBcJiMzNDtza2VsLVx1MDAzZXBlcmNwdSBlcSBpbml0X2RhdGFcJiMzNDspO1xuJiM0MztcdEFTU0VSVF9FUShza2VsLVx1MDAzZXBlcmNwdS1cdTAwM2VkYXRhLCBpbml0X3ZhbHVlLmRhdGEsIFwmIzM0O3NrZWwtXHUwMDNlcGVyY3B1LVx1MDAzZWRhdGFcJiMzNDspO1xuJiM0MztcdEFTU0VSVF9FUShza2VsLVx1MDAzZXBlcmNwdS1cdTAwM2VzZXQsIGluaXRfdmFsdWUuc2V0LCBcJiMzNDtza2VsLVx1MDAzZXBlcmNwdS1cdTAwM2VzZXRcJiMzNDspO1xuJiM0MztcdEFTU0VSVF9FUShza2VsLVx1MDAzZXBlcmNwdS1cdTAwM2VzdHJ1Y3RfZGF0YS5pLCBpbml0X3ZhbHVlLnN0cnVjdF9kYXRhLmksXG4mIzQzO1x0XHQgIFwmIzM0O3NrZWwtXHUwMDNlcGVyY3B1LVx1MDAzZXN0cnVjdF9kYXRhLmlcJiMzNDspO1xuJiM0MztcdEFTU0VSVF9FUShza2VsLVx1MDAzZXBlcmNwdS1cdTAwM2VzdHJ1Y3RfZGF0YS5udW1zWzZdLCBpbml0X3ZhbHVlLnN0cnVjdF9kYXRhLm51bXNbNl0sXG4mIzQzO1x0XHQgIFwmIzM0O3NrZWwtXHUwMDNlcGVyY3B1LVx1MDAzZXN0cnVjdF9kYXRhLm51bXNbNl1cJiMzNDspO1xuJiM0MztcbiYjNDM7XHRlcnIgPSB0ZXN0X2dsb2JhbF9wZXJjcHVfZGF0YV9fbG9hZChza2VsKTtcbiYjNDM7XHRpZiAoIUFTU0VSVF9PSyhlcnIsIFwmIzM0O3Rlc3RfZ2xvYmFsX3BlcmNwdV9kYXRhX19sb2FkXCYjMzQ7KSlcbiYjNDM7XHRcdGdvdG8gb3V0O1xuJiM0MztcbiYjNDM7XHRBU1NFUlRfT0tfUFRSKHNrZWwtXHUwMDNlcGVyY3B1LCBcJiMzNDtza2VsLVx1MDAzZXBlcmNwdVwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdHByb2dfZmQgPSBicGZfcHJvZ3JhbV9fZmQoc2tlbC1cdTAwM2Vwcm9ncy51cGRhdGVfcGVyY3B1X2RhdGEpO1xuJiM0MztcdHRlc3RfcGVyY3B1X2RhdGFfb25fY3B1cyhtYXAsIGJwZl9tYXBfX2ZkKG1hcCksIHByb2dfZmQsIFx1MDAyNnNrZWwtXHUwMDNlYnNzLVx1MDAzZXJ1bik7XG4mIzQzO1xuJiM0MztvdXQ6XG4mIzQzO1x0dGVzdF9nbG9iYWxfcGVyY3B1X2RhdGFfX2Rlc3Ryb3koc2tlbCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIHRlc3RfZ2xvYmFsX3BlcmNwdV9kYXRhX2xza2VsKHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgdGVzdF9nbG9iYWxfcGVyY3B1X2RhdGFfbHNrZWwgKmxza2VsID0gTlVMTDtcbiYjNDM7XHRpbnQgcHJvZ19mZCwgbWFwX2ZkO1xuJiM0MztcbiYjNDM7XHRsc2tlbCA9IHRlc3RfZ2xvYmFsX3BlcmNwdV9kYXRhX2xza2VsX19vcGVuX2FuZF9sb2FkKCk7XG4mIzQzO1x0aWYgKCFBU1NFUlRfT0tfUFRSKGxza2VsLCBcJiMzNDt0ZXN0X2dsb2JhbF9wZXJjcHVfZGF0YV9sc2tlbF9fb3Blbl9hbmRfbG9hZFwmIzM0OykpXG4mIzQzO1x0XHRnb3RvIG91dDtcbiYjNDM7XG4mIzQzO1x0bWFwX2ZkID0gbHNrZWwtXHUwMDNlbWFwcy5wZXJjcHUubWFwX2ZkO1xuJiM0MztcdHByb2dfZmQgPSBsc2tlbC1cdTAwM2Vwcm9ncy51cGRhdGVfcGVyY3B1X2RhdGEucHJvZ19mZDtcbiYjNDM7XHR0ZXN0X3BlcmNwdV9kYXRhX29uX2NwdXMoTlVMTCwgbWFwX2ZkLCBwcm9nX2ZkLCBcdTAwMjZsc2tlbC1cdTAwM2Vic3MtXHUwMDNlcnVuKTtcbiYjNDM7XG4mIzQzO291dDpcbiYjNDM7XHR0ZXN0X2dsb2JhbF9wZXJjcHVfZGF0YV9sc2tlbF9fZGVzdHJveShsc2tlbCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgY3JlYXRlX3Jkb25seV9wZXJjcHVfYXJyYXkodm9pZClcbiYjNDM7e1xuJiM0MztcdExJQkJQRl9PUFRTKGJwZl9tYXBfY3JlYXRlX29wdHMsIG1hcF9vcHRzLFxuJiM0MztcdFx0ICAgIC5tYXBfZmxhZ3MgPSBCUEZfRl9SRE9OTFlfUFJPRyxcbiYjNDM7XHQpO1xuJiM0MztcdGludCBrZXkgPSAwLCBtYXBfZmQsIGVycjtcbiYjNDM7XHRfX3U2NCB2YWx1ZSA9IDA7XG4mIzQzO1xuJiM0MztcdG1hcF9mZCA9IGJwZl9tYXBfY3JlYXRlKEJQRl9NQVBfVFlQRV9QRVJDUFVfQVJSQVksIFwmIzM0O3BlcmNwdV9yb19tYXBcJiMzNDssIHNpemVvZihpbnQpLFxuJiM0MztcdFx0XHRcdHNpemVvZihfX3U2NCksIDEsIFx1MDAyNm1hcF9vcHRzKTtcbiYjNDM7XHRpZiAoIUFTU0VSVF9HRShtYXBfZmQsIDAsIFwmIzM0O2JwZl9tYXBfY3JlYXRlXCYjMzQ7KSlcbiYjNDM7XHRcdHJldHVybiAtMTtcbiYjNDM7XG4mIzQzO1x0ZXJyID0gYnBmX21hcF91cGRhdGVfZWxlbShtYXBfZmQsIFx1MDAyNmtleSwgXHUwMDI2dmFsdWUsIEJQRl9GX0FMTF9DUFVTKTtcbiYjNDM7XHRpZiAoIUFTU0VSVF9PSyhlcnIsIFwmIzM0O2JwZl9tYXBfdXBkYXRlX2VsZW1cJiMzNDspKVxuJiM0MztcdFx0Z290byBvdXQ7XG4mIzQzO1xuJiM0MztcdGVyciA9IGJwZl9tYXBfZnJlZXplKG1hcF9mZCk7XG4mIzQzO1x0aWYgKCFBU1NFUlRfT0soZXJyLCBcJiMzNDticGZfbWFwX2ZyZWV6ZVwmIzM0OykpXG4mIzQzO1x0XHRnb3RvIG91dDtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIG1hcF9mZDtcbiYjNDM7XG4mIzQzO291dDpcbiYjNDM7XHRjbG9zZShtYXBfZmQpO1xuJiM0MztcdHJldHVybiAtMTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgdGVzdF9nbG9iYWxfcGVyY3B1X2RhdGFfcmRvbmx5X2RpcmVjdF9yZWFkKHZvaWQpXG4mIzQzO3tcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFJhdyBpbnN0cnVjdGlvbnMgd2l0aCBtYW51YWxseSBwcmVwYXJlZCByZG9ubHkgcGVyY3B1X2FycmF5IG1hcFxuJiM0MztcdCAqIGZvciB0ZXN0aW5nIGRpcmVjdC1yZWFkIGdsb2JhbCBwZXJjcHUgZGF0YSwgYmVjYXVzZSBsaWJicGZcbiYjNDM7XHQgKiBkb2VzbiYjMzk7dCBoYXZlIHJkb25seSBpbnRlcm5hbCBwZXJjcHVfYXJyYXkgbWFwIHN1cHBvcnQgZm9yXG4mIzQzO1x0ICogZ2xvYmFsIHBlcmNwdSBkYXRhLlxuJiM0MztcdCAqL1xuJiM0MztcdHN0cnVjdCBicGZfaW5zbiBpbnNuc1tdID0ge1xuJiM0MztcdFx0QlBGX0xEX01BUF9WQUxVRShCUEZfUkVHXzEsIDAsIDApLFxuJiM0MztcdFx0QlBGX0xEWF9NRU0oQlBGX0RXLCBCUEZfUkVHXzAsIEJQRl9SRUdfMSwgMCksXG4mIzQzO1x0XHRCUEZfRVhJVF9JTlNOKCksXG4mIzQzO1x0fTtcbiYjNDM7XHRpbnQgbWFwX2ZkLCBwcm9nX2ZkO1xuJiM0MztcbiYjNDM7XHRtYXBfZmQgPSBjcmVhdGVfcmRvbmx5X3BlcmNwdV9hcnJheSgpO1xuJiM0MztcdGlmIChtYXBfZmQgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdGluc25zWzBdLmltbSA9IG1hcF9mZDtcbiYjNDM7XHRwcm9nX2ZkID0gYnBmX3Byb2dfbG9hZChCUEZfUFJPR19UWVBFX1NPQ0tFVF9GSUxURVIsIFwmIzM0O3BlcmNwdV9yb19wcm9nXCYjMzQ7LCBcJiMzNDtHUExcJiMzNDssIGluc25zLFxuJiM0MztcdFx0XHRcdEFSUkFZX1NJWkUoaW5zbnMpLCBOVUxMKTtcbiYjNDM7XHRpZiAoQVNTRVJUX0dFKHByb2dfZmQsIDAsIFwmIzM0O2JwZl9wcm9nX2xvYWRcJiMzNDspKVxuJiM0MztcdFx0Y2xvc2UocHJvZ19mZCk7XG4mIzQzO1x0Y2xvc2UobWFwX2ZkKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgdGVzdF9nbG9iYWxfcGVyY3B1X2RhdGFfcmRvbmx5X2RpcmVjdF93cml0ZSh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0TElCQlBGX09QVFMoYnBmX3Byb2dfbG9hZF9vcHRzLCBwcm9nX29wdHMpO1xuJiM0MztcdC8qIFNlZSB0aGUgY29tbWVudCBpbiB0ZXN0X2dsb2JhbF9wZXJjcHVfZGF0YV9yZG9ubHlfZGlyZWN0X3JlYWQoKSAqL1xuJiM0MztcdHN0cnVjdCBicGZfaW5zbiBpbnNuc1tdID0ge1xuJiM0MztcdFx0QlBGX0xEX01BUF9WQUxVRShCUEZfUkVHXzEsIDAsIDApLFxuJiM0MztcdFx0QlBGX0xEWF9NRU0oQlBGX0RXLCBCUEZfUkVHXzAsIEJQRl9SRUdfMSwgMCksXG4mIzQzO1x0XHRCUEZfU1RfTUVNKEJQRl9EVywgQlBGX1JFR18xLCAwLCAwKSxcbiYjNDM7XHRcdEJQRl9FWElUX0lOU04oKSxcbiYjNDM7XHR9O1xuJiM0MztcdGNoYXIgbG9nX2J1ZlsyNTZdID0ge307XG4mIzQzO1x0aW50IG1hcF9mZCwgcHJvZ19mZDtcbiYjNDM7XG4mIzQzO1x0cHJvZ19vcHRzLmxvZ19idWYgPSBsb2dfYnVmO1xuJiM0MztcdHByb2dfb3B0cy5sb2dfc2l6ZSA9IHNpemVvZihsb2dfYnVmKTtcbiYjNDM7XHRwcm9nX29wdHMubG9nX2xldmVsID0gMTtcbiYjNDM7XG4mIzQzO1x0bWFwX2ZkID0gY3JlYXRlX3Jkb25seV9wZXJjcHVfYXJyYXkoKTtcbiYjNDM7XHRpZiAobWFwX2ZkIFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHRpbnNuc1swXS5pbW0gPSBtYXBfZmQ7XG4mIzQzO1x0cHJvZ19mZCA9IGJwZl9wcm9nX2xvYWQoQlBGX1BST0dfVFlQRV9TT0NLRVRfRklMVEVSLCBcJiMzNDtwZXJjcHVfcm9fcHJvZ1wmIzM0OywgXCYjMzQ7R1BMXCYjMzQ7LCBpbnNucyxcbiYjNDM7XHRcdFx0XHRBUlJBWV9TSVpFKGluc25zKSwgXHUwMDI2cHJvZ19vcHRzKTtcbiYjNDM7XHRpZiAoIUFTU0VSVF9MVChwcm9nX2ZkLCAwLCBcJiMzNDticGZfcHJvZ19sb2FkXCYjMzQ7KSlcbiYjNDM7XHRcdGNsb3NlKHByb2dfZmQpO1xuJiM0MztcdGVsc2VcbiYjNDM7XHRcdEFTU0VSVF9IQVNfU1VCU1RSKGxvZ19idWYsIFwmIzM0O3dyaXRlIGludG8gbWFwIGZvcmJpZGRlblwmIzM0OywgXCYjMzQ7dmVyaWZpZXIgbG9nXCYjMzQ7KTtcbiYjNDM7XHRjbG9zZShtYXBfZmQpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCB0ZXN0X2dsb2JhbF9wZXJjcHVfZGF0YV92ZXJpZmllcl9sb2codm9pZClcbiYjNDM7e1xuJiM0MztcdFJVTl9URVNUUyh0ZXN0X2dsb2JhbF9wZXJjcHVfZGF0YSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIHRlc3RfZ2xvYmFsX3BlcmNwdV9kYXRhX2l0ZXIodm9pZClcbiYjNDM7e1xuJiM0MztcdERFQ0xBUkVfTElCQlBGX09QVFMoYnBmX2l0ZXJfYXR0YWNoX29wdHMsIG9wdHMpO1xuJiM0MztcdHN0cnVjdCB0ZXN0X2dsb2JhbF9wZXJjcHVfZGF0YSAqc2tlbDtcbiYjNDM7XHR1bmlvbiBicGZfaXRlcl9saW5rX2luZm8gbGluZm8gPSB7fTtcbiYjNDM7XHRzdHJ1Y3QgYnBmX2xpbmsgKmxpbmsgPSBOVUxMO1xuJiM0MztcdGludCBmZCwgbnVtX2NwdXMsIGxlbiwgZXJyO1xuJiM0MztcdGNoYXIgYnVmWzE2XTtcbiYjNDM7XG4mIzQzO1x0bnVtX2NwdXMgPSBsaWJicGZfbnVtX3Bvc3NpYmxlX2NwdXMoKTtcbiYjNDM7XHRpZiAoIUFTU0VSVF9HVChudW1fY3B1cywgMCwgXCYjMzQ7bGliYnBmX251bV9wb3NzaWJsZV9jcHVzXCYjMzQ7KSlcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0c2tlbCA9IHRlc3RfZ2xvYmFsX3BlcmNwdV9kYXRhX19vcGVuKCk7XG4mIzQzO1x0aWYgKCFBU1NFUlRfT0tfUFRSKHNrZWwsIFwmIzM0O3Rlc3RfZ2xvYmFsX3BlcmNwdV9kYXRhX19vcGVuXCYjMzQ7KSlcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0c2tlbC1cdTAwM2Vyb2RhdGEtXHUwMDNlbnVtX2NwdXMgPSBudW1fY3B1cztcbiYjNDM7XHRza2VsLVx1MDAzZXJvZGF0YS1cdTAwM2VvZmZzZXRvZl9udW0gPSBvZmZzZXRvZihzdHJ1Y3QgdGVzdF9nbG9iYWxfcGVyY3B1X2RhdGFfX3BlcmNwdSwgc3RydWN0X2RhdGEpO1xuJiM0MztcdHNrZWwtXHUwMDNlcm9kYXRhLVx1MDAzZW9mZnNldG9mX251bSAmIzQzOz0gc2l6ZW9mKHNrZWwtXHUwMDNlcGVyY3B1LVx1MDAzZXN0cnVjdF9kYXRhKSAtIHNpemVvZihpbnQpO1xuJiM0MztcdHNrZWwtXHUwMDNlcm9kYXRhLVx1MDAzZWVsZW1fc3ogPSByb3VuZHVwKHNpemVvZihzdHJ1Y3QgdGVzdF9nbG9iYWxfcGVyY3B1X2RhdGFfX3BlcmNwdSksIDgpO1xuJiM0MztcdHNrZWwtXHUwMDNlcGVyY3B1LVx1MDAzZXN0cnVjdF9kYXRhLm51bXNbNl0gPSAweGMwZGU7XG4mIzQzO1xuJiM0MztcdGVyciA9IHRlc3RfZ2xvYmFsX3BlcmNwdV9kYXRhX19sb2FkKHNrZWwpO1xuJiM0MztcdGlmICghQVNTRVJUX09LKGVyciwgXCYjMzQ7dGVzdF9nbG9iYWxfcGVyY3B1X2RhdGFfX2xvYWRcJiMzNDspKVxuJiM0MztcdFx0Z290byBvdXQ7XG4mIzQzO1xuJiM0MztcdGxpbmZvLm1hcC5tYXBfZmQgPSBicGZfbWFwX19mZChza2VsLVx1MDAzZW1hcHMucGVyY3B1KTtcbiYjNDM7XHRvcHRzLmxpbmtfaW5mbyA9IFx1MDAyNmxpbmZvO1xuJiM0MztcdG9wdHMubGlua19pbmZvX2xlbiA9IHNpemVvZihsaW5mbyk7XG4mIzQzO1x0bGluayA9IGJwZl9wcm9ncmFtX19hdHRhY2hfaXRlcihza2VsLVx1MDAzZXByb2dzLmR1bXBfcGVyY3B1X2RhdGEsIFx1MDAyNm9wdHMpO1xuJiM0MztcdGlmICghQVNTRVJUX09LX1BUUihsaW5rLCBcJiMzNDticGZfcHJvZ3JhbV9fYXR0YWNoX2l0ZXJcJiMzNDspKVxuJiM0MztcdFx0Z290byBvdXQ7XG4mIzQzO1xuJiM0MztcdGZkID0gYnBmX2l0ZXJfY3JlYXRlKGJwZl9saW5rX19mZChsaW5rKSk7XG4mIzQzO1x0aWYgKCFBU1NFUlRfR0UoZmQsIDAsIFwmIzM0O2JwZl9pdGVyX2NyZWF0ZVwmIzM0OykpXG4mIzQzO1x0XHRnb3RvIG91dDtcbiYjNDM7XG4mIzQzO1x0d2hpbGUgKChsZW4gPSByZWFkKGZkLCBidWYsIHNpemVvZihidWYpKSkgXHUwMDNlIDApXG4mIzQzO1x0XHRkbyB7IH0gd2hpbGUgKDApO1xuJiM0MztcdEFTU0VSVF9FUShsZW4sIDAsIFwmIzM0O3JlYWQgaXRlclwmIzM0Oyk7XG4mIzQzO1x0QVNTRVJUX1RSVUUoc2tlbC1cdTAwM2Vic3MtXHUwMDNlcnVuX2l0ZXIsIFwmIzM0O3J1bl9pdGVyXCYjMzQ7KTtcbiYjNDM7XHRBU1NFUlRfRVEoc2tlbC1cdTAwM2Vic3MtXHUwMDNlcGVyY3B1X2RhdGFfc3VtLCAweGMwZGUgKiBudW1fY3B1cywgXCYjMzQ7cGVyY3B1X2RhdGFfc3VtXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0Y2xvc2UoZmQpO1xuJiM0MztvdXQ6XG4mIzQzO1x0YnBmX2xpbmtfX2Rlc3Ryb3kobGluayk7XG4mIzQzO1x0dGVzdF9nbG9iYWxfcGVyY3B1X2RhdGFfX2Rlc3Ryb3koc2tlbCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3ZvaWQgdGVzdF9nbG9iYWxfcGVyY3B1X2RhdGEodm9pZClcbiYjNDM7e1xuJiM0MztcdGlmICghZmVhdF9zdXBwb3J0ZWQoTlVMTCwgRkVBVF9QRVJDUFVfREFUQSkpIHtcbiYjNDM7XHRcdHRlc3RfX3NraXAoKTtcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFwmIzM0O2luaXRcJiMzNDspKVxuJiM0MztcdFx0dGVzdF9nbG9iYWxfcGVyY3B1X2RhdGFfaW5pdCgpO1xuJiM0MztcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFwmIzM0O2xza2VsXCYjMzQ7KSlcbiYjNDM7XHRcdHRlc3RfZ2xvYmFsX3BlcmNwdV9kYXRhX2xza2VsKCk7XG4mIzQzO1x0aWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoXCYjMzQ7cmRvbmx5X2RpcmVjdF9yZWFkXCYjMzQ7KSlcbiYjNDM7XHRcdHRlc3RfZ2xvYmFsX3BlcmNwdV9kYXRhX3Jkb25seV9kaXJlY3RfcmVhZCgpO1xuJiM0MztcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFwmIzM0O3Jkb25seV9kaXJlY3Rfd3JpdGVcJiMzNDspKVxuJiM0MztcdFx0dGVzdF9nbG9iYWxfcGVyY3B1X2RhdGFfcmRvbmx5X2RpcmVjdF93cml0ZSgpO1xuJiM0MztcdHRlc3RfZ2xvYmFsX3BlcmNwdV9kYXRhX3ZlcmlmaWVyX2xvZygpO1xuJiM0MztcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFwmIzM0O2l0ZXJcJiMzNDspKVxuJiM0MztcdFx0dGVzdF9nbG9iYWxfcGVyY3B1X2RhdGFfaXRlcigpO1xuJiM0Mzt9XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3RfZ2xvYmFsX3BlcmNwdV9kYXRhLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF9nbG9iYWxfcGVyY3B1X2RhdGEuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLmE5NDQzZmIyMDUwZTlcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X2dsb2JhbF9wZXJjcHVfZGF0YS5jXG5AQCAtMCwwICYjNDM7MSw4OCBAQFxuJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuJiM0MzsjaW5jbHVkZSBcdTAwM2N2bWxpbnV4LmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjYnBmL2JwZl9oZWxwZXJzLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7YnBmX21pc2MuaFwmIzM0O1xuJiM0MztcbiYjNDM7LyogVXNlZCBmb3IgdGVzdGluZyBtYXAgbmFtZS4gKi9cbiYjNDM7aW50IGxvb25nIFNFQyhcJiMzNDsucGVyY3B1Lmxvb29vb29vb29uZ1wmIzM0Oyk7XG4mIzQzO2ludCBkYXRhMyBTRUMoXCYjMzQ7LmRhdGEucGVyY3B1XCYjMzQ7KTtcbiYjNDM7aW50IGRhdGEyIFNFQyhcJiMzNDsucGVyY3B1LmRhdGFcJiMzNDspO1xuJiM0MztcbiYjNDM7aW50IHJ1bjtcbiYjNDM7aW50IGNwdV9pZCBTRUMoXCYjMzQ7LnBlcmNwdVwmIzM0Oyk7XG4mIzQzO2ludCBkYXRhIFNFQyhcJiMzNDsucGVyY3B1XCYjMzQ7KSA9IC0xO1xuJiM0MztpbnQgbnVtc1s3XSBTRUMoXCYjMzQ7LnBlcmNwdVwmIzM0Oyk7XG4mIzQzO2Jvb2wgc2V0IFNFQyhcJiMzNDsucGVyY3B1XCYjMzQ7KSA9IGZhbHNlO1xuJiM0MztzdHJ1Y3Qge1xuJiM0MztcdGNoYXIgc2V0O1xuJiM0MztcdGludCBpO1xuJiM0MztcdGludCBudW1zWzddO1xuJiM0Mzt9IHN0cnVjdF9kYXRhIFNFQyhcJiMzNDsucGVyY3B1XCYjMzQ7KSA9IHtcbiYjNDM7XHQuc2V0ID0gMCxcbiYjNDM7XHQuaSA9IC0xLFxuJiM0Mzt9O1xuJiM0MztcbiYjNDM7U0VDKFwmIzM0O3Jhd190cC90YXNrX3JlbmFtZVwmIzM0OylcbiYjNDM7X19hdXhpbGlhcnlcbiYjNDM7aW50IHVwZGF0ZV9wZXJjcHVfZGF0YSh2b2lkICpjdHgpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3RfZGF0YS5udW1zWzZdID0gMHhjMGRlO1xuJiM0MztcdHN0cnVjdF9kYXRhLnNldCA9IDE7XG4mIzQzO1x0c3RydWN0X2RhdGEuaSA9IDE7XG4mIzQzO1x0bnVtc1s2XSA9IDB4YzBkZTtcbiYjNDM7XHRkYXRhID0gMTtcbiYjNDM7XHRydW4mIzQzOyYjNDM7O1xuJiM0MztcdHNldCA9IHRydWU7XG4mIzQzO1x0Y3B1X2lkID0gYnBmX2dldF9zbXBfcHJvY2Vzc29yX2lkKCk7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBjb25zdCBjaGFyIGZtdFtdIFNFQyhcJiMzNDsucGVyY3B1LmZtdFwmIzM0OykgPSBcJiMzNDtkYXRhICVkXFxuXCYjMzQ7O1xuJiM0MztcbiYjNDM7U0VDKFwmIzM0Oz9rcHJvYmVcJiMzNDspXG4mIzQzO19fZmFpbHVyZSBfX21zZyhcJiMzNDtSe3tbMC05XSYjNDM7fX0gcG9pbnRzIHRvIHBlcmNwdV9hcnJheSBtYXAgd2hpY2ggY2Fubm90IGJlIHVzZWQgYXMgY29uc3Qgc3RyaW5nXCYjMzQ7KVxuJiM0MztpbnQgdmVyaWZpZXJfc3RybmNtcCh2b2lkICpjdHgpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gYnBmX3N0cm5jbXAoXCYjMzQ7dGVzdFwmIzM0OywgNSwgZm10KTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7U0VDKFwmIzM0Oz9rcHJvYmVcJiMzNDspXG4mIzQzO19fZmFpbHVyZSBfX21zZyhcJiMzNDtSe3tbMC05XSYjNDM7fX0gcG9pbnRzIHRvIHBlcmNwdV9hcnJheSBtYXAgd2hpY2ggY2Fubm90IGJlIHVzZWQgYXMgY29uc3Qgc3RyaW5nXCYjMzQ7KVxuJiM0MztpbnQgdmVyaWZpZXJfc25wcmludGYodm9pZCAqY3R4KVxuJiM0Mzt7XG4mIzQzO1x0dTY0IGFyZ3NbXSA9IHsgZGF0YSB9O1xuJiM0MztcdGNoYXIgYnVmWzEyOF07XG4mIzQzO1x0aW50IGxlbjtcbiYjNDM7XG4mIzQzO1x0bGVuID0gYnBmX3NucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksIGZtdCwgYXJncywgc2l6ZW9mKGFyZ3MpKTtcbiYjNDM7XHRpZiAobGVuIFx1MDAzZSAwKVxuJiM0MztcdFx0YnBmX3ByaW50ayhcJiMzNDtzbnByaW50ZjogJXNcXG5cJiMzNDssIGJ1Zik7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3ZvbGF0aWxlIGNvbnN0IF9fdTMyIG51bV9jcHVzID0gMDtcbiYjNDM7dm9sYXRpbGUgY29uc3QgaW50IG9mZnNldG9mX251bTtcbiYjNDM7dm9sYXRpbGUgY29uc3QgaW50IGVsZW1fc3o7XG4mIzQzO19fdTMyIHBlcmNwdV9kYXRhX3N1bSA9IDA7XG4mIzQzO2Jvb2wgcnVuX2l0ZXIgPSBmYWxzZTtcbiYjNDM7XG4mIzQzO1NFQyhcJiMzNDtpdGVyL2JwZl9tYXBfZWxlbVwmIzM0OylcbiYjNDM7X19hdXhpbGlhcnlcbiYjNDM7aW50IGR1bXBfcGVyY3B1X2RhdGEoc3RydWN0IGJwZl9pdGVyX19icGZfbWFwX2VsZW0gKmN0eClcbiYjNDM7e1xuJiM0MztcdHZvaWQgKnBwdHIgPSBjdHgtXHUwMDNldmFsdWU7XG4mIzQzO1x0aW50IGk7XG4mIzQzO1xuJiM0MztcdGlmICghcHB0cilcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7XHRydW5faXRlciA9IHRydWU7XG4mIzQzO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG51bV9jcHVzOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0cGVyY3B1X2RhdGFfc3VtICYjNDM7PSAqKGludCAqKSAocHB0ciAmIzQzOyBvZmZzZXRvZl9udW0pO1xuJiM0MztcdFx0cHB0ciAmIzQzOz0gZWxlbV9zejtcbiYjNDM7XHR9XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO2NoYXIgX2xpY2Vuc2VbXSBTRUMoXCYjMzQ7bGljZW5zZVwmIzM0OykgPSBcJiMzNDtHUExcJiMzNDs7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMTk6NDI8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDssCiAgICAmIzM0O0JQRl9KSVQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtwZXJjcHVfYXJyYXlfbWFwX2RpcmVjdF92YWx1ZV9hZGRyJiMzNDssCiAgICAmIzM0O3BlcmNwdV9hcnJheV9tYXBfZGlyZWN0X3ZhbHVlX21ldGEmIzM0OywKICAgICYjMzQ7YnBmX2RvX21pc2NfZml4dXBzJiMzNDssCiAgICAmIzM0O2JwZl9tYXBfZGlyZWN0X3JlYWQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBzdXBwb3J0IGZvciBgLnBlcmNwdWAgZ2xvYmFsIGRhdGEgbWFwcyBpbiBCUEYuIEl0IG1vZGlmaWVzIHRoZSBCUEYgdmVyaWZpZXIgdG8gaGFuZGxlIGRpcmVjdCBtZW1vcnkgcmVhZHMgZnJvbSBgQlBGX01BUF9UWVBFX1BFUkNQVV9BUlJBWWAgbWFwcyBhbmQgYWRkcyBKSVQgZml4dXBzIHRvIHBhdGNoIGBsZF9pbW02NGAgaW5zdHJ1Y3Rpb25zIHdpdGggcGVyLUNQVSByZWdpc3RlciBtb3Zlcy4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUgY29yZSBCUEYgc3Vic3lzdGVtIGFuZCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBtZW1vcnkgc2FmZXR5IGFuZCBjb3JyZWN0IHZlcmlmaWVyIGJlaGF2aW9yLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZDE1MWQzZDA5MzJhMzMxYzNlZjM4OWY4NjY3ODFhYTk1OGViODM5ZApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUaHUgQXVnIDYgMTk6NDI6MjAgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL2FycmF5bWFwLmMgYi9rZXJuZWwvYnBmL2FycmF5bWFwLmMKaW5kZXggMjQ4YjQ4MTgxNzhjZC4uMzQ4NjU3MDFmN2Y3NSAxMDA2NDQKLS0tIGEva2VybmVsL2JwZi9hcnJheW1hcC5jCiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9icGYvYXJyYXltYXAuYwpAQCAtMjU5LDYgJiM0MzsyNTksMzcgQEAgc3RhdGljIHZvaWQgKnBlcmNwdV9hcnJheV9tYXBfbG9va3VwX2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5KQogCXJldHVybiB0aGlzX2NwdV9wdHIoYXJyYXktJmd0O3BwdHJzW2luZGV4ICZhbXA7IGFycmF5LSZndDtpbmRleF9tYXNrXSk7CiB9CiAKJiM0MztzdGF0aWMgaW50IHBlcmNwdV9hcnJheV9tYXBfZGlyZWN0X3ZhbHVlX2FkZHIoY29uc3Qgc3RydWN0IGJwZl9tYXAgKm1hcCwgdTY0ICppbW0sIHUzMiBvZmYpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgYnBmX2FycmF5ICphcnJheSA9IGNvbnRhaW5lcl9vZihtYXAsIHN0cnVjdCBicGZfYXJyYXksIG1hcCk7CiYjNDM7CiYjNDM7CWlmICghYnBmX2ppdF9zdXBwb3J0c19wZXJjcHVfaW5zbigpKQomIzQzOwkJcmV0dXJuIC1FT1BOT1RTVVBQOwomIzQzOwlpZiAobWFwLSZndDttYXhfZW50cmllcyAhPSAxKQomIzQzOwkJcmV0dXJuIC1FT1BOT1RTVVBQOwomIzQzOwlpZiAob2ZmICZndDs9IG1hcC0mZ3Q7dmFsdWVfc2l6ZSkKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwomIzQzOwkqaW1tID0gKHU2NCkoX19mb3JjZSB1bnNpZ25lZCBsb25nKSBhcnJheS0mZ3Q7cHB0cnNbMF07CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHBlcmNwdV9hcnJheV9tYXBfZGlyZWN0X3ZhbHVlX21ldGEoY29uc3Qgc3RydWN0IGJwZl9tYXAgKm1hcCwgdTY0IGltbSwgdTMyICpvZmYpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgYnBmX2FycmF5ICphcnJheSA9IGNvbnRhaW5lcl9vZihtYXAsIHN0cnVjdCBicGZfYXJyYXksIG1hcCk7CiYjNDM7CXU2NCBiYXNlID0gKHU2NCkoX19mb3JjZSB1bnNpZ25lZCBsb25nKSBhcnJheS0mZ3Q7cHB0cnNbMF07CiYjNDM7CiYjNDM7CWlmICghYnBmX2ppdF9zdXBwb3J0c19wZXJjcHVfaW5zbigpKQomIzQzOwkJcmV0dXJuIC1FT1BOT1RTVVBQOwomIzQzOwlpZiAobWFwLSZndDttYXhfZW50cmllcyAhPSAxKQomIzQzOwkJcmV0dXJuIC1FT1BOT1RTVVBQOwomIzQzOwlpZiAoaW1tICZsdDsgYmFzZSB8fCBpbW0gJmd0Oz0gYmFzZSAmIzQzOyBhcnJheS0mZ3Q7ZWxlbV9zaXplKQomIzQzOwkJcmV0dXJuIC1FTk9FTlQ7CiYjNDM7CiYjNDM7CSpvZmYgPSBpbW0gLSBiYXNlOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiAvKiBlbWl0IEJQRiBpbnN0cnVjdGlvbnMgZXF1aXZhbGVudCB0byBDIGNvZGUgb2YgcGVyY3B1X2FycmF5X21hcF9sb29rdXBfZWxlbSgpICovCiBzdGF0aWMgaW50IHBlcmNwdV9hcnJheV9tYXBfZ2VuX2xvb2t1cChzdHJ1Y3QgYnBmX21hcCAqbWFwLCBzdHJ1Y3QgYnBmX2luc24gKmluc25fYnVmKQogewpAQCAtNTUxLDkgJiM0Mzs1ODIsMTAgQEAgc3RhdGljIGludCBhcnJheV9tYXBfY2hlY2tfYnRmKHN0cnVjdCBicGZfbWFwICptYXAsCiAJCQkgICAgICAgY29uc3Qgc3RydWN0IGJ0Zl90eXBlICprZXlfdHlwZSwKIAkJCSAgICAgICBjb25zdCBzdHJ1Y3QgYnRmX3R5cGUgKnZhbHVlX3R5cGUpCiB7Ci0JLyogT25lIGV4Y2VwdGlvbiBmb3Iga2V5bGVzcyBCVEY6IC5ic3MvLmRhdGEvLnJvZGF0YSBtYXAgKi8KJiM0MzsJLyogT25lIGV4Y2VwdGlvbiBmb3Iga2V5bGVzcyBCVEY6IC5ic3MvLmRhdGEvLnJvZGF0YS8ucGVyY3B1IG1hcCAqLwogCWlmIChidGZfdHlwZV9pc192b2lkKGtleV90eXBlKSkgewotCQlpZiAobWFwLSZndDttYXBfdHlwZSAhPSBCUEZfTUFQX1RZUEVfQVJSQVkgfHwKJiM0MzsJCWlmICgobWFwLSZndDttYXBfdHlwZSAhPSBCUEZfTUFQX1RZUEVfQVJSQVkgJmFtcDsmYW1wOwomIzQzOwkJICAgICBtYXAtJmd0O21hcF90eXBlICE9IEJQRl9NQVBfVFlQRV9QRVJDUFVfQVJSQVkpIHx8CiAJCSAgICBtYXAtJmd0O21heF9lbnRyaWVzICE9IDEpCiAJCQlyZXR1cm4gLUVJTlZBTDsKIApAQCAtODMyLDYgJiM0Mzs4NjQsOCBAQCBjb25zdCBzdHJ1Y3QgYnBmX21hcF9vcHMgcGVyY3B1X2FycmF5X21hcF9vcHMgPSB7CiAJLm1hcF9nZXRfbmV4dF9rZXkgPSBicGZfYXJyYXlfZ2V0X25leHRfa2V5LAogCS5tYXBfbG9va3VwX2VsZW0gPSBwZXJjcHVfYXJyYXlfbWFwX2xvb2t1cF9lbGVtLAogCS5tYXBfZ2VuX2xvb2t1cCA9IHBlcmNwdV9hcnJheV9tYXBfZ2VuX2xvb2t1cCwKJiM0MzsJLm1hcF9kaXJlY3RfdmFsdWVfYWRkciA9IHBlcmNwdV9hcnJheV9tYXBfZGlyZWN0X3ZhbHVlX2FkZHIsCiYjNDM7CS5tYXBfZGlyZWN0X3ZhbHVlX21ldGEgPSBwZXJjcHVfYXJyYXlfbWFwX2RpcmVjdF92YWx1ZV9tZXRhLAogCS5tYXBfdXBkYXRlX2VsZW0gPSBhcnJheV9tYXBfdXBkYXRlX2VsZW0sCiAJLm1hcF9kZWxldGVfZWxlbSA9IGFycmF5X21hcF9kZWxldGVfZWxlbSwKIAkubWFwX2xvb2t1cF9wZXJjcHVfZWxlbSA9IHBlcmNwdV9hcnJheV9tYXBfbG9va3VwX3BlcmNwdV9lbGVtLApkaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9iYWNrdHJhY2suYyBiL2tlcm5lbC9icGYvYmFja3RyYWNrLmMKaW5kZXggMmY0NzNhZDRmZDdjMS4uM2YxNTBlODU4YWU4YSAxMDA2NDQKLS0tIGEva2VybmVsL2JwZi9iYWNrdHJhY2suYwomIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvYnBmL2JhY2t0cmFjay5jCkBAIC0yMTQsNyAmIzQzOzIxNCw2IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBidF9pc19yZWdfc2V0KHN0cnVjdCBiYWNrdHJhY2tfc3RhdGUgKmJ0LCB1MzIgcmVnKQogCXJldHVybiBidC0mZ3Q7cmVnX21hc2tzW2J0LSZndDtmcmFtZV0gJmFtcDsgKDEgJmx0OyZsdDsgcmVnKTsKIH0KIAotCiAvKiBmb3JtYXQgcmVnaXN0ZXJzIGJpdG1hc2ssIGUuZy4sICYjMzQ7cjAscjIscjQmIzM0OyBmb3IgMHgxNSBtYXNrICovCiBzdGF0aWMgdm9pZCBmbXRfcmVnX21hc2soY2hhciAqYnVmLCBzc2l6ZV90IGJ1Zl9zeiwgdTMyIHJlZ19tYXNrKQogewpAQCAtMjU0LDcgJiM0MzsyNTMsNiBAQCB2b2lkIGJwZl9mbXRfc3RhY2tfbWFzayhjaGFyICpidWYsIHNzaXplX3QgYnVmX3N6LCB1NjQgc3RhY2tfbWFzaykKIAl9CiB9CiAKLQogLyogRm9yIGdpdmVuIHZlcmlmaWVyIHN0YXRlIGJhY2t0cmFja19pbnNuKCkgaXMgY2FsbGVkIGZyb20gdGhlIGxhc3QgaW5zbiB0bwogICogdGhlIGZpcnN0IGluc24uIEl0cyBwdXJwb3NlIGlzIHRvIGNvbXB1dGUgYSBiaXRtYXNrIG9mIHJlZ2lzdGVycyBhbmQKICAqIHN0YWNrIHNsb3RzIHRoYXQgbmVlZHMgcHJlY2lzaW9uIGluIHRoZSBwYXJlbnQgdmVyaWZpZXIgc3RhdGUuCmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL2J0Zi5jIGIva2VybmVsL2JwZi9idGYuYwppbmRleCA0MjQxNDYzM2NmMjYzLi5jODA3YWQyNjNlNmY4IDEwMDY0NAotLS0gYS9rZXJuZWwvYnBmL2J0Zi5jCiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9icGYvYnRmLmMKQEAgLTI1MzQsNyAmIzQzOzI1MzQsNiBAQCBzdGF0aWMgdm9pZCBidGZfYml0ZmllbGRfc2hvdyh2b2lkICpkYXRhLCB1OCBiaXRzX29mZnNldCwKIAlidGZfaW50MTI4X3ByaW50KHNob3csIHByaW50X251bSk7CiB9CiAKLQogc3RhdGljIHZvaWQgYnRmX2ludF9iaXRzX3Nob3coY29uc3Qgc3RydWN0IGJ0ZiAqYnRmLAogCQkJICAgICAgY29uc3Qgc3RydWN0IGJ0Zl90eXBlICp0LAogCQkJICAgICAgdm9pZCAqZGF0YSwgdTggYml0c19vZmZzZXQsCmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL2NmZy5jIGIva2VybmVsL2JwZi9jZmcuYwppbmRleCBkYjM0MTZhN2M5MDQ3Li44MThmN2FmYWM4M2E1IDEwMDY0NAotLS0gYS9rZXJuZWwvYnBmL2NmZy5jCiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9icGYvY2ZnLmMKQEAgLTQ3LDcgJiM0Mzs0Nyw2IEBAIGVudW0gewogCUJSQU5DSCA9IDIsCiB9OwogCi0KIHN0YXRpYyB2b2lkIG1hcmtfc3VicHJvZ19jaGFuZ2VzX3BrdF9kYXRhKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGludCBvZmYpCiB7CiAJc3RydWN0IGJwZl9zdWJwcm9nX2luZm8gKnN1YnByb2c7CmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL2NvbnN0X2ZvbGQuYyBiL2tlcm5lbC9icGYvY29uc3RfZm9sZC5jCmluZGV4IGIyYTE5YWNhZGI5MWUuLjU3ODcyNDZiZWYzMDEgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9icGYvY29uc3RfZm9sZC5jCiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9icGYvY29uc3RfZm9sZC5jCkBAIC0xODIsNyAmIzQzOzE4Miw2IEBAIHN0YXRpYyB2b2lkIGNvbnN0X3JlZ194ZmVyKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBjb25zdF9hcmdfaW5mbyAqCiAJCXU2NCB2YWwgPSAwOwogCiAJCWlmICghYnBmX21hcF9pc19yZG9ubHkobWFwKSB8fCAhbWFwLSZndDtvcHMtJmd0O21hcF9kaXJlY3RfdmFsdWVfYWRkciB8fAotCQkgICAgbWFwLSZndDttYXBfdHlwZSA9PSBCUEZfTUFQX1RZUEVfSU5TTl9BUlJBWSB8fAogCQkgICAgb2ZmICZsdDsgMCB8fCBvZmYgJiM0Mzsgc2l6ZSAmZ3Q7IG1hcC0mZ3Q7dmFsdWVfc2l6ZSB8fAogCQkgICAgYnBmX21hcF9kaXJlY3RfcmVhZChtYXAsIG9mZiwgc2l6ZSwgJmFtcDt2YWwsIGlzX2xkc3gpKSB7CiAJCQkqZHN0ID0gdW5rbm93bjsKZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvZml4dXBzLmMgYi9rZXJuZWwvYnBmL2ZpeHVwcy5jCmluZGV4IGEwYmRkYWRhNzk2NGUuLmYyMzk4NzQ5MTAzYmEgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9icGYvZml4dXBzLmMKJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2JwZi9maXh1cHMuYwpAQCAtMTQ0Niw3ICYjNDM7MTQ0Niw2IEBAIGludCBicGZfZml4dXBfY2FsbF9hcmdzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpCiAJcmV0dXJuIGVycjsKIH0KIAotCiAvKiBUaGUgZnVuY3Rpb24gcmVxdWlyZXMgdGhhdCBmaXJzdCBpbnN0cnVjdGlvbiBpbiAmIzM5O3BhdGNoJiMzOTsgaXMgaW5zbnNpW3Byb2ctJmd0O2xlbiAtIDFdICovCiBzdGF0aWMgaW50IGFkZF9oaWRkZW5fc3VicHJvZyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKnBhdGNoLCBpbnQgbGVuKQogewpAQCAtMTgxOCw2ICYjNDM7MTgxNyw0MyBAQCBpbnQgYnBmX2RvX21pc2NfZml4dXBzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpCiAJCQlnb3RvIG5leHRfaW5zbjsKIAkJfQogCiYjNDM7CQlpZiAoYnBmX2ppdF9zdXBwb3J0c19wZXJjcHVfaW5zbigpICZhbXA7JmFtcDsKJiM0MzsJCSAgICBpbnNuLSZndDtjb2RlID09IChCUEZfTEQgfCBCUEZfSU1NIHwgQlBGX0RXKSAmYW1wOyZhbXA7CiYjNDM7CQkgICAgKGluc24tJmd0O3NyY19yZWcgPT0gQlBGX1BTRVVET19NQVBfVkFMVUUgfHwKJiM0MzsJCSAgICAgaW5zbi0mZ3Q7c3JjX3JlZyA9PSBCUEZfUFNFVURPX01BUF9JRFhfVkFMVUUpKSB7CiYjNDM7CQkJc3RydWN0IGJwZl9tYXAgKm1hcDsKJiM0MzsKJiM0MzsJCQlhdXggPSAmYW1wO2Vudi0mZ3Q7aW5zbl9hdXhfZGF0YVtpICYjNDM7IGRlbHRhXTsKJiM0MzsJCQltYXAgPSBlbnYtJmd0O3VzZWRfbWFwc1thdXgtJmd0O21hcF9pbmRleF07CiYjNDM7CQkJaWYgKG1hcC0mZ3Q7bWFwX3R5cGUgIT0gQlBGX01BUF9UWVBFX1BFUkNQVV9BUlJBWSkKJiM0MzsJCQkJZ290byBuZXh0X2luc247CiYjNDM7CiYjNDM7CQkJcHJvZy0mZ3Q7aml0X3JlcXVpcmVkID0gdHJ1ZTsKJiM0MzsKJiM0MzsJCQkvKgomIzQzOwkJCSAqIFdlIGFyZSAqc2tpcHBpbmcqIGZpcnN0IGhhbGYgb2YgbGRfaW1tNjQgaW5zbgomIzQzOwkJCSAqIHdpdGggJiMzOTtpJiM0MzsmIzQzOzsmIzM5OywgcGF0Y2hpbmcgb3ZlciBzZWNvbmQgaGFsZiBvZiBpdAomIzQzOwkJCSAqIHdpdGggdGhhdCBzYW1lIGhhbGYgJiM0MzsgbW92NjRfcGVyY3B1X3JlZyBpbnNuLgomIzQzOwkJCSAqIEFsbCBiZWNhdXNlIGJwZl9wYXRjaF9pbnNuX2RhdGEoKSBjYW4gb25seQomIzQzOwkJCSAqIHJlcGxhY2Ugb25lIDgtYnl0ZSBpbnNuLCB3aGljaCBkb2VzIG5vdCB3b3JrCiYjNDM7CQkJICogd2VsbCBmb3IgbGRfaW1tNjQgaW5zbi4KJiM0MzsJCQkgKi8KJiM0MzsKJiM0MzsJCQlpbnNuX2J1ZlswXSA9IGluc25bMV07CiYjNDM7CQkJaW5zbl9idWZbMV0gPSBCUEZfTU9WNjRfUEVSQ1BVX1JFRyhpbnNuLSZndDtkc3RfcmVnLCBpbnNuLSZndDtkc3RfcmVnKTsKJiM0MzsJCQljbnQgPSAyOwomIzQzOwomIzQzOwkJCWkmIzQzOyYjNDM7OwomIzQzOwkJCW5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGkgJiM0MzsgZGVsdGEsIGluc25fYnVmLCBjbnQpOwomIzQzOwkJCWlmICghbmV3X3Byb2cpCiYjNDM7CQkJCXJldHVybiAtRU5PTUVNOwomIzQzOwomIzQzOwkJCWRlbHRhICAgICYjNDM7PSBjbnQgLSAxOwomIzQzOwkJCWVudi0mZ3Q7cHJvZyA9IHByb2cgPSBuZXdfcHJvZzsKJiM0MzsJCQlpbnNuICAgICAgPSBuZXdfcHJvZy0mZ3Q7aW5zbnNpICYjNDM7IGkgJiM0MzsgZGVsdGE7CiYjNDM7CQkJZ290byBuZXh0X2luc247CiYjNDM7CQl9CiYjNDM7CiAJCWlmIChpbnNuLSZndDtjb2RlICE9IChCUEZfSk1QIHwgQlBGX0NBTEwpKQogCQkJZ290byBuZXh0X2luc247CiAJCWlmIChpbnNuLSZndDtzcmNfcmVnID09IEJQRl9QU0VVRE9fQ0FMTCkKZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvaGFzaHRhYi5jIGIva2VybmVsL2JwZi9oYXNodGFiLmMKaW5kZXggOWYzOTRlMWFhMmU4NS4uZDQwY2I1ZGQ0NDZjYSAxMDA2NDQKLS0tIGEva2VybmVsL2JwZi9oYXNodGFiLmMKJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2JwZi9oYXNodGFiLmMKQEAgLTk5OCw3ICYjNDM7OTk4LDYgQEAgc3RhdGljIHZvaWQgZGVjX2VsZW1fY291bnQoc3RydWN0IGJwZl9odGFiICpodGFiKQogCQlhdG9taWNfZGVjKCZhbXA7aHRhYi0mZ3Q7Y291bnQpOwogfQogCi0KIHN0YXRpYyB2b2lkIGZyZWVfaHRhYl9lbGVtKHN0cnVjdCBicGZfaHRhYiAqaHRhYiwgc3RydWN0IGh0YWJfZWxlbSAqbCkKIHsKIAlodGFiX3B1dF9mZF92YWx1ZShodGFiLCBsKTsKQEAgLTI5NzAsNyAmIzQzOzI5NjksNiBAQCBzdGF0aWMgaW50IHJodGFiX2RlbGV0ZV9lbGVtKHN0cnVjdCBicGZfcmh0YWIgKnJodGFiLCBzdHJ1Y3Qgcmh0YWJfZWxlbSAqZWxlbSwgdgogCXJldHVybiAwOwogfQogCi0KIHN0YXRpYyBsb25nIHJodGFiX21hcF9kZWxldGVfZWxlbShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXkpCiB7CiAJc3RydWN0IGJwZl9yaHRhYiAqcmh0YWIgPSBjb250YWluZXJfb2YobWFwLCBzdHJ1Y3QgYnBmX3JodGFiLCBtYXApOwpkaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9oZWxwZXJzLmMgYi9rZXJuZWwvYnBmL2hlbHBlcnMuYwppbmRleCA0NzA5YTVhZDA0NzQ3Li41ZTY4YTBhZGIxNGI0IDEwMDY0NAotLS0gYS9rZXJuZWwvYnBmL2hlbHBlcnMuYwomIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvYnBmL2hlbHBlcnMuYwpAQCAtNDg2OSw3ICYjNDM7NDg2OSw2IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYnRmX2tmdW5jX2lkX3NldCBnZW5lcmljX2tmdW5jX3NldCA9IHsKIAkuc2V0ICAgPSAmYW1wO2dlbmVyaWNfYnRmX2lkcywKIH07CiAKLQogQlRGX0lEX0xJU1QoZ2VuZXJpY19kdG9yX2lkcykKIEJURl9JRChzdHJ1Y3QsIHRhc2tfc3RydWN0KQogQlRGX0lEKGZ1bmMsIGJwZl90YXNrX3JlbGVhc2VfZHRvcikKZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvbGl2ZW5lc3MuYyBiL2tlcm5lbC9icGYvbGl2ZW5lc3MuYwppbmRleCAwYWFkZmJhZTBhY2M1Li45ZTI1ZTI0MWUxZmY0IDEwMDY0NAotLS0gYS9rZXJuZWwvYnBmL2xpdmVuZXNzLmMKJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2JwZi9saXZlbmVzcy5jCkBAIC0yNjksNyAmIzQzOzI2OSw2IEBAIGJwZl9pbnNuX3N1Y2Nlc3NvcnMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgdTMyIGlkeCkKIAogX19kaWFnX3BvcCgpOwogCi0KIHN0YXRpYyBpbmxpbmUgYm9vbCB1cGRhdGVfaW5zbihzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LAogCQkJICAgICAgIHN0cnVjdCBmdW5jX2luc3RhbmNlICppbnN0YW5jZSwgdTMyIGZyYW1lLCB1MzIgaW5zbl9pZHgpCiB7CkBAIC0xODY4LDcgJiM0MzsxODY3LDYgQEAgc3RhdGljIGludCBhbmFseXplX3N1YnByb2coc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwKIAlpZiAobmVlZF9yZXNjaGVkKCkpCiAJCWNvbmRfcmVzY2hlZCgpOwogCi0KIAkvKgogCSAqIFdoZW4gYW4gaW5zdGFuY2UgaXMgcmV1c2VkIChtdXN0X3dyaXRlX2luaXRpYWxpemVkID09IHRydWUpLAogCSAqIHJlY29yZCBpbnRvIGEgZnJlc2ggaW5zdGFuY2UgYW5kIG1lcmdlIGFmdGVyd2FyZC4gIFRoaXMgYXZvaWRzCmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL3F1ZXVlX3N0YWNrX21hcHMuYyBiL2tlcm5lbC9icGYvcXVldWVfc3RhY2tfbWFwcy5jCmluZGV4IGMxYzlkZWU0ZGNkZDAuLjZlOGIxOGMzMmExMDYgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9icGYvcXVldWVfc3RhY2tfbWFwcy5jCiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9icGYvcXVldWVfc3RhY2tfbWFwcy5jCkBAIC0xMjMsNyAmIzQzOzEyMyw2IEBAIHN0YXRpYyBsb25nIF9fcXVldWVfbWFwX2dldChzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICp2YWx1ZSwgYm9vbCBkZWxldGUpCiAJcmV0dXJuIGVycjsKIH0KIAotCiBzdGF0aWMgbG9uZyBfX3N0YWNrX21hcF9nZXQoc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqdmFsdWUsIGJvb2wgZGVsZXRlKQogewogCXN0cnVjdCBicGZfcXVldWVfc3RhY2sgKnFzID0gYnBmX3F1ZXVlX3N0YWNrKG1hcCk7CmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL3N5c2NhbGwuYyBiL2tlcm5lbC9icGYvc3lzY2FsbC5jCmluZGV4IDhkMTExZGE4ODY1NTMuLjdkOGMzZThlNmQ2MmUgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9icGYvc3lzY2FsbC5jCiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9icGYvc3lzY2FsbC5jCkBAIC02MzYsNyAmIzQzOzYzNiw2IEBAIGludCBicGZfbWFwX2FsbG9jX3BhZ2VzKGNvbnN0IHN0cnVjdCBicGZfbWFwICptYXAsIGludCBuaWQsCiAJcmV0dXJuIHJldDsKIH0KIAotCiBzdGF0aWMgaW50IGJ0Zl9maWVsZF9jbXAoY29uc3Qgdm9pZCAqYSwgY29uc3Qgdm9pZCAqYikKIHsKIAljb25zdCBzdHJ1Y3QgYnRmX2ZpZWxkICpmMSA9IGEsICpmMiA9IGI7CkBAIC0xODMwLDcgJiM0MzsxODI5LDYgQEAgc3RhdGljIGludCBtYXBfbG9va3VwX2VsZW0odW5pb24gYnBmX2F0dHIgKmF0dHIpCiAJcmV0dXJuIGVycjsKIH0KIAotCiAjZGVmaW5lIEJQRl9NQVBfVVBEQVRFX0VMRU1fTEFTVF9GSUVMRCBmbGFncwogCiBzdGF0aWMgaW50IG1hcF91cGRhdGVfZWxlbSh1bmlvbiBicGZfYXR0ciAqYXR0ciwgYnBmcHRyX3QgdWF0dHIpCkBAIC0zNDk3LDcgJiM0MzszNDk1LDYgQEAgaW50IGJwZl9saW5rX3ByaW1lKHN0cnVjdCBicGZfbGluayAqbGluaywgc3RydWN0IGJwZl9saW5rX3ByaW1lciAqcHJpbWVyKQogCWlmIChmZCAmbHQ7IDApCiAJCXJldHVybiBmZDsKIAotCiAJaWQgPSBicGZfbGlua19hbGxvY19pZChsaW5rKTsKIAlpZiAoaWQgJmx0OyAwKSB7CiAJCXB1dF91bnVzZWRfZmQoZmQpOwpAQCAtNTUwNSw3ICYjNDM7NTUwMiw2IEBAIHN0YXRpYyBpbnQgYnBmX2xpbmtfZ2V0X2luZm9fYnlfZmQoc3RydWN0IGZpbGUgKmZpbGUsCiAJcmV0dXJuIDA7CiB9CiAKLQogc3RhdGljIGludCB0b2tlbl9nZXRfaW5mb19ieV9mZChzdHJ1Y3QgZmlsZSAqZmlsZSwKIAkJCQlzdHJ1Y3QgYnBmX3Rva2VuICp0b2tlbiwKIAkJCQljb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0ciwKQEAgLTY1MDcsNyAmIzQzOzY1MDMsNiBAQCBCUEZfQ0FMTF8zKGJwZl9zeXNfYnBmLCBpbnQsIGNtZCwgdW5pb24gYnBmX2F0dHIgKiwgYXR0ciwgdTMyLCBhdHRyX3NpemUpCiAJcmV0dXJuIF9fc3lzX2JwZihjbWQsIEtFUk5FTF9CUEZQVFIoYXR0ciksIGF0dHJfc2l6ZSwgS0VSTkVMX0JQRlBUUihOVUxMKSwgMCk7CiB9CiAKLQogLyogVG8gc2h1dCB1cCAtV21pc3NpbmctcHJvdG90eXBlcy4KICAqIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCBieSB0aGUga2VybmVsIGxpZ2h0IHNrZWxldG9uCiAgKiB0byBsb2FkIGJwZiBwcm9ncmFtcyB3aGVuIG1vZHVsZXMgYXJlIGxvYWRlZCBvciBkdXJpbmcga2VybmVsIGJvb3QuCmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL3ZlcmlmaWVyLmMgYi9rZXJuZWwvYnBmL3ZlcmlmaWVyLmMKaW5kZXggZDkyNTE5N2MyZTVmNy4uMzk3NzIwMDJjYjdiZiAxMDA2NDQKLS0tIGEva2VybmVsL2JwZi92ZXJpZmllci5jCiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9icGYvdmVyaWZpZXIuYwpAQCAtNjM1LDcgJiM0Mzs2MzUsNiBAQCBzdGF0aWMgdm9pZCBfX21hcmtfZHlucHRyX3JlZyhzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnLAogCQkJICAgICAgZW51bSBicGZfZHlucHRyX3R5cGUgdHlwZSwKIAkJCSAgICAgIGJvb2wgZmlyc3Rfc2xvdCwgaW50IGlkLCBpbnQgcGFyZW50X2lkKTsKIAotCiBzdGF0aWMgdm9pZCBtYXJrX2R5bnB0cl9zdGFja19yZWdzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsCiAJCQkJICAgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnNyZWcxLAogCQkJCSAgIHN0cnVjdCBicGZfcmVnX3N0YXRlICpzcmVnMiwKQEAgLTE2NzIsNyAmIzQzOzE2NzEsNiBAQCBzdGF0aWMgYm9vbCBzYW1lX2NhbGxzaXRlcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX3N0YXRlICphLCBzdHJ1Y3QgYnBmX3ZlcmlmaWVyX3N0YQogCXJldHVybiB0cnVlOwogfQogCi0KIHZvaWQgYnBmX2ZyZWVfYmFja2VkZ2VzKHN0cnVjdCBicGZfc2NjX3Zpc2l0ICp2aXNpdCkKIHsKIAlzdHJ1Y3QgYnBmX3NjY19iYWNrZWRnZSAqYmFja2VkZ2UsICpuZXh0OwpAQCAtMjI5NCw3ICYjNDM7MjI5Miw2IEBAIHN0YXRpYyBzdHJ1Y3QgYnBmX3ZlcmlmaWVyX3N0YXRlICpwdXNoX2FzeW5jX2NiKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsCiAJcmV0dXJuICZhbXA7ZWxlbS0mZ3Q7c3Q7CiB9CiAKLQogc3RhdGljIGludCBjbXBfc3VicHJvZ3MoY29uc3Qgdm9pZCAqYSwgY29uc3Qgdm9pZCAqYikKIHsKIAlyZXR1cm4gKChzdHJ1Y3QgYnBmX3N1YnByb2dfaW5mbyAqKWEpLSZndDtzdGFydCAtCkBAIC00MDcxLDcgJiM0Mzs0MDY4LDYgQEAgc3RhdGljIGludCBjaGVja19zdGFja19yZWFkKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsCiAJcmV0dXJuIGVycjsKIH0KIAotCiAvKiBjaGVja19zdGFja193cml0ZSBkaXNwYXRjaGVzIHRvIGNoZWNrX3N0YWNrX3dyaXRlX2ZpeGVkX29mZiBvcgogICogY2hlY2tfc3RhY2tfd3JpdGVfdmFyX29mZi4KICAqCkBAIC00ODY3LDcgJiM0Mzs0ODYzLDYgQEAgc3RhdGljIGludCBjaGVja19zb2NrX2FjY2VzcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBpbnQgaW5zbl9pZHgsCiAJCXZhbGlkID0gZmFsc2U7CiAJfQogCi0KIAlpZiAodmFsaWQpIHsKIAkJZW52LSZndDtpbnNuX2F1eF9kYXRhW2luc25faWR4XS5jdHhfZmllbGRfc2l6ZSA9CiAJCQlpbmZvLmN0eF9maWVsZF9zaXplOwpAQCAtNTY2Miw2ICYjNDM7NTY1Nyw4IEBAIGludCBicGZfbWFwX2RpcmVjdF9yZWFkKHN0cnVjdCBicGZfbWFwICptYXAsIGludCBvZmYsIGludCBzaXplLCB1NjQgKnZhbCwKIAl1NjQgYWRkcjsKIAlpbnQgZXJyOwogCiYjNDM7CWlmIChtYXAtJmd0O21hcF90eXBlID09IEJQRl9NQVBfVFlQRV9JTlNOX0FSUkFZIHx8IG1hcC0mZ3Q7bWFwX3R5cGUgPT0gQlBGX01BUF9UWVBFX1BFUkNQVV9BUlJBWSkKJiM0MzsJCXJldHVybiAtRUlOVkFMOwogCWVyciA9IG1hcC0mZ3Q7b3BzLSZndDttYXBfZGlyZWN0X3ZhbHVlX2FkZHIobWFwLCAmYW1wO2FkZHIsIG9mZik7CiAJaWYgKGVycikKIAkJcmV0dXJuIGVycjsKQEAgLTYxNTgsNiAmIzQzOzYxNTUsNTEgQEAgc3RhdGljIHZvaWQgYWRkX3NjYWxhcl90b19yZWcoc3RydWN0IGJwZl9yZWdfc3RhdGUgKmRzdF9yZWcsIHM2NCB2YWwpCiAJcmVnX2JvdW5kc19zeW5jKGRzdF9yZWcpOwogfQogCiYjNDM7c3RhdGljIGludCBjaGVja19tYXBfbWVtX3JlYWQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZywgaW50IG9mZiwKJiM0MzsJCQkgICAgICBpbnQgYnBmX3NpemUsIGludCB2YWx1ZV9yZWdubywgYm9vbCBpc19sZHN4KQomIzQzO3sKJiM0MzsJc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZ3MgPSBjdXJfcmVncyhlbnYpOwomIzQzOwlpbnQgc2l6ZSA9IGJwZl9zaXplX3RvX2J5dGVzKGJwZl9zaXplKTsKJiM0MzsJc3RydWN0IGJwZl9tYXAgKm1hcCA9IHJlZy0mZ3Q7bWFwX3B0cjsKJiM0MzsKJiM0MzsJc3dpdGNoIChtYXAtJmd0O21hcF90eXBlKSB7CiYjNDM7CWNhc2UgQlBGX01BUF9UWVBFX0lOU05fQVJSQVk6CiYjNDM7CQlpZiAoYnBmX3NpemUgIT0gQlBGX0RXKSB7CiYjNDM7CQkJdmVyYm9zZShlbnYsICYjMzQ7SW52YWxpZCByZWFkIG9mICVkIGJ5dGVzIGZyb20gaW5zbl9hcnJheVxuJiMzNDssIHNpemUpOwomIzQzOwkJCXJldHVybiAtRUFDQ0VTOwomIzQzOwkJfQomIzQzOwkJcmVnc1t2YWx1ZV9yZWdub10gPSAqcmVnOwomIzQzOwkJYWRkX3NjYWxhcl90b19yZWcoJmFtcDtyZWdzW3ZhbHVlX3JlZ25vXSwgb2ZmKTsKJiM0MzsJCXJlZ3NbdmFsdWVfcmVnbm9dLnR5cGUgPSBQVFJfVE9fSU5TTjsKJiM0MzsJCXJldHVybiAwOwomIzQzOwljYXNlIEJQRl9NQVBfVFlQRV9QRVJDUFVfQVJSQVk6CiYjNDM7CQlnb3RvIHJlZ191bmtub3duOwomIzQzOwlkZWZhdWx0OgomIzQzOwkJYnJlYWs7CiYjNDM7CX0KJiM0MzsKJiM0MzsJLyogSWYgbWFwIGlzIHJlYWQtb25seSwgdHJhY2sgaXRzIGNvbnRlbnRzIGFzIHNjYWxhcnMuICovCiYjNDM7CWlmICh0bnVtX2lzX2NvbnN0KHJlZy0mZ3Q7dmFyX29mZikgJmFtcDsmYW1wOwomIzQzOwkgICAgYnBmX21hcF9pc19yZG9ubHkobWFwKSAmYW1wOyZhbXA7CiYjNDM7CSAgICBtYXAtJmd0O29wcy0mZ3Q7bWFwX2RpcmVjdF92YWx1ZV9hZGRyKSB7CiYjNDM7CQlpbnQgbWFwX29mZiA9IG9mZiAmIzQzOyByZWctJmd0O3Zhcl9vZmYudmFsdWU7CiYjNDM7CQl1NjQgdmFsID0gMDsKJiM0MzsJCWludCBlcnI7CiYjNDM7CiYjNDM7CQllcnIgPSBicGZfbWFwX2RpcmVjdF9yZWFkKG1hcCwgbWFwX29mZiwgc2l6ZSwgJmFtcDt2YWwsIGlzX2xkc3gpOwomIzQzOwkJaWYgKGVycikKJiM0MzsJCQlyZXR1cm4gZXJyOwomIzQzOwomIzQzOwkJcmVnc1t2YWx1ZV9yZWdub10udHlwZSA9IFNDQUxBUl9WQUxVRTsKJiM0MzsJCV9fbWFya19yZWdfa25vd24oJmFtcDtyZWdzW3ZhbHVlX3JlZ25vXSwgdmFsKTsKJiM0MzsJCXJldHVybiAwOwomIzQzOwl9CiYjNDM7CiYjNDM7cmVnX3Vua25vd246CiYjNDM7CW1hcmtfcmVnX3Vua25vd24oZW52LCByZWdzLCB2YWx1ZV9yZWdubyk7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKIC8qIGNoZWNrIHdoZXRoZXIgbWVtb3J5IGF0IChyZWdubyAmIzQzOyBvZmYpIGlzIGFjY2Vzc2libGUgZm9yIHQgPSAocmVhZCB8IHdyaXRlKQogICogaWYgdD09d3JpdGUsIHZhbHVlX3JlZ25vIGlzIGEgcmVnaXN0ZXIgd2hpY2ggdmFsdWUgaXMgc3RvcmVkIGludG8gbWVtb3J5CiAgKiBpZiB0PT1yZWFkLCB2YWx1ZV9yZWdubyBpcyBhIHJlZ2lzdGVyIHdoaWNoIHdpbGwgcmVjZWl2ZSB0aGUgdmFsdWUgZnJvbSBtZW1vcnkKQEAgLTYyMTIsMzggJiM0Mzs2MjU0LDcgQEAgc3RhdGljIGludCBjaGVja19tZW1fYWNjZXNzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGludCBpbnNuX2lkeCwgc3RydWN0IGIKIAkJaWYgKGtwdHJfZmllbGQpIHsKIAkJCWVyciA9IGNoZWNrX21hcF9rcHRyX2FjY2VzcyhlbnYsIHZhbHVlX3JlZ25vLCBpbnNuX2lkeCwga3B0cl9maWVsZCk7CiAJCX0gZWxzZSBpZiAodCA9PSBCUEZfUkVBRCAmYW1wOyZhbXA7IHZhbHVlX3JlZ25vICZndDs9IDApIHsKLQkJCXN0cnVjdCBicGZfbWFwICptYXAgPSByZWctJmd0O21hcF9wdHI7Ci0KLQkJCS8qCi0JCQkgKiBJZiBtYXAgaXMgcmVhZC1vbmx5LCB0cmFjayBpdHMgY29udGVudHMgYXMgc2NhbGFycywKLQkJCSAqIHVubGVzcyBpdCBpcyBhbiBpbnNuIGFycmF5IChzZWUgdGhlIHNwZWNpYWwgY2FzZSBiZWxvdykKLQkJCSAqLwotCQkJaWYgKHRudW1faXNfY29uc3QocmVnLSZndDt2YXJfb2ZmKSAmYW1wOyZhbXA7Ci0JCQkgICAgYnBmX21hcF9pc19yZG9ubHkobWFwKSAmYW1wOyZhbXA7Ci0JCQkgICAgbWFwLSZndDtvcHMtJmd0O21hcF9kaXJlY3RfdmFsdWVfYWRkciAmYW1wOyZhbXA7Ci0JCQkgICAgbWFwLSZndDttYXBfdHlwZSAhPSBCUEZfTUFQX1RZUEVfSU5TTl9BUlJBWSkgewotCQkJCWludCBtYXBfb2ZmID0gb2ZmICYjNDM7IHJlZy0mZ3Q7dmFyX29mZi52YWx1ZTsKLQkJCQl1NjQgdmFsID0gMDsKLQotCQkJCWVyciA9IGJwZl9tYXBfZGlyZWN0X3JlYWQobWFwLCBtYXBfb2ZmLCBzaXplLAotCQkJCQkJCSAgJmFtcDt2YWwsIGlzX2xkc3gpOwotCQkJCWlmIChlcnIpCi0JCQkJCXJldHVybiBlcnI7Ci0KLQkJCQlyZWdzW3ZhbHVlX3JlZ25vXS50eXBlID0gU0NBTEFSX1ZBTFVFOwotCQkJCV9fbWFya19yZWdfa25vd24oJmFtcDtyZWdzW3ZhbHVlX3JlZ25vXSwgdmFsKTsKLQkJCX0gZWxzZSBpZiAobWFwLSZndDttYXBfdHlwZSA9PSBCUEZfTUFQX1RZUEVfSU5TTl9BUlJBWSkgewotCQkJCWlmIChicGZfc2l6ZSAhPSBCUEZfRFcpIHsKLQkJCQkJdmVyYm9zZShlbnYsICYjMzQ7SW52YWxpZCByZWFkIG9mICVkIGJ5dGVzIGZyb20gaW5zbl9hcnJheVxuJiMzNDssCi0JCQkJCQkgICAgIHNpemUpOwotCQkJCQlyZXR1cm4gLUVBQ0NFUzsKLQkJCQl9Ci0JCQkJcmVnc1t2YWx1ZV9yZWdub10gPSAqcmVnOwotCQkJCWFkZF9zY2FsYXJfdG9fcmVnKCZhbXA7cmVnc1t2YWx1ZV9yZWdub10sIG9mZik7Ci0JCQkJcmVnc1t2YWx1ZV9yZWdub10udHlwZSA9IFBUUl9UT19JTlNOOwotCQkJfSBlbHNlIHsKLQkJCQltYXJrX3JlZ191bmtub3duKGVudiwgcmVncywgdmFsdWVfcmVnbm8pOwotCQkJfQomIzQzOwkJCWVyciA9IGNoZWNrX21hcF9tZW1fcmVhZChlbnYsIHJlZywgb2ZmLCBicGZfc2l6ZSwgdmFsdWVfcmVnbm8sIGlzX2xkc3gpOwogCQl9CiAJfSBlbHNlIGlmIChiYXNlX3R5cGUocmVnLSZndDt0eXBlKSA9PSBQVFJfVE9fTUVNKSB7CiAJCWJvb2wgcmRvbmx5X21lbSA9IHR5cGVfaXNfcmRvbmx5X21lbShyZWctJmd0O3R5cGUpOwpAQCAtNjcyNSw3ICYjNDM7NjczNiw2IEBAIHN0YXRpYyBpbnQgY2hlY2tfc3RhY2tfcmFuZ2VfaW5pdGlhbGl6ZWQoCiAJaWYgKGVycikKIAkJcmV0dXJuIGVycjsKIAotCiAJaWYgKHRudW1faXNfY29uc3QocmVnLSZndDt2YXJfb2ZmKSkgewogCQltaW5fb2ZmID0gbWF4X29mZiA9IHJlZy0mZ3Q7dmFyX29mZi52YWx1ZSAmIzQzOyBvZmY7CiAJfSBlbHNlIHsKQEAgLTc0NDMsNyAmIzQzOzc0NTMsNiBAQCBzdGF0aWMgYm9vbCBpc19pdGVyX25ld19rZnVuYyhzdHJ1Y3QgYnBmX2NhbGxfYXJnX21ldGEgKm1ldGEpCiAJcmV0dXJuIG1ldGEtJmd0O2tmdW5jX2ZsYWdzICZhbXA7IEtGX0lURVJfTkVXOwogfQogCi0KIHN0YXRpYyBib29sIGlzX2l0ZXJfZGVzdHJveV9rZnVuYyhzdHJ1Y3QgYnBmX2NhbGxfYXJnX21ldGEgKm1ldGEpCiB7CiAJcmV0dXJuIG1ldGEtJmd0O2tmdW5jX2ZsYWdzICZhbXA7IEtGX0lURVJfREVTVFJPWTsKQEAgLTgyMjEsNiAmIzQzOzgyMzAsMTIgQEAgc3RhdGljIGludCBjaGVja19hcmdfY29uc3Rfc3RyKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsCiAJCXJldHVybiAtRUFDQ0VTOwogCX0KIAomIzQzOwlpZiAobWFwLSZndDttYXBfdHlwZSA9PSBCUEZfTUFQX1RZUEVfUEVSQ1BVX0FSUkFZKSB7CiYjNDM7CQl2ZXJib3NlKGVudiwgJiMzNDslcyBwb2ludHMgdG8gcGVyY3B1X2FycmF5IG1hcCB3aGljaCBjYW5ub3QgYmUgdXNlZCBhcyBjb25zdCBzdHJpbmdcbiYjMzQ7LAomIzQzOwkJCXJlZ19hcmdfbmFtZShlbnYsIGFyZ25vKSk7CiYjNDM7CQlyZXR1cm4gLUVBQ0NFUzsKJiM0MzsJfQomIzQzOwogCWlmICghYnBmX21hcF9pc19yZG9ubHkobWFwKSkgewogCQl2ZXJib3NlKGVudiwgJiMzNDslcyBkb2VzIG5vdCBwb2ludCB0byBhIHJlYWRvbmx5IG1hcCYjMzk7XG4mIzM0OywgcmVnX2FyZ19uYW1lKGVudiwgYXJnbm8pKTsKIAkJcmV0dXJuIC1FQUNDRVM7CkBAIC0xMTY2Nyw3ICYjNDM7MTE2ODIsNiBAQCBzdGF0aWMgaW50IHByb2Nlc3NfaXJxX2ZsYWcoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9yZWdfc3RhdGUgKgogCXJldHVybiAwOwogfQogCi0KIHN0YXRpYyBpbnQgcmVmX3NldF9ub25fb3duaW5nKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcpCiB7CiAJc3RydWN0IGJ0Zl9yZWNvcmQgKnJlYyA9IHJlZ19idGZfcmVjb3JkKHJlZyk7CkBAIC0xNjUxNSw3ICYjNDM7MTY1MjksNiBAQCBzdGF0aWMgaW50IGNoZWNrX2xkX2FicyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmluc24pCiAJcmV0dXJuIDA7CiB9CiAKLQogc3RhdGljIGJvb2wgcmV0dXJuX3JldHZhbF9yYW5nZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3JldHZhbF9yYW5nZSAqcmFuZ2UpCiB7CiAJZW51bSBicGZfcHJvZ190eXBlIHByb2dfdHlwZSA9IHJlc29sdmVfcHJvZ190eXBlKGVudi0mZ3Q7cHJvZyk7CkBAIC0xODQ2MSw4ICYjNDM7MTg0NzQsNiBAQCBzdGF0aWMgdm9pZCByZWxlYXNlX2luc25fYXJyYXlzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpCiAJCWJwZl9pbnNuX2FycmF5X3JlbGVhc2UoZW52LSZndDtpbnNuX2FycmF5X21hcHNbaV0pOwogfQogCi0KLQogLyogVGhlIHZlcmlmaWVyIGRvZXMgbW9yZSBkYXRhIGZsb3cgYW5hbHlzaXMgdGhhbiBsbHZtIGFuZCB3aWxsIG5vdAogICogZXhwbG9yZSBicmFuY2hlcyB0aGF0IGFyZSBkZWFkIGF0IHJ1biB0aW1lLiBNYWxpY2lvdXMgcHJvZ3JhbXMgY2FuCiAgKiBoYXZlIGRlYWQgY29kZSB0b28uIFRoZXJlZm9yZSByZXBsYWNlIGFsbCBkZWFkIGF0LXJ1bi10aW1lIGNvZGUKQEAgLTE4NDkwLDggJiM0MzsxODUwMSw2IEBAIHN0YXRpYyB2b2lkIHNhbml0aXplX2RlYWRfY29kZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KQogCX0KIH0KIAotCi0KIHN0YXRpYyB2b2lkIGZyZWVfc3RhdGVzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpCiB7CiAJc3RydWN0IGJwZl92ZXJpZmllcl9zdGF0ZV9saXN0ICpzbDsKQEAgLTE4NzczLDcgJiM0MzsxODc4Miw2IEBAIHN0YXRpYyBpbnQgZG9fY2hlY2tfbWFpbihzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KQogCXJldHVybiByZXQ7CiB9CiAKLQogc3RhdGljIHZvaWQgcHJpbnRfdmVyaWZpY2F0aW9uX3N0YXRzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpCiB7CiAJLyogU2tpcCBvdmVyIGhpZGRlbiBzdWJwcm9ncyB3aGljaCBhcmUgbm90IHZlcmlmaWVkLiAqLwpkaWZmIC0tZ2l0IGEvdG9vbHMvYnBmL2JwZnRvb2wvZ2VuLmMgYi90b29scy9icGYvYnBmdG9vbC9nZW4uYwppbmRleCBhMDFkMDZkMjJkMWEzLi5hNTA1NDBlZjY1MjFjIDEwMDY0NAotLS0gYS90b29scy9icGYvYnBmdG9vbC9nZW4uYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy9icGYvYnBmdG9vbC9nZW4uYwpAQCAtMTAxLDYgJiM0MzsxMDEsMTIgQEAgc3RhdGljIGJvb2wgZ2V0X21hcF9pZGVudChjb25zdCBzdHJ1Y3QgYnBmX21hcCAqbWFwLCBjaGFyICpidWYsIHNpemVfdCBidWZfc3opCiAJCXJldHVybiB0cnVlOwogCX0KIAomIzQzOwlpZiAoYnBmX21hcF9fdHlwZShtYXApID09IEJQRl9NQVBfVFlQRV9QRVJDUFVfQVJSQVkpIHsKJiM0MzsJCXNucHJpbnRmKGJ1ZiwgYnVmX3N6LCAmIzM0OyVzJiMzNDssIG5hbWUgJiM0MzsgMSk7CiYjNDM7CQlzYW5pdGl6ZV9pZGVudGlmaWVyKGJ1Zik7CiYjNDM7CQlyZXR1cm4gdHJ1ZTsKJiM0MzsJfQomIzQzOwogCWZvciAgKGkgPSAwLCBuID0gQVJSQVlfU0laRShzZnhzKTsgaSAmbHQ7IG47IGkmIzQzOyYjNDM7KSB7CiAJCWNvbnN0IGNoYXIgKnNmeCA9IHNmeHNbaV0sICpwOwogCkBAIC0xMTcsNyAmIzQzOzEyMyw3IEBAIHN0YXRpYyBib29sIGdldF9tYXBfaWRlbnQoY29uc3Qgc3RydWN0IGJwZl9tYXAgKm1hcCwgY2hhciAqYnVmLCBzaXplX3QgYnVmX3N6KQogCiBzdGF0aWMgYm9vbCBnZXRfZGF0YXNlY19pZGVudChjb25zdCBjaGFyICpzZWNfbmFtZSwgY2hhciAqYnVmLCBzaXplX3QgYnVmX3N6KQogewotCXN0YXRpYyBjb25zdCBjaGFyICpwZnhzW10gPSB7ICYjMzQ7LmRhdGEmIzM0OywgJiMzNDsucm9kYXRhJiMzNDssICYjMzQ7LmJzcyYjMzQ7LCAmIzM0Oy5rY29uZmlnJiMzNDsgfTsKJiM0MzsJc3RhdGljIGNvbnN0IGNoYXIgKnBmeHNbXSA9IHsgJiMzNDsuZGF0YSYjMzQ7LCAmIzM0Oy5yb2RhdGEmIzM0OywgJiMzNDsuYnNzJiMzNDssICYjMzQ7LnBlcmNwdSYjMzQ7LCAmIzM0Oy5rY29uZmlnJiMzNDsgfTsKIAlpbnQgaSwgbjsKIAogCS8qIHJlY29nbml6ZSBoYXJkIGNvZGVkIExMVk0gc2VjdGlvbiBuYW1lICovCkBAIC0yNTQsNyAmIzQzOzI2MCw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYnRmX3R5cGUgKmZpbmRfdHlwZV9mb3JfbWFwKHN0cnVjdCBidGYgKmJ0ZiwgY29uc3QgY2hhciAqbWFwCiAJcmV0dXJuIE5VTEw7CiB9CiAKLXN0YXRpYyBib29sIGlzX21tYXBhYmxlX21hcChjb25zdCBzdHJ1Y3QgYnBmX21hcCAqbWFwLCBjaGFyICpidWYsIHNpemVfdCBzeikKJiM0MztzdGF0aWMgYm9vbCBpc19za2VsX2RhdGEoY29uc3Qgc3RydWN0IGJwZl9tYXAgKm1hcCwgY2hhciAqYnVmLCBzaXplX3Qgc3opCiB7CiAJc2l6ZV90IHRtcF9zejsKIApAQCAtMjYzLDEzICYjNDM7MjY5LDI0IEBAIHN0YXRpYyBib29sIGlzX21tYXBhYmxlX21hcChjb25zdCBzdHJ1Y3QgYnBmX21hcCAqbWFwLCBjaGFyICpidWYsIHNpemVfdCBzeikKIAkJcmV0dXJuIHRydWU7CiAJfQogCi0JaWYgKCFicGZfbWFwX19pc19pbnRlcm5hbChtYXApIHx8ICEoYnBmX21hcF9fbWFwX2ZsYWdzKG1hcCkgJmFtcDsgQlBGX0ZfTU1BUEFCTEUpKQomIzQzOwlpZiAoIWJwZl9tYXBfX2lzX2ludGVybmFsKG1hcCkpCiAJCXJldHVybiBmYWxzZTsKIAogCWlmICghZ2V0X21hcF9pZGVudChtYXAsIGJ1Ziwgc3opKQogCQlyZXR1cm4gZmFsc2U7CiAKLQlyZXR1cm4gdHJ1ZTsKJiM0MzsJaWYgKGJwZl9tYXBfX21hcF9mbGFncyhtYXApICZhbXA7IEJQRl9GX01NQVBBQkxFKQomIzQzOwkJcmV0dXJuIHRydWU7CiYjNDM7CiYjNDM7CWlmIChicGZfbWFwX190eXBlKG1hcCkgPT0gQlBGX01BUF9UWVBFX1BFUkNQVV9BUlJBWSkKJiM0MzsJCXJldHVybiBicGZfbWFwX19idGZfdmFsdWVfdHlwZV9pZChtYXApICE9IDA7CiYjNDM7CiYjNDM7CXJldHVybiBmYWxzZTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGJvb2wgaXNfbW1hcGFibGVfbWFwKGNvbnN0IHN0cnVjdCBicGZfbWFwICptYXAsIGNoYXIgKmJ1Ziwgc2l6ZV90IHN6KQomIzQzO3sKJiM0MzsJcmV0dXJuIGlzX3NrZWxfZGF0YShtYXAsIGJ1Ziwgc3opICZhbXA7JmFtcDsgYnBmX21hcF9fdHlwZShtYXApICE9IEJQRl9NQVBfVFlQRV9QRVJDUFVfQVJSQVk7CiB9CiAKIHN0YXRpYyBpbnQgY29kZWdlbl9kYXRhc2VjcyhzdHJ1Y3QgYnBmX29iamVjdCAqb2JqLCBjb25zdCBjaGFyICpvYmpfbmFtZSkKQEAgLTI4Nyw3ICYjNDM7MzA0LDcgQEAgc3RhdGljIGludCBjb2RlZ2VuX2RhdGFzZWNzKHN0cnVjdCBicGZfb2JqZWN0ICpvYmosIGNvbnN0IGNoYXIgKm9ial9uYW1lKQogCiAJYnBmX29iamVjdF9fZm9yX2VhY2hfbWFwKG1hcCwgb2JqKSB7CiAJCS8qIG9ubHkgZ2VuZXJhdGUgZGVmaW5pdGlvbnMgZm9yIG1lbW9yeS1tYXBwZWQgaW50ZXJuYWwgbWFwcyAqLwotCQlpZiAoIWlzX21tYXBhYmxlX21hcChtYXAsIG1hcF9pZGVudCwgc2l6ZW9mKG1hcF9pZGVudCkpKQomIzQzOwkJaWYgKCFpc19za2VsX2RhdGEobWFwLCBtYXBfaWRlbnQsIHNpemVvZihtYXBfaWRlbnQpKSkKIAkJCWNvbnRpbnVlOwogCiAJCXNlYyA9IGZpbmRfdHlwZV9mb3JfbWFwKGJ0ZiwgbWFwX2lkZW50KTsKQEAgLTUxNyw3ICYjNDM7NTM0LDcgQEAgc3RhdGljIHZvaWQgY29kZWdlbl9hc3NlcnRzKHN0cnVjdCBicGZfb2JqZWN0ICpvYmosIGNvbnN0IGNoYXIgKm9ial9uYW1lKQogCQkmIzM0Oywgb2JqX25hbWUpOwogCiAJYnBmX29iamVjdF9fZm9yX2VhY2hfbWFwKG1hcCwgb2JqKSB7Ci0JCWlmICghaXNfbW1hcGFibGVfbWFwKG1hcCwgbWFwX2lkZW50LCBzaXplb2YobWFwX2lkZW50KSkpCiYjNDM7CQlpZiAoIWlzX3NrZWxfZGF0YShtYXAsIG1hcF9pZGVudCwgc2l6ZW9mKG1hcF9pZGVudCkpKQogCQkJY29udGludWU7CiAKIAkJc2VjID0gZmluZF90eXBlX2Zvcl9tYXAoYnRmLCBtYXBfaWRlbnQpOwpAQCAtNjY4LDggJiM0Mzs2ODUsNyBAQCBzdGF0aWMgdm9pZCBjb2RlZ2VuX2Rlc3Ryb3koc3RydWN0IGJwZl9vYmplY3QgKm9iaiwgY29uc3QgY2hhciAqb2JqX25hbWUpCiAJYnBmX29iamVjdF9fZm9yX2VhY2hfbWFwKG1hcCwgb2JqKSB7CiAJCWlmICghZ2V0X21hcF9pZGVudChtYXAsIGlkZW50LCBzaXplb2YoaWRlbnQpKSkKIAkJCWNvbnRpbnVlOwotCQlpZiAoYnBmX21hcF9faXNfaW50ZXJuYWwobWFwKSAmYW1wOyZhbXA7Ci0JCSAgICAoYnBmX21hcF9fbWFwX2ZsYWdzKG1hcCkgJmFtcDsgQlBGX0ZfTU1BUEFCTEUpKQomIzQzOwkJaWYgKGlzX3NrZWxfZGF0YShtYXAsIGlkZW50LCBzaXplb2YoaWRlbnQpKSkKIAkJCXByaW50ZigmIzM0O1x0c2tlbF9mcmVlX21hcF9kYXRhKHNrZWwtJmd0OyUxJHMsIHNrZWwtJmd0O21hcHMuJTEkcy5pbml0aWFsX3ZhbHVlLCAlMiR6dSk7XG4mIzM0OywKIAkJCSAgICAgICBpZGVudCwgYnBmX21hcF9tbWFwX3N6KG1hcCkpOwogCQljb2RlZ2VuKCYjMzQ7XApAQCAtNzQxLDcgJiM0Mzs3NTcsNyBAQCBzdGF0aWMgaW50IGdlbl90cmFjZShzdHJ1Y3QgYnBmX29iamVjdCAqb2JqLCBjb25zdCBjaGFyICpvYmpfbmFtZSwgY29uc3QgY2hhciAqaAogCQljb25zdCB2b2lkICptbWFwX2RhdGEgPSBOVUxMOwogCQlzaXplX3QgbW1hcF9zaXplID0gMDsKIAotCQlpZiAoIWlzX21tYXBhYmxlX21hcChtYXAsIGlkZW50LCBzaXplb2YoaWRlbnQpKSkKJiM0MzsJCWlmICghaXNfc2tlbF9kYXRhKG1hcCwgaWRlbnQsIHNpemVvZihpZGVudCkpKQogCQkJY29udGludWU7CiAKIAkJY29kZWdlbigmIzM0O1wKQEAgLTg0OSw5ICYjNDM7ODY1LDIzIEBAIHN0YXRpYyBpbnQgZ2VuX3RyYWNlKHN0cnVjdCBicGZfb2JqZWN0ICpvYmosIGNvbnN0IGNoYXIgKm9ial9uYW1lLCBjb25zdCBjaGFyICpoCiAJYnBmX29iamVjdF9fZm9yX2VhY2hfbWFwKG1hcCwgb2JqKSB7CiAJCWNvbnN0IGNoYXIgKm1tYXBfZmxhZ3M7CiAKLQkJaWYgKCFpc19tbWFwYWJsZV9tYXAobWFwLCBpZGVudCwgc2l6ZW9mKGlkZW50KSkpCiYjNDM7CQlpZiAoIWlzX3NrZWxfZGF0YShtYXAsIGlkZW50LCBzaXplb2YoaWRlbnQpKSkKIAkJCWNvbnRpbnVlOwogCiYjNDM7CQlpZiAoYnBmX21hcF9fdHlwZShtYXApID09IEJQRl9NQVBfVFlQRV9QRVJDUFVfQVJSQVkpIHsKJiM0MzsJCQljb2RlZ2VuKCYjMzQ7XAomIzQzOwkJXG5cCiYjNDM7CQkJZXJyID0gc2tlbF9wcm90ZWN0X21hcF9kYXRhKHNrZWwtJmd0OyUxJHMsICZhbXA7c2tlbC0mZ3Q7bWFwcy4lMSRzLmluaXRpYWxfdmFsdWUsICUyJHpkKTtcblwKJiM0MzsJCQlpZiAoZXJyKQkJCQkJICAgIFxuXAomIzQzOwkJCQlyZXR1cm4gZXJyOwkJCQkgICAgXG5cCiYjNDM7CQkjaWZkZWYgX19LRVJORUxfXwkJCQkJICAgIFxuXAomIzQzOwkJCXNrZWwtJmd0OyUxJHMgPSBOVUxMOwkJCQkgICAgXG5cCiYjNDM7CQkjZW5kaWYJCQkJCQkJICAgIFxuXAomIzQzOwkJCSYjMzQ7LAomIzQzOwkJCWlkZW50LCBicGZfbWFwX21tYXBfc3oobWFwKSk7CiYjNDM7CQkJY29udGludWU7CiYjNDM7CQl9CiYjNDM7CiAJCWlmIChicGZfbWFwX19tYXBfZmxhZ3MobWFwKSAmYW1wOyBCUEZfRl9SRE9OTFlfUFJPRykKIAkJCW1tYXBfZmxhZ3MgPSAmIzM0O1BST1RfUkVBRCYjMzQ7OwogCQllbHNlCkBAIC05NTUsOCAmIzQzOzk4NSw3IEBAIGNvZGVnZW5fbWFwc19za2VsZXRvbihzdHJ1Y3QgYnBmX29iamVjdCAqb2JqLCBzaXplX3QgbWFwX2NudCwgYm9vbCBtbWFwZWQsIGJvb2wKIAkJCQltYXAtJmd0O21hcCA9ICZhbXA7b2JqLSZndDttYXBzLiVzOwkgICAgXG5cCiAJCQkmIzM0OywKIAkJCWksIGJwZl9tYXBfX25hbWUobWFwKSwgaWRlbnQpOwotCQkvKiBtZW1vcnktbWFwcGVkIGludGVybmFsIG1hcHMgKi8KLQkJaWYgKG1tYXBlZCAmYW1wOyZhbXA7IGlzX21tYXBhYmxlX21hcChtYXAsIGlkZW50LCBzaXplb2YoaWRlbnQpKSkgewomIzQzOwkJaWYgKG1tYXBlZCAmYW1wOyZhbXA7IGlzX3NrZWxfZGF0YShtYXAsIGlkZW50LCBzaXplb2YoaWRlbnQpKSkgewogCQkJcHJpbnRmKCYjMzQ7XHRtYXAtJmd0O21tYXBlZCA9ICh2b2lkICoqKSZhbXA7b2JqLSZndDslcztcbiYjMzQ7LCBpZGVudCk7CiAJCX0KIApkaWZmIC0tZ2l0IGEvdG9vbHMvbGliL2JwZi9icGZfZ2VuX2ludGVybmFsLmggYi90b29scy9saWIvYnBmL2JwZl9nZW5faW50ZXJuYWwuaAppbmRleCAwNDI1NjkxODc3NTIxLi42YzVhZDZjNTVlOGE2IDEwMDY0NAotLS0gYS90b29scy9saWIvYnBmL2JwZl9nZW5faW50ZXJuYWwuaAomIzQzOyYjNDM7JiM0MzsgYi90b29scy9saWIvYnBmL2JwZl9nZW5faW50ZXJuYWwuaApAQCAtNjUsNyAmIzQzOzY1LDggQEAgdm9pZCBicGZfZ2VuX19wcm9nX2xvYWQoc3RydWN0IGJwZl9nZW4gKmdlbiwKIAkJCWVudW0gYnBmX3Byb2dfdHlwZSBwcm9nX3R5cGUsIGNvbnN0IGNoYXIgKnByb2dfbmFtZSwKIAkJCWNvbnN0IGNoYXIgKmxpY2Vuc2UsIHN0cnVjdCBicGZfaW5zbiAqaW5zbnMsIHNpemVfdCBpbnNuX2NudCwKIAkJCXN0cnVjdCBicGZfcHJvZ19sb2FkX29wdHMgKmxvYWRfYXR0ciwgaW50IHByb2dfaWR4KTsKLXZvaWQgYnBmX2dlbl9fbWFwX3VwZGF0ZV9lbGVtKHN0cnVjdCBicGZfZ2VuICpnZW4sIGludCBtYXBfaWR4LCB2b2lkICp2YWx1ZSwgX191MzIgdmFsdWVfc2l6ZSk7CiYjNDM7dm9pZCBicGZfZ2VuX19tYXBfdXBkYXRlX2VsZW0oc3RydWN0IGJwZl9nZW4gKmdlbiwgaW50IG1hcF9pZHgsIHZvaWQgKnZhbHVlLCBfX3UzMiB2YWx1ZV9zaXplLAomIzQzOwkJCSAgICAgIF9fdTY0IGZsYWdzKTsKIHZvaWQgYnBmX2dlbl9fbWFwX2ZyZWV6ZShzdHJ1Y3QgYnBmX2dlbiAqZ2VuLCBpbnQgbWFwX2lkeCk7CiB2b2lkIGJwZl9nZW5fX3JlY29yZF9hdHRhY2hfdGFyZ2V0KHN0cnVjdCBicGZfZ2VuICpnZW4sIGNvbnN0IGNoYXIgKm5hbWUsIGVudW0gYnBmX2F0dGFjaF90eXBlIHR5cGUpOwogdm9pZCBicGZfZ2VuX19yZWNvcmRfZXh0ZXJuKHN0cnVjdCBicGZfZ2VuICpnZW4sIGNvbnN0IGNoYXIgKm5hbWUsIGJvb2wgaXNfd2VhaywKZGlmZiAtLWdpdCBhL3Rvb2xzL2xpYi9icGYvZmVhdHVyZXMuYyBiL3Rvb2xzL2xpYi9icGYvZmVhdHVyZXMuYwppbmRleCBiN2UzODhmOTlkMGJiLi5lZjk1ODFjMTEzMDM1IDEwMDY0NAotLS0gYS90b29scy9saWIvYnBmL2ZlYXR1cmVzLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvbGliL2JwZi9mZWF0dXJlcy5jCkBAIC02MjAsNiAmIzQzOzYyMCwzOCBAQCBzdGF0aWMgaW50IHByb2JlX2JwZl9zeXNjYWxsX2NvbW1vbl9hdHRycyhpbnQgdG9rZW5fZmQpCiAJcmV0dXJuIHByb2JlX3N5c19icGZfZXh0KCk7CiB9CiAKJiM0MztzdGF0aWMgaW50IHByb2JlX2tlcm5fcGVyY3B1X2RhdGEoaW50IHRva2VuX2ZkKQomIzQzO3sKJiM0MzsJc3RydWN0IGJwZl9pbnNuIGluc25zW10gPSB7CiYjNDM7CQlCUEZfTERfTUFQX1ZBTFVFKEJQRl9SRUdfMSwgMCwgMCksCiYjNDM7CQlCUEZfTERYX01FTShCUEZfRFcsIEJQRl9SRUdfMCwgQlBGX1JFR18xLCAwKSwKJiM0MzsJCUJQRl9FWElUX0lOU04oKSwKJiM0MzsJfTsKJiM0MzsJTElCQlBGX09QVFMoYnBmX21hcF9jcmVhdGVfb3B0cywgbWFwX29wdHMsCiYjNDM7CQkudG9rZW5fZmQgPSB0b2tlbl9mZCwKJiM0MzsJCS5tYXBfZmxhZ3MgPSB0b2tlbl9mZCA/IEJQRl9GX1RPS0VOX0ZEIDogMCwKJiM0MzsJKTsKJiM0MzsJTElCQlBGX09QVFMoYnBmX3Byb2dfbG9hZF9vcHRzLCBwcm9nX29wdHMsCiYjNDM7CQkudG9rZW5fZmQgPSB0b2tlbl9mZCwKJiM0MzsJCS5wcm9nX2ZsYWdzID0gdG9rZW5fZmQgPyBCUEZfRl9UT0tFTl9GRCA6IDAsCiYjNDM7CSk7CiYjNDM7CWludCByZXQsIG1hcCwgaW5zbl9jbnQgPSBBUlJBWV9TSVpFKGluc25zKTsKJiM0MzsKJiM0MzsJbWFwID0gYnBmX21hcF9jcmVhdGUoQlBGX01BUF9UWVBFX1BFUkNQVV9BUlJBWSwgJiMzNDtsaWJicGZfcGVyY3B1JiMzNDssIHNpemVvZihpbnQpLCA4LCAxLAomIzQzOwkJCSAgICAgJmFtcDttYXBfb3B0cyk7CiYjNDM7CWlmIChtYXAgJmx0OyAwKSB7CiYjNDM7CQlwcl93YXJuKCYjMzQ7RXJyb3IgaW4gJXMoKTogJXMuIENvdWxkbiYjMzk7dCBjcmVhdGUgc2ltcGxlIHBlcmNwdV9hcnJheSBtYXAuXG4mIzM0OywKJiM0MzsJCQlfX2Z1bmNfXywgZXJyc3RyKG1hcCkpOwomIzQzOwkJcmV0dXJuIG1hcDsKJiM0MzsJfQomIzQzOwomIzQzOwlpbnNuc1swXS5pbW0gPSBtYXA7CiYjNDM7CiYjNDM7CXJldCA9IGJwZl9wcm9nX2xvYWQoQlBGX1BST0dfVFlQRV9TT0NLRVRfRklMVEVSLCBOVUxMLCAmIzM0O0dQTCYjMzQ7LCBpbnNucywgaW5zbl9jbnQsICZhbXA7cHJvZ19vcHRzKTsKJiM0MzsJY2xvc2UobWFwKTsKJiM0MzsJcmV0dXJuIHByb2JlX2ZkKHJldCk7CiYjNDM7fQomIzQzOwogdHlwZWRlZiBpbnQgKCpmZWF0dXJlX3Byb2JlX2ZuKShpbnQgLyogdG9rZW5fZmQgKi8pOwogCiBzdGF0aWMgc3RydWN0IGtlcm5fZmVhdHVyZV9jYWNoZSBmZWF0dXJlX2NhY2hlOwpAQCAtNzA3LDYgJiM0Mzs3MzksOSBAQCBzdGF0aWMgc3RydWN0IGtlcm5fZmVhdHVyZV9kZXNjIHsKIAlbRkVBVF9CUEZfU1lTQ0FMTF9DT01NT05fQVRUUlNdID0gewogCQkmIzM0O0JQRiBzeXNjYWxsIGNvbW1vbiBhdHRyaWJ1dGVzIHN1cHBvcnQmIzM0OywgcHJvYmVfYnBmX3N5c2NhbGxfY29tbW9uX2F0dHJzLAogCX0sCiYjNDM7CVtGRUFUX1BFUkNQVV9EQVRBXSA9IHsKJiM0MzsJCSYjMzQ7a2VybmVsIHN1cHBvcnRzIHBlcmNwdSBkYXRhJiMzNDssIHByb2JlX2tlcm5fcGVyY3B1X2RhdGEsCiYjNDM7CX0sCiB9OwogCiBib29sIGZlYXRfc3VwcG9ydGVkKHN0cnVjdCBrZXJuX2ZlYXR1cmVfY2FjaGUgKmNhY2hlLCBlbnVtIGtlcm5fZmVhdHVyZV9pZCBmZWF0X2lkKQpkaWZmIC0tZ2l0IGEvdG9vbHMvbGliL2JwZi9nZW5fbG9hZGVyLmMgYi90b29scy9saWIvYnBmL2dlbl9sb2FkZXIuYwppbmRleCA2ZTNkZDUyNDI3NjE4Li5hZjNhMDRmMTYxYWMxIDEwMDY0NAotLS0gYS90b29scy9saWIvYnBmL2dlbl9sb2FkZXIuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy9saWIvYnBmL2dlbl9sb2FkZXIuYwpAQCAtMTEyOCw3ICYjNDM7MTEyOCw3IEBAIHZvaWQgYnBmX2dlbl9fcHJvZ19sb2FkKHN0cnVjdCBicGZfZ2VuICpnZW4sCiB9CiAKIHZvaWQgYnBmX2dlbl9fbWFwX3VwZGF0ZV9lbGVtKHN0cnVjdCBicGZfZ2VuICpnZW4sIGludCBtYXBfaWR4LCB2b2lkICpwdmFsdWUsCi0JCQkgICAgICBfX3UzMiB2YWx1ZV9zaXplKQomIzQzOwkJCSAgICAgIF9fdTMyIHZhbHVlX3NpemUsIF9fdTY0IGZsYWdzKQogewogCWludCBhdHRyX3NpemUgPSBvZmZzZXRvZmVuZCh1bmlvbiBicGZfYXR0ciwgZmxhZ3MpOwogCWludCBtYXBfdXBkYXRlX2F0dHIsIHZhbHVlLCBrZXk7CkBAIC0xMTM2LDYgJiM0MzsxMTM2LDcgQEAgdm9pZCBicGZfZ2VuX19tYXBfdXBkYXRlX2VsZW0oc3RydWN0IGJwZl9nZW4gKmdlbiwgaW50IG1hcF9pZHgsIHZvaWQgKnB2YWx1ZSwKIAlpbnQgemVybyA9IDA7CiAKIAltZW1zZXQoJmFtcDthdHRyLCAwLCBhdHRyX3NpemUpOwomIzQzOwlhdHRyLmZsYWdzID0gdGd0X2VuZGlhbihmbGFncyk7CiAKIAl2YWx1ZSA9IGFkZF9kYXRhKGdlbiwgcHZhbHVlLCB2YWx1ZV9zaXplKTsKIAlrZXkgPSBhZGRfZGF0YShnZW4sICZhbXA7emVybywgc2l6ZW9mKHplcm8pKTsKZGlmZiAtLWdpdCBhL3Rvb2xzL2xpYi9icGYvbGliYnBmLmMgYi90b29scy9saWIvYnBmL2xpYmJwZi5jCmluZGV4IDUxNGU0ZTlkYWE4MjUuLjlmNzlhOGU4NTBmZGIgMTAwNjQ0Ci0tLSBhL3Rvb2xzL2xpYi9icGYvbGliYnBmLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvbGliL2JwZi9saWJicGYuYwpAQCAtNTQxLDYgJiM0Mzs1NDEsNyBAQCBzdHJ1Y3QgYnBmX3N0cnVjdF9vcHMgewogfTsKIAogI2RlZmluZSBEQVRBX1NFQyAmIzM0Oy5kYXRhJiMzNDsKJiM0MzsjZGVmaW5lIFBFUkNQVV9TRUMgJiMzNDsucGVyY3B1JiMzNDsKICNkZWZpbmUgQlNTX1NFQyAmIzM0Oy5ic3MmIzM0OwogI2RlZmluZSBST0RBVEFfU0VDICYjMzQ7LnJvZGF0YSYjMzQ7CiAjZGVmaW5lIEtDT05GSUdfU0VDICYjMzQ7Lmtjb25maWcmIzM0OwpAQCAtNTU1LDYgJiM0Mzs1NTYsNyBAQCBlbnVtIGxpYmJwZl9tYXBfdHlwZSB7CiAJTElCQlBGX01BUF9CU1MsCiAJTElCQlBGX01BUF9ST0RBVEEsCiAJTElCQlBGX01BUF9LQ09ORklHLAomIzQzOwlMSUJCUEZfTUFQX1BFUkNQVSwKIH07CiAKIHN0cnVjdCBicGZfbWFwX2RlZiB7CkBAIC02NjYsNiAmIzQzOzY2OCw3IEBAIGVudW0gc2VjX3R5cGUgewogCVNFQ19EQVRBLAogCVNFQ19ST0RBVEEsCiAJU0VDX1NUX09QUywKJiM0MzsJU0VDX1BFUkNQVSwKIH07CiAKIHN0cnVjdCBlbGZfc2VjX2Rlc2MgewpAQCAtMTgzOSw2ICYjNDM7MTg0Miw4IEBAIHN0YXRpYyBzaXplX3QgYnBmX21hcF9tbWFwX3N6KGNvbnN0IHN0cnVjdCBicGZfbWFwICptYXApCiAJc3dpdGNoIChtYXAtJmd0O2RlZi50eXBlKSB7CiAJY2FzZSBCUEZfTUFQX1RZUEVfQVJSQVk6CiAJCXJldHVybiBhcnJheV9tYXBfbW1hcF9zeihtYXAtJmd0O2RlZi52YWx1ZV9zaXplLCBtYXAtJmd0O2RlZi5tYXhfZW50cmllcyk7CiYjNDM7CWNhc2UgQlBGX01BUF9UWVBFX1BFUkNQVV9BUlJBWToKJiM0MzsJCXJldHVybiBtYXAtJmd0O2RlZi52YWx1ZV9zaXplOwogCWNhc2UgQlBGX01BUF9UWVBFX0FSRU5BOgogCQlyZXR1cm4gcGFnZV9zeiAqIG1hcC0mZ3Q7ZGVmLm1heF9lbnRyaWVzOwogCWRlZmF1bHQ6CkBAIC0xODY2LDcgJiM0MzsxODcxLDggQEAgc3RhdGljIGludCBicGZfbWFwX21tYXBfcmVzaXplKHN0cnVjdCBicGZfbWFwICptYXAsIHNpemVfdCBvbGRfc3osIHNpemVfdCBuZXdfc3oKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGNoYXIgKmludGVybmFsX21hcF9uYW1lKHN0cnVjdCBicGZfb2JqZWN0ICpvYmosIGNvbnN0IGNoYXIgKnJlYWxfbmFtZSkKJiM0MztzdGF0aWMgY2hhciAqaW50ZXJuYWxfbWFwX25hbWUoc3RydWN0IGJwZl9vYmplY3QgKm9iaiwgY29uc3QgY2hhciAqcmVhbF9uYW1lLAomIzQzOwkJCSAgICAgICBlbnVtIGxpYmJwZl9tYXBfdHlwZSB0eXBlKQogewogCWNoYXIgbWFwX25hbWVbQlBGX09CSl9OQU1FX0xFTl0sICpwOwogCWludCBwZnhfbGVuLCBzZnhfbGVuID0gbWF4KChzaXplX3QpNywgc3RybGVuKHJlYWxfbmFtZSkpOwpAQCAtMTkwNyw4ICYjNDM7MTkxMywxMSBAQCBzdGF0aWMgY2hhciAqaW50ZXJuYWxfbWFwX25hbWUoc3RydWN0IGJwZl9vYmplY3QgKm9iaiwgY29uc3QgY2hhciAqcmVhbF9uYW1lKQogCWlmIChzZnhfbGVuICZndDs9IEJQRl9PQkpfTkFNRV9MRU4pCiAJCXNmeF9sZW4gPSBCUEZfT0JKX05BTUVfTEVOIC0gMTsKIAotCS8qIGlmIHRoZXJlIGFyZSB0d28gb3IgbW9yZSBkb3RzIGluIG1hcCBuYW1lLCBpdCYjMzk7cyBhIGN1c3RvbSBkb3QgbWFwICovCi0JaWYgKHN0cmNocihyZWFsX25hbWUgJiM0MzsgMSwgJiMzOTsuJiMzOTspICE9IE5VTEwpCiYjNDM7CS8qCiYjNDM7CSAqIERvbiYjMzk7dCBwcmVmaXggdGhlIGJwZl9vYmplY3QgbmFtZSBpZiB0aGlzIGlzIGEgY3VzdG9tIGRvdCBtYXAKJiM0MzsJICogKGNvbnRhaW5pbmcgdHdvIG9yIG1vcmUgZG90cykgb3IgYSBwZXJjcHUgZGF0YSBtYXAuCiYjNDM7CSAqLwomIzQzOwlpZiAoc3RyY2hyKHJlYWxfbmFtZSAmIzQzOyAxLCAmIzM5Oy4mIzM5OykgIT0gTlVMTCB8fCB0eXBlID09IExJQkJQRl9NQVBfUEVSQ1BVKQogCQlwZnhfbGVuID0gMDsKIAllbHNlCiAJCXBmeF9sZW4gPSBtaW4oKHNpemVfdClCUEZfT0JKX05BTUVfTEVOIC0gc2Z4X2xlbiAtIDEsIHN0cmxlbihvYmotJmd0O25hbWUpKTsKQEAgLTE5NDEsNiAmIzQzOzE5NTAsMTMgQEAgc3RhdGljIGJvb2wgbWFwX2lzX21tYXBhYmxlKHN0cnVjdCBicGZfb2JqZWN0ICpvYmosIHN0cnVjdCBicGZfbWFwICptYXApCiAJaWYgKCFtYXAtJmd0O2J0Zl92YWx1ZV90eXBlX2lkKQogCQlyZXR1cm4gZmFsc2U7CiAKJiM0MzsJLyoKJiM0MzsJICogVGhlIGludGVybmFsIFBFUkNQVSBtYXBzIGFyZSBub3QgbW1hcGJsZSBiZWNhdXNlIHRoZSB1bmRlcmx5aW5nCiYjNDM7CSAqIHBlcmNwdV9hcnJheSBtYXBzIGRvIG5vdCBoYXZlIG1tYXAgc3VwcG9ydC4KJiM0MzsJICovCiYjNDM7CWlmIChtYXAtJmd0O2xpYmJwZl90eXBlID09IExJQkJQRl9NQVBfUEVSQ1BVKQomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwogCXQgPSBidGZfX3R5cGVfYnlfaWQob2JqLSZndDtidGYsIG1hcC0mZ3Q7YnRmX3ZhbHVlX3R5cGVfaWQpOwogCWlmICghYnRmX2lzX2RhdGFzZWModCkpCiAJCXJldHVybiBmYWxzZTsKQEAgLTE5NjIsNiAmIzQzOzE5NzgsNyBAQCBzdGF0aWMgaW50CiBicGZfb2JqZWN0X19pbml0X2ludGVybmFsX21hcChzdHJ1Y3QgYnBmX29iamVjdCAqb2JqLCBlbnVtIGxpYmJwZl9tYXBfdHlwZSB0eXBlLAogCQkJICAgICAgY29uc3QgY2hhciAqcmVhbF9uYW1lLCBpbnQgc2VjX2lkeCwgdm9pZCAqZGF0YSwgc2l6ZV90IGRhdGFfc3opCiB7CiYjNDM7CWJvb2wgaXNfcGVyY3B1ID0gdHlwZSA9PSBMSUJCUEZfTUFQX1BFUkNQVTsKIAlzdHJ1Y3QgYnBmX21hcF9kZWYgKmRlZjsKIAlzdHJ1Y3QgYnBmX21hcCAqbWFwOwogCXNpemVfdCBtbWFwX3N6OwpAQCAtMTk3NSw3ICYjNDM7MTk5Miw3IEBAIGJwZl9vYmplY3RfX2luaXRfaW50ZXJuYWxfbWFwKHN0cnVjdCBicGZfb2JqZWN0ICpvYmosIGVudW0gbGliYnBmX21hcF90eXBlIHR5cGUsCiAJbWFwLSZndDtzZWNfaWR4ID0gc2VjX2lkeDsKIAltYXAtJmd0O3NlY19vZmZzZXQgPSAwOwogCW1hcC0mZ3Q7cmVhbF9uYW1lID0gc3RyZHVwKHJlYWxfbmFtZSk7Ci0JbWFwLSZndDtuYW1lID0gaW50ZXJuYWxfbWFwX25hbWUob2JqLCByZWFsX25hbWUpOwomIzQzOwltYXAtJmd0O25hbWUgPSBpbnRlcm5hbF9tYXBfbmFtZShvYmosIHJlYWxfbmFtZSwgdHlwZSk7CiAJaWYgKCFtYXAtJmd0O3JlYWxfbmFtZSB8fCAhbWFwLSZndDtuYW1lKSB7CiAJCXpmcmVlKCZhbXA7bWFwLSZndDtyZWFsX25hbWUpOwogCQl6ZnJlZSgmYW1wO21hcC0mZ3Q7bmFtZSk7CkBAIC0xOTgzLDcgJiM0MzsyMDAwLDcgQEAgYnBmX29iamVjdF9faW5pdF9pbnRlcm5hbF9tYXAoc3RydWN0IGJwZl9vYmplY3QgKm9iaiwgZW51bSBsaWJicGZfbWFwX3R5cGUgdHlwZSwKIAl9CiAKIAlkZWYgPSAmYW1wO21hcC0mZ3Q7ZGVmOwotCWRlZi0mZ3Q7dHlwZSA9IEJQRl9NQVBfVFlQRV9BUlJBWTsKJiM0MzsJZGVmLSZndDt0eXBlID0gaXNfcGVyY3B1ID8gQlBGX01BUF9UWVBFX1BFUkNQVV9BUlJBWSA6IEJQRl9NQVBfVFlQRV9BUlJBWTsKIAlkZWYtJmd0O2tleV9zaXplID0gc2l6ZW9mKGludCk7CiAJZGVmLSZndDt2YWx1ZV9zaXplID0gZGF0YV9zejsKIAlkZWYtJmd0O21heF9lbnRyaWVzID0gMTsKQEAgLTE5OTYsOCAmIzQzOzIwMTMsOSBAQCBicGZfb2JqZWN0X19pbml0X2ludGVybmFsX21hcChzdHJ1Y3QgYnBmX29iamVjdCAqb2JqLCBlbnVtIGxpYmJwZl9tYXBfdHlwZSB0eXBlLAogCWlmIChtYXBfaXNfbW1hcGFibGUob2JqLCBtYXApKQogCQlkZWYtJmd0O21hcF9mbGFncyB8PSBCUEZfRl9NTUFQQUJMRTsKIAotCXByX2RlYnVnKCYjMzQ7bWFwICYjMzk7JXMmIzM5OyAoZ2xvYmFsIGRhdGEpOiBhdCBzZWNfaWR4ICVkLCBvZmZzZXQgJXp1LCBmbGFncyAleC5cbiYjMzQ7LAotCQkgbWFwLSZndDtuYW1lLCBtYXAtJmd0O3NlY19pZHgsIG1hcC0mZ3Q7c2VjX29mZnNldCwgZGVmLSZndDttYXBfZmxhZ3MpOwomIzQzOwlwcl9kZWJ1ZygmIzM0O21hcCAmIzM5OyVzJiMzOTsgKGdsb2JhbCAlc2RhdGEpOiBhdCBzZWNfaWR4ICVkLCBvZmZzZXQgJXp1LCBmbGFncyAleC5cbiYjMzQ7LAomIzQzOwkJIG1hcC0mZ3Q7bmFtZSwgaXNfcGVyY3B1ID8gJiMzNDtwZXJjcHUgJiMzNDsgOiAmIzM0OyYjMzQ7LCBtYXAtJmd0O3NlY19pZHgsCiYjNDM7CQkgbWFwLSZndDtzZWNfb2Zmc2V0LCBkZWYtJmd0O21hcF9mbGFncyk7CiAKIAltbWFwX3N6ID0gYnBmX21hcF9tbWFwX3N6KG1hcCk7CiAJbWFwLSZndDttbWFwZWQgPSBtbWFwKE5VTEwsIG1tYXBfc3osIFBST1RfUkVBRCB8IFBST1RfV1JJVEUsCkBAIC0yMDU3LDYgJiM0MzsyMDc1LDEzIEBAIHN0YXRpYyBpbnQgYnBmX29iamVjdF9faW5pdF9nbG9iYWxfZGF0YV9tYXBzKHN0cnVjdCBicGZfb2JqZWN0ICpvYmopCiAJCQkJCQkJICAgIE5VTEwsCiAJCQkJCQkJICAgIHNlY19kZXNjLSZndDtkYXRhLSZndDtkX3NpemUpOwogCQkJYnJlYWs7CiYjNDM7CQljYXNlIFNFQ19QRVJDUFU6CiYjNDM7CQkJc2VjX25hbWUgPSBlbGZfc2VjX25hbWUob2JqLCBlbGZfc2VjX2J5X2lkeChvYmosIHNlY19pZHgpKTsKJiM0MzsJCQllcnIgPSBicGZfb2JqZWN0X19pbml0X2ludGVybmFsX21hcChvYmosIExJQkJQRl9NQVBfUEVSQ1BVLAomIzQzOwkJCQkJCQkgICAgc2VjX25hbWUsIHNlY19pZHgsCiYjNDM7CQkJCQkJCSAgICBzZWNfZGVzYy0mZ3Q7ZGF0YS0mZ3Q7ZF9idWYsCiYjNDM7CQkJCQkJCSAgICBzZWNfZGVzYy0mZ3Q7ZGF0YS0mZ3Q7ZF9zaXplKTsKJiM0MzsJCQlicmVhazsKIAkJZGVmYXVsdDoKIAkJCS8qIHNraXAgKi8KIAkJCWJyZWFrOwpAQCAtNDAxNiw2ICYjNDM7NDA0MSwxMSBAQCBzdGF0aWMgaW50IGJwZl9vYmplY3RfX2VsZl9jb2xsZWN0KHN0cnVjdCBicGZfb2JqZWN0ICpvYmopCiAJCQkJc2VjX2Rlc2MtJmd0O3NlY190eXBlID0gU0VDX1JPREFUQTsKIAkJCQlzZWNfZGVzYy0mZ3Q7c2hkciA9IHNoOwogCQkJCXNlY19kZXNjLSZndDtkYXRhID0gZGF0YTsKJiM0MzsJCQl9IGVsc2UgaWYgKHN0cmNtcChuYW1lLCBQRVJDUFVfU0VDKSA9PSAwIHx8CiYjNDM7CQkJCSAgIHN0cl9oYXNfcGZ4KG5hbWUsIFBFUkNQVV9TRUMgJiMzNDsuJiMzNDspKSB7CiYjNDM7CQkJCXNlY19kZXNjLSZndDtzZWNfdHlwZSA9IFNFQ19QRVJDUFU7CiYjNDM7CQkJCXNlY19kZXNjLSZndDtzaGRyID0gc2g7CiYjNDM7CQkJCXNlY19kZXNjLSZndDtkYXRhID0gZGF0YTsKIAkJCX0gZWxzZSBpZiAoc3RyY21wKG5hbWUsIFNUUlVDVF9PUFNfU0VDKSA9PSAwIHx8CiAJCQkJICAgc3RyY21wKG5hbWUsIFNUUlVDVF9PUFNfTElOS19TRUMpID09IDAgfHwKIAkJCQkgICBzdHJjbXAobmFtZSwgJiMzNDs/JiMzNDsgU1RSVUNUX09QU19TRUMpID09IDAgfHwKQEAgLTQ1NDQsNiAmIzQzOzQ1NzQsNyBAQCBzdGF0aWMgYm9vbCBicGZfb2JqZWN0X19zaG5keF9pc19kYXRhKGNvbnN0IHN0cnVjdCBicGZfb2JqZWN0ICpvYmosCiAJY2FzZSBTRUNfQlNTOgogCWNhc2UgU0VDX0RBVEE6CiAJY2FzZSBTRUNfUk9EQVRBOgomIzQzOwljYXNlIFNFQ19QRVJDUFU6CiAJCXJldHVybiB0cnVlOwogCWRlZmF1bHQ6CiAJCXJldHVybiBmYWxzZTsKQEAgLTQ1NjksNiAmIzQzOzQ2MDAsOCBAQCBicGZfb2JqZWN0X19zZWN0aW9uX3RvX2xpYmJwZl9tYXBfdHlwZShjb25zdCBzdHJ1Y3QgYnBmX29iamVjdCAqb2JqLCBpbnQgc2huZHgpCiAJCXJldHVybiBMSUJCUEZfTUFQX0RBVEE7CiAJY2FzZSBTRUNfUk9EQVRBOgogCQlyZXR1cm4gTElCQlBGX01BUF9ST0RBVEE7CiYjNDM7CWNhc2UgU0VDX1BFUkNQVToKJiM0MzsJCXJldHVybiBMSUJCUEZfTUFQX1BFUkNQVTsKIAlkZWZhdWx0OgogCQlyZXR1cm4gTElCQlBGX01BUF9VTlNQRUM7CiAJfQpAQCAtNDk0NCw3ICYjNDM7NDk3Nyw3IEBAIHN0YXRpYyBpbnQgbWFwX2ZpbGxfYnRmX3R5cGVfaW5mbyhzdHJ1Y3QgYnBmX29iamVjdCAqb2JqLCBzdHJ1Y3QgYnBmX21hcCAqbWFwKQogCiAJLyoKIAkgKiBMTFZNIGFubm90YXRlcyBnbG9iYWwgZGF0YSBkaWZmZXJlbnRseSBpbiBCVEYsIHRoYXQgaXMsCi0JICogb25seSBhcyAmIzM5Oy5kYXRhJiMzOTssICYjMzk7LmJzcyYjMzk7IG9yICYjMzk7LnJvZGF0YSYjMzk7LgomIzQzOwkgKiBvbmx5IGFzICYjMzk7LmRhdGEmIzM5OywgJiMzOTsuYnNzJiMzOTssICYjMzk7LnBlcmNwdSYjMzk7IG9yICYjMzk7LnJvZGF0YSYjMzk7LgogCSAqLwogCWlmICghYnBmX21hcF9faXNfaW50ZXJuYWwobWFwKSkKIAkJcmV0dXJuIC1FTk9FTlQ7CkBAIC01MjkzLDE4ICYjNDM7NTMyNiwyNiBAQCBzdGF0aWMgaW50CiBicGZfb2JqZWN0X19wb3B1bGF0ZV9pbnRlcm5hbF9tYXAoc3RydWN0IGJwZl9vYmplY3QgKm9iaiwgc3RydWN0IGJwZl9tYXAgKm1hcCkKIHsKIAllbnVtIGxpYmJwZl9tYXBfdHlwZSBtYXBfdHlwZSA9IG1hcC0mZ3Q7bGliYnBmX3R5cGU7CiYjNDM7CWJvb2wgaXNfcGVyY3B1ID0gbWFwX3R5cGUgPT0gTElCQlBGX01BUF9QRVJDUFU7CiYjNDM7CWNvbnN0IF9fdTY0IHVwZGF0ZV9mbGFncyA9IGlzX3BlcmNwdSA/IEJQRl9GX0FMTF9DUFVTIDogMDsKIAlpbnQgZXJyLCB6ZXJvID0gMDsKIAlzaXplX3QgbW1hcF9zejsKIAomIzQzOwlpZiAoaXNfcGVyY3B1ICZhbXA7JmFtcDsgIW9iai0mZ3Q7Z2VuX2xvYWRlciAmYW1wOyZhbXA7ICFrZXJuZWxfc3VwcG9ydHMob2JqLCBGRUFUX1BFUkNQVV9EQVRBKSkgewomIzQzOwkJcHJfd2FybigmIzM0O21hcCAmIzM5OyVzJiMzOTs6IGtlcm5lbCBkb2VzIG5vdCBzdXBwb3J0IHBlcmNwdSBkYXRhLlxuJiMzNDssCiYjNDM7CQkJYnBmX21hcF9fbmFtZShtYXApKTsKJiM0MzsJCXJldHVybiAtRU9QTk9UU1VQUDsKJiM0MzsJfQomIzQzOwogCWlmIChvYmotJmd0O2dlbl9sb2FkZXIpIHsKIAkJYnBmX2dlbl9fbWFwX3VwZGF0ZV9lbGVtKG9iai0mZ3Q7Z2VuX2xvYWRlciwgbWFwIC0gb2JqLSZndDttYXBzLAotCQkJCQkgbWFwLSZndDttbWFwZWQsIG1hcC0mZ3Q7ZGVmLnZhbHVlX3NpemUpOwomIzQzOwkJCQkJIG1hcC0mZ3Q7bW1hcGVkLCBtYXAtJmd0O2RlZi52YWx1ZV9zaXplLCB1cGRhdGVfZmxhZ3MpOwogCQlpZiAobWFwX3R5cGUgPT0gTElCQlBGX01BUF9ST0RBVEEgfHwgbWFwX3R5cGUgPT0gTElCQlBGX01BUF9LQ09ORklHKQogCQkJYnBmX2dlbl9fbWFwX2ZyZWV6ZShvYmotJmd0O2dlbl9sb2FkZXIsIG1hcCAtIG9iai0mZ3Q7bWFwcyk7CiAJCXJldHVybiAwOwogCX0KIAotCWVyciA9IGJwZl9tYXBfdXBkYXRlX2VsZW0obWFwLSZndDtmZCwgJmFtcDt6ZXJvLCBtYXAtJmd0O21tYXBlZCwgMCk7CiYjNDM7CWVyciA9IGJwZl9tYXBfdXBkYXRlX2VsZW0obWFwLSZndDtmZCwgJmFtcDt6ZXJvLCBtYXAtJmd0O21tYXBlZCwgdXBkYXRlX2ZsYWdzKTsKIAlpZiAoZXJyKSB7CiAJCWVyciA9IC1lcnJubzsKIAkJcHJfd2FybigmIzM0O21hcCAmIzM5OyVzJiMzOTs6IGZhaWxlZCB0byBzZXQgaW5pdGlhbCBjb250ZW50czogJXNcbiYjMzQ7LApAQCAtNTM0OSw2ICYjNDM7NTM5MCwxMyBAQCBicGZfb2JqZWN0X19wb3B1bGF0ZV9pbnRlcm5hbF9tYXAoc3RydWN0IGJwZl9vYmplY3QgKm9iaiwgc3RydWN0IGJwZl9tYXAgKm1hcCkKIAkJCXJldHVybiBlcnI7CiAJCX0KIAkJbWFwLSZndDttbWFwZWQgPSBtbWFwZWQ7CiYjNDM7CX0gZWxzZSBpZiAoaXNfcGVyY3B1KSB7CiYjNDM7CQlpZiAobXByb3RlY3QobWFwLSZndDttbWFwZWQsIG1tYXBfc3osIFBST1RfUkVBRCkpIHsKJiM0MzsJCQllcnIgPSAtZXJybm87CiYjNDM7CQkJcHJfd2FybigmIzM0O21hcCAmIzM5OyVzJiMzOTs6IGZhaWxlZCB0byBtcHJvdGVjdCgpIGNvbnRlbnRzOiAlc1xuJiMzNDssCiYjNDM7CQkJCWJwZl9tYXBfX25hbWUobWFwKSwgZXJyc3RyKGVycikpOwomIzQzOwkJCXJldHVybiBlcnI7CiYjNDM7CQl9CiAJfSBlbHNlIGlmIChtYXAtJmd0O21tYXBlZCkgewogCQltdW5tYXAobWFwLSZndDttbWFwZWQsIG1tYXBfc3opOwogCQltYXAtJmd0O21tYXBlZCA9IE5VTEw7CkBAIC01NjI3LDYgJiM0Mzs1Njc1LDkgQEAgYnBmX29iamVjdF9fY3JlYXRlX21hcHMoc3RydWN0IGJwZl9vYmplY3QgKm9iaikKIAkJICovCiAJCWlmIChicGZfbWFwX19pc19pbnRlcm5hbChtYXApICZhbXA7JmFtcDsgIWtlcm5lbF9zdXBwb3J0cyhvYmosIEZFQVRfR0xPQkFMX0RBVEEpKQogCQkJbWFwLSZndDthdXRvY3JlYXRlID0gZmFsc2U7CiYjNDM7CQlpZiAoYnBmX21hcF9faXNfaW50ZXJuYWwobWFwKSAmYW1wOyZhbXA7IGJwZl9tYXBfX3R5cGUobWFwKSA9PSBCUEZfTUFQX1RZUEVfUEVSQ1BVX0FSUkFZICZhbXA7JmFtcDsKJiM0MzsJCSAgICAha2VybmVsX3N1cHBvcnRzKG9iaiwgRkVBVF9QRVJDUFVfREFUQSkpCiYjNDM7CQkJbWFwLSZndDthdXRvY3JlYXRlID0gZmFsc2U7CiAKIAkJaWYgKCFtYXAtJmd0O2F1dG9jcmVhdGUpIHsKIAkJCXByX2RlYnVnKCYjMzQ7bWFwICYjMzk7JXMmIzM5Ozogc2tpcHBlZCBhdXRvLWNyZWF0aW5nLi4uXG4mIzM0OywgbWFwLSZndDtuYW1lKTsKQEAgLTEwODA3LDExICYjNDM7MTA4NTgsMTYgQEAgc3RhdGljIGJvb2wgbWFwX3VzZXNfcmVhbF9uYW1lKGNvbnN0IHN0cnVjdCBicGZfbWFwICptYXApCiAJICogc3VjaCBtYXAmIzM5O3MgY29ycmVzcG9uZGluZyBFTEYgc2VjdGlvbiBuYW1lIGFzIGEgbWFwIG5hbWUuCiAJICogVGhpcyBjaGVjayBkaXN0aW5ndWlzaGVzIC5kYXRhLy5yb2RhdGEgZnJvbSAuZGF0YS4qIGFuZCAucm9kYXRhLioKIAkgKiBtYXBzIHRvIGtub3cgd2hpY2ggbmFtZSBoYXMgdG8gYmUgcmV0dXJuZWQgdG8gdGhlIHVzZXIuCiYjNDM7CSAqIE1hcCBuYW1lIG9mIHRoZSBjdXN0b20gLnBlcmNwdS4qIG1hcHMgbWlnaHQgYmUgdHJ1bmNhdGVkIHRvCiYjNDM7CSAqIEJQRl9PQkpfTkFNRV9MRU4tMSBjaGFycyBpbiBpbnRlcm5hbF9tYXBfbmFtZSgpLiBIZW5jZSwgcGVyY3B1IGRhdGEKJiM0MzsJICogbWFwcyBtdXN0IHVzZSByZWFsIG5hbWUgZm9yIHRoZWlyIHVzZXItdmlzaWJsZSBuYW1lLgogCSAqLwogCWlmIChtYXAtJmd0O2xpYmJwZl90eXBlID09IExJQkJQRl9NQVBfREFUQSAmYW1wOyZhbXA7IHN0cmNtcChtYXAtJmd0O3JlYWxfbmFtZSwgREFUQV9TRUMpICE9IDApCiAJCXJldHVybiB0cnVlOwogCWlmIChtYXAtJmd0O2xpYmJwZl90eXBlID09IExJQkJQRl9NQVBfUk9EQVRBICZhbXA7JmFtcDsgc3RyY21wKG1hcC0mZ3Q7cmVhbF9uYW1lLCBST0RBVEFfU0VDKSAhPSAwKQogCQlyZXR1cm4gdHJ1ZTsKJiM0MzsJaWYgKG1hcC0mZ3Q7bGliYnBmX3R5cGUgPT0gTElCQlBGX01BUF9QRVJDUFUpCiYjNDM7CQlyZXR1cm4gdHJ1ZTsKIAlyZXR1cm4gZmFsc2U7CiB9CiAKZGlmZiAtLWdpdCBhL3Rvb2xzL2xpYi9icGYvbGliYnBmX2ludGVybmFsLmggYi90b29scy9saWIvYnBmL2xpYmJwZl9pbnRlcm5hbC5oCmluZGV4IDdhNzRhYmI5MDRmOGIuLjRjNDZkMzRmYzA1NWQgMTAwNjQ0Ci0tLSBhL3Rvb2xzL2xpYi9icGYvbGliYnBmX2ludGVybmFsLmgKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvbGliL2JwZi9saWJicGZfaW50ZXJuYWwuaApAQCAtNDAxLDYgJiM0Mzs0MDEsOCBAQCBlbnVtIGtlcm5fZmVhdHVyZV9pZCB7CiAJRkVBVF9CVEZfTEFZT1VULAogCS8qIEtlcm5lbCBzdXBwb3J0cyBCUEYgc3lzY2FsbCBjb21tb24gYXR0cmlidXRlcyAqLwogCUZFQVRfQlBGX1NZU0NBTExfQ09NTU9OX0FUVFJTLAomIzQzOwkvKiBLZXJuZWwgc3VwcG9ydHMgcGVyY3B1IGRhdGEgKi8KJiM0MzsJRkVBVF9QRVJDUFVfREFUQSwKIAlfX0ZFQVRfQ05ULAogfTsKIApkaWZmIC0tZ2l0IGEvdG9vbHMvbGliL2JwZi9za2VsX2ludGVybmFsLmggYi90b29scy9saWIvYnBmL3NrZWxfaW50ZXJuYWwuaAppbmRleCA1M2ZlZTUzZDM2ZDUxLi4xZjNmMzMyZGZmYmU5IDEwMDY0NAotLS0gYS90b29scy9saWIvYnBmL3NrZWxfaW50ZXJuYWwuaAomIzQzOyYjNDM7JiM0MzsgYi90b29scy9saWIvYnBmL3NrZWxfaW50ZXJuYWwuaApAQCAtMTMxLDggJiM0MzsxMzEsMTAgQEAgc3RhdGljIGlubGluZSB2b2lkIHNrZWxfZnJlZV9tYXBfZGF0YSh2b2lkICpwLCBfX3U2NCBhZGRyLCBzaXplX3Qgc3opCiB7CiAJaWYgKGFkZHIgIT0gfjBVTEwpCiAJCWt2ZnJlZShwKTsKLQkvKiBXaGVuIGFkZHIgPT0gfjBVTEwgdGhlICYjMzk7cCYjMzk7IHBvaW50cyB0bwotCSAqICgoc3RydWN0IGJwZl9hcnJheSAqKW1hcCktJmd0O3ZhbHVlLiBTZWUgc2tlbF9maW5hbGl6ZV9tYXBfZGF0YS4KJiM0MzsJLyoKJiM0MzsJICogV2hlbiBhZGRyID09IH4wVUxMIHRoZSBpbml0IGJ1ZmZlciBoYXMgYWxyZWFkeSBiZWVuIHJlbGVhc2VkLgomIzQzOwkgKiBGb3Igc2tlbF9maW5hbGl6ZV9tYXBfZGF0YSgpLCAmIzM5O3AmIzM5OyBwb2ludHMgdG8KJiM0MzsJICogKChzdHJ1Y3QgYnBmX2FycmF5ICopbWFwKS0mZ3Q7dmFsdWUuCiAJICovCiB9CiAKQEAgLTE3MCw2ICYjNDM7MTcyLDE1IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCAqc2tlbF9maW5hbGl6ZV9tYXBfZGF0YShfX3U2NCAqaW5pdF92YWwsIHNpemVfdCBtbWFwX3N6LCBpbnQKIAlyZXR1cm4gYWRkcjsKIH0KIAomIzQzO3N0YXRpYyBpbmxpbmUgaW50IHNrZWxfcHJvdGVjdF9tYXBfZGF0YSh2b2lkICpwLCBfX3U2NCAqaW5pdF92YWwsIHNpemVfdCBzeikKJiM0Mzt7CiYjNDM7CSh2b2lkKXN6OwomIzQzOwomIzQzOwlrdmZyZWUocCk7CiYjNDM7CSppbml0X3ZhbCA9IH4wVUxMOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiAjZWxzZQogCiBzdGF0aWMgaW5saW5lIHZvaWQgKnNrZWxfYWxsb2Moc2l6ZV90IHNpemUpCkBAIC0yMDgsNiAmIzQzOzIxOSwxNSBAQCBzdGF0aWMgaW5saW5lIHZvaWQgKnNrZWxfZmluYWxpemVfbWFwX2RhdGEoX191NjQgKmluaXRfdmFsLCBzaXplX3QgbW1hcF9zeiwgaW50CiAJCXJldHVybiBOVUxMOwogCXJldHVybiBhZGRyOwogfQomIzQzOwomIzQzO3N0YXRpYyBpbmxpbmUgaW50IHNrZWxfcHJvdGVjdF9tYXBfZGF0YSh2b2lkICpwLCBfX3U2NCAqaW5pdF92YWwsIHNpemVfdCBzeikKJiM0Mzt7CiYjNDM7CSh2b2lkKWluaXRfdmFsOwomIzQzOwomIzQzOwlpZiAobXByb3RlY3QocCwgc3osIFBST1RfUkVBRCkpCiYjNDM7CQlyZXR1cm4gLWVycm5vOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiAjZW5kaWYKIAogc3RhdGljIGlubGluZSBpbnQgc2tlbF9jbG9zZW56KGludCBmZCkKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9NYWtlZmlsZSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9NYWtlZmlsZQppbmRleCBkMzY1NWE3MDY0ODI2Li41NjBjZTQwMTZmYmZmIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvTWFrZWZpbGUKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL01ha2VmaWxlCkBAIC01MzEsNyAmIzQzOzUzMSw3IEBAIExTS0VMU19TSUdORUQgOj0gZmVudHJ5X3Rlc3QuYyBmZXhpdF90ZXN0LmMgYXRvbWljcy5jCiAKICMgR2VuZXJhdGUgYm90aCBsaWdodCBza2VsZXRvbiBhbmQgbGliYnBmIHNrZWxldG9uIGZvciB0aGVzZQogTFNLRUxTX0VYVFJBIDo9IHRlc3Rfa3N5bXNfbW9kdWxlLmMgdGVzdF9rc3ltc193ZWFrLmMga2Z1bmNfY2FsbF90ZXN0LmMgXAotCWtmdW5jX2NhbGxfdGVzdF9zdWJwcm9nLmMKJiM0MzsJa2Z1bmNfY2FsbF90ZXN0X3N1YnByb2cuYyB0ZXN0X2dsb2JhbF9wZXJjcHVfZGF0YS5jCiBTS0VMX0JMQUNLTElTVCAmIzQzOz0gJCQoTFNLRUxTKSAkJChMU0tFTFNfU0lHTkVEKQogCiB0ZXN0X3N0YXRpY19saW5rZWQuc2tlbC5oLWRlcHMgOj0gdGVzdF9zdGF0aWNfbGlua2VkMS5icGYubyB0ZXN0X3N0YXRpY19saW5rZWQyLmJwZi5vCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9nbG9iYWxfZGF0YV9pbml0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9nbG9iYWxfZGF0YV9pbml0LmMKaW5kZXggODQ2NjMzMmQ3NDA2Zi4uMjYyNTY1MWIzNGM3ZSAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvZ2xvYmFsX2RhdGFfaW5pdC5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2dsb2JhbF9kYXRhX2luaXQuYwpAQCAtMSw1ICYjNDM7MSw4IEBACiAvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAogI2luY2x1ZGUgJmx0O3Rlc3RfcHJvZ3MuaCZndDsKJiM0MzsjaW5jbHVkZSAmIzM0O2JwZi9saWJicGZfaW50ZXJuYWwuaCYjMzQ7CiYjNDM7I2luY2x1ZGUgJiMzNDt0ZXN0X2dsb2JhbF9wZXJjcHVfZGF0YS5za2VsLmgmIzM0OwomIzQzOyNpbmNsdWRlICYjMzQ7dGVzdF9nbG9iYWxfcGVyY3B1X2RhdGEubHNrZWwuaCYjMzQ7CiAKIHZvaWQgdGVzdF9nbG9iYWxfZGF0YV9pbml0KHZvaWQpCiB7CkBAIC02MCwzICYjNDM7NjMsMzEwIEBAIHZvaWQgdGVzdF9nbG9iYWxfZGF0YV9pbml0KHZvaWQpCiAJZnJlZShuZXd2YWwpOwogCWJwZl9vYmplY3RfX2Nsb3NlKG9iaik7CiB9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgdGVzdF9wZXJjcHVfZGF0YV9vbl9jcHVzKHN0cnVjdCBicGZfbWFwICptYXAsIGludCBtYXBfZmQsIGludCBwcm9nX2ZkLCBpbnQgKnJ1bnApCiYjNDM7ewomIzQzOwlfX3U2NCBhcmdzWzJdID0gezB4MTIzNFVMTCwgMHg1Njc4VUxMfTsKJiM0MzsJTElCQlBGX09QVFMoYnBmX3Rlc3RfcnVuX29wdHMsIHRvcHRzLAomIzQzOwkJICAgIC5jdHhfaW4gPSBhcmdzLAomIzQzOwkJICAgIC5jdHhfc2l6ZV9pbiA9IHNpemVvZihhcmdzKSwKJiM0MzsJCSAgICAuZmxhZ3MgPSBCUEZfRl9URVNUX1JVTl9PTl9DUFUsCiYjNDM7CSk7CiYjNDM7CWludCBpLCBlcnIsIGtleSA9IDAsIG51bV9vbmxpbmUsIHJ1biA9IDA7CiYjNDM7CWJvb2wgKm9ubGluZTsKJiM0MzsKJiM0MzsJZXJyID0gcGFyc2VfY3B1X21hc2tfZmlsZSgmIzM0Oy9zeXMvZGV2aWNlcy9zeXN0ZW0vY3B1L29ubGluZSYjMzQ7LCAmYW1wO29ubGluZSwgJmFtcDtudW1fb25saW5lKTsKJiM0MzsJaWYgKCFBU1NFUlRfT0soZXJyLCAmIzM0O3BhcnNlX2NwdV9tYXNrX2ZpbGUmIzM0OykpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CS8qIHJ1biBvbiBldmVyeSBvbmxpbmUtQ1BVICovCiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBudW1fb25saW5lOyBpJiM0MzsmIzQzOykgewomIzQzOwkJc3RydWN0IHRlc3RfZ2xvYmFsX3BlcmNwdV9kYXRhX19wZXJjcHUgZGF0YSA9IHt9OwomIzQzOwkJX191NjQgZmxhZ3M7CiYjNDM7CiYjNDM7CQlpZiAoIW9ubGluZVtpXSkKJiM0MzsJCQljb250aW51ZTsKJiM0MzsKJiM0MzsJCXRvcHRzLmNwdSA9IGk7CiYjNDM7CQl0b3B0cy5yZXR2YWwgPSAtMTsKJiM0MzsJCWVyciA9IGJwZl9wcm9nX3Rlc3RfcnVuX29wdHMocHJvZ19mZCwgJmFtcDt0b3B0cyk7CiYjNDM7CQlBU1NFUlRfT0soZXJyLCAmIzM0O2JwZl9wcm9nX3Rlc3RfcnVuX29wdHMmIzM0Oyk7CiYjNDM7CQlBU1NFUlRfRVEodG9wdHMucmV0dmFsLCAwLCAmIzM0O2JwZl9wcm9nX3Rlc3RfcnVuX29wdHMgcmV0dmFsJiMzNDspOwomIzQzOwomIzQzOwkJZmxhZ3MgPSAoKF9fdTY0KSBpICZsdDsmbHQ7IDMyKSB8IEJQRl9GX0NQVTsKJiM0MzsJCWlmIChtYXApCiYjNDM7CQkJZXJyID0gYnBmX21hcF9fbG9va3VwX2VsZW0obWFwLCAmYW1wO2tleSwgc2l6ZW9mKGtleSksICZhbXA7ZGF0YSwgc2l6ZW9mKGRhdGEpLAomIzQzOwkJCQkJCSAgIGZsYWdzKTsKJiM0MzsJCWVsc2UKJiM0MzsJCQllcnIgPSBicGZfbWFwX2xvb2t1cF9lbGVtX2ZsYWdzKG1hcF9mZCwgJmFtcDtrZXksICZhbXA7ZGF0YSwgZmxhZ3MpOwomIzQzOwkJaWYgKCFBU1NFUlRfT0soZXJyLCAmIzM0O2xvb2t1cF9lbGVtIG9uIGNwdSYjMzQ7KSkKJiM0MzsJCQlicmVhazsKJiM0MzsKJiM0MzsJCUFTU0VSVF9FUSgqcnVucCwgJiM0MzsmIzQzO3J1biwgJiMzNDtydW4mIzM0Oyk7CiYjNDM7CQlBU1NFUlRfRVEoZGF0YS5jcHVfaWQsIGksICYjMzQ7ZGF0YS5jcHVfaWQmIzM0Oyk7CiYjNDM7CQlBU1NFUlRfRVEoZGF0YS5kYXRhLCAxLCAmIzM0O2RhdGEuZGF0YSYjMzQ7KTsKJiM0MzsJCUFTU0VSVF9UUlVFKGRhdGEuc2V0LCAmIzM0O2RhdGEuc2V0JiMzNDspOwomIzQzOwkJQVNTRVJUX0VRKGRhdGEubnVtc1s2XSwgMHhjMGRlLCAmIzM0O2RhdGEubnVtc1s2XSYjMzQ7KTsKJiM0MzsJCUFTU0VSVF9FUShkYXRhLnN0cnVjdF9kYXRhLmksIDEsICYjMzQ7c3RydWN0X2RhdGEuaSYjMzQ7KTsKJiM0MzsJCUFTU0VSVF9UUlVFKGRhdGEuc3RydWN0X2RhdGEuc2V0LCAmIzM0O3N0cnVjdF9kYXRhLnNldCYjMzQ7KTsKJiM0MzsJCUFTU0VSVF9FUShkYXRhLnN0cnVjdF9kYXRhLm51bXNbNl0sIDB4YzBkZSwgJiMzNDtzdHJ1Y3RfZGF0YS5udW1zWzZdJiMzNDspOwomIzQzOwl9CiYjNDM7CiYjNDM7CWZyZWUob25saW5lKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgdGVzdF9nbG9iYWxfcGVyY3B1X2RhdGFfaW5pdCh2b2lkKQomIzQzO3sKJiM0MzsJc3RydWN0IHRlc3RfZ2xvYmFsX3BlcmNwdV9kYXRhX19wZXJjcHUgaW5pdF92YWx1ZSA9IHt9OwomIzQzOwlzdHJ1Y3QgdGVzdF9nbG9iYWxfcGVyY3B1X2RhdGFfX3BlcmNwdSAqaW5pdF9kYXRhOwomIzQzOwlzdHJ1Y3QgdGVzdF9nbG9iYWxfcGVyY3B1X2RhdGEgKnNrZWwgPSBOVUxMOwomIzQzOwlzaXplX3QgaW5pdF9kYXRhX3N6OwomIzQzOwlzdHJ1Y3QgYnBmX21hcCAqbWFwOwomIzQzOwlpbnQgcHJvZ19mZCwgZXJyOwomIzQzOwomIzQzOwlza2VsID0gdGVzdF9nbG9iYWxfcGVyY3B1X2RhdGFfX29wZW4oKTsKJiM0MzsJaWYgKCFBU1NFUlRfT0tfUFRSKHNrZWwsICYjMzQ7dGVzdF9nbG9iYWxfcGVyY3B1X2RhdGFfX29wZW4mIzM0OykpCiYjNDM7CQlnb3RvIG91dDsKJiM0MzsJaWYgKCFBU1NFUlRfT0tfUFRSKHNrZWwtJmd0O3BlcmNwdSwgJiMzNDtza2VsLSZndDtwZXJjcHUmIzM0OykpCiYjNDM7CQlnb3RvIG91dDsKJiM0MzsJaWYgKCFBU1NFUlRfT0tfUFRSKHNrZWwtJmd0O2RhdGFfcGVyY3B1LCAmIzM0O3NrZWwtJmd0O2RhdGFfcGVyY3B1JiMzNDspKQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CWlmICghQVNTRVJUX09LX1BUUihza2VsLSZndDtwZXJjcHVfZGF0YSwgJiMzNDtza2VsLSZndDtwZXJjcHVfZGF0YSYjMzQ7KSkKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwlpZiAoIUFTU0VSVF9PS19QVFIoc2tlbC0mZ3Q7cGVyY3B1X2xvb29vb29vb29uZywgJiMzNDtza2VsLSZndDtwZXJjcHVfbG9vb29vb29vb25nJiMzNDspKQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CiYjNDM7CUFTU0VSVF9TVFJFUShicGZfbWFwX19uYW1lKHNrZWwtJmd0O21hcHMucGVyY3B1X2RhdGEpLCAmIzM0Oy5wZXJjcHUuZGF0YSYjMzQ7LAomIzQzOwkJICAgICAmIzM0Oy5wZXJjcHUuZGF0YSBtYXAgbmFtZSYjMzQ7KTsKJiM0MzsJQVNTRVJUX1NUUkVRKGJwZl9tYXBfX25hbWUoc2tlbC0mZ3Q7bWFwcy5kYXRhX3BlcmNwdSksICYjMzQ7LmRhdGEucGVyY3B1JiMzNDssCiYjNDM7CQkgICAgICYjMzQ7LmRhdGEucGVyY3B1IG1hcCBuYW1lJiMzNDspOwomIzQzOwlBU1NFUlRfU1RSRVEoYnBmX21hcF9fbmFtZShza2VsLSZndDttYXBzLnBlcmNwdV9sb29vb29vb29vbmcpLCAmIzM0Oy5wZXJjcHUubG9vb29vb29vb25nJiMzNDssCiYjNDM7CQkgICAgICYjMzQ7bG9uZyBtYXAgbmFtZSYjMzQ7KTsKJiM0MzsJQVNTRVJUX1NUUkVRKGJwZl9tYXBfX25hbWUoc2tlbC0mZ3Q7bWFwcy5wZXJjcHUpLCAmIzM0Oy5wZXJjcHUmIzM0OywgJiMzNDttYXAgbmFtZSYjMzQ7KTsKJiM0MzsJQVNTRVJUX0VRKHNrZWwtJmd0O3BlcmNwdS0mZ3Q7ZGF0YSwgLTEsICYjMzQ7c2tlbC0mZ3Q7cGVyY3B1LSZndDtkYXRhJiMzNDspOwomIzQzOwlBU1NFUlRfRkFMU0Uoc2tlbC0mZ3Q7cGVyY3B1LSZndDtzZXQsICYjMzQ7c2tlbC0mZ3Q7cGVyY3B1LSZndDtzZXQmIzM0Oyk7CiYjNDM7CUFTU0VSVF9FUShza2VsLSZndDtwZXJjcHUtJmd0O251bXNbNl0sIDAsICYjMzQ7c2tlbC0mZ3Q7cGVyY3B1LSZndDtudW1zWzZdJiMzNDspOwomIzQzOwlBU1NFUlRfRVEoc2tlbC0mZ3Q7cGVyY3B1LSZndDtzdHJ1Y3RfZGF0YS5pLCAtMSwgJiMzNDtzdHJ1Y3RfZGF0YS5pJiMzNDspOwomIzQzOwlBU1NFUlRfRkFMU0Uoc2tlbC0mZ3Q7cGVyY3B1LSZndDtzdHJ1Y3RfZGF0YS5zZXQsICYjMzQ7c3RydWN0X2RhdGEuc2V0JiMzNDspOwomIzQzOwlBU1NFUlRfRVEoc2tlbC0mZ3Q7cGVyY3B1LSZndDtzdHJ1Y3RfZGF0YS5udW1zWzZdLCAwLCAmIzM0O3N0cnVjdF9kYXRhLm51bXNbNl0mIzM0Oyk7CiYjNDM7CiYjNDM7CW1hcCA9IHNrZWwtJmd0O21hcHMucGVyY3B1OwomIzQzOwlpZiAoIUFTU0VSVF9FUShicGZfbWFwX190eXBlKG1hcCksIEJQRl9NQVBfVFlQRV9QRVJDUFVfQVJSQVksICYjMzQ7YnBmX21hcF9fdHlwZSYjMzQ7KSkKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwomIzQzOwlpbml0X3ZhbHVlLmRhdGEgPSAyOwomIzQzOwlpbml0X3ZhbHVlLm51bXNbNl0gPSAtMTsKJiM0MzsJaW5pdF92YWx1ZS5zdHJ1Y3RfZGF0YS5pID0gMjsKJiM0MzsJaW5pdF92YWx1ZS5zdHJ1Y3RfZGF0YS5udW1zWzZdID0gLTE7CiYjNDM7CWVyciA9IGJwZl9tYXBfX3NldF9pbml0aWFsX3ZhbHVlKG1hcCwgJmFtcDtpbml0X3ZhbHVlLCBzaXplb2YoaW5pdF92YWx1ZSkpOwomIzQzOwlpZiAoIUFTU0VSVF9PSyhlcnIsICYjMzQ7YnBmX21hcF9fc2V0X2luaXRpYWxfdmFsdWUmIzM0OykpCiYjNDM7CQlnb3RvIG91dDsKJiM0MzsKJiM0MzsJaW5pdF9kYXRhID0gYnBmX21hcF9faW5pdGlhbF92YWx1ZShtYXAsICZhbXA7aW5pdF9kYXRhX3N6KTsKJiM0MzsJaWYgKCFBU1NFUlRfT0tfUFRSKGluaXRfZGF0YSwgJiMzNDticGZfbWFwX19pbml0aWFsX3ZhbHVlJiMzNDspKQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CiYjNDM7CUFTU0VSVF9FUShpbml0X2RhdGEtJmd0O2RhdGEsIGluaXRfdmFsdWUuZGF0YSwgJiMzNDtpbml0X3ZhbHVlIGRhdGEmIzM0Oyk7CiYjNDM7CUFTU0VSVF9FUShpbml0X2RhdGEtJmd0O3NldCwgaW5pdF92YWx1ZS5zZXQsICYjMzQ7aW5pdF92YWx1ZSBzZXQmIzM0Oyk7CiYjNDM7CUFTU0VSVF9FUShpbml0X2RhdGEtJmd0O3N0cnVjdF9kYXRhLmksIGluaXRfdmFsdWUuc3RydWN0X2RhdGEuaSwgJiMzNDtpbml0X3ZhbHVlIHN0cnVjdF9kYXRhLmkmIzM0Oyk7CiYjNDM7CUFTU0VSVF9FUShpbml0X2RhdGEtJmd0O3N0cnVjdF9kYXRhLm51bXNbNl0sIGluaXRfdmFsdWUuc3RydWN0X2RhdGEubnVtc1s2XSwKJiM0MzsJCSAgJiMzNDtpbml0X3ZhbHVlIHN0cnVjdF9kYXRhLm51bXNbNl0mIzM0Oyk7CiYjNDM7CUFTU0VSVF9FUShpbml0X2RhdGFfc3osIHNpemVvZihpbml0X3ZhbHVlKSwgJiMzNDtpbml0X3ZhbHVlIHNpemUmIzM0Oyk7CiYjNDM7CUFTU0VSVF9FUSgodm9pZCAqKSBpbml0X2RhdGEsICh2b2lkICopIHNrZWwtJmd0O3BlcmNwdSwgJiMzNDtza2VsLSZndDtwZXJjcHUgZXEgaW5pdF9kYXRhJiMzNDspOwomIzQzOwlBU1NFUlRfRVEoc2tlbC0mZ3Q7cGVyY3B1LSZndDtkYXRhLCBpbml0X3ZhbHVlLmRhdGEsICYjMzQ7c2tlbC0mZ3Q7cGVyY3B1LSZndDtkYXRhJiMzNDspOwomIzQzOwlBU1NFUlRfRVEoc2tlbC0mZ3Q7cGVyY3B1LSZndDtzZXQsIGluaXRfdmFsdWUuc2V0LCAmIzM0O3NrZWwtJmd0O3BlcmNwdS0mZ3Q7c2V0JiMzNDspOwomIzQzOwlBU1NFUlRfRVEoc2tlbC0mZ3Q7cGVyY3B1LSZndDtzdHJ1Y3RfZGF0YS5pLCBpbml0X3ZhbHVlLnN0cnVjdF9kYXRhLmksCiYjNDM7CQkgICYjMzQ7c2tlbC0mZ3Q7cGVyY3B1LSZndDtzdHJ1Y3RfZGF0YS5pJiMzNDspOwomIzQzOwlBU1NFUlRfRVEoc2tlbC0mZ3Q7cGVyY3B1LSZndDtzdHJ1Y3RfZGF0YS5udW1zWzZdLCBpbml0X3ZhbHVlLnN0cnVjdF9kYXRhLm51bXNbNl0sCiYjNDM7CQkgICYjMzQ7c2tlbC0mZ3Q7cGVyY3B1LSZndDtzdHJ1Y3RfZGF0YS5udW1zWzZdJiMzNDspOwomIzQzOwomIzQzOwllcnIgPSB0ZXN0X2dsb2JhbF9wZXJjcHVfZGF0YV9fbG9hZChza2VsKTsKJiM0MzsJaWYgKCFBU1NFUlRfT0soZXJyLCAmIzM0O3Rlc3RfZ2xvYmFsX3BlcmNwdV9kYXRhX19sb2FkJiMzNDspKQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CiYjNDM7CUFTU0VSVF9PS19QVFIoc2tlbC0mZ3Q7cGVyY3B1LCAmIzM0O3NrZWwtJmd0O3BlcmNwdSYjMzQ7KTsKJiM0MzsKJiM0MzsJcHJvZ19mZCA9IGJwZl9wcm9ncmFtX19mZChza2VsLSZndDtwcm9ncy51cGRhdGVfcGVyY3B1X2RhdGEpOwomIzQzOwl0ZXN0X3BlcmNwdV9kYXRhX29uX2NwdXMobWFwLCBicGZfbWFwX19mZChtYXApLCBwcm9nX2ZkLCAmYW1wO3NrZWwtJmd0O2Jzcy0mZ3Q7cnVuKTsKJiM0MzsKJiM0MztvdXQ6CiYjNDM7CXRlc3RfZ2xvYmFsX3BlcmNwdV9kYXRhX19kZXN0cm95KHNrZWwpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCB0ZXN0X2dsb2JhbF9wZXJjcHVfZGF0YV9sc2tlbCh2b2lkKQomIzQzO3sKJiM0MzsJc3RydWN0IHRlc3RfZ2xvYmFsX3BlcmNwdV9kYXRhX2xza2VsICpsc2tlbCA9IE5VTEw7CiYjNDM7CWludCBwcm9nX2ZkLCBtYXBfZmQ7CiYjNDM7CiYjNDM7CWxza2VsID0gdGVzdF9nbG9iYWxfcGVyY3B1X2RhdGFfbHNrZWxfX29wZW5fYW5kX2xvYWQoKTsKJiM0MzsJaWYgKCFBU1NFUlRfT0tfUFRSKGxza2VsLCAmIzM0O3Rlc3RfZ2xvYmFsX3BlcmNwdV9kYXRhX2xza2VsX19vcGVuX2FuZF9sb2FkJiMzNDspKQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CiYjNDM7CW1hcF9mZCA9IGxza2VsLSZndDttYXBzLnBlcmNwdS5tYXBfZmQ7CiYjNDM7CXByb2dfZmQgPSBsc2tlbC0mZ3Q7cHJvZ3MudXBkYXRlX3BlcmNwdV9kYXRhLnByb2dfZmQ7CiYjNDM7CXRlc3RfcGVyY3B1X2RhdGFfb25fY3B1cyhOVUxMLCBtYXBfZmQsIHByb2dfZmQsICZhbXA7bHNrZWwtJmd0O2Jzcy0mZ3Q7cnVuKTsKJiM0MzsKJiM0MztvdXQ6CiYjNDM7CXRlc3RfZ2xvYmFsX3BlcmNwdV9kYXRhX2xza2VsX19kZXN0cm95KGxza2VsKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBjcmVhdGVfcmRvbmx5X3BlcmNwdV9hcnJheSh2b2lkKQomIzQzO3sKJiM0MzsJTElCQlBGX09QVFMoYnBmX21hcF9jcmVhdGVfb3B0cywgbWFwX29wdHMsCiYjNDM7CQkgICAgLm1hcF9mbGFncyA9IEJQRl9GX1JET05MWV9QUk9HLAomIzQzOwkpOwomIzQzOwlpbnQga2V5ID0gMCwgbWFwX2ZkLCBlcnI7CiYjNDM7CV9fdTY0IHZhbHVlID0gMDsKJiM0MzsKJiM0MzsJbWFwX2ZkID0gYnBmX21hcF9jcmVhdGUoQlBGX01BUF9UWVBFX1BFUkNQVV9BUlJBWSwgJiMzNDtwZXJjcHVfcm9fbWFwJiMzNDssIHNpemVvZihpbnQpLAomIzQzOwkJCQlzaXplb2YoX191NjQpLCAxLCAmYW1wO21hcF9vcHRzKTsKJiM0MzsJaWYgKCFBU1NFUlRfR0UobWFwX2ZkLCAwLCAmIzM0O2JwZl9tYXBfY3JlYXRlJiMzNDspKQomIzQzOwkJcmV0dXJuIC0xOwomIzQzOwomIzQzOwllcnIgPSBicGZfbWFwX3VwZGF0ZV9lbGVtKG1hcF9mZCwgJmFtcDtrZXksICZhbXA7dmFsdWUsIEJQRl9GX0FMTF9DUFVTKTsKJiM0MzsJaWYgKCFBU1NFUlRfT0soZXJyLCAmIzM0O2JwZl9tYXBfdXBkYXRlX2VsZW0mIzM0OykpCiYjNDM7CQlnb3RvIG91dDsKJiM0MzsKJiM0MzsJZXJyID0gYnBmX21hcF9mcmVlemUobWFwX2ZkKTsKJiM0MzsJaWYgKCFBU1NFUlRfT0soZXJyLCAmIzM0O2JwZl9tYXBfZnJlZXplJiMzNDspKQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CiYjNDM7CXJldHVybiBtYXBfZmQ7CiYjNDM7CiYjNDM7b3V0OgomIzQzOwljbG9zZShtYXBfZmQpOwomIzQzOwlyZXR1cm4gLTE7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIHRlc3RfZ2xvYmFsX3BlcmNwdV9kYXRhX3Jkb25seV9kaXJlY3RfcmVhZCh2b2lkKQomIzQzO3sKJiM0MzsJLyoKJiM0MzsJICogUmF3IGluc3RydWN0aW9ucyB3aXRoIG1hbnVhbGx5IHByZXBhcmVkIHJkb25seSBwZXJjcHVfYXJyYXkgbWFwCiYjNDM7CSAqIGZvciB0ZXN0aW5nIGRpcmVjdC1yZWFkIGdsb2JhbCBwZXJjcHUgZGF0YSwgYmVjYXVzZSBsaWJicGYKJiM0MzsJICogZG9lc24mIzM5O3QgaGF2ZSByZG9ubHkgaW50ZXJuYWwgcGVyY3B1X2FycmF5IG1hcCBzdXBwb3J0IGZvcgomIzQzOwkgKiBnbG9iYWwgcGVyY3B1IGRhdGEuCiYjNDM7CSAqLwomIzQzOwlzdHJ1Y3QgYnBmX2luc24gaW5zbnNbXSA9IHsKJiM0MzsJCUJQRl9MRF9NQVBfVkFMVUUoQlBGX1JFR18xLCAwLCAwKSwKJiM0MzsJCUJQRl9MRFhfTUVNKEJQRl9EVywgQlBGX1JFR18wLCBCUEZfUkVHXzEsIDApLAomIzQzOwkJQlBGX0VYSVRfSU5TTigpLAomIzQzOwl9OwomIzQzOwlpbnQgbWFwX2ZkLCBwcm9nX2ZkOwomIzQzOwomIzQzOwltYXBfZmQgPSBjcmVhdGVfcmRvbmx5X3BlcmNwdV9hcnJheSgpOwomIzQzOwlpZiAobWFwX2ZkICZsdDsgMCkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJaW5zbnNbMF0uaW1tID0gbWFwX2ZkOwomIzQzOwlwcm9nX2ZkID0gYnBmX3Byb2dfbG9hZChCUEZfUFJPR19UWVBFX1NPQ0tFVF9GSUxURVIsICYjMzQ7cGVyY3B1X3JvX3Byb2cmIzM0OywgJiMzNDtHUEwmIzM0OywgaW5zbnMsCiYjNDM7CQkJCUFSUkFZX1NJWkUoaW5zbnMpLCBOVUxMKTsKJiM0MzsJaWYgKEFTU0VSVF9HRShwcm9nX2ZkLCAwLCAmIzM0O2JwZl9wcm9nX2xvYWQmIzM0OykpCiYjNDM7CQljbG9zZShwcm9nX2ZkKTsKJiM0MzsJY2xvc2UobWFwX2ZkKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgdGVzdF9nbG9iYWxfcGVyY3B1X2RhdGFfcmRvbmx5X2RpcmVjdF93cml0ZSh2b2lkKQomIzQzO3sKJiM0MzsJTElCQlBGX09QVFMoYnBmX3Byb2dfbG9hZF9vcHRzLCBwcm9nX29wdHMpOwomIzQzOwkvKiBTZWUgdGhlIGNvbW1lbnQgaW4gdGVzdF9nbG9iYWxfcGVyY3B1X2RhdGFfcmRvbmx5X2RpcmVjdF9yZWFkKCkgKi8KJiM0MzsJc3RydWN0IGJwZl9pbnNuIGluc25zW10gPSB7CiYjNDM7CQlCUEZfTERfTUFQX1ZBTFVFKEJQRl9SRUdfMSwgMCwgMCksCiYjNDM7CQlCUEZfTERYX01FTShCUEZfRFcsIEJQRl9SRUdfMCwgQlBGX1JFR18xLCAwKSwKJiM0MzsJCUJQRl9TVF9NRU0oQlBGX0RXLCBCUEZfUkVHXzEsIDAsIDApLAomIzQzOwkJQlBGX0VYSVRfSU5TTigpLAomIzQzOwl9OwomIzQzOwljaGFyIGxvZ19idWZbMjU2XSA9IHt9OwomIzQzOwlpbnQgbWFwX2ZkLCBwcm9nX2ZkOwomIzQzOwomIzQzOwlwcm9nX29wdHMubG9nX2J1ZiA9IGxvZ19idWY7CiYjNDM7CXByb2dfb3B0cy5sb2dfc2l6ZSA9IHNpemVvZihsb2dfYnVmKTsKJiM0MzsJcHJvZ19vcHRzLmxvZ19sZXZlbCA9IDE7CiYjNDM7CiYjNDM7CW1hcF9mZCA9IGNyZWF0ZV9yZG9ubHlfcGVyY3B1X2FycmF5KCk7CiYjNDM7CWlmIChtYXBfZmQgJmx0OyAwKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwlpbnNuc1swXS5pbW0gPSBtYXBfZmQ7CiYjNDM7CXByb2dfZmQgPSBicGZfcHJvZ19sb2FkKEJQRl9QUk9HX1RZUEVfU09DS0VUX0ZJTFRFUiwgJiMzNDtwZXJjcHVfcm9fcHJvZyYjMzQ7LCAmIzM0O0dQTCYjMzQ7LCBpbnNucywKJiM0MzsJCQkJQVJSQVlfU0laRShpbnNucyksICZhbXA7cHJvZ19vcHRzKTsKJiM0MzsJaWYgKCFBU1NFUlRfTFQocHJvZ19mZCwgMCwgJiMzNDticGZfcHJvZ19sb2FkJiMzNDspKQomIzQzOwkJY2xvc2UocHJvZ19mZCk7CiYjNDM7CWVsc2UKJiM0MzsJCUFTU0VSVF9IQVNfU1VCU1RSKGxvZ19idWYsICYjMzQ7d3JpdGUgaW50byBtYXAgZm9yYmlkZGVuJiMzNDssICYjMzQ7dmVyaWZpZXIgbG9nJiMzNDspOwomIzQzOwljbG9zZShtYXBfZmQpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCB0ZXN0X2dsb2JhbF9wZXJjcHVfZGF0YV92ZXJpZmllcl9sb2codm9pZCkKJiM0Mzt7CiYjNDM7CVJVTl9URVNUUyh0ZXN0X2dsb2JhbF9wZXJjcHVfZGF0YSk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIHRlc3RfZ2xvYmFsX3BlcmNwdV9kYXRhX2l0ZXIodm9pZCkKJiM0Mzt7CiYjNDM7CURFQ0xBUkVfTElCQlBGX09QVFMoYnBmX2l0ZXJfYXR0YWNoX29wdHMsIG9wdHMpOwomIzQzOwlzdHJ1Y3QgdGVzdF9nbG9iYWxfcGVyY3B1X2RhdGEgKnNrZWw7CiYjNDM7CXVuaW9uIGJwZl9pdGVyX2xpbmtfaW5mbyBsaW5mbyA9IHt9OwomIzQzOwlzdHJ1Y3QgYnBmX2xpbmsgKmxpbmsgPSBOVUxMOwomIzQzOwlpbnQgZmQsIG51bV9jcHVzLCBsZW4sIGVycjsKJiM0MzsJY2hhciBidWZbMTZdOwomIzQzOwomIzQzOwludW1fY3B1cyA9IGxpYmJwZl9udW1fcG9zc2libGVfY3B1cygpOwomIzQzOwlpZiAoIUFTU0VSVF9HVChudW1fY3B1cywgMCwgJiMzNDtsaWJicGZfbnVtX3Bvc3NpYmxlX2NwdXMmIzM0OykpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CXNrZWwgPSB0ZXN0X2dsb2JhbF9wZXJjcHVfZGF0YV9fb3BlbigpOwomIzQzOwlpZiAoIUFTU0VSVF9PS19QVFIoc2tlbCwgJiMzNDt0ZXN0X2dsb2JhbF9wZXJjcHVfZGF0YV9fb3BlbiYjMzQ7KSkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJc2tlbC0mZ3Q7cm9kYXRhLSZndDtudW1fY3B1cyA9IG51bV9jcHVzOwomIzQzOwlza2VsLSZndDtyb2RhdGEtJmd0O29mZnNldG9mX251bSA9IG9mZnNldG9mKHN0cnVjdCB0ZXN0X2dsb2JhbF9wZXJjcHVfZGF0YV9fcGVyY3B1LCBzdHJ1Y3RfZGF0YSk7CiYjNDM7CXNrZWwtJmd0O3JvZGF0YS0mZ3Q7b2Zmc2V0b2ZfbnVtICYjNDM7PSBzaXplb2Yoc2tlbC0mZ3Q7cGVyY3B1LSZndDtzdHJ1Y3RfZGF0YSkgLSBzaXplb2YoaW50KTsKJiM0MzsJc2tlbC0mZ3Q7cm9kYXRhLSZndDtlbGVtX3N6ID0gcm91bmR1cChzaXplb2Yoc3RydWN0IHRlc3RfZ2xvYmFsX3BlcmNwdV9kYXRhX19wZXJjcHUpLCA4KTsKJiM0MzsJc2tlbC0mZ3Q7cGVyY3B1LSZndDtzdHJ1Y3RfZGF0YS5udW1zWzZdID0gMHhjMGRlOwomIzQzOwomIzQzOwllcnIgPSB0ZXN0X2dsb2JhbF9wZXJjcHVfZGF0YV9fbG9hZChza2VsKTsKJiM0MzsJaWYgKCFBU1NFUlRfT0soZXJyLCAmIzM0O3Rlc3RfZ2xvYmFsX3BlcmNwdV9kYXRhX19sb2FkJiMzNDspKQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CiYjNDM7CWxpbmZvLm1hcC5tYXBfZmQgPSBicGZfbWFwX19mZChza2VsLSZndDttYXBzLnBlcmNwdSk7CiYjNDM7CW9wdHMubGlua19pbmZvID0gJmFtcDtsaW5mbzsKJiM0MzsJb3B0cy5saW5rX2luZm9fbGVuID0gc2l6ZW9mKGxpbmZvKTsKJiM0MzsJbGluayA9IGJwZl9wcm9ncmFtX19hdHRhY2hfaXRlcihza2VsLSZndDtwcm9ncy5kdW1wX3BlcmNwdV9kYXRhLCAmYW1wO29wdHMpOwomIzQzOwlpZiAoIUFTU0VSVF9PS19QVFIobGluaywgJiMzNDticGZfcHJvZ3JhbV9fYXR0YWNoX2l0ZXImIzM0OykpCiYjNDM7CQlnb3RvIG91dDsKJiM0MzsKJiM0MzsJZmQgPSBicGZfaXRlcl9jcmVhdGUoYnBmX2xpbmtfX2ZkKGxpbmspKTsKJiM0MzsJaWYgKCFBU1NFUlRfR0UoZmQsIDAsICYjMzQ7YnBmX2l0ZXJfY3JlYXRlJiMzNDspKQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CiYjNDM7CXdoaWxlICgobGVuID0gcmVhZChmZCwgYnVmLCBzaXplb2YoYnVmKSkpICZndDsgMCkKJiM0MzsJCWRvIHsgfSB3aGlsZSAoMCk7CiYjNDM7CUFTU0VSVF9FUShsZW4sIDAsICYjMzQ7cmVhZCBpdGVyJiMzNDspOwomIzQzOwlBU1NFUlRfVFJVRShza2VsLSZndDtic3MtJmd0O3J1bl9pdGVyLCAmIzM0O3J1bl9pdGVyJiMzNDspOwomIzQzOwlBU1NFUlRfRVEoc2tlbC0mZ3Q7YnNzLSZndDtwZXJjcHVfZGF0YV9zdW0sIDB4YzBkZSAqIG51bV9jcHVzLCAmIzM0O3BlcmNwdV9kYXRhX3N1bSYjMzQ7KTsKJiM0MzsKJiM0MzsJY2xvc2UoZmQpOwomIzQzO291dDoKJiM0MzsJYnBmX2xpbmtfX2Rlc3Ryb3kobGluayk7CiYjNDM7CXRlc3RfZ2xvYmFsX3BlcmNwdV9kYXRhX19kZXN0cm95KHNrZWwpOwomIzQzO30KJiM0MzsKJiM0Mzt2b2lkIHRlc3RfZ2xvYmFsX3BlcmNwdV9kYXRhKHZvaWQpCiYjNDM7ewomIzQzOwlpZiAoIWZlYXRfc3VwcG9ydGVkKE5VTEwsIEZFQVRfUEVSQ1BVX0RBVEEpKSB7CiYjNDM7CQl0ZXN0X19za2lwKCk7CiYjNDM7CQlyZXR1cm47CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoJiMzNDtpbml0JiMzNDspKQomIzQzOwkJdGVzdF9nbG9iYWxfcGVyY3B1X2RhdGFfaW5pdCgpOwomIzQzOwlpZiAodGVzdF9fc3RhcnRfc3VidGVzdCgmIzM0O2xza2VsJiMzNDspKQomIzQzOwkJdGVzdF9nbG9iYWxfcGVyY3B1X2RhdGFfbHNrZWwoKTsKJiM0MzsJaWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoJiMzNDtyZG9ubHlfZGlyZWN0X3JlYWQmIzM0OykpCiYjNDM7CQl0ZXN0X2dsb2JhbF9wZXJjcHVfZGF0YV9yZG9ubHlfZGlyZWN0X3JlYWQoKTsKJiM0MzsJaWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoJiMzNDtyZG9ubHlfZGlyZWN0X3dyaXRlJiMzNDspKQomIzQzOwkJdGVzdF9nbG9iYWxfcGVyY3B1X2RhdGFfcmRvbmx5X2RpcmVjdF93cml0ZSgpOwomIzQzOwl0ZXN0X2dsb2JhbF9wZXJjcHVfZGF0YV92ZXJpZmllcl9sb2coKTsKJiM0MzsJaWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoJiMzNDtpdGVyJiMzNDspKQomIzQzOwkJdGVzdF9nbG9iYWxfcGVyY3B1X2RhdGFfaXRlcigpOwomIzQzO30KZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X2dsb2JhbF9wZXJjcHVfZGF0YS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3RfZ2xvYmFsX3BlcmNwdV9kYXRhLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMC4uYTk0NDNmYjIwNTBlOQotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X2dsb2JhbF9wZXJjcHVfZGF0YS5jCkBAIC0wLDAgJiM0MzsxLDg4IEBACiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKJiM0MzsjaW5jbHVkZSAmbHQ7dm1saW51eC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDticGYvYnBmX2hlbHBlcnMuaCZndDsKJiM0MzsjaW5jbHVkZSAmIzM0O2JwZl9taXNjLmgmIzM0OwomIzQzOwomIzQzOy8qIFVzZWQgZm9yIHRlc3RpbmcgbWFwIG5hbWUuICovCiYjNDM7aW50IGxvb25nIFNFQygmIzM0Oy5wZXJjcHUubG9vb29vb29vb25nJiMzNDspOwomIzQzO2ludCBkYXRhMyBTRUMoJiMzNDsuZGF0YS5wZXJjcHUmIzM0Oyk7CiYjNDM7aW50IGRhdGEyIFNFQygmIzM0Oy5wZXJjcHUuZGF0YSYjMzQ7KTsKJiM0MzsKJiM0MztpbnQgcnVuOwomIzQzO2ludCBjcHVfaWQgU0VDKCYjMzQ7LnBlcmNwdSYjMzQ7KTsKJiM0MztpbnQgZGF0YSBTRUMoJiMzNDsucGVyY3B1JiMzNDspID0gLTE7CiYjNDM7aW50IG51bXNbN10gU0VDKCYjMzQ7LnBlcmNwdSYjMzQ7KTsKJiM0Mztib29sIHNldCBTRUMoJiMzNDsucGVyY3B1JiMzNDspID0gZmFsc2U7CiYjNDM7c3RydWN0IHsKJiM0MzsJY2hhciBzZXQ7CiYjNDM7CWludCBpOwomIzQzOwlpbnQgbnVtc1s3XTsKJiM0Mzt9IHN0cnVjdF9kYXRhIFNFQygmIzM0Oy5wZXJjcHUmIzM0OykgPSB7CiYjNDM7CS5zZXQgPSAwLAomIzQzOwkuaSA9IC0xLAomIzQzO307CiYjNDM7CiYjNDM7U0VDKCYjMzQ7cmF3X3RwL3Rhc2tfcmVuYW1lJiMzNDspCiYjNDM7X19hdXhpbGlhcnkKJiM0MztpbnQgdXBkYXRlX3BlcmNwdV9kYXRhKHZvaWQgKmN0eCkKJiM0Mzt7CiYjNDM7CXN0cnVjdF9kYXRhLm51bXNbNl0gPSAweGMwZGU7CiYjNDM7CXN0cnVjdF9kYXRhLnNldCA9IDE7CiYjNDM7CXN0cnVjdF9kYXRhLmkgPSAxOwomIzQzOwludW1zWzZdID0gMHhjMGRlOwomIzQzOwlkYXRhID0gMTsKJiM0MzsJcnVuJiM0MzsmIzQzOzsKJiM0MzsJc2V0ID0gdHJ1ZTsKJiM0MzsJY3B1X2lkID0gYnBmX2dldF9zbXBfcHJvY2Vzc29yX2lkKCk7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgY29uc3QgY2hhciBmbXRbXSBTRUMoJiMzNDsucGVyY3B1LmZtdCYjMzQ7KSA9ICYjMzQ7ZGF0YSAlZFxuJiMzNDs7CiYjNDM7CiYjNDM7U0VDKCYjMzQ7P2twcm9iZSYjMzQ7KQomIzQzO19fZmFpbHVyZSBfX21zZygmIzM0O1J7e1swLTldJiM0Mzt9fSBwb2ludHMgdG8gcGVyY3B1X2FycmF5IG1hcCB3aGljaCBjYW5ub3QgYmUgdXNlZCBhcyBjb25zdCBzdHJpbmcmIzM0OykKJiM0MztpbnQgdmVyaWZpZXJfc3RybmNtcCh2b2lkICpjdHgpCiYjNDM7ewomIzQzOwlyZXR1cm4gYnBmX3N0cm5jbXAoJiMzNDt0ZXN0JiMzNDssIDUsIGZtdCk7CiYjNDM7fQomIzQzOwomIzQzO1NFQygmIzM0Oz9rcHJvYmUmIzM0OykKJiM0MztfX2ZhaWx1cmUgX19tc2coJiMzNDtSe3tbMC05XSYjNDM7fX0gcG9pbnRzIHRvIHBlcmNwdV9hcnJheSBtYXAgd2hpY2ggY2Fubm90IGJlIHVzZWQgYXMgY29uc3Qgc3RyaW5nJiMzNDspCiYjNDM7aW50IHZlcmlmaWVyX3NucHJpbnRmKHZvaWQgKmN0eCkKJiM0Mzt7CiYjNDM7CXU2NCBhcmdzW10gPSB7IGRhdGEgfTsKJiM0MzsJY2hhciBidWZbMTI4XTsKJiM0MzsJaW50IGxlbjsKJiM0MzsKJiM0MzsJbGVuID0gYnBmX3NucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksIGZtdCwgYXJncywgc2l6ZW9mKGFyZ3MpKTsKJiM0MzsJaWYgKGxlbiAmZ3Q7IDApCiYjNDM7CQlicGZfcHJpbnRrKCYjMzQ7c25wcmludGY6ICVzXG4mIzM0OywgYnVmKTsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3ZvbGF0aWxlIGNvbnN0IF9fdTMyIG51bV9jcHVzID0gMDsKJiM0Mzt2b2xhdGlsZSBjb25zdCBpbnQgb2Zmc2V0b2ZfbnVtOwomIzQzO3ZvbGF0aWxlIGNvbnN0IGludCBlbGVtX3N6OwomIzQzO19fdTMyIHBlcmNwdV9kYXRhX3N1bSA9IDA7CiYjNDM7Ym9vbCBydW5faXRlciA9IGZhbHNlOwomIzQzOwomIzQzO1NFQygmIzM0O2l0ZXIvYnBmX21hcF9lbGVtJiMzNDspCiYjNDM7X19hdXhpbGlhcnkKJiM0MztpbnQgZHVtcF9wZXJjcHVfZGF0YShzdHJ1Y3QgYnBmX2l0ZXJfX2JwZl9tYXBfZWxlbSAqY3R4KQomIzQzO3sKJiM0MzsJdm9pZCAqcHB0ciA9IGN0eC0mZ3Q7dmFsdWU7CiYjNDM7CWludCBpOwomIzQzOwomIzQzOwlpZiAoIXBwdHIpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJcnVuX2l0ZXIgPSB0cnVlOwomIzQzOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgbnVtX2NwdXM7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQlwZXJjcHVfZGF0YV9zdW0gJiM0Mzs9ICooaW50ICopIChwcHRyICYjNDM7IG9mZnNldG9mX251bSk7CiYjNDM7CQlwcHRyICYjNDM7PSBlbGVtX3N6OwomIzQzOwl9CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztjaGFyIF9saWNlbnNlW10gU0VDKCYjMzQ7bGljZW5zZSYjMzQ7KSA9ICYjMzQ7R1BMJiMzNDs7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDE5OjQyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIzMDgzCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogODYyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgQlBGIFBlci1DUFUgQXJyYXkgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggaW50cm9kdWNpbmcgYC5wZXJjcHVgIGdsb2JhbCBkYXRhIG1hcCBzdXBwb3J0IHdpdGhpbiBCUEYuIEl0JiMzOTtzIHRvdWNoaW5nIHNvbWUgY29yZSBhcmVhcywgc3BlY2lmaWNhbGx5IGBhcnJheW1hcC5jYCwgYGZpeHVwcy5jYCwgYW5kIHRoZSB2ZXJpZmllciAoYHZlcmlmaWVyLmNgKSwgYWxvbmcgd2l0aCBzb21lIHRvb2xpbmcuIFRoZSBjb3JlIGZ1bmN0aW9uYWxpdHkgc2VlbXMgY2VudGVyZWQgYXJvdW5kIGhhbmRsaW5nIGBCUEZfTUFQX1RZUEVfUEVSQ1BVX0FSUkFZYCBtYXBzLiBUaGlzIGlzIGEgc2lnbmlmaWNhbnQgZnVuY3Rpb25hbCBjaGFuZ2Ugd2l0aGluIHRoZSBCUEYgc3Vic3lzdGVtLCB3aGljaCBzY3JlYW1zIGZvciBmdXp6aW5nIHRvIHVuY292ZXIgYW55IGVkZ2UgY2FzZSBpc3N1ZXMuCgpNeSBpbW1lZGlhdGUgZm9jdXMgcG9pbnRzIGFyZSB0aGVzZSBzeW1ib2xzOgoKKiAgIGBwZXJjcHVfYXJyYXlfbWFwX2RpcmVjdF92YWx1ZV9hZGRyYAoqICAgYHBlcmNwdV9hcnJheV9tYXBfZGlyZWN0X3ZhbHVlX21ldGFgCiogICBgYnBmX2RvX21pc2NfZml4dXBzYCDigJMgYWx0aG91Z2ggdGhhdCYjMzk7cyBhIGJpdCBicm9hZCwgaXTigJlzIHdoZXJlIHRoZSBuZXcgZml4dXAgbG9naWMgbGl2ZXMuCiogICBgY2hlY2tfbWFwX21lbV9yZWFkYCDigJMgdGhpcyBuZXcgZnVuY3Rpb24gaW4gdGhlIHZlcmlmaWVyIGlzIGludGVyZXN0aW5nLgoKTGV0JiMzOTtzIGRpdmUgaW50byBgYXJyYXltYXAuY2AgYW5kIGNoZWNrIG91dCBgcGVyY3B1X2FycmF5X21hcF9kaXJlY3RfdmFsdWVfYWRkcmAuIEl0JiMzOTtzIGBzdGF0aWNgLCBidXQsIGl0JiMzOTtzIGFzc2lnbmVkIHRvIGBtYXBfZGlyZWN0X3ZhbHVlX2FkZHJgIGluIGBwZXJjcHVfYXJyYXlfbWFwX29wc2AsIHNvIGl0JiMzOTtzIGEgZnVuY3Rpb24gcG9pbnRlciBhbmQgd29uJiMzOTt0IGJlIGlubGluZWQuIFRoYXQgbWVhbnMgaXQgKnNob3VsZCogaGF2ZSBhIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzLCBzbyBpdCYjMzk7cyBhIHZhbGlkIHRhcmdldC4gSSYjMzk7bGwgbmVlZCB0byBkb3VibGUgY2hlY2sgZm9yIGFueSBub24tc3RhdGljIGFsdGVybmF0aXZlcy4KClJpZ2h0LCBgY2hlY2tfbWFwX21lbV9yZWFkYCBpcyBgc3RhdGljYCwgYnV0IGl0JiMzOTtzIG5ldywgc28gSSYjMzk7bGwga2VlcCBpdCBvbiB0aGUgcmFkYXIuIGBicGZfZG9fbWlzY19maXh1cHNgIGlzICpub3QqIGBzdGF0aWNgIGFuZCBJIGNhbiBzZWUgaXQmIzM5O3MgY2FsbGVkIGZyb20gYHZlcmlmaWVyLmNgLCB3aGljaCBtYWtlcyBpdCBhbiBpbnRlcmVzdGluZyB0YXJnZXQuIEFuZCwgaW50ZXJlc3RpbmdseSwgYGJwZl9tYXBfZGlyZWN0X3JlYWRgIGlzIGFsc28gbm90IHN0YXRpYy4gTGV0JiMzOTtzIHNlZS4uLiBBaGEhIEkgc2VlIHRoYXQgYGJwZl9tYXBfZGlyZWN0X3JlYWRgIGhhcyBhIGNydWNpYWwgY2hhbmdlOgoKYGBgYwpAQCAtNTY2Miw2ICYjNDM7NTY1Nyw4IEBAIGludCBicGZfbWFwX2RpcmVjdF9yZWFkKHN0cnVjdCBicGZfbWFwICptYXAsIGludCBvZmYsIGludCBzaXplLCB1NjQgKnZhbCwKIAl1NjQgYWRkcjsKIAlpbnQgZXJyOwogCiYjNDM7CWlmIChtYXAtJmd0O21hcF90eXBlID09IEJQRl9NQVBfVFlQRV9JTlNOX0FSUkFZIHx8IG1hcC0mZ3Q7bWFwX3R5cGUgPT0gQlBGX01BUF9UWVBFX1BFUkNQVV9BUlJBWSkKJiM0MzsJCXJldHVybiAtRUlOVkFMOwogCWVyciA9IG1hcC0mZ3Q7b3BzLSZndDttYXBfZGlyZWN0X3ZhbHVlX2FkZHIobWFwLCAmYW1wO2FkZHIsIG9mZik7CiBgYGAKCkl0JiMzOTtzIG5vdyByZXR1cm5pbmcgYC1FSU5WQUxgIGZvciBgQlBGX01BUF9UWVBFX1BFUkNQVV9BUlJBWWAsIHdoaWNoIGxvb2tzIGltcG9ydGFudCEKCk5vdywgdGhlIG5ldyBgY2hlY2tfbWFwX21lbV9yZWFkYCBsb29rcyBsaWtlOgoKYGBgYwomIzQzO3N0YXRpYyBpbnQgY2hlY2tfbWFwX21lbV9yZWFkKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcsIGludCBvZmYsCiYjNDM7CQkJICAgICAgaW50IGJwZl9zaXplLCBpbnQgdmFsdWVfcmVnbm8sIGJvb2wgaXNfbGRzeCkKYGBgCgpJdCYjMzk7cyBgc3RhdGljYCwgYnV0IGl0JiMzOTtzICpuZXcqIGNvZGUsIHNvIGEgZGVmaW5pdGUgdGFyZ2V0IGZvciBhbmFseXNpcy4gSSYjMzk7bGwgbmVlZCB0byBzZWUgaG93IGl0JiMzOTtzIHVzZWQuCgpMYXN0bHksIEkgc2hvdWxkIHByb2JhYmx5IGdsYW5jZSBhdCB0aGUgS2NvbmZpZyB0byBzZWUgd2hhdCB0aGUgbWFpbiBCUEYgY29uZmlndXJhdGlvbiBvcHRpb24gaXMuIFl1cCwgYENPTkZJR19CUEZfU1lTQ0FMTGAgc2VlbXMgdG8gYmUgdGhlIGNyaXRpY2FsIG9uZS4KCkkmIzM5O20gcmVhZHkgdG8gc3RhcnQgc29tZSB2ZXJpZmljYXRpb24gd2l0aCB0aGUgdG9vbHMgdG8gdmFsaWRhdGUgdGhpcyBwYXRjaC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAxOTo0MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDticGZfZG9fbWlzY19maXh1cHMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvYnBmLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL2ZpeHVwcy5jPTE0NTA9c3RhdGljIGludCBhZGRfaGlkZGVuX3N1YnByb2coc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICpwYXRjaCwgaW50IGxlbilcbi0tXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTE0NzgtICovXG5rZXJuZWwvYnBmL2ZpeHVwcy5jOjE0Nzk6aW50IGJwZl9kb19taXNjX2ZpeHVwcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxua2VybmVsL2JwZi9maXh1cHMuYy0xNDgwLXtcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MjAyMjA9aW50IGJwZl9jaGVjayhzdHJ1Y3QgYnBmX3Byb2cgKipwcm9nLCB1bmlvbiBicGZfYXR0ciAqYXR0ciwgYnBmcHRyX3QgdWF0dHIsXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTIwNDMyLVx0aWYgKHJldCA9PSAwKVxua2VybmVsL2JwZi92ZXJpZmllci5jOjIwNDMzOlx0XHRyZXQgPSBicGZfZG9fbWlzY19maXh1cHMoZW52KTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMDQzNC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAxOTo0MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNTAxNQoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDM2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipDb25zaWRlcmluZyBCUEYgRml4dXBzIGFuZCBQZXItQ1BVIEFycmF5IEFkZHJlc3NpbmcqKgoKUmlnaHQsIHNvIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgd2hlcmUgdG8gZGlnIGluIG9uIHRoaXMuICpgYnBmX2RvX21pc2NfZml4dXBzYCogaXMgZGVmaW5pdGVseSBhIHNvbGlkIGNhbmRpZGF0ZSBmb3IgZnVydGhlciBpbnZlc3RpZ2F0aW9uLiBJdCBzZWVtcyBsaWtlIGl0IGNvdWxkIGJlIGEgY3J1Y2lhbCBwYXJ0IG9mIHRoZSBwcm9jZXNzLCBhbmQgSSBzaG91bGQgc3RhcnQgdGhlcmUuIEJ1dCB0aGVuLCBJJiMzOTttIGFsc28gd29uZGVyaW5nIGFib3V0ICpgcGVyY3B1X2FycmF5X21hcF9kaXJlY3RfdmFsdWVfYWRkcmAqLiBDb3VsZCB0aGF0IGJlIGEgcmVsYXRlZCBhcmVhIHRoYXQgaG9sZHMgc29tZSBpbnRlcmVzdGluZyBjbHVlcz8gSSBrbm93IHRob3NlIHBlci1DUFUgYXJyYXlzIGNhbiBiZSBhIHNvdXJjZSBvZiBzb21lIHRyaWNreSBiZWhhdmlvciwgZXNwZWNpYWxseSB3aGVuIGRlYWxpbmcgd2l0aCBkaXJlY3QgYWNjZXNzLCBzbyBJIHNob3VsZCBzZWUgaWYgdGhlcmUgYXJlIGNvbm5lY3Rpb25zLiBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIGlmIHRoZXJlIGFyZSBzaGFyZWQgdmFyaWFibGVzIG9yIGZ1bmN0aW9ucyB0aGF0IGNyb3NzIGJvdGggdGhlIGZpeHVwcyBhbmQgdGhlIHBlci1DUFUgYXJyYXkuIEl0IG1heSBiZSBpbXBvcnRhbnQgdG8gZXhhbWluZSBob3cgdGhvc2UgYWRkcmVzc2VzIGFyZSBjYWxjdWxhdGVkIGFuZCB1c2VkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDE5OjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3BlcmNwdV9hcnJheV9tYXBfZGlyZWN0X3ZhbHVlX2FkZHImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvYnBmLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL2FycmF5bWFwLmM9MjUxPXN0YXRpYyB2b2lkICpwZXJjcHVfYXJyYXlfbWFwX2xvb2t1cF9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSlcbi0tXG5rZXJuZWwvYnBmL2FycmF5bWFwLmMtMjYxLVxua2VybmVsL2JwZi9hcnJheW1hcC5jOjI2MjpzdGF0aWMgaW50IHBlcmNwdV9hcnJheV9tYXBfZGlyZWN0X3ZhbHVlX2FkZHIoY29uc3Qgc3RydWN0IGJwZl9tYXAgKm1hcCwgdTY0ICppbW0sIHUzMiBvZmYpXG5rZXJuZWwvYnBmL2FycmF5bWFwLmMtMjYzLXtcbi0tXG5rZXJuZWwvYnBmL2FycmF5bWFwLmM9ODU5PWNvbnN0IHN0cnVjdCBicGZfbWFwX29wcyBwZXJjcHVfYXJyYXlfbWFwX29wcyA9IHtcbi0tXG5rZXJuZWwvYnBmL2FycmF5bWFwLmMtODY2LVx0Lm1hcF9nZW5fbG9va3VwID0gcGVyY3B1X2FycmF5X21hcF9nZW5fbG9va3VwLFxua2VybmVsL2JwZi9hcnJheW1hcC5jOjg2NzpcdC5tYXBfZGlyZWN0X3ZhbHVlX2FkZHIgPSBwZXJjcHVfYXJyYXlfbWFwX2RpcmVjdF92YWx1ZV9hZGRyLFxua2VybmVsL2JwZi9hcnJheW1hcC5jLTg2OC1cdC5tYXBfZGlyZWN0X3ZhbHVlX21ldGEgPSBwZXJjcHVfYXJyYXlfbWFwX2RpcmVjdF92YWx1ZV9tZXRhLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDE5OjQzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI1NTcxCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjoKCioqQW5hbHl6aW5nIHRoYXQgU3RhdGljIEZ1bmN0aW9uIFBvaW50ZXIgQXNzaWdubWVudCoqCgpBbHJpZ2h0LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwaWVjZSBvZiBjb2RlLCBhbmQgaXQmIzM5O3MgYSBzdGF0aWMgdmFyaWFibGUsIGJ1dCBpdCYjMzk7cyBhc3NpZ25lZCB0byBhIGZ1bmN0aW9uIHBvaW50ZXIuIFRoYXQmIzM5O3MgaW50ZXJlc3RpbmcuIFRoZSAmIzM0O3N0YXRpYyYjMzQ7IGtleXdvcmQgdGVsbHMgbWUgdGhpcyB0aGluZyBoYXMgaW50ZXJuYWwgbGlua2FnZTsgaXQmIzM5O3MgYSBkaXN0aW5jdCBzeW1ib2wgd2l0aGluIHRoaXMgY29tcGlsYXRpb24gdW5pdC4gRXZlbiB0aG91Z2ggaXQmIzM5O3Mgc3RhdGljLCB0aGUgYXNzaWdubWVudCB0byBhIGZ1bmN0aW9uIHBvaW50ZXIgbWFrZXMgaXQgYmVoYXZlIGluIGEgdmVyeSBzcGVjaWZpYyB3YXkuIEl04oCZcyBnb3QgaXRzIG93biBpZGVudGl0eSwgYXMgaXQgd2VyZSwgZGVzcGl0ZSB0aGUgbGFjayBvZiBleHRlcm5hbCBsaW5rYWdlLgoKTm93LCBsZXQmIzM5O3Mgc2VlIHdoYXQgYGNoZWNrX21hcF9tZW1fcmVhZGAgaXMgYWxsIGFib3V0LiBUaW1lIHRvIGRpdmUgZGVlcGVyIGludG8gdGhhdCBmdW5jdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAxOTo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjaGVja19tYXBfbWVtX3JlYWQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvYnBmLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL3ZlcmlmaWVyLmM9NjE0MT1zdGF0aWMgdm9pZCBhZGRfc2NhbGFyX3RvX3JlZyhzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqZHN0X3JlZywgczY0IHZhbClcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNjE1Ny1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo2MTU4OnN0YXRpYyBpbnQgY2hlY2tfbWFwX21lbV9yZWFkKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcsIGludCBvZmYsXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNjE1OS1cdFx0XHQgICAgICBpbnQgYnBmX3NpemUsIGludCB2YWx1ZV9yZWdubywgYm9vbCBpc19sZHN4KVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz02MjA5PXN0YXRpYyBpbnQgY2hlY2tfbWVtX2FjY2VzcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBpbnQgaW5zbl9pZHgsIHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcsIGFyZ25vX3QgYXJnbm8sXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTYyNTYtXHRcdH0gZWxzZSBpZiAodCA9PSBCUEZfUkVBRCBcdTAwMjZcdTAwMjYgdmFsdWVfcmVnbm8gXHUwMDNlPSAwKSB7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NjI1NzpcdFx0XHRlcnIgPSBjaGVja19tYXBfbWVtX3JlYWQoZW52LCByZWcsIG9mZiwgYnBmX3NpemUsIHZhbHVlX3JlZ25vLCBpc19sZHN4KTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy02MjU4LVx0XHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMTk6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjYxMDYKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiA1MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOgoKKipBbmFseXppbmcgUG90ZW50aWFsIE9wdGltaXphdGlvbnMgaW4gTWVtb3J5IEFjY2VzcyBDaGVja3MqKgoKUmlnaHQsIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGBjaGVja19tYXBfbWVtX3JlYWRgIGZ1bmN0aW9uLiBJdCYjMzk7cyBtYXJrZWQgYXMgYHN0YXRpY2AsIGFuZCB0aGUgb25seSBwbGFjZSBJIHNlZSBpdCBiZWluZyBjYWxsZWQgaXMgd2l0aGluIGBjaGVja19tZW1fYWNjZXNzYC4gVGhhdCBzY3JlYW1zICYjMzQ7aW5saW5pbmcgY2FuZGlkYXRlJiMzNDsgdG8gbWUuIEl0JiMzOTtzIHdvcnRoIGludmVzdGlnYXRpbmcgaWYgdGhlIGNvbXBpbGVyIGlzIGFscmVhZHkgZG9pbmcgdGhhdCBhdXRvbWF0aWNhbGx5LiBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQsIG9mIGNvdXJzZSwgYmVjYXVzZSBhbiBhc3N1bWVkIG9wdGltaXphdGlvbiBpc24mIzM5O3QgYWx3YXlzIHBlcmZvcm1lZC4gSWYgaXQmIzM5O3MgKm5vdCogYmVpbmcgaW5saW5lZCwgdGhlbiBsZXQmIzM5O3Mgc2VlIGlmIHdlIGNhbiBmb3JjZSB0aGF0LCBvciBhdCBsZWFzdCB1bmRlcnN0YW5kIHdoeSB0aGUgY29tcGlsZXIgaXNuJiMzOTt0IGRvaW5nIHNvIGF1dG9tYXRpY2FsbHkuCgpOb3csIGEgcmVsYXRlZCB0aG91Z2h0Li4uIGNvdWxkIGBicGZfbWFwX2RpcmVjdF9yZWFkYCBiZSBhIHBvdGVudGlhbCB0YXJnZXQgZnVuY3Rpb24gZm9yIGZ1cnRoZXIgb3B0aW1pemF0aW9uIG9yIHNwZWNpYWwgaGFuZGxpbmc/IEl0IHNlZW1zIGxpa2UgYSBnb29kIHBsYWNlIHRvIHN0YXJ0IGRpZ2dpbmcgZGVlcGVyIHRvIGZpbmQgb3RoZXIgb3Bwb3J0dW5pdGllcyB0byBpbXByb3ZlIHBlcmZvcm1hbmNlIGlmIHRoZSBjdXJyZW50IGlubGluaW5nIGlzIGZvdW5kIHRvIG5vdCBiZSBwZXJmb3JtZWQsIG9yIHRvIHRyeSBhbmQgaW1wcm92ZSBwZXJmb3JtYW5jZS4gTGV0JiMzOTtzIHNlZSBpZiB3ZSBjYW4gZG8gc29tZXRoaW5nIG1vcmUgd2l0aCBpdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMTk6NDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnBmX21hcF9kaXJlY3RfcmVhZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvY29uc3RfZm9sZC5jPTUwPXN0YXRpYyB2b2lkIGNvbnN0X3JlZ194ZmVyKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBjb25zdF9hcmdfaW5mbyAqY2lfb3V0LFxuLS1cbmtlcm5lbC9icGYvY29uc3RfZm9sZC5jLTE4NS1cdFx0ICAgIG9mZiBcdTAwM2MgMCB8fCBvZmYgJiM0Mzsgc2l6ZSBcdTAwM2UgbWFwLVx1MDAzZXZhbHVlX3NpemUgfHxcbmtlcm5lbC9icGYvY29uc3RfZm9sZC5jOjE4NjpcdFx0ICAgIGJwZl9tYXBfZGlyZWN0X3JlYWQobWFwLCBvZmYsIHNpemUsIFx1MDAyNnZhbCwgaXNfbGRzeCkpIHtcbmtlcm5lbC9icGYvY29uc3RfZm9sZC5jLTE4Ny1cdFx0XHQqZHN0ID0gdW5rbm93bjtcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9NTYzMz1ib29sIGJwZl9tYXBfaXNfcmRvbmx5KGNvbnN0IHN0cnVjdCBicGZfbWFwICptYXApXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTU2NTItXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NTY1MzppbnQgYnBmX21hcF9kaXJlY3RfcmVhZChzdHJ1Y3QgYnBmX21hcCAqbWFwLCBpbnQgb2ZmLCBpbnQgc2l6ZSwgdTY0ICp2YWwsXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNTY1NC1cdFx0XHRib29sIGlzX2xkc3gpXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTYxNTg9c3RhdGljIGludCBjaGVja19tYXBfbWVtX3JlYWQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZywgaW50IG9mZixcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNjE4OC1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo2MTg5Olx0XHRlcnIgPSBicGZfbWFwX2RpcmVjdF9yZWFkKG1hcCwgbWFwX29mZiwgc2l6ZSwgXHUwMDI2dmFsLCBpc19sZHN4KTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy02MTkwLVx0XHRpZiAoZXJyKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAxOTo0MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNjgzMAoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDQwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246CgoqKkludmVzdGlnYXRpbmcgYGJwZl9tYXBfZGlyZWN0X3JlYWRgKioKCkFscmlnaHQsIHNvIGBicGZfbWFwX2RpcmVjdF9yZWFkYC4uLiBJIHJlbWVtYmVyIHNlZWluZyB0aGF0LiBUaGUgZmFjdCB0aGF0IGl0JiMzOTtzICpub3QqIGRlY2xhcmVkIHN0YXRpYyBpcyBpbW1lZGlhdGVseSBpbnRlcmVzdGluZy4gVGhhdCBtZWFucyBpdCYjMzk7cyBleHBvcnRlZCBhbmQgdXNlZCBhY3Jvc3MgbXVsdGlwbGUgZmlsZXMg4oCTIHByb2JhYmx5IGEgY29yZSBCUEYgaGVscGVyIGZ1bmN0aW9uLCBvciBwZXJoYXBzIHNvbWV0aGluZyBzcGVjaWZpYyB0byBhIGNlcnRhaW4gc3Vic3lzdGVtLiBUaGF0IG5lZWRzIGZ1cnRoZXIgaW52ZXN0aWdhdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHNjb3BlIGFuZCBpbXBhY3QuCgpOb3csIHdoZXJlIHdhcyBJPyBSaWdodCwgSSBzaG91bGQgdGFrZSBhIGxvb2sgYXQgYHBlcmNwdV9hcnJheV9tYXBfZGlyZWN0X3ZhbHVlX21ldGFgLiBMZXQmIzM5O3Mgc2VlIHdoYXQgdGhhdCBob2xkcy4gVGhhdCBzZWVtcyBsaWtlIHRoZSByaWdodCBwYXRoIHRvIHRyYWNrIGRvd24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDE5OjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3BlcmNwdV9hcnJheV9tYXBfZGlyZWN0X3ZhbHVlX21ldGEmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvYnBmLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL2FycmF5bWFwLmM9MjYyPXN0YXRpYyBpbnQgcGVyY3B1X2FycmF5X21hcF9kaXJlY3RfdmFsdWVfYWRkcihjb25zdCBzdHJ1Y3QgYnBmX21hcCAqbWFwLCB1NjQgKmltbSwgdTMyIG9mZilcbi0tXG5rZXJuZWwvYnBmL2FycmF5bWFwLmMtMjc2LVxua2VybmVsL2JwZi9hcnJheW1hcC5jOjI3NzpzdGF0aWMgaW50IHBlcmNwdV9hcnJheV9tYXBfZGlyZWN0X3ZhbHVlX21ldGEoY29uc3Qgc3RydWN0IGJwZl9tYXAgKm1hcCwgdTY0IGltbSwgdTMyICpvZmYpXG5rZXJuZWwvYnBmL2FycmF5bWFwLmMtMjc4LXtcbi0tXG5rZXJuZWwvYnBmL2FycmF5bWFwLmM9ODU5PWNvbnN0IHN0cnVjdCBicGZfbWFwX29wcyBwZXJjcHVfYXJyYXlfbWFwX29wcyA9IHtcbi0tXG5rZXJuZWwvYnBmL2FycmF5bWFwLmMtODY3LVx0Lm1hcF9kaXJlY3RfdmFsdWVfYWRkciA9IHBlcmNwdV9hcnJheV9tYXBfZGlyZWN0X3ZhbHVlX2FkZHIsXG5rZXJuZWwvYnBmL2FycmF5bWFwLmM6ODY4Olx0Lm1hcF9kaXJlY3RfdmFsdWVfbWV0YSA9IHBlcmNwdV9hcnJheV9tYXBfZGlyZWN0X3ZhbHVlX21ldGEsXG5rZXJuZWwvYnBmL2FycmF5bWFwLmMtODY5LVx0Lm1hcF91cGRhdGVfZWxlbSA9IGFycmF5X21hcF91cGRhdGVfZWxlbSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMTk6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjczNTIKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiA4MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHN5bWJvbHMgYW5kIHRoZSBkaXJlY3Rpb24gdGhpcyBhbmFseXNpcyBpcyBsaWtlbHkgaGVhZGluZzoKCioqRGl2aW5nIGludG8gQlBGIERpcmVjdCBBY2Nlc3MgYW5kIEtjb25maWcgRGVwZW5kZW5jaWVzKioKCkFscmlnaHQsIG15IGluaXRpYWwgZm9jdXMgc2VlbXMgdG8gYmUgb24gYSBmZXcgc3BlY2lmaWMgQlBGLXJlbGF0ZWQgc3ltYm9sczogYHBlcmNwdV9hcnJheV9tYXBfZGlyZWN0X3ZhbHVlX2FkZHJgLCBgcGVyY3B1X2FycmF5X21hcF9kaXJlY3RfdmFsdWVfbWV0YWAsIGBicGZfZG9fbWlzY19maXh1cHNgLCBhbmQgYGJwZl9tYXBfZGlyZWN0X3JlYWRgLiBUaGVzZSBuYW1lcyBzdHJvbmdseSBzdWdnZXN0IEkmIzM5O20gZGVhbGluZyB3aXRoIGRpcmVjdCBhY2Nlc3MgdG8gcGVyLUNQVSBhcnJheSBtYXBzIHdpdGhpbiB0aGUgQlBGIGZyYW1ld29yay4gVGhhdCAmIzM0O2RpcmVjdCYjMzQ7IGtleXdvcmQgaXMgdGhlIGtleSBoZXJlLiBJdCBpbXBsaWVzIHBvdGVudGlhbGx5IGJ5cGFzc2luZyBzb21lIG9mIHRoZSBzdGFuZGFyZCBCUEYgbWFwIGFjY2VzcyBtZWNoYW5pc21zLCBhbmQgdGhhdCBpbW1lZGlhdGVseSBnZXRzIG15IGF0dGVudGlvbiwgc3BlY2lmaWNhbGx5IHJlZ2FyZGluZyBwZXJmb3JtYW5jZSBjb25zaWRlcmF0aW9ucyBhbmQgcG90ZW50aWFsIHNlY3VyaXR5IGltcGxpY2F0aW9ucyBpZiBub3QgaGFuZGxlZCBjb3JyZWN0bHkuIFdlIGFyZSwgZXNzZW50aWFsbHksIHRhbGtpbmcgYWJvdXQgZmFzdCBkYXRhIGFjY2VzcyBpbiB0aGUgQlBGIHdvcmxkLgoKR2l2ZW4gdGhpcywgYSBjcnVjaWFsIG5leHQgc3RlcCBpcyB0byBleGFtaW5lIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbiwgc3BlY2lmaWNhbGx5IGBDT05GSUdfQlBGX1NZU0NBTExgLiBUaGlzIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGlzIGZ1bmRhbWVudGFsIHRvIGVuYWJsaW5nIEJQRiBzeXN0ZW0gY2FsbHMuIFRoZSBwcmVzZW5jZSBvciBhYnNlbmNlIG9mIHRoYXQgc2V0dGluZyB3aWxsIGRldGVybWluZSB0aGUgZmVhc2liaWxpdHkgb2YgdmFyaW91cyBCUEYgb3BlcmF0aW9ucywgaW5jbHVkaW5nIHRoaXMgZGlyZWN0IGFjY2VzcyBzY2hlbWUuIEkmIzM5O2xsIG5lZWQgdG8gY29uZmlybSBpZiB0aGlzIG9wdGlvbiBpcyBlbmFibGVkLiBJIGtub3cgZnJvbSBleHBlcmllbmNlIHRoYXQgbWFueSBvZiB0aGVzZSBhZHZhbmNlZCBmZWF0dXJlcyBoaW5nZSBvbiB0aGF0IGNvcmUgc2V0dGluZy4gSXRzIHN0YXRlIHdpbGwgcHJvdmlkZSBpbW1lZGlhdGUgY29udGV4dCBvbiB3aGF0JiMzOTtzIGV2ZW4gcG9zc2libGUgd2l0aGluIHRoaXMgc3lzdGVtLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAxOTo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgQlBGX1NZU0NBTEwmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9LY29uZmlnPTI1PW1lbnUgXCYjMzQ7QlBGIHN1YnN5c3RlbVwmIzM0O1xua2VybmVsL2JwZi9LY29uZmlnLTI2LVxua2VybmVsL2JwZi9LY29uZmlnOjI3OmNvbmZpZyBCUEZfU1lTQ0FMTFxua2VybmVsL2JwZi9LY29uZmlnLTI4LVx0Ym9vbCBcJiMzNDtFbmFibGUgYnBmKCkgc3lzdGVtIGNhbGxcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMTk6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjc4MzMKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAzOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0JiMzOTtzIGludGVybmFsIG1vbm9sb2d1ZToKCioqSW52ZXN0aWdhdGluZyBCUEYgQXJyYXlNYXAgQ2hhbmdlcyoqCgpBbHJpZ2h0LCBsZXQmIzM5O3Mgc2VlLi4uIHRoZSBwYXRjaCBpbiBxdWVzdGlvbiBpcyB0b3VjaGluZyBga2VybmVsL2JwZi9hcnJheW1hcC5jYC4gVGhhdCBpbW1lZGlhdGVseSBmbGFncyBteSBhdHRlbnRpb24uIFRoaXMgaXMgY29yZSBCUEYgc3R1ZmYsIGFuZCBzcGVjaWZpY2FsbHkgZGVhbGluZyB3aXRoIGFycmF5IG1hcHMg4oCTIGEgZnVuZGFtZW50YWwgZGF0YSBzdHJ1Y3R1cmUuIEFuZCB0aGUgZmlsZSYjMzk7cyBsb2NhdGlvbiB3aXRoaW4gdGhlIGtlcm5lbCB0cmVlIHBvaW50cyB0byBpdCBiZWluZyBjb21waWxlZCBpZiBgQ09ORklHX0JQRl9TWVNDQUxMYCBpcyBlbmFibGVkLiBNYWtlcyBzZW5zZS4gQnV0IG15IG1pbmQgZHJpZnRzIC0gSSYjMzk7ZCB3YW50IHRvIHF1aWNrbHkgZG91YmxlLWNoZWNrOiBhbSBJIG1pc3NpbmcgYW55ICpvdGhlciogY29uZmlndXJhdGlvbnMgdGhhdCBtaWdodCBpbXBhY3Qgb3IgaW50ZXJhY3Qgd2l0aCB0aGlzIGNoYW5nZT8gSXMgdGhlcmUgYW55dGhpbmcgZWxzZSB0aGF0ICpjb25kaXRpb25hbGx5KiBpbmNsdWRlcywgb3IgZXhjbHVkZXMsIHBvcnRpb25zIG9mIGBhcnJheW1hcC5jYD8gR290dGEgbWFrZSBzdXJlIEkmIzM5O3ZlIGdvdCB0aGUgY29tcGxldGUgcGljdHVyZS4gVGhlIGRlcGVuZGVuY3kgb24gYENPTkZJR19CUEZfU1lTQ0FMTGAgaXMgb2J2aW91cywgYnV0IEkmIzM5O20gbG9va2luZyBmb3IgYW55dGhpbmcgbGVzcyBhcHBhcmVudCB0aGF0IHRoaXMgcGF0Y2ggKm1pZ2h0KiBiZSBjb3VwbGVkIHRvLiBHb3QgdG8gYmUgdGhvcm91Z2guCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDE5OjQ0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2FycmF5bWFwLm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvYnBmLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL01ha2VmaWxlPTEwPW9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IGJwZl9pdGVyLm8gbWFwX2l0ZXIubyB0YXNrX2l0ZXIubyBwcm9nX2l0ZXIubyBsaW5rX2l0ZXIub1xua2VybmVsL2JwZi9NYWtlZmlsZToxMTpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBoYXNodGFiLm8gYXJyYXltYXAubyBwZXJjcHVfZnJlZWxpc3QubyBicGZfbHJ1X2xpc3QubyBscG1fdHJpZS5vIG1hcF9pbl9tYXAubyBibG9vbV9maWx0ZXIub1xua2VybmVsL2JwZi9NYWtlZmlsZS0xMi1vYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBsb2NhbF9zdG9yYWdlLm8gcXVldWVfc3RhY2tfbWFwcy5vIHJpbmdidWYubyBicGZfaW5zbl9hcnJheS5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDE5OjQ0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI4Mjk3CgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogNzMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uCgoqKkJQRiBTeXN0ZW0gQ2FsbCBDb25maWd1cmF0aW9uIFBhdGgqKgoKTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gemVybyBpbiBvbiBgQlBGX1NZU0NBTExgIOKAkyB0aGF0JiMzOTtzIHRoZSBwcmltYXJ5IGNvbmZpZ3VyYXRpb24gb3B0aW9uLCB0aGUgY2VudHJhbCBjb250cm9sIHBvaW50IGZvciBCUEYgc3lzdGVtIGNhbGxzLiBTZWVtcyBzdHJhaWdodGZvcndhcmQuIEJ1dCwgd2FpdC4uLiBJIG5lZWQgdG8gYmUgbW9yZSBwcmVjaXNlIGFib3V0IHdoZXJlIHRoZSBzdXBwb3J0aW5nIGNvZGUgbGl2ZXMuCgpNeSBtaW5kIGZsYXNoZXMgdG8gYGJwZl9kb19taXNjX2ZpeHVwc2AuIEl0JiMzOTtzIGEga2V5IGZ1bmN0aW9uIGFuZCBJIHJlY2FsbCBpdCByZXNpZGVzIGluIGBmaXh1cHMuY2AuIE9rYXksIHNvIGBmaXh1cHMuY2AgaGFuZGxlcyBzb21lIEJQRiB0YXNrcyBhbmQgaXMgY29tcGlsZWQgdW5kZXIgYENPTkZJR19CUEZfU1lTQ0FMTGA/IFRoYXQgbWFrZXMgc2Vuc2UuIFdlJiMzOTtyZSBrZWVwaW5nIGV2ZXJ5dGhpbmcgcmVsYXRlZCB0byB0aGUgc3lzdGVtIGNhbGwgbmVhdGx5IGFsaWduZWQgd2l0aCB0aGlzIHByaW1hcnkgY29uZmlndXJhdGlvbiBvcHRpb24uCgpOb3csIGp1c3QgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluLCBpdCYjMzk7cyB3b3J0aCBhIHF1aWNrIGNoZWNrIG9mIHRoZSBidWlsZCBwcm9jZXNzLiBJIHdhbnQgdG8gdmVyaWZ5IHRoYXQgYGZpeHVwcy5vYCBpcyBpbmRlZWQgYmVpbmcgY29tcGlsZWQgaW4gdGhlIHJpZ2h0IHBsYWNlLiBUaW1lIHRvIGNvbnN1bHQgYGtlcm5lbC9icGYvTWFrZWZpbGVgIHRvIGNvbmZpcm0gd2hlcmUgYGZpeHVwcy5vYCBmaXRzIGludG8gdGhlIGJ1aWxkIHByb2Nlc3MuIEEgcXVpY2sgc2NhbiBzaG91bGQgY29uZmlybSB0aGF0IGxpbmsgYmV0d2VlbiBgQ09ORklHX0JQRl9TWVNDQUxMYCBhbmQgYGZpeHVwcy5vYCB3aGljaCB3aWxsIG1ha2UgbWUgZmVlbCBjb25maWRlbnQgdGhhdCB0aGUgd2hvbGUgQlBGIHN5c3RlbSBjYWxsIHNldHVwIGlzIHVuZGVyc3Rvb2QuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDE5OjQ0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2ZpeHVwcy5vJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9NYWtlZmlsZT0xMz1vYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBicGZfbG9jYWxfc3RvcmFnZS5vIGJwZl90YXNrX3N0b3JhZ2Uub1xua2VybmVsL2JwZi9NYWtlZmlsZToxNDpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBmaXh1cHMubyBjZmcubyBzdGF0ZXMubyBiYWNrdHJhY2subyBjaGVja19idGYub1xua2VybmVsL2JwZi9NYWtlZmlsZS0xNS1vYmotJHtDT05GSUdfQlBGX0xTTX1cdCAgJiM0Mzs9IGJwZl9pbm9kZV9zdG9yYWdlLm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMTk6NDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjg3OTUKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiA0NzgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBCUEYgUGF0Y2gqKgoKT2theSwgc28gdGhlIGVzc2VudGlhbCBjb25maWd1cmF0aW9uIHJlcXVpcmVtZW50IGhlcmUgaXMgZGVmaW5pdGVseSBgQlBGX1NZU0NBTExgLiBUaGF0JiMzOTtzIHRoZSBiYXNlbGluZS4gTm93LCBsZXQmIzM5O3MgY2lyY2xlIGJhY2sgdG8gdGhlIGNvcmUgc3ltYm9scyB3ZSYjMzk7cmUgaW50ZXJlc3RlZCBpbi4gV2UmIzM5O3ZlIGdvdDoKCiogICBgcGVyY3B1X2FycmF5X21hcF9kaXJlY3RfdmFsdWVfYWRkcmAKKiAgIGBwZXJjcHVfYXJyYXlfbWFwX2RpcmVjdF92YWx1ZV9tZXRhYAoqICAgYGJwZl9kb19taXNjX2ZpeHVwc2AKKiAgIGBicGZfbWFwX2RpcmVjdF9yZWFkYAoKSG9sZCBvbiBhIHNlY29uZC4uLiBgYnBmX2RvX21pc2NfZml4dXBzYC4gUmlnaHQsIHRoYXQmIzM5O3MgYSAqYmlnKiBmdW5jdGlvbi4gSXQgaGFuZGxlcyBhIGxvdCBvZiBkaWZmZXJlbnQgdGhpbmdzLCBidXQgdGhlIGNyaXRpY2FsIHBhcnQgaGVyZSBpcyB0aGUgY29uZGl0aW9uYWwgYmxvY2sgc3BlY2lmaWNhbGx5IHRhcmdldGluZyBgQlBGX01BUF9UWVBFX1BFUkNQVV9BUlJBWWAuIFRoYXQgbWFrZXMgc2Vuc2U7IHRoZSBwYXRjaCBhZGRzIHNwZWNpYWwgaGFuZGxpbmcgZm9yIHBlcmNwdSBhcnJheXMgd2l0aGluIHRoYXQgYnJvYWRlciBmdW5jdGlvbi4gVGhlIHJlbGV2YW50IGNvZGUgaXMgY2hlY2tpbmcgZm9yIHNwZWNpZmljIGluc3RydWN0aW9uIHBhdHRlcm5zLCBwYXJ0aWN1bGFybHkgYEJQRl9MRCB8IEJQRl9JTU0gfCBCUEZfRFdgIHdpdGggc291cmNlIHJlZ2lzdGVycyBgQlBGX1BTRVVET19NQVBfVkFMVUVgIG9yIGBCUEZfUFNFVURPX01BUF9JRFhfVkFMVUVgLiBJdCB2ZXJpZmllcyB0aGUgbWFwIHR5cGUgYW5kIGp1bXBzIHRvIHRoZSBuZXh0IGluc3RydWN0aW9uIGlmIGl0IGlzbiYjMzk7dCBhIHBlcmNwdSBhcnJheS4gSW5jbHVkaW5nIGBicGZfZG9fbWlzY19maXh1cHNgIGlzIGNvcnJlY3QsIGJlY2F1c2UgaXQmIzM5O3MgdGhlIGVudHJ5IHBvaW50IHRvIHRoaXMgbmV3IHBlcmNwdSBhcnJheSBsb2dpYy4KCkxldCYjMzk7cyBxdWlja2x5IGNoZWNrIGZvciBhbnkgb3RoZXIgbm9uLXN0YXRpYyBmdW5jdGlvbnMgYmVpbmcgbW9kaWZpZWQuIEFoYSwgYGFycmF5X21hcF9jaGVja19idGZgIGlzIHRvdWNoZWQsIGJ1dCB0aGF0JiMzOTtzIHN0YXRpYywgc28gaXQmIzM5O3Mgbm90IGEgY29uY2Vybi4gQW5kIGBicGZfbWFwX2RpcmVjdF9yZWFkYCBpcyBhbHNvIGdldHRpbmcgbW9kaWZpZWQuCgpBbHJpZ2h0LCB0byByZWNhcCwgdGhlIGltcG9ydGFudCBzeW1ib2xzIGFyZToKCiogICBgcGVyY3B1X2FycmF5X21hcF9kaXJlY3RfdmFsdWVfYWRkcmAKKiAgIGBwZXJjcHVfYXJyYXlfbWFwX2RpcmVjdF92YWx1ZV9tZXRhYAoqICAgYGJwZl9kb19taXNjX2ZpeHVwc2AKKiAgIGBicGZfbWFwX2RpcmVjdF9yZWFkYAoKT25lIGxhc3QgdGhpbmcgdG8gY2hlY2s6IERvZXMgYGJwZl9qaXRfc3VwcG9ydHNfcGVyY3B1X2luc24oKWAgcmVxdWlyZSBgQlBGX0pJVGA/IFRoYXQmIzM5O3MgcHJvYmFibHkgYSBnaXZlbiwgYnV0IGl0JiMzOTtzIGFsd2F5cyBnb29kIHRvIGRvdWJsZS1jaGVjayB0aGVzZSBhc3N1bXB0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMTk6NDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnBmX2ppdF9zdXBwb3J0c19wZXJjcHVfaW5zbiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYz0zMTc4PWJvb2wgYnBmX2ppdF9zdXBwb3J0c19pbnNuKHN0cnVjdCBicGZfaW5zbiAqaW5zbiwgYm9vbCBpbl9hcmVuYSlcbi0tXG5hcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYy0zMTkxLVxuYXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmM6MzE5Mjpib29sIGJwZl9qaXRfc3VwcG9ydHNfcGVyY3B1X2luc24odm9pZClcbmFyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jLTMxOTMte1xuLS1cbmFyY2gvcG93ZXJwYy9uZXQvYnBmX2ppdF9jb21wLmM9NTU2PWJvb2wgYnBmX2ppdF9zdXBwb3J0c19pbnNuKHN0cnVjdCBicGZfaW5zbiAqaW5zbiwgYm9vbCBpbl9hcmVuYSlcbi0tXG5hcmNoL3Bvd2VycGMvbmV0L2JwZl9qaXRfY29tcC5jLTU3MS1cbmFyY2gvcG93ZXJwYy9uZXQvYnBmX2ppdF9jb21wLmM6NTcyOmJvb2wgYnBmX2ppdF9zdXBwb3J0c19wZXJjcHVfaW5zbih2b2lkKVxuYXJjaC9wb3dlcnBjL25ldC9icGZfaml0X2NvbXAuYy01NzMte1xuLS1cbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmM9MjEyND1ib29sIGJwZl9qaXRfc3VwcG9ydHNfaW5zbihzdHJ1Y3QgYnBmX2luc24gKmluc24sIGJvb2wgaW5fYXJlbmEpXG4tLVxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYy0yMTQyLVxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYzoyMTQzOmJvb2wgYnBmX2ppdF9zdXBwb3J0c19wZXJjcHVfaW5zbih2b2lkKVxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYy0yMTQ0LXtcbi0tXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM9NDA1Nz1ib29sIGJwZl9qaXRfc3VwcG9ydHNfc3VicHJvZ190YWlsY2FsbHModm9pZClcbi0tXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtNDA2MS1cbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYzo0MDYyOmJvb2wgYnBmX2ppdF9zdXBwb3J0c19wZXJjcHVfaW5zbih2b2lkKVxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTQwNjMte1xuLS1cbmluY2x1ZGUvbGludXgvZmlsdGVyLmg9MTE4Mj1ib29sIGJwZl9qaXRfc3VwcG9ydHNfc3VicHJvZ190YWlsY2FsbHModm9pZCk7XG5pbmNsdWRlL2xpbnV4L2ZpbHRlci5oOjExODM6Ym9vbCBicGZfaml0X3N1cHBvcnRzX3BlcmNwdV9pbnNuKHZvaWQpO1xuaW5jbHVkZS9saW51eC9maWx0ZXIuaC0xMTg0LWJvb2wgYnBmX2ppdF9zdXBwb3J0c19rZnVuY19jYWxsKHZvaWQpO1xuLS1cbmtlcm5lbC9icGYvYXJyYXltYXAuYz0yNjI9c3RhdGljIGludCBwZXJjcHVfYXJyYXlfbWFwX2RpcmVjdF92YWx1ZV9hZGRyKGNvbnN0IHN0cnVjdCBicGZfbWFwICptYXAsIHU2NCAqaW1tLCB1MzIgb2ZmKVxuLS1cbmtlcm5lbC9icGYvYXJyYXltYXAuYy0yNjUtXG5rZXJuZWwvYnBmL2FycmF5bWFwLmM6MjY2Olx0aWYgKCFicGZfaml0X3N1cHBvcnRzX3BlcmNwdV9pbnNuKCkpXG5rZXJuZWwvYnBmL2FycmF5bWFwLmMtMjY3LVx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4tLVxua2VybmVsL2JwZi9hcnJheW1hcC5jPTI3Nz1zdGF0aWMgaW50IHBlcmNwdV9hcnJheV9tYXBfZGlyZWN0X3ZhbHVlX21ldGEoY29uc3Qgc3RydWN0IGJwZl9tYXAgKm1hcCwgdTY0IGltbSwgdTMyICpvZmYpXG4tLVxua2VybmVsL2JwZi9hcnJheW1hcC5jLTI4MS1cbmtlcm5lbC9icGYvYXJyYXltYXAuYzoyODI6XHRpZiAoIWJwZl9qaXRfc3VwcG9ydHNfcGVyY3B1X2luc24oKSlcbmtlcm5lbC9icGYvYXJyYXltYXAuYy0yODMtXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbi0tXG5rZXJuZWwvYnBmL2FycmF5bWFwLmM9Mjk0PXN0YXRpYyBpbnQgcGVyY3B1X2FycmF5X21hcF9nZW5fbG9va3VwKHN0cnVjdCBicGZfbWFwICptYXAsIHN0cnVjdCBicGZfaW5zbiAqaW5zbl9idWYpXG4tLVxua2VybmVsL2JwZi9hcnJheW1hcC5jLTI5OC1cbmtlcm5lbC9icGYvYXJyYXltYXAuYzoyOTk6XHRpZiAoIWJwZl9qaXRfc3VwcG9ydHNfcGVyY3B1X2luc24oKSlcbmtlcm5lbC9icGYvYXJyYXltYXAuYy0zMDAtXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbi0tXG5rZXJuZWwvYnBmL2NvcmUuYz0zMjkxPWJvb2wgX193ZWFrIGJwZl9qaXRfc3VwcG9ydHNfc3VicHJvZ190YWlsY2FsbHModm9pZClcbi0tXG5rZXJuZWwvYnBmL2NvcmUuYy0zMjk1LVxua2VybmVsL2JwZi9jb3JlLmM6MzI5Njpib29sIF9fd2VhayBicGZfaml0X3N1cHBvcnRzX3BlcmNwdV9pbnNuKHZvaWQpXG5rZXJuZWwvYnBmL2NvcmUuYy0zMjk3LXtcbi0tXG5rZXJuZWwvYnBmL2ZpeHVwcy5jPTE0Nzk9aW50IGJwZl9kb19taXNjX2ZpeHVwcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxuLS1cbmtlcm5lbC9icGYvZml4dXBzLmMtMTgxOS1cbmtlcm5lbC9icGYvZml4dXBzLmM6MTgyMDpcdFx0aWYgKGJwZl9qaXRfc3VwcG9ydHNfcGVyY3B1X2luc24oKSBcdTAwMjZcdTAwMjZcbmtlcm5lbC9icGYvZml4dXBzLmMtMTgyMS1cdFx0ICAgIGluc24tXHUwMDNlY29kZSA9PSAoQlBGX0xEIHwgQlBGX0lNTSB8IEJQRl9EVykgXHUwMDI2XHUwMDI2XG4tLVxua2VybmVsL2JwZi9oYXNodGFiLmM9MjQxND1zdGF0aWMgaW50IGh0YWJfcGVyY3B1X21hcF9nZW5fbG9va3VwKHN0cnVjdCBicGZfbWFwICptYXAsIHN0cnVjdCBicGZfaW5zbiAqaW5zbl9idWYpXG4tLVxua2VybmVsL2JwZi9oYXNodGFiLmMtMjQxNy1cbmtlcm5lbC9icGYvaGFzaHRhYi5jOjI0MTg6XHRpZiAoIWJwZl9qaXRfc3VwcG9ydHNfcGVyY3B1X2luc24oKSlcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTI0MTktXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTY3OTg9Ym9vbCBicGZfdmVyaWZpZXJfaW5saW5lc19oZWxwZXJfY2FsbChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzMzIgaW1tKVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNjgwNi0jZW5kaWZcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxNjgwNzpcdFx0cmV0dXJuIGVudi1cdTAwM2Vwcm9nLVx1MDAzZWppdF9yZXF1ZXN0ZWQgXHUwMDI2XHUwMDI2IGJwZl9qaXRfc3VwcG9ydHNfcGVyY3B1X2luc24oKTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNjgwOC0jZW5kaWZcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMTk6NDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzEyNzgKCQkJCQkJCW91dHB1dDogMjYKCQkJCQkJCXRob3VnaHRzOiA1MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBhcyBpZiB0aGV5IHdlcmUgbXkgb3duOgoKKipJbnZlc3RpZ2F0aW5nIEJQRiBKSVQgU3VwcG9ydCoqCgpSaWdodCwgc28gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGBCUEZfSklUYCBhbmQgYGJwZl9qaXRfc3VwcG9ydHNfcGVyY3B1X2luc24oKWAuIEl0IHNlZW1zIHRoYXQgdGhlIGxhdHRlciwgd2hpY2ggaW5kaWNhdGVzIHN1cHBvcnQgZm9yIHBlci1DUFUgaW5zdHJ1Y3Rpb24gSklULCByZWxpZXMgb24gdGhlIGZvcm1lciDigJMgYEJQRl9KSVRgIOKAkyB0byBiZSBlbmFibGVkIG9uIGFyY2hpdGVjdHVyZXMgdGhhdCBvZmZlciB0aGlzIGNhcGFiaWxpdHkuCgpUaGVyZWZvcmUsIHRoZSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byBxdWlja2x5IGRldGVybWluZSB3aGV0aGVyIGBDT05GSUdfQlBGX0pJVGAgaXMgZXZlbiBhICpyZXF1aXJlZCogY29uZmlndXJhdGlvbiBvcHRpb24gaW4gdGhpcyBjb250ZXh0LiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IGhhcHBlbnMgaWYgaXQmIzM5O3MgZGlzYWJsZWQuIFdoYXQgYXJlIHRoZSBpbXBsaWNhdGlvbnM/IERvZXMgZGlzYWJsaW5nIGl0IHJlbW92ZSB0aGUgY2FwYWJpbGl0eSB0byB1c2UgdGhlIHBlci1DUFUgSklUIGZ1bmN0aW9uYWxpdHk/IEkmIzM5O20gZ29pbmcgdG8gbG9vayBpbnRvIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgYW5kIGNvZGUgYmFzZSB0byBnZXQgdGhlIGZ1bGwgcGljdHVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMTk6NDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEJQRl9KSVQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9LY29uZmlnPTI3PWNvbmZpZyBCUEZfU1lTQ0FMTFxuLS1cbmtlcm5lbC9icGYvS2NvbmZpZy00MS1cbmtlcm5lbC9icGYvS2NvbmZpZzo0Mjpjb25maWcgQlBGX0pJVFxua2VybmVsL2JwZi9LY29uZmlnLTQzLVx0Ym9vbCBcJiMzNDtFbmFibGUgQlBGIEp1c3QgSW4gVGltZSBjb21waWxlclwmIzM0O1xuLS1cbmtlcm5lbC9icGYvS2NvbmZpZy01Ny1cbmtlcm5lbC9icGYvS2NvbmZpZzo1ODpjb25maWcgQlBGX0pJVF9BTFdBWVNfT05cbmtlcm5lbC9icGYvS2NvbmZpZy01OS1cdGJvb2wgXCYjMzQ7UGVybWFuZW50bHkgZW5hYmxlIEJQRiBKSVQgYW5kIHJlbW92ZSBCUEYgaW50ZXJwcmV0ZXJcJiMzNDtcbi0tXG5rZXJuZWwvYnBmL0tjb25maWctNjgtXG5rZXJuZWwvYnBmL0tjb25maWc6Njk6Y29uZmlnIEJQRl9KSVRfREVGQVVMVF9PTlxua2VybmVsL2JwZi9LY29uZmlnLTcwLVx0ZGVmX2Jvb2wgQVJDSF9XQU5UX0RFRkFVTFRfQlBGX0pJVCB8fCBCUEZfSklUX0FMV0FZU19PTlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAxOTo0NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMTc3MgoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDEzMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBSZWFzb25pbmcgb24gQlBGIEpJVCBSZXF1aXJlbWVudHMqKgoKT2theSwgc28gSSBuZWVkIHRvIG1ha2Ugc3VyZSBgQlBGX0pJVGAgaXMgZW5hYmxlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgY29kZS4gVGhlIGNydXggb2YgdGhlIG1hdHRlciBpcyB0aGF0IGBicGZfaml0X3N1cHBvcnRzX3BlcmNwdV9pbnNuKClgIHdpbGwgZXZhbHVhdGUgdG8gZmFsc2UgdW5sZXNzIHRoZSBKSVQgaXMgZW5hYmxlZC4gR2l2ZW4gdGhhdCB3ZSYjMzk7cmUgb24geDg2XzY0LCBhcmNoaXRlY3R1cmFsIHN1cHBvcnQgc2hvdWxkbiYjMzk7dCBiZSB0aGUgaXNzdWU7IGl0JiMzOTtzIGFsbW9zdCBjZXJ0YWlubHkgYSBKSVQgZW5hYmxlbWVudCBwcm9ibGVtLiBJIHNob3VsZCBjb25maXJtIHRoYXQgYGJwZl9qaXRfc3VwcG9ydHNfcGVyY3B1X2luc25gIGlzIGRlZmluZWQgaW4gYGFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuY2AsIHdoaWNoLCBhcyBJIHJlY2FsbCwgaXMgb25seSBjb21waWxlZCB3aGVuIGBDT05GSUdfQlBGX0pJVGAgaXMgc2V0LiBUbyBlbnN1cmUgdGhhdCYjMzk7cyB0aGUgY2FzZSwgSSBzaG91bGQgY29uZmlybSB0aGUgZGVwZW5kZW5jeSBpbiB0aGUgYnVpbGQgcHJvY2VzcyB2aWEgYGFyY2gveDg2L25ldC9NYWtlZmlsZWAuIExldCBtZSBjaGVjayB0aGF0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAxOTo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDticGZfaml0X2NvbXAubyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gveDg2L25ldC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYvbmV0L01ha2VmaWxlPTg9ZWxzZVxuYXJjaC94ODYvbmV0L01ha2VmaWxlOjk6ICAgICAgICBvYmotJChDT05GSUdfQlBGX0pJVCkgJiM0Mzs9IGJwZl9qaXRfY29tcC5vIGJwZl90aW1lZF9tYXlfZ290by5vXG5hcmNoL3g4Ni9uZXQvTWFrZWZpbGUtMTAtZW5kaWZcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMTk6NDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzIyMTgKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiA2MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gYXMgYSBmaXJzdC1wZXJzb24gYWNjb3VudDoKCioqQlBGIEpJVCBhbmQgQlRGIFJlcXVpcmVtZW50cyoqCgpBbHJpZ2h0LCBJIHNlZSB0aGUgbmVlZCB0byB1dGlsaXplIHRoZSBCUEYgSklULCB0aGF0JiMzOTtzIGNsZWFyLiBOb3csIHdpdGggdGhlIHBhdGNoIG1vZGlmeWluZyBgYXJyYXlfbWFwX2NoZWNrX2J0ZmAgdG8gcGVybWl0IGAucGVyY3B1YCBtYXBzLCBJIGhhdmUgdG8gY29uc2lkZXIgdGhlIGBDT05GSUdfREVCVUdfSU5GT19CVEZgIHJlcXVpcmVtZW50LiBHaXZlbiB0aGUgY2hhbmdlLCB3aGljaCBlbmFibGVzIGAucGVyY3B1YCBtYXBzLCBJJiMzOTtkIHNheSB0aGF0IEJURiBpcyBwcm9iYWJseSBhIG5vbi1uZWdvdGlhYmxlIHJlcXVpcmVtZW50IGhlcmUuIFRoaXMgbW9kaWZpY2F0aW9uIHRvIGBhcnJheV9tYXBfY2hlY2tfYnRmYCBtZWFucyB3ZSBhcmUgcHJvYmFibHkgZGVhbGluZyB3aXRoIGdsb2JhbCBkYXRhIG1hcHMsIHdoaWNoLCBhcyB3ZSBrbm93LCBhcmUgaGVhdmlseSByZWxpYW50IG9uIEJURiBmb3IgY29ycmVjdCB0eXBlIGluZm9ybWF0aW9uIGFuZCBoYW5kbGluZy4gU28sIHllYWgsIEJURiBpcyBhbG1vc3QgY2VydGFpbmx5IGdvaW5nIHRvIGJlIG5lZWRlZCBmb3IgdGhpcyB0byBmdW5jdGlvbiBhcyBpbnRlbmRlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMTk6NDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIERFQlVHX0lORk9fQlRGJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2xpYi9LY29uZmlnLmRlYnVnPTM3OD1jb25maWcgREVCVUdfSU5GT19TUExJVFxuLS1cbmxpYi9LY29uZmlnLmRlYnVnLTM5Ny1cbmxpYi9LY29uZmlnLmRlYnVnOjM5ODpjb25maWcgREVCVUdfSU5GT19CVEZcbmxpYi9LY29uZmlnLmRlYnVnLTM5OS1cdGJvb2wgXCYjMzQ7R2VuZXJhdGUgQlRGIHR5cGUgaW5mb3JtYXRpb25cJiMzNDtcbi0tXG5saWIvS2NvbmZpZy5kZWJ1Zz00MTk9Y29uZmlnIFBBSE9MRV9IQVNfTEFOR19FWENMVURFXG4tLVxubGliL0tjb25maWcuZGVidWctNDI3LVxubGliL0tjb25maWcuZGVidWc6NDI4OmNvbmZpZyBERUJVR19JTkZPX0JURl9NT0RVTEVTXG5saWIvS2NvbmZpZy5kZWJ1Zy00MjktXHRib29sIFwmIzM0O0dlbmVyYXRlIEJURiB0eXBlIGluZm9ybWF0aW9uIGZvciBrZXJuZWwgbW9kdWxlc1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAxOTo0NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMjY2NgoJCQkJCQkJb3V0cHV0OiAxOTEKCQkJCQkJCXRob3VnaHRzOiA2NzQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQlBGIEZ1enppbmcgQ29uZmlndXJhdGlvbiBBc3Nlc3NtZW50KioKCk9rYXksIHNvIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhlIGJlc3Qgd2F5IHRvIGFwcHJvYWNoIGZ1enppbmcgdGhpcyBwYXRjaC4gV2hpbGUgYERFQlVHX0lORk9fQlRGYCBpcyB1c3VhbGx5IGdvb2QgZm9yIEJURiB0ZXN0cywgaXQmIzM5O3Mgbm90IHRoZSBwcmltYXJ5IGNvbmNlcm4gaGVyZS4gYEJQRl9TWVNDQUxMYCBhbmQgYEJQRl9KSVRgIGFyZSBkZWZpbml0ZWx5IHRoZSBjb3JlIGNvbmZpZ3VyYXRpb25zIHRvIGVuYWJsZS4gTGV0JiMzOTtzIG1ha2Ugc3VyZSB3ZSBpbmNsdWRlIHRob3NlOgoKKiAgIGBCUEZfU1lTQ0FMTGAKKiAgIGBCUEZfSklUYAoKTm93LCByZWdhcmRpbmcgZm9jdXMgc3ltYm9scywgSSYjMzk7dmUgZ290IHRvIGVuc3VyZSB0aGUgZnV6emluZyBpcyBoaXR0aW5nIHRoZSByaWdodCBjb2RlLiBJJiMzOTttIGZvY3VzaW5nIG9uIHRoZXNlIGZvciBzdGFydGVyczoKCiogICBgcGVyY3B1X2FycmF5X21hcF9kaXJlY3RfdmFsdWVfYWRkcmAKKiAgIGBwZXJjcHVfYXJyYXlfbWFwX2RpcmVjdF92YWx1ZV9tZXRhYAoqICAgYGJwZl9kb19taXNjX2ZpeHVwc2AKKiAgIGBicGZfbWFwX2RpcmVjdF9yZWFkYAoKSG9sZCBvbiwgSSB3YXMganVzdCB0aGlua2luZyB0aGF0IGBicGZfZG9fbWlzY19maXh1cHNgIHNlZW1zIGEgbGl0dGxlIGdlbmVyYWwuIElzIHRoZXJlIGEgbW9yZSBzcGVjaWZpYyBmdW5jdGlvbiB0byB0YXJnZXQ/IFRoZSBwYXRjaCBpbnRyb2R1Y2VzIGBjaGVja19tYXBfbWVtX3JlYWRgLCB3aGljaCBpcyBzdGF0aWMsIGFuZCBjYWxsZWQgZnJvbSBgY2hlY2tfbWVtX2FjY2Vzc2AuIFNvIEkgd2lsbCBpbmNsdWRlIGBicGZfZG9fbWlzY19maXh1cHNgIGFuZCBgYnBmX21hcF9kaXJlY3RfcmVhZGAuCgpJJiMzOTtsbCBkb3VibGUtY2hlY2sgYHBlcmNwdV9hcnJheV9tYXBfZGlyZWN0X3ZhbHVlX2FkZHJgLiBZZXMsIGl0JiMzOTtzIHN0YXRpYyBpbiBga2VybmVsL2JwZi9hcnJheW1hcC5jYCwgYnV0IGl0JiMzOTtzIGFzc2lnbmVkIHRvIGEgZnVuY3Rpb24gcG9pbnRlciB3aGljaCBtZWFucyBpdCB3b24mIzM5O3QgYmUgaW5saW5lZC4gU2luY2UgaXQgaGFzIGEgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3MsIGl0JiMzOTtzIHBlcmZlY3QgZm9yIGluY2x1c2lvbi4KCkFsc28sIGp1c3QgdG8gYmUgdGhvcm91Z2gsIEkgc2hvdWxkIGNoZWNrIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgbm9uLXN0YXRpYyBmdW5jdGlvbnMuIGBicGZfbWFwX2RpcmVjdF9yZWFkYCBpcyBub24tc3RhdGljLgoKQWxyaWdodCwgSSB0aGluayBJJiMzOTttIGhhcHB5IHdpdGggdGhpcy4gTXkgY29uY2x1c2lvbiBpczoKCiogICAqKldvcnRoRnV6emluZzoqKiBgdHJ1ZWAKKiAgICoqRm9jdXNTeW1ib2xzOioqCiAgICAqICAgYHBlcmNwdV9hcnJheV9tYXBfZGlyZWN0X3ZhbHVlX2FkZHJgCiAgICAqICAgYHBlcmNwdV9hcnJheV9tYXBfZGlyZWN0X3ZhbHVlX21ldGFgCiAgICAqICAgYGJwZl9kb19taXNjX2ZpeHVwc2AKICAgICogICBgYnBmX21hcF9kaXJlY3RfcmVhZGAKKiAgICoqRW5hYmxlQ29uZmlnczoqKgogICAgKiAgIGBCUEZfU1lTQ0FMTGAKICAgICogICBgQlBGX0pJVGAKCkp1c3QgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluLCBJJiMzOTtsbCBxdWlja2x5IHZlcmlmeSB0aGF0IGBicGZfbWFwX2RpcmVjdF9yZWFkYCBpcyBpbmRlZWQgbm9uLXN0YXRpYy4gWWVwLCBpdCYjMzk7cyBleHBvcnRlZCBpbiBga2VybmVsL2JwZi92ZXJpZmllci5jYC4KCkZpbmFsbHksIEkgd2lsbCBjaGVjayB3aGV0aGVyIGBCUEZfSklUYCBpcyBlbm91Z2ggb3IgaWYgd2UgbmVlZCBzb21ldGhpbmcgZWxzZS4gYEJQRl9TWVNDQUxMYCBhbmQgYEJQRl9KSVRgIGFyZSBzdGFuZGFyZCBmb3IgQlBGIGZ1enppbmcuCgpNeSByZWFzb25pbmcgaXMgdGhpczogVGhpcyBwYXRjaCBpbnRyb2R1Y2VzIHN1cHBvcnQgZm9yIGAucGVyY3B1YCBnbG9iYWwgZGF0YSBtYXBzIGluIEJQRi4gSXQgbW9kaWZpZXMgdGhlIEJQRiB2ZXJpZmllciB0byBoYW5kbGUgZGlyZWN0IG1lbW9yeSByZWFkcyBmcm9tIGBCUEZfTUFQX1RZUEVfUEVSQ1BVX0FSUkFZYCBtYXBzIGFuZCBhZGRzIEpJVCBmaXh1cHMgdG8gcGF0Y2ggYGxkX2ltbTY0YCBpbnN0cnVjdGlvbnMgd2l0aCBwZXItQ1BVIHJlZ2lzdGVyIG1vdmVzLiBUaGVzZSBhcmUgZnVuZGFtZW50YWwgY2hhbmdlcyB0byB0aGUgY29yZSBCUEYgc3Vic3lzdGVtIGFuZCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBtZW1vcnkgc2FmZXR5IGFuZCBjb3JyZWN0IHZlcmlmaWVyIGJlaGF2aW9yLiBJdCYjMzk7cyBhIGNsZWFyIHdpbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMTk6NDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDssCiAgICAmIzM0O0JQRl9KSVQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtwZXJjcHVfYXJyYXlfbWFwX2RpcmVjdF92YWx1ZV9hZGRyJiMzNDssCiAgICAmIzM0O3BlcmNwdV9hcnJheV9tYXBfZGlyZWN0X3ZhbHVlX21ldGEmIzM0OywKICAgICYjMzQ7YnBmX2RvX21pc2NfZml4dXBzJiMzNDssCiAgICAmIzM0O2JwZl9tYXBfZGlyZWN0X3JlYWQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBzdXBwb3J0IGZvciBgLnBlcmNwdWAgZ2xvYmFsIGRhdGEgbWFwcyBpbiBCUEYuIEl0IG1vZGlmaWVzIHRoZSBCUEYgdmVyaWZpZXIgdG8gaGFuZGxlIGRpcmVjdCBtZW1vcnkgcmVhZHMgZnJvbSBgQlBGX01BUF9UWVBFX1BFUkNQVV9BUlJBWWAgbWFwcyBhbmQgYWRkcyBKSVQgZml4dXBzIHRvIHBhdGNoIGBsZF9pbW02NGAgaW5zdHJ1Y3Rpb25zIHdpdGggcGVyLUNQVSByZWdpc3RlciBtb3Zlcy4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUgY29yZSBCUEYgc3Vic3lzdGVtIGFuZCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBtZW1vcnkgc2FmZXR5IGFuZCBjb3JyZWN0IHZlcmlmaWVyIGJlaGF2aW9yLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCUEZfU1lTQ0FMTCYjMzQ7LAogICAgJiMzNDtCUEZfSklUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cGVyY3B1X2FycmF5X21hcF9kaXJlY3RfdmFsdWVfYWRkciYjMzQ7LAogICAgJiMzNDtwZXJjcHVfYXJyYXlfbWFwX2RpcmVjdF92YWx1ZV9tZXRhJiMzNDssCiAgICAmIzM0O2JwZl9kb19taXNjX2ZpeHVwcyYjMzQ7LAogICAgJiMzNDticGZfbWFwX2RpcmVjdF9yZWFkJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgc3VwcG9ydCBmb3IgYC5wZXJjcHVgIGdsb2JhbCBkYXRhIG1hcHMgaW4gQlBGLiBJdCBtb2RpZmllcyB0aGUgQlBGIHZlcmlmaWVyIHRvIGhhbmRsZSBkaXJlY3QgbWVtb3J5IHJlYWRzIGZyb20gYEJQRl9NQVBfVFlQRV9QRVJDUFVfQVJSQVlgIG1hcHMgYW5kIGFkZHMgSklUIGZpeHVwcyB0byBwYXRjaCBgbGRfaW1tNjRgIGluc3RydWN0aW9ucyB3aXRoIHBlci1DUFUgcmVnaXN0ZXIgbW92ZXMuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGNvcmUgQlBGIHN1YnN5c3RlbSBhbmQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgbWVtb3J5IHNhZmV0eSBhbmQgY29ycmVjdCB2ZXJpZmllciBiZWhhdmlvci4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDE5OjQyOjIxLjk5Mjc2NjE2M1oiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0NTk2NTMyMDcyNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfU1lTQ0FMTFwiLFxuICAgIFwiQlBGX0pJVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInBlcmNwdV9hcnJheV9tYXBfZGlyZWN0X3ZhbHVlX2FkZHJcIixcbiAgICBcInBlcmNwdV9hcnJheV9tYXBfZGlyZWN0X3ZhbHVlX21ldGFcIixcbiAgICBcImJwZl9kb19taXNjX2ZpeHVwc1wiLFxuICAgIFwiYnBmX21hcF9kaXJlY3RfcmVhZFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgc3VwcG9ydCBmb3IgYC5wZXJjcHVgIGdsb2JhbCBkYXRhIG1hcHMgaW4gQlBGLiBJdCBtb2RpZmllcyB0aGUgQlBGIHZlcmlmaWVyIHRvIGhhbmRsZSBkaXJlY3QgbWVtb3J5IHJlYWRzIGZyb20gYEJQRl9NQVBfVFlQRV9QRVJDUFVfQVJSQVlgIG1hcHMgYW5kIGFkZHMgSklUIGZpeHVwcyB0byBwYXRjaCBgbGRfaW1tNjRgIGluc3RydWN0aW9ucyB3aXRoIHBlci1DUFUgcmVnaXN0ZXIgbW92ZXMuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGNvcmUgQlBGIHN1YnN5c3RlbSBhbmQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgbWVtb3J5IHNhZmV0eSBhbmQgY29ycmVjdCB2ZXJpZmllciBiZWhhdmlvci5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMTk6NDI6MjEuOTkyNzcxMDEzWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDQ2MTcxNzE5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgZDE1MWQzZDA5MzJhMzMxYzNlZjM4OWY4NjY3ODFhYTk1OGViODM5ZFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVGh1IEF1ZyA2IDE5OjQyOjIwIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvYXJyYXltYXAuYyBiL2tlcm5lbC9icGYvYXJyYXltYXAuY1xcbmluZGV4IDI0OGI0ODE4MTc4Y2QuLjM0ODY1NzAxZjdmNzUgMTAwNjQ0XFxuLS0tIGEva2VybmVsL2JwZi9hcnJheW1hcC5jXFxuKysrIGIva2VybmVsL2JwZi9hcnJheW1hcC5jXFxuQEAgLTI1OSw2ICsyNTksMzcgQEAgc3RhdGljIHZvaWQgKnBlcmNwdV9hcnJheV9tYXBfbG9va3VwX2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5KVxcbiBcXHRyZXR1cm4gdGhpc19jcHVfcHRyKGFycmF5LVxcdTAwM2VwcHRyc1tpbmRleCBcXHUwMDI2IGFycmF5LVxcdTAwM2VpbmRleF9tYXNrXSk7XFxuIH1cXG4gXFxuK3N0YXRpYyBpbnQgcGVyY3B1X2FycmF5X21hcF9kaXJlY3RfdmFsdWVfYWRkcihjb25zdCBzdHJ1Y3QgYnBmX21hcCAqbWFwLCB1NjQgKmltbSwgdTMyIG9mZilcXG4re1xcbitcXHRzdHJ1Y3QgYnBmX2FycmF5ICphcnJheSA9IGNvbnRhaW5lcl9vZihtYXAsIHN0cnVjdCBicGZfYXJyYXksIG1hcCk7XFxuK1xcbitcXHRpZiAoIWJwZl9qaXRfc3VwcG9ydHNfcGVyY3B1X2luc24oKSlcXG4rXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbitcXHRpZiAobWFwLVxcdTAwM2VtYXhfZW50cmllcyAhPSAxKVxcbitcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuK1xcdGlmIChvZmYgXFx1MDAzZT0gbWFwLVxcdTAwM2V2YWx1ZV9zaXplKVxcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFxuK1xcdCppbW0gPSAodTY0KShfX2ZvcmNlIHVuc2lnbmVkIGxvbmcpIGFycmF5LVxcdTAwM2VwcHRyc1swXTtcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgcGVyY3B1X2FycmF5X21hcF9kaXJlY3RfdmFsdWVfbWV0YShjb25zdCBzdHJ1Y3QgYnBmX21hcCAqbWFwLCB1NjQgaW1tLCB1MzIgKm9mZilcXG4re1xcbitcXHRzdHJ1Y3QgYnBmX2FycmF5ICphcnJheSA9IGNvbnRhaW5lcl9vZihtYXAsIHN0cnVjdCBicGZfYXJyYXksIG1hcCk7XFxuK1xcdHU2NCBiYXNlID0gKHU2NCkoX19mb3JjZSB1bnNpZ25lZCBsb25nKSBhcnJheS1cXHUwMDNlcHB0cnNbMF07XFxuK1xcbitcXHRpZiAoIWJwZl9qaXRfc3VwcG9ydHNfcGVyY3B1X2luc24oKSlcXG4rXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbitcXHRpZiAobWFwLVxcdTAwM2VtYXhfZW50cmllcyAhPSAxKVxcbitcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuK1xcdGlmIChpbW0gXFx1MDAzYyBiYXNlIHx8IGltbSBcXHUwMDNlPSBiYXNlICsgYXJyYXktXFx1MDAzZWVsZW1fc2l6ZSlcXG4rXFx0XFx0cmV0dXJuIC1FTk9FTlQ7XFxuK1xcbitcXHQqb2ZmID0gaW1tIC0gYmFzZTtcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuIC8qIGVtaXQgQlBGIGluc3RydWN0aW9ucyBlcXVpdmFsZW50IHRvIEMgY29kZSBvZiBwZXJjcHVfYXJyYXlfbWFwX2xvb2t1cF9lbGVtKCkgKi9cXG4gc3RhdGljIGludCBwZXJjcHVfYXJyYXlfbWFwX2dlbl9sb29rdXAoc3RydWN0IGJwZl9tYXAgKm1hcCwgc3RydWN0IGJwZl9pbnNuICppbnNuX2J1ZilcXG4ge1xcbkBAIC01NTEsOSArNTgyLDEwIEBAIHN0YXRpYyBpbnQgYXJyYXlfbWFwX2NoZWNrX2J0ZihzdHJ1Y3QgYnBmX21hcCAqbWFwLFxcbiBcXHRcXHRcXHQgICAgICAgY29uc3Qgc3RydWN0IGJ0Zl90eXBlICprZXlfdHlwZSxcXG4gXFx0XFx0XFx0ICAgICAgIGNvbnN0IHN0cnVjdCBidGZfdHlwZSAqdmFsdWVfdHlwZSlcXG4ge1xcbi1cXHQvKiBPbmUgZXhjZXB0aW9uIGZvciBrZXlsZXNzIEJURjogLmJzcy8uZGF0YS8ucm9kYXRhIG1hcCAqL1xcbitcXHQvKiBPbmUgZXhjZXB0aW9uIGZvciBrZXlsZXNzIEJURjogLmJzcy8uZGF0YS8ucm9kYXRhLy5wZXJjcHUgbWFwICovXFxuIFxcdGlmIChidGZfdHlwZV9pc192b2lkKGtleV90eXBlKSkge1xcbi1cXHRcXHRpZiAobWFwLVxcdTAwM2VtYXBfdHlwZSAhPSBCUEZfTUFQX1RZUEVfQVJSQVkgfHxcXG4rXFx0XFx0aWYgKChtYXAtXFx1MDAzZW1hcF90eXBlICE9IEJQRl9NQVBfVFlQRV9BUlJBWSBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHQgICAgIG1hcC1cXHUwMDNlbWFwX3R5cGUgIT0gQlBGX01BUF9UWVBFX1BFUkNQVV9BUlJBWSkgfHxcXG4gXFx0XFx0ICAgIG1hcC1cXHUwMDNlbWF4X2VudHJpZXMgIT0gMSlcXG4gXFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIFxcbkBAIC04MzIsNiArODY0LDggQEAgY29uc3Qgc3RydWN0IGJwZl9tYXBfb3BzIHBlcmNwdV9hcnJheV9tYXBfb3BzID0ge1xcbiBcXHQubWFwX2dldF9uZXh0X2tleSA9IGJwZl9hcnJheV9nZXRfbmV4dF9rZXksXFxuIFxcdC5tYXBfbG9va3VwX2VsZW0gPSBwZXJjcHVfYXJyYXlfbWFwX2xvb2t1cF9lbGVtLFxcbiBcXHQubWFwX2dlbl9sb29rdXAgPSBwZXJjcHVfYXJyYXlfbWFwX2dlbl9sb29rdXAsXFxuK1xcdC5tYXBfZGlyZWN0X3ZhbHVlX2FkZHIgPSBwZXJjcHVfYXJyYXlfbWFwX2RpcmVjdF92YWx1ZV9hZGRyLFxcbitcXHQubWFwX2RpcmVjdF92YWx1ZV9tZXRhID0gcGVyY3B1X2FycmF5X21hcF9kaXJlY3RfdmFsdWVfbWV0YSxcXG4gXFx0Lm1hcF91cGRhdGVfZWxlbSA9IGFycmF5X21hcF91cGRhdGVfZWxlbSxcXG4gXFx0Lm1hcF9kZWxldGVfZWxlbSA9IGFycmF5X21hcF9kZWxldGVfZWxlbSxcXG4gXFx0Lm1hcF9sb29rdXBfcGVyY3B1X2VsZW0gPSBwZXJjcHVfYXJyYXlfbWFwX2xvb2t1cF9wZXJjcHVfZWxlbSxcXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9iYWNrdHJhY2suYyBiL2tlcm5lbC9icGYvYmFja3RyYWNrLmNcXG5pbmRleCAyZjQ3M2FkNGZkN2MxLi4zZjE1MGU4NThhZThhIDEwMDY0NFxcbi0tLSBhL2tlcm5lbC9icGYvYmFja3RyYWNrLmNcXG4rKysgYi9rZXJuZWwvYnBmL2JhY2t0cmFjay5jXFxuQEAgLTIxNCw3ICsyMTQsNiBAQCBzdGF0aWMgaW5saW5lIGJvb2wgYnRfaXNfcmVnX3NldChzdHJ1Y3QgYmFja3RyYWNrX3N0YXRlICpidCwgdTMyIHJlZylcXG4gXFx0cmV0dXJuIGJ0LVxcdTAwM2VyZWdfbWFza3NbYnQtXFx1MDAzZWZyYW1lXSBcXHUwMDI2ICgxIFxcdTAwM2NcXHUwMDNjIHJlZyk7XFxuIH1cXG4gXFxuLVxcbiAvKiBmb3JtYXQgcmVnaXN0ZXJzIGJpdG1hc2ssIGUuZy4sIFxcXCJyMCxyMixyNFxcXCIgZm9yIDB4MTUgbWFzayAqL1xcbiBzdGF0aWMgdm9pZCBmbXRfcmVnX21hc2soY2hhciAqYnVmLCBzc2l6ZV90IGJ1Zl9zeiwgdTMyIHJlZ19tYXNrKVxcbiB7XFxuQEAgLTI1NCw3ICsyNTMsNiBAQCB2b2lkIGJwZl9mbXRfc3RhY2tfbWFzayhjaGFyICpidWYsIHNzaXplX3QgYnVmX3N6LCB1NjQgc3RhY2tfbWFzaylcXG4gXFx0fVxcbiB9XFxuIFxcbi1cXG4gLyogRm9yIGdpdmVuIHZlcmlmaWVyIHN0YXRlIGJhY2t0cmFja19pbnNuKCkgaXMgY2FsbGVkIGZyb20gdGhlIGxhc3QgaW5zbiB0b1xcbiAgKiB0aGUgZmlyc3QgaW5zbi4gSXRzIHB1cnBvc2UgaXMgdG8gY29tcHV0ZSBhIGJpdG1hc2sgb2YgcmVnaXN0ZXJzIGFuZFxcbiAgKiBzdGFjayBzbG90cyB0aGF0IG5lZWRzIHByZWNpc2lvbiBpbiB0aGUgcGFyZW50IHZlcmlmaWVyIHN0YXRlLlxcbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL2J0Zi5jIGIva2VybmVsL2JwZi9idGYuY1xcbmluZGV4IDQyNDE0NjMzY2YyNjMuLmM4MDdhZDI2M2U2ZjggMTAwNjQ0XFxuLS0tIGEva2VybmVsL2JwZi9idGYuY1xcbisrKyBiL2tlcm5lbC9icGYvYnRmLmNcXG5AQCAtMjUzNCw3ICsyNTM0LDYgQEAgc3RhdGljIHZvaWQgYnRmX2JpdGZpZWxkX3Nob3codm9pZCAqZGF0YSwgdTggYml0c19vZmZzZXQsXFxuIFxcdGJ0Zl9pbnQxMjhfcHJpbnQoc2hvdywgcHJpbnRfbnVtKTtcXG4gfVxcbiBcXG4tXFxuIHN0YXRpYyB2b2lkIGJ0Zl9pbnRfYml0c19zaG93KGNvbnN0IHN0cnVjdCBidGYgKmJ0ZixcXG4gXFx0XFx0XFx0ICAgICAgY29uc3Qgc3RydWN0IGJ0Zl90eXBlICp0LFxcbiBcXHRcXHRcXHQgICAgICB2b2lkICpkYXRhLCB1OCBiaXRzX29mZnNldCxcXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9jZmcuYyBiL2tlcm5lbC9icGYvY2ZnLmNcXG5pbmRleCBkYjM0MTZhN2M5MDQ3Li44MThmN2FmYWM4M2E1IDEwMDY0NFxcbi0tLSBhL2tlcm5lbC9icGYvY2ZnLmNcXG4rKysgYi9rZXJuZWwvYnBmL2NmZy5jXFxuQEAgLTQ3LDcgKzQ3LDYgQEAgZW51bSB7XFxuIFxcdEJSQU5DSCA9IDIsXFxuIH07XFxuIFxcbi1cXG4gc3RhdGljIHZvaWQgbWFya19zdWJwcm9nX2NoYW5nZXNfcGt0X2RhdGEoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50IG9mZilcXG4ge1xcbiBcXHRzdHJ1Y3QgYnBmX3N1YnByb2dfaW5mbyAqc3VicHJvZztcXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9jb25zdF9mb2xkLmMgYi9rZXJuZWwvYnBmL2NvbnN0X2ZvbGQuY1xcbmluZGV4IGIyYTE5YWNhZGI5MWUuLjU3ODcyNDZiZWYzMDEgMTAwNjQ0XFxuLS0tIGEva2VybmVsL2JwZi9jb25zdF9mb2xkLmNcXG4rKysgYi9rZXJuZWwvYnBmL2NvbnN0X2ZvbGQuY1xcbkBAIC0xODIsNyArMTgyLDYgQEAgc3RhdGljIHZvaWQgY29uc3RfcmVnX3hmZXIoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGNvbnN0X2FyZ19pbmZvICpcXG4gXFx0XFx0dTY0IHZhbCA9IDA7XFxuIFxcbiBcXHRcXHRpZiAoIWJwZl9tYXBfaXNfcmRvbmx5KG1hcCkgfHwgIW1hcC1cXHUwMDNlb3BzLVxcdTAwM2VtYXBfZGlyZWN0X3ZhbHVlX2FkZHIgfHxcXG4tXFx0XFx0ICAgIG1hcC1cXHUwMDNlbWFwX3R5cGUgPT0gQlBGX01BUF9UWVBFX0lOU05fQVJSQVkgfHxcXG4gXFx0XFx0ICAgIG9mZiBcXHUwMDNjIDAgfHwgb2ZmICsgc2l6ZSBcXHUwMDNlIG1hcC1cXHUwMDNldmFsdWVfc2l6ZSB8fFxcbiBcXHRcXHQgICAgYnBmX21hcF9kaXJlY3RfcmVhZChtYXAsIG9mZiwgc2l6ZSwgXFx1MDAyNnZhbCwgaXNfbGRzeCkpIHtcXG4gXFx0XFx0XFx0KmRzdCA9IHVua25vd247XFxuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvZml4dXBzLmMgYi9rZXJuZWwvYnBmL2ZpeHVwcy5jXFxuaW5kZXggYTBiZGRhZGE3OTY0ZS4uZjIzOTg3NDkxMDNiYSAxMDA2NDRcXG4tLS0gYS9rZXJuZWwvYnBmL2ZpeHVwcy5jXFxuKysrIGIva2VybmVsL2JwZi9maXh1cHMuY1xcbkBAIC0xNDQ2LDcgKzE0NDYsNiBAQCBpbnQgYnBmX2ZpeHVwX2NhbGxfYXJncyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxcbiBcXHRyZXR1cm4gZXJyO1xcbiB9XFxuIFxcbi1cXG4gLyogVGhlIGZ1bmN0aW9uIHJlcXVpcmVzIHRoYXQgZmlyc3QgaW5zdHJ1Y3Rpb24gaW4gJ3BhdGNoJyBpcyBpbnNuc2lbcHJvZy1cXHUwMDNlbGVuIC0gMV0gKi9cXG4gc3RhdGljIGludCBhZGRfaGlkZGVuX3N1YnByb2coc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICpwYXRjaCwgaW50IGxlbilcXG4ge1xcbkBAIC0xODE4LDYgKzE4MTcsNDMgQEAgaW50IGJwZl9kb19taXNjX2ZpeHVwcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxcbiBcXHRcXHRcXHRnb3RvIG5leHRfaW5zbjtcXG4gXFx0XFx0fVxcbiBcXG4rXFx0XFx0aWYgKGJwZl9qaXRfc3VwcG9ydHNfcGVyY3B1X2luc24oKSBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHQgICAgaW5zbi1cXHUwMDNlY29kZSA9PSAoQlBGX0xEIHwgQlBGX0lNTSB8IEJQRl9EVykgXFx1MDAyNlxcdTAwMjZcXG4rXFx0XFx0ICAgIChpbnNuLVxcdTAwM2VzcmNfcmVnID09IEJQRl9QU0VVRE9fTUFQX1ZBTFVFIHx8XFxuK1xcdFxcdCAgICAgaW5zbi1cXHUwMDNlc3JjX3JlZyA9PSBCUEZfUFNFVURPX01BUF9JRFhfVkFMVUUpKSB7XFxuK1xcdFxcdFxcdHN0cnVjdCBicGZfbWFwICptYXA7XFxuK1xcbitcXHRcXHRcXHRhdXggPSBcXHUwMDI2ZW52LVxcdTAwM2VpbnNuX2F1eF9kYXRhW2kgKyBkZWx0YV07XFxuK1xcdFxcdFxcdG1hcCA9IGVudi1cXHUwMDNldXNlZF9tYXBzW2F1eC1cXHUwMDNlbWFwX2luZGV4XTtcXG4rXFx0XFx0XFx0aWYgKG1hcC1cXHUwMDNlbWFwX3R5cGUgIT0gQlBGX01BUF9UWVBFX1BFUkNQVV9BUlJBWSlcXG4rXFx0XFx0XFx0XFx0Z290byBuZXh0X2luc247XFxuK1xcbitcXHRcXHRcXHRwcm9nLVxcdTAwM2VqaXRfcmVxdWlyZWQgPSB0cnVlO1xcbitcXG4rXFx0XFx0XFx0LypcXG4rXFx0XFx0XFx0ICogV2UgYXJlICpza2lwcGluZyogZmlyc3QgaGFsZiBvZiBsZF9pbW02NCBpbnNuXFxuK1xcdFxcdFxcdCAqIHdpdGggJ2krKzsnLCBwYXRjaGluZyBvdmVyIHNlY29uZCBoYWxmIG9mIGl0XFxuK1xcdFxcdFxcdCAqIHdpdGggdGhhdCBzYW1lIGhhbGYgKyBtb3Y2NF9wZXJjcHVfcmVnIGluc24uXFxuK1xcdFxcdFxcdCAqIEFsbCBiZWNhdXNlIGJwZl9wYXRjaF9pbnNuX2RhdGEoKSBjYW4gb25seVxcbitcXHRcXHRcXHQgKiByZXBsYWNlIG9uZSA4LWJ5dGUgaW5zbiwgd2hpY2ggZG9lcyBub3Qgd29ya1xcbitcXHRcXHRcXHQgKiB3ZWxsIGZvciBsZF9pbW02NCBpbnNuLlxcbitcXHRcXHRcXHQgKi9cXG4rXFxuK1xcdFxcdFxcdGluc25fYnVmWzBdID0gaW5zblsxXTtcXG4rXFx0XFx0XFx0aW5zbl9idWZbMV0gPSBCUEZfTU9WNjRfUEVSQ1BVX1JFRyhpbnNuLVxcdTAwM2Vkc3RfcmVnLCBpbnNuLVxcdTAwM2Vkc3RfcmVnKTtcXG4rXFx0XFx0XFx0Y250ID0gMjtcXG4rXFxuK1xcdFxcdFxcdGkrKztcXG4rXFx0XFx0XFx0bmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgaSArIGRlbHRhLCBpbnNuX2J1ZiwgY250KTtcXG4rXFx0XFx0XFx0aWYgKCFuZXdfcHJvZylcXG4rXFx0XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuK1xcbitcXHRcXHRcXHRkZWx0YSAgICArPSBjbnQgLSAxO1xcbitcXHRcXHRcXHRlbnYtXFx1MDAzZXByb2cgPSBwcm9nID0gbmV3X3Byb2c7XFxuK1xcdFxcdFxcdGluc24gICAgICA9IG5ld19wcm9nLVxcdTAwM2VpbnNuc2kgKyBpICsgZGVsdGE7XFxuK1xcdFxcdFxcdGdvdG8gbmV4dF9pbnNuO1xcbitcXHRcXHR9XFxuK1xcbiBcXHRcXHRpZiAoaW5zbi1cXHUwMDNlY29kZSAhPSAoQlBGX0pNUCB8IEJQRl9DQUxMKSlcXG4gXFx0XFx0XFx0Z290byBuZXh0X2luc247XFxuIFxcdFxcdGlmIChpbnNuLVxcdTAwM2VzcmNfcmVnID09IEJQRl9QU0VVRE9fQ0FMTClcXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9oYXNodGFiLmMgYi9rZXJuZWwvYnBmL2hhc2h0YWIuY1xcbmluZGV4IDlmMzk0ZTFhYTJlODUuLmQ0MGNiNWRkNDQ2Y2EgMTAwNjQ0XFxuLS0tIGEva2VybmVsL2JwZi9oYXNodGFiLmNcXG4rKysgYi9rZXJuZWwvYnBmL2hhc2h0YWIuY1xcbkBAIC05OTgsNyArOTk4LDYgQEAgc3RhdGljIHZvaWQgZGVjX2VsZW1fY291bnQoc3RydWN0IGJwZl9odGFiICpodGFiKVxcbiBcXHRcXHRhdG9taWNfZGVjKFxcdTAwMjZodGFiLVxcdTAwM2Vjb3VudCk7XFxuIH1cXG4gXFxuLVxcbiBzdGF0aWMgdm9pZCBmcmVlX2h0YWJfZWxlbShzdHJ1Y3QgYnBmX2h0YWIgKmh0YWIsIHN0cnVjdCBodGFiX2VsZW0gKmwpXFxuIHtcXG4gXFx0aHRhYl9wdXRfZmRfdmFsdWUoaHRhYiwgbCk7XFxuQEAgLTI5NzAsNyArMjk2OSw2IEBAIHN0YXRpYyBpbnQgcmh0YWJfZGVsZXRlX2VsZW0oc3RydWN0IGJwZl9yaHRhYiAqcmh0YWIsIHN0cnVjdCByaHRhYl9lbGVtICplbGVtLCB2XFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbi1cXG4gc3RhdGljIGxvbmcgcmh0YWJfbWFwX2RlbGV0ZV9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSlcXG4ge1xcbiBcXHRzdHJ1Y3QgYnBmX3JodGFiICpyaHRhYiA9IGNvbnRhaW5lcl9vZihtYXAsIHN0cnVjdCBicGZfcmh0YWIsIG1hcCk7XFxuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvaGVscGVycy5jIGIva2VybmVsL2JwZi9oZWxwZXJzLmNcXG5pbmRleCA0NzA5YTVhZDA0NzQ3Li41ZTY4YTBhZGIxNGI0IDEwMDY0NFxcbi0tLSBhL2tlcm5lbC9icGYvaGVscGVycy5jXFxuKysrIGIva2VybmVsL2JwZi9oZWxwZXJzLmNcXG5AQCAtNDg2OSw3ICs0ODY5LDYgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBidGZfa2Z1bmNfaWRfc2V0IGdlbmVyaWNfa2Z1bmNfc2V0ID0ge1xcbiBcXHQuc2V0ICAgPSBcXHUwMDI2Z2VuZXJpY19idGZfaWRzLFxcbiB9O1xcbiBcXG4tXFxuIEJURl9JRF9MSVNUKGdlbmVyaWNfZHRvcl9pZHMpXFxuIEJURl9JRChzdHJ1Y3QsIHRhc2tfc3RydWN0KVxcbiBCVEZfSUQoZnVuYywgYnBmX3Rhc2tfcmVsZWFzZV9kdG9yKVxcbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL2xpdmVuZXNzLmMgYi9rZXJuZWwvYnBmL2xpdmVuZXNzLmNcXG5pbmRleCAwYWFkZmJhZTBhY2M1Li45ZTI1ZTI0MWUxZmY0IDEwMDY0NFxcbi0tLSBhL2tlcm5lbC9icGYvbGl2ZW5lc3MuY1xcbisrKyBiL2tlcm5lbC9icGYvbGl2ZW5lc3MuY1xcbkBAIC0yNjksNyArMjY5LDYgQEAgYnBmX2luc25fc3VjY2Vzc29ycyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCB1MzIgaWR4KVxcbiBcXG4gX19kaWFnX3BvcCgpO1xcbiBcXG4tXFxuIHN0YXRpYyBpbmxpbmUgYm9vbCB1cGRhdGVfaW5zbihzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbiBcXHRcXHRcXHQgICAgICAgc3RydWN0IGZ1bmNfaW5zdGFuY2UgKmluc3RhbmNlLCB1MzIgZnJhbWUsIHUzMiBpbnNuX2lkeClcXG4ge1xcbkBAIC0xODY4LDcgKzE4NjcsNiBAQCBzdGF0aWMgaW50IGFuYWx5emVfc3VicHJvZyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbiBcXHRpZiAobmVlZF9yZXNjaGVkKCkpXFxuIFxcdFxcdGNvbmRfcmVzY2hlZCgpO1xcbiBcXG4tXFxuIFxcdC8qXFxuIFxcdCAqIFdoZW4gYW4gaW5zdGFuY2UgaXMgcmV1c2VkIChtdXN0X3dyaXRlX2luaXRpYWxpemVkID09IHRydWUpLFxcbiBcXHQgKiByZWNvcmQgaW50byBhIGZyZXNoIGluc3RhbmNlIGFuZCBtZXJnZSBhZnRlcndhcmQuICBUaGlzIGF2b2lkc1xcbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL3F1ZXVlX3N0YWNrX21hcHMuYyBiL2tlcm5lbC9icGYvcXVldWVfc3RhY2tfbWFwcy5jXFxuaW5kZXggYzFjOWRlZTRkY2RkMC4uNmU4YjE4YzMyYTEwNiAxMDA2NDRcXG4tLS0gYS9rZXJuZWwvYnBmL3F1ZXVlX3N0YWNrX21hcHMuY1xcbisrKyBiL2tlcm5lbC9icGYvcXVldWVfc3RhY2tfbWFwcy5jXFxuQEAgLTEyMyw3ICsxMjMsNiBAQCBzdGF0aWMgbG9uZyBfX3F1ZXVlX21hcF9nZXQoc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqdmFsdWUsIGJvb2wgZGVsZXRlKVxcbiBcXHRyZXR1cm4gZXJyO1xcbiB9XFxuIFxcbi1cXG4gc3RhdGljIGxvbmcgX19zdGFja19tYXBfZ2V0KHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKnZhbHVlLCBib29sIGRlbGV0ZSlcXG4ge1xcbiBcXHRzdHJ1Y3QgYnBmX3F1ZXVlX3N0YWNrICpxcyA9IGJwZl9xdWV1ZV9zdGFjayhtYXApO1xcbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL3N5c2NhbGwuYyBiL2tlcm5lbC9icGYvc3lzY2FsbC5jXFxuaW5kZXggOGQxMTFkYTg4NjU1My4uN2Q4YzNlOGU2ZDYyZSAxMDA2NDRcXG4tLS0gYS9rZXJuZWwvYnBmL3N5c2NhbGwuY1xcbisrKyBiL2tlcm5lbC9icGYvc3lzY2FsbC5jXFxuQEAgLTYzNiw3ICs2MzYsNiBAQCBpbnQgYnBmX21hcF9hbGxvY19wYWdlcyhjb25zdCBzdHJ1Y3QgYnBmX21hcCAqbWFwLCBpbnQgbmlkLFxcbiBcXHRyZXR1cm4gcmV0O1xcbiB9XFxuIFxcbi1cXG4gc3RhdGljIGludCBidGZfZmllbGRfY21wKGNvbnN0IHZvaWQgKmEsIGNvbnN0IHZvaWQgKmIpXFxuIHtcXG4gXFx0Y29uc3Qgc3RydWN0IGJ0Zl9maWVsZCAqZjEgPSBhLCAqZjIgPSBiO1xcbkBAIC0xODMwLDcgKzE4MjksNiBAQCBzdGF0aWMgaW50IG1hcF9sb29rdXBfZWxlbSh1bmlvbiBicGZfYXR0ciAqYXR0cilcXG4gXFx0cmV0dXJuIGVycjtcXG4gfVxcbiBcXG4tXFxuICNkZWZpbmUgQlBGX01BUF9VUERBVEVfRUxFTV9MQVNUX0ZJRUxEIGZsYWdzXFxuIFxcbiBzdGF0aWMgaW50IG1hcF91cGRhdGVfZWxlbSh1bmlvbiBicGZfYXR0ciAqYXR0ciwgYnBmcHRyX3QgdWF0dHIpXFxuQEAgLTM0OTcsNyArMzQ5NSw2IEBAIGludCBicGZfbGlua19wcmltZShzdHJ1Y3QgYnBmX2xpbmsgKmxpbmssIHN0cnVjdCBicGZfbGlua19wcmltZXIgKnByaW1lcilcXG4gXFx0aWYgKGZkIFxcdTAwM2MgMClcXG4gXFx0XFx0cmV0dXJuIGZkO1xcbiBcXG4tXFxuIFxcdGlkID0gYnBmX2xpbmtfYWxsb2NfaWQobGluayk7XFxuIFxcdGlmIChpZCBcXHUwMDNjIDApIHtcXG4gXFx0XFx0cHV0X3VudXNlZF9mZChmZCk7XFxuQEAgLTU1MDUsNyArNTUwMiw2IEBAIHN0YXRpYyBpbnQgYnBmX2xpbmtfZ2V0X2luZm9fYnlfZmQoc3RydWN0IGZpbGUgKmZpbGUsXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbi1cXG4gc3RhdGljIGludCB0b2tlbl9nZXRfaW5mb19ieV9mZChzdHJ1Y3QgZmlsZSAqZmlsZSxcXG4gXFx0XFx0XFx0XFx0c3RydWN0IGJwZl90b2tlbiAqdG9rZW4sXFxuIFxcdFxcdFxcdFxcdGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyLFxcbkBAIC02NTA3LDcgKzY1MDMsNiBAQCBCUEZfQ0FMTF8zKGJwZl9zeXNfYnBmLCBpbnQsIGNtZCwgdW5pb24gYnBmX2F0dHIgKiwgYXR0ciwgdTMyLCBhdHRyX3NpemUpXFxuIFxcdHJldHVybiBfX3N5c19icGYoY21kLCBLRVJORUxfQlBGUFRSKGF0dHIpLCBhdHRyX3NpemUsIEtFUk5FTF9CUEZQVFIoTlVMTCksIDApO1xcbiB9XFxuIFxcbi1cXG4gLyogVG8gc2h1dCB1cCAtV21pc3NpbmctcHJvdG90eXBlcy5cXG4gICogVGhpcyBmdW5jdGlvbiBpcyB1c2VkIGJ5IHRoZSBrZXJuZWwgbGlnaHQgc2tlbGV0b25cXG4gICogdG8gbG9hZCBicGYgcHJvZ3JhbXMgd2hlbiBtb2R1bGVzIGFyZSBsb2FkZWQgb3IgZHVyaW5nIGtlcm5lbCBib290LlxcbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL3ZlcmlmaWVyLmMgYi9rZXJuZWwvYnBmL3ZlcmlmaWVyLmNcXG5pbmRleCBkOTI1MTk3YzJlNWY3Li4zOTc3MjAwMmNiN2JmIDEwMDY0NFxcbi0tLSBhL2tlcm5lbC9icGYvdmVyaWZpZXIuY1xcbisrKyBiL2tlcm5lbC9icGYvdmVyaWZpZXIuY1xcbkBAIC02MzUsNyArNjM1LDYgQEAgc3RhdGljIHZvaWQgX19tYXJrX2R5bnB0cl9yZWcoc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZyxcXG4gXFx0XFx0XFx0ICAgICAgZW51bSBicGZfZHlucHRyX3R5cGUgdHlwZSxcXG4gXFx0XFx0XFx0ICAgICAgYm9vbCBmaXJzdF9zbG90LCBpbnQgaWQsIGludCBwYXJlbnRfaWQpO1xcbiBcXG4tXFxuIHN0YXRpYyB2b2lkIG1hcmtfZHlucHRyX3N0YWNrX3JlZ3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcXG4gXFx0XFx0XFx0XFx0ICAgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnNyZWcxLFxcbiBcXHRcXHRcXHRcXHQgICBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqc3JlZzIsXFxuQEAgLTE2NzIsNyArMTY3MSw2IEBAIHN0YXRpYyBib29sIHNhbWVfY2FsbHNpdGVzKHN0cnVjdCBicGZfdmVyaWZpZXJfc3RhdGUgKmEsIHN0cnVjdCBicGZfdmVyaWZpZXJfc3RhXFxuIFxcdHJldHVybiB0cnVlO1xcbiB9XFxuIFxcbi1cXG4gdm9pZCBicGZfZnJlZV9iYWNrZWRnZXMoc3RydWN0IGJwZl9zY2NfdmlzaXQgKnZpc2l0KVxcbiB7XFxuIFxcdHN0cnVjdCBicGZfc2NjX2JhY2tlZGdlICpiYWNrZWRnZSwgKm5leHQ7XFxuQEAgLTIyOTQsNyArMjI5Miw2IEBAIHN0YXRpYyBzdHJ1Y3QgYnBmX3ZlcmlmaWVyX3N0YXRlICpwdXNoX2FzeW5jX2NiKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxuIFxcdHJldHVybiBcXHUwMDI2ZWxlbS1cXHUwMDNlc3Q7XFxuIH1cXG4gXFxuLVxcbiBzdGF0aWMgaW50IGNtcF9zdWJwcm9ncyhjb25zdCB2b2lkICphLCBjb25zdCB2b2lkICpiKVxcbiB7XFxuIFxcdHJldHVybiAoKHN0cnVjdCBicGZfc3VicHJvZ19pbmZvICopYSktXFx1MDAzZXN0YXJ0IC1cXG5AQCAtNDA3MSw3ICs0MDY4LDYgQEAgc3RhdGljIGludCBjaGVja19zdGFja19yZWFkKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxuIFxcdHJldHVybiBlcnI7XFxuIH1cXG4gXFxuLVxcbiAvKiBjaGVja19zdGFja193cml0ZSBkaXNwYXRjaGVzIHRvIGNoZWNrX3N0YWNrX3dyaXRlX2ZpeGVkX29mZiBvclxcbiAgKiBjaGVja19zdGFja193cml0ZV92YXJfb2ZmLlxcbiAgKlxcbkBAIC00ODY3LDcgKzQ4NjMsNiBAQCBzdGF0aWMgaW50IGNoZWNrX3NvY2tfYWNjZXNzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGludCBpbnNuX2lkeCxcXG4gXFx0XFx0dmFsaWQgPSBmYWxzZTtcXG4gXFx0fVxcbiBcXG4tXFxuIFxcdGlmICh2YWxpZCkge1xcbiBcXHRcXHRlbnYtXFx1MDAzZWluc25fYXV4X2RhdGFbaW5zbl9pZHhdLmN0eF9maWVsZF9zaXplID1cXG4gXFx0XFx0XFx0aW5mby5jdHhfZmllbGRfc2l6ZTtcXG5AQCAtNTY2Miw2ICs1NjU3LDggQEAgaW50IGJwZl9tYXBfZGlyZWN0X3JlYWQoc3RydWN0IGJwZl9tYXAgKm1hcCwgaW50IG9mZiwgaW50IHNpemUsIHU2NCAqdmFsLFxcbiBcXHR1NjQgYWRkcjtcXG4gXFx0aW50IGVycjtcXG4gXFxuK1xcdGlmIChtYXAtXFx1MDAzZW1hcF90eXBlID09IEJQRl9NQVBfVFlQRV9JTlNOX0FSUkFZIHx8IG1hcC1cXHUwMDNlbWFwX3R5cGUgPT0gQlBGX01BUF9UWVBFX1BFUkNQVV9BUlJBWSlcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIFxcdGVyciA9IG1hcC1cXHUwMDNlb3BzLVxcdTAwM2VtYXBfZGlyZWN0X3ZhbHVlX2FkZHIobWFwLCBcXHUwMDI2YWRkciwgb2ZmKTtcXG4gXFx0aWYgKGVycilcXG4gXFx0XFx0cmV0dXJuIGVycjtcXG5AQCAtNjE1OCw2ICs2MTU1LDUxIEBAIHN0YXRpYyB2b2lkIGFkZF9zY2FsYXJfdG9fcmVnKHN0cnVjdCBicGZfcmVnX3N0YXRlICpkc3RfcmVnLCBzNjQgdmFsKVxcbiBcXHRyZWdfYm91bmRzX3N5bmMoZHN0X3JlZyk7XFxuIH1cXG4gXFxuK3N0YXRpYyBpbnQgY2hlY2tfbWFwX21lbV9yZWFkKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcsIGludCBvZmYsXFxuK1xcdFxcdFxcdCAgICAgIGludCBicGZfc2l6ZSwgaW50IHZhbHVlX3JlZ25vLCBib29sIGlzX2xkc3gpXFxuK3tcXG4rXFx0c3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZ3MgPSBjdXJfcmVncyhlbnYpO1xcbitcXHRpbnQgc2l6ZSA9IGJwZl9zaXplX3RvX2J5dGVzKGJwZl9zaXplKTtcXG4rXFx0c3RydWN0IGJwZl9tYXAgKm1hcCA9IHJlZy1cXHUwMDNlbWFwX3B0cjtcXG4rXFxuK1xcdHN3aXRjaCAobWFwLVxcdTAwM2VtYXBfdHlwZSkge1xcbitcXHRjYXNlIEJQRl9NQVBfVFlQRV9JTlNOX0FSUkFZOlxcbitcXHRcXHRpZiAoYnBmX3NpemUgIT0gQlBGX0RXKSB7XFxuK1xcdFxcdFxcdHZlcmJvc2UoZW52LCBcXFwiSW52YWxpZCByZWFkIG9mICVkIGJ5dGVzIGZyb20gaW5zbl9hcnJheVxcXFxuXFxcIiwgc2l6ZSk7XFxuK1xcdFxcdFxcdHJldHVybiAtRUFDQ0VTO1xcbitcXHRcXHR9XFxuK1xcdFxcdHJlZ3NbdmFsdWVfcmVnbm9dID0gKnJlZztcXG4rXFx0XFx0YWRkX3NjYWxhcl90b19yZWcoXFx1MDAyNnJlZ3NbdmFsdWVfcmVnbm9dLCBvZmYpO1xcbitcXHRcXHRyZWdzW3ZhbHVlX3JlZ25vXS50eXBlID0gUFRSX1RPX0lOU047XFxuK1xcdFxcdHJldHVybiAwO1xcbitcXHRjYXNlIEJQRl9NQVBfVFlQRV9QRVJDUFVfQVJSQVk6XFxuK1xcdFxcdGdvdG8gcmVnX3Vua25vd247XFxuK1xcdGRlZmF1bHQ6XFxuK1xcdFxcdGJyZWFrO1xcbitcXHR9XFxuK1xcbitcXHQvKiBJZiBtYXAgaXMgcmVhZC1vbmx5LCB0cmFjayBpdHMgY29udGVudHMgYXMgc2NhbGFycy4gKi9cXG4rXFx0aWYgKHRudW1faXNfY29uc3QocmVnLVxcdTAwM2V2YXJfb2ZmKSBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAgYnBmX21hcF9pc19yZG9ubHkobWFwKSBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAgbWFwLVxcdTAwM2VvcHMtXFx1MDAzZW1hcF9kaXJlY3RfdmFsdWVfYWRkcikge1xcbitcXHRcXHRpbnQgbWFwX29mZiA9IG9mZiArIHJlZy1cXHUwMDNldmFyX29mZi52YWx1ZTtcXG4rXFx0XFx0dTY0IHZhbCA9IDA7XFxuK1xcdFxcdGludCBlcnI7XFxuK1xcbitcXHRcXHRlcnIgPSBicGZfbWFwX2RpcmVjdF9yZWFkKG1hcCwgbWFwX29mZiwgc2l6ZSwgXFx1MDAyNnZhbCwgaXNfbGRzeCk7XFxuK1xcdFxcdGlmIChlcnIpXFxuK1xcdFxcdFxcdHJldHVybiBlcnI7XFxuK1xcbitcXHRcXHRyZWdzW3ZhbHVlX3JlZ25vXS50eXBlID0gU0NBTEFSX1ZBTFVFO1xcbitcXHRcXHRfX21hcmtfcmVnX2tub3duKFxcdTAwMjZyZWdzW3ZhbHVlX3JlZ25vXSwgdmFsKTtcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcdH1cXG4rXFxuK3JlZ191bmtub3duOlxcbitcXHRtYXJrX3JlZ191bmtub3duKGVudiwgcmVncywgdmFsdWVfcmVnbm8pO1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4gLyogY2hlY2sgd2hldGhlciBtZW1vcnkgYXQgKHJlZ25vICsgb2ZmKSBpcyBhY2Nlc3NpYmxlIGZvciB0ID0gKHJlYWQgfCB3cml0ZSlcXG4gICogaWYgdD09d3JpdGUsIHZhbHVlX3JlZ25vIGlzIGEgcmVnaXN0ZXIgd2hpY2ggdmFsdWUgaXMgc3RvcmVkIGludG8gbWVtb3J5XFxuICAqIGlmIHQ9PXJlYWQsIHZhbHVlX3JlZ25vIGlzIGEgcmVnaXN0ZXIgd2hpY2ggd2lsbCByZWNlaXZlIHRoZSB2YWx1ZSBmcm9tIG1lbW9yeVxcbkBAIC02MjEyLDM4ICs2MjU0LDcgQEAgc3RhdGljIGludCBjaGVja19tZW1fYWNjZXNzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGludCBpbnNuX2lkeCwgc3RydWN0IGJcXG4gXFx0XFx0aWYgKGtwdHJfZmllbGQpIHtcXG4gXFx0XFx0XFx0ZXJyID0gY2hlY2tfbWFwX2twdHJfYWNjZXNzKGVudiwgdmFsdWVfcmVnbm8sIGluc25faWR4LCBrcHRyX2ZpZWxkKTtcXG4gXFx0XFx0fSBlbHNlIGlmICh0ID09IEJQRl9SRUFEIFxcdTAwMjZcXHUwMDI2IHZhbHVlX3JlZ25vIFxcdTAwM2U9IDApIHtcXG4tXFx0XFx0XFx0c3RydWN0IGJwZl9tYXAgKm1hcCA9IHJlZy1cXHUwMDNlbWFwX3B0cjtcXG4tXFxuLVxcdFxcdFxcdC8qXFxuLVxcdFxcdFxcdCAqIElmIG1hcCBpcyByZWFkLW9ubHksIHRyYWNrIGl0cyBjb250ZW50cyBhcyBzY2FsYXJzLFxcbi1cXHRcXHRcXHQgKiB1bmxlc3MgaXQgaXMgYW4gaW5zbiBhcnJheSAoc2VlIHRoZSBzcGVjaWFsIGNhc2UgYmVsb3cpXFxuLVxcdFxcdFxcdCAqL1xcbi1cXHRcXHRcXHRpZiAodG51bV9pc19jb25zdChyZWctXFx1MDAzZXZhcl9vZmYpIFxcdTAwMjZcXHUwMDI2XFxuLVxcdFxcdFxcdCAgICBicGZfbWFwX2lzX3Jkb25seShtYXApIFxcdTAwMjZcXHUwMDI2XFxuLVxcdFxcdFxcdCAgICBtYXAtXFx1MDAzZW9wcy1cXHUwMDNlbWFwX2RpcmVjdF92YWx1ZV9hZGRyIFxcdTAwMjZcXHUwMDI2XFxuLVxcdFxcdFxcdCAgICBtYXAtXFx1MDAzZW1hcF90eXBlICE9IEJQRl9NQVBfVFlQRV9JTlNOX0FSUkFZKSB7XFxuLVxcdFxcdFxcdFxcdGludCBtYXBfb2ZmID0gb2ZmICsgcmVnLVxcdTAwM2V2YXJfb2ZmLnZhbHVlO1xcbi1cXHRcXHRcXHRcXHR1NjQgdmFsID0gMDtcXG4tXFxuLVxcdFxcdFxcdFxcdGVyciA9IGJwZl9tYXBfZGlyZWN0X3JlYWQobWFwLCBtYXBfb2ZmLCBzaXplLFxcbi1cXHRcXHRcXHRcXHRcXHRcXHRcXHQgIFxcdTAwMjZ2YWwsIGlzX2xkc3gpO1xcbi1cXHRcXHRcXHRcXHRpZiAoZXJyKVxcbi1cXHRcXHRcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbi1cXG4tXFx0XFx0XFx0XFx0cmVnc1t2YWx1ZV9yZWdub10udHlwZSA9IFNDQUxBUl9WQUxVRTtcXG4tXFx0XFx0XFx0XFx0X19tYXJrX3JlZ19rbm93bihcXHUwMDI2cmVnc1t2YWx1ZV9yZWdub10sIHZhbCk7XFxuLVxcdFxcdFxcdH0gZWxzZSBpZiAobWFwLVxcdTAwM2VtYXBfdHlwZSA9PSBCUEZfTUFQX1RZUEVfSU5TTl9BUlJBWSkge1xcbi1cXHRcXHRcXHRcXHRpZiAoYnBmX3NpemUgIT0gQlBGX0RXKSB7XFxuLVxcdFxcdFxcdFxcdFxcdHZlcmJvc2UoZW52LCBcXFwiSW52YWxpZCByZWFkIG9mICVkIGJ5dGVzIGZyb20gaW5zbl9hcnJheVxcXFxuXFxcIixcXG4tXFx0XFx0XFx0XFx0XFx0XFx0ICAgICBzaXplKTtcXG4tXFx0XFx0XFx0XFx0XFx0cmV0dXJuIC1FQUNDRVM7XFxuLVxcdFxcdFxcdFxcdH1cXG4tXFx0XFx0XFx0XFx0cmVnc1t2YWx1ZV9yZWdub10gPSAqcmVnO1xcbi1cXHRcXHRcXHRcXHRhZGRfc2NhbGFyX3RvX3JlZyhcXHUwMDI2cmVnc1t2YWx1ZV9yZWdub10sIG9mZik7XFxuLVxcdFxcdFxcdFxcdHJlZ3NbdmFsdWVfcmVnbm9dLnR5cGUgPSBQVFJfVE9fSU5TTjtcXG4tXFx0XFx0XFx0fSBlbHNlIHtcXG4tXFx0XFx0XFx0XFx0bWFya19yZWdfdW5rbm93bihlbnYsIHJlZ3MsIHZhbHVlX3JlZ25vKTtcXG4tXFx0XFx0XFx0fVxcbitcXHRcXHRcXHRlcnIgPSBjaGVja19tYXBfbWVtX3JlYWQoZW52LCByZWcsIG9mZiwgYnBmX3NpemUsIHZhbHVlX3JlZ25vLCBpc19sZHN4KTtcXG4gXFx0XFx0fVxcbiBcXHR9IGVsc2UgaWYgKGJhc2VfdHlwZShyZWctXFx1MDAzZXR5cGUpID09IFBUUl9UT19NRU0pIHtcXG4gXFx0XFx0Ym9vbCByZG9ubHlfbWVtID0gdHlwZV9pc19yZG9ubHlfbWVtKHJlZy1cXHUwMDNldHlwZSk7XFxuQEAgLTY3MjUsNyArNjczNiw2IEBAIHN0YXRpYyBpbnQgY2hlY2tfc3RhY2tfcmFuZ2VfaW5pdGlhbGl6ZWQoXFxuIFxcdGlmIChlcnIpXFxuIFxcdFxcdHJldHVybiBlcnI7XFxuIFxcbi1cXG4gXFx0aWYgKHRudW1faXNfY29uc3QocmVnLVxcdTAwM2V2YXJfb2ZmKSkge1xcbiBcXHRcXHRtaW5fb2ZmID0gbWF4X29mZiA9IHJlZy1cXHUwMDNldmFyX29mZi52YWx1ZSArIG9mZjtcXG4gXFx0fSBlbHNlIHtcXG5AQCAtNzQ0Myw3ICs3NDUzLDYgQEAgc3RhdGljIGJvb2wgaXNfaXRlcl9uZXdfa2Z1bmMoc3RydWN0IGJwZl9jYWxsX2FyZ19tZXRhICptZXRhKVxcbiBcXHRyZXR1cm4gbWV0YS1cXHUwMDNla2Z1bmNfZmxhZ3MgXFx1MDAyNiBLRl9JVEVSX05FVztcXG4gfVxcbiBcXG4tXFxuIHN0YXRpYyBib29sIGlzX2l0ZXJfZGVzdHJveV9rZnVuYyhzdHJ1Y3QgYnBmX2NhbGxfYXJnX21ldGEgKm1ldGEpXFxuIHtcXG4gXFx0cmV0dXJuIG1ldGEtXFx1MDAzZWtmdW5jX2ZsYWdzIFxcdTAwMjYgS0ZfSVRFUl9ERVNUUk9ZO1xcbkBAIC04MjIxLDYgKzgyMzAsMTIgQEAgc3RhdGljIGludCBjaGVja19hcmdfY29uc3Rfc3RyKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxuIFxcdFxcdHJldHVybiAtRUFDQ0VTO1xcbiBcXHR9XFxuIFxcbitcXHRpZiAobWFwLVxcdTAwM2VtYXBfdHlwZSA9PSBCUEZfTUFQX1RZUEVfUEVSQ1BVX0FSUkFZKSB7XFxuK1xcdFxcdHZlcmJvc2UoZW52LCBcXFwiJXMgcG9pbnRzIHRvIHBlcmNwdV9hcnJheSBtYXAgd2hpY2ggY2Fubm90IGJlIHVzZWQgYXMgY29uc3Qgc3RyaW5nXFxcXG5cXFwiLFxcbitcXHRcXHRcXHRyZWdfYXJnX25hbWUoZW52LCBhcmdubykpO1xcbitcXHRcXHRyZXR1cm4gLUVBQ0NFUztcXG4rXFx0fVxcbitcXG4gXFx0aWYgKCFicGZfbWFwX2lzX3Jkb25seShtYXApKSB7XFxuIFxcdFxcdHZlcmJvc2UoZW52LCBcXFwiJXMgZG9lcyBub3QgcG9pbnQgdG8gYSByZWFkb25seSBtYXAnXFxcXG5cXFwiLCByZWdfYXJnX25hbWUoZW52LCBhcmdubykpO1xcbiBcXHRcXHRyZXR1cm4gLUVBQ0NFUztcXG5AQCAtMTE2NjcsNyArMTE2ODIsNiBAQCBzdGF0aWMgaW50IHByb2Nlc3NfaXJxX2ZsYWcoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9yZWdfc3RhdGUgKlxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4tXFxuIHN0YXRpYyBpbnQgcmVmX3NldF9ub25fb3duaW5nKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcpXFxuIHtcXG4gXFx0c3RydWN0IGJ0Zl9yZWNvcmQgKnJlYyA9IHJlZ19idGZfcmVjb3JkKHJlZyk7XFxuQEAgLTE2NTE1LDcgKzE2NTI5LDYgQEAgc3RhdGljIGludCBjaGVja19sZF9hYnMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuKVxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4tXFxuIHN0YXRpYyBib29sIHJldHVybl9yZXR2YWxfcmFuZ2Uoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9yZXR2YWxfcmFuZ2UgKnJhbmdlKVxcbiB7XFxuIFxcdGVudW0gYnBmX3Byb2dfdHlwZSBwcm9nX3R5cGUgPSByZXNvbHZlX3Byb2dfdHlwZShlbnYtXFx1MDAzZXByb2cpO1xcbkBAIC0xODQ2MSw4ICsxODQ3NCw2IEBAIHN0YXRpYyB2b2lkIHJlbGVhc2VfaW5zbl9hcnJheXMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcXG4gXFx0XFx0YnBmX2luc25fYXJyYXlfcmVsZWFzZShlbnYtXFx1MDAzZWluc25fYXJyYXlfbWFwc1tpXSk7XFxuIH1cXG4gXFxuLVxcbi1cXG4gLyogVGhlIHZlcmlmaWVyIGRvZXMgbW9yZSBkYXRhIGZsb3cgYW5hbHlzaXMgdGhhbiBsbHZtIGFuZCB3aWxsIG5vdFxcbiAgKiBleHBsb3JlIGJyYW5jaGVzIHRoYXQgYXJlIGRlYWQgYXQgcnVuIHRpbWUuIE1hbGljaW91cyBwcm9ncmFtcyBjYW5cXG4gICogaGF2ZSBkZWFkIGNvZGUgdG9vLiBUaGVyZWZvcmUgcmVwbGFjZSBhbGwgZGVhZCBhdC1ydW4tdGltZSBjb2RlXFxuQEAgLTE4NDkwLDggKzE4NTAxLDYgQEAgc3RhdGljIHZvaWQgc2FuaXRpemVfZGVhZF9jb2RlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXFxuIFxcdH1cXG4gfVxcbiBcXG4tXFxuLVxcbiBzdGF0aWMgdm9pZCBmcmVlX3N0YXRlcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxcbiB7XFxuIFxcdHN0cnVjdCBicGZfdmVyaWZpZXJfc3RhdGVfbGlzdCAqc2w7XFxuQEAgLTE4NzczLDcgKzE4NzgyLDYgQEAgc3RhdGljIGludCBkb19jaGVja19tYWluKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXFxuIFxcdHJldHVybiByZXQ7XFxuIH1cXG4gXFxuLVxcbiBzdGF0aWMgdm9pZCBwcmludF92ZXJpZmljYXRpb25fc3RhdHMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcXG4ge1xcbiBcXHQvKiBTa2lwIG92ZXIgaGlkZGVuIHN1YnByb2dzIHdoaWNoIGFyZSBub3QgdmVyaWZpZWQuICovXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL2JwZi9icGZ0b29sL2dlbi5jIGIvdG9vbHMvYnBmL2JwZnRvb2wvZ2VuLmNcXG5pbmRleCBhMDFkMDZkMjJkMWEzLi5hNTA1NDBlZjY1MjFjIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL2JwZi9icGZ0b29sL2dlbi5jXFxuKysrIGIvdG9vbHMvYnBmL2JwZnRvb2wvZ2VuLmNcXG5AQCAtMTAxLDYgKzEwMSwxMiBAQCBzdGF0aWMgYm9vbCBnZXRfbWFwX2lkZW50KGNvbnN0IHN0cnVjdCBicGZfbWFwICptYXAsIGNoYXIgKmJ1Ziwgc2l6ZV90IGJ1Zl9zeilcXG4gXFx0XFx0cmV0dXJuIHRydWU7XFxuIFxcdH1cXG4gXFxuK1xcdGlmIChicGZfbWFwX190eXBlKG1hcCkgPT0gQlBGX01BUF9UWVBFX1BFUkNQVV9BUlJBWSkge1xcbitcXHRcXHRzbnByaW50ZihidWYsIGJ1Zl9zeiwgXFxcIiVzXFxcIiwgbmFtZSArIDEpO1xcbitcXHRcXHRzYW5pdGl6ZV9pZGVudGlmaWVyKGJ1Zik7XFxuK1xcdFxcdHJldHVybiB0cnVlO1xcbitcXHR9XFxuK1xcbiBcXHRmb3IgIChpID0gMCwgbiA9IEFSUkFZX1NJWkUoc2Z4cyk7IGkgXFx1MDAzYyBuOyBpKyspIHtcXG4gXFx0XFx0Y29uc3QgY2hhciAqc2Z4ID0gc2Z4c1tpXSwgKnA7XFxuIFxcbkBAIC0xMTcsNyArMTIzLDcgQEAgc3RhdGljIGJvb2wgZ2V0X21hcF9pZGVudChjb25zdCBzdHJ1Y3QgYnBmX21hcCAqbWFwLCBjaGFyICpidWYsIHNpemVfdCBidWZfc3opXFxuIFxcbiBzdGF0aWMgYm9vbCBnZXRfZGF0YXNlY19pZGVudChjb25zdCBjaGFyICpzZWNfbmFtZSwgY2hhciAqYnVmLCBzaXplX3QgYnVmX3N6KVxcbiB7XFxuLVxcdHN0YXRpYyBjb25zdCBjaGFyICpwZnhzW10gPSB7IFxcXCIuZGF0YVxcXCIsIFxcXCIucm9kYXRhXFxcIiwgXFxcIi5ic3NcXFwiLCBcXFwiLmtjb25maWdcXFwiIH07XFxuK1xcdHN0YXRpYyBjb25zdCBjaGFyICpwZnhzW10gPSB7IFxcXCIuZGF0YVxcXCIsIFxcXCIucm9kYXRhXFxcIiwgXFxcIi5ic3NcXFwiLCBcXFwiLnBlcmNwdVxcXCIsIFxcXCIua2NvbmZpZ1xcXCIgfTtcXG4gXFx0aW50IGksIG47XFxuIFxcbiBcXHQvKiByZWNvZ25pemUgaGFyZCBjb2RlZCBMTFZNIHNlY3Rpb24gbmFtZSAqL1xcbkBAIC0yNTQsNyArMjYwLDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBidGZfdHlwZSAqZmluZF90eXBlX2Zvcl9tYXAoc3RydWN0IGJ0ZiAqYnRmLCBjb25zdCBjaGFyICptYXBcXG4gXFx0cmV0dXJuIE5VTEw7XFxuIH1cXG4gXFxuLXN0YXRpYyBib29sIGlzX21tYXBhYmxlX21hcChjb25zdCBzdHJ1Y3QgYnBmX21hcCAqbWFwLCBjaGFyICpidWYsIHNpemVfdCBzeilcXG4rc3RhdGljIGJvb2wgaXNfc2tlbF9kYXRhKGNvbnN0IHN0cnVjdCBicGZfbWFwICptYXAsIGNoYXIgKmJ1Ziwgc2l6ZV90IHN6KVxcbiB7XFxuIFxcdHNpemVfdCB0bXBfc3o7XFxuIFxcbkBAIC0yNjMsMTMgKzI2OSwyNCBAQCBzdGF0aWMgYm9vbCBpc19tbWFwYWJsZV9tYXAoY29uc3Qgc3RydWN0IGJwZl9tYXAgKm1hcCwgY2hhciAqYnVmLCBzaXplX3Qgc3opXFxuIFxcdFxcdHJldHVybiB0cnVlO1xcbiBcXHR9XFxuIFxcbi1cXHRpZiAoIWJwZl9tYXBfX2lzX2ludGVybmFsKG1hcCkgfHwgIShicGZfbWFwX19tYXBfZmxhZ3MobWFwKSBcXHUwMDI2IEJQRl9GX01NQVBBQkxFKSlcXG4rXFx0aWYgKCFicGZfbWFwX19pc19pbnRlcm5hbChtYXApKVxcbiBcXHRcXHRyZXR1cm4gZmFsc2U7XFxuIFxcbiBcXHRpZiAoIWdldF9tYXBfaWRlbnQobWFwLCBidWYsIHN6KSlcXG4gXFx0XFx0cmV0dXJuIGZhbHNlO1xcbiBcXG4tXFx0cmV0dXJuIHRydWU7XFxuK1xcdGlmIChicGZfbWFwX19tYXBfZmxhZ3MobWFwKSBcXHUwMDI2IEJQRl9GX01NQVBBQkxFKVxcbitcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4rXFxuK1xcdGlmIChicGZfbWFwX190eXBlKG1hcCkgPT0gQlBGX01BUF9UWVBFX1BFUkNQVV9BUlJBWSlcXG4rXFx0XFx0cmV0dXJuIGJwZl9tYXBfX2J0Zl92YWx1ZV90eXBlX2lkKG1hcCkgIT0gMDtcXG4rXFxuK1xcdHJldHVybiBmYWxzZTtcXG4rfVxcbitcXG4rc3RhdGljIGJvb2wgaXNfbW1hcGFibGVfbWFwKGNvbnN0IHN0cnVjdCBicGZfbWFwICptYXAsIGNoYXIgKmJ1Ziwgc2l6ZV90IHN6KVxcbit7XFxuK1xcdHJldHVybiBpc19za2VsX2RhdGEobWFwLCBidWYsIHN6KSBcXHUwMDI2XFx1MDAyNiBicGZfbWFwX190eXBlKG1hcCkgIT0gQlBGX01BUF9UWVBFX1BFUkNQVV9BUlJBWTtcXG4gfVxcbiBcXG4gc3RhdGljIGludCBjb2RlZ2VuX2RhdGFzZWNzKHN0cnVjdCBicGZfb2JqZWN0ICpvYmosIGNvbnN0IGNoYXIgKm9ial9uYW1lKVxcbkBAIC0yODcsNyArMzA0LDcgQEAgc3RhdGljIGludCBjb2RlZ2VuX2RhdGFzZWNzKHN0cnVjdCBicGZfb2JqZWN0ICpvYmosIGNvbnN0IGNoYXIgKm9ial9uYW1lKVxcbiBcXG4gXFx0YnBmX29iamVjdF9fZm9yX2VhY2hfbWFwKG1hcCwgb2JqKSB7XFxuIFxcdFxcdC8qIG9ubHkgZ2VuZXJhdGUgZGVmaW5pdGlvbnMgZm9yIG1lbW9yeS1tYXBwZWQgaW50ZXJuYWwgbWFwcyAqL1xcbi1cXHRcXHRpZiAoIWlzX21tYXBhYmxlX21hcChtYXAsIG1hcF9pZGVudCwgc2l6ZW9mKG1hcF9pZGVudCkpKVxcbitcXHRcXHRpZiAoIWlzX3NrZWxfZGF0YShtYXAsIG1hcF9pZGVudCwgc2l6ZW9mKG1hcF9pZGVudCkpKVxcbiBcXHRcXHRcXHRjb250aW51ZTtcXG4gXFxuIFxcdFxcdHNlYyA9IGZpbmRfdHlwZV9mb3JfbWFwKGJ0ZiwgbWFwX2lkZW50KTtcXG5AQCAtNTE3LDcgKzUzNCw3IEBAIHN0YXRpYyB2b2lkIGNvZGVnZW5fYXNzZXJ0cyhzdHJ1Y3QgYnBmX29iamVjdCAqb2JqLCBjb25zdCBjaGFyICpvYmpfbmFtZSlcXG4gXFx0XFx0XFxcIiwgb2JqX25hbWUpO1xcbiBcXG4gXFx0YnBmX29iamVjdF9fZm9yX2VhY2hfbWFwKG1hcCwgb2JqKSB7XFxuLVxcdFxcdGlmICghaXNfbW1hcGFibGVfbWFwKG1hcCwgbWFwX2lkZW50LCBzaXplb2YobWFwX2lkZW50KSkpXFxuK1xcdFxcdGlmICghaXNfc2tlbF9kYXRhKG1hcCwgbWFwX2lkZW50LCBzaXplb2YobWFwX2lkZW50KSkpXFxuIFxcdFxcdFxcdGNvbnRpbnVlO1xcbiBcXG4gXFx0XFx0c2VjID0gZmluZF90eXBlX2Zvcl9tYXAoYnRmLCBtYXBfaWRlbnQpO1xcbkBAIC02NjgsOCArNjg1LDcgQEAgc3RhdGljIHZvaWQgY29kZWdlbl9kZXN0cm95KHN0cnVjdCBicGZfb2JqZWN0ICpvYmosIGNvbnN0IGNoYXIgKm9ial9uYW1lKVxcbiBcXHRicGZfb2JqZWN0X19mb3JfZWFjaF9tYXAobWFwLCBvYmopIHtcXG4gXFx0XFx0aWYgKCFnZXRfbWFwX2lkZW50KG1hcCwgaWRlbnQsIHNpemVvZihpZGVudCkpKVxcbiBcXHRcXHRcXHRjb250aW51ZTtcXG4tXFx0XFx0aWYgKGJwZl9tYXBfX2lzX2ludGVybmFsKG1hcCkgXFx1MDAyNlxcdTAwMjZcXG4tXFx0XFx0ICAgIChicGZfbWFwX19tYXBfZmxhZ3MobWFwKSBcXHUwMDI2IEJQRl9GX01NQVBBQkxFKSlcXG4rXFx0XFx0aWYgKGlzX3NrZWxfZGF0YShtYXAsIGlkZW50LCBzaXplb2YoaWRlbnQpKSlcXG4gXFx0XFx0XFx0cHJpbnRmKFxcXCJcXFxcdHNrZWxfZnJlZV9tYXBfZGF0YShza2VsLVxcdTAwM2UlMSRzLCBza2VsLVxcdTAwM2VtYXBzLiUxJHMuaW5pdGlhbF92YWx1ZSwgJTIkenUpO1xcXFxuXFxcIixcXG4gXFx0XFx0XFx0ICAgICAgIGlkZW50LCBicGZfbWFwX21tYXBfc3oobWFwKSk7XFxuIFxcdFxcdGNvZGVnZW4oXFxcIlxcXFxcXG5AQCAtNzQxLDcgKzc1Nyw3IEBAIHN0YXRpYyBpbnQgZ2VuX3RyYWNlKHN0cnVjdCBicGZfb2JqZWN0ICpvYmosIGNvbnN0IGNoYXIgKm9ial9uYW1lLCBjb25zdCBjaGFyICpoXFxuIFxcdFxcdGNvbnN0IHZvaWQgKm1tYXBfZGF0YSA9IE5VTEw7XFxuIFxcdFxcdHNpemVfdCBtbWFwX3NpemUgPSAwO1xcbiBcXG4tXFx0XFx0aWYgKCFpc19tbWFwYWJsZV9tYXAobWFwLCBpZGVudCwgc2l6ZW9mKGlkZW50KSkpXFxuK1xcdFxcdGlmICghaXNfc2tlbF9kYXRhKG1hcCwgaWRlbnQsIHNpemVvZihpZGVudCkpKVxcbiBcXHRcXHRcXHRjb250aW51ZTtcXG4gXFxuIFxcdFxcdGNvZGVnZW4oXFxcIlxcXFxcXG5AQCAtODQ5LDkgKzg2NSwyMyBAQCBzdGF0aWMgaW50IGdlbl90cmFjZShzdHJ1Y3QgYnBmX29iamVjdCAqb2JqLCBjb25zdCBjaGFyICpvYmpfbmFtZSwgY29uc3QgY2hhciAqaFxcbiBcXHRicGZfb2JqZWN0X19mb3JfZWFjaF9tYXAobWFwLCBvYmopIHtcXG4gXFx0XFx0Y29uc3QgY2hhciAqbW1hcF9mbGFncztcXG4gXFxuLVxcdFxcdGlmICghaXNfbW1hcGFibGVfbWFwKG1hcCwgaWRlbnQsIHNpemVvZihpZGVudCkpKVxcbitcXHRcXHRpZiAoIWlzX3NrZWxfZGF0YShtYXAsIGlkZW50LCBzaXplb2YoaWRlbnQpKSlcXG4gXFx0XFx0XFx0Y29udGludWU7XFxuIFxcbitcXHRcXHRpZiAoYnBmX21hcF9fdHlwZShtYXApID09IEJQRl9NQVBfVFlQRV9QRVJDUFVfQVJSQVkpIHtcXG4rXFx0XFx0XFx0Y29kZWdlbihcXFwiXFxcXFxcbitcXHRcXHRcXFxcblxcXFxcXG4rXFx0XFx0XFx0ZXJyID0gc2tlbF9wcm90ZWN0X21hcF9kYXRhKHNrZWwtXFx1MDAzZSUxJHMsIFxcdTAwMjZza2VsLVxcdTAwM2VtYXBzLiUxJHMuaW5pdGlhbF92YWx1ZSwgJTIkemQpO1xcXFxuXFxcXFxcbitcXHRcXHRcXHRpZiAoZXJyKVxcdFxcdFxcdFxcdFxcdCAgICBcXFxcblxcXFxcXG4rXFx0XFx0XFx0XFx0cmV0dXJuIGVycjtcXHRcXHRcXHRcXHQgICAgXFxcXG5cXFxcXFxuK1xcdFxcdCNpZmRlZiBfX0tFUk5FTF9fXFx0XFx0XFx0XFx0XFx0ICAgIFxcXFxuXFxcXFxcbitcXHRcXHRcXHRza2VsLVxcdTAwM2UlMSRzID0gTlVMTDtcXHRcXHRcXHRcXHQgICAgXFxcXG5cXFxcXFxuK1xcdFxcdCNlbmRpZlxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICBcXFxcblxcXFxcXG4rXFx0XFx0XFx0XFxcIixcXG4rXFx0XFx0XFx0aWRlbnQsIGJwZl9tYXBfbW1hcF9zeihtYXApKTtcXG4rXFx0XFx0XFx0Y29udGludWU7XFxuK1xcdFxcdH1cXG4rXFxuIFxcdFxcdGlmIChicGZfbWFwX19tYXBfZmxhZ3MobWFwKSBcXHUwMDI2IEJQRl9GX1JET05MWV9QUk9HKVxcbiBcXHRcXHRcXHRtbWFwX2ZsYWdzID0gXFxcIlBST1RfUkVBRFxcXCI7XFxuIFxcdFxcdGVsc2VcXG5AQCAtOTU1LDggKzk4NSw3IEBAIGNvZGVnZW5fbWFwc19za2VsZXRvbihzdHJ1Y3QgYnBmX29iamVjdCAqb2JqLCBzaXplX3QgbWFwX2NudCwgYm9vbCBtbWFwZWQsIGJvb2xcXG4gXFx0XFx0XFx0XFx0bWFwLVxcdTAwM2VtYXAgPSBcXHUwMDI2b2JqLVxcdTAwM2VtYXBzLiVzO1xcdCAgICBcXFxcblxcXFxcXG4gXFx0XFx0XFx0XFxcIixcXG4gXFx0XFx0XFx0aSwgYnBmX21hcF9fbmFtZShtYXApLCBpZGVudCk7XFxuLVxcdFxcdC8qIG1lbW9yeS1tYXBwZWQgaW50ZXJuYWwgbWFwcyAqL1xcbi1cXHRcXHRpZiAobW1hcGVkIFxcdTAwMjZcXHUwMDI2IGlzX21tYXBhYmxlX21hcChtYXAsIGlkZW50LCBzaXplb2YoaWRlbnQpKSkge1xcbitcXHRcXHRpZiAobW1hcGVkIFxcdTAwMjZcXHUwMDI2IGlzX3NrZWxfZGF0YShtYXAsIGlkZW50LCBzaXplb2YoaWRlbnQpKSkge1xcbiBcXHRcXHRcXHRwcmludGYoXFxcIlxcXFx0bWFwLVxcdTAwM2VtbWFwZWQgPSAodm9pZCAqKilcXHUwMDI2b2JqLVxcdTAwM2UlcztcXFxcblxcXCIsIGlkZW50KTtcXG4gXFx0XFx0fVxcbiBcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvbGliL2JwZi9icGZfZ2VuX2ludGVybmFsLmggYi90b29scy9saWIvYnBmL2JwZl9nZW5faW50ZXJuYWwuaFxcbmluZGV4IDA0MjU2OTE4Nzc1MjEuLjZjNWFkNmM1NWU4YTYgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvbGliL2JwZi9icGZfZ2VuX2ludGVybmFsLmhcXG4rKysgYi90b29scy9saWIvYnBmL2JwZl9nZW5faW50ZXJuYWwuaFxcbkBAIC02NSw3ICs2NSw4IEBAIHZvaWQgYnBmX2dlbl9fcHJvZ19sb2FkKHN0cnVjdCBicGZfZ2VuICpnZW4sXFxuIFxcdFxcdFxcdGVudW0gYnBmX3Byb2dfdHlwZSBwcm9nX3R5cGUsIGNvbnN0IGNoYXIgKnByb2dfbmFtZSxcXG4gXFx0XFx0XFx0Y29uc3QgY2hhciAqbGljZW5zZSwgc3RydWN0IGJwZl9pbnNuICppbnNucywgc2l6ZV90IGluc25fY250LFxcbiBcXHRcXHRcXHRzdHJ1Y3QgYnBmX3Byb2dfbG9hZF9vcHRzICpsb2FkX2F0dHIsIGludCBwcm9nX2lkeCk7XFxuLXZvaWQgYnBmX2dlbl9fbWFwX3VwZGF0ZV9lbGVtKHN0cnVjdCBicGZfZ2VuICpnZW4sIGludCBtYXBfaWR4LCB2b2lkICp2YWx1ZSwgX191MzIgdmFsdWVfc2l6ZSk7XFxuK3ZvaWQgYnBmX2dlbl9fbWFwX3VwZGF0ZV9lbGVtKHN0cnVjdCBicGZfZ2VuICpnZW4sIGludCBtYXBfaWR4LCB2b2lkICp2YWx1ZSwgX191MzIgdmFsdWVfc2l6ZSxcXG4rXFx0XFx0XFx0ICAgICAgX191NjQgZmxhZ3MpO1xcbiB2b2lkIGJwZl9nZW5fX21hcF9mcmVlemUoc3RydWN0IGJwZl9nZW4gKmdlbiwgaW50IG1hcF9pZHgpO1xcbiB2b2lkIGJwZl9nZW5fX3JlY29yZF9hdHRhY2hfdGFyZ2V0KHN0cnVjdCBicGZfZ2VuICpnZW4sIGNvbnN0IGNoYXIgKm5hbWUsIGVudW0gYnBmX2F0dGFjaF90eXBlIHR5cGUpO1xcbiB2b2lkIGJwZl9nZW5fX3JlY29yZF9leHRlcm4oc3RydWN0IGJwZl9nZW4gKmdlbiwgY29uc3QgY2hhciAqbmFtZSwgYm9vbCBpc193ZWFrLFxcbmRpZmYgLS1naXQgYS90b29scy9saWIvYnBmL2ZlYXR1cmVzLmMgYi90b29scy9saWIvYnBmL2ZlYXR1cmVzLmNcXG5pbmRleCBiN2UzODhmOTlkMGJiLi5lZjk1ODFjMTEzMDM1IDEwMDY0NFxcbi0tLSBhL3Rvb2xzL2xpYi9icGYvZmVhdHVyZXMuY1xcbisrKyBiL3Rvb2xzL2xpYi9icGYvZmVhdHVyZXMuY1xcbkBAIC02MjAsNiArNjIwLDM4IEBAIHN0YXRpYyBpbnQgcHJvYmVfYnBmX3N5c2NhbGxfY29tbW9uX2F0dHJzKGludCB0b2tlbl9mZClcXG4gXFx0cmV0dXJuIHByb2JlX3N5c19icGZfZXh0KCk7XFxuIH1cXG4gXFxuK3N0YXRpYyBpbnQgcHJvYmVfa2Vybl9wZXJjcHVfZGF0YShpbnQgdG9rZW5fZmQpXFxuK3tcXG4rXFx0c3RydWN0IGJwZl9pbnNuIGluc25zW10gPSB7XFxuK1xcdFxcdEJQRl9MRF9NQVBfVkFMVUUoQlBGX1JFR18xLCAwLCAwKSxcXG4rXFx0XFx0QlBGX0xEWF9NRU0oQlBGX0RXLCBCUEZfUkVHXzAsIEJQRl9SRUdfMSwgMCksXFxuK1xcdFxcdEJQRl9FWElUX0lOU04oKSxcXG4rXFx0fTtcXG4rXFx0TElCQlBGX09QVFMoYnBmX21hcF9jcmVhdGVfb3B0cywgbWFwX29wdHMsXFxuK1xcdFxcdC50b2tlbl9mZCA9IHRva2VuX2ZkLFxcbitcXHRcXHQubWFwX2ZsYWdzID0gdG9rZW5fZmQgPyBCUEZfRl9UT0tFTl9GRCA6IDAsXFxuK1xcdCk7XFxuK1xcdExJQkJQRl9PUFRTKGJwZl9wcm9nX2xvYWRfb3B0cywgcHJvZ19vcHRzLFxcbitcXHRcXHQudG9rZW5fZmQgPSB0b2tlbl9mZCxcXG4rXFx0XFx0LnByb2dfZmxhZ3MgPSB0b2tlbl9mZCA/IEJQRl9GX1RPS0VOX0ZEIDogMCxcXG4rXFx0KTtcXG4rXFx0aW50IHJldCwgbWFwLCBpbnNuX2NudCA9IEFSUkFZX1NJWkUoaW5zbnMpO1xcbitcXG4rXFx0bWFwID0gYnBmX21hcF9jcmVhdGUoQlBGX01BUF9UWVBFX1BFUkNQVV9BUlJBWSwgXFxcImxpYmJwZl9wZXJjcHVcXFwiLCBzaXplb2YoaW50KSwgOCwgMSxcXG4rXFx0XFx0XFx0ICAgICBcXHUwMDI2bWFwX29wdHMpO1xcbitcXHRpZiAobWFwIFxcdTAwM2MgMCkge1xcbitcXHRcXHRwcl93YXJuKFxcXCJFcnJvciBpbiAlcygpOiAlcy4gQ291bGRuJ3QgY3JlYXRlIHNpbXBsZSBwZXJjcHVfYXJyYXkgbWFwLlxcXFxuXFxcIixcXG4rXFx0XFx0XFx0X19mdW5jX18sIGVycnN0cihtYXApKTtcXG4rXFx0XFx0cmV0dXJuIG1hcDtcXG4rXFx0fVxcbitcXG4rXFx0aW5zbnNbMF0uaW1tID0gbWFwO1xcbitcXG4rXFx0cmV0ID0gYnBmX3Byb2dfbG9hZChCUEZfUFJPR19UWVBFX1NPQ0tFVF9GSUxURVIsIE5VTEwsIFxcXCJHUExcXFwiLCBpbnNucywgaW5zbl9jbnQsIFxcdTAwMjZwcm9nX29wdHMpO1xcbitcXHRjbG9zZShtYXApO1xcbitcXHRyZXR1cm4gcHJvYmVfZmQocmV0KTtcXG4rfVxcbitcXG4gdHlwZWRlZiBpbnQgKCpmZWF0dXJlX3Byb2JlX2ZuKShpbnQgLyogdG9rZW5fZmQgKi8pO1xcbiBcXG4gc3RhdGljIHN0cnVjdCBrZXJuX2ZlYXR1cmVfY2FjaGUgZmVhdHVyZV9jYWNoZTtcXG5AQCAtNzA3LDYgKzczOSw5IEBAIHN0YXRpYyBzdHJ1Y3Qga2Vybl9mZWF0dXJlX2Rlc2Mge1xcbiBcXHRbRkVBVF9CUEZfU1lTQ0FMTF9DT01NT05fQVRUUlNdID0ge1xcbiBcXHRcXHRcXFwiQlBGIHN5c2NhbGwgY29tbW9uIGF0dHJpYnV0ZXMgc3VwcG9ydFxcXCIsIHByb2JlX2JwZl9zeXNjYWxsX2NvbW1vbl9hdHRycyxcXG4gXFx0fSxcXG4rXFx0W0ZFQVRfUEVSQ1BVX0RBVEFdID0ge1xcbitcXHRcXHRcXFwia2VybmVsIHN1cHBvcnRzIHBlcmNwdSBkYXRhXFxcIiwgcHJvYmVfa2Vybl9wZXJjcHVfZGF0YSxcXG4rXFx0fSxcXG4gfTtcXG4gXFxuIGJvb2wgZmVhdF9zdXBwb3J0ZWQoc3RydWN0IGtlcm5fZmVhdHVyZV9jYWNoZSAqY2FjaGUsIGVudW0ga2Vybl9mZWF0dXJlX2lkIGZlYXRfaWQpXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL2xpYi9icGYvZ2VuX2xvYWRlci5jIGIvdG9vbHMvbGliL2JwZi9nZW5fbG9hZGVyLmNcXG5pbmRleCA2ZTNkZDUyNDI3NjE4Li5hZjNhMDRmMTYxYWMxIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL2xpYi9icGYvZ2VuX2xvYWRlci5jXFxuKysrIGIvdG9vbHMvbGliL2JwZi9nZW5fbG9hZGVyLmNcXG5AQCAtMTEyOCw3ICsxMTI4LDcgQEAgdm9pZCBicGZfZ2VuX19wcm9nX2xvYWQoc3RydWN0IGJwZl9nZW4gKmdlbixcXG4gfVxcbiBcXG4gdm9pZCBicGZfZ2VuX19tYXBfdXBkYXRlX2VsZW0oc3RydWN0IGJwZl9nZW4gKmdlbiwgaW50IG1hcF9pZHgsIHZvaWQgKnB2YWx1ZSxcXG4tXFx0XFx0XFx0ICAgICAgX191MzIgdmFsdWVfc2l6ZSlcXG4rXFx0XFx0XFx0ICAgICAgX191MzIgdmFsdWVfc2l6ZSwgX191NjQgZmxhZ3MpXFxuIHtcXG4gXFx0aW50IGF0dHJfc2l6ZSA9IG9mZnNldG9mZW5kKHVuaW9uIGJwZl9hdHRyLCBmbGFncyk7XFxuIFxcdGludCBtYXBfdXBkYXRlX2F0dHIsIHZhbHVlLCBrZXk7XFxuQEAgLTExMzYsNiArMTEzNiw3IEBAIHZvaWQgYnBmX2dlbl9fbWFwX3VwZGF0ZV9lbGVtKHN0cnVjdCBicGZfZ2VuICpnZW4sIGludCBtYXBfaWR4LCB2b2lkICpwdmFsdWUsXFxuIFxcdGludCB6ZXJvID0gMDtcXG4gXFxuIFxcdG1lbXNldChcXHUwMDI2YXR0ciwgMCwgYXR0cl9zaXplKTtcXG4rXFx0YXR0ci5mbGFncyA9IHRndF9lbmRpYW4oZmxhZ3MpO1xcbiBcXG4gXFx0dmFsdWUgPSBhZGRfZGF0YShnZW4sIHB2YWx1ZSwgdmFsdWVfc2l6ZSk7XFxuIFxcdGtleSA9IGFkZF9kYXRhKGdlbiwgXFx1MDAyNnplcm8sIHNpemVvZih6ZXJvKSk7XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL2xpYi9icGYvbGliYnBmLmMgYi90b29scy9saWIvYnBmL2xpYmJwZi5jXFxuaW5kZXggNTE0ZTRlOWRhYTgyNS4uOWY3OWE4ZTg1MGZkYiAxMDA2NDRcXG4tLS0gYS90b29scy9saWIvYnBmL2xpYmJwZi5jXFxuKysrIGIvdG9vbHMvbGliL2JwZi9saWJicGYuY1xcbkBAIC01NDEsNiArNTQxLDcgQEAgc3RydWN0IGJwZl9zdHJ1Y3Rfb3BzIHtcXG4gfTtcXG4gXFxuICNkZWZpbmUgREFUQV9TRUMgXFxcIi5kYXRhXFxcIlxcbisjZGVmaW5lIFBFUkNQVV9TRUMgXFxcIi5wZXJjcHVcXFwiXFxuICNkZWZpbmUgQlNTX1NFQyBcXFwiLmJzc1xcXCJcXG4gI2RlZmluZSBST0RBVEFfU0VDIFxcXCIucm9kYXRhXFxcIlxcbiAjZGVmaW5lIEtDT05GSUdfU0VDIFxcXCIua2NvbmZpZ1xcXCJcXG5AQCAtNTU1LDYgKzU1Niw3IEBAIGVudW0gbGliYnBmX21hcF90eXBlIHtcXG4gXFx0TElCQlBGX01BUF9CU1MsXFxuIFxcdExJQkJQRl9NQVBfUk9EQVRBLFxcbiBcXHRMSUJCUEZfTUFQX0tDT05GSUcsXFxuK1xcdExJQkJQRl9NQVBfUEVSQ1BVLFxcbiB9O1xcbiBcXG4gc3RydWN0IGJwZl9tYXBfZGVmIHtcXG5AQCAtNjY2LDYgKzY2OCw3IEBAIGVudW0gc2VjX3R5cGUge1xcbiBcXHRTRUNfREFUQSxcXG4gXFx0U0VDX1JPREFUQSxcXG4gXFx0U0VDX1NUX09QUyxcXG4rXFx0U0VDX1BFUkNQVSxcXG4gfTtcXG4gXFxuIHN0cnVjdCBlbGZfc2VjX2Rlc2Mge1xcbkBAIC0xODM5LDYgKzE4NDIsOCBAQCBzdGF0aWMgc2l6ZV90IGJwZl9tYXBfbW1hcF9zeihjb25zdCBzdHJ1Y3QgYnBmX21hcCAqbWFwKVxcbiBcXHRzd2l0Y2ggKG1hcC1cXHUwMDNlZGVmLnR5cGUpIHtcXG4gXFx0Y2FzZSBCUEZfTUFQX1RZUEVfQVJSQVk6XFxuIFxcdFxcdHJldHVybiBhcnJheV9tYXBfbW1hcF9zeihtYXAtXFx1MDAzZWRlZi52YWx1ZV9zaXplLCBtYXAtXFx1MDAzZWRlZi5tYXhfZW50cmllcyk7XFxuK1xcdGNhc2UgQlBGX01BUF9UWVBFX1BFUkNQVV9BUlJBWTpcXG4rXFx0XFx0cmV0dXJuIG1hcC1cXHUwMDNlZGVmLnZhbHVlX3NpemU7XFxuIFxcdGNhc2UgQlBGX01BUF9UWVBFX0FSRU5BOlxcbiBcXHRcXHRyZXR1cm4gcGFnZV9zeiAqIG1hcC1cXHUwMDNlZGVmLm1heF9lbnRyaWVzO1xcbiBcXHRkZWZhdWx0OlxcbkBAIC0xODY2LDcgKzE4NzEsOCBAQCBzdGF0aWMgaW50IGJwZl9tYXBfbW1hcF9yZXNpemUoc3RydWN0IGJwZl9tYXAgKm1hcCwgc2l6ZV90IG9sZF9zeiwgc2l6ZV90IG5ld19zelxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4tc3RhdGljIGNoYXIgKmludGVybmFsX21hcF9uYW1lKHN0cnVjdCBicGZfb2JqZWN0ICpvYmosIGNvbnN0IGNoYXIgKnJlYWxfbmFtZSlcXG4rc3RhdGljIGNoYXIgKmludGVybmFsX21hcF9uYW1lKHN0cnVjdCBicGZfb2JqZWN0ICpvYmosIGNvbnN0IGNoYXIgKnJlYWxfbmFtZSxcXG4rXFx0XFx0XFx0ICAgICAgIGVudW0gbGliYnBmX21hcF90eXBlIHR5cGUpXFxuIHtcXG4gXFx0Y2hhciBtYXBfbmFtZVtCUEZfT0JKX05BTUVfTEVOXSwgKnA7XFxuIFxcdGludCBwZnhfbGVuLCBzZnhfbGVuID0gbWF4KChzaXplX3QpNywgc3RybGVuKHJlYWxfbmFtZSkpO1xcbkBAIC0xOTA3LDggKzE5MTMsMTEgQEAgc3RhdGljIGNoYXIgKmludGVybmFsX21hcF9uYW1lKHN0cnVjdCBicGZfb2JqZWN0ICpvYmosIGNvbnN0IGNoYXIgKnJlYWxfbmFtZSlcXG4gXFx0aWYgKHNmeF9sZW4gXFx1MDAzZT0gQlBGX09CSl9OQU1FX0xFTilcXG4gXFx0XFx0c2Z4X2xlbiA9IEJQRl9PQkpfTkFNRV9MRU4gLSAxO1xcbiBcXG4tXFx0LyogaWYgdGhlcmUgYXJlIHR3byBvciBtb3JlIGRvdHMgaW4gbWFwIG5hbWUsIGl0J3MgYSBjdXN0b20gZG90IG1hcCAqL1xcbi1cXHRpZiAoc3RyY2hyKHJlYWxfbmFtZSArIDEsICcuJykgIT0gTlVMTClcXG4rXFx0LypcXG4rXFx0ICogRG9uJ3QgcHJlZml4IHRoZSBicGZfb2JqZWN0IG5hbWUgaWYgdGhpcyBpcyBhIGN1c3RvbSBkb3QgbWFwXFxuK1xcdCAqIChjb250YWluaW5nIHR3byBvciBtb3JlIGRvdHMpIG9yIGEgcGVyY3B1IGRhdGEgbWFwLlxcbitcXHQgKi9cXG4rXFx0aWYgKHN0cmNocihyZWFsX25hbWUgKyAxLCAnLicpICE9IE5VTEwgfHwgdHlwZSA9PSBMSUJCUEZfTUFQX1BFUkNQVSlcXG4gXFx0XFx0cGZ4X2xlbiA9IDA7XFxuIFxcdGVsc2VcXG4gXFx0XFx0cGZ4X2xlbiA9IG1pbigoc2l6ZV90KUJQRl9PQkpfTkFNRV9MRU4gLSBzZnhfbGVuIC0gMSwgc3RybGVuKG9iai1cXHUwMDNlbmFtZSkpO1xcbkBAIC0xOTQxLDYgKzE5NTAsMTMgQEAgc3RhdGljIGJvb2wgbWFwX2lzX21tYXBhYmxlKHN0cnVjdCBicGZfb2JqZWN0ICpvYmosIHN0cnVjdCBicGZfbWFwICptYXApXFxuIFxcdGlmICghbWFwLVxcdTAwM2VidGZfdmFsdWVfdHlwZV9pZClcXG4gXFx0XFx0cmV0dXJuIGZhbHNlO1xcbiBcXG4rXFx0LypcXG4rXFx0ICogVGhlIGludGVybmFsIFBFUkNQVSBtYXBzIGFyZSBub3QgbW1hcGJsZSBiZWNhdXNlIHRoZSB1bmRlcmx5aW5nXFxuK1xcdCAqIHBlcmNwdV9hcnJheSBtYXBzIGRvIG5vdCBoYXZlIG1tYXAgc3VwcG9ydC5cXG4rXFx0ICovXFxuK1xcdGlmIChtYXAtXFx1MDAzZWxpYmJwZl90eXBlID09IExJQkJQRl9NQVBfUEVSQ1BVKVxcbitcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcbiBcXHR0ID0gYnRmX190eXBlX2J5X2lkKG9iai1cXHUwMDNlYnRmLCBtYXAtXFx1MDAzZWJ0Zl92YWx1ZV90eXBlX2lkKTtcXG4gXFx0aWYgKCFidGZfaXNfZGF0YXNlYyh0KSlcXG4gXFx0XFx0cmV0dXJuIGZhbHNlO1xcbkBAIC0xOTYyLDYgKzE5NzgsNyBAQCBzdGF0aWMgaW50XFxuIGJwZl9vYmplY3RfX2luaXRfaW50ZXJuYWxfbWFwKHN0cnVjdCBicGZfb2JqZWN0ICpvYmosIGVudW0gbGliYnBmX21hcF90eXBlIHR5cGUsXFxuIFxcdFxcdFxcdCAgICAgIGNvbnN0IGNoYXIgKnJlYWxfbmFtZSwgaW50IHNlY19pZHgsIHZvaWQgKmRhdGEsIHNpemVfdCBkYXRhX3N6KVxcbiB7XFxuK1xcdGJvb2wgaXNfcGVyY3B1ID0gdHlwZSA9PSBMSUJCUEZfTUFQX1BFUkNQVTtcXG4gXFx0c3RydWN0IGJwZl9tYXBfZGVmICpkZWY7XFxuIFxcdHN0cnVjdCBicGZfbWFwICptYXA7XFxuIFxcdHNpemVfdCBtbWFwX3N6O1xcbkBAIC0xOTc1LDcgKzE5OTIsNyBAQCBicGZfb2JqZWN0X19pbml0X2ludGVybmFsX21hcChzdHJ1Y3QgYnBmX29iamVjdCAqb2JqLCBlbnVtIGxpYmJwZl9tYXBfdHlwZSB0eXBlLFxcbiBcXHRtYXAtXFx1MDAzZXNlY19pZHggPSBzZWNfaWR4O1xcbiBcXHRtYXAtXFx1MDAzZXNlY19vZmZzZXQgPSAwO1xcbiBcXHRtYXAtXFx1MDAzZXJlYWxfbmFtZSA9IHN0cmR1cChyZWFsX25hbWUpO1xcbi1cXHRtYXAtXFx1MDAzZW5hbWUgPSBpbnRlcm5hbF9tYXBfbmFtZShvYmosIHJlYWxfbmFtZSk7XFxuK1xcdG1hcC1cXHUwMDNlbmFtZSA9IGludGVybmFsX21hcF9uYW1lKG9iaiwgcmVhbF9uYW1lLCB0eXBlKTtcXG4gXFx0aWYgKCFtYXAtXFx1MDAzZXJlYWxfbmFtZSB8fCAhbWFwLVxcdTAwM2VuYW1lKSB7XFxuIFxcdFxcdHpmcmVlKFxcdTAwMjZtYXAtXFx1MDAzZXJlYWxfbmFtZSk7XFxuIFxcdFxcdHpmcmVlKFxcdTAwMjZtYXAtXFx1MDAzZW5hbWUpO1xcbkBAIC0xOTgzLDcgKzIwMDAsNyBAQCBicGZfb2JqZWN0X19pbml0X2ludGVybmFsX21hcChzdHJ1Y3QgYnBmX29iamVjdCAqb2JqLCBlbnVtIGxpYmJwZl9tYXBfdHlwZSB0eXBlLFxcbiBcXHR9XFxuIFxcbiBcXHRkZWYgPSBcXHUwMDI2bWFwLVxcdTAwM2VkZWY7XFxuLVxcdGRlZi1cXHUwMDNldHlwZSA9IEJQRl9NQVBfVFlQRV9BUlJBWTtcXG4rXFx0ZGVmLVxcdTAwM2V0eXBlID0gaXNfcGVyY3B1ID8gQlBGX01BUF9UWVBFX1BFUkNQVV9BUlJBWSA6IEJQRl9NQVBfVFlQRV9BUlJBWTtcXG4gXFx0ZGVmLVxcdTAwM2VrZXlfc2l6ZSA9IHNpemVvZihpbnQpO1xcbiBcXHRkZWYtXFx1MDAzZXZhbHVlX3NpemUgPSBkYXRhX3N6O1xcbiBcXHRkZWYtXFx1MDAzZW1heF9lbnRyaWVzID0gMTtcXG5AQCAtMTk5Niw4ICsyMDEzLDkgQEAgYnBmX29iamVjdF9faW5pdF9pbnRlcm5hbF9tYXAoc3RydWN0IGJwZl9vYmplY3QgKm9iaiwgZW51bSBsaWJicGZfbWFwX3R5cGUgdHlwZSxcXG4gXFx0aWYgKG1hcF9pc19tbWFwYWJsZShvYmosIG1hcCkpXFxuIFxcdFxcdGRlZi1cXHUwMDNlbWFwX2ZsYWdzIHw9IEJQRl9GX01NQVBBQkxFO1xcbiBcXG4tXFx0cHJfZGVidWcoXFxcIm1hcCAnJXMnIChnbG9iYWwgZGF0YSk6IGF0IHNlY19pZHggJWQsIG9mZnNldCAlenUsIGZsYWdzICV4LlxcXFxuXFxcIixcXG4tXFx0XFx0IG1hcC1cXHUwMDNlbmFtZSwgbWFwLVxcdTAwM2VzZWNfaWR4LCBtYXAtXFx1MDAzZXNlY19vZmZzZXQsIGRlZi1cXHUwMDNlbWFwX2ZsYWdzKTtcXG4rXFx0cHJfZGVidWcoXFxcIm1hcCAnJXMnIChnbG9iYWwgJXNkYXRhKTogYXQgc2VjX2lkeCAlZCwgb2Zmc2V0ICV6dSwgZmxhZ3MgJXguXFxcXG5cXFwiLFxcbitcXHRcXHQgbWFwLVxcdTAwM2VuYW1lLCBpc19wZXJjcHUgPyBcXFwicGVyY3B1IFxcXCIgOiBcXFwiXFxcIiwgbWFwLVxcdTAwM2VzZWNfaWR4LFxcbitcXHRcXHQgbWFwLVxcdTAwM2VzZWNfb2Zmc2V0LCBkZWYtXFx1MDAzZW1hcF9mbGFncyk7XFxuIFxcbiBcXHRtbWFwX3N6ID0gYnBmX21hcF9tbWFwX3N6KG1hcCk7XFxuIFxcdG1hcC1cXHUwMDNlbW1hcGVkID0gbW1hcChOVUxMLCBtbWFwX3N6LCBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFLFxcbkBAIC0yMDU3LDYgKzIwNzUsMTMgQEAgc3RhdGljIGludCBicGZfb2JqZWN0X19pbml0X2dsb2JhbF9kYXRhX21hcHMoc3RydWN0IGJwZl9vYmplY3QgKm9iailcXG4gXFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgIE5VTEwsXFxuIFxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICBzZWNfZGVzYy1cXHUwMDNlZGF0YS1cXHUwMDNlZF9zaXplKTtcXG4gXFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdGNhc2UgU0VDX1BFUkNQVTpcXG4rXFx0XFx0XFx0c2VjX25hbWUgPSBlbGZfc2VjX25hbWUob2JqLCBlbGZfc2VjX2J5X2lkeChvYmosIHNlY19pZHgpKTtcXG4rXFx0XFx0XFx0ZXJyID0gYnBmX29iamVjdF9faW5pdF9pbnRlcm5hbF9tYXAob2JqLCBMSUJCUEZfTUFQX1BFUkNQVSxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgIHNlY19uYW1lLCBzZWNfaWR4LFxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgc2VjX2Rlc2MtXFx1MDAzZWRhdGEtXFx1MDAzZWRfYnVmLFxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgc2VjX2Rlc2MtXFx1MDAzZWRhdGEtXFx1MDAzZWRfc2l6ZSk7XFxuK1xcdFxcdFxcdGJyZWFrO1xcbiBcXHRcXHRkZWZhdWx0OlxcbiBcXHRcXHRcXHQvKiBza2lwICovXFxuIFxcdFxcdFxcdGJyZWFrO1xcbkBAIC00MDE2LDYgKzQwNDEsMTEgQEAgc3RhdGljIGludCBicGZfb2JqZWN0X19lbGZfY29sbGVjdChzdHJ1Y3QgYnBmX29iamVjdCAqb2JqKVxcbiBcXHRcXHRcXHRcXHRzZWNfZGVzYy1cXHUwMDNlc2VjX3R5cGUgPSBTRUNfUk9EQVRBO1xcbiBcXHRcXHRcXHRcXHRzZWNfZGVzYy1cXHUwMDNlc2hkciA9IHNoO1xcbiBcXHRcXHRcXHRcXHRzZWNfZGVzYy1cXHUwMDNlZGF0YSA9IGRhdGE7XFxuK1xcdFxcdFxcdH0gZWxzZSBpZiAoc3RyY21wKG5hbWUsIFBFUkNQVV9TRUMpID09IDAgfHxcXG4rXFx0XFx0XFx0XFx0ICAgc3RyX2hhc19wZngobmFtZSwgUEVSQ1BVX1NFQyBcXFwiLlxcXCIpKSB7XFxuK1xcdFxcdFxcdFxcdHNlY19kZXNjLVxcdTAwM2VzZWNfdHlwZSA9IFNFQ19QRVJDUFU7XFxuK1xcdFxcdFxcdFxcdHNlY19kZXNjLVxcdTAwM2VzaGRyID0gc2g7XFxuK1xcdFxcdFxcdFxcdHNlY19kZXNjLVxcdTAwM2VkYXRhID0gZGF0YTtcXG4gXFx0XFx0XFx0fSBlbHNlIGlmIChzdHJjbXAobmFtZSwgU1RSVUNUX09QU19TRUMpID09IDAgfHxcXG4gXFx0XFx0XFx0XFx0ICAgc3RyY21wKG5hbWUsIFNUUlVDVF9PUFNfTElOS19TRUMpID09IDAgfHxcXG4gXFx0XFx0XFx0XFx0ICAgc3RyY21wKG5hbWUsIFxcXCI/XFxcIiBTVFJVQ1RfT1BTX1NFQykgPT0gMCB8fFxcbkBAIC00NTQ0LDYgKzQ1NzQsNyBAQCBzdGF0aWMgYm9vbCBicGZfb2JqZWN0X19zaG5keF9pc19kYXRhKGNvbnN0IHN0cnVjdCBicGZfb2JqZWN0ICpvYmosXFxuIFxcdGNhc2UgU0VDX0JTUzpcXG4gXFx0Y2FzZSBTRUNfREFUQTpcXG4gXFx0Y2FzZSBTRUNfUk9EQVRBOlxcbitcXHRjYXNlIFNFQ19QRVJDUFU6XFxuIFxcdFxcdHJldHVybiB0cnVlO1xcbiBcXHRkZWZhdWx0OlxcbiBcXHRcXHRyZXR1cm4gZmFsc2U7XFxuQEAgLTQ1NjksNiArNDYwMCw4IEBAIGJwZl9vYmplY3RfX3NlY3Rpb25fdG9fbGliYnBmX21hcF90eXBlKGNvbnN0IHN0cnVjdCBicGZfb2JqZWN0ICpvYmosIGludCBzaG5keClcXG4gXFx0XFx0cmV0dXJuIExJQkJQRl9NQVBfREFUQTtcXG4gXFx0Y2FzZSBTRUNfUk9EQVRBOlxcbiBcXHRcXHRyZXR1cm4gTElCQlBGX01BUF9ST0RBVEE7XFxuK1xcdGNhc2UgU0VDX1BFUkNQVTpcXG4rXFx0XFx0cmV0dXJuIExJQkJQRl9NQVBfUEVSQ1BVO1xcbiBcXHRkZWZhdWx0OlxcbiBcXHRcXHRyZXR1cm4gTElCQlBGX01BUF9VTlNQRUM7XFxuIFxcdH1cXG5AQCAtNDk0NCw3ICs0OTc3LDcgQEAgc3RhdGljIGludCBtYXBfZmlsbF9idGZfdHlwZV9pbmZvKHN0cnVjdCBicGZfb2JqZWN0ICpvYmosIHN0cnVjdCBicGZfbWFwICptYXApXFxuIFxcbiBcXHQvKlxcbiBcXHQgKiBMTFZNIGFubm90YXRlcyBnbG9iYWwgZGF0YSBkaWZmZXJlbnRseSBpbiBCVEYsIHRoYXQgaXMsXFxuLVxcdCAqIG9ubHkgYXMgJy5kYXRhJywgJy5ic3MnIG9yICcucm9kYXRhJy5cXG4rXFx0ICogb25seSBhcyAnLmRhdGEnLCAnLmJzcycsICcucGVyY3B1JyBvciAnLnJvZGF0YScuXFxuIFxcdCAqL1xcbiBcXHRpZiAoIWJwZl9tYXBfX2lzX2ludGVybmFsKG1hcCkpXFxuIFxcdFxcdHJldHVybiAtRU5PRU5UO1xcbkBAIC01MjkzLDE4ICs1MzI2LDI2IEBAIHN0YXRpYyBpbnRcXG4gYnBmX29iamVjdF9fcG9wdWxhdGVfaW50ZXJuYWxfbWFwKHN0cnVjdCBicGZfb2JqZWN0ICpvYmosIHN0cnVjdCBicGZfbWFwICptYXApXFxuIHtcXG4gXFx0ZW51bSBsaWJicGZfbWFwX3R5cGUgbWFwX3R5cGUgPSBtYXAtXFx1MDAzZWxpYmJwZl90eXBlO1xcbitcXHRib29sIGlzX3BlcmNwdSA9IG1hcF90eXBlID09IExJQkJQRl9NQVBfUEVSQ1BVO1xcbitcXHRjb25zdCBfX3U2NCB1cGRhdGVfZmxhZ3MgPSBpc19wZXJjcHUgPyBCUEZfRl9BTExfQ1BVUyA6IDA7XFxuIFxcdGludCBlcnIsIHplcm8gPSAwO1xcbiBcXHRzaXplX3QgbW1hcF9zejtcXG4gXFxuK1xcdGlmIChpc19wZXJjcHUgXFx1MDAyNlxcdTAwMjYgIW9iai1cXHUwMDNlZ2VuX2xvYWRlciBcXHUwMDI2XFx1MDAyNiAha2VybmVsX3N1cHBvcnRzKG9iaiwgRkVBVF9QRVJDUFVfREFUQSkpIHtcXG4rXFx0XFx0cHJfd2FybihcXFwibWFwICclcyc6IGtlcm5lbCBkb2VzIG5vdCBzdXBwb3J0IHBlcmNwdSBkYXRhLlxcXFxuXFxcIixcXG4rXFx0XFx0XFx0YnBmX21hcF9fbmFtZShtYXApKTtcXG4rXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbitcXHR9XFxuK1xcbiBcXHRpZiAob2JqLVxcdTAwM2VnZW5fbG9hZGVyKSB7XFxuIFxcdFxcdGJwZl9nZW5fX21hcF91cGRhdGVfZWxlbShvYmotXFx1MDAzZWdlbl9sb2FkZXIsIG1hcCAtIG9iai1cXHUwMDNlbWFwcyxcXG4tXFx0XFx0XFx0XFx0XFx0IG1hcC1cXHUwMDNlbW1hcGVkLCBtYXAtXFx1MDAzZWRlZi52YWx1ZV9zaXplKTtcXG4rXFx0XFx0XFx0XFx0XFx0IG1hcC1cXHUwMDNlbW1hcGVkLCBtYXAtXFx1MDAzZWRlZi52YWx1ZV9zaXplLCB1cGRhdGVfZmxhZ3MpO1xcbiBcXHRcXHRpZiAobWFwX3R5cGUgPT0gTElCQlBGX01BUF9ST0RBVEEgfHwgbWFwX3R5cGUgPT0gTElCQlBGX01BUF9LQ09ORklHKVxcbiBcXHRcXHRcXHRicGZfZ2VuX19tYXBfZnJlZXplKG9iai1cXHUwMDNlZ2VuX2xvYWRlciwgbWFwIC0gb2JqLVxcdTAwM2VtYXBzKTtcXG4gXFx0XFx0cmV0dXJuIDA7XFxuIFxcdH1cXG4gXFxuLVxcdGVyciA9IGJwZl9tYXBfdXBkYXRlX2VsZW0obWFwLVxcdTAwM2VmZCwgXFx1MDAyNnplcm8sIG1hcC1cXHUwMDNlbW1hcGVkLCAwKTtcXG4rXFx0ZXJyID0gYnBmX21hcF91cGRhdGVfZWxlbShtYXAtXFx1MDAzZWZkLCBcXHUwMDI2emVybywgbWFwLVxcdTAwM2VtbWFwZWQsIHVwZGF0ZV9mbGFncyk7XFxuIFxcdGlmIChlcnIpIHtcXG4gXFx0XFx0ZXJyID0gLWVycm5vO1xcbiBcXHRcXHRwcl93YXJuKFxcXCJtYXAgJyVzJzogZmFpbGVkIHRvIHNldCBpbml0aWFsIGNvbnRlbnRzOiAlc1xcXFxuXFxcIixcXG5AQCAtNTM0OSw2ICs1MzkwLDEzIEBAIGJwZl9vYmplY3RfX3BvcHVsYXRlX2ludGVybmFsX21hcChzdHJ1Y3QgYnBmX29iamVjdCAqb2JqLCBzdHJ1Y3QgYnBmX21hcCAqbWFwKVxcbiBcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbiBcXHRcXHR9XFxuIFxcdFxcdG1hcC1cXHUwMDNlbW1hcGVkID0gbW1hcGVkO1xcbitcXHR9IGVsc2UgaWYgKGlzX3BlcmNwdSkge1xcbitcXHRcXHRpZiAobXByb3RlY3QobWFwLVxcdTAwM2VtbWFwZWQsIG1tYXBfc3osIFBST1RfUkVBRCkpIHtcXG4rXFx0XFx0XFx0ZXJyID0gLWVycm5vO1xcbitcXHRcXHRcXHRwcl93YXJuKFxcXCJtYXAgJyVzJzogZmFpbGVkIHRvIG1wcm90ZWN0KCkgY29udGVudHM6ICVzXFxcXG5cXFwiLFxcbitcXHRcXHRcXHRcXHRicGZfbWFwX19uYW1lKG1hcCksIGVycnN0cihlcnIpKTtcXG4rXFx0XFx0XFx0cmV0dXJuIGVycjtcXG4rXFx0XFx0fVxcbiBcXHR9IGVsc2UgaWYgKG1hcC1cXHUwMDNlbW1hcGVkKSB7XFxuIFxcdFxcdG11bm1hcChtYXAtXFx1MDAzZW1tYXBlZCwgbW1hcF9zeik7XFxuIFxcdFxcdG1hcC1cXHUwMDNlbW1hcGVkID0gTlVMTDtcXG5AQCAtNTYyNyw2ICs1Njc1LDkgQEAgYnBmX29iamVjdF9fY3JlYXRlX21hcHMoc3RydWN0IGJwZl9vYmplY3QgKm9iailcXG4gXFx0XFx0ICovXFxuIFxcdFxcdGlmIChicGZfbWFwX19pc19pbnRlcm5hbChtYXApIFxcdTAwMjZcXHUwMDI2ICFrZXJuZWxfc3VwcG9ydHMob2JqLCBGRUFUX0dMT0JBTF9EQVRBKSlcXG4gXFx0XFx0XFx0bWFwLVxcdTAwM2VhdXRvY3JlYXRlID0gZmFsc2U7XFxuK1xcdFxcdGlmIChicGZfbWFwX19pc19pbnRlcm5hbChtYXApIFxcdTAwMjZcXHUwMDI2IGJwZl9tYXBfX3R5cGUobWFwKSA9PSBCUEZfTUFQX1RZUEVfUEVSQ1BVX0FSUkFZIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdCAgICAha2VybmVsX3N1cHBvcnRzKG9iaiwgRkVBVF9QRVJDUFVfREFUQSkpXFxuK1xcdFxcdFxcdG1hcC1cXHUwMDNlYXV0b2NyZWF0ZSA9IGZhbHNlO1xcbiBcXG4gXFx0XFx0aWYgKCFtYXAtXFx1MDAzZWF1dG9jcmVhdGUpIHtcXG4gXFx0XFx0XFx0cHJfZGVidWcoXFxcIm1hcCAnJXMnOiBza2lwcGVkIGF1dG8tY3JlYXRpbmcuLi5cXFxcblxcXCIsIG1hcC1cXHUwMDNlbmFtZSk7XFxuQEAgLTEwODA3LDExICsxMDg1OCwxNiBAQCBzdGF0aWMgYm9vbCBtYXBfdXNlc19yZWFsX25hbWUoY29uc3Qgc3RydWN0IGJwZl9tYXAgKm1hcClcXG4gXFx0ICogc3VjaCBtYXAncyBjb3JyZXNwb25kaW5nIEVMRiBzZWN0aW9uIG5hbWUgYXMgYSBtYXAgbmFtZS5cXG4gXFx0ICogVGhpcyBjaGVjayBkaXN0aW5ndWlzaGVzIC5kYXRhLy5yb2RhdGEgZnJvbSAuZGF0YS4qIGFuZCAucm9kYXRhLipcXG4gXFx0ICogbWFwcyB0byBrbm93IHdoaWNoIG5hbWUgaGFzIHRvIGJlIHJldHVybmVkIHRvIHRoZSB1c2VyLlxcbitcXHQgKiBNYXAgbmFtZSBvZiB0aGUgY3VzdG9tIC5wZXJjcHUuKiBtYXBzIG1pZ2h0IGJlIHRydW5jYXRlZCB0b1xcbitcXHQgKiBCUEZfT0JKX05BTUVfTEVOLTEgY2hhcnMgaW4gaW50ZXJuYWxfbWFwX25hbWUoKS4gSGVuY2UsIHBlcmNwdSBkYXRhXFxuK1xcdCAqIG1hcHMgbXVzdCB1c2UgcmVhbCBuYW1lIGZvciB0aGVpciB1c2VyLXZpc2libGUgbmFtZS5cXG4gXFx0ICovXFxuIFxcdGlmIChtYXAtXFx1MDAzZWxpYmJwZl90eXBlID09IExJQkJQRl9NQVBfREFUQSBcXHUwMDI2XFx1MDAyNiBzdHJjbXAobWFwLVxcdTAwM2VyZWFsX25hbWUsIERBVEFfU0VDKSAhPSAwKVxcbiBcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4gXFx0aWYgKG1hcC1cXHUwMDNlbGliYnBmX3R5cGUgPT0gTElCQlBGX01BUF9ST0RBVEEgXFx1MDAyNlxcdTAwMjYgc3RyY21wKG1hcC1cXHUwMDNlcmVhbF9uYW1lLCBST0RBVEFfU0VDKSAhPSAwKVxcbiBcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4rXFx0aWYgKG1hcC1cXHUwMDNlbGliYnBmX3R5cGUgPT0gTElCQlBGX01BUF9QRVJDUFUpXFxuK1xcdFxcdHJldHVybiB0cnVlO1xcbiBcXHRyZXR1cm4gZmFsc2U7XFxuIH1cXG4gXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL2xpYi9icGYvbGliYnBmX2ludGVybmFsLmggYi90b29scy9saWIvYnBmL2xpYmJwZl9pbnRlcm5hbC5oXFxuaW5kZXggN2E3NGFiYjkwNGY4Yi4uNGM0NmQzNGZjMDU1ZCAxMDA2NDRcXG4tLS0gYS90b29scy9saWIvYnBmL2xpYmJwZl9pbnRlcm5hbC5oXFxuKysrIGIvdG9vbHMvbGliL2JwZi9saWJicGZfaW50ZXJuYWwuaFxcbkBAIC00MDEsNiArNDAxLDggQEAgZW51bSBrZXJuX2ZlYXR1cmVfaWQge1xcbiBcXHRGRUFUX0JURl9MQVlPVVQsXFxuIFxcdC8qIEtlcm5lbCBzdXBwb3J0cyBCUEYgc3lzY2FsbCBjb21tb24gYXR0cmlidXRlcyAqL1xcbiBcXHRGRUFUX0JQRl9TWVNDQUxMX0NPTU1PTl9BVFRSUyxcXG4rXFx0LyogS2VybmVsIHN1cHBvcnRzIHBlcmNwdSBkYXRhICovXFxuK1xcdEZFQVRfUEVSQ1BVX0RBVEEsXFxuIFxcdF9fRkVBVF9DTlQsXFxuIH07XFxuIFxcbmRpZmYgLS1naXQgYS90b29scy9saWIvYnBmL3NrZWxfaW50ZXJuYWwuaCBiL3Rvb2xzL2xpYi9icGYvc2tlbF9pbnRlcm5hbC5oXFxuaW5kZXggNTNmZWU1M2QzNmQ1MS4uMWYzZjMzMmRmZmJlOSAxMDA2NDRcXG4tLS0gYS90b29scy9saWIvYnBmL3NrZWxfaW50ZXJuYWwuaFxcbisrKyBiL3Rvb2xzL2xpYi9icGYvc2tlbF9pbnRlcm5hbC5oXFxuQEAgLTEzMSw4ICsxMzEsMTAgQEAgc3RhdGljIGlubGluZSB2b2lkIHNrZWxfZnJlZV9tYXBfZGF0YSh2b2lkICpwLCBfX3U2NCBhZGRyLCBzaXplX3Qgc3opXFxuIHtcXG4gXFx0aWYgKGFkZHIgIT0gfjBVTEwpXFxuIFxcdFxcdGt2ZnJlZShwKTtcXG4tXFx0LyogV2hlbiBhZGRyID09IH4wVUxMIHRoZSAncCcgcG9pbnRzIHRvXFxuLVxcdCAqICgoc3RydWN0IGJwZl9hcnJheSAqKW1hcCktXFx1MDAzZXZhbHVlLiBTZWUgc2tlbF9maW5hbGl6ZV9tYXBfZGF0YS5cXG4rXFx0LypcXG4rXFx0ICogV2hlbiBhZGRyID09IH4wVUxMIHRoZSBpbml0IGJ1ZmZlciBoYXMgYWxyZWFkeSBiZWVuIHJlbGVhc2VkLlxcbitcXHQgKiBGb3Igc2tlbF9maW5hbGl6ZV9tYXBfZGF0YSgpLCAncCcgcG9pbnRzIHRvXFxuK1xcdCAqICgoc3RydWN0IGJwZl9hcnJheSAqKW1hcCktXFx1MDAzZXZhbHVlLlxcbiBcXHQgKi9cXG4gfVxcbiBcXG5AQCAtMTcwLDYgKzE3MiwxNSBAQCBzdGF0aWMgaW5saW5lIHZvaWQgKnNrZWxfZmluYWxpemVfbWFwX2RhdGEoX191NjQgKmluaXRfdmFsLCBzaXplX3QgbW1hcF9zeiwgaW50XFxuIFxcdHJldHVybiBhZGRyO1xcbiB9XFxuIFxcbitzdGF0aWMgaW5saW5lIGludCBza2VsX3Byb3RlY3RfbWFwX2RhdGEodm9pZCAqcCwgX191NjQgKmluaXRfdmFsLCBzaXplX3Qgc3opXFxuK3tcXG4rXFx0KHZvaWQpc3o7XFxuK1xcbitcXHRrdmZyZWUocCk7XFxuK1xcdCppbml0X3ZhbCA9IH4wVUxMO1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4gI2Vsc2VcXG4gXFxuIHN0YXRpYyBpbmxpbmUgdm9pZCAqc2tlbF9hbGxvYyhzaXplX3Qgc2l6ZSlcXG5AQCAtMjA4LDYgKzIxOSwxNSBAQCBzdGF0aWMgaW5saW5lIHZvaWQgKnNrZWxfZmluYWxpemVfbWFwX2RhdGEoX191NjQgKmluaXRfdmFsLCBzaXplX3QgbW1hcF9zeiwgaW50XFxuIFxcdFxcdHJldHVybiBOVUxMO1xcbiBcXHRyZXR1cm4gYWRkcjtcXG4gfVxcbitcXG4rc3RhdGljIGlubGluZSBpbnQgc2tlbF9wcm90ZWN0X21hcF9kYXRhKHZvaWQgKnAsIF9fdTY0ICppbml0X3ZhbCwgc2l6ZV90IHN6KVxcbit7XFxuK1xcdCh2b2lkKWluaXRfdmFsO1xcbitcXG4rXFx0aWYgKG1wcm90ZWN0KHAsIHN6LCBQUk9UX1JFQUQpKVxcbitcXHRcXHRyZXR1cm4gLWVycm5vO1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbiAjZW5kaWZcXG4gXFxuIHN0YXRpYyBpbmxpbmUgaW50IHNrZWxfY2xvc2VueihpbnQgZmQpXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9NYWtlZmlsZSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9NYWtlZmlsZVxcbmluZGV4IGQzNjU1YTcwNjQ4MjYuLjU2MGNlNDAxNmZiZmYgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL01ha2VmaWxlXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL01ha2VmaWxlXFxuQEAgLTUzMSw3ICs1MzEsNyBAQCBMU0tFTFNfU0lHTkVEIDo9IGZlbnRyeV90ZXN0LmMgZmV4aXRfdGVzdC5jIGF0b21pY3MuY1xcbiBcXG4gIyBHZW5lcmF0ZSBib3RoIGxpZ2h0IHNrZWxldG9uIGFuZCBsaWJicGYgc2tlbGV0b24gZm9yIHRoZXNlXFxuIExTS0VMU19FWFRSQSA6PSB0ZXN0X2tzeW1zX21vZHVsZS5jIHRlc3Rfa3N5bXNfd2Vhay5jIGtmdW5jX2NhbGxfdGVzdC5jIFxcXFxcXG4tXFx0a2Z1bmNfY2FsbF90ZXN0X3N1YnByb2cuY1xcbitcXHRrZnVuY19jYWxsX3Rlc3Rfc3VicHJvZy5jIHRlc3RfZ2xvYmFsX3BlcmNwdV9kYXRhLmNcXG4gU0tFTF9CTEFDS0xJU1QgKz0gJCQoTFNLRUxTKSAkJChMU0tFTFNfU0lHTkVEKVxcbiBcXG4gdGVzdF9zdGF0aWNfbGlua2VkLnNrZWwuaC1kZXBzIDo9IHRlc3Rfc3RhdGljX2xpbmtlZDEuYnBmLm8gdGVzdF9zdGF0aWNfbGlua2VkMi5icGYub1xcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9nbG9iYWxfZGF0YV9pbml0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9nbG9iYWxfZGF0YV9pbml0LmNcXG5pbmRleCA4NDY2MzMyZDc0MDZmLi4yNjI1NjUxYjM0YzdlIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2dsb2JhbF9kYXRhX2luaXQuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2dsb2JhbF9kYXRhX2luaXQuY1xcbkBAIC0xLDUgKzEsOCBAQFxcbiAvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbiAjaW5jbHVkZSBcXHUwMDNjdGVzdF9wcm9ncy5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXFwiYnBmL2xpYmJwZl9pbnRlcm5hbC5oXFxcIlxcbisjaW5jbHVkZSBcXFwidGVzdF9nbG9iYWxfcGVyY3B1X2RhdGEuc2tlbC5oXFxcIlxcbisjaW5jbHVkZSBcXFwidGVzdF9nbG9iYWxfcGVyY3B1X2RhdGEubHNrZWwuaFxcXCJcXG4gXFxuIHZvaWQgdGVzdF9nbG9iYWxfZGF0YV9pbml0KHZvaWQpXFxuIHtcXG5AQCAtNjAsMyArNjMsMzEwIEBAIHZvaWQgdGVzdF9nbG9iYWxfZGF0YV9pbml0KHZvaWQpXFxuIFxcdGZyZWUobmV3dmFsKTtcXG4gXFx0YnBmX29iamVjdF9fY2xvc2Uob2JqKTtcXG4gfVxcbitcXG4rc3RhdGljIHZvaWQgdGVzdF9wZXJjcHVfZGF0YV9vbl9jcHVzKHN0cnVjdCBicGZfbWFwICptYXAsIGludCBtYXBfZmQsIGludCBwcm9nX2ZkLCBpbnQgKnJ1bnApXFxuK3tcXG4rXFx0X191NjQgYXJnc1syXSA9IHsweDEyMzRVTEwsIDB4NTY3OFVMTH07XFxuK1xcdExJQkJQRl9PUFRTKGJwZl90ZXN0X3J1bl9vcHRzLCB0b3B0cyxcXG4rXFx0XFx0ICAgIC5jdHhfaW4gPSBhcmdzLFxcbitcXHRcXHQgICAgLmN0eF9zaXplX2luID0gc2l6ZW9mKGFyZ3MpLFxcbitcXHRcXHQgICAgLmZsYWdzID0gQlBGX0ZfVEVTVF9SVU5fT05fQ1BVLFxcbitcXHQpO1xcbitcXHRpbnQgaSwgZXJyLCBrZXkgPSAwLCBudW1fb25saW5lLCBydW4gPSAwO1xcbitcXHRib29sICpvbmxpbmU7XFxuK1xcbitcXHRlcnIgPSBwYXJzZV9jcHVfbWFza19maWxlKFxcXCIvc3lzL2RldmljZXMvc3lzdGVtL2NwdS9vbmxpbmVcXFwiLCBcXHUwMDI2b25saW5lLCBcXHUwMDI2bnVtX29ubGluZSk7XFxuK1xcdGlmICghQVNTRVJUX09LKGVyciwgXFxcInBhcnNlX2NwdV9tYXNrX2ZpbGVcXFwiKSlcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0LyogcnVuIG9uIGV2ZXJ5IG9ubGluZS1DUFUgKi9cXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIG51bV9vbmxpbmU7IGkrKykge1xcbitcXHRcXHRzdHJ1Y3QgdGVzdF9nbG9iYWxfcGVyY3B1X2RhdGFfX3BlcmNwdSBkYXRhID0ge307XFxuK1xcdFxcdF9fdTY0IGZsYWdzO1xcbitcXG4rXFx0XFx0aWYgKCFvbmxpbmVbaV0pXFxuK1xcdFxcdFxcdGNvbnRpbnVlO1xcbitcXG4rXFx0XFx0dG9wdHMuY3B1ID0gaTtcXG4rXFx0XFx0dG9wdHMucmV0dmFsID0gLTE7XFxuK1xcdFxcdGVyciA9IGJwZl9wcm9nX3Rlc3RfcnVuX29wdHMocHJvZ19mZCwgXFx1MDAyNnRvcHRzKTtcXG4rXFx0XFx0QVNTRVJUX09LKGVyciwgXFxcImJwZl9wcm9nX3Rlc3RfcnVuX29wdHNcXFwiKTtcXG4rXFx0XFx0QVNTRVJUX0VRKHRvcHRzLnJldHZhbCwgMCwgXFxcImJwZl9wcm9nX3Rlc3RfcnVuX29wdHMgcmV0dmFsXFxcIik7XFxuK1xcbitcXHRcXHRmbGFncyA9ICgoX191NjQpIGkgXFx1MDAzY1xcdTAwM2MgMzIpIHwgQlBGX0ZfQ1BVO1xcbitcXHRcXHRpZiAobWFwKVxcbitcXHRcXHRcXHRlcnIgPSBicGZfbWFwX19sb29rdXBfZWxlbShtYXAsIFxcdTAwMjZrZXksIHNpemVvZihrZXkpLCBcXHUwMDI2ZGF0YSwgc2l6ZW9mKGRhdGEpLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgICBmbGFncyk7XFxuK1xcdFxcdGVsc2VcXG4rXFx0XFx0XFx0ZXJyID0gYnBmX21hcF9sb29rdXBfZWxlbV9mbGFncyhtYXBfZmQsIFxcdTAwMjZrZXksIFxcdTAwMjZkYXRhLCBmbGFncyk7XFxuK1xcdFxcdGlmICghQVNTRVJUX09LKGVyciwgXFxcImxvb2t1cF9lbGVtIG9uIGNwdVxcXCIpKVxcbitcXHRcXHRcXHRicmVhaztcXG4rXFxuK1xcdFxcdEFTU0VSVF9FUSgqcnVucCwgKytydW4sIFxcXCJydW5cXFwiKTtcXG4rXFx0XFx0QVNTRVJUX0VRKGRhdGEuY3B1X2lkLCBpLCBcXFwiZGF0YS5jcHVfaWRcXFwiKTtcXG4rXFx0XFx0QVNTRVJUX0VRKGRhdGEuZGF0YSwgMSwgXFxcImRhdGEuZGF0YVxcXCIpO1xcbitcXHRcXHRBU1NFUlRfVFJVRShkYXRhLnNldCwgXFxcImRhdGEuc2V0XFxcIik7XFxuK1xcdFxcdEFTU0VSVF9FUShkYXRhLm51bXNbNl0sIDB4YzBkZSwgXFxcImRhdGEubnVtc1s2XVxcXCIpO1xcbitcXHRcXHRBU1NFUlRfRVEoZGF0YS5zdHJ1Y3RfZGF0YS5pLCAxLCBcXFwic3RydWN0X2RhdGEuaVxcXCIpO1xcbitcXHRcXHRBU1NFUlRfVFJVRShkYXRhLnN0cnVjdF9kYXRhLnNldCwgXFxcInN0cnVjdF9kYXRhLnNldFxcXCIpO1xcbitcXHRcXHRBU1NFUlRfRVEoZGF0YS5zdHJ1Y3RfZGF0YS5udW1zWzZdLCAweGMwZGUsIFxcXCJzdHJ1Y3RfZGF0YS5udW1zWzZdXFxcIik7XFxuK1xcdH1cXG4rXFxuK1xcdGZyZWUob25saW5lKTtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgdGVzdF9nbG9iYWxfcGVyY3B1X2RhdGFfaW5pdCh2b2lkKVxcbit7XFxuK1xcdHN0cnVjdCB0ZXN0X2dsb2JhbF9wZXJjcHVfZGF0YV9fcGVyY3B1IGluaXRfdmFsdWUgPSB7fTtcXG4rXFx0c3RydWN0IHRlc3RfZ2xvYmFsX3BlcmNwdV9kYXRhX19wZXJjcHUgKmluaXRfZGF0YTtcXG4rXFx0c3RydWN0IHRlc3RfZ2xvYmFsX3BlcmNwdV9kYXRhICpza2VsID0gTlVMTDtcXG4rXFx0c2l6ZV90IGluaXRfZGF0YV9zejtcXG4rXFx0c3RydWN0IGJwZl9tYXAgKm1hcDtcXG4rXFx0aW50IHByb2dfZmQsIGVycjtcXG4rXFxuK1xcdHNrZWwgPSB0ZXN0X2dsb2JhbF9wZXJjcHVfZGF0YV9fb3BlbigpO1xcbitcXHRpZiAoIUFTU0VSVF9PS19QVFIoc2tlbCwgXFxcInRlc3RfZ2xvYmFsX3BlcmNwdV9kYXRhX19vcGVuXFxcIikpXFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXHRpZiAoIUFTU0VSVF9PS19QVFIoc2tlbC1cXHUwMDNlcGVyY3B1LCBcXFwic2tlbC1cXHUwMDNlcGVyY3B1XFxcIikpXFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXHRpZiAoIUFTU0VSVF9PS19QVFIoc2tlbC1cXHUwMDNlZGF0YV9wZXJjcHUsIFxcXCJza2VsLVxcdTAwM2VkYXRhX3BlcmNwdVxcXCIpKVxcbitcXHRcXHRnb3RvIG91dDtcXG4rXFx0aWYgKCFBU1NFUlRfT0tfUFRSKHNrZWwtXFx1MDAzZXBlcmNwdV9kYXRhLCBcXFwic2tlbC1cXHUwMDNlcGVyY3B1X2RhdGFcXFwiKSlcXG4rXFx0XFx0Z290byBvdXQ7XFxuK1xcdGlmICghQVNTRVJUX09LX1BUUihza2VsLVxcdTAwM2VwZXJjcHVfbG9vb29vb29vb25nLCBcXFwic2tlbC1cXHUwMDNlcGVyY3B1X2xvb29vb29vb29uZ1xcXCIpKVxcbitcXHRcXHRnb3RvIG91dDtcXG4rXFxuK1xcdEFTU0VSVF9TVFJFUShicGZfbWFwX19uYW1lKHNrZWwtXFx1MDAzZW1hcHMucGVyY3B1X2RhdGEpLCBcXFwiLnBlcmNwdS5kYXRhXFxcIixcXG4rXFx0XFx0ICAgICBcXFwiLnBlcmNwdS5kYXRhIG1hcCBuYW1lXFxcIik7XFxuK1xcdEFTU0VSVF9TVFJFUShicGZfbWFwX19uYW1lKHNrZWwtXFx1MDAzZW1hcHMuZGF0YV9wZXJjcHUpLCBcXFwiLmRhdGEucGVyY3B1XFxcIixcXG4rXFx0XFx0ICAgICBcXFwiLmRhdGEucGVyY3B1IG1hcCBuYW1lXFxcIik7XFxuK1xcdEFTU0VSVF9TVFJFUShicGZfbWFwX19uYW1lKHNrZWwtXFx1MDAzZW1hcHMucGVyY3B1X2xvb29vb29vb29uZyksIFxcXCIucGVyY3B1Lmxvb29vb29vb29uZ1xcXCIsXFxuK1xcdFxcdCAgICAgXFxcImxvbmcgbWFwIG5hbWVcXFwiKTtcXG4rXFx0QVNTRVJUX1NUUkVRKGJwZl9tYXBfX25hbWUoc2tlbC1cXHUwMDNlbWFwcy5wZXJjcHUpLCBcXFwiLnBlcmNwdVxcXCIsIFxcXCJtYXAgbmFtZVxcXCIpO1xcbitcXHRBU1NFUlRfRVEoc2tlbC1cXHUwMDNlcGVyY3B1LVxcdTAwM2VkYXRhLCAtMSwgXFxcInNrZWwtXFx1MDAzZXBlcmNwdS1cXHUwMDNlZGF0YVxcXCIpO1xcbitcXHRBU1NFUlRfRkFMU0Uoc2tlbC1cXHUwMDNlcGVyY3B1LVxcdTAwM2VzZXQsIFxcXCJza2VsLVxcdTAwM2VwZXJjcHUtXFx1MDAzZXNldFxcXCIpO1xcbitcXHRBU1NFUlRfRVEoc2tlbC1cXHUwMDNlcGVyY3B1LVxcdTAwM2VudW1zWzZdLCAwLCBcXFwic2tlbC1cXHUwMDNlcGVyY3B1LVxcdTAwM2VudW1zWzZdXFxcIik7XFxuK1xcdEFTU0VSVF9FUShza2VsLVxcdTAwM2VwZXJjcHUtXFx1MDAzZXN0cnVjdF9kYXRhLmksIC0xLCBcXFwic3RydWN0X2RhdGEuaVxcXCIpO1xcbitcXHRBU1NFUlRfRkFMU0Uoc2tlbC1cXHUwMDNlcGVyY3B1LVxcdTAwM2VzdHJ1Y3RfZGF0YS5zZXQsIFxcXCJzdHJ1Y3RfZGF0YS5zZXRcXFwiKTtcXG4rXFx0QVNTRVJUX0VRKHNrZWwtXFx1MDAzZXBlcmNwdS1cXHUwMDNlc3RydWN0X2RhdGEubnVtc1s2XSwgMCwgXFxcInN0cnVjdF9kYXRhLm51bXNbNl1cXFwiKTtcXG4rXFxuK1xcdG1hcCA9IHNrZWwtXFx1MDAzZW1hcHMucGVyY3B1O1xcbitcXHRpZiAoIUFTU0VSVF9FUShicGZfbWFwX190eXBlKG1hcCksIEJQRl9NQVBfVFlQRV9QRVJDUFVfQVJSQVksIFxcXCJicGZfbWFwX190eXBlXFxcIikpXFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXG4rXFx0aW5pdF92YWx1ZS5kYXRhID0gMjtcXG4rXFx0aW5pdF92YWx1ZS5udW1zWzZdID0gLTE7XFxuK1xcdGluaXRfdmFsdWUuc3RydWN0X2RhdGEuaSA9IDI7XFxuK1xcdGluaXRfdmFsdWUuc3RydWN0X2RhdGEubnVtc1s2XSA9IC0xO1xcbitcXHRlcnIgPSBicGZfbWFwX19zZXRfaW5pdGlhbF92YWx1ZShtYXAsIFxcdTAwMjZpbml0X3ZhbHVlLCBzaXplb2YoaW5pdF92YWx1ZSkpO1xcbitcXHRpZiAoIUFTU0VSVF9PSyhlcnIsIFxcXCJicGZfbWFwX19zZXRfaW5pdGlhbF92YWx1ZVxcXCIpKVxcbitcXHRcXHRnb3RvIG91dDtcXG4rXFxuK1xcdGluaXRfZGF0YSA9IGJwZl9tYXBfX2luaXRpYWxfdmFsdWUobWFwLCBcXHUwMDI2aW5pdF9kYXRhX3N6KTtcXG4rXFx0aWYgKCFBU1NFUlRfT0tfUFRSKGluaXRfZGF0YSwgXFxcImJwZl9tYXBfX2luaXRpYWxfdmFsdWVcXFwiKSlcXG4rXFx0XFx0Z290byBvdXQ7XFxuK1xcbitcXHRBU1NFUlRfRVEoaW5pdF9kYXRhLVxcdTAwM2VkYXRhLCBpbml0X3ZhbHVlLmRhdGEsIFxcXCJpbml0X3ZhbHVlIGRhdGFcXFwiKTtcXG4rXFx0QVNTRVJUX0VRKGluaXRfZGF0YS1cXHUwMDNlc2V0LCBpbml0X3ZhbHVlLnNldCwgXFxcImluaXRfdmFsdWUgc2V0XFxcIik7XFxuK1xcdEFTU0VSVF9FUShpbml0X2RhdGEtXFx1MDAzZXN0cnVjdF9kYXRhLmksIGluaXRfdmFsdWUuc3RydWN0X2RhdGEuaSwgXFxcImluaXRfdmFsdWUgc3RydWN0X2RhdGEuaVxcXCIpO1xcbitcXHRBU1NFUlRfRVEoaW5pdF9kYXRhLVxcdTAwM2VzdHJ1Y3RfZGF0YS5udW1zWzZdLCBpbml0X3ZhbHVlLnN0cnVjdF9kYXRhLm51bXNbNl0sXFxuK1xcdFxcdCAgXFxcImluaXRfdmFsdWUgc3RydWN0X2RhdGEubnVtc1s2XVxcXCIpO1xcbitcXHRBU1NFUlRfRVEoaW5pdF9kYXRhX3N6LCBzaXplb2YoaW5pdF92YWx1ZSksIFxcXCJpbml0X3ZhbHVlIHNpemVcXFwiKTtcXG4rXFx0QVNTRVJUX0VRKCh2b2lkICopIGluaXRfZGF0YSwgKHZvaWQgKikgc2tlbC1cXHUwMDNlcGVyY3B1LCBcXFwic2tlbC1cXHUwMDNlcGVyY3B1IGVxIGluaXRfZGF0YVxcXCIpO1xcbitcXHRBU1NFUlRfRVEoc2tlbC1cXHUwMDNlcGVyY3B1LVxcdTAwM2VkYXRhLCBpbml0X3ZhbHVlLmRhdGEsIFxcXCJza2VsLVxcdTAwM2VwZXJjcHUtXFx1MDAzZWRhdGFcXFwiKTtcXG4rXFx0QVNTRVJUX0VRKHNrZWwtXFx1MDAzZXBlcmNwdS1cXHUwMDNlc2V0LCBpbml0X3ZhbHVlLnNldCwgXFxcInNrZWwtXFx1MDAzZXBlcmNwdS1cXHUwMDNlc2V0XFxcIik7XFxuK1xcdEFTU0VSVF9FUShza2VsLVxcdTAwM2VwZXJjcHUtXFx1MDAzZXN0cnVjdF9kYXRhLmksIGluaXRfdmFsdWUuc3RydWN0X2RhdGEuaSxcXG4rXFx0XFx0ICBcXFwic2tlbC1cXHUwMDNlcGVyY3B1LVxcdTAwM2VzdHJ1Y3RfZGF0YS5pXFxcIik7XFxuK1xcdEFTU0VSVF9FUShza2VsLVxcdTAwM2VwZXJjcHUtXFx1MDAzZXN0cnVjdF9kYXRhLm51bXNbNl0sIGluaXRfdmFsdWUuc3RydWN0X2RhdGEubnVtc1s2XSxcXG4rXFx0XFx0ICBcXFwic2tlbC1cXHUwMDNlcGVyY3B1LVxcdTAwM2VzdHJ1Y3RfZGF0YS5udW1zWzZdXFxcIik7XFxuK1xcbitcXHRlcnIgPSB0ZXN0X2dsb2JhbF9wZXJjcHVfZGF0YV9fbG9hZChza2VsKTtcXG4rXFx0aWYgKCFBU1NFUlRfT0soZXJyLCBcXFwidGVzdF9nbG9iYWxfcGVyY3B1X2RhdGFfX2xvYWRcXFwiKSlcXG4rXFx0XFx0Z290byBvdXQ7XFxuK1xcbitcXHRBU1NFUlRfT0tfUFRSKHNrZWwtXFx1MDAzZXBlcmNwdSwgXFxcInNrZWwtXFx1MDAzZXBlcmNwdVxcXCIpO1xcbitcXG4rXFx0cHJvZ19mZCA9IGJwZl9wcm9ncmFtX19mZChza2VsLVxcdTAwM2Vwcm9ncy51cGRhdGVfcGVyY3B1X2RhdGEpO1xcbitcXHR0ZXN0X3BlcmNwdV9kYXRhX29uX2NwdXMobWFwLCBicGZfbWFwX19mZChtYXApLCBwcm9nX2ZkLCBcXHUwMDI2c2tlbC1cXHUwMDNlYnNzLVxcdTAwM2VydW4pO1xcbitcXG4rb3V0OlxcbitcXHR0ZXN0X2dsb2JhbF9wZXJjcHVfZGF0YV9fZGVzdHJveShza2VsKTtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgdGVzdF9nbG9iYWxfcGVyY3B1X2RhdGFfbHNrZWwodm9pZClcXG4re1xcbitcXHRzdHJ1Y3QgdGVzdF9nbG9iYWxfcGVyY3B1X2RhdGFfbHNrZWwgKmxza2VsID0gTlVMTDtcXG4rXFx0aW50IHByb2dfZmQsIG1hcF9mZDtcXG4rXFxuK1xcdGxza2VsID0gdGVzdF9nbG9iYWxfcGVyY3B1X2RhdGFfbHNrZWxfX29wZW5fYW5kX2xvYWQoKTtcXG4rXFx0aWYgKCFBU1NFUlRfT0tfUFRSKGxza2VsLCBcXFwidGVzdF9nbG9iYWxfcGVyY3B1X2RhdGFfbHNrZWxfX29wZW5fYW5kX2xvYWRcXFwiKSlcXG4rXFx0XFx0Z290byBvdXQ7XFxuK1xcbitcXHRtYXBfZmQgPSBsc2tlbC1cXHUwMDNlbWFwcy5wZXJjcHUubWFwX2ZkO1xcbitcXHRwcm9nX2ZkID0gbHNrZWwtXFx1MDAzZXByb2dzLnVwZGF0ZV9wZXJjcHVfZGF0YS5wcm9nX2ZkO1xcbitcXHR0ZXN0X3BlcmNwdV9kYXRhX29uX2NwdXMoTlVMTCwgbWFwX2ZkLCBwcm9nX2ZkLCBcXHUwMDI2bHNrZWwtXFx1MDAzZWJzcy1cXHUwMDNlcnVuKTtcXG4rXFxuK291dDpcXG4rXFx0dGVzdF9nbG9iYWxfcGVyY3B1X2RhdGFfbHNrZWxfX2Rlc3Ryb3kobHNrZWwpO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IGNyZWF0ZV9yZG9ubHlfcGVyY3B1X2FycmF5KHZvaWQpXFxuK3tcXG4rXFx0TElCQlBGX09QVFMoYnBmX21hcF9jcmVhdGVfb3B0cywgbWFwX29wdHMsXFxuK1xcdFxcdCAgICAubWFwX2ZsYWdzID0gQlBGX0ZfUkRPTkxZX1BST0csXFxuK1xcdCk7XFxuK1xcdGludCBrZXkgPSAwLCBtYXBfZmQsIGVycjtcXG4rXFx0X191NjQgdmFsdWUgPSAwO1xcbitcXG4rXFx0bWFwX2ZkID0gYnBmX21hcF9jcmVhdGUoQlBGX01BUF9UWVBFX1BFUkNQVV9BUlJBWSwgXFxcInBlcmNwdV9yb19tYXBcXFwiLCBzaXplb2YoaW50KSxcXG4rXFx0XFx0XFx0XFx0c2l6ZW9mKF9fdTY0KSwgMSwgXFx1MDAyNm1hcF9vcHRzKTtcXG4rXFx0aWYgKCFBU1NFUlRfR0UobWFwX2ZkLCAwLCBcXFwiYnBmX21hcF9jcmVhdGVcXFwiKSlcXG4rXFx0XFx0cmV0dXJuIC0xO1xcbitcXG4rXFx0ZXJyID0gYnBmX21hcF91cGRhdGVfZWxlbShtYXBfZmQsIFxcdTAwMjZrZXksIFxcdTAwMjZ2YWx1ZSwgQlBGX0ZfQUxMX0NQVVMpO1xcbitcXHRpZiAoIUFTU0VSVF9PSyhlcnIsIFxcXCJicGZfbWFwX3VwZGF0ZV9lbGVtXFxcIikpXFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXG4rXFx0ZXJyID0gYnBmX21hcF9mcmVlemUobWFwX2ZkKTtcXG4rXFx0aWYgKCFBU1NFUlRfT0soZXJyLCBcXFwiYnBmX21hcF9mcmVlemVcXFwiKSlcXG4rXFx0XFx0Z290byBvdXQ7XFxuK1xcbitcXHRyZXR1cm4gbWFwX2ZkO1xcbitcXG4rb3V0OlxcbitcXHRjbG9zZShtYXBfZmQpO1xcbitcXHRyZXR1cm4gLTE7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIHRlc3RfZ2xvYmFsX3BlcmNwdV9kYXRhX3Jkb25seV9kaXJlY3RfcmVhZCh2b2lkKVxcbit7XFxuK1xcdC8qXFxuK1xcdCAqIFJhdyBpbnN0cnVjdGlvbnMgd2l0aCBtYW51YWxseSBwcmVwYXJlZCByZG9ubHkgcGVyY3B1X2FycmF5IG1hcFxcbitcXHQgKiBmb3IgdGVzdGluZyBkaXJlY3QtcmVhZCBnbG9iYWwgcGVyY3B1IGRhdGEsIGJlY2F1c2UgbGliYnBmXFxuK1xcdCAqIGRvZXNuJ3QgaGF2ZSByZG9ubHkgaW50ZXJuYWwgcGVyY3B1X2FycmF5IG1hcCBzdXBwb3J0IGZvclxcbitcXHQgKiBnbG9iYWwgcGVyY3B1IGRhdGEuXFxuK1xcdCAqL1xcbitcXHRzdHJ1Y3QgYnBmX2luc24gaW5zbnNbXSA9IHtcXG4rXFx0XFx0QlBGX0xEX01BUF9WQUxVRShCUEZfUkVHXzEsIDAsIDApLFxcbitcXHRcXHRCUEZfTERYX01FTShCUEZfRFcsIEJQRl9SRUdfMCwgQlBGX1JFR18xLCAwKSxcXG4rXFx0XFx0QlBGX0VYSVRfSU5TTigpLFxcbitcXHR9O1xcbitcXHRpbnQgbWFwX2ZkLCBwcm9nX2ZkO1xcbitcXG4rXFx0bWFwX2ZkID0gY3JlYXRlX3Jkb25seV9wZXJjcHVfYXJyYXkoKTtcXG4rXFx0aWYgKG1hcF9mZCBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdGluc25zWzBdLmltbSA9IG1hcF9mZDtcXG4rXFx0cHJvZ19mZCA9IGJwZl9wcm9nX2xvYWQoQlBGX1BST0dfVFlQRV9TT0NLRVRfRklMVEVSLCBcXFwicGVyY3B1X3JvX3Byb2dcXFwiLCBcXFwiR1BMXFxcIiwgaW5zbnMsXFxuK1xcdFxcdFxcdFxcdEFSUkFZX1NJWkUoaW5zbnMpLCBOVUxMKTtcXG4rXFx0aWYgKEFTU0VSVF9HRShwcm9nX2ZkLCAwLCBcXFwiYnBmX3Byb2dfbG9hZFxcXCIpKVxcbitcXHRcXHRjbG9zZShwcm9nX2ZkKTtcXG4rXFx0Y2xvc2UobWFwX2ZkKTtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgdGVzdF9nbG9iYWxfcGVyY3B1X2RhdGFfcmRvbmx5X2RpcmVjdF93cml0ZSh2b2lkKVxcbit7XFxuK1xcdExJQkJQRl9PUFRTKGJwZl9wcm9nX2xvYWRfb3B0cywgcHJvZ19vcHRzKTtcXG4rXFx0LyogU2VlIHRoZSBjb21tZW50IGluIHRlc3RfZ2xvYmFsX3BlcmNwdV9kYXRhX3Jkb25seV9kaXJlY3RfcmVhZCgpICovXFxuK1xcdHN0cnVjdCBicGZfaW5zbiBpbnNuc1tdID0ge1xcbitcXHRcXHRCUEZfTERfTUFQX1ZBTFVFKEJQRl9SRUdfMSwgMCwgMCksXFxuK1xcdFxcdEJQRl9MRFhfTUVNKEJQRl9EVywgQlBGX1JFR18wLCBCUEZfUkVHXzEsIDApLFxcbitcXHRcXHRCUEZfU1RfTUVNKEJQRl9EVywgQlBGX1JFR18xLCAwLCAwKSxcXG4rXFx0XFx0QlBGX0VYSVRfSU5TTigpLFxcbitcXHR9O1xcbitcXHRjaGFyIGxvZ19idWZbMjU2XSA9IHt9O1xcbitcXHRpbnQgbWFwX2ZkLCBwcm9nX2ZkO1xcbitcXG4rXFx0cHJvZ19vcHRzLmxvZ19idWYgPSBsb2dfYnVmO1xcbitcXHRwcm9nX29wdHMubG9nX3NpemUgPSBzaXplb2YobG9nX2J1Zik7XFxuK1xcdHByb2dfb3B0cy5sb2dfbGV2ZWwgPSAxO1xcbitcXG4rXFx0bWFwX2ZkID0gY3JlYXRlX3Jkb25seV9wZXJjcHVfYXJyYXkoKTtcXG4rXFx0aWYgKG1hcF9mZCBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdGluc25zWzBdLmltbSA9IG1hcF9mZDtcXG4rXFx0cHJvZ19mZCA9IGJwZl9wcm9nX2xvYWQoQlBGX1BST0dfVFlQRV9TT0NLRVRfRklMVEVSLCBcXFwicGVyY3B1X3JvX3Byb2dcXFwiLCBcXFwiR1BMXFxcIiwgaW5zbnMsXFxuK1xcdFxcdFxcdFxcdEFSUkFZX1NJWkUoaW5zbnMpLCBcXHUwMDI2cHJvZ19vcHRzKTtcXG4rXFx0aWYgKCFBU1NFUlRfTFQocHJvZ19mZCwgMCwgXFxcImJwZl9wcm9nX2xvYWRcXFwiKSlcXG4rXFx0XFx0Y2xvc2UocHJvZ19mZCk7XFxuK1xcdGVsc2VcXG4rXFx0XFx0QVNTRVJUX0hBU19TVUJTVFIobG9nX2J1ZiwgXFxcIndyaXRlIGludG8gbWFwIGZvcmJpZGRlblxcXCIsIFxcXCJ2ZXJpZmllciBsb2dcXFwiKTtcXG4rXFx0Y2xvc2UobWFwX2ZkKTtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgdGVzdF9nbG9iYWxfcGVyY3B1X2RhdGFfdmVyaWZpZXJfbG9nKHZvaWQpXFxuK3tcXG4rXFx0UlVOX1RFU1RTKHRlc3RfZ2xvYmFsX3BlcmNwdV9kYXRhKTtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgdGVzdF9nbG9iYWxfcGVyY3B1X2RhdGFfaXRlcih2b2lkKVxcbit7XFxuK1xcdERFQ0xBUkVfTElCQlBGX09QVFMoYnBmX2l0ZXJfYXR0YWNoX29wdHMsIG9wdHMpO1xcbitcXHRzdHJ1Y3QgdGVzdF9nbG9iYWxfcGVyY3B1X2RhdGEgKnNrZWw7XFxuK1xcdHVuaW9uIGJwZl9pdGVyX2xpbmtfaW5mbyBsaW5mbyA9IHt9O1xcbitcXHRzdHJ1Y3QgYnBmX2xpbmsgKmxpbmsgPSBOVUxMO1xcbitcXHRpbnQgZmQsIG51bV9jcHVzLCBsZW4sIGVycjtcXG4rXFx0Y2hhciBidWZbMTZdO1xcbitcXG4rXFx0bnVtX2NwdXMgPSBsaWJicGZfbnVtX3Bvc3NpYmxlX2NwdXMoKTtcXG4rXFx0aWYgKCFBU1NFUlRfR1QobnVtX2NwdXMsIDAsIFxcXCJsaWJicGZfbnVtX3Bvc3NpYmxlX2NwdXNcXFwiKSlcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0c2tlbCA9IHRlc3RfZ2xvYmFsX3BlcmNwdV9kYXRhX19vcGVuKCk7XFxuK1xcdGlmICghQVNTRVJUX09LX1BUUihza2VsLCBcXFwidGVzdF9nbG9iYWxfcGVyY3B1X2RhdGFfX29wZW5cXFwiKSlcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0c2tlbC1cXHUwMDNlcm9kYXRhLVxcdTAwM2VudW1fY3B1cyA9IG51bV9jcHVzO1xcbitcXHRza2VsLVxcdTAwM2Vyb2RhdGEtXFx1MDAzZW9mZnNldG9mX251bSA9IG9mZnNldG9mKHN0cnVjdCB0ZXN0X2dsb2JhbF9wZXJjcHVfZGF0YV9fcGVyY3B1LCBzdHJ1Y3RfZGF0YSk7XFxuK1xcdHNrZWwtXFx1MDAzZXJvZGF0YS1cXHUwMDNlb2Zmc2V0b2ZfbnVtICs9IHNpemVvZihza2VsLVxcdTAwM2VwZXJjcHUtXFx1MDAzZXN0cnVjdF9kYXRhKSAtIHNpemVvZihpbnQpO1xcbitcXHRza2VsLVxcdTAwM2Vyb2RhdGEtXFx1MDAzZWVsZW1fc3ogPSByb3VuZHVwKHNpemVvZihzdHJ1Y3QgdGVzdF9nbG9iYWxfcGVyY3B1X2RhdGFfX3BlcmNwdSksIDgpO1xcbitcXHRza2VsLVxcdTAwM2VwZXJjcHUtXFx1MDAzZXN0cnVjdF9kYXRhLm51bXNbNl0gPSAweGMwZGU7XFxuK1xcbitcXHRlcnIgPSB0ZXN0X2dsb2JhbF9wZXJjcHVfZGF0YV9fbG9hZChza2VsKTtcXG4rXFx0aWYgKCFBU1NFUlRfT0soZXJyLCBcXFwidGVzdF9nbG9iYWxfcGVyY3B1X2RhdGFfX2xvYWRcXFwiKSlcXG4rXFx0XFx0Z290byBvdXQ7XFxuK1xcbitcXHRsaW5mby5tYXAubWFwX2ZkID0gYnBmX21hcF9fZmQoc2tlbC1cXHUwMDNlbWFwcy5wZXJjcHUpO1xcbitcXHRvcHRzLmxpbmtfaW5mbyA9IFxcdTAwMjZsaW5mbztcXG4rXFx0b3B0cy5saW5rX2luZm9fbGVuID0gc2l6ZW9mKGxpbmZvKTtcXG4rXFx0bGluayA9IGJwZl9wcm9ncmFtX19hdHRhY2hfaXRlcihza2VsLVxcdTAwM2Vwcm9ncy5kdW1wX3BlcmNwdV9kYXRhLCBcXHUwMDI2b3B0cyk7XFxuK1xcdGlmICghQVNTRVJUX09LX1BUUihsaW5rLCBcXFwiYnBmX3Byb2dyYW1fX2F0dGFjaF9pdGVyXFxcIikpXFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXG4rXFx0ZmQgPSBicGZfaXRlcl9jcmVhdGUoYnBmX2xpbmtfX2ZkKGxpbmspKTtcXG4rXFx0aWYgKCFBU1NFUlRfR0UoZmQsIDAsIFxcXCJicGZfaXRlcl9jcmVhdGVcXFwiKSlcXG4rXFx0XFx0Z290byBvdXQ7XFxuK1xcbitcXHR3aGlsZSAoKGxlbiA9IHJlYWQoZmQsIGJ1Ziwgc2l6ZW9mKGJ1ZikpKSBcXHUwMDNlIDApXFxuK1xcdFxcdGRvIHsgfSB3aGlsZSAoMCk7XFxuK1xcdEFTU0VSVF9FUShsZW4sIDAsIFxcXCJyZWFkIGl0ZXJcXFwiKTtcXG4rXFx0QVNTRVJUX1RSVUUoc2tlbC1cXHUwMDNlYnNzLVxcdTAwM2VydW5faXRlciwgXFxcInJ1bl9pdGVyXFxcIik7XFxuK1xcdEFTU0VSVF9FUShza2VsLVxcdTAwM2Vic3MtXFx1MDAzZXBlcmNwdV9kYXRhX3N1bSwgMHhjMGRlICogbnVtX2NwdXMsIFxcXCJwZXJjcHVfZGF0YV9zdW1cXFwiKTtcXG4rXFxuK1xcdGNsb3NlKGZkKTtcXG4rb3V0OlxcbitcXHRicGZfbGlua19fZGVzdHJveShsaW5rKTtcXG4rXFx0dGVzdF9nbG9iYWxfcGVyY3B1X2RhdGFfX2Rlc3Ryb3koc2tlbCk7XFxuK31cXG4rXFxuK3ZvaWQgdGVzdF9nbG9iYWxfcGVyY3B1X2RhdGEodm9pZClcXG4re1xcbitcXHRpZiAoIWZlYXRfc3VwcG9ydGVkKE5VTEwsIEZFQVRfUEVSQ1BVX0RBVEEpKSB7XFxuK1xcdFxcdHRlc3RfX3NraXAoKTtcXG4rXFx0XFx0cmV0dXJuO1xcbitcXHR9XFxuK1xcbitcXHRpZiAodGVzdF9fc3RhcnRfc3VidGVzdChcXFwiaW5pdFxcXCIpKVxcbitcXHRcXHR0ZXN0X2dsb2JhbF9wZXJjcHVfZGF0YV9pbml0KCk7XFxuK1xcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFxcXCJsc2tlbFxcXCIpKVxcbitcXHRcXHR0ZXN0X2dsb2JhbF9wZXJjcHVfZGF0YV9sc2tlbCgpO1xcbitcXHRpZiAodGVzdF9fc3RhcnRfc3VidGVzdChcXFwicmRvbmx5X2RpcmVjdF9yZWFkXFxcIikpXFxuK1xcdFxcdHRlc3RfZ2xvYmFsX3BlcmNwdV9kYXRhX3Jkb25seV9kaXJlY3RfcmVhZCgpO1xcbitcXHRpZiAodGVzdF9fc3RhcnRfc3VidGVzdChcXFwicmRvbmx5X2RpcmVjdF93cml0ZVxcXCIpKVxcbitcXHRcXHR0ZXN0X2dsb2JhbF9wZXJjcHVfZGF0YV9yZG9ubHlfZGlyZWN0X3dyaXRlKCk7XFxuK1xcdHRlc3RfZ2xvYmFsX3BlcmNwdV9kYXRhX3ZlcmlmaWVyX2xvZygpO1xcbitcXHRpZiAodGVzdF9fc3RhcnRfc3VidGVzdChcXFwiaXRlclxcXCIpKVxcbitcXHRcXHR0ZXN0X2dsb2JhbF9wZXJjcHVfZGF0YV9pdGVyKCk7XFxuK31cXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3RfZ2xvYmFsX3BlcmNwdV9kYXRhLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF9nbG9iYWxfcGVyY3B1X2RhdGEuY1xcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uYTk0NDNmYjIwNTBlOVxcbi0tLSAvZGV2L251bGxcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF9nbG9iYWxfcGVyY3B1X2RhdGEuY1xcbkBAIC0wLDAgKzEsODggQEBcXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG4rI2luY2x1ZGUgXFx1MDAzY3ZtbGludXguaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2JwZi9icGZfaGVscGVycy5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXFwiYnBmX21pc2MuaFxcXCJcXG4rXFxuKy8qIFVzZWQgZm9yIHRlc3RpbmcgbWFwIG5hbWUuICovXFxuK2ludCBsb29uZyBTRUMoXFxcIi5wZXJjcHUubG9vb29vb29vb25nXFxcIik7XFxuK2ludCBkYXRhMyBTRUMoXFxcIi5kYXRhLnBlcmNwdVxcXCIpO1xcbitpbnQgZGF0YTIgU0VDKFxcXCIucGVyY3B1LmRhdGFcXFwiKTtcXG4rXFxuK2ludCBydW47XFxuK2ludCBjcHVfaWQgU0VDKFxcXCIucGVyY3B1XFxcIik7XFxuK2ludCBkYXRhIFNFQyhcXFwiLnBlcmNwdVxcXCIpID0gLTE7XFxuK2ludCBudW1zWzddIFNFQyhcXFwiLnBlcmNwdVxcXCIpO1xcbitib29sIHNldCBTRUMoXFxcIi5wZXJjcHVcXFwiKSA9IGZhbHNlO1xcbitzdHJ1Y3Qge1xcbitcXHRjaGFyIHNldDtcXG4rXFx0aW50IGk7XFxuK1xcdGludCBudW1zWzddO1xcbit9IHN0cnVjdF9kYXRhIFNFQyhcXFwiLnBlcmNwdVxcXCIpID0ge1xcbitcXHQuc2V0ID0gMCxcXG4rXFx0LmkgPSAtMSxcXG4rfTtcXG4rXFxuK1NFQyhcXFwicmF3X3RwL3Rhc2tfcmVuYW1lXFxcIilcXG4rX19hdXhpbGlhcnlcXG4raW50IHVwZGF0ZV9wZXJjcHVfZGF0YSh2b2lkICpjdHgpXFxuK3tcXG4rXFx0c3RydWN0X2RhdGEubnVtc1s2XSA9IDB4YzBkZTtcXG4rXFx0c3RydWN0X2RhdGEuc2V0ID0gMTtcXG4rXFx0c3RydWN0X2RhdGEuaSA9IDE7XFxuK1xcdG51bXNbNl0gPSAweGMwZGU7XFxuK1xcdGRhdGEgPSAxO1xcbitcXHRydW4rKztcXG4rXFx0c2V0ID0gdHJ1ZTtcXG4rXFx0Y3B1X2lkID0gYnBmX2dldF9zbXBfcHJvY2Vzc29yX2lkKCk7XFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitzdGF0aWMgY29uc3QgY2hhciBmbXRbXSBTRUMoXFxcIi5wZXJjcHUuZm10XFxcIikgPSBcXFwiZGF0YSAlZFxcXFxuXFxcIjtcXG4rXFxuK1NFQyhcXFwiP2twcm9iZVxcXCIpXFxuK19fZmFpbHVyZSBfX21zZyhcXFwiUnt7WzAtOV0rfX0gcG9pbnRzIHRvIHBlcmNwdV9hcnJheSBtYXAgd2hpY2ggY2Fubm90IGJlIHVzZWQgYXMgY29uc3Qgc3RyaW5nXFxcIilcXG4raW50IHZlcmlmaWVyX3N0cm5jbXAodm9pZCAqY3R4KVxcbit7XFxuK1xcdHJldHVybiBicGZfc3RybmNtcChcXFwidGVzdFxcXCIsIDUsIGZtdCk7XFxuK31cXG4rXFxuK1NFQyhcXFwiP2twcm9iZVxcXCIpXFxuK19fZmFpbHVyZSBfX21zZyhcXFwiUnt7WzAtOV0rfX0gcG9pbnRzIHRvIHBlcmNwdV9hcnJheSBtYXAgd2hpY2ggY2Fubm90IGJlIHVzZWQgYXMgY29uc3Qgc3RyaW5nXFxcIilcXG4raW50IHZlcmlmaWVyX3NucHJpbnRmKHZvaWQgKmN0eClcXG4re1xcbitcXHR1NjQgYXJnc1tdID0geyBkYXRhIH07XFxuK1xcdGNoYXIgYnVmWzEyOF07XFxuK1xcdGludCBsZW47XFxuK1xcbitcXHRsZW4gPSBicGZfc25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgZm10LCBhcmdzLCBzaXplb2YoYXJncykpO1xcbitcXHRpZiAobGVuIFxcdTAwM2UgMClcXG4rXFx0XFx0YnBmX3ByaW50ayhcXFwic25wcmludGY6ICVzXFxcXG5cXFwiLCBidWYpO1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rdm9sYXRpbGUgY29uc3QgX191MzIgbnVtX2NwdXMgPSAwO1xcbit2b2xhdGlsZSBjb25zdCBpbnQgb2Zmc2V0b2ZfbnVtO1xcbit2b2xhdGlsZSBjb25zdCBpbnQgZWxlbV9zejtcXG4rX191MzIgcGVyY3B1X2RhdGFfc3VtID0gMDtcXG4rYm9vbCBydW5faXRlciA9IGZhbHNlO1xcbitcXG4rU0VDKFxcXCJpdGVyL2JwZl9tYXBfZWxlbVxcXCIpXFxuK19fYXV4aWxpYXJ5XFxuK2ludCBkdW1wX3BlcmNwdV9kYXRhKHN0cnVjdCBicGZfaXRlcl9fYnBmX21hcF9lbGVtICpjdHgpXFxuK3tcXG4rXFx0dm9pZCAqcHB0ciA9IGN0eC1cXHUwMDNldmFsdWU7XFxuK1xcdGludCBpO1xcbitcXG4rXFx0aWYgKCFwcHRyKVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFxuK1xcdHJ1bl9pdGVyID0gdHJ1ZTtcXG4rXFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBudW1fY3B1czsgaSsrKSB7XFxuK1xcdFxcdHBlcmNwdV9kYXRhX3N1bSArPSAqKGludCAqKSAocHB0ciArIG9mZnNldG9mX251bSk7XFxuK1xcdFxcdHBwdHIgKz0gZWxlbV9zejtcXG4rXFx0fVxcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rY2hhciBfbGljZW5zZVtdIFNFQyhcXFwibGljZW5zZVxcXCIpID0gXFxcIkdQTFxcXCI7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDE5OjQyOjIzLjQ0MDA0MTI1M1oiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjE0NDUxODAzNjQ3NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfU1lTQ0FMTFwiLFxuICAgIFwiQlBGX0pJVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInBlcmNwdV9hcnJheV9tYXBfZGlyZWN0X3ZhbHVlX2FkZHJcIixcbiAgICBcInBlcmNwdV9hcnJheV9tYXBfZGlyZWN0X3ZhbHVlX21ldGFcIixcbiAgICBcImJwZl9kb19taXNjX2ZpeHVwc1wiLFxuICAgIFwiYnBmX21hcF9kaXJlY3RfcmVhZFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgc3VwcG9ydCBmb3IgYC5wZXJjcHVgIGdsb2JhbCBkYXRhIG1hcHMgaW4gQlBGLiBJdCBtb2RpZmllcyB0aGUgQlBGIHZlcmlmaWVyIHRvIGhhbmRsZSBkaXJlY3QgbWVtb3J5IHJlYWRzIGZyb20gYEJQRl9NQVBfVFlQRV9QRVJDUFVfQVJSQVlgIG1hcHMgYW5kIGFkZHMgSklUIGZpeHVwcyB0byBwYXRjaCBgbGRfaW1tNjRgIGluc3RydWN0aW9ucyB3aXRoIHBlci1DUFUgcmVnaXN0ZXIgbW92ZXMuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGNvcmUgQlBGIHN1YnN5c3RlbSBhbmQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgbWVtb3J5IHNhZmV0eSBhbmQgY29ycmVjdCB2ZXJpZmllciBiZWhhdmlvci5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgZDE1MWQzZDA5MzJhMzMxYzNlZjM4OWY4NjY3ODFhYTk1OGViODM5ZFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgQXVnIDYgMTk6NDI6MjAgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL2FycmF5bWFwLmMgYi9rZXJuZWwvYnBmL2FycmF5bWFwLmNcbmluZGV4IDI0OGI0ODE4MTc4Y2QuLjM0ODY1NzAxZjdmNzUgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvYnBmL2FycmF5bWFwLmNcbisrKyBiL2tlcm5lbC9icGYvYXJyYXltYXAuY1xuQEAgLTI1OSw2ICsyNTksMzcgQEAgc3RhdGljIHZvaWQgKnBlcmNwdV9hcnJheV9tYXBfbG9va3VwX2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5KVxuIFx0cmV0dXJuIHRoaXNfY3B1X3B0cihhcnJheS1cdTAwM2VwcHRyc1tpbmRleCBcdTAwMjYgYXJyYXktXHUwMDNlaW5kZXhfbWFza10pO1xuIH1cbiBcbitzdGF0aWMgaW50IHBlcmNwdV9hcnJheV9tYXBfZGlyZWN0X3ZhbHVlX2FkZHIoY29uc3Qgc3RydWN0IGJwZl9tYXAgKm1hcCwgdTY0ICppbW0sIHUzMiBvZmYpXG4re1xuK1x0c3RydWN0IGJwZl9hcnJheSAqYXJyYXkgPSBjb250YWluZXJfb2YobWFwLCBzdHJ1Y3QgYnBmX2FycmF5LCBtYXApO1xuK1xuK1x0aWYgKCFicGZfaml0X3N1cHBvcnRzX3BlcmNwdV9pbnNuKCkpXG4rXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbitcdGlmIChtYXAtXHUwMDNlbWF4X2VudHJpZXMgIT0gMSlcbitcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuK1x0aWYgKG9mZiBcdTAwM2U9IG1hcC1cdTAwM2V2YWx1ZV9zaXplKVxuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcbitcdCppbW0gPSAodTY0KShfX2ZvcmNlIHVuc2lnbmVkIGxvbmcpIGFycmF5LVx1MDAzZXBwdHJzWzBdO1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyBpbnQgcGVyY3B1X2FycmF5X21hcF9kaXJlY3RfdmFsdWVfbWV0YShjb25zdCBzdHJ1Y3QgYnBmX21hcCAqbWFwLCB1NjQgaW1tLCB1MzIgKm9mZilcbit7XG4rXHRzdHJ1Y3QgYnBmX2FycmF5ICphcnJheSA9IGNvbnRhaW5lcl9vZihtYXAsIHN0cnVjdCBicGZfYXJyYXksIG1hcCk7XG4rXHR1NjQgYmFzZSA9ICh1NjQpKF9fZm9yY2UgdW5zaWduZWQgbG9uZykgYXJyYXktXHUwMDNlcHB0cnNbMF07XG4rXG4rXHRpZiAoIWJwZl9qaXRfc3VwcG9ydHNfcGVyY3B1X2luc24oKSlcbitcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuK1x0aWYgKG1hcC1cdTAwM2VtYXhfZW50cmllcyAhPSAxKVxuK1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4rXHRpZiAoaW1tIFx1MDAzYyBiYXNlIHx8IGltbSBcdTAwM2U9IGJhc2UgKyBhcnJheS1cdTAwM2VlbGVtX3NpemUpXG4rXHRcdHJldHVybiAtRU5PRU5UO1xuK1xuK1x0Km9mZiA9IGltbSAtIGJhc2U7XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4gLyogZW1pdCBCUEYgaW5zdHJ1Y3Rpb25zIGVxdWl2YWxlbnQgdG8gQyBjb2RlIG9mIHBlcmNwdV9hcnJheV9tYXBfbG9va3VwX2VsZW0oKSAqL1xuIHN0YXRpYyBpbnQgcGVyY3B1X2FycmF5X21hcF9nZW5fbG9va3VwKHN0cnVjdCBicGZfbWFwICptYXAsIHN0cnVjdCBicGZfaW5zbiAqaW5zbl9idWYpXG4ge1xuQEAgLTU1MSw5ICs1ODIsMTAgQEAgc3RhdGljIGludCBhcnJheV9tYXBfY2hlY2tfYnRmKHN0cnVjdCBicGZfbWFwICptYXAsXG4gXHRcdFx0ICAgICAgIGNvbnN0IHN0cnVjdCBidGZfdHlwZSAqa2V5X3R5cGUsXG4gXHRcdFx0ICAgICAgIGNvbnN0IHN0cnVjdCBidGZfdHlwZSAqdmFsdWVfdHlwZSlcbiB7XG4tXHQvKiBPbmUgZXhjZXB0aW9uIGZvciBrZXlsZXNzIEJURjogLmJzcy8uZGF0YS8ucm9kYXRhIG1hcCAqL1xuK1x0LyogT25lIGV4Y2VwdGlvbiBmb3Iga2V5bGVzcyBCVEY6IC5ic3MvLmRhdGEvLnJvZGF0YS8ucGVyY3B1IG1hcCAqL1xuIFx0aWYgKGJ0Zl90eXBlX2lzX3ZvaWQoa2V5X3R5cGUpKSB7XG4tXHRcdGlmIChtYXAtXHUwMDNlbWFwX3R5cGUgIT0gQlBGX01BUF9UWVBFX0FSUkFZIHx8XG4rXHRcdGlmICgobWFwLVx1MDAzZW1hcF90eXBlICE9IEJQRl9NQVBfVFlQRV9BUlJBWSBcdTAwMjZcdTAwMjZcbitcdFx0ICAgICBtYXAtXHUwMDNlbWFwX3R5cGUgIT0gQlBGX01BUF9UWVBFX1BFUkNQVV9BUlJBWSkgfHxcbiBcdFx0ICAgIG1hcC1cdTAwM2VtYXhfZW50cmllcyAhPSAxKVxuIFx0XHRcdHJldHVybiAtRUlOVkFMO1xuIFxuQEAgLTgzMiw2ICs4NjQsOCBAQCBjb25zdCBzdHJ1Y3QgYnBmX21hcF9vcHMgcGVyY3B1X2FycmF5X21hcF9vcHMgPSB7XG4gXHQubWFwX2dldF9uZXh0X2tleSA9IGJwZl9hcnJheV9nZXRfbmV4dF9rZXksXG4gXHQubWFwX2xvb2t1cF9lbGVtID0gcGVyY3B1X2FycmF5X21hcF9sb29rdXBfZWxlbSxcbiBcdC5tYXBfZ2VuX2xvb2t1cCA9IHBlcmNwdV9hcnJheV9tYXBfZ2VuX2xvb2t1cCxcbitcdC5tYXBfZGlyZWN0X3ZhbHVlX2FkZHIgPSBwZXJjcHVfYXJyYXlfbWFwX2RpcmVjdF92YWx1ZV9hZGRyLFxuK1x0Lm1hcF9kaXJlY3RfdmFsdWVfbWV0YSA9IHBlcmNwdV9hcnJheV9tYXBfZGlyZWN0X3ZhbHVlX21ldGEsXG4gXHQubWFwX3VwZGF0ZV9lbGVtID0gYXJyYXlfbWFwX3VwZGF0ZV9lbGVtLFxuIFx0Lm1hcF9kZWxldGVfZWxlbSA9IGFycmF5X21hcF9kZWxldGVfZWxlbSxcbiBcdC5tYXBfbG9va3VwX3BlcmNwdV9lbGVtID0gcGVyY3B1X2FycmF5X21hcF9sb29rdXBfcGVyY3B1X2VsZW0sXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9iYWNrdHJhY2suYyBiL2tlcm5lbC9icGYvYmFja3RyYWNrLmNcbmluZGV4IDJmNDczYWQ0ZmQ3YzEuLjNmMTUwZTg1OGFlOGEgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvYnBmL2JhY2t0cmFjay5jXG4rKysgYi9rZXJuZWwvYnBmL2JhY2t0cmFjay5jXG5AQCAtMjE0LDcgKzIxNCw2IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBidF9pc19yZWdfc2V0KHN0cnVjdCBiYWNrdHJhY2tfc3RhdGUgKmJ0LCB1MzIgcmVnKVxuIFx0cmV0dXJuIGJ0LVx1MDAzZXJlZ19tYXNrc1tidC1cdTAwM2VmcmFtZV0gXHUwMDI2ICgxIFx1MDAzY1x1MDAzYyByZWcpO1xuIH1cbiBcbi1cbiAvKiBmb3JtYXQgcmVnaXN0ZXJzIGJpdG1hc2ssIGUuZy4sIFwicjAscjIscjRcIiBmb3IgMHgxNSBtYXNrICovXG4gc3RhdGljIHZvaWQgZm10X3JlZ19tYXNrKGNoYXIgKmJ1Ziwgc3NpemVfdCBidWZfc3osIHUzMiByZWdfbWFzaylcbiB7XG5AQCAtMjU0LDcgKzI1Myw2IEBAIHZvaWQgYnBmX2ZtdF9zdGFja19tYXNrKGNoYXIgKmJ1Ziwgc3NpemVfdCBidWZfc3osIHU2NCBzdGFja19tYXNrKVxuIFx0fVxuIH1cbiBcbi1cbiAvKiBGb3IgZ2l2ZW4gdmVyaWZpZXIgc3RhdGUgYmFja3RyYWNrX2luc24oKSBpcyBjYWxsZWQgZnJvbSB0aGUgbGFzdCBpbnNuIHRvXG4gICogdGhlIGZpcnN0IGluc24uIEl0cyBwdXJwb3NlIGlzIHRvIGNvbXB1dGUgYSBiaXRtYXNrIG9mIHJlZ2lzdGVycyBhbmRcbiAgKiBzdGFjayBzbG90cyB0aGF0IG5lZWRzIHByZWNpc2lvbiBpbiB0aGUgcGFyZW50IHZlcmlmaWVyIHN0YXRlLlxuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvYnRmLmMgYi9rZXJuZWwvYnBmL2J0Zi5jXG5pbmRleCA0MjQxNDYzM2NmMjYzLi5jODA3YWQyNjNlNmY4IDEwMDY0NFxuLS0tIGEva2VybmVsL2JwZi9idGYuY1xuKysrIGIva2VybmVsL2JwZi9idGYuY1xuQEAgLTI1MzQsNyArMjUzNCw2IEBAIHN0YXRpYyB2b2lkIGJ0Zl9iaXRmaWVsZF9zaG93KHZvaWQgKmRhdGEsIHU4IGJpdHNfb2Zmc2V0LFxuIFx0YnRmX2ludDEyOF9wcmludChzaG93LCBwcmludF9udW0pO1xuIH1cbiBcbi1cbiBzdGF0aWMgdm9pZCBidGZfaW50X2JpdHNfc2hvdyhjb25zdCBzdHJ1Y3QgYnRmICpidGYsXG4gXHRcdFx0ICAgICAgY29uc3Qgc3RydWN0IGJ0Zl90eXBlICp0LFxuIFx0XHRcdCAgICAgIHZvaWQgKmRhdGEsIHU4IGJpdHNfb2Zmc2V0LFxuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvY2ZnLmMgYi9rZXJuZWwvYnBmL2NmZy5jXG5pbmRleCBkYjM0MTZhN2M5MDQ3Li44MThmN2FmYWM4M2E1IDEwMDY0NFxuLS0tIGEva2VybmVsL2JwZi9jZmcuY1xuKysrIGIva2VybmVsL2JwZi9jZmcuY1xuQEAgLTQ3LDcgKzQ3LDYgQEAgZW51bSB7XG4gXHRCUkFOQ0ggPSAyLFxuIH07XG4gXG4tXG4gc3RhdGljIHZvaWQgbWFya19zdWJwcm9nX2NoYW5nZXNfcGt0X2RhdGEoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50IG9mZilcbiB7XG4gXHRzdHJ1Y3QgYnBmX3N1YnByb2dfaW5mbyAqc3VicHJvZztcbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL2NvbnN0X2ZvbGQuYyBiL2tlcm5lbC9icGYvY29uc3RfZm9sZC5jXG5pbmRleCBiMmExOWFjYWRiOTFlLi41Nzg3MjQ2YmVmMzAxIDEwMDY0NFxuLS0tIGEva2VybmVsL2JwZi9jb25zdF9mb2xkLmNcbisrKyBiL2tlcm5lbC9icGYvY29uc3RfZm9sZC5jXG5AQCAtMTgyLDcgKzE4Miw2IEBAIHN0YXRpYyB2b2lkIGNvbnN0X3JlZ194ZmVyKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBjb25zdF9hcmdfaW5mbyAqXG4gXHRcdHU2NCB2YWwgPSAwO1xuIFxuIFx0XHRpZiAoIWJwZl9tYXBfaXNfcmRvbmx5KG1hcCkgfHwgIW1hcC1cdTAwM2VvcHMtXHUwMDNlbWFwX2RpcmVjdF92YWx1ZV9hZGRyIHx8XG4tXHRcdCAgICBtYXAtXHUwMDNlbWFwX3R5cGUgPT0gQlBGX01BUF9UWVBFX0lOU05fQVJSQVkgfHxcbiBcdFx0ICAgIG9mZiBcdTAwM2MgMCB8fCBvZmYgKyBzaXplIFx1MDAzZSBtYXAtXHUwMDNldmFsdWVfc2l6ZSB8fFxuIFx0XHQgICAgYnBmX21hcF9kaXJlY3RfcmVhZChtYXAsIG9mZiwgc2l6ZSwgXHUwMDI2dmFsLCBpc19sZHN4KSkge1xuIFx0XHRcdCpkc3QgPSB1bmtub3duO1xuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvZml4dXBzLmMgYi9rZXJuZWwvYnBmL2ZpeHVwcy5jXG5pbmRleCBhMGJkZGFkYTc5NjRlLi5mMjM5ODc0OTEwM2JhIDEwMDY0NFxuLS0tIGEva2VybmVsL2JwZi9maXh1cHMuY1xuKysrIGIva2VybmVsL2JwZi9maXh1cHMuY1xuQEAgLTE0NDYsNyArMTQ0Niw2IEBAIGludCBicGZfZml4dXBfY2FsbF9hcmdzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXG4gXHRyZXR1cm4gZXJyO1xuIH1cbiBcbi1cbiAvKiBUaGUgZnVuY3Rpb24gcmVxdWlyZXMgdGhhdCBmaXJzdCBpbnN0cnVjdGlvbiBpbiAncGF0Y2gnIGlzIGluc25zaVtwcm9nLVx1MDAzZWxlbiAtIDFdICovXG4gc3RhdGljIGludCBhZGRfaGlkZGVuX3N1YnByb2coc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICpwYXRjaCwgaW50IGxlbilcbiB7XG5AQCAtMTgxOCw2ICsxODE3LDQzIEBAIGludCBicGZfZG9fbWlzY19maXh1cHMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcbiBcdFx0XHRnb3RvIG5leHRfaW5zbjtcbiBcdFx0fVxuIFxuK1x0XHRpZiAoYnBmX2ppdF9zdXBwb3J0c19wZXJjcHVfaW5zbigpIFx1MDAyNlx1MDAyNlxuK1x0XHQgICAgaW5zbi1cdTAwM2Vjb2RlID09IChCUEZfTEQgfCBCUEZfSU1NIHwgQlBGX0RXKSBcdTAwMjZcdTAwMjZcbitcdFx0ICAgIChpbnNuLVx1MDAzZXNyY19yZWcgPT0gQlBGX1BTRVVET19NQVBfVkFMVUUgfHxcbitcdFx0ICAgICBpbnNuLVx1MDAzZXNyY19yZWcgPT0gQlBGX1BTRVVET19NQVBfSURYX1ZBTFVFKSkge1xuK1x0XHRcdHN0cnVjdCBicGZfbWFwICptYXA7XG4rXG4rXHRcdFx0YXV4ID0gXHUwMDI2ZW52LVx1MDAzZWluc25fYXV4X2RhdGFbaSArIGRlbHRhXTtcbitcdFx0XHRtYXAgPSBlbnYtXHUwMDNldXNlZF9tYXBzW2F1eC1cdTAwM2VtYXBfaW5kZXhdO1xuK1x0XHRcdGlmIChtYXAtXHUwMDNlbWFwX3R5cGUgIT0gQlBGX01BUF9UWVBFX1BFUkNQVV9BUlJBWSlcbitcdFx0XHRcdGdvdG8gbmV4dF9pbnNuO1xuK1xuK1x0XHRcdHByb2ctXHUwMDNlaml0X3JlcXVpcmVkID0gdHJ1ZTtcbitcbitcdFx0XHQvKlxuK1x0XHRcdCAqIFdlIGFyZSAqc2tpcHBpbmcqIGZpcnN0IGhhbGYgb2YgbGRfaW1tNjQgaW5zblxuK1x0XHRcdCAqIHdpdGggJ2krKzsnLCBwYXRjaGluZyBvdmVyIHNlY29uZCBoYWxmIG9mIGl0XG4rXHRcdFx0ICogd2l0aCB0aGF0IHNhbWUgaGFsZiArIG1vdjY0X3BlcmNwdV9yZWcgaW5zbi5cbitcdFx0XHQgKiBBbGwgYmVjYXVzZSBicGZfcGF0Y2hfaW5zbl9kYXRhKCkgY2FuIG9ubHlcbitcdFx0XHQgKiByZXBsYWNlIG9uZSA4LWJ5dGUgaW5zbiwgd2hpY2ggZG9lcyBub3Qgd29ya1xuK1x0XHRcdCAqIHdlbGwgZm9yIGxkX2ltbTY0IGluc24uXG4rXHRcdFx0ICovXG4rXG4rXHRcdFx0aW5zbl9idWZbMF0gPSBpbnNuWzFdO1xuK1x0XHRcdGluc25fYnVmWzFdID0gQlBGX01PVjY0X1BFUkNQVV9SRUcoaW5zbi1cdTAwM2Vkc3RfcmVnLCBpbnNuLVx1MDAzZWRzdF9yZWcpO1xuK1x0XHRcdGNudCA9IDI7XG4rXG4rXHRcdFx0aSsrO1xuK1x0XHRcdG5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGkgKyBkZWx0YSwgaW5zbl9idWYsIGNudCk7XG4rXHRcdFx0aWYgKCFuZXdfcHJvZylcbitcdFx0XHRcdHJldHVybiAtRU5PTUVNO1xuK1xuK1x0XHRcdGRlbHRhICAgICs9IGNudCAtIDE7XG4rXHRcdFx0ZW52LVx1MDAzZXByb2cgPSBwcm9nID0gbmV3X3Byb2c7XG4rXHRcdFx0aW5zbiAgICAgID0gbmV3X3Byb2ctXHUwMDNlaW5zbnNpICsgaSArIGRlbHRhO1xuK1x0XHRcdGdvdG8gbmV4dF9pbnNuO1xuK1x0XHR9XG4rXG4gXHRcdGlmIChpbnNuLVx1MDAzZWNvZGUgIT0gKEJQRl9KTVAgfCBCUEZfQ0FMTCkpXG4gXHRcdFx0Z290byBuZXh0X2luc247XG4gXHRcdGlmIChpbnNuLVx1MDAzZXNyY19yZWcgPT0gQlBGX1BTRVVET19DQUxMKVxuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvaGFzaHRhYi5jIGIva2VybmVsL2JwZi9oYXNodGFiLmNcbmluZGV4IDlmMzk0ZTFhYTJlODUuLmQ0MGNiNWRkNDQ2Y2EgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvYnBmL2hhc2h0YWIuY1xuKysrIGIva2VybmVsL2JwZi9oYXNodGFiLmNcbkBAIC05OTgsNyArOTk4LDYgQEAgc3RhdGljIHZvaWQgZGVjX2VsZW1fY291bnQoc3RydWN0IGJwZl9odGFiICpodGFiKVxuIFx0XHRhdG9taWNfZGVjKFx1MDAyNmh0YWItXHUwMDNlY291bnQpO1xuIH1cbiBcbi1cbiBzdGF0aWMgdm9pZCBmcmVlX2h0YWJfZWxlbShzdHJ1Y3QgYnBmX2h0YWIgKmh0YWIsIHN0cnVjdCBodGFiX2VsZW0gKmwpXG4ge1xuIFx0aHRhYl9wdXRfZmRfdmFsdWUoaHRhYiwgbCk7XG5AQCAtMjk3MCw3ICsyOTY5LDYgQEAgc3RhdGljIGludCByaHRhYl9kZWxldGVfZWxlbShzdHJ1Y3QgYnBmX3JodGFiICpyaHRhYiwgc3RydWN0IHJodGFiX2VsZW0gKmVsZW0sIHZcbiBcdHJldHVybiAwO1xuIH1cbiBcbi1cbiBzdGF0aWMgbG9uZyByaHRhYl9tYXBfZGVsZXRlX2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5KVxuIHtcbiBcdHN0cnVjdCBicGZfcmh0YWIgKnJodGFiID0gY29udGFpbmVyX29mKG1hcCwgc3RydWN0IGJwZl9yaHRhYiwgbWFwKTtcbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL2hlbHBlcnMuYyBiL2tlcm5lbC9icGYvaGVscGVycy5jXG5pbmRleCA0NzA5YTVhZDA0NzQ3Li41ZTY4YTBhZGIxNGI0IDEwMDY0NFxuLS0tIGEva2VybmVsL2JwZi9oZWxwZXJzLmNcbisrKyBiL2tlcm5lbC9icGYvaGVscGVycy5jXG5AQCAtNDg2OSw3ICs0ODY5LDYgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBidGZfa2Z1bmNfaWRfc2V0IGdlbmVyaWNfa2Z1bmNfc2V0ID0ge1xuIFx0LnNldCAgID0gXHUwMDI2Z2VuZXJpY19idGZfaWRzLFxuIH07XG4gXG4tXG4gQlRGX0lEX0xJU1QoZ2VuZXJpY19kdG9yX2lkcylcbiBCVEZfSUQoc3RydWN0LCB0YXNrX3N0cnVjdClcbiBCVEZfSUQoZnVuYywgYnBmX3Rhc2tfcmVsZWFzZV9kdG9yKVxuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvbGl2ZW5lc3MuYyBiL2tlcm5lbC9icGYvbGl2ZW5lc3MuY1xuaW5kZXggMGFhZGZiYWUwYWNjNS4uOWUyNWUyNDFlMWZmNCAxMDA2NDRcbi0tLSBhL2tlcm5lbC9icGYvbGl2ZW5lc3MuY1xuKysrIGIva2VybmVsL2JwZi9saXZlbmVzcy5jXG5AQCAtMjY5LDcgKzI2OSw2IEBAIGJwZl9pbnNuX3N1Y2Nlc3NvcnMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgdTMyIGlkeClcbiBcbiBfX2RpYWdfcG9wKCk7XG4gXG4tXG4gc3RhdGljIGlubGluZSBib29sIHVwZGF0ZV9pbnNuKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4gXHRcdFx0ICAgICAgIHN0cnVjdCBmdW5jX2luc3RhbmNlICppbnN0YW5jZSwgdTMyIGZyYW1lLCB1MzIgaW5zbl9pZHgpXG4ge1xuQEAgLTE4NjgsNyArMTg2Nyw2IEBAIHN0YXRpYyBpbnQgYW5hbHl6ZV9zdWJwcm9nKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4gXHRpZiAobmVlZF9yZXNjaGVkKCkpXG4gXHRcdGNvbmRfcmVzY2hlZCgpO1xuIFxuLVxuIFx0LypcbiBcdCAqIFdoZW4gYW4gaW5zdGFuY2UgaXMgcmV1c2VkIChtdXN0X3dyaXRlX2luaXRpYWxpemVkID09IHRydWUpLFxuIFx0ICogcmVjb3JkIGludG8gYSBmcmVzaCBpbnN0YW5jZSBhbmQgbWVyZ2UgYWZ0ZXJ3YXJkLiAgVGhpcyBhdm9pZHNcbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL3F1ZXVlX3N0YWNrX21hcHMuYyBiL2tlcm5lbC9icGYvcXVldWVfc3RhY2tfbWFwcy5jXG5pbmRleCBjMWM5ZGVlNGRjZGQwLi42ZThiMThjMzJhMTA2IDEwMDY0NFxuLS0tIGEva2VybmVsL2JwZi9xdWV1ZV9zdGFja19tYXBzLmNcbisrKyBiL2tlcm5lbC9icGYvcXVldWVfc3RhY2tfbWFwcy5jXG5AQCAtMTIzLDcgKzEyMyw2IEBAIHN0YXRpYyBsb25nIF9fcXVldWVfbWFwX2dldChzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICp2YWx1ZSwgYm9vbCBkZWxldGUpXG4gXHRyZXR1cm4gZXJyO1xuIH1cbiBcbi1cbiBzdGF0aWMgbG9uZyBfX3N0YWNrX21hcF9nZXQoc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqdmFsdWUsIGJvb2wgZGVsZXRlKVxuIHtcbiBcdHN0cnVjdCBicGZfcXVldWVfc3RhY2sgKnFzID0gYnBmX3F1ZXVlX3N0YWNrKG1hcCk7XG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9zeXNjYWxsLmMgYi9rZXJuZWwvYnBmL3N5c2NhbGwuY1xuaW5kZXggOGQxMTFkYTg4NjU1My4uN2Q4YzNlOGU2ZDYyZSAxMDA2NDRcbi0tLSBhL2tlcm5lbC9icGYvc3lzY2FsbC5jXG4rKysgYi9rZXJuZWwvYnBmL3N5c2NhbGwuY1xuQEAgLTYzNiw3ICs2MzYsNiBAQCBpbnQgYnBmX21hcF9hbGxvY19wYWdlcyhjb25zdCBzdHJ1Y3QgYnBmX21hcCAqbWFwLCBpbnQgbmlkLFxuIFx0cmV0dXJuIHJldDtcbiB9XG4gXG4tXG4gc3RhdGljIGludCBidGZfZmllbGRfY21wKGNvbnN0IHZvaWQgKmEsIGNvbnN0IHZvaWQgKmIpXG4ge1xuIFx0Y29uc3Qgc3RydWN0IGJ0Zl9maWVsZCAqZjEgPSBhLCAqZjIgPSBiO1xuQEAgLTE4MzAsNyArMTgyOSw2IEBAIHN0YXRpYyBpbnQgbWFwX2xvb2t1cF9lbGVtKHVuaW9uIGJwZl9hdHRyICphdHRyKVxuIFx0cmV0dXJuIGVycjtcbiB9XG4gXG4tXG4gI2RlZmluZSBCUEZfTUFQX1VQREFURV9FTEVNX0xBU1RfRklFTEQgZmxhZ3NcbiBcbiBzdGF0aWMgaW50IG1hcF91cGRhdGVfZWxlbSh1bmlvbiBicGZfYXR0ciAqYXR0ciwgYnBmcHRyX3QgdWF0dHIpXG5AQCAtMzQ5Nyw3ICszNDk1LDYgQEAgaW50IGJwZl9saW5rX3ByaW1lKHN0cnVjdCBicGZfbGluayAqbGluaywgc3RydWN0IGJwZl9saW5rX3ByaW1lciAqcHJpbWVyKVxuIFx0aWYgKGZkIFx1MDAzYyAwKVxuIFx0XHRyZXR1cm4gZmQ7XG4gXG4tXG4gXHRpZCA9IGJwZl9saW5rX2FsbG9jX2lkKGxpbmspO1xuIFx0aWYgKGlkIFx1MDAzYyAwKSB7XG4gXHRcdHB1dF91bnVzZWRfZmQoZmQpO1xuQEAgLTU1MDUsNyArNTUwMiw2IEBAIHN0YXRpYyBpbnQgYnBmX2xpbmtfZ2V0X2luZm9fYnlfZmQoc3RydWN0IGZpbGUgKmZpbGUsXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4tXG4gc3RhdGljIGludCB0b2tlbl9nZXRfaW5mb19ieV9mZChzdHJ1Y3QgZmlsZSAqZmlsZSxcbiBcdFx0XHRcdHN0cnVjdCBicGZfdG9rZW4gKnRva2VuLFxuIFx0XHRcdFx0Y29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIsXG5AQCAtNjUwNyw3ICs2NTAzLDYgQEAgQlBGX0NBTExfMyhicGZfc3lzX2JwZiwgaW50LCBjbWQsIHVuaW9uIGJwZl9hdHRyICosIGF0dHIsIHUzMiwgYXR0cl9zaXplKVxuIFx0cmV0dXJuIF9fc3lzX2JwZihjbWQsIEtFUk5FTF9CUEZQVFIoYXR0ciksIGF0dHJfc2l6ZSwgS0VSTkVMX0JQRlBUUihOVUxMKSwgMCk7XG4gfVxuIFxuLVxuIC8qIFRvIHNodXQgdXAgLVdtaXNzaW5nLXByb3RvdHlwZXMuXG4gICogVGhpcyBmdW5jdGlvbiBpcyB1c2VkIGJ5IHRoZSBrZXJuZWwgbGlnaHQgc2tlbGV0b25cbiAgKiB0byBsb2FkIGJwZiBwcm9ncmFtcyB3aGVuIG1vZHVsZXMgYXJlIGxvYWRlZCBvciBkdXJpbmcga2VybmVsIGJvb3QuXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi92ZXJpZmllci5jIGIva2VybmVsL2JwZi92ZXJpZmllci5jXG5pbmRleCBkOTI1MTk3YzJlNWY3Li4zOTc3MjAwMmNiN2JmIDEwMDY0NFxuLS0tIGEva2VybmVsL2JwZi92ZXJpZmllci5jXG4rKysgYi9rZXJuZWwvYnBmL3ZlcmlmaWVyLmNcbkBAIC02MzUsNyArNjM1LDYgQEAgc3RhdGljIHZvaWQgX19tYXJrX2R5bnB0cl9yZWcoc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZyxcbiBcdFx0XHQgICAgICBlbnVtIGJwZl9keW5wdHJfdHlwZSB0eXBlLFxuIFx0XHRcdCAgICAgIGJvb2wgZmlyc3Rfc2xvdCwgaW50IGlkLCBpbnQgcGFyZW50X2lkKTtcbiBcbi1cbiBzdGF0aWMgdm9pZCBtYXJrX2R5bnB0cl9zdGFja19yZWdzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4gXHRcdFx0XHQgICBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqc3JlZzEsXG4gXHRcdFx0XHQgICBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqc3JlZzIsXG5AQCAtMTY3Miw3ICsxNjcxLDYgQEAgc3RhdGljIGJvb2wgc2FtZV9jYWxsc2l0ZXMoc3RydWN0IGJwZl92ZXJpZmllcl9zdGF0ZSAqYSwgc3RydWN0IGJwZl92ZXJpZmllcl9zdGFcbiBcdHJldHVybiB0cnVlO1xuIH1cbiBcbi1cbiB2b2lkIGJwZl9mcmVlX2JhY2tlZGdlcyhzdHJ1Y3QgYnBmX3NjY192aXNpdCAqdmlzaXQpXG4ge1xuIFx0c3RydWN0IGJwZl9zY2NfYmFja2VkZ2UgKmJhY2tlZGdlLCAqbmV4dDtcbkBAIC0yMjk0LDcgKzIyOTIsNiBAQCBzdGF0aWMgc3RydWN0IGJwZl92ZXJpZmllcl9zdGF0ZSAqcHVzaF9hc3luY19jYihzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuIFx0cmV0dXJuIFx1MDAyNmVsZW0tXHUwMDNlc3Q7XG4gfVxuIFxuLVxuIHN0YXRpYyBpbnQgY21wX3N1YnByb2dzKGNvbnN0IHZvaWQgKmEsIGNvbnN0IHZvaWQgKmIpXG4ge1xuIFx0cmV0dXJuICgoc3RydWN0IGJwZl9zdWJwcm9nX2luZm8gKilhKS1cdTAwM2VzdGFydCAtXG5AQCAtNDA3MSw3ICs0MDY4LDYgQEAgc3RhdGljIGludCBjaGVja19zdGFja19yZWFkKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4gXHRyZXR1cm4gZXJyO1xuIH1cbiBcbi1cbiAvKiBjaGVja19zdGFja193cml0ZSBkaXNwYXRjaGVzIHRvIGNoZWNrX3N0YWNrX3dyaXRlX2ZpeGVkX29mZiBvclxuICAqIGNoZWNrX3N0YWNrX3dyaXRlX3Zhcl9vZmYuXG4gICpcbkBAIC00ODY3LDcgKzQ4NjMsNiBAQCBzdGF0aWMgaW50IGNoZWNrX3NvY2tfYWNjZXNzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGludCBpbnNuX2lkeCxcbiBcdFx0dmFsaWQgPSBmYWxzZTtcbiBcdH1cbiBcbi1cbiBcdGlmICh2YWxpZCkge1xuIFx0XHRlbnYtXHUwMDNlaW5zbl9hdXhfZGF0YVtpbnNuX2lkeF0uY3R4X2ZpZWxkX3NpemUgPVxuIFx0XHRcdGluZm8uY3R4X2ZpZWxkX3NpemU7XG5AQCAtNTY2Miw2ICs1NjU3LDggQEAgaW50IGJwZl9tYXBfZGlyZWN0X3JlYWQoc3RydWN0IGJwZl9tYXAgKm1hcCwgaW50IG9mZiwgaW50IHNpemUsIHU2NCAqdmFsLFxuIFx0dTY0IGFkZHI7XG4gXHRpbnQgZXJyO1xuIFxuK1x0aWYgKG1hcC1cdTAwM2VtYXBfdHlwZSA9PSBCUEZfTUFQX1RZUEVfSU5TTl9BUlJBWSB8fCBtYXAtXHUwMDNlbWFwX3R5cGUgPT0gQlBGX01BUF9UWVBFX1BFUkNQVV9BUlJBWSlcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHRlcnIgPSBtYXAtXHUwMDNlb3BzLVx1MDAzZW1hcF9kaXJlY3RfdmFsdWVfYWRkcihtYXAsIFx1MDAyNmFkZHIsIG9mZik7XG4gXHRpZiAoZXJyKVxuIFx0XHRyZXR1cm4gZXJyO1xuQEAgLTYxNTgsNiArNjE1NSw1MSBAQCBzdGF0aWMgdm9pZCBhZGRfc2NhbGFyX3RvX3JlZyhzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqZHN0X3JlZywgczY0IHZhbClcbiBcdHJlZ19ib3VuZHNfc3luYyhkc3RfcmVnKTtcbiB9XG4gXG4rc3RhdGljIGludCBjaGVja19tYXBfbWVtX3JlYWQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZywgaW50IG9mZixcbitcdFx0XHQgICAgICBpbnQgYnBmX3NpemUsIGludCB2YWx1ZV9yZWdubywgYm9vbCBpc19sZHN4KVxuK3tcbitcdHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWdzID0gY3VyX3JlZ3MoZW52KTtcbitcdGludCBzaXplID0gYnBmX3NpemVfdG9fYnl0ZXMoYnBmX3NpemUpO1xuK1x0c3RydWN0IGJwZl9tYXAgKm1hcCA9IHJlZy1cdTAwM2VtYXBfcHRyO1xuK1xuK1x0c3dpdGNoIChtYXAtXHUwMDNlbWFwX3R5cGUpIHtcbitcdGNhc2UgQlBGX01BUF9UWVBFX0lOU05fQVJSQVk6XG4rXHRcdGlmIChicGZfc2l6ZSAhPSBCUEZfRFcpIHtcbitcdFx0XHR2ZXJib3NlKGVudiwgXCJJbnZhbGlkIHJlYWQgb2YgJWQgYnl0ZXMgZnJvbSBpbnNuX2FycmF5XFxuXCIsIHNpemUpO1xuK1x0XHRcdHJldHVybiAtRUFDQ0VTO1xuK1x0XHR9XG4rXHRcdHJlZ3NbdmFsdWVfcmVnbm9dID0gKnJlZztcbitcdFx0YWRkX3NjYWxhcl90b19yZWcoXHUwMDI2cmVnc1t2YWx1ZV9yZWdub10sIG9mZik7XG4rXHRcdHJlZ3NbdmFsdWVfcmVnbm9dLnR5cGUgPSBQVFJfVE9fSU5TTjtcbitcdFx0cmV0dXJuIDA7XG4rXHRjYXNlIEJQRl9NQVBfVFlQRV9QRVJDUFVfQVJSQVk6XG4rXHRcdGdvdG8gcmVnX3Vua25vd247XG4rXHRkZWZhdWx0OlxuK1x0XHRicmVhaztcbitcdH1cbitcbitcdC8qIElmIG1hcCBpcyByZWFkLW9ubHksIHRyYWNrIGl0cyBjb250ZW50cyBhcyBzY2FsYXJzLiAqL1xuK1x0aWYgKHRudW1faXNfY29uc3QocmVnLVx1MDAzZXZhcl9vZmYpIFx1MDAyNlx1MDAyNlxuK1x0ICAgIGJwZl9tYXBfaXNfcmRvbmx5KG1hcCkgXHUwMDI2XHUwMDI2XG4rXHQgICAgbWFwLVx1MDAzZW9wcy1cdTAwM2VtYXBfZGlyZWN0X3ZhbHVlX2FkZHIpIHtcbitcdFx0aW50IG1hcF9vZmYgPSBvZmYgKyByZWctXHUwMDNldmFyX29mZi52YWx1ZTtcbitcdFx0dTY0IHZhbCA9IDA7XG4rXHRcdGludCBlcnI7XG4rXG4rXHRcdGVyciA9IGJwZl9tYXBfZGlyZWN0X3JlYWQobWFwLCBtYXBfb2ZmLCBzaXplLCBcdTAwMjZ2YWwsIGlzX2xkc3gpO1xuK1x0XHRpZiAoZXJyKVxuK1x0XHRcdHJldHVybiBlcnI7XG4rXG4rXHRcdHJlZ3NbdmFsdWVfcmVnbm9dLnR5cGUgPSBTQ0FMQVJfVkFMVUU7XG4rXHRcdF9fbWFya19yZWdfa25vd24oXHUwMDI2cmVnc1t2YWx1ZV9yZWdub10sIHZhbCk7XG4rXHRcdHJldHVybiAwO1xuK1x0fVxuK1xuK3JlZ191bmtub3duOlxuK1x0bWFya19yZWdfdW5rbm93bihlbnYsIHJlZ3MsIHZhbHVlX3JlZ25vKTtcbitcdHJldHVybiAwO1xuK31cbitcbiAvKiBjaGVjayB3aGV0aGVyIG1lbW9yeSBhdCAocmVnbm8gKyBvZmYpIGlzIGFjY2Vzc2libGUgZm9yIHQgPSAocmVhZCB8IHdyaXRlKVxuICAqIGlmIHQ9PXdyaXRlLCB2YWx1ZV9yZWdubyBpcyBhIHJlZ2lzdGVyIHdoaWNoIHZhbHVlIGlzIHN0b3JlZCBpbnRvIG1lbW9yeVxuICAqIGlmIHQ9PXJlYWQsIHZhbHVlX3JlZ25vIGlzIGEgcmVnaXN0ZXIgd2hpY2ggd2lsbCByZWNlaXZlIHRoZSB2YWx1ZSBmcm9tIG1lbW9yeVxuQEAgLTYyMTIsMzggKzYyNTQsNyBAQCBzdGF0aWMgaW50IGNoZWNrX21lbV9hY2Nlc3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50IGluc25faWR4LCBzdHJ1Y3QgYlxuIFx0XHRpZiAoa3B0cl9maWVsZCkge1xuIFx0XHRcdGVyciA9IGNoZWNrX21hcF9rcHRyX2FjY2VzcyhlbnYsIHZhbHVlX3JlZ25vLCBpbnNuX2lkeCwga3B0cl9maWVsZCk7XG4gXHRcdH0gZWxzZSBpZiAodCA9PSBCUEZfUkVBRCBcdTAwMjZcdTAwMjYgdmFsdWVfcmVnbm8gXHUwMDNlPSAwKSB7XG4tXHRcdFx0c3RydWN0IGJwZl9tYXAgKm1hcCA9IHJlZy1cdTAwM2VtYXBfcHRyO1xuLVxuLVx0XHRcdC8qXG4tXHRcdFx0ICogSWYgbWFwIGlzIHJlYWQtb25seSwgdHJhY2sgaXRzIGNvbnRlbnRzIGFzIHNjYWxhcnMsXG4tXHRcdFx0ICogdW5sZXNzIGl0IGlzIGFuIGluc24gYXJyYXkgKHNlZSB0aGUgc3BlY2lhbCBjYXNlIGJlbG93KVxuLVx0XHRcdCAqL1xuLVx0XHRcdGlmICh0bnVtX2lzX2NvbnN0KHJlZy1cdTAwM2V2YXJfb2ZmKSBcdTAwMjZcdTAwMjZcbi1cdFx0XHQgICAgYnBmX21hcF9pc19yZG9ubHkobWFwKSBcdTAwMjZcdTAwMjZcbi1cdFx0XHQgICAgbWFwLVx1MDAzZW9wcy1cdTAwM2VtYXBfZGlyZWN0X3ZhbHVlX2FkZHIgXHUwMDI2XHUwMDI2XG4tXHRcdFx0ICAgIG1hcC1cdTAwM2VtYXBfdHlwZSAhPSBCUEZfTUFQX1RZUEVfSU5TTl9BUlJBWSkge1xuLVx0XHRcdFx0aW50IG1hcF9vZmYgPSBvZmYgKyByZWctXHUwMDNldmFyX29mZi52YWx1ZTtcbi1cdFx0XHRcdHU2NCB2YWwgPSAwO1xuLVxuLVx0XHRcdFx0ZXJyID0gYnBmX21hcF9kaXJlY3RfcmVhZChtYXAsIG1hcF9vZmYsIHNpemUsXG4tXHRcdFx0XHRcdFx0XHQgIFx1MDAyNnZhbCwgaXNfbGRzeCk7XG4tXHRcdFx0XHRpZiAoZXJyKVxuLVx0XHRcdFx0XHRyZXR1cm4gZXJyO1xuLVxuLVx0XHRcdFx0cmVnc1t2YWx1ZV9yZWdub10udHlwZSA9IFNDQUxBUl9WQUxVRTtcbi1cdFx0XHRcdF9fbWFya19yZWdfa25vd24oXHUwMDI2cmVnc1t2YWx1ZV9yZWdub10sIHZhbCk7XG4tXHRcdFx0fSBlbHNlIGlmIChtYXAtXHUwMDNlbWFwX3R5cGUgPT0gQlBGX01BUF9UWVBFX0lOU05fQVJSQVkpIHtcbi1cdFx0XHRcdGlmIChicGZfc2l6ZSAhPSBCUEZfRFcpIHtcbi1cdFx0XHRcdFx0dmVyYm9zZShlbnYsIFwiSW52YWxpZCByZWFkIG9mICVkIGJ5dGVzIGZyb20gaW5zbl9hcnJheVxcblwiLFxuLVx0XHRcdFx0XHRcdCAgICAgc2l6ZSk7XG4tXHRcdFx0XHRcdHJldHVybiAtRUFDQ0VTO1xuLVx0XHRcdFx0fVxuLVx0XHRcdFx0cmVnc1t2YWx1ZV9yZWdub10gPSAqcmVnO1xuLVx0XHRcdFx0YWRkX3NjYWxhcl90b19yZWcoXHUwMDI2cmVnc1t2YWx1ZV9yZWdub10sIG9mZik7XG4tXHRcdFx0XHRyZWdzW3ZhbHVlX3JlZ25vXS50eXBlID0gUFRSX1RPX0lOU047XG4tXHRcdFx0fSBlbHNlIHtcbi1cdFx0XHRcdG1hcmtfcmVnX3Vua25vd24oZW52LCByZWdzLCB2YWx1ZV9yZWdubyk7XG4tXHRcdFx0fVxuK1x0XHRcdGVyciA9IGNoZWNrX21hcF9tZW1fcmVhZChlbnYsIHJlZywgb2ZmLCBicGZfc2l6ZSwgdmFsdWVfcmVnbm8sIGlzX2xkc3gpO1xuIFx0XHR9XG4gXHR9IGVsc2UgaWYgKGJhc2VfdHlwZShyZWctXHUwMDNldHlwZSkgPT0gUFRSX1RPX01FTSkge1xuIFx0XHRib29sIHJkb25seV9tZW0gPSB0eXBlX2lzX3Jkb25seV9tZW0ocmVnLVx1MDAzZXR5cGUpO1xuQEAgLTY3MjUsNyArNjczNiw2IEBAIHN0YXRpYyBpbnQgY2hlY2tfc3RhY2tfcmFuZ2VfaW5pdGlhbGl6ZWQoXG4gXHRpZiAoZXJyKVxuIFx0XHRyZXR1cm4gZXJyO1xuIFxuLVxuIFx0aWYgKHRudW1faXNfY29uc3QocmVnLVx1MDAzZXZhcl9vZmYpKSB7XG4gXHRcdG1pbl9vZmYgPSBtYXhfb2ZmID0gcmVnLVx1MDAzZXZhcl9vZmYudmFsdWUgKyBvZmY7XG4gXHR9IGVsc2Uge1xuQEAgLTc0NDMsNyArNzQ1Myw2IEBAIHN0YXRpYyBib29sIGlzX2l0ZXJfbmV3X2tmdW5jKHN0cnVjdCBicGZfY2FsbF9hcmdfbWV0YSAqbWV0YSlcbiBcdHJldHVybiBtZXRhLVx1MDAzZWtmdW5jX2ZsYWdzIFx1MDAyNiBLRl9JVEVSX05FVztcbiB9XG4gXG4tXG4gc3RhdGljIGJvb2wgaXNfaXRlcl9kZXN0cm95X2tmdW5jKHN0cnVjdCBicGZfY2FsbF9hcmdfbWV0YSAqbWV0YSlcbiB7XG4gXHRyZXR1cm4gbWV0YS1cdTAwM2VrZnVuY19mbGFncyBcdTAwMjYgS0ZfSVRFUl9ERVNUUk9ZO1xuQEAgLTgyMjEsNiArODIzMCwxMiBAQCBzdGF0aWMgaW50IGNoZWNrX2FyZ19jb25zdF9zdHIoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbiBcdFx0cmV0dXJuIC1FQUNDRVM7XG4gXHR9XG4gXG4rXHRpZiAobWFwLVx1MDAzZW1hcF90eXBlID09IEJQRl9NQVBfVFlQRV9QRVJDUFVfQVJSQVkpIHtcbitcdFx0dmVyYm9zZShlbnYsIFwiJXMgcG9pbnRzIHRvIHBlcmNwdV9hcnJheSBtYXAgd2hpY2ggY2Fubm90IGJlIHVzZWQgYXMgY29uc3Qgc3RyaW5nXFxuXCIsXG4rXHRcdFx0cmVnX2FyZ19uYW1lKGVudiwgYXJnbm8pKTtcbitcdFx0cmV0dXJuIC1FQUNDRVM7XG4rXHR9XG4rXG4gXHRpZiAoIWJwZl9tYXBfaXNfcmRvbmx5KG1hcCkpIHtcbiBcdFx0dmVyYm9zZShlbnYsIFwiJXMgZG9lcyBub3QgcG9pbnQgdG8gYSByZWFkb25seSBtYXAnXFxuXCIsIHJlZ19hcmdfbmFtZShlbnYsIGFyZ25vKSk7XG4gXHRcdHJldHVybiAtRUFDQ0VTO1xuQEAgLTExNjY3LDcgKzExNjgyLDYgQEAgc3RhdGljIGludCBwcm9jZXNzX2lycV9mbGFnKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcmVnX3N0YXRlICpcbiBcdHJldHVybiAwO1xuIH1cbiBcbi1cbiBzdGF0aWMgaW50IHJlZl9zZXRfbm9uX293bmluZyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnKVxuIHtcbiBcdHN0cnVjdCBidGZfcmVjb3JkICpyZWMgPSByZWdfYnRmX3JlY29yZChyZWcpO1xuQEAgLTE2NTE1LDcgKzE2NTI5LDYgQEAgc3RhdGljIGludCBjaGVja19sZF9hYnMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuKVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuLVxuIHN0YXRpYyBib29sIHJldHVybl9yZXR2YWxfcmFuZ2Uoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9yZXR2YWxfcmFuZ2UgKnJhbmdlKVxuIHtcbiBcdGVudW0gYnBmX3Byb2dfdHlwZSBwcm9nX3R5cGUgPSByZXNvbHZlX3Byb2dfdHlwZShlbnYtXHUwMDNlcHJvZyk7XG5AQCAtMTg0NjEsOCArMTg0NzQsNiBAQCBzdGF0aWMgdm9pZCByZWxlYXNlX2luc25fYXJyYXlzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXG4gXHRcdGJwZl9pbnNuX2FycmF5X3JlbGVhc2UoZW52LVx1MDAzZWluc25fYXJyYXlfbWFwc1tpXSk7XG4gfVxuIFxuLVxuLVxuIC8qIFRoZSB2ZXJpZmllciBkb2VzIG1vcmUgZGF0YSBmbG93IGFuYWx5c2lzIHRoYW4gbGx2bSBhbmQgd2lsbCBub3RcbiAgKiBleHBsb3JlIGJyYW5jaGVzIHRoYXQgYXJlIGRlYWQgYXQgcnVuIHRpbWUuIE1hbGljaW91cyBwcm9ncmFtcyBjYW5cbiAgKiBoYXZlIGRlYWQgY29kZSB0b28uIFRoZXJlZm9yZSByZXBsYWNlIGFsbCBkZWFkIGF0LXJ1bi10aW1lIGNvZGVcbkBAIC0xODQ5MCw4ICsxODUwMSw2IEBAIHN0YXRpYyB2b2lkIHNhbml0aXplX2RlYWRfY29kZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxuIFx0fVxuIH1cbiBcbi1cbi1cbiBzdGF0aWMgdm9pZCBmcmVlX3N0YXRlcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxuIHtcbiBcdHN0cnVjdCBicGZfdmVyaWZpZXJfc3RhdGVfbGlzdCAqc2w7XG5AQCAtMTg3NzMsNyArMTg3ODIsNiBAQCBzdGF0aWMgaW50IGRvX2NoZWNrX21haW4oc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcbiBcdHJldHVybiByZXQ7XG4gfVxuIFxuLVxuIHN0YXRpYyB2b2lkIHByaW50X3ZlcmlmaWNhdGlvbl9zdGF0cyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxuIHtcbiBcdC8qIFNraXAgb3ZlciBoaWRkZW4gc3VicHJvZ3Mgd2hpY2ggYXJlIG5vdCB2ZXJpZmllZC4gKi9cbmRpZmYgLS1naXQgYS90b29scy9icGYvYnBmdG9vbC9nZW4uYyBiL3Rvb2xzL2JwZi9icGZ0b29sL2dlbi5jXG5pbmRleCBhMDFkMDZkMjJkMWEzLi5hNTA1NDBlZjY1MjFjIDEwMDY0NFxuLS0tIGEvdG9vbHMvYnBmL2JwZnRvb2wvZ2VuLmNcbisrKyBiL3Rvb2xzL2JwZi9icGZ0b29sL2dlbi5jXG5AQCAtMTAxLDYgKzEwMSwxMiBAQCBzdGF0aWMgYm9vbCBnZXRfbWFwX2lkZW50KGNvbnN0IHN0cnVjdCBicGZfbWFwICptYXAsIGNoYXIgKmJ1Ziwgc2l6ZV90IGJ1Zl9zeilcbiBcdFx0cmV0dXJuIHRydWU7XG4gXHR9XG4gXG4rXHRpZiAoYnBmX21hcF9fdHlwZShtYXApID09IEJQRl9NQVBfVFlQRV9QRVJDUFVfQVJSQVkpIHtcbitcdFx0c25wcmludGYoYnVmLCBidWZfc3osIFwiJXNcIiwgbmFtZSArIDEpO1xuK1x0XHRzYW5pdGl6ZV9pZGVudGlmaWVyKGJ1Zik7XG4rXHRcdHJldHVybiB0cnVlO1xuK1x0fVxuK1xuIFx0Zm9yICAoaSA9IDAsIG4gPSBBUlJBWV9TSVpFKHNmeHMpOyBpIFx1MDAzYyBuOyBpKyspIHtcbiBcdFx0Y29uc3QgY2hhciAqc2Z4ID0gc2Z4c1tpXSwgKnA7XG4gXG5AQCAtMTE3LDcgKzEyMyw3IEBAIHN0YXRpYyBib29sIGdldF9tYXBfaWRlbnQoY29uc3Qgc3RydWN0IGJwZl9tYXAgKm1hcCwgY2hhciAqYnVmLCBzaXplX3QgYnVmX3N6KVxuIFxuIHN0YXRpYyBib29sIGdldF9kYXRhc2VjX2lkZW50KGNvbnN0IGNoYXIgKnNlY19uYW1lLCBjaGFyICpidWYsIHNpemVfdCBidWZfc3opXG4ge1xuLVx0c3RhdGljIGNvbnN0IGNoYXIgKnBmeHNbXSA9IHsgXCIuZGF0YVwiLCBcIi5yb2RhdGFcIiwgXCIuYnNzXCIsIFwiLmtjb25maWdcIiB9O1xuK1x0c3RhdGljIGNvbnN0IGNoYXIgKnBmeHNbXSA9IHsgXCIuZGF0YVwiLCBcIi5yb2RhdGFcIiwgXCIuYnNzXCIsIFwiLnBlcmNwdVwiLCBcIi5rY29uZmlnXCIgfTtcbiBcdGludCBpLCBuO1xuIFxuIFx0LyogcmVjb2duaXplIGhhcmQgY29kZWQgTExWTSBzZWN0aW9uIG5hbWUgKi9cbkBAIC0yNTQsNyArMjYwLDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBidGZfdHlwZSAqZmluZF90eXBlX2Zvcl9tYXAoc3RydWN0IGJ0ZiAqYnRmLCBjb25zdCBjaGFyICptYXBcbiBcdHJldHVybiBOVUxMO1xuIH1cbiBcbi1zdGF0aWMgYm9vbCBpc19tbWFwYWJsZV9tYXAoY29uc3Qgc3RydWN0IGJwZl9tYXAgKm1hcCwgY2hhciAqYnVmLCBzaXplX3Qgc3opXG4rc3RhdGljIGJvb2wgaXNfc2tlbF9kYXRhKGNvbnN0IHN0cnVjdCBicGZfbWFwICptYXAsIGNoYXIgKmJ1Ziwgc2l6ZV90IHN6KVxuIHtcbiBcdHNpemVfdCB0bXBfc3o7XG4gXG5AQCAtMjYzLDEzICsyNjksMjQgQEAgc3RhdGljIGJvb2wgaXNfbW1hcGFibGVfbWFwKGNvbnN0IHN0cnVjdCBicGZfbWFwICptYXAsIGNoYXIgKmJ1Ziwgc2l6ZV90IHN6KVxuIFx0XHRyZXR1cm4gdHJ1ZTtcbiBcdH1cbiBcbi1cdGlmICghYnBmX21hcF9faXNfaW50ZXJuYWwobWFwKSB8fCAhKGJwZl9tYXBfX21hcF9mbGFncyhtYXApIFx1MDAyNiBCUEZfRl9NTUFQQUJMRSkpXG4rXHRpZiAoIWJwZl9tYXBfX2lzX2ludGVybmFsKG1hcCkpXG4gXHRcdHJldHVybiBmYWxzZTtcbiBcbiBcdGlmICghZ2V0X21hcF9pZGVudChtYXAsIGJ1Ziwgc3opKVxuIFx0XHRyZXR1cm4gZmFsc2U7XG4gXG4tXHRyZXR1cm4gdHJ1ZTtcbitcdGlmIChicGZfbWFwX19tYXBfZmxhZ3MobWFwKSBcdTAwMjYgQlBGX0ZfTU1BUEFCTEUpXG4rXHRcdHJldHVybiB0cnVlO1xuK1xuK1x0aWYgKGJwZl9tYXBfX3R5cGUobWFwKSA9PSBCUEZfTUFQX1RZUEVfUEVSQ1BVX0FSUkFZKVxuK1x0XHRyZXR1cm4gYnBmX21hcF9fYnRmX3ZhbHVlX3R5cGVfaWQobWFwKSAhPSAwO1xuK1xuK1x0cmV0dXJuIGZhbHNlO1xuK31cbitcbitzdGF0aWMgYm9vbCBpc19tbWFwYWJsZV9tYXAoY29uc3Qgc3RydWN0IGJwZl9tYXAgKm1hcCwgY2hhciAqYnVmLCBzaXplX3Qgc3opXG4re1xuK1x0cmV0dXJuIGlzX3NrZWxfZGF0YShtYXAsIGJ1Ziwgc3opIFx1MDAyNlx1MDAyNiBicGZfbWFwX190eXBlKG1hcCkgIT0gQlBGX01BUF9UWVBFX1BFUkNQVV9BUlJBWTtcbiB9XG4gXG4gc3RhdGljIGludCBjb2RlZ2VuX2RhdGFzZWNzKHN0cnVjdCBicGZfb2JqZWN0ICpvYmosIGNvbnN0IGNoYXIgKm9ial9uYW1lKVxuQEAgLTI4Nyw3ICszMDQsNyBAQCBzdGF0aWMgaW50IGNvZGVnZW5fZGF0YXNlY3Moc3RydWN0IGJwZl9vYmplY3QgKm9iaiwgY29uc3QgY2hhciAqb2JqX25hbWUpXG4gXG4gXHRicGZfb2JqZWN0X19mb3JfZWFjaF9tYXAobWFwLCBvYmopIHtcbiBcdFx0Lyogb25seSBnZW5lcmF0ZSBkZWZpbml0aW9ucyBmb3IgbWVtb3J5LW1hcHBlZCBpbnRlcm5hbCBtYXBzICovXG4tXHRcdGlmICghaXNfbW1hcGFibGVfbWFwKG1hcCwgbWFwX2lkZW50LCBzaXplb2YobWFwX2lkZW50KSkpXG4rXHRcdGlmICghaXNfc2tlbF9kYXRhKG1hcCwgbWFwX2lkZW50LCBzaXplb2YobWFwX2lkZW50KSkpXG4gXHRcdFx0Y29udGludWU7XG4gXG4gXHRcdHNlYyA9IGZpbmRfdHlwZV9mb3JfbWFwKGJ0ZiwgbWFwX2lkZW50KTtcbkBAIC01MTcsNyArNTM0LDcgQEAgc3RhdGljIHZvaWQgY29kZWdlbl9hc3NlcnRzKHN0cnVjdCBicGZfb2JqZWN0ICpvYmosIGNvbnN0IGNoYXIgKm9ial9uYW1lKVxuIFx0XHRcIiwgb2JqX25hbWUpO1xuIFxuIFx0YnBmX29iamVjdF9fZm9yX2VhY2hfbWFwKG1hcCwgb2JqKSB7XG4tXHRcdGlmICghaXNfbW1hcGFibGVfbWFwKG1hcCwgbWFwX2lkZW50LCBzaXplb2YobWFwX2lkZW50KSkpXG4rXHRcdGlmICghaXNfc2tlbF9kYXRhKG1hcCwgbWFwX2lkZW50LCBzaXplb2YobWFwX2lkZW50KSkpXG4gXHRcdFx0Y29udGludWU7XG4gXG4gXHRcdHNlYyA9IGZpbmRfdHlwZV9mb3JfbWFwKGJ0ZiwgbWFwX2lkZW50KTtcbkBAIC02NjgsOCArNjg1LDcgQEAgc3RhdGljIHZvaWQgY29kZWdlbl9kZXN0cm95KHN0cnVjdCBicGZfb2JqZWN0ICpvYmosIGNvbnN0IGNoYXIgKm9ial9uYW1lKVxuIFx0YnBmX29iamVjdF9fZm9yX2VhY2hfbWFwKG1hcCwgb2JqKSB7XG4gXHRcdGlmICghZ2V0X21hcF9pZGVudChtYXAsIGlkZW50LCBzaXplb2YoaWRlbnQpKSlcbiBcdFx0XHRjb250aW51ZTtcbi1cdFx0aWYgKGJwZl9tYXBfX2lzX2ludGVybmFsKG1hcCkgXHUwMDI2XHUwMDI2XG4tXHRcdCAgICAoYnBmX21hcF9fbWFwX2ZsYWdzKG1hcCkgXHUwMDI2IEJQRl9GX01NQVBBQkxFKSlcbitcdFx0aWYgKGlzX3NrZWxfZGF0YShtYXAsIGlkZW50LCBzaXplb2YoaWRlbnQpKSlcbiBcdFx0XHRwcmludGYoXCJcXHRza2VsX2ZyZWVfbWFwX2RhdGEoc2tlbC1cdTAwM2UlMSRzLCBza2VsLVx1MDAzZW1hcHMuJTEkcy5pbml0aWFsX3ZhbHVlLCAlMiR6dSk7XFxuXCIsXG4gXHRcdFx0ICAgICAgIGlkZW50LCBicGZfbWFwX21tYXBfc3oobWFwKSk7XG4gXHRcdGNvZGVnZW4oXCJcXFxuQEAgLTc0MSw3ICs3NTcsNyBAQCBzdGF0aWMgaW50IGdlbl90cmFjZShzdHJ1Y3QgYnBmX29iamVjdCAqb2JqLCBjb25zdCBjaGFyICpvYmpfbmFtZSwgY29uc3QgY2hhciAqaFxuIFx0XHRjb25zdCB2b2lkICptbWFwX2RhdGEgPSBOVUxMO1xuIFx0XHRzaXplX3QgbW1hcF9zaXplID0gMDtcbiBcbi1cdFx0aWYgKCFpc19tbWFwYWJsZV9tYXAobWFwLCBpZGVudCwgc2l6ZW9mKGlkZW50KSkpXG4rXHRcdGlmICghaXNfc2tlbF9kYXRhKG1hcCwgaWRlbnQsIHNpemVvZihpZGVudCkpKVxuIFx0XHRcdGNvbnRpbnVlO1xuIFxuIFx0XHRjb2RlZ2VuKFwiXFxcbkBAIC04NDksOSArODY1LDIzIEBAIHN0YXRpYyBpbnQgZ2VuX3RyYWNlKHN0cnVjdCBicGZfb2JqZWN0ICpvYmosIGNvbnN0IGNoYXIgKm9ial9uYW1lLCBjb25zdCBjaGFyICpoXG4gXHRicGZfb2JqZWN0X19mb3JfZWFjaF9tYXAobWFwLCBvYmopIHtcbiBcdFx0Y29uc3QgY2hhciAqbW1hcF9mbGFncztcbiBcbi1cdFx0aWYgKCFpc19tbWFwYWJsZV9tYXAobWFwLCBpZGVudCwgc2l6ZW9mKGlkZW50KSkpXG4rXHRcdGlmICghaXNfc2tlbF9kYXRhKG1hcCwgaWRlbnQsIHNpemVvZihpZGVudCkpKVxuIFx0XHRcdGNvbnRpbnVlO1xuIFxuK1x0XHRpZiAoYnBmX21hcF9fdHlwZShtYXApID09IEJQRl9NQVBfVFlQRV9QRVJDUFVfQVJSQVkpIHtcbitcdFx0XHRjb2RlZ2VuKFwiXFxcbitcdFx0XFxuXFxcbitcdFx0XHRlcnIgPSBza2VsX3Byb3RlY3RfbWFwX2RhdGEoc2tlbC1cdTAwM2UlMSRzLCBcdTAwMjZza2VsLVx1MDAzZW1hcHMuJTEkcy5pbml0aWFsX3ZhbHVlLCAlMiR6ZCk7XFxuXFxcbitcdFx0XHRpZiAoZXJyKVx0XHRcdFx0XHQgICAgXFxuXFxcbitcdFx0XHRcdHJldHVybiBlcnI7XHRcdFx0XHQgICAgXFxuXFxcbitcdFx0I2lmZGVmIF9fS0VSTkVMX19cdFx0XHRcdFx0ICAgIFxcblxcXG4rXHRcdFx0c2tlbC1cdTAwM2UlMSRzID0gTlVMTDtcdFx0XHRcdCAgICBcXG5cXFxuK1x0XHQjZW5kaWZcdFx0XHRcdFx0XHRcdCAgICBcXG5cXFxuK1x0XHRcdFwiLFxuK1x0XHRcdGlkZW50LCBicGZfbWFwX21tYXBfc3oobWFwKSk7XG4rXHRcdFx0Y29udGludWU7XG4rXHRcdH1cbitcbiBcdFx0aWYgKGJwZl9tYXBfX21hcF9mbGFncyhtYXApIFx1MDAyNiBCUEZfRl9SRE9OTFlfUFJPRylcbiBcdFx0XHRtbWFwX2ZsYWdzID0gXCJQUk9UX1JFQURcIjtcbiBcdFx0ZWxzZVxuQEAgLTk1NSw4ICs5ODUsNyBAQCBjb2RlZ2VuX21hcHNfc2tlbGV0b24oc3RydWN0IGJwZl9vYmplY3QgKm9iaiwgc2l6ZV90IG1hcF9jbnQsIGJvb2wgbW1hcGVkLCBib29sXG4gXHRcdFx0XHRtYXAtXHUwMDNlbWFwID0gXHUwMDI2b2JqLVx1MDAzZW1hcHMuJXM7XHQgICAgXFxuXFxcbiBcdFx0XHRcIixcbiBcdFx0XHRpLCBicGZfbWFwX19uYW1lKG1hcCksIGlkZW50KTtcbi1cdFx0LyogbWVtb3J5LW1hcHBlZCBpbnRlcm5hbCBtYXBzICovXG4tXHRcdGlmIChtbWFwZWQgXHUwMDI2XHUwMDI2IGlzX21tYXBhYmxlX21hcChtYXAsIGlkZW50LCBzaXplb2YoaWRlbnQpKSkge1xuK1x0XHRpZiAobW1hcGVkIFx1MDAyNlx1MDAyNiBpc19za2VsX2RhdGEobWFwLCBpZGVudCwgc2l6ZW9mKGlkZW50KSkpIHtcbiBcdFx0XHRwcmludGYoXCJcXHRtYXAtXHUwMDNlbW1hcGVkID0gKHZvaWQgKiopXHUwMDI2b2JqLVx1MDAzZSVzO1xcblwiLCBpZGVudCk7XG4gXHRcdH1cbiBcbmRpZmYgLS1naXQgYS90b29scy9saWIvYnBmL2JwZl9nZW5faW50ZXJuYWwuaCBiL3Rvb2xzL2xpYi9icGYvYnBmX2dlbl9pbnRlcm5hbC5oXG5pbmRleCAwNDI1NjkxODc3NTIxLi42YzVhZDZjNTVlOGE2IDEwMDY0NFxuLS0tIGEvdG9vbHMvbGliL2JwZi9icGZfZ2VuX2ludGVybmFsLmhcbisrKyBiL3Rvb2xzL2xpYi9icGYvYnBmX2dlbl9pbnRlcm5hbC5oXG5AQCAtNjUsNyArNjUsOCBAQCB2b2lkIGJwZl9nZW5fX3Byb2dfbG9hZChzdHJ1Y3QgYnBmX2dlbiAqZ2VuLFxuIFx0XHRcdGVudW0gYnBmX3Byb2dfdHlwZSBwcm9nX3R5cGUsIGNvbnN0IGNoYXIgKnByb2dfbmFtZSxcbiBcdFx0XHRjb25zdCBjaGFyICpsaWNlbnNlLCBzdHJ1Y3QgYnBmX2luc24gKmluc25zLCBzaXplX3QgaW5zbl9jbnQsXG4gXHRcdFx0c3RydWN0IGJwZl9wcm9nX2xvYWRfb3B0cyAqbG9hZF9hdHRyLCBpbnQgcHJvZ19pZHgpO1xuLXZvaWQgYnBmX2dlbl9fbWFwX3VwZGF0ZV9lbGVtKHN0cnVjdCBicGZfZ2VuICpnZW4sIGludCBtYXBfaWR4LCB2b2lkICp2YWx1ZSwgX191MzIgdmFsdWVfc2l6ZSk7XG4rdm9pZCBicGZfZ2VuX19tYXBfdXBkYXRlX2VsZW0oc3RydWN0IGJwZl9nZW4gKmdlbiwgaW50IG1hcF9pZHgsIHZvaWQgKnZhbHVlLCBfX3UzMiB2YWx1ZV9zaXplLFxuK1x0XHRcdCAgICAgIF9fdTY0IGZsYWdzKTtcbiB2b2lkIGJwZl9nZW5fX21hcF9mcmVlemUoc3RydWN0IGJwZl9nZW4gKmdlbiwgaW50IG1hcF9pZHgpO1xuIHZvaWQgYnBmX2dlbl9fcmVjb3JkX2F0dGFjaF90YXJnZXQoc3RydWN0IGJwZl9nZW4gKmdlbiwgY29uc3QgY2hhciAqbmFtZSwgZW51bSBicGZfYXR0YWNoX3R5cGUgdHlwZSk7XG4gdm9pZCBicGZfZ2VuX19yZWNvcmRfZXh0ZXJuKHN0cnVjdCBicGZfZ2VuICpnZW4sIGNvbnN0IGNoYXIgKm5hbWUsIGJvb2wgaXNfd2VhayxcbmRpZmYgLS1naXQgYS90b29scy9saWIvYnBmL2ZlYXR1cmVzLmMgYi90b29scy9saWIvYnBmL2ZlYXR1cmVzLmNcbmluZGV4IGI3ZTM4OGY5OWQwYmIuLmVmOTU4MWMxMTMwMzUgMTAwNjQ0XG4tLS0gYS90b29scy9saWIvYnBmL2ZlYXR1cmVzLmNcbisrKyBiL3Rvb2xzL2xpYi9icGYvZmVhdHVyZXMuY1xuQEAgLTYyMCw2ICs2MjAsMzggQEAgc3RhdGljIGludCBwcm9iZV9icGZfc3lzY2FsbF9jb21tb25fYXR0cnMoaW50IHRva2VuX2ZkKVxuIFx0cmV0dXJuIHByb2JlX3N5c19icGZfZXh0KCk7XG4gfVxuIFxuK3N0YXRpYyBpbnQgcHJvYmVfa2Vybl9wZXJjcHVfZGF0YShpbnQgdG9rZW5fZmQpXG4re1xuK1x0c3RydWN0IGJwZl9pbnNuIGluc25zW10gPSB7XG4rXHRcdEJQRl9MRF9NQVBfVkFMVUUoQlBGX1JFR18xLCAwLCAwKSxcbitcdFx0QlBGX0xEWF9NRU0oQlBGX0RXLCBCUEZfUkVHXzAsIEJQRl9SRUdfMSwgMCksXG4rXHRcdEJQRl9FWElUX0lOU04oKSxcbitcdH07XG4rXHRMSUJCUEZfT1BUUyhicGZfbWFwX2NyZWF0ZV9vcHRzLCBtYXBfb3B0cyxcbitcdFx0LnRva2VuX2ZkID0gdG9rZW5fZmQsXG4rXHRcdC5tYXBfZmxhZ3MgPSB0b2tlbl9mZCA/IEJQRl9GX1RPS0VOX0ZEIDogMCxcbitcdCk7XG4rXHRMSUJCUEZfT1BUUyhicGZfcHJvZ19sb2FkX29wdHMsIHByb2dfb3B0cyxcbitcdFx0LnRva2VuX2ZkID0gdG9rZW5fZmQsXG4rXHRcdC5wcm9nX2ZsYWdzID0gdG9rZW5fZmQgPyBCUEZfRl9UT0tFTl9GRCA6IDAsXG4rXHQpO1xuK1x0aW50IHJldCwgbWFwLCBpbnNuX2NudCA9IEFSUkFZX1NJWkUoaW5zbnMpO1xuK1xuK1x0bWFwID0gYnBmX21hcF9jcmVhdGUoQlBGX01BUF9UWVBFX1BFUkNQVV9BUlJBWSwgXCJsaWJicGZfcGVyY3B1XCIsIHNpemVvZihpbnQpLCA4LCAxLFxuK1x0XHRcdCAgICAgXHUwMDI2bWFwX29wdHMpO1xuK1x0aWYgKG1hcCBcdTAwM2MgMCkge1xuK1x0XHRwcl93YXJuKFwiRXJyb3IgaW4gJXMoKTogJXMuIENvdWxkbid0IGNyZWF0ZSBzaW1wbGUgcGVyY3B1X2FycmF5IG1hcC5cXG5cIixcbitcdFx0XHRfX2Z1bmNfXywgZXJyc3RyKG1hcCkpO1xuK1x0XHRyZXR1cm4gbWFwO1xuK1x0fVxuK1xuK1x0aW5zbnNbMF0uaW1tID0gbWFwO1xuK1xuK1x0cmV0ID0gYnBmX3Byb2dfbG9hZChCUEZfUFJPR19UWVBFX1NPQ0tFVF9GSUxURVIsIE5VTEwsIFwiR1BMXCIsIGluc25zLCBpbnNuX2NudCwgXHUwMDI2cHJvZ19vcHRzKTtcbitcdGNsb3NlKG1hcCk7XG4rXHRyZXR1cm4gcHJvYmVfZmQocmV0KTtcbit9XG4rXG4gdHlwZWRlZiBpbnQgKCpmZWF0dXJlX3Byb2JlX2ZuKShpbnQgLyogdG9rZW5fZmQgKi8pO1xuIFxuIHN0YXRpYyBzdHJ1Y3Qga2Vybl9mZWF0dXJlX2NhY2hlIGZlYXR1cmVfY2FjaGU7XG5AQCAtNzA3LDYgKzczOSw5IEBAIHN0YXRpYyBzdHJ1Y3Qga2Vybl9mZWF0dXJlX2Rlc2Mge1xuIFx0W0ZFQVRfQlBGX1NZU0NBTExfQ09NTU9OX0FUVFJTXSA9IHtcbiBcdFx0XCJCUEYgc3lzY2FsbCBjb21tb24gYXR0cmlidXRlcyBzdXBwb3J0XCIsIHByb2JlX2JwZl9zeXNjYWxsX2NvbW1vbl9hdHRycyxcbiBcdH0sXG4rXHRbRkVBVF9QRVJDUFVfREFUQV0gPSB7XG4rXHRcdFwia2VybmVsIHN1cHBvcnRzIHBlcmNwdSBkYXRhXCIsIHByb2JlX2tlcm5fcGVyY3B1X2RhdGEsXG4rXHR9LFxuIH07XG4gXG4gYm9vbCBmZWF0X3N1cHBvcnRlZChzdHJ1Y3Qga2Vybl9mZWF0dXJlX2NhY2hlICpjYWNoZSwgZW51bSBrZXJuX2ZlYXR1cmVfaWQgZmVhdF9pZClcbmRpZmYgLS1naXQgYS90b29scy9saWIvYnBmL2dlbl9sb2FkZXIuYyBiL3Rvb2xzL2xpYi9icGYvZ2VuX2xvYWRlci5jXG5pbmRleCA2ZTNkZDUyNDI3NjE4Li5hZjNhMDRmMTYxYWMxIDEwMDY0NFxuLS0tIGEvdG9vbHMvbGliL2JwZi9nZW5fbG9hZGVyLmNcbisrKyBiL3Rvb2xzL2xpYi9icGYvZ2VuX2xvYWRlci5jXG5AQCAtMTEyOCw3ICsxMTI4LDcgQEAgdm9pZCBicGZfZ2VuX19wcm9nX2xvYWQoc3RydWN0IGJwZl9nZW4gKmdlbixcbiB9XG4gXG4gdm9pZCBicGZfZ2VuX19tYXBfdXBkYXRlX2VsZW0oc3RydWN0IGJwZl9nZW4gKmdlbiwgaW50IG1hcF9pZHgsIHZvaWQgKnB2YWx1ZSxcbi1cdFx0XHQgICAgICBfX3UzMiB2YWx1ZV9zaXplKVxuK1x0XHRcdCAgICAgIF9fdTMyIHZhbHVlX3NpemUsIF9fdTY0IGZsYWdzKVxuIHtcbiBcdGludCBhdHRyX3NpemUgPSBvZmZzZXRvZmVuZCh1bmlvbiBicGZfYXR0ciwgZmxhZ3MpO1xuIFx0aW50IG1hcF91cGRhdGVfYXR0ciwgdmFsdWUsIGtleTtcbkBAIC0xMTM2LDYgKzExMzYsNyBAQCB2b2lkIGJwZl9nZW5fX21hcF91cGRhdGVfZWxlbShzdHJ1Y3QgYnBmX2dlbiAqZ2VuLCBpbnQgbWFwX2lkeCwgdm9pZCAqcHZhbHVlLFxuIFx0aW50IHplcm8gPSAwO1xuIFxuIFx0bWVtc2V0KFx1MDAyNmF0dHIsIDAsIGF0dHJfc2l6ZSk7XG4rXHRhdHRyLmZsYWdzID0gdGd0X2VuZGlhbihmbGFncyk7XG4gXG4gXHR2YWx1ZSA9IGFkZF9kYXRhKGdlbiwgcHZhbHVlLCB2YWx1ZV9zaXplKTtcbiBcdGtleSA9IGFkZF9kYXRhKGdlbiwgXHUwMDI2emVybywgc2l6ZW9mKHplcm8pKTtcbmRpZmYgLS1naXQgYS90b29scy9saWIvYnBmL2xpYmJwZi5jIGIvdG9vbHMvbGliL2JwZi9saWJicGYuY1xuaW5kZXggNTE0ZTRlOWRhYTgyNS4uOWY3OWE4ZTg1MGZkYiAxMDA2NDRcbi0tLSBhL3Rvb2xzL2xpYi9icGYvbGliYnBmLmNcbisrKyBiL3Rvb2xzL2xpYi9icGYvbGliYnBmLmNcbkBAIC01NDEsNiArNTQxLDcgQEAgc3RydWN0IGJwZl9zdHJ1Y3Rfb3BzIHtcbiB9O1xuIFxuICNkZWZpbmUgREFUQV9TRUMgXCIuZGF0YVwiXG4rI2RlZmluZSBQRVJDUFVfU0VDIFwiLnBlcmNwdVwiXG4gI2RlZmluZSBCU1NfU0VDIFwiLmJzc1wiXG4gI2RlZmluZSBST0RBVEFfU0VDIFwiLnJvZGF0YVwiXG4gI2RlZmluZSBLQ09ORklHX1NFQyBcIi5rY29uZmlnXCJcbkBAIC01NTUsNiArNTU2LDcgQEAgZW51bSBsaWJicGZfbWFwX3R5cGUge1xuIFx0TElCQlBGX01BUF9CU1MsXG4gXHRMSUJCUEZfTUFQX1JPREFUQSxcbiBcdExJQkJQRl9NQVBfS0NPTkZJRyxcbitcdExJQkJQRl9NQVBfUEVSQ1BVLFxuIH07XG4gXG4gc3RydWN0IGJwZl9tYXBfZGVmIHtcbkBAIC02NjYsNiArNjY4LDcgQEAgZW51bSBzZWNfdHlwZSB7XG4gXHRTRUNfREFUQSxcbiBcdFNFQ19ST0RBVEEsXG4gXHRTRUNfU1RfT1BTLFxuK1x0U0VDX1BFUkNQVSxcbiB9O1xuIFxuIHN0cnVjdCBlbGZfc2VjX2Rlc2Mge1xuQEAgLTE4MzksNiArMTg0Miw4IEBAIHN0YXRpYyBzaXplX3QgYnBmX21hcF9tbWFwX3N6KGNvbnN0IHN0cnVjdCBicGZfbWFwICptYXApXG4gXHRzd2l0Y2ggKG1hcC1cdTAwM2VkZWYudHlwZSkge1xuIFx0Y2FzZSBCUEZfTUFQX1RZUEVfQVJSQVk6XG4gXHRcdHJldHVybiBhcnJheV9tYXBfbW1hcF9zeihtYXAtXHUwMDNlZGVmLnZhbHVlX3NpemUsIG1hcC1cdTAwM2VkZWYubWF4X2VudHJpZXMpO1xuK1x0Y2FzZSBCUEZfTUFQX1RZUEVfUEVSQ1BVX0FSUkFZOlxuK1x0XHRyZXR1cm4gbWFwLVx1MDAzZWRlZi52YWx1ZV9zaXplO1xuIFx0Y2FzZSBCUEZfTUFQX1RZUEVfQVJFTkE6XG4gXHRcdHJldHVybiBwYWdlX3N6ICogbWFwLVx1MDAzZWRlZi5tYXhfZW50cmllcztcbiBcdGRlZmF1bHQ6XG5AQCAtMTg2Niw3ICsxODcxLDggQEAgc3RhdGljIGludCBicGZfbWFwX21tYXBfcmVzaXplKHN0cnVjdCBicGZfbWFwICptYXAsIHNpemVfdCBvbGRfc3osIHNpemVfdCBuZXdfc3pcbiBcdHJldHVybiAwO1xuIH1cbiBcbi1zdGF0aWMgY2hhciAqaW50ZXJuYWxfbWFwX25hbWUoc3RydWN0IGJwZl9vYmplY3QgKm9iaiwgY29uc3QgY2hhciAqcmVhbF9uYW1lKVxuK3N0YXRpYyBjaGFyICppbnRlcm5hbF9tYXBfbmFtZShzdHJ1Y3QgYnBmX29iamVjdCAqb2JqLCBjb25zdCBjaGFyICpyZWFsX25hbWUsXG4rXHRcdFx0ICAgICAgIGVudW0gbGliYnBmX21hcF90eXBlIHR5cGUpXG4ge1xuIFx0Y2hhciBtYXBfbmFtZVtCUEZfT0JKX05BTUVfTEVOXSwgKnA7XG4gXHRpbnQgcGZ4X2xlbiwgc2Z4X2xlbiA9IG1heCgoc2l6ZV90KTcsIHN0cmxlbihyZWFsX25hbWUpKTtcbkBAIC0xOTA3LDggKzE5MTMsMTEgQEAgc3RhdGljIGNoYXIgKmludGVybmFsX21hcF9uYW1lKHN0cnVjdCBicGZfb2JqZWN0ICpvYmosIGNvbnN0IGNoYXIgKnJlYWxfbmFtZSlcbiBcdGlmIChzZnhfbGVuIFx1MDAzZT0gQlBGX09CSl9OQU1FX0xFTilcbiBcdFx0c2Z4X2xlbiA9IEJQRl9PQkpfTkFNRV9MRU4gLSAxO1xuIFxuLVx0LyogaWYgdGhlcmUgYXJlIHR3byBvciBtb3JlIGRvdHMgaW4gbWFwIG5hbWUsIGl0J3MgYSBjdXN0b20gZG90IG1hcCAqL1xuLVx0aWYgKHN0cmNocihyZWFsX25hbWUgKyAxLCAnLicpICE9IE5VTEwpXG4rXHQvKlxuK1x0ICogRG9uJ3QgcHJlZml4IHRoZSBicGZfb2JqZWN0IG5hbWUgaWYgdGhpcyBpcyBhIGN1c3RvbSBkb3QgbWFwXG4rXHQgKiAoY29udGFpbmluZyB0d28gb3IgbW9yZSBkb3RzKSBvciBhIHBlcmNwdSBkYXRhIG1hcC5cbitcdCAqL1xuK1x0aWYgKHN0cmNocihyZWFsX25hbWUgKyAxLCAnLicpICE9IE5VTEwgfHwgdHlwZSA9PSBMSUJCUEZfTUFQX1BFUkNQVSlcbiBcdFx0cGZ4X2xlbiA9IDA7XG4gXHRlbHNlXG4gXHRcdHBmeF9sZW4gPSBtaW4oKHNpemVfdClCUEZfT0JKX05BTUVfTEVOIC0gc2Z4X2xlbiAtIDEsIHN0cmxlbihvYmotXHUwMDNlbmFtZSkpO1xuQEAgLTE5NDEsNiArMTk1MCwxMyBAQCBzdGF0aWMgYm9vbCBtYXBfaXNfbW1hcGFibGUoc3RydWN0IGJwZl9vYmplY3QgKm9iaiwgc3RydWN0IGJwZl9tYXAgKm1hcClcbiBcdGlmICghbWFwLVx1MDAzZWJ0Zl92YWx1ZV90eXBlX2lkKVxuIFx0XHRyZXR1cm4gZmFsc2U7XG4gXG4rXHQvKlxuK1x0ICogVGhlIGludGVybmFsIFBFUkNQVSBtYXBzIGFyZSBub3QgbW1hcGJsZSBiZWNhdXNlIHRoZSB1bmRlcmx5aW5nXG4rXHQgKiBwZXJjcHVfYXJyYXkgbWFwcyBkbyBub3QgaGF2ZSBtbWFwIHN1cHBvcnQuXG4rXHQgKi9cbitcdGlmIChtYXAtXHUwMDNlbGliYnBmX3R5cGUgPT0gTElCQlBGX01BUF9QRVJDUFUpXG4rXHRcdHJldHVybiBmYWxzZTtcbitcbiBcdHQgPSBidGZfX3R5cGVfYnlfaWQob2JqLVx1MDAzZWJ0ZiwgbWFwLVx1MDAzZWJ0Zl92YWx1ZV90eXBlX2lkKTtcbiBcdGlmICghYnRmX2lzX2RhdGFzZWModCkpXG4gXHRcdHJldHVybiBmYWxzZTtcbkBAIC0xOTYyLDYgKzE5NzgsNyBAQCBzdGF0aWMgaW50XG4gYnBmX29iamVjdF9faW5pdF9pbnRlcm5hbF9tYXAoc3RydWN0IGJwZl9vYmplY3QgKm9iaiwgZW51bSBsaWJicGZfbWFwX3R5cGUgdHlwZSxcbiBcdFx0XHQgICAgICBjb25zdCBjaGFyICpyZWFsX25hbWUsIGludCBzZWNfaWR4LCB2b2lkICpkYXRhLCBzaXplX3QgZGF0YV9zeilcbiB7XG4rXHRib29sIGlzX3BlcmNwdSA9IHR5cGUgPT0gTElCQlBGX01BUF9QRVJDUFU7XG4gXHRzdHJ1Y3QgYnBmX21hcF9kZWYgKmRlZjtcbiBcdHN0cnVjdCBicGZfbWFwICptYXA7XG4gXHRzaXplX3QgbW1hcF9zejtcbkBAIC0xOTc1LDcgKzE5OTIsNyBAQCBicGZfb2JqZWN0X19pbml0X2ludGVybmFsX21hcChzdHJ1Y3QgYnBmX29iamVjdCAqb2JqLCBlbnVtIGxpYmJwZl9tYXBfdHlwZSB0eXBlLFxuIFx0bWFwLVx1MDAzZXNlY19pZHggPSBzZWNfaWR4O1xuIFx0bWFwLVx1MDAzZXNlY19vZmZzZXQgPSAwO1xuIFx0bWFwLVx1MDAzZXJlYWxfbmFtZSA9IHN0cmR1cChyZWFsX25hbWUpO1xuLVx0bWFwLVx1MDAzZW5hbWUgPSBpbnRlcm5hbF9tYXBfbmFtZShvYmosIHJlYWxfbmFtZSk7XG4rXHRtYXAtXHUwMDNlbmFtZSA9IGludGVybmFsX21hcF9uYW1lKG9iaiwgcmVhbF9uYW1lLCB0eXBlKTtcbiBcdGlmICghbWFwLVx1MDAzZXJlYWxfbmFtZSB8fCAhbWFwLVx1MDAzZW5hbWUpIHtcbiBcdFx0emZyZWUoXHUwMDI2bWFwLVx1MDAzZXJlYWxfbmFtZSk7XG4gXHRcdHpmcmVlKFx1MDAyNm1hcC1cdTAwM2VuYW1lKTtcbkBAIC0xOTgzLDcgKzIwMDAsNyBAQCBicGZfb2JqZWN0X19pbml0X2ludGVybmFsX21hcChzdHJ1Y3QgYnBmX29iamVjdCAqb2JqLCBlbnVtIGxpYmJwZl9tYXBfdHlwZSB0eXBlLFxuIFx0fVxuIFxuIFx0ZGVmID0gXHUwMDI2bWFwLVx1MDAzZWRlZjtcbi1cdGRlZi1cdTAwM2V0eXBlID0gQlBGX01BUF9UWVBFX0FSUkFZO1xuK1x0ZGVmLVx1MDAzZXR5cGUgPSBpc19wZXJjcHUgPyBCUEZfTUFQX1RZUEVfUEVSQ1BVX0FSUkFZIDogQlBGX01BUF9UWVBFX0FSUkFZO1xuIFx0ZGVmLVx1MDAzZWtleV9zaXplID0gc2l6ZW9mKGludCk7XG4gXHRkZWYtXHUwMDNldmFsdWVfc2l6ZSA9IGRhdGFfc3o7XG4gXHRkZWYtXHUwMDNlbWF4X2VudHJpZXMgPSAxO1xuQEAgLTE5OTYsOCArMjAxMyw5IEBAIGJwZl9vYmplY3RfX2luaXRfaW50ZXJuYWxfbWFwKHN0cnVjdCBicGZfb2JqZWN0ICpvYmosIGVudW0gbGliYnBmX21hcF90eXBlIHR5cGUsXG4gXHRpZiAobWFwX2lzX21tYXBhYmxlKG9iaiwgbWFwKSlcbiBcdFx0ZGVmLVx1MDAzZW1hcF9mbGFncyB8PSBCUEZfRl9NTUFQQUJMRTtcbiBcbi1cdHByX2RlYnVnKFwibWFwICclcycgKGdsb2JhbCBkYXRhKTogYXQgc2VjX2lkeCAlZCwgb2Zmc2V0ICV6dSwgZmxhZ3MgJXguXFxuXCIsXG4tXHRcdCBtYXAtXHUwMDNlbmFtZSwgbWFwLVx1MDAzZXNlY19pZHgsIG1hcC1cdTAwM2VzZWNfb2Zmc2V0LCBkZWYtXHUwMDNlbWFwX2ZsYWdzKTtcbitcdHByX2RlYnVnKFwibWFwICclcycgKGdsb2JhbCAlc2RhdGEpOiBhdCBzZWNfaWR4ICVkLCBvZmZzZXQgJXp1LCBmbGFncyAleC5cXG5cIixcbitcdFx0IG1hcC1cdTAwM2VuYW1lLCBpc19wZXJjcHUgPyBcInBlcmNwdSBcIiA6IFwiXCIsIG1hcC1cdTAwM2VzZWNfaWR4LFxuK1x0XHQgbWFwLVx1MDAzZXNlY19vZmZzZXQsIGRlZi1cdTAwM2VtYXBfZmxhZ3MpO1xuIFxuIFx0bW1hcF9zeiA9IGJwZl9tYXBfbW1hcF9zeihtYXApO1xuIFx0bWFwLVx1MDAzZW1tYXBlZCA9IG1tYXAoTlVMTCwgbW1hcF9zeiwgUFJPVF9SRUFEIHwgUFJPVF9XUklURSxcbkBAIC0yMDU3LDYgKzIwNzUsMTMgQEAgc3RhdGljIGludCBicGZfb2JqZWN0X19pbml0X2dsb2JhbF9kYXRhX21hcHMoc3RydWN0IGJwZl9vYmplY3QgKm9iailcbiBcdFx0XHRcdFx0XHRcdCAgICBOVUxMLFxuIFx0XHRcdFx0XHRcdFx0ICAgIHNlY19kZXNjLVx1MDAzZWRhdGEtXHUwMDNlZF9zaXplKTtcbiBcdFx0XHRicmVhaztcbitcdFx0Y2FzZSBTRUNfUEVSQ1BVOlxuK1x0XHRcdHNlY19uYW1lID0gZWxmX3NlY19uYW1lKG9iaiwgZWxmX3NlY19ieV9pZHgob2JqLCBzZWNfaWR4KSk7XG4rXHRcdFx0ZXJyID0gYnBmX29iamVjdF9faW5pdF9pbnRlcm5hbF9tYXAob2JqLCBMSUJCUEZfTUFQX1BFUkNQVSxcbitcdFx0XHRcdFx0XHRcdCAgICBzZWNfbmFtZSwgc2VjX2lkeCxcbitcdFx0XHRcdFx0XHRcdCAgICBzZWNfZGVzYy1cdTAwM2VkYXRhLVx1MDAzZWRfYnVmLFxuK1x0XHRcdFx0XHRcdFx0ICAgIHNlY19kZXNjLVx1MDAzZWRhdGEtXHUwMDNlZF9zaXplKTtcbitcdFx0XHRicmVhaztcbiBcdFx0ZGVmYXVsdDpcbiBcdFx0XHQvKiBza2lwICovXG4gXHRcdFx0YnJlYWs7XG5AQCAtNDAxNiw2ICs0MDQxLDExIEBAIHN0YXRpYyBpbnQgYnBmX29iamVjdF9fZWxmX2NvbGxlY3Qoc3RydWN0IGJwZl9vYmplY3QgKm9iailcbiBcdFx0XHRcdHNlY19kZXNjLVx1MDAzZXNlY190eXBlID0gU0VDX1JPREFUQTtcbiBcdFx0XHRcdHNlY19kZXNjLVx1MDAzZXNoZHIgPSBzaDtcbiBcdFx0XHRcdHNlY19kZXNjLVx1MDAzZWRhdGEgPSBkYXRhO1xuK1x0XHRcdH0gZWxzZSBpZiAoc3RyY21wKG5hbWUsIFBFUkNQVV9TRUMpID09IDAgfHxcbitcdFx0XHRcdCAgIHN0cl9oYXNfcGZ4KG5hbWUsIFBFUkNQVV9TRUMgXCIuXCIpKSB7XG4rXHRcdFx0XHRzZWNfZGVzYy1cdTAwM2VzZWNfdHlwZSA9IFNFQ19QRVJDUFU7XG4rXHRcdFx0XHRzZWNfZGVzYy1cdTAwM2VzaGRyID0gc2g7XG4rXHRcdFx0XHRzZWNfZGVzYy1cdTAwM2VkYXRhID0gZGF0YTtcbiBcdFx0XHR9IGVsc2UgaWYgKHN0cmNtcChuYW1lLCBTVFJVQ1RfT1BTX1NFQykgPT0gMCB8fFxuIFx0XHRcdFx0ICAgc3RyY21wKG5hbWUsIFNUUlVDVF9PUFNfTElOS19TRUMpID09IDAgfHxcbiBcdFx0XHRcdCAgIHN0cmNtcChuYW1lLCBcIj9cIiBTVFJVQ1RfT1BTX1NFQykgPT0gMCB8fFxuQEAgLTQ1NDQsNiArNDU3NCw3IEBAIHN0YXRpYyBib29sIGJwZl9vYmplY3RfX3NobmR4X2lzX2RhdGEoY29uc3Qgc3RydWN0IGJwZl9vYmplY3QgKm9iaixcbiBcdGNhc2UgU0VDX0JTUzpcbiBcdGNhc2UgU0VDX0RBVEE6XG4gXHRjYXNlIFNFQ19ST0RBVEE6XG4rXHRjYXNlIFNFQ19QRVJDUFU6XG4gXHRcdHJldHVybiB0cnVlO1xuIFx0ZGVmYXVsdDpcbiBcdFx0cmV0dXJuIGZhbHNlO1xuQEAgLTQ1NjksNiArNDYwMCw4IEBAIGJwZl9vYmplY3RfX3NlY3Rpb25fdG9fbGliYnBmX21hcF90eXBlKGNvbnN0IHN0cnVjdCBicGZfb2JqZWN0ICpvYmosIGludCBzaG5keClcbiBcdFx0cmV0dXJuIExJQkJQRl9NQVBfREFUQTtcbiBcdGNhc2UgU0VDX1JPREFUQTpcbiBcdFx0cmV0dXJuIExJQkJQRl9NQVBfUk9EQVRBO1xuK1x0Y2FzZSBTRUNfUEVSQ1BVOlxuK1x0XHRyZXR1cm4gTElCQlBGX01BUF9QRVJDUFU7XG4gXHRkZWZhdWx0OlxuIFx0XHRyZXR1cm4gTElCQlBGX01BUF9VTlNQRUM7XG4gXHR9XG5AQCAtNDk0NCw3ICs0OTc3LDcgQEAgc3RhdGljIGludCBtYXBfZmlsbF9idGZfdHlwZV9pbmZvKHN0cnVjdCBicGZfb2JqZWN0ICpvYmosIHN0cnVjdCBicGZfbWFwICptYXApXG4gXG4gXHQvKlxuIFx0ICogTExWTSBhbm5vdGF0ZXMgZ2xvYmFsIGRhdGEgZGlmZmVyZW50bHkgaW4gQlRGLCB0aGF0IGlzLFxuLVx0ICogb25seSBhcyAnLmRhdGEnLCAnLmJzcycgb3IgJy5yb2RhdGEnLlxuK1x0ICogb25seSBhcyAnLmRhdGEnLCAnLmJzcycsICcucGVyY3B1JyBvciAnLnJvZGF0YScuXG4gXHQgKi9cbiBcdGlmICghYnBmX21hcF9faXNfaW50ZXJuYWwobWFwKSlcbiBcdFx0cmV0dXJuIC1FTk9FTlQ7XG5AQCAtNTI5MywxOCArNTMyNiwyNiBAQCBzdGF0aWMgaW50XG4gYnBmX29iamVjdF9fcG9wdWxhdGVfaW50ZXJuYWxfbWFwKHN0cnVjdCBicGZfb2JqZWN0ICpvYmosIHN0cnVjdCBicGZfbWFwICptYXApXG4ge1xuIFx0ZW51bSBsaWJicGZfbWFwX3R5cGUgbWFwX3R5cGUgPSBtYXAtXHUwMDNlbGliYnBmX3R5cGU7XG4rXHRib29sIGlzX3BlcmNwdSA9IG1hcF90eXBlID09IExJQkJQRl9NQVBfUEVSQ1BVO1xuK1x0Y29uc3QgX191NjQgdXBkYXRlX2ZsYWdzID0gaXNfcGVyY3B1ID8gQlBGX0ZfQUxMX0NQVVMgOiAwO1xuIFx0aW50IGVyciwgemVybyA9IDA7XG4gXHRzaXplX3QgbW1hcF9zejtcbiBcbitcdGlmIChpc19wZXJjcHUgXHUwMDI2XHUwMDI2ICFvYmotXHUwMDNlZ2VuX2xvYWRlciBcdTAwMjZcdTAwMjYgIWtlcm5lbF9zdXBwb3J0cyhvYmosIEZFQVRfUEVSQ1BVX0RBVEEpKSB7XG4rXHRcdHByX3dhcm4oXCJtYXAgJyVzJzoga2VybmVsIGRvZXMgbm90IHN1cHBvcnQgcGVyY3B1IGRhdGEuXFxuXCIsXG4rXHRcdFx0YnBmX21hcF9fbmFtZShtYXApKTtcbitcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuK1x0fVxuK1xuIFx0aWYgKG9iai1cdTAwM2VnZW5fbG9hZGVyKSB7XG4gXHRcdGJwZl9nZW5fX21hcF91cGRhdGVfZWxlbShvYmotXHUwMDNlZ2VuX2xvYWRlciwgbWFwIC0gb2JqLVx1MDAzZW1hcHMsXG4tXHRcdFx0XHRcdCBtYXAtXHUwMDNlbW1hcGVkLCBtYXAtXHUwMDNlZGVmLnZhbHVlX3NpemUpO1xuK1x0XHRcdFx0XHQgbWFwLVx1MDAzZW1tYXBlZCwgbWFwLVx1MDAzZWRlZi52YWx1ZV9zaXplLCB1cGRhdGVfZmxhZ3MpO1xuIFx0XHRpZiAobWFwX3R5cGUgPT0gTElCQlBGX01BUF9ST0RBVEEgfHwgbWFwX3R5cGUgPT0gTElCQlBGX01BUF9LQ09ORklHKVxuIFx0XHRcdGJwZl9nZW5fX21hcF9mcmVlemUob2JqLVx1MDAzZWdlbl9sb2FkZXIsIG1hcCAtIG9iai1cdTAwM2VtYXBzKTtcbiBcdFx0cmV0dXJuIDA7XG4gXHR9XG4gXG4tXHRlcnIgPSBicGZfbWFwX3VwZGF0ZV9lbGVtKG1hcC1cdTAwM2VmZCwgXHUwMDI2emVybywgbWFwLVx1MDAzZW1tYXBlZCwgMCk7XG4rXHRlcnIgPSBicGZfbWFwX3VwZGF0ZV9lbGVtKG1hcC1cdTAwM2VmZCwgXHUwMDI2emVybywgbWFwLVx1MDAzZW1tYXBlZCwgdXBkYXRlX2ZsYWdzKTtcbiBcdGlmIChlcnIpIHtcbiBcdFx0ZXJyID0gLWVycm5vO1xuIFx0XHRwcl93YXJuKFwibWFwICclcyc6IGZhaWxlZCB0byBzZXQgaW5pdGlhbCBjb250ZW50czogJXNcXG5cIixcbkBAIC01MzQ5LDYgKzUzOTAsMTMgQEAgYnBmX29iamVjdF9fcG9wdWxhdGVfaW50ZXJuYWxfbWFwKHN0cnVjdCBicGZfb2JqZWN0ICpvYmosIHN0cnVjdCBicGZfbWFwICptYXApXG4gXHRcdFx0cmV0dXJuIGVycjtcbiBcdFx0fVxuIFx0XHRtYXAtXHUwMDNlbW1hcGVkID0gbW1hcGVkO1xuK1x0fSBlbHNlIGlmIChpc19wZXJjcHUpIHtcbitcdFx0aWYgKG1wcm90ZWN0KG1hcC1cdTAwM2VtbWFwZWQsIG1tYXBfc3osIFBST1RfUkVBRCkpIHtcbitcdFx0XHRlcnIgPSAtZXJybm87XG4rXHRcdFx0cHJfd2FybihcIm1hcCAnJXMnOiBmYWlsZWQgdG8gbXByb3RlY3QoKSBjb250ZW50czogJXNcXG5cIixcbitcdFx0XHRcdGJwZl9tYXBfX25hbWUobWFwKSwgZXJyc3RyKGVycikpO1xuK1x0XHRcdHJldHVybiBlcnI7XG4rXHRcdH1cbiBcdH0gZWxzZSBpZiAobWFwLVx1MDAzZW1tYXBlZCkge1xuIFx0XHRtdW5tYXAobWFwLVx1MDAzZW1tYXBlZCwgbW1hcF9zeik7XG4gXHRcdG1hcC1cdTAwM2VtbWFwZWQgPSBOVUxMO1xuQEAgLTU2MjcsNiArNTY3NSw5IEBAIGJwZl9vYmplY3RfX2NyZWF0ZV9tYXBzKHN0cnVjdCBicGZfb2JqZWN0ICpvYmopXG4gXHRcdCAqL1xuIFx0XHRpZiAoYnBmX21hcF9faXNfaW50ZXJuYWwobWFwKSBcdTAwMjZcdTAwMjYgIWtlcm5lbF9zdXBwb3J0cyhvYmosIEZFQVRfR0xPQkFMX0RBVEEpKVxuIFx0XHRcdG1hcC1cdTAwM2VhdXRvY3JlYXRlID0gZmFsc2U7XG4rXHRcdGlmIChicGZfbWFwX19pc19pbnRlcm5hbChtYXApIFx1MDAyNlx1MDAyNiBicGZfbWFwX190eXBlKG1hcCkgPT0gQlBGX01BUF9UWVBFX1BFUkNQVV9BUlJBWSBcdTAwMjZcdTAwMjZcbitcdFx0ICAgICFrZXJuZWxfc3VwcG9ydHMob2JqLCBGRUFUX1BFUkNQVV9EQVRBKSlcbitcdFx0XHRtYXAtXHUwMDNlYXV0b2NyZWF0ZSA9IGZhbHNlO1xuIFxuIFx0XHRpZiAoIW1hcC1cdTAwM2VhdXRvY3JlYXRlKSB7XG4gXHRcdFx0cHJfZGVidWcoXCJtYXAgJyVzJzogc2tpcHBlZCBhdXRvLWNyZWF0aW5nLi4uXFxuXCIsIG1hcC1cdTAwM2VuYW1lKTtcbkBAIC0xMDgwNywxMSArMTA4NTgsMTYgQEAgc3RhdGljIGJvb2wgbWFwX3VzZXNfcmVhbF9uYW1lKGNvbnN0IHN0cnVjdCBicGZfbWFwICptYXApXG4gXHQgKiBzdWNoIG1hcCdzIGNvcnJlc3BvbmRpbmcgRUxGIHNlY3Rpb24gbmFtZSBhcyBhIG1hcCBuYW1lLlxuIFx0ICogVGhpcyBjaGVjayBkaXN0aW5ndWlzaGVzIC5kYXRhLy5yb2RhdGEgZnJvbSAuZGF0YS4qIGFuZCAucm9kYXRhLipcbiBcdCAqIG1hcHMgdG8ga25vdyB3aGljaCBuYW1lIGhhcyB0byBiZSByZXR1cm5lZCB0byB0aGUgdXNlci5cbitcdCAqIE1hcCBuYW1lIG9mIHRoZSBjdXN0b20gLnBlcmNwdS4qIG1hcHMgbWlnaHQgYmUgdHJ1bmNhdGVkIHRvXG4rXHQgKiBCUEZfT0JKX05BTUVfTEVOLTEgY2hhcnMgaW4gaW50ZXJuYWxfbWFwX25hbWUoKS4gSGVuY2UsIHBlcmNwdSBkYXRhXG4rXHQgKiBtYXBzIG11c3QgdXNlIHJlYWwgbmFtZSBmb3IgdGhlaXIgdXNlci12aXNpYmxlIG5hbWUuXG4gXHQgKi9cbiBcdGlmIChtYXAtXHUwMDNlbGliYnBmX3R5cGUgPT0gTElCQlBGX01BUF9EQVRBIFx1MDAyNlx1MDAyNiBzdHJjbXAobWFwLVx1MDAzZXJlYWxfbmFtZSwgREFUQV9TRUMpICE9IDApXG4gXHRcdHJldHVybiB0cnVlO1xuIFx0aWYgKG1hcC1cdTAwM2VsaWJicGZfdHlwZSA9PSBMSUJCUEZfTUFQX1JPREFUQSBcdTAwMjZcdTAwMjYgc3RyY21wKG1hcC1cdTAwM2VyZWFsX25hbWUsIFJPREFUQV9TRUMpICE9IDApXG4gXHRcdHJldHVybiB0cnVlO1xuK1x0aWYgKG1hcC1cdTAwM2VsaWJicGZfdHlwZSA9PSBMSUJCUEZfTUFQX1BFUkNQVSlcbitcdFx0cmV0dXJuIHRydWU7XG4gXHRyZXR1cm4gZmFsc2U7XG4gfVxuIFxuZGlmZiAtLWdpdCBhL3Rvb2xzL2xpYi9icGYvbGliYnBmX2ludGVybmFsLmggYi90b29scy9saWIvYnBmL2xpYmJwZl9pbnRlcm5hbC5oXG5pbmRleCA3YTc0YWJiOTA0ZjhiLi40YzQ2ZDM0ZmMwNTVkIDEwMDY0NFxuLS0tIGEvdG9vbHMvbGliL2JwZi9saWJicGZfaW50ZXJuYWwuaFxuKysrIGIvdG9vbHMvbGliL2JwZi9saWJicGZfaW50ZXJuYWwuaFxuQEAgLTQwMSw2ICs0MDEsOCBAQCBlbnVtIGtlcm5fZmVhdHVyZV9pZCB7XG4gXHRGRUFUX0JURl9MQVlPVVQsXG4gXHQvKiBLZXJuZWwgc3VwcG9ydHMgQlBGIHN5c2NhbGwgY29tbW9uIGF0dHJpYnV0ZXMgKi9cbiBcdEZFQVRfQlBGX1NZU0NBTExfQ09NTU9OX0FUVFJTLFxuK1x0LyogS2VybmVsIHN1cHBvcnRzIHBlcmNwdSBkYXRhICovXG4rXHRGRUFUX1BFUkNQVV9EQVRBLFxuIFx0X19GRUFUX0NOVCxcbiB9O1xuIFxuZGlmZiAtLWdpdCBhL3Rvb2xzL2xpYi9icGYvc2tlbF9pbnRlcm5hbC5oIGIvdG9vbHMvbGliL2JwZi9za2VsX2ludGVybmFsLmhcbmluZGV4IDUzZmVlNTNkMzZkNTEuLjFmM2YzMzJkZmZiZTkgMTAwNjQ0XG4tLS0gYS90b29scy9saWIvYnBmL3NrZWxfaW50ZXJuYWwuaFxuKysrIGIvdG9vbHMvbGliL2JwZi9za2VsX2ludGVybmFsLmhcbkBAIC0xMzEsOCArMTMxLDEwIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBza2VsX2ZyZWVfbWFwX2RhdGEodm9pZCAqcCwgX191NjQgYWRkciwgc2l6ZV90IHN6KVxuIHtcbiBcdGlmIChhZGRyICE9IH4wVUxMKVxuIFx0XHRrdmZyZWUocCk7XG4tXHQvKiBXaGVuIGFkZHIgPT0gfjBVTEwgdGhlICdwJyBwb2ludHMgdG9cbi1cdCAqICgoc3RydWN0IGJwZl9hcnJheSAqKW1hcCktXHUwMDNldmFsdWUuIFNlZSBza2VsX2ZpbmFsaXplX21hcF9kYXRhLlxuK1x0LypcbitcdCAqIFdoZW4gYWRkciA9PSB+MFVMTCB0aGUgaW5pdCBidWZmZXIgaGFzIGFscmVhZHkgYmVlbiByZWxlYXNlZC5cbitcdCAqIEZvciBza2VsX2ZpbmFsaXplX21hcF9kYXRhKCksICdwJyBwb2ludHMgdG9cbitcdCAqICgoc3RydWN0IGJwZl9hcnJheSAqKW1hcCktXHUwMDNldmFsdWUuXG4gXHQgKi9cbiB9XG4gXG5AQCAtMTcwLDYgKzE3MiwxNSBAQCBzdGF0aWMgaW5saW5lIHZvaWQgKnNrZWxfZmluYWxpemVfbWFwX2RhdGEoX191NjQgKmluaXRfdmFsLCBzaXplX3QgbW1hcF9zeiwgaW50XG4gXHRyZXR1cm4gYWRkcjtcbiB9XG4gXG4rc3RhdGljIGlubGluZSBpbnQgc2tlbF9wcm90ZWN0X21hcF9kYXRhKHZvaWQgKnAsIF9fdTY0ICppbml0X3ZhbCwgc2l6ZV90IHN6KVxuK3tcbitcdCh2b2lkKXN6O1xuK1xuK1x0a3ZmcmVlKHApO1xuK1x0KmluaXRfdmFsID0gfjBVTEw7XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4gI2Vsc2VcbiBcbiBzdGF0aWMgaW5saW5lIHZvaWQgKnNrZWxfYWxsb2Moc2l6ZV90IHNpemUpXG5AQCAtMjA4LDYgKzIxOSwxNSBAQCBzdGF0aWMgaW5saW5lIHZvaWQgKnNrZWxfZmluYWxpemVfbWFwX2RhdGEoX191NjQgKmluaXRfdmFsLCBzaXplX3QgbW1hcF9zeiwgaW50XG4gXHRcdHJldHVybiBOVUxMO1xuIFx0cmV0dXJuIGFkZHI7XG4gfVxuK1xuK3N0YXRpYyBpbmxpbmUgaW50IHNrZWxfcHJvdGVjdF9tYXBfZGF0YSh2b2lkICpwLCBfX3U2NCAqaW5pdF92YWwsIHNpemVfdCBzeilcbit7XG4rXHQodm9pZClpbml0X3ZhbDtcbitcbitcdGlmIChtcHJvdGVjdChwLCBzeiwgUFJPVF9SRUFEKSlcbitcdFx0cmV0dXJuIC1lcnJubztcbitcdHJldHVybiAwO1xuK31cbiAjZW5kaWZcbiBcbiBzdGF0aWMgaW5saW5lIGludCBza2VsX2Nsb3NlbnooaW50IGZkKVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9NYWtlZmlsZSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9NYWtlZmlsZVxuaW5kZXggZDM2NTVhNzA2NDgyNi4uNTYwY2U0MDE2ZmJmZiAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9NYWtlZmlsZVxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL01ha2VmaWxlXG5AQCAtNTMxLDcgKzUzMSw3IEBAIExTS0VMU19TSUdORUQgOj0gZmVudHJ5X3Rlc3QuYyBmZXhpdF90ZXN0LmMgYXRvbWljcy5jXG4gXG4gIyBHZW5lcmF0ZSBib3RoIGxpZ2h0IHNrZWxldG9uIGFuZCBsaWJicGYgc2tlbGV0b24gZm9yIHRoZXNlXG4gTFNLRUxTX0VYVFJBIDo9IHRlc3Rfa3N5bXNfbW9kdWxlLmMgdGVzdF9rc3ltc193ZWFrLmMga2Z1bmNfY2FsbF90ZXN0LmMgXFxcbi1cdGtmdW5jX2NhbGxfdGVzdF9zdWJwcm9nLmNcbitcdGtmdW5jX2NhbGxfdGVzdF9zdWJwcm9nLmMgdGVzdF9nbG9iYWxfcGVyY3B1X2RhdGEuY1xuIFNLRUxfQkxBQ0tMSVNUICs9ICQkKExTS0VMUykgJCQoTFNLRUxTX1NJR05FRClcbiBcbiB0ZXN0X3N0YXRpY19saW5rZWQuc2tlbC5oLWRlcHMgOj0gdGVzdF9zdGF0aWNfbGlua2VkMS5icGYubyB0ZXN0X3N0YXRpY19saW5rZWQyLmJwZi5vXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvZ2xvYmFsX2RhdGFfaW5pdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvZ2xvYmFsX2RhdGFfaW5pdC5jXG5pbmRleCA4NDY2MzMyZDc0MDZmLi4yNjI1NjUxYjM0YzdlIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvZ2xvYmFsX2RhdGFfaW5pdC5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9nbG9iYWxfZGF0YV9pbml0LmNcbkBAIC0xLDUgKzEsOCBAQFxuIC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4gI2luY2x1ZGUgXHUwMDNjdGVzdF9wcm9ncy5oXHUwMDNlXG4rI2luY2x1ZGUgXCJicGYvbGliYnBmX2ludGVybmFsLmhcIlxuKyNpbmNsdWRlIFwidGVzdF9nbG9iYWxfcGVyY3B1X2RhdGEuc2tlbC5oXCJcbisjaW5jbHVkZSBcInRlc3RfZ2xvYmFsX3BlcmNwdV9kYXRhLmxza2VsLmhcIlxuIFxuIHZvaWQgdGVzdF9nbG9iYWxfZGF0YV9pbml0KHZvaWQpXG4ge1xuQEAgLTYwLDMgKzYzLDMxMCBAQCB2b2lkIHRlc3RfZ2xvYmFsX2RhdGFfaW5pdCh2b2lkKVxuIFx0ZnJlZShuZXd2YWwpO1xuIFx0YnBmX29iamVjdF9fY2xvc2Uob2JqKTtcbiB9XG4rXG4rc3RhdGljIHZvaWQgdGVzdF9wZXJjcHVfZGF0YV9vbl9jcHVzKHN0cnVjdCBicGZfbWFwICptYXAsIGludCBtYXBfZmQsIGludCBwcm9nX2ZkLCBpbnQgKnJ1bnApXG4re1xuK1x0X191NjQgYXJnc1syXSA9IHsweDEyMzRVTEwsIDB4NTY3OFVMTH07XG4rXHRMSUJCUEZfT1BUUyhicGZfdGVzdF9ydW5fb3B0cywgdG9wdHMsXG4rXHRcdCAgICAuY3R4X2luID0gYXJncyxcbitcdFx0ICAgIC5jdHhfc2l6ZV9pbiA9IHNpemVvZihhcmdzKSxcbitcdFx0ICAgIC5mbGFncyA9IEJQRl9GX1RFU1RfUlVOX09OX0NQVSxcbitcdCk7XG4rXHRpbnQgaSwgZXJyLCBrZXkgPSAwLCBudW1fb25saW5lLCBydW4gPSAwO1xuK1x0Ym9vbCAqb25saW5lO1xuK1xuK1x0ZXJyID0gcGFyc2VfY3B1X21hc2tfZmlsZShcIi9zeXMvZGV2aWNlcy9zeXN0ZW0vY3B1L29ubGluZVwiLCBcdTAwMjZvbmxpbmUsIFx1MDAyNm51bV9vbmxpbmUpO1xuK1x0aWYgKCFBU1NFUlRfT0soZXJyLCBcInBhcnNlX2NwdV9tYXNrX2ZpbGVcIikpXG4rXHRcdHJldHVybjtcbitcbitcdC8qIHJ1biBvbiBldmVyeSBvbmxpbmUtQ1BVICovXG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBudW1fb25saW5lOyBpKyspIHtcbitcdFx0c3RydWN0IHRlc3RfZ2xvYmFsX3BlcmNwdV9kYXRhX19wZXJjcHUgZGF0YSA9IHt9O1xuK1x0XHRfX3U2NCBmbGFncztcbitcbitcdFx0aWYgKCFvbmxpbmVbaV0pXG4rXHRcdFx0Y29udGludWU7XG4rXG4rXHRcdHRvcHRzLmNwdSA9IGk7XG4rXHRcdHRvcHRzLnJldHZhbCA9IC0xO1xuK1x0XHRlcnIgPSBicGZfcHJvZ190ZXN0X3J1bl9vcHRzKHByb2dfZmQsIFx1MDAyNnRvcHRzKTtcbitcdFx0QVNTRVJUX09LKGVyciwgXCJicGZfcHJvZ190ZXN0X3J1bl9vcHRzXCIpO1xuK1x0XHRBU1NFUlRfRVEodG9wdHMucmV0dmFsLCAwLCBcImJwZl9wcm9nX3Rlc3RfcnVuX29wdHMgcmV0dmFsXCIpO1xuK1xuK1x0XHRmbGFncyA9ICgoX191NjQpIGkgXHUwMDNjXHUwMDNjIDMyKSB8IEJQRl9GX0NQVTtcbitcdFx0aWYgKG1hcClcbitcdFx0XHRlcnIgPSBicGZfbWFwX19sb29rdXBfZWxlbShtYXAsIFx1MDAyNmtleSwgc2l6ZW9mKGtleSksIFx1MDAyNmRhdGEsIHNpemVvZihkYXRhKSxcbitcdFx0XHRcdFx0XHQgICBmbGFncyk7XG4rXHRcdGVsc2VcbitcdFx0XHRlcnIgPSBicGZfbWFwX2xvb2t1cF9lbGVtX2ZsYWdzKG1hcF9mZCwgXHUwMDI2a2V5LCBcdTAwMjZkYXRhLCBmbGFncyk7XG4rXHRcdGlmICghQVNTRVJUX09LKGVyciwgXCJsb29rdXBfZWxlbSBvbiBjcHVcIikpXG4rXHRcdFx0YnJlYWs7XG4rXG4rXHRcdEFTU0VSVF9FUSgqcnVucCwgKytydW4sIFwicnVuXCIpO1xuK1x0XHRBU1NFUlRfRVEoZGF0YS5jcHVfaWQsIGksIFwiZGF0YS5jcHVfaWRcIik7XG4rXHRcdEFTU0VSVF9FUShkYXRhLmRhdGEsIDEsIFwiZGF0YS5kYXRhXCIpO1xuK1x0XHRBU1NFUlRfVFJVRShkYXRhLnNldCwgXCJkYXRhLnNldFwiKTtcbitcdFx0QVNTRVJUX0VRKGRhdGEubnVtc1s2XSwgMHhjMGRlLCBcImRhdGEubnVtc1s2XVwiKTtcbitcdFx0QVNTRVJUX0VRKGRhdGEuc3RydWN0X2RhdGEuaSwgMSwgXCJzdHJ1Y3RfZGF0YS5pXCIpO1xuK1x0XHRBU1NFUlRfVFJVRShkYXRhLnN0cnVjdF9kYXRhLnNldCwgXCJzdHJ1Y3RfZGF0YS5zZXRcIik7XG4rXHRcdEFTU0VSVF9FUShkYXRhLnN0cnVjdF9kYXRhLm51bXNbNl0sIDB4YzBkZSwgXCJzdHJ1Y3RfZGF0YS5udW1zWzZdXCIpO1xuK1x0fVxuK1xuK1x0ZnJlZShvbmxpbmUpO1xuK31cbitcbitzdGF0aWMgdm9pZCB0ZXN0X2dsb2JhbF9wZXJjcHVfZGF0YV9pbml0KHZvaWQpXG4re1xuK1x0c3RydWN0IHRlc3RfZ2xvYmFsX3BlcmNwdV9kYXRhX19wZXJjcHUgaW5pdF92YWx1ZSA9IHt9O1xuK1x0c3RydWN0IHRlc3RfZ2xvYmFsX3BlcmNwdV9kYXRhX19wZXJjcHUgKmluaXRfZGF0YTtcbitcdHN0cnVjdCB0ZXN0X2dsb2JhbF9wZXJjcHVfZGF0YSAqc2tlbCA9IE5VTEw7XG4rXHRzaXplX3QgaW5pdF9kYXRhX3N6O1xuK1x0c3RydWN0IGJwZl9tYXAgKm1hcDtcbitcdGludCBwcm9nX2ZkLCBlcnI7XG4rXG4rXHRza2VsID0gdGVzdF9nbG9iYWxfcGVyY3B1X2RhdGFfX29wZW4oKTtcbitcdGlmICghQVNTRVJUX09LX1BUUihza2VsLCBcInRlc3RfZ2xvYmFsX3BlcmNwdV9kYXRhX19vcGVuXCIpKVxuK1x0XHRnb3RvIG91dDtcbitcdGlmICghQVNTRVJUX09LX1BUUihza2VsLVx1MDAzZXBlcmNwdSwgXCJza2VsLVx1MDAzZXBlcmNwdVwiKSlcbitcdFx0Z290byBvdXQ7XG4rXHRpZiAoIUFTU0VSVF9PS19QVFIoc2tlbC1cdTAwM2VkYXRhX3BlcmNwdSwgXCJza2VsLVx1MDAzZWRhdGFfcGVyY3B1XCIpKVxuK1x0XHRnb3RvIG91dDtcbitcdGlmICghQVNTRVJUX09LX1BUUihza2VsLVx1MDAzZXBlcmNwdV9kYXRhLCBcInNrZWwtXHUwMDNlcGVyY3B1X2RhdGFcIikpXG4rXHRcdGdvdG8gb3V0O1xuK1x0aWYgKCFBU1NFUlRfT0tfUFRSKHNrZWwtXHUwMDNlcGVyY3B1X2xvb29vb29vb29uZywgXCJza2VsLVx1MDAzZXBlcmNwdV9sb29vb29vb29vbmdcIikpXG4rXHRcdGdvdG8gb3V0O1xuK1xuK1x0QVNTRVJUX1NUUkVRKGJwZl9tYXBfX25hbWUoc2tlbC1cdTAwM2VtYXBzLnBlcmNwdV9kYXRhKSwgXCIucGVyY3B1LmRhdGFcIixcbitcdFx0ICAgICBcIi5wZXJjcHUuZGF0YSBtYXAgbmFtZVwiKTtcbitcdEFTU0VSVF9TVFJFUShicGZfbWFwX19uYW1lKHNrZWwtXHUwMDNlbWFwcy5kYXRhX3BlcmNwdSksIFwiLmRhdGEucGVyY3B1XCIsXG4rXHRcdCAgICAgXCIuZGF0YS5wZXJjcHUgbWFwIG5hbWVcIik7XG4rXHRBU1NFUlRfU1RSRVEoYnBmX21hcF9fbmFtZShza2VsLVx1MDAzZW1hcHMucGVyY3B1X2xvb29vb29vb29uZyksIFwiLnBlcmNwdS5sb29vb29vb29vbmdcIixcbitcdFx0ICAgICBcImxvbmcgbWFwIG5hbWVcIik7XG4rXHRBU1NFUlRfU1RSRVEoYnBmX21hcF9fbmFtZShza2VsLVx1MDAzZW1hcHMucGVyY3B1KSwgXCIucGVyY3B1XCIsIFwibWFwIG5hbWVcIik7XG4rXHRBU1NFUlRfRVEoc2tlbC1cdTAwM2VwZXJjcHUtXHUwMDNlZGF0YSwgLTEsIFwic2tlbC1cdTAwM2VwZXJjcHUtXHUwMDNlZGF0YVwiKTtcbitcdEFTU0VSVF9GQUxTRShza2VsLVx1MDAzZXBlcmNwdS1cdTAwM2VzZXQsIFwic2tlbC1cdTAwM2VwZXJjcHUtXHUwMDNlc2V0XCIpO1xuK1x0QVNTRVJUX0VRKHNrZWwtXHUwMDNlcGVyY3B1LVx1MDAzZW51bXNbNl0sIDAsIFwic2tlbC1cdTAwM2VwZXJjcHUtXHUwMDNlbnVtc1s2XVwiKTtcbitcdEFTU0VSVF9FUShza2VsLVx1MDAzZXBlcmNwdS1cdTAwM2VzdHJ1Y3RfZGF0YS5pLCAtMSwgXCJzdHJ1Y3RfZGF0YS5pXCIpO1xuK1x0QVNTRVJUX0ZBTFNFKHNrZWwtXHUwMDNlcGVyY3B1LVx1MDAzZXN0cnVjdF9kYXRhLnNldCwgXCJzdHJ1Y3RfZGF0YS5zZXRcIik7XG4rXHRBU1NFUlRfRVEoc2tlbC1cdTAwM2VwZXJjcHUtXHUwMDNlc3RydWN0X2RhdGEubnVtc1s2XSwgMCwgXCJzdHJ1Y3RfZGF0YS5udW1zWzZdXCIpO1xuK1xuK1x0bWFwID0gc2tlbC1cdTAwM2VtYXBzLnBlcmNwdTtcbitcdGlmICghQVNTRVJUX0VRKGJwZl9tYXBfX3R5cGUobWFwKSwgQlBGX01BUF9UWVBFX1BFUkNQVV9BUlJBWSwgXCJicGZfbWFwX190eXBlXCIpKVxuK1x0XHRnb3RvIG91dDtcbitcbitcdGluaXRfdmFsdWUuZGF0YSA9IDI7XG4rXHRpbml0X3ZhbHVlLm51bXNbNl0gPSAtMTtcbitcdGluaXRfdmFsdWUuc3RydWN0X2RhdGEuaSA9IDI7XG4rXHRpbml0X3ZhbHVlLnN0cnVjdF9kYXRhLm51bXNbNl0gPSAtMTtcbitcdGVyciA9IGJwZl9tYXBfX3NldF9pbml0aWFsX3ZhbHVlKG1hcCwgXHUwMDI2aW5pdF92YWx1ZSwgc2l6ZW9mKGluaXRfdmFsdWUpKTtcbitcdGlmICghQVNTRVJUX09LKGVyciwgXCJicGZfbWFwX19zZXRfaW5pdGlhbF92YWx1ZVwiKSlcbitcdFx0Z290byBvdXQ7XG4rXG4rXHRpbml0X2RhdGEgPSBicGZfbWFwX19pbml0aWFsX3ZhbHVlKG1hcCwgXHUwMDI2aW5pdF9kYXRhX3N6KTtcbitcdGlmICghQVNTRVJUX09LX1BUUihpbml0X2RhdGEsIFwiYnBmX21hcF9faW5pdGlhbF92YWx1ZVwiKSlcbitcdFx0Z290byBvdXQ7XG4rXG4rXHRBU1NFUlRfRVEoaW5pdF9kYXRhLVx1MDAzZWRhdGEsIGluaXRfdmFsdWUuZGF0YSwgXCJpbml0X3ZhbHVlIGRhdGFcIik7XG4rXHRBU1NFUlRfRVEoaW5pdF9kYXRhLVx1MDAzZXNldCwgaW5pdF92YWx1ZS5zZXQsIFwiaW5pdF92YWx1ZSBzZXRcIik7XG4rXHRBU1NFUlRfRVEoaW5pdF9kYXRhLVx1MDAzZXN0cnVjdF9kYXRhLmksIGluaXRfdmFsdWUuc3RydWN0X2RhdGEuaSwgXCJpbml0X3ZhbHVlIHN0cnVjdF9kYXRhLmlcIik7XG4rXHRBU1NFUlRfRVEoaW5pdF9kYXRhLVx1MDAzZXN0cnVjdF9kYXRhLm51bXNbNl0sIGluaXRfdmFsdWUuc3RydWN0X2RhdGEubnVtc1s2XSxcbitcdFx0ICBcImluaXRfdmFsdWUgc3RydWN0X2RhdGEubnVtc1s2XVwiKTtcbitcdEFTU0VSVF9FUShpbml0X2RhdGFfc3osIHNpemVvZihpbml0X3ZhbHVlKSwgXCJpbml0X3ZhbHVlIHNpemVcIik7XG4rXHRBU1NFUlRfRVEoKHZvaWQgKikgaW5pdF9kYXRhLCAodm9pZCAqKSBza2VsLVx1MDAzZXBlcmNwdSwgXCJza2VsLVx1MDAzZXBlcmNwdSBlcSBpbml0X2RhdGFcIik7XG4rXHRBU1NFUlRfRVEoc2tlbC1cdTAwM2VwZXJjcHUtXHUwMDNlZGF0YSwgaW5pdF92YWx1ZS5kYXRhLCBcInNrZWwtXHUwMDNlcGVyY3B1LVx1MDAzZWRhdGFcIik7XG4rXHRBU1NFUlRfRVEoc2tlbC1cdTAwM2VwZXJjcHUtXHUwMDNlc2V0LCBpbml0X3ZhbHVlLnNldCwgXCJza2VsLVx1MDAzZXBlcmNwdS1cdTAwM2VzZXRcIik7XG4rXHRBU1NFUlRfRVEoc2tlbC1cdTAwM2VwZXJjcHUtXHUwMDNlc3RydWN0X2RhdGEuaSwgaW5pdF92YWx1ZS5zdHJ1Y3RfZGF0YS5pLFxuK1x0XHQgIFwic2tlbC1cdTAwM2VwZXJjcHUtXHUwMDNlc3RydWN0X2RhdGEuaVwiKTtcbitcdEFTU0VSVF9FUShza2VsLVx1MDAzZXBlcmNwdS1cdTAwM2VzdHJ1Y3RfZGF0YS5udW1zWzZdLCBpbml0X3ZhbHVlLnN0cnVjdF9kYXRhLm51bXNbNl0sXG4rXHRcdCAgXCJza2VsLVx1MDAzZXBlcmNwdS1cdTAwM2VzdHJ1Y3RfZGF0YS5udW1zWzZdXCIpO1xuK1xuK1x0ZXJyID0gdGVzdF9nbG9iYWxfcGVyY3B1X2RhdGFfX2xvYWQoc2tlbCk7XG4rXHRpZiAoIUFTU0VSVF9PSyhlcnIsIFwidGVzdF9nbG9iYWxfcGVyY3B1X2RhdGFfX2xvYWRcIikpXG4rXHRcdGdvdG8gb3V0O1xuK1xuK1x0QVNTRVJUX09LX1BUUihza2VsLVx1MDAzZXBlcmNwdSwgXCJza2VsLVx1MDAzZXBlcmNwdVwiKTtcbitcbitcdHByb2dfZmQgPSBicGZfcHJvZ3JhbV9fZmQoc2tlbC1cdTAwM2Vwcm9ncy51cGRhdGVfcGVyY3B1X2RhdGEpO1xuK1x0dGVzdF9wZXJjcHVfZGF0YV9vbl9jcHVzKG1hcCwgYnBmX21hcF9fZmQobWFwKSwgcHJvZ19mZCwgXHUwMDI2c2tlbC1cdTAwM2Vic3MtXHUwMDNlcnVuKTtcbitcbitvdXQ6XG4rXHR0ZXN0X2dsb2JhbF9wZXJjcHVfZGF0YV9fZGVzdHJveShza2VsKTtcbit9XG4rXG4rc3RhdGljIHZvaWQgdGVzdF9nbG9iYWxfcGVyY3B1X2RhdGFfbHNrZWwodm9pZClcbit7XG4rXHRzdHJ1Y3QgdGVzdF9nbG9iYWxfcGVyY3B1X2RhdGFfbHNrZWwgKmxza2VsID0gTlVMTDtcbitcdGludCBwcm9nX2ZkLCBtYXBfZmQ7XG4rXG4rXHRsc2tlbCA9IHRlc3RfZ2xvYmFsX3BlcmNwdV9kYXRhX2xza2VsX19vcGVuX2FuZF9sb2FkKCk7XG4rXHRpZiAoIUFTU0VSVF9PS19QVFIobHNrZWwsIFwidGVzdF9nbG9iYWxfcGVyY3B1X2RhdGFfbHNrZWxfX29wZW5fYW5kX2xvYWRcIikpXG4rXHRcdGdvdG8gb3V0O1xuK1xuK1x0bWFwX2ZkID0gbHNrZWwtXHUwMDNlbWFwcy5wZXJjcHUubWFwX2ZkO1xuK1x0cHJvZ19mZCA9IGxza2VsLVx1MDAzZXByb2dzLnVwZGF0ZV9wZXJjcHVfZGF0YS5wcm9nX2ZkO1xuK1x0dGVzdF9wZXJjcHVfZGF0YV9vbl9jcHVzKE5VTEwsIG1hcF9mZCwgcHJvZ19mZCwgXHUwMDI2bHNrZWwtXHUwMDNlYnNzLVx1MDAzZXJ1bik7XG4rXG4rb3V0OlxuK1x0dGVzdF9nbG9iYWxfcGVyY3B1X2RhdGFfbHNrZWxfX2Rlc3Ryb3kobHNrZWwpO1xuK31cbitcbitzdGF0aWMgaW50IGNyZWF0ZV9yZG9ubHlfcGVyY3B1X2FycmF5KHZvaWQpXG4re1xuK1x0TElCQlBGX09QVFMoYnBmX21hcF9jcmVhdGVfb3B0cywgbWFwX29wdHMsXG4rXHRcdCAgICAubWFwX2ZsYWdzID0gQlBGX0ZfUkRPTkxZX1BST0csXG4rXHQpO1xuK1x0aW50IGtleSA9IDAsIG1hcF9mZCwgZXJyO1xuK1x0X191NjQgdmFsdWUgPSAwO1xuK1xuK1x0bWFwX2ZkID0gYnBmX21hcF9jcmVhdGUoQlBGX01BUF9UWVBFX1BFUkNQVV9BUlJBWSwgXCJwZXJjcHVfcm9fbWFwXCIsIHNpemVvZihpbnQpLFxuK1x0XHRcdFx0c2l6ZW9mKF9fdTY0KSwgMSwgXHUwMDI2bWFwX29wdHMpO1xuK1x0aWYgKCFBU1NFUlRfR0UobWFwX2ZkLCAwLCBcImJwZl9tYXBfY3JlYXRlXCIpKVxuK1x0XHRyZXR1cm4gLTE7XG4rXG4rXHRlcnIgPSBicGZfbWFwX3VwZGF0ZV9lbGVtKG1hcF9mZCwgXHUwMDI2a2V5LCBcdTAwMjZ2YWx1ZSwgQlBGX0ZfQUxMX0NQVVMpO1xuK1x0aWYgKCFBU1NFUlRfT0soZXJyLCBcImJwZl9tYXBfdXBkYXRlX2VsZW1cIikpXG4rXHRcdGdvdG8gb3V0O1xuK1xuK1x0ZXJyID0gYnBmX21hcF9mcmVlemUobWFwX2ZkKTtcbitcdGlmICghQVNTRVJUX09LKGVyciwgXCJicGZfbWFwX2ZyZWV6ZVwiKSlcbitcdFx0Z290byBvdXQ7XG4rXG4rXHRyZXR1cm4gbWFwX2ZkO1xuK1xuK291dDpcbitcdGNsb3NlKG1hcF9mZCk7XG4rXHRyZXR1cm4gLTE7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIHRlc3RfZ2xvYmFsX3BlcmNwdV9kYXRhX3Jkb25seV9kaXJlY3RfcmVhZCh2b2lkKVxuK3tcbitcdC8qXG4rXHQgKiBSYXcgaW5zdHJ1Y3Rpb25zIHdpdGggbWFudWFsbHkgcHJlcGFyZWQgcmRvbmx5IHBlcmNwdV9hcnJheSBtYXBcbitcdCAqIGZvciB0ZXN0aW5nIGRpcmVjdC1yZWFkIGdsb2JhbCBwZXJjcHUgZGF0YSwgYmVjYXVzZSBsaWJicGZcbitcdCAqIGRvZXNuJ3QgaGF2ZSByZG9ubHkgaW50ZXJuYWwgcGVyY3B1X2FycmF5IG1hcCBzdXBwb3J0IGZvclxuK1x0ICogZ2xvYmFsIHBlcmNwdSBkYXRhLlxuK1x0ICovXG4rXHRzdHJ1Y3QgYnBmX2luc24gaW5zbnNbXSA9IHtcbitcdFx0QlBGX0xEX01BUF9WQUxVRShCUEZfUkVHXzEsIDAsIDApLFxuK1x0XHRCUEZfTERYX01FTShCUEZfRFcsIEJQRl9SRUdfMCwgQlBGX1JFR18xLCAwKSxcbitcdFx0QlBGX0VYSVRfSU5TTigpLFxuK1x0fTtcbitcdGludCBtYXBfZmQsIHByb2dfZmQ7XG4rXG4rXHRtYXBfZmQgPSBjcmVhdGVfcmRvbmx5X3BlcmNwdV9hcnJheSgpO1xuK1x0aWYgKG1hcF9mZCBcdTAwM2MgMClcbitcdFx0cmV0dXJuO1xuK1xuK1x0aW5zbnNbMF0uaW1tID0gbWFwX2ZkO1xuK1x0cHJvZ19mZCA9IGJwZl9wcm9nX2xvYWQoQlBGX1BST0dfVFlQRV9TT0NLRVRfRklMVEVSLCBcInBlcmNwdV9yb19wcm9nXCIsIFwiR1BMXCIsIGluc25zLFxuK1x0XHRcdFx0QVJSQVlfU0laRShpbnNucyksIE5VTEwpO1xuK1x0aWYgKEFTU0VSVF9HRShwcm9nX2ZkLCAwLCBcImJwZl9wcm9nX2xvYWRcIikpXG4rXHRcdGNsb3NlKHByb2dfZmQpO1xuK1x0Y2xvc2UobWFwX2ZkKTtcbit9XG4rXG4rc3RhdGljIHZvaWQgdGVzdF9nbG9iYWxfcGVyY3B1X2RhdGFfcmRvbmx5X2RpcmVjdF93cml0ZSh2b2lkKVxuK3tcbitcdExJQkJQRl9PUFRTKGJwZl9wcm9nX2xvYWRfb3B0cywgcHJvZ19vcHRzKTtcbitcdC8qIFNlZSB0aGUgY29tbWVudCBpbiB0ZXN0X2dsb2JhbF9wZXJjcHVfZGF0YV9yZG9ubHlfZGlyZWN0X3JlYWQoKSAqL1xuK1x0c3RydWN0IGJwZl9pbnNuIGluc25zW10gPSB7XG4rXHRcdEJQRl9MRF9NQVBfVkFMVUUoQlBGX1JFR18xLCAwLCAwKSxcbitcdFx0QlBGX0xEWF9NRU0oQlBGX0RXLCBCUEZfUkVHXzAsIEJQRl9SRUdfMSwgMCksXG4rXHRcdEJQRl9TVF9NRU0oQlBGX0RXLCBCUEZfUkVHXzEsIDAsIDApLFxuK1x0XHRCUEZfRVhJVF9JTlNOKCksXG4rXHR9O1xuK1x0Y2hhciBsb2dfYnVmWzI1Nl0gPSB7fTtcbitcdGludCBtYXBfZmQsIHByb2dfZmQ7XG4rXG4rXHRwcm9nX29wdHMubG9nX2J1ZiA9IGxvZ19idWY7XG4rXHRwcm9nX29wdHMubG9nX3NpemUgPSBzaXplb2YobG9nX2J1Zik7XG4rXHRwcm9nX29wdHMubG9nX2xldmVsID0gMTtcbitcbitcdG1hcF9mZCA9IGNyZWF0ZV9yZG9ubHlfcGVyY3B1X2FycmF5KCk7XG4rXHRpZiAobWFwX2ZkIFx1MDAzYyAwKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRpbnNuc1swXS5pbW0gPSBtYXBfZmQ7XG4rXHRwcm9nX2ZkID0gYnBmX3Byb2dfbG9hZChCUEZfUFJPR19UWVBFX1NPQ0tFVF9GSUxURVIsIFwicGVyY3B1X3JvX3Byb2dcIiwgXCJHUExcIiwgaW5zbnMsXG4rXHRcdFx0XHRBUlJBWV9TSVpFKGluc25zKSwgXHUwMDI2cHJvZ19vcHRzKTtcbitcdGlmICghQVNTRVJUX0xUKHByb2dfZmQsIDAsIFwiYnBmX3Byb2dfbG9hZFwiKSlcbitcdFx0Y2xvc2UocHJvZ19mZCk7XG4rXHRlbHNlXG4rXHRcdEFTU0VSVF9IQVNfU1VCU1RSKGxvZ19idWYsIFwid3JpdGUgaW50byBtYXAgZm9yYmlkZGVuXCIsIFwidmVyaWZpZXIgbG9nXCIpO1xuK1x0Y2xvc2UobWFwX2ZkKTtcbit9XG4rXG4rc3RhdGljIHZvaWQgdGVzdF9nbG9iYWxfcGVyY3B1X2RhdGFfdmVyaWZpZXJfbG9nKHZvaWQpXG4re1xuK1x0UlVOX1RFU1RTKHRlc3RfZ2xvYmFsX3BlcmNwdV9kYXRhKTtcbit9XG4rXG4rc3RhdGljIHZvaWQgdGVzdF9nbG9iYWxfcGVyY3B1X2RhdGFfaXRlcih2b2lkKVxuK3tcbitcdERFQ0xBUkVfTElCQlBGX09QVFMoYnBmX2l0ZXJfYXR0YWNoX29wdHMsIG9wdHMpO1xuK1x0c3RydWN0IHRlc3RfZ2xvYmFsX3BlcmNwdV9kYXRhICpza2VsO1xuK1x0dW5pb24gYnBmX2l0ZXJfbGlua19pbmZvIGxpbmZvID0ge307XG4rXHRzdHJ1Y3QgYnBmX2xpbmsgKmxpbmsgPSBOVUxMO1xuK1x0aW50IGZkLCBudW1fY3B1cywgbGVuLCBlcnI7XG4rXHRjaGFyIGJ1ZlsxNl07XG4rXG4rXHRudW1fY3B1cyA9IGxpYmJwZl9udW1fcG9zc2libGVfY3B1cygpO1xuK1x0aWYgKCFBU1NFUlRfR1QobnVtX2NwdXMsIDAsIFwibGliYnBmX251bV9wb3NzaWJsZV9jcHVzXCIpKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRza2VsID0gdGVzdF9nbG9iYWxfcGVyY3B1X2RhdGFfX29wZW4oKTtcbitcdGlmICghQVNTRVJUX09LX1BUUihza2VsLCBcInRlc3RfZ2xvYmFsX3BlcmNwdV9kYXRhX19vcGVuXCIpKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRza2VsLVx1MDAzZXJvZGF0YS1cdTAwM2VudW1fY3B1cyA9IG51bV9jcHVzO1xuK1x0c2tlbC1cdTAwM2Vyb2RhdGEtXHUwMDNlb2Zmc2V0b2ZfbnVtID0gb2Zmc2V0b2Yoc3RydWN0IHRlc3RfZ2xvYmFsX3BlcmNwdV9kYXRhX19wZXJjcHUsIHN0cnVjdF9kYXRhKTtcbitcdHNrZWwtXHUwMDNlcm9kYXRhLVx1MDAzZW9mZnNldG9mX251bSArPSBzaXplb2Yoc2tlbC1cdTAwM2VwZXJjcHUtXHUwMDNlc3RydWN0X2RhdGEpIC0gc2l6ZW9mKGludCk7XG4rXHRza2VsLVx1MDAzZXJvZGF0YS1cdTAwM2VlbGVtX3N6ID0gcm91bmR1cChzaXplb2Yoc3RydWN0IHRlc3RfZ2xvYmFsX3BlcmNwdV9kYXRhX19wZXJjcHUpLCA4KTtcbitcdHNrZWwtXHUwMDNlcGVyY3B1LVx1MDAzZXN0cnVjdF9kYXRhLm51bXNbNl0gPSAweGMwZGU7XG4rXG4rXHRlcnIgPSB0ZXN0X2dsb2JhbF9wZXJjcHVfZGF0YV9fbG9hZChza2VsKTtcbitcdGlmICghQVNTRVJUX09LKGVyciwgXCJ0ZXN0X2dsb2JhbF9wZXJjcHVfZGF0YV9fbG9hZFwiKSlcbitcdFx0Z290byBvdXQ7XG4rXG4rXHRsaW5mby5tYXAubWFwX2ZkID0gYnBmX21hcF9fZmQoc2tlbC1cdTAwM2VtYXBzLnBlcmNwdSk7XG4rXHRvcHRzLmxpbmtfaW5mbyA9IFx1MDAyNmxpbmZvO1xuK1x0b3B0cy5saW5rX2luZm9fbGVuID0gc2l6ZW9mKGxpbmZvKTtcbitcdGxpbmsgPSBicGZfcHJvZ3JhbV9fYXR0YWNoX2l0ZXIoc2tlbC1cdTAwM2Vwcm9ncy5kdW1wX3BlcmNwdV9kYXRhLCBcdTAwMjZvcHRzKTtcbitcdGlmICghQVNTRVJUX09LX1BUUihsaW5rLCBcImJwZl9wcm9ncmFtX19hdHRhY2hfaXRlclwiKSlcbitcdFx0Z290byBvdXQ7XG4rXG4rXHRmZCA9IGJwZl9pdGVyX2NyZWF0ZShicGZfbGlua19fZmQobGluaykpO1xuK1x0aWYgKCFBU1NFUlRfR0UoZmQsIDAsIFwiYnBmX2l0ZXJfY3JlYXRlXCIpKVxuK1x0XHRnb3RvIG91dDtcbitcbitcdHdoaWxlICgobGVuID0gcmVhZChmZCwgYnVmLCBzaXplb2YoYnVmKSkpIFx1MDAzZSAwKVxuK1x0XHRkbyB7IH0gd2hpbGUgKDApO1xuK1x0QVNTRVJUX0VRKGxlbiwgMCwgXCJyZWFkIGl0ZXJcIik7XG4rXHRBU1NFUlRfVFJVRShza2VsLVx1MDAzZWJzcy1cdTAwM2VydW5faXRlciwgXCJydW5faXRlclwiKTtcbitcdEFTU0VSVF9FUShza2VsLVx1MDAzZWJzcy1cdTAwM2VwZXJjcHVfZGF0YV9zdW0sIDB4YzBkZSAqIG51bV9jcHVzLCBcInBlcmNwdV9kYXRhX3N1bVwiKTtcbitcbitcdGNsb3NlKGZkKTtcbitvdXQ6XG4rXHRicGZfbGlua19fZGVzdHJveShsaW5rKTtcbitcdHRlc3RfZ2xvYmFsX3BlcmNwdV9kYXRhX19kZXN0cm95KHNrZWwpO1xuK31cbitcbit2b2lkIHRlc3RfZ2xvYmFsX3BlcmNwdV9kYXRhKHZvaWQpXG4re1xuK1x0aWYgKCFmZWF0X3N1cHBvcnRlZChOVUxMLCBGRUFUX1BFUkNQVV9EQVRBKSkge1xuK1x0XHR0ZXN0X19za2lwKCk7XG4rXHRcdHJldHVybjtcbitcdH1cbitcbitcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFwiaW5pdFwiKSlcbitcdFx0dGVzdF9nbG9iYWxfcGVyY3B1X2RhdGFfaW5pdCgpO1xuK1x0aWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoXCJsc2tlbFwiKSlcbitcdFx0dGVzdF9nbG9iYWxfcGVyY3B1X2RhdGFfbHNrZWwoKTtcbitcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFwicmRvbmx5X2RpcmVjdF9yZWFkXCIpKVxuK1x0XHR0ZXN0X2dsb2JhbF9wZXJjcHVfZGF0YV9yZG9ubHlfZGlyZWN0X3JlYWQoKTtcbitcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFwicmRvbmx5X2RpcmVjdF93cml0ZVwiKSlcbitcdFx0dGVzdF9nbG9iYWxfcGVyY3B1X2RhdGFfcmRvbmx5X2RpcmVjdF93cml0ZSgpO1xuK1x0dGVzdF9nbG9iYWxfcGVyY3B1X2RhdGFfdmVyaWZpZXJfbG9nKCk7XG4rXHRpZiAodGVzdF9fc3RhcnRfc3VidGVzdChcIml0ZXJcIikpXG4rXHRcdHRlc3RfZ2xvYmFsX3BlcmNwdV9kYXRhX2l0ZXIoKTtcbit9XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3RfZ2xvYmFsX3BlcmNwdV9kYXRhLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF9nbG9iYWxfcGVyY3B1X2RhdGEuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLmE5NDQzZmIyMDUwZTlcbi0tLSAvZGV2L251bGxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X2dsb2JhbF9wZXJjcHVfZGF0YS5jXG5AQCAtMCwwICsxLDg4IEBAXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbisjaW5jbHVkZSBcdTAwM2N2bWxpbnV4LmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NicGYvYnBmX2hlbHBlcnMuaFx1MDAzZVxuKyNpbmNsdWRlIFwiYnBmX21pc2MuaFwiXG4rXG4rLyogVXNlZCBmb3IgdGVzdGluZyBtYXAgbmFtZS4gKi9cbitpbnQgbG9vbmcgU0VDKFwiLnBlcmNwdS5sb29vb29vb29vbmdcIik7XG4raW50IGRhdGEzIFNFQyhcIi5kYXRhLnBlcmNwdVwiKTtcbitpbnQgZGF0YTIgU0VDKFwiLnBlcmNwdS5kYXRhXCIpO1xuK1xuK2ludCBydW47XG4raW50IGNwdV9pZCBTRUMoXCIucGVyY3B1XCIpO1xuK2ludCBkYXRhIFNFQyhcIi5wZXJjcHVcIikgPSAtMTtcbitpbnQgbnVtc1s3XSBTRUMoXCIucGVyY3B1XCIpO1xuK2Jvb2wgc2V0IFNFQyhcIi5wZXJjcHVcIikgPSBmYWxzZTtcbitzdHJ1Y3Qge1xuK1x0Y2hhciBzZXQ7XG4rXHRpbnQgaTtcbitcdGludCBudW1zWzddO1xuK30gc3RydWN0X2RhdGEgU0VDKFwiLnBlcmNwdVwiKSA9IHtcbitcdC5zZXQgPSAwLFxuK1x0LmkgPSAtMSxcbit9O1xuK1xuK1NFQyhcInJhd190cC90YXNrX3JlbmFtZVwiKVxuK19fYXV4aWxpYXJ5XG4raW50IHVwZGF0ZV9wZXJjcHVfZGF0YSh2b2lkICpjdHgpXG4re1xuK1x0c3RydWN0X2RhdGEubnVtc1s2XSA9IDB4YzBkZTtcbitcdHN0cnVjdF9kYXRhLnNldCA9IDE7XG4rXHRzdHJ1Y3RfZGF0YS5pID0gMTtcbitcdG51bXNbNl0gPSAweGMwZGU7XG4rXHRkYXRhID0gMTtcbitcdHJ1bisrO1xuK1x0c2V0ID0gdHJ1ZTtcbitcdGNwdV9pZCA9IGJwZl9nZXRfc21wX3Byb2Nlc3Nvcl9pZCgpO1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyBjb25zdCBjaGFyIGZtdFtdIFNFQyhcIi5wZXJjcHUuZm10XCIpID0gXCJkYXRhICVkXFxuXCI7XG4rXG4rU0VDKFwiP2twcm9iZVwiKVxuK19fZmFpbHVyZSBfX21zZyhcIlJ7e1swLTldK319IHBvaW50cyB0byBwZXJjcHVfYXJyYXkgbWFwIHdoaWNoIGNhbm5vdCBiZSB1c2VkIGFzIGNvbnN0IHN0cmluZ1wiKVxuK2ludCB2ZXJpZmllcl9zdHJuY21wKHZvaWQgKmN0eClcbit7XG4rXHRyZXR1cm4gYnBmX3N0cm5jbXAoXCJ0ZXN0XCIsIDUsIGZtdCk7XG4rfVxuK1xuK1NFQyhcIj9rcHJvYmVcIilcbitfX2ZhaWx1cmUgX19tc2coXCJSe3tbMC05XSt9fSBwb2ludHMgdG8gcGVyY3B1X2FycmF5IG1hcCB3aGljaCBjYW5ub3QgYmUgdXNlZCBhcyBjb25zdCBzdHJpbmdcIilcbitpbnQgdmVyaWZpZXJfc25wcmludGYodm9pZCAqY3R4KVxuK3tcbitcdHU2NCBhcmdzW10gPSB7IGRhdGEgfTtcbitcdGNoYXIgYnVmWzEyOF07XG4rXHRpbnQgbGVuO1xuK1xuK1x0bGVuID0gYnBmX3NucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksIGZtdCwgYXJncywgc2l6ZW9mKGFyZ3MpKTtcbitcdGlmIChsZW4gXHUwMDNlIDApXG4rXHRcdGJwZl9wcmludGsoXCJzbnByaW50ZjogJXNcXG5cIiwgYnVmKTtcbitcdHJldHVybiAwO1xuK31cbitcbit2b2xhdGlsZSBjb25zdCBfX3UzMiBudW1fY3B1cyA9IDA7XG4rdm9sYXRpbGUgY29uc3QgaW50IG9mZnNldG9mX251bTtcbit2b2xhdGlsZSBjb25zdCBpbnQgZWxlbV9zejtcbitfX3UzMiBwZXJjcHVfZGF0YV9zdW0gPSAwO1xuK2Jvb2wgcnVuX2l0ZXIgPSBmYWxzZTtcbitcbitTRUMoXCJpdGVyL2JwZl9tYXBfZWxlbVwiKVxuK19fYXV4aWxpYXJ5XG4raW50IGR1bXBfcGVyY3B1X2RhdGEoc3RydWN0IGJwZl9pdGVyX19icGZfbWFwX2VsZW0gKmN0eClcbit7XG4rXHR2b2lkICpwcHRyID0gY3R4LVx1MDAzZXZhbHVlO1xuK1x0aW50IGk7XG4rXG4rXHRpZiAoIXBwdHIpXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0cnVuX2l0ZXIgPSB0cnVlO1xuK1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgbnVtX2NwdXM7IGkrKykge1xuK1x0XHRwZXJjcHVfZGF0YV9zdW0gKz0gKihpbnQgKikgKHBwdHIgKyBvZmZzZXRvZl9udW0pO1xuK1x0XHRwcHRyICs9IGVsZW1fc3o7XG4rXHR9XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rY2hhciBfbGljZW5zZVtdIFNFQyhcImxpY2Vuc2VcIikgPSBcIkdQTFwiO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMTk6NDI6MjMuNDQwMDQyNjUzWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTk1MDQ4MzI2OTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBCUEYgUGVyLUNQVSBBcnJheSBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggaW50cm9kdWNpbmcgYC5wZXJjcHVgIGdsb2JhbCBkYXRhIG1hcCBzdXBwb3J0IHdpdGhpbiBCUEYuIEl0J3MgdG91Y2hpbmcgc29tZSBjb3JlIGFyZWFzLCBzcGVjaWZpY2FsbHkgYGFycmF5bWFwLmNgLCBgZml4dXBzLmNgLCBhbmQgdGhlIHZlcmlmaWVyIChgdmVyaWZpZXIuY2ApLCBhbG9uZyB3aXRoIHNvbWUgdG9vbGluZy4gVGhlIGNvcmUgZnVuY3Rpb25hbGl0eSBzZWVtcyBjZW50ZXJlZCBhcm91bmQgaGFuZGxpbmcgYEJQRl9NQVBfVFlQRV9QRVJDUFVfQVJSQVlgIG1hcHMuIFRoaXMgaXMgYSBzaWduaWZpY2FudCBmdW5jdGlvbmFsIGNoYW5nZSB3aXRoaW4gdGhlIEJQRiBzdWJzeXN0ZW0sIHdoaWNoIHNjcmVhbXMgZm9yIGZ1enppbmcgdG8gdW5jb3ZlciBhbnkgZWRnZSBjYXNlIGlzc3Vlcy5cblxuTXkgaW1tZWRpYXRlIGZvY3VzIHBvaW50cyBhcmUgdGhlc2Ugc3ltYm9sczpcblxuKiAgIGBwZXJjcHVfYXJyYXlfbWFwX2RpcmVjdF92YWx1ZV9hZGRyYFxuKiAgIGBwZXJjcHVfYXJyYXlfbWFwX2RpcmVjdF92YWx1ZV9tZXRhYFxuKiAgIGBicGZfZG9fbWlzY19maXh1cHNgIOKAkyBhbHRob3VnaCB0aGF0J3MgYSBiaXQgYnJvYWQsIGl04oCZcyB3aGVyZSB0aGUgbmV3IGZpeHVwIGxvZ2ljIGxpdmVzLlxuKiAgIGBjaGVja19tYXBfbWVtX3JlYWRgIOKAkyB0aGlzIG5ldyBmdW5jdGlvbiBpbiB0aGUgdmVyaWZpZXIgaXMgaW50ZXJlc3RpbmcuXG5cbkxldCdzIGRpdmUgaW50byBgYXJyYXltYXAuY2AgYW5kIGNoZWNrIG91dCBgcGVyY3B1X2FycmF5X21hcF9kaXJlY3RfdmFsdWVfYWRkcmAuIEl0J3MgYHN0YXRpY2AsIGJ1dCwgaXQncyBhc3NpZ25lZCB0byBgbWFwX2RpcmVjdF92YWx1ZV9hZGRyYCBpbiBgcGVyY3B1X2FycmF5X21hcF9vcHNgLCBzbyBpdCdzIGEgZnVuY3Rpb24gcG9pbnRlciBhbmQgd29uJ3QgYmUgaW5saW5lZC4gVGhhdCBtZWFucyBpdCAqc2hvdWxkKiBoYXZlIGEgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3MsIHNvIGl0J3MgYSB2YWxpZCB0YXJnZXQuIEknbGwgbmVlZCB0byBkb3VibGUgY2hlY2sgZm9yIGFueSBub24tc3RhdGljIGFsdGVybmF0aXZlcy5cblxuUmlnaHQsIGBjaGVja19tYXBfbWVtX3JlYWRgIGlzIGBzdGF0aWNgLCBidXQgaXQncyBuZXcsIHNvIEknbGwga2VlcCBpdCBvbiB0aGUgcmFkYXIuIGBicGZfZG9fbWlzY19maXh1cHNgIGlzICpub3QqIGBzdGF0aWNgIGFuZCBJIGNhbiBzZWUgaXQncyBjYWxsZWQgZnJvbSBgdmVyaWZpZXIuY2AsIHdoaWNoIG1ha2VzIGl0IGFuIGludGVyZXN0aW5nIHRhcmdldC4gQW5kLCBpbnRlcmVzdGluZ2x5LCBgYnBmX21hcF9kaXJlY3RfcmVhZGAgaXMgYWxzbyBub3Qgc3RhdGljLiBMZXQncyBzZWUuLi4gQWhhISBJIHNlZSB0aGF0IGBicGZfbWFwX2RpcmVjdF9yZWFkYCBoYXMgYSBjcnVjaWFsIGNoYW5nZTpcblxuYGBgY1xuQEAgLTU2NjIsNiArNTY1Nyw4IEBAIGludCBicGZfbWFwX2RpcmVjdF9yZWFkKHN0cnVjdCBicGZfbWFwICptYXAsIGludCBvZmYsIGludCBzaXplLCB1NjQgKnZhbCxcbiBcdHU2NCBhZGRyO1xuIFx0aW50IGVycjtcbiBcbitcdGlmIChtYXAtXHUwMDNlbWFwX3R5cGUgPT0gQlBGX01BUF9UWVBFX0lOU05fQVJSQVkgfHwgbWFwLVx1MDAzZW1hcF90eXBlID09IEJQRl9NQVBfVFlQRV9QRVJDUFVfQVJSQVkpXG4rXHRcdHJldHVybiAtRUlOVkFMO1xuIFx0ZXJyID0gbWFwLVx1MDAzZW9wcy1cdTAwM2VtYXBfZGlyZWN0X3ZhbHVlX2FkZHIobWFwLCBcdTAwMjZhZGRyLCBvZmYpO1xuIGBgYFxuXG5JdCdzIG5vdyByZXR1cm5pbmcgYC1FSU5WQUxgIGZvciBgQlBGX01BUF9UWVBFX1BFUkNQVV9BUlJBWWAsIHdoaWNoIGxvb2tzIGltcG9ydGFudCFcblxuTm93LCB0aGUgbmV3IGBjaGVja19tYXBfbWVtX3JlYWRgIGxvb2tzIGxpa2U6XG5cbmBgYGNcbitzdGF0aWMgaW50IGNoZWNrX21hcF9tZW1fcmVhZChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnLCBpbnQgb2ZmLFxuK1x0XHRcdCAgICAgIGludCBicGZfc2l6ZSwgaW50IHZhbHVlX3JlZ25vLCBib29sIGlzX2xkc3gpXG5gYGBcblxuSXQncyBgc3RhdGljYCwgYnV0IGl0J3MgKm5ldyogY29kZSwgc28gYSBkZWZpbml0ZSB0YXJnZXQgZm9yIGFuYWx5c2lzLiBJJ2xsIG5lZWQgdG8gc2VlIGhvdyBpdCdzIHVzZWQuXG5cbkxhc3RseSwgSSBzaG91bGQgcHJvYmFibHkgZ2xhbmNlIGF0IHRoZSBLY29uZmlnIHRvIHNlZSB3aGF0IHRoZSBtYWluIEJQRiBjb25maWd1cmF0aW9uIG9wdGlvbiBpcy4gWXVwLCBgQ09ORklHX0JQRl9TWVNDQUxMYCBzZWVtcyB0byBiZSB0aGUgY3JpdGljYWwgb25lLlxuXG5JJ20gcmVhZHkgdG8gc3RhcnQgc29tZSB2ZXJpZmljYXRpb24gd2l0aCB0aGUgdG9vbHMgdG8gdmFsaWRhdGUgdGhpcyBwYXRjaC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjMwODMsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4NjIsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQxOTo0Mjo0Mi45NDQ4Nzc2OTdaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDc3MTI0NjcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYnBmX2RvX21pc2NfZml4dXBzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9icGYvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvZml4dXBzLmM9MTQ1MD1zdGF0aWMgaW50IGFkZF9oaWRkZW5fc3VicHJvZyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKnBhdGNoLCBpbnQgbGVuKVxcbi0tXFxua2VybmVsL2JwZi9maXh1cHMuYy0xNDc4LSAqL1xcbmtlcm5lbC9icGYvZml4dXBzLmM6MTQ3OTppbnQgYnBmX2RvX21pc2NfZml4dXBzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXFxua2VybmVsL2JwZi9maXh1cHMuYy0xNDgwLXtcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0yMDIyMD1pbnQgYnBmX2NoZWNrKHN0cnVjdCBicGZfcHJvZyAqKnByb2csIHVuaW9uIGJwZl9hdHRyICphdHRyLCBicGZwdHJfdCB1YXR0cixcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMDQzMi1cXHRpZiAocmV0ID09IDApXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjIwNDMzOlxcdFxcdHJldCA9IGJwZl9kb19taXNjX2ZpeHVwcyhlbnYpO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMDQzNC1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMTk6NDI6NDIuOTkyNTk1OTg0WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDU2OTYzNDQ1MTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkNvbnNpZGVyaW5nIEJQRiBGaXh1cHMgYW5kIFBlci1DUFUgQXJyYXkgQWRkcmVzc2luZyoqXG5cblJpZ2h0LCBzbyBJJ20gdGhpbmtpbmcgYWJvdXQgd2hlcmUgdG8gZGlnIGluIG9uIHRoaXMuICpgYnBmX2RvX21pc2NfZml4dXBzYCogaXMgZGVmaW5pdGVseSBhIHNvbGlkIGNhbmRpZGF0ZSBmb3IgZnVydGhlciBpbnZlc3RpZ2F0aW9uLiBJdCBzZWVtcyBsaWtlIGl0IGNvdWxkIGJlIGEgY3J1Y2lhbCBwYXJ0IG9mIHRoZSBwcm9jZXNzLCBhbmQgSSBzaG91bGQgc3RhcnQgdGhlcmUuIEJ1dCB0aGVuLCBJJ20gYWxzbyB3b25kZXJpbmcgYWJvdXQgKmBwZXJjcHVfYXJyYXlfbWFwX2RpcmVjdF92YWx1ZV9hZGRyYCouIENvdWxkIHRoYXQgYmUgYSByZWxhdGVkIGFyZWEgdGhhdCBob2xkcyBzb21lIGludGVyZXN0aW5nIGNsdWVzPyBJIGtub3cgdGhvc2UgcGVyLUNQVSBhcnJheXMgY2FuIGJlIGEgc291cmNlIG9mIHNvbWUgdHJpY2t5IGJlaGF2aW9yLCBlc3BlY2lhbGx5IHdoZW4gZGVhbGluZyB3aXRoIGRpcmVjdCBhY2Nlc3MsIHNvIEkgc2hvdWxkIHNlZSBpZiB0aGVyZSBhcmUgY29ubmVjdGlvbnMuIEknbGwgbmVlZCB0byBjaGVjayBpZiB0aGVyZSBhcmUgc2hhcmVkIHZhcmlhYmxlcyBvciBmdW5jdGlvbnMgdGhhdCBjcm9zcyBib3RoIHRoZSBmaXh1cHMgYW5kIHRoZSBwZXItQ1BVIGFycmF5LiBJdCBtYXkgYmUgaW1wb3J0YW50IHRvIGV4YW1pbmUgaG93IHRob3NlIGFkZHJlc3NlcyBhcmUgY2FsY3VsYXRlZCBhbmQgdXNlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjUwMTUsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQxOTo0MzoyOC42ODg5NDM1MzhaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDY1NzgzNDcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicGVyY3B1X2FycmF5X21hcF9kaXJlY3RfdmFsdWVfYWRkclwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvYnBmL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL2FycmF5bWFwLmM9MjUxPXN0YXRpYyB2b2lkICpwZXJjcHVfYXJyYXlfbWFwX2xvb2t1cF9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSlcXG4tLVxcbmtlcm5lbC9icGYvYXJyYXltYXAuYy0yNjEtXFxua2VybmVsL2JwZi9hcnJheW1hcC5jOjI2MjpzdGF0aWMgaW50IHBlcmNwdV9hcnJheV9tYXBfZGlyZWN0X3ZhbHVlX2FkZHIoY29uc3Qgc3RydWN0IGJwZl9tYXAgKm1hcCwgdTY0ICppbW0sIHUzMiBvZmYpXFxua2VybmVsL2JwZi9hcnJheW1hcC5jLTI2My17XFxuLS1cXG5rZXJuZWwvYnBmL2FycmF5bWFwLmM9ODU5PWNvbnN0IHN0cnVjdCBicGZfbWFwX29wcyBwZXJjcHVfYXJyYXlfbWFwX29wcyA9IHtcXG4tLVxcbmtlcm5lbC9icGYvYXJyYXltYXAuYy04NjYtXFx0Lm1hcF9nZW5fbG9va3VwID0gcGVyY3B1X2FycmF5X21hcF9nZW5fbG9va3VwLFxcbmtlcm5lbC9icGYvYXJyYXltYXAuYzo4Njc6XFx0Lm1hcF9kaXJlY3RfdmFsdWVfYWRkciA9IHBlcmNwdV9hcnJheV9tYXBfZGlyZWN0X3ZhbHVlX2FkZHIsXFxua2VybmVsL2JwZi9hcnJheW1hcC5jLTg2OC1cXHQubWFwX2RpcmVjdF92YWx1ZV9tZXRhID0gcGVyY3B1X2FycmF5X21hcF9kaXJlY3RfdmFsdWVfbWV0YSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMTk6NDM6MjguNzM1NTI5MTE1WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTgyNTQ2OTIxNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246XG5cbioqQW5hbHl6aW5nIHRoYXQgU3RhdGljIEZ1bmN0aW9uIFBvaW50ZXIgQXNzaWdubWVudCoqXG5cbkFscmlnaHQsIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGllY2Ugb2YgY29kZSwgYW5kIGl0J3MgYSBzdGF0aWMgdmFyaWFibGUsIGJ1dCBpdCdzIGFzc2lnbmVkIHRvIGEgZnVuY3Rpb24gcG9pbnRlci4gVGhhdCdzIGludGVyZXN0aW5nLiBUaGUgXCJzdGF0aWNcIiBrZXl3b3JkIHRlbGxzIG1lIHRoaXMgdGhpbmcgaGFzIGludGVybmFsIGxpbmthZ2U7IGl0J3MgYSBkaXN0aW5jdCBzeW1ib2wgd2l0aGluIHRoaXMgY29tcGlsYXRpb24gdW5pdC4gRXZlbiB0aG91Z2ggaXQncyBzdGF0aWMsIHRoZSBhc3NpZ25tZW50IHRvIGEgZnVuY3Rpb24gcG9pbnRlciBtYWtlcyBpdCBiZWhhdmUgaW4gYSB2ZXJ5IHNwZWNpZmljIHdheS4gSXTigJlzIGdvdCBpdHMgb3duIGlkZW50aXR5LCBhcyBpdCB3ZXJlLCBkZXNwaXRlIHRoZSBsYWNrIG9mIGV4dGVybmFsIGxpbmthZ2UuXG5cbk5vdywgbGV0J3Mgc2VlIHdoYXQgYGNoZWNrX21hcF9tZW1fcmVhZGAgaXMgYWxsIGFib3V0LiBUaW1lIHRvIGRpdmUgZGVlcGVyIGludG8gdGhhdCBmdW5jdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MjU1NzEsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQxOTo0MzozNC41NjEwMDA3OVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODQxNTcxNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjaGVja19tYXBfbWVtX3JlYWRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2JwZi9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi92ZXJpZmllci5jPTYxNDE9c3RhdGljIHZvaWQgYWRkX3NjYWxhcl90b19yZWcoc3RydWN0IGJwZl9yZWdfc3RhdGUgKmRzdF9yZWcsIHM2NCB2YWwpXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNjE1Ny1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NjE1ODpzdGF0aWMgaW50IGNoZWNrX21hcF9tZW1fcmVhZChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnLCBpbnQgb2ZmLFxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy02MTU5LVxcdFxcdFxcdCAgICAgIGludCBicGZfc2l6ZSwgaW50IHZhbHVlX3JlZ25vLCBib29sIGlzX2xkc3gpXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9NjIwOT1zdGF0aWMgaW50IGNoZWNrX21lbV9hY2Nlc3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50IGluc25faWR4LCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnLCBhcmdub190IGFyZ25vLFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTYyNTYtXFx0XFx0fSBlbHNlIGlmICh0ID09IEJQRl9SRUFEIFxcdTAwMjZcXHUwMDI2IHZhbHVlX3JlZ25vIFxcdTAwM2U9IDApIHtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NjI1NzpcXHRcXHRcXHRlcnIgPSBjaGVja19tYXBfbWVtX3JlYWQoZW52LCByZWcsIG9mZiwgYnBmX3NpemUsIHZhbHVlX3JlZ25vLCBpc19sZHN4KTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNjI1OC1cXHRcXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDE5OjQzOjM0LjYwOTQyMTI5N1oiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY5NjQxNjQ0NDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOlxuXG4qKkFuYWx5emluZyBQb3RlbnRpYWwgT3B0aW1pemF0aW9ucyBpbiBNZW1vcnkgQWNjZXNzIENoZWNrcyoqXG5cblJpZ2h0LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGBjaGVja19tYXBfbWVtX3JlYWRgIGZ1bmN0aW9uLiBJdCdzIG1hcmtlZCBhcyBgc3RhdGljYCwgYW5kIHRoZSBvbmx5IHBsYWNlIEkgc2VlIGl0IGJlaW5nIGNhbGxlZCBpcyB3aXRoaW4gYGNoZWNrX21lbV9hY2Nlc3NgLiBUaGF0IHNjcmVhbXMgXCJpbmxpbmluZyBjYW5kaWRhdGVcIiB0byBtZS4gSXQncyB3b3J0aCBpbnZlc3RpZ2F0aW5nIGlmIHRoZSBjb21waWxlciBpcyBhbHJlYWR5IGRvaW5nIHRoYXQgYXV0b21hdGljYWxseS4gSSBuZWVkIHRvIHZlcmlmeSB0aGF0LCBvZiBjb3Vyc2UsIGJlY2F1c2UgYW4gYXNzdW1lZCBvcHRpbWl6YXRpb24gaXNuJ3QgYWx3YXlzIHBlcmZvcm1lZC4gSWYgaXQncyAqbm90KiBiZWluZyBpbmxpbmVkLCB0aGVuIGxldCdzIHNlZSBpZiB3ZSBjYW4gZm9yY2UgdGhhdCwgb3IgYXQgbGVhc3QgdW5kZXJzdGFuZCB3aHkgdGhlIGNvbXBpbGVyIGlzbid0IGRvaW5nIHNvIGF1dG9tYXRpY2FsbHkuXG5cbk5vdywgYSByZWxhdGVkIHRob3VnaHQuLi4gY291bGQgYGJwZl9tYXBfZGlyZWN0X3JlYWRgIGJlIGEgcG90ZW50aWFsIHRhcmdldCBmdW5jdGlvbiBmb3IgZnVydGhlciBvcHRpbWl6YXRpb24gb3Igc3BlY2lhbCBoYW5kbGluZz8gSXQgc2VlbXMgbGlrZSBhIGdvb2QgcGxhY2UgdG8gc3RhcnQgZGlnZ2luZyBkZWVwZXIgdG8gZmluZCBvdGhlciBvcHBvcnR1bml0aWVzIHRvIGltcHJvdmUgcGVyZm9ybWFuY2UgaWYgdGhlIGN1cnJlbnQgaW5saW5pbmcgaXMgZm91bmQgdG8gbm90IGJlIHBlcmZvcm1lZCwgb3IgdG8gdHJ5IGFuZCBpbXByb3ZlIHBlcmZvcm1hbmNlLiBMZXQncyBzZWUgaWYgd2UgY2FuIGRvIHNvbWV0aGluZyBtb3JlIHdpdGggaXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI2MTA2LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMTk6NDM6NDEuNTczNTg4MTQzWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0OTYyNzYyNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJicGZfbWFwX2RpcmVjdF9yZWFkXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9icGYvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvY29uc3RfZm9sZC5jPTUwPXN0YXRpYyB2b2lkIGNvbnN0X3JlZ194ZmVyKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBjb25zdF9hcmdfaW5mbyAqY2lfb3V0LFxcbi0tXFxua2VybmVsL2JwZi9jb25zdF9mb2xkLmMtMTg1LVxcdFxcdCAgICBvZmYgXFx1MDAzYyAwIHx8IG9mZiArIHNpemUgXFx1MDAzZSBtYXAtXFx1MDAzZXZhbHVlX3NpemUgfHxcXG5rZXJuZWwvYnBmL2NvbnN0X2ZvbGQuYzoxODY6XFx0XFx0ICAgIGJwZl9tYXBfZGlyZWN0X3JlYWQobWFwLCBvZmYsIHNpemUsIFxcdTAwMjZ2YWwsIGlzX2xkc3gpKSB7XFxua2VybmVsL2JwZi9jb25zdF9mb2xkLmMtMTg3LVxcdFxcdFxcdCpkc3QgPSB1bmtub3duO1xcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTU2MzM9Ym9vbCBicGZfbWFwX2lzX3Jkb25seShjb25zdCBzdHJ1Y3QgYnBmX21hcCAqbWFwKVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTU2NTItXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjU2NTM6aW50IGJwZl9tYXBfZGlyZWN0X3JlYWQoc3RydWN0IGJwZl9tYXAgKm1hcCwgaW50IG9mZiwgaW50IHNpemUsIHU2NCAqdmFsLFxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy01NjU0LVxcdFxcdFxcdGJvb2wgaXNfbGRzeClcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz02MTU4PXN0YXRpYyBpbnQgY2hlY2tfbWFwX21lbV9yZWFkKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcsIGludCBvZmYsXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNjE4OC1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NjE4OTpcXHRcXHRlcnIgPSBicGZfbWFwX2RpcmVjdF9yZWFkKG1hcCwgbWFwX29mZiwgc2l6ZSwgXFx1MDAyNnZhbCwgaXNfbGRzeCk7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTYxOTAtXFx0XFx0aWYgKGVycilcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMTk6NDM6NDEuNjIzMjIwNDk5WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc0MDIyNzYyMzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOlxuXG4qKkludmVzdGlnYXRpbmcgYGJwZl9tYXBfZGlyZWN0X3JlYWRgKipcblxuQWxyaWdodCwgc28gYGJwZl9tYXBfZGlyZWN0X3JlYWRgLi4uIEkgcmVtZW1iZXIgc2VlaW5nIHRoYXQuIFRoZSBmYWN0IHRoYXQgaXQncyAqbm90KiBkZWNsYXJlZCBzdGF0aWMgaXMgaW1tZWRpYXRlbHkgaW50ZXJlc3RpbmcuIFRoYXQgbWVhbnMgaXQncyBleHBvcnRlZCBhbmQgdXNlZCBhY3Jvc3MgbXVsdGlwbGUgZmlsZXMg4oCTIHByb2JhYmx5IGEgY29yZSBCUEYgaGVscGVyIGZ1bmN0aW9uLCBvciBwZXJoYXBzIHNvbWV0aGluZyBzcGVjaWZpYyB0byBhIGNlcnRhaW4gc3Vic3lzdGVtLiBUaGF0IG5lZWRzIGZ1cnRoZXIgaW52ZXN0aWdhdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHNjb3BlIGFuZCBpbXBhY3QuXG5cbk5vdywgd2hlcmUgd2FzIEk/IFJpZ2h0LCBJIHNob3VsZCB0YWtlIGEgbG9vayBhdCBgcGVyY3B1X2FycmF5X21hcF9kaXJlY3RfdmFsdWVfbWV0YWAuIExldCdzIHNlZSB3aGF0IHRoYXQgaG9sZHMuIFRoYXQgc2VlbXMgbGlrZSB0aGUgcmlnaHQgcGF0aCB0byB0cmFjayBkb3duLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNjgzMCwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDE5OjQzOjQ5LjAyNTQ5ODk2NVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDYxMDQ4NTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicGVyY3B1X2FycmF5X21hcF9kaXJlY3RfdmFsdWVfbWV0YVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvYnBmL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL2FycmF5bWFwLmM9MjYyPXN0YXRpYyBpbnQgcGVyY3B1X2FycmF5X21hcF9kaXJlY3RfdmFsdWVfYWRkcihjb25zdCBzdHJ1Y3QgYnBmX21hcCAqbWFwLCB1NjQgKmltbSwgdTMyIG9mZilcXG4tLVxcbmtlcm5lbC9icGYvYXJyYXltYXAuYy0yNzYtXFxua2VybmVsL2JwZi9hcnJheW1hcC5jOjI3NzpzdGF0aWMgaW50IHBlcmNwdV9hcnJheV9tYXBfZGlyZWN0X3ZhbHVlX21ldGEoY29uc3Qgc3RydWN0IGJwZl9tYXAgKm1hcCwgdTY0IGltbSwgdTMyICpvZmYpXFxua2VybmVsL2JwZi9hcnJheW1hcC5jLTI3OC17XFxuLS1cXG5rZXJuZWwvYnBmL2FycmF5bWFwLmM9ODU5PWNvbnN0IHN0cnVjdCBicGZfbWFwX29wcyBwZXJjcHVfYXJyYXlfbWFwX29wcyA9IHtcXG4tLVxcbmtlcm5lbC9icGYvYXJyYXltYXAuYy04NjctXFx0Lm1hcF9kaXJlY3RfdmFsdWVfYWRkciA9IHBlcmNwdV9hcnJheV9tYXBfZGlyZWN0X3ZhbHVlX2FkZHIsXFxua2VybmVsL2JwZi9hcnJheW1hcC5jOjg2ODpcXHQubWFwX2RpcmVjdF92YWx1ZV9tZXRhID0gcGVyY3B1X2FycmF5X21hcF9kaXJlY3RfdmFsdWVfbWV0YSxcXG5rZXJuZWwvYnBmL2FycmF5bWFwLmMtODY5LVxcdC5tYXBfdXBkYXRlX2VsZW0gPSBhcnJheV9tYXBfdXBkYXRlX2VsZW0sXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDE5OjQzOjQ5LjA3MTYwODY0MloiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2MjYzMzY3NzU0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSBzeW1ib2xzIGFuZCB0aGUgZGlyZWN0aW9uIHRoaXMgYW5hbHlzaXMgaXMgbGlrZWx5IGhlYWRpbmc6XG5cbioqRGl2aW5nIGludG8gQlBGIERpcmVjdCBBY2Nlc3MgYW5kIEtjb25maWcgRGVwZW5kZW5jaWVzKipcblxuQWxyaWdodCwgbXkgaW5pdGlhbCBmb2N1cyBzZWVtcyB0byBiZSBvbiBhIGZldyBzcGVjaWZpYyBCUEYtcmVsYXRlZCBzeW1ib2xzOiBgcGVyY3B1X2FycmF5X21hcF9kaXJlY3RfdmFsdWVfYWRkcmAsIGBwZXJjcHVfYXJyYXlfbWFwX2RpcmVjdF92YWx1ZV9tZXRhYCwgYGJwZl9kb19taXNjX2ZpeHVwc2AsIGFuZCBgYnBmX21hcF9kaXJlY3RfcmVhZGAuIFRoZXNlIG5hbWVzIHN0cm9uZ2x5IHN1Z2dlc3QgSSdtIGRlYWxpbmcgd2l0aCBkaXJlY3QgYWNjZXNzIHRvIHBlci1DUFUgYXJyYXkgbWFwcyB3aXRoaW4gdGhlIEJQRiBmcmFtZXdvcmsuIFRoYXQgXCJkaXJlY3RcIiBrZXl3b3JkIGlzIHRoZSBrZXkgaGVyZS4gSXQgaW1wbGllcyBwb3RlbnRpYWxseSBieXBhc3Npbmcgc29tZSBvZiB0aGUgc3RhbmRhcmQgQlBGIG1hcCBhY2Nlc3MgbWVjaGFuaXNtcywgYW5kIHRoYXQgaW1tZWRpYXRlbHkgZ2V0cyBteSBhdHRlbnRpb24sIHNwZWNpZmljYWxseSByZWdhcmRpbmcgcGVyZm9ybWFuY2UgY29uc2lkZXJhdGlvbnMgYW5kIHBvdGVudGlhbCBzZWN1cml0eSBpbXBsaWNhdGlvbnMgaWYgbm90IGhhbmRsZWQgY29ycmVjdGx5LiBXZSBhcmUsIGVzc2VudGlhbGx5LCB0YWxraW5nIGFib3V0IGZhc3QgZGF0YSBhY2Nlc3MgaW4gdGhlIEJQRiB3b3JsZC5cblxuR2l2ZW4gdGhpcywgYSBjcnVjaWFsIG5leHQgc3RlcCBpcyB0byBleGFtaW5lIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbiwgc3BlY2lmaWNhbGx5IGBDT05GSUdfQlBGX1NZU0NBTExgLiBUaGlzIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGlzIGZ1bmRhbWVudGFsIHRvIGVuYWJsaW5nIEJQRiBzeXN0ZW0gY2FsbHMuIFRoZSBwcmVzZW5jZSBvciBhYnNlbmNlIG9mIHRoYXQgc2V0dGluZyB3aWxsIGRldGVybWluZSB0aGUgZmVhc2liaWxpdHkgb2YgdmFyaW91cyBCUEYgb3BlcmF0aW9ucywgaW5jbHVkaW5nIHRoaXMgZGlyZWN0IGFjY2VzcyBzY2hlbWUuIEknbGwgbmVlZCB0byBjb25maXJtIGlmIHRoaXMgb3B0aW9uIGlzIGVuYWJsZWQuIEkga25vdyBmcm9tIGV4cGVyaWVuY2UgdGhhdCBtYW55IG9mIHRoZXNlIGFkdmFuY2VkIGZlYXR1cmVzIGhpbmdlIG9uIHRoYXQgY29yZSBzZXR0aW5nLiBJdHMgc3RhdGUgd2lsbCBwcm92aWRlIGltbWVkaWF0ZSBjb250ZXh0IG9uIHdoYXQncyBldmVuIHBvc3NpYmxlIHdpdGhpbiB0aGlzIHN5c3RlbS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjczNTIsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQxOTo0Mzo1NS4zMzQ5Nzk2NzZaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3NzQ3NTUzMzYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEJQRl9TWVNDQUxMXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL0tjb25maWc9MjU9bWVudSBcXFwiQlBGIHN1YnN5c3RlbVxcXCJcXG5rZXJuZWwvYnBmL0tjb25maWctMjYtXFxua2VybmVsL2JwZi9LY29uZmlnOjI3OmNvbmZpZyBCUEZfU1lTQ0FMTFxcbmtlcm5lbC9icGYvS2NvbmZpZy0yOC1cXHRib29sIFxcXCJFbmFibGUgYnBmKCkgc3lzdGVtIGNhbGxcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDE5OjQzOjU3LjEwOTc0MDQ3M1oiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2ODI0NTM3ODA2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipJbnZlc3RpZ2F0aW5nIEJQRiBBcnJheU1hcCBDaGFuZ2VzKipcblxuQWxyaWdodCwgbGV0J3Mgc2VlLi4uIHRoZSBwYXRjaCBpbiBxdWVzdGlvbiBpcyB0b3VjaGluZyBga2VybmVsL2JwZi9hcnJheW1hcC5jYC4gVGhhdCBpbW1lZGlhdGVseSBmbGFncyBteSBhdHRlbnRpb24uIFRoaXMgaXMgY29yZSBCUEYgc3R1ZmYsIGFuZCBzcGVjaWZpY2FsbHkgZGVhbGluZyB3aXRoIGFycmF5IG1hcHMg4oCTIGEgZnVuZGFtZW50YWwgZGF0YSBzdHJ1Y3R1cmUuIEFuZCB0aGUgZmlsZSdzIGxvY2F0aW9uIHdpdGhpbiB0aGUga2VybmVsIHRyZWUgcG9pbnRzIHRvIGl0IGJlaW5nIGNvbXBpbGVkIGlmIGBDT05GSUdfQlBGX1NZU0NBTExgIGlzIGVuYWJsZWQuIE1ha2VzIHNlbnNlLiBCdXQgbXkgbWluZCBkcmlmdHMgLSBJJ2Qgd2FudCB0byBxdWlja2x5IGRvdWJsZS1jaGVjazogYW0gSSBtaXNzaW5nIGFueSAqb3RoZXIqIGNvbmZpZ3VyYXRpb25zIHRoYXQgbWlnaHQgaW1wYWN0IG9yIGludGVyYWN0IHdpdGggdGhpcyBjaGFuZ2U/IElzIHRoZXJlIGFueXRoaW5nIGVsc2UgdGhhdCAqY29uZGl0aW9uYWxseSogaW5jbHVkZXMsIG9yIGV4Y2x1ZGVzLCBwb3J0aW9ucyBvZiBgYXJyYXltYXAuY2A/IEdvdHRhIG1ha2Ugc3VyZSBJJ3ZlIGdvdCB0aGUgY29tcGxldGUgcGljdHVyZS4gVGhlIGRlcGVuZGVuY3kgb24gYENPTkZJR19CUEZfU1lTQ0FMTGAgaXMgb2J2aW91cywgYnV0IEknbSBsb29raW5nIGZvciBhbnl0aGluZyBsZXNzIGFwcGFyZW50IHRoYXQgdGhpcyBwYXRjaCAqbWlnaHQqIGJlIGNvdXBsZWQgdG8uIEdvdCB0byBiZSB0aG9yb3VnaC5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjc4MzMsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQxOTo0NDowMy45MzQyODA1MDlaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4NzkzMTQ3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImFycmF5bWFwLm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2JwZi9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi9NYWtlZmlsZT0xMD1vYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IGJwZl9pdGVyLm8gbWFwX2l0ZXIubyB0YXNrX2l0ZXIubyBwcm9nX2l0ZXIubyBsaW5rX2l0ZXIub1xcbmtlcm5lbC9icGYvTWFrZWZpbGU6MTE6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBoYXNodGFiLm8gYXJyYXltYXAubyBwZXJjcHVfZnJlZWxpc3QubyBicGZfbHJ1X2xpc3QubyBscG1fdHJpZS5vIG1hcF9pbl9tYXAubyBibG9vbV9maWx0ZXIub1xcbmtlcm5lbC9icGYvTWFrZWZpbGUtMTItb2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBsb2NhbF9zdG9yYWdlLm8gcXVldWVfc3RhY2tfbWFwcy5vIHJpbmdidWYubyBicGZfaW5zbl9hcnJheS5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDE5OjQ0OjAzLjk4MzA3NjA3NVoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NjMwNDMwNzM4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uXG5cbioqQlBGIFN5c3RlbSBDYWxsIENvbmZpZ3VyYXRpb24gUGF0aCoqXG5cbk15IGZpcnN0IGluc3RpbmN0IGlzIHRvIHplcm8gaW4gb24gYEJQRl9TWVNDQUxMYCDigJMgdGhhdCdzIHRoZSBwcmltYXJ5IGNvbmZpZ3VyYXRpb24gb3B0aW9uLCB0aGUgY2VudHJhbCBjb250cm9sIHBvaW50IGZvciBCUEYgc3lzdGVtIGNhbGxzLiBTZWVtcyBzdHJhaWdodGZvcndhcmQuIEJ1dCwgd2FpdC4uLiBJIG5lZWQgdG8gYmUgbW9yZSBwcmVjaXNlIGFib3V0IHdoZXJlIHRoZSBzdXBwb3J0aW5nIGNvZGUgbGl2ZXMuXG5cbk15IG1pbmQgZmxhc2hlcyB0byBgYnBmX2RvX21pc2NfZml4dXBzYC4gSXQncyBhIGtleSBmdW5jdGlvbiBhbmQgSSByZWNhbGwgaXQgcmVzaWRlcyBpbiBgZml4dXBzLmNgLiBPa2F5LCBzbyBgZml4dXBzLmNgIGhhbmRsZXMgc29tZSBCUEYgdGFza3MgYW5kIGlzIGNvbXBpbGVkIHVuZGVyIGBDT05GSUdfQlBGX1NZU0NBTExgPyBUaGF0IG1ha2VzIHNlbnNlLiBXZSdyZSBrZWVwaW5nIGV2ZXJ5dGhpbmcgcmVsYXRlZCB0byB0aGUgc3lzdGVtIGNhbGwgbmVhdGx5IGFsaWduZWQgd2l0aCB0aGlzIHByaW1hcnkgY29uZmlndXJhdGlvbiBvcHRpb24uXG5cbk5vdywganVzdCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4sIGl0J3Mgd29ydGggYSBxdWljayBjaGVjayBvZiB0aGUgYnVpbGQgcHJvY2Vzcy4gSSB3YW50IHRvIHZlcmlmeSB0aGF0IGBmaXh1cHMub2AgaXMgaW5kZWVkIGJlaW5nIGNvbXBpbGVkIGluIHRoZSByaWdodCBwbGFjZS4gVGltZSB0byBjb25zdWx0IGBrZXJuZWwvYnBmL01ha2VmaWxlYCB0byBjb25maXJtIHdoZXJlIGBmaXh1cHMub2AgZml0cyBpbnRvIHRoZSBidWlsZCBwcm9jZXNzLiBBIHF1aWNrIHNjYW4gc2hvdWxkIGNvbmZpcm0gdGhhdCBsaW5rIGJldHdlZW4gYENPTkZJR19CUEZfU1lTQ0FMTGAgYW5kIGBmaXh1cHMub2Agd2hpY2ggd2lsbCBtYWtlIG1lIGZlZWwgY29uZmlkZW50IHRoYXQgdGhlIHdob2xlIEJQRiBzeXN0ZW0gY2FsbCBzZXR1cCBpcyB1bmRlcnN0b29kLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyODI5NywiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjczLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDE5OjQ0OjA4LjYxMzUwOTQ5NFoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTMxMzI3NTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZml4dXBzLm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2JwZi9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi9NYWtlZmlsZT0xMz1vYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IGJwZl9sb2NhbF9zdG9yYWdlLm8gYnBmX3Rhc2tfc3RvcmFnZS5vXFxua2VybmVsL2JwZi9NYWtlZmlsZToxNDpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IGZpeHVwcy5vIGNmZy5vIHN0YXRlcy5vIGJhY2t0cmFjay5vIGNoZWNrX2J0Zi5vXFxua2VybmVsL2JwZi9NYWtlZmlsZS0xNS1vYmotJHtDT05GSUdfQlBGX0xTTX1cXHQgICs9IGJwZl9pbm9kZV9zdG9yYWdlLm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMTk6NDQ6MDguNjY2NjQ4NzhaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTIyODg5NTk4OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEJQRiBQYXRjaCoqXG5cbk9rYXksIHNvIHRoZSBlc3NlbnRpYWwgY29uZmlndXJhdGlvbiByZXF1aXJlbWVudCBoZXJlIGlzIGRlZmluaXRlbHkgYEJQRl9TWVNDQUxMYC4gVGhhdCdzIHRoZSBiYXNlbGluZS4gTm93LCBsZXQncyBjaXJjbGUgYmFjayB0byB0aGUgY29yZSBzeW1ib2xzIHdlJ3JlIGludGVyZXN0ZWQgaW4uIFdlJ3ZlIGdvdDpcblxuKiAgIGBwZXJjcHVfYXJyYXlfbWFwX2RpcmVjdF92YWx1ZV9hZGRyYFxuKiAgIGBwZXJjcHVfYXJyYXlfbWFwX2RpcmVjdF92YWx1ZV9tZXRhYFxuKiAgIGBicGZfZG9fbWlzY19maXh1cHNgXG4qICAgYGJwZl9tYXBfZGlyZWN0X3JlYWRgXG5cbkhvbGQgb24gYSBzZWNvbmQuLi4gYGJwZl9kb19taXNjX2ZpeHVwc2AuIFJpZ2h0LCB0aGF0J3MgYSAqYmlnKiBmdW5jdGlvbi4gSXQgaGFuZGxlcyBhIGxvdCBvZiBkaWZmZXJlbnQgdGhpbmdzLCBidXQgdGhlIGNyaXRpY2FsIHBhcnQgaGVyZSBpcyB0aGUgY29uZGl0aW9uYWwgYmxvY2sgc3BlY2lmaWNhbGx5IHRhcmdldGluZyBgQlBGX01BUF9UWVBFX1BFUkNQVV9BUlJBWWAuIFRoYXQgbWFrZXMgc2Vuc2U7IHRoZSBwYXRjaCBhZGRzIHNwZWNpYWwgaGFuZGxpbmcgZm9yIHBlcmNwdSBhcnJheXMgd2l0aGluIHRoYXQgYnJvYWRlciBmdW5jdGlvbi4gVGhlIHJlbGV2YW50IGNvZGUgaXMgY2hlY2tpbmcgZm9yIHNwZWNpZmljIGluc3RydWN0aW9uIHBhdHRlcm5zLCBwYXJ0aWN1bGFybHkgYEJQRl9MRCB8IEJQRl9JTU0gfCBCUEZfRFdgIHdpdGggc291cmNlIHJlZ2lzdGVycyBgQlBGX1BTRVVET19NQVBfVkFMVUVgIG9yIGBCUEZfUFNFVURPX01BUF9JRFhfVkFMVUVgLiBJdCB2ZXJpZmllcyB0aGUgbWFwIHR5cGUgYW5kIGp1bXBzIHRvIHRoZSBuZXh0IGluc3RydWN0aW9uIGlmIGl0IGlzbid0IGEgcGVyY3B1IGFycmF5LiBJbmNsdWRpbmcgYGJwZl9kb19taXNjX2ZpeHVwc2AgaXMgY29ycmVjdCwgYmVjYXVzZSBpdCdzIHRoZSBlbnRyeSBwb2ludCB0byB0aGlzIG5ldyBwZXJjcHUgYXJyYXkgbG9naWMuXG5cbkxldCdzIHF1aWNrbHkgY2hlY2sgZm9yIGFueSBvdGhlciBub24tc3RhdGljIGZ1bmN0aW9ucyBiZWluZyBtb2RpZmllZC4gQWhhLCBgYXJyYXlfbWFwX2NoZWNrX2J0ZmAgaXMgdG91Y2hlZCwgYnV0IHRoYXQncyBzdGF0aWMsIHNvIGl0J3Mgbm90IGEgY29uY2Vybi4gQW5kIGBicGZfbWFwX2RpcmVjdF9yZWFkYCBpcyBhbHNvIGdldHRpbmcgbW9kaWZpZWQuXG5cbkFscmlnaHQsIHRvIHJlY2FwLCB0aGUgaW1wb3J0YW50IHN5bWJvbHMgYXJlOlxuXG4qICAgYHBlcmNwdV9hcnJheV9tYXBfZGlyZWN0X3ZhbHVlX2FkZHJgXG4qICAgYHBlcmNwdV9hcnJheV9tYXBfZGlyZWN0X3ZhbHVlX21ldGFgXG4qICAgYGJwZl9kb19taXNjX2ZpeHVwc2BcbiogICBgYnBmX21hcF9kaXJlY3RfcmVhZGBcblxuT25lIGxhc3QgdGhpbmcgdG8gY2hlY2s6IERvZXMgYGJwZl9qaXRfc3VwcG9ydHNfcGVyY3B1X2luc24oKWAgcmVxdWlyZSBgQlBGX0pJVGA/IFRoYXQncyBwcm9iYWJseSBhIGdpdmVuLCBidXQgaXQncyBhbHdheXMgZ29vZCB0byBkb3VibGUtY2hlY2sgdGhlc2UgYXNzdW1wdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI4Nzk1LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDc4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDE5OjQ0OjE3Ljg5NTU0NzQwOVoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTc3MTk4NTM3NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJicGZfaml0X3N1cHBvcnRzX3BlcmNwdV9pbnNuXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYz0zMTc4PWJvb2wgYnBmX2ppdF9zdXBwb3J0c19pbnNuKHN0cnVjdCBicGZfaW5zbiAqaW5zbiwgYm9vbCBpbl9hcmVuYSlcXG4tLVxcbmFyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jLTMxOTEtXFxuYXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmM6MzE5Mjpib29sIGJwZl9qaXRfc3VwcG9ydHNfcGVyY3B1X2luc24odm9pZClcXG5hcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYy0zMTkzLXtcXG4tLVxcbmFyY2gvcG93ZXJwYy9uZXQvYnBmX2ppdF9jb21wLmM9NTU2PWJvb2wgYnBmX2ppdF9zdXBwb3J0c19pbnNuKHN0cnVjdCBicGZfaW5zbiAqaW5zbiwgYm9vbCBpbl9hcmVuYSlcXG4tLVxcbmFyY2gvcG93ZXJwYy9uZXQvYnBmX2ppdF9jb21wLmMtNTcxLVxcbmFyY2gvcG93ZXJwYy9uZXQvYnBmX2ppdF9jb21wLmM6NTcyOmJvb2wgYnBmX2ppdF9zdXBwb3J0c19wZXJjcHVfaW5zbih2b2lkKVxcbmFyY2gvcG93ZXJwYy9uZXQvYnBmX2ppdF9jb21wLmMtNTczLXtcXG4tLVxcbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmM9MjEyND1ib29sIGJwZl9qaXRfc3VwcG9ydHNfaW5zbihzdHJ1Y3QgYnBmX2luc24gKmluc24sIGJvb2wgaW5fYXJlbmEpXFxuLS1cXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jLTIxNDItXFxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYzoyMTQzOmJvb2wgYnBmX2ppdF9zdXBwb3J0c19wZXJjcHVfaW5zbih2b2lkKVxcbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmMtMjE0NC17XFxuLS1cXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM9NDA1Nz1ib29sIGJwZl9qaXRfc3VwcG9ydHNfc3VicHJvZ190YWlsY2FsbHModm9pZClcXG4tLVxcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy00MDYxLVxcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYzo0MDYyOmJvb2wgYnBmX2ppdF9zdXBwb3J0c19wZXJjcHVfaW5zbih2b2lkKVxcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy00MDYzLXtcXG4tLVxcbmluY2x1ZGUvbGludXgvZmlsdGVyLmg9MTE4Mj1ib29sIGJwZl9qaXRfc3VwcG9ydHNfc3VicHJvZ190YWlsY2FsbHModm9pZCk7XFxuaW5jbHVkZS9saW51eC9maWx0ZXIuaDoxMTgzOmJvb2wgYnBmX2ppdF9zdXBwb3J0c19wZXJjcHVfaW5zbih2b2lkKTtcXG5pbmNsdWRlL2xpbnV4L2ZpbHRlci5oLTExODQtYm9vbCBicGZfaml0X3N1cHBvcnRzX2tmdW5jX2NhbGwodm9pZCk7XFxuLS1cXG5rZXJuZWwvYnBmL2FycmF5bWFwLmM9MjYyPXN0YXRpYyBpbnQgcGVyY3B1X2FycmF5X21hcF9kaXJlY3RfdmFsdWVfYWRkcihjb25zdCBzdHJ1Y3QgYnBmX21hcCAqbWFwLCB1NjQgKmltbSwgdTMyIG9mZilcXG4tLVxcbmtlcm5lbC9icGYvYXJyYXltYXAuYy0yNjUtXFxua2VybmVsL2JwZi9hcnJheW1hcC5jOjI2NjpcXHRpZiAoIWJwZl9qaXRfc3VwcG9ydHNfcGVyY3B1X2luc24oKSlcXG5rZXJuZWwvYnBmL2FycmF5bWFwLmMtMjY3LVxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4tLVxcbmtlcm5lbC9icGYvYXJyYXltYXAuYz0yNzc9c3RhdGljIGludCBwZXJjcHVfYXJyYXlfbWFwX2RpcmVjdF92YWx1ZV9tZXRhKGNvbnN0IHN0cnVjdCBicGZfbWFwICptYXAsIHU2NCBpbW0sIHUzMiAqb2ZmKVxcbi0tXFxua2VybmVsL2JwZi9hcnJheW1hcC5jLTI4MS1cXG5rZXJuZWwvYnBmL2FycmF5bWFwLmM6MjgyOlxcdGlmICghYnBmX2ppdF9zdXBwb3J0c19wZXJjcHVfaW5zbigpKVxcbmtlcm5lbC9icGYvYXJyYXltYXAuYy0yODMtXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbi0tXFxua2VybmVsL2JwZi9hcnJheW1hcC5jPTI5ND1zdGF0aWMgaW50IHBlcmNwdV9hcnJheV9tYXBfZ2VuX2xvb2t1cChzdHJ1Y3QgYnBmX21hcCAqbWFwLCBzdHJ1Y3QgYnBmX2luc24gKmluc25fYnVmKVxcbi0tXFxua2VybmVsL2JwZi9hcnJheW1hcC5jLTI5OC1cXG5rZXJuZWwvYnBmL2FycmF5bWFwLmM6Mjk5OlxcdGlmICghYnBmX2ppdF9zdXBwb3J0c19wZXJjcHVfaW5zbigpKVxcbmtlcm5lbC9icGYvYXJyYXltYXAuYy0zMDAtXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbi0tXFxua2VybmVsL2JwZi9jb3JlLmM9MzI5MT1ib29sIF9fd2VhayBicGZfaml0X3N1cHBvcnRzX3N1YnByb2dfdGFpbGNhbGxzKHZvaWQpXFxuLS1cXG5rZXJuZWwvYnBmL2NvcmUuYy0zMjk1LVxcbmtlcm5lbC9icGYvY29yZS5jOjMyOTY6Ym9vbCBfX3dlYWsgYnBmX2ppdF9zdXBwb3J0c19wZXJjcHVfaW5zbih2b2lkKVxcbmtlcm5lbC9icGYvY29yZS5jLTMyOTcte1xcbi0tXFxua2VybmVsL2JwZi9maXh1cHMuYz0xNDc5PWludCBicGZfZG9fbWlzY19maXh1cHMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcXG4tLVxcbmtlcm5lbC9icGYvZml4dXBzLmMtMTgxOS1cXG5rZXJuZWwvYnBmL2ZpeHVwcy5jOjE4MjA6XFx0XFx0aWYgKGJwZl9qaXRfc3VwcG9ydHNfcGVyY3B1X2luc24oKSBcXHUwMDI2XFx1MDAyNlxcbmtlcm5lbC9icGYvZml4dXBzLmMtMTgyMS1cXHRcXHQgICAgaW5zbi1cXHUwMDNlY29kZSA9PSAoQlBGX0xEIHwgQlBGX0lNTSB8IEJQRl9EVykgXFx1MDAyNlxcdTAwMjZcXG4tLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jPTI0MTQ9c3RhdGljIGludCBodGFiX3BlcmNwdV9tYXBfZ2VuX2xvb2t1cChzdHJ1Y3QgYnBmX21hcCAqbWFwLCBzdHJ1Y3QgYnBmX2luc24gKmluc25fYnVmKVxcbi0tXFxua2VybmVsL2JwZi9oYXNodGFiLmMtMjQxNy1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzoyNDE4OlxcdGlmICghYnBmX2ppdF9zdXBwb3J0c19wZXJjcHVfaW5zbigpKVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTI0MTktXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTE2Nzk4PWJvb2wgYnBmX3ZlcmlmaWVyX2lubGluZXNfaGVscGVyX2NhbGwoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgczMyIGltbSlcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNjgwNi0jZW5kaWZcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTY4MDc6XFx0XFx0cmV0dXJuIGVudi1cXHUwMDNlcHJvZy1cXHUwMDNlaml0X3JlcXVlc3RlZCBcXHUwMDI2XFx1MDAyNiBicGZfaml0X3N1cHBvcnRzX3BlcmNwdV9pbnNuKCk7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE2ODA4LSNlbmRpZlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQxOTo0NDoxOS42Njc1Mzc2MTZaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDIxMzYzMjA4OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGFzIGlmIHRoZXkgd2VyZSBteSBvd246XG5cbioqSW52ZXN0aWdhdGluZyBCUEYgSklUIFN1cHBvcnQqKlxuXG5SaWdodCwgc28gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGBCUEZfSklUYCBhbmQgYGJwZl9qaXRfc3VwcG9ydHNfcGVyY3B1X2luc24oKWAuIEl0IHNlZW1zIHRoYXQgdGhlIGxhdHRlciwgd2hpY2ggaW5kaWNhdGVzIHN1cHBvcnQgZm9yIHBlci1DUFUgaW5zdHJ1Y3Rpb24gSklULCByZWxpZXMgb24gdGhlIGZvcm1lciDigJMgYEJQRl9KSVRgIOKAkyB0byBiZSBlbmFibGVkIG9uIGFyY2hpdGVjdHVyZXMgdGhhdCBvZmZlciB0aGlzIGNhcGFiaWxpdHkuXG5cblRoZXJlZm9yZSwgdGhlIG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIHF1aWNrbHkgZGV0ZXJtaW5lIHdoZXRoZXIgYENPTkZJR19CUEZfSklUYCBpcyBldmVuIGEgKnJlcXVpcmVkKiBjb25maWd1cmF0aW9uIG9wdGlvbiBpbiB0aGlzIGNvbnRleHQuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgaGFwcGVucyBpZiBpdCdzIGRpc2FibGVkLiBXaGF0IGFyZSB0aGUgaW1wbGljYXRpb25zPyBEb2VzIGRpc2FibGluZyBpdCByZW1vdmUgdGhlIGNhcGFiaWxpdHkgdG8gdXNlIHRoZSBwZXItQ1BVIEpJVCBmdW5jdGlvbmFsaXR5PyBJJ20gZ29pbmcgdG8gbG9vayBpbnRvIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgYW5kIGNvZGUgYmFzZSB0byBnZXQgdGhlIGZ1bGwgcGljdHVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzEyNzgsIk91dHB1dFRva2VucyI6MjYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQxOTo0NDoyMy44ODExNzM0OTNaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2Mjg4OTE5MzcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEJQRl9KSVRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvS2NvbmZpZz0yNz1jb25maWcgQlBGX1NZU0NBTExcXG4tLVxcbmtlcm5lbC9icGYvS2NvbmZpZy00MS1cXG5rZXJuZWwvYnBmL0tjb25maWc6NDI6Y29uZmlnIEJQRl9KSVRcXG5rZXJuZWwvYnBmL0tjb25maWctNDMtXFx0Ym9vbCBcXFwiRW5hYmxlIEJQRiBKdXN0IEluIFRpbWUgY29tcGlsZXJcXFwiXFxuLS1cXG5rZXJuZWwvYnBmL0tjb25maWctNTctXFxua2VybmVsL2JwZi9LY29uZmlnOjU4OmNvbmZpZyBCUEZfSklUX0FMV0FZU19PTlxcbmtlcm5lbC9icGYvS2NvbmZpZy01OS1cXHRib29sIFxcXCJQZXJtYW5lbnRseSBlbmFibGUgQlBGIEpJVCBhbmQgcmVtb3ZlIEJQRiBpbnRlcnByZXRlclxcXCJcXG4tLVxcbmtlcm5lbC9icGYvS2NvbmZpZy02OC1cXG5rZXJuZWwvYnBmL0tjb25maWc6Njk6Y29uZmlnIEJQRl9KSVRfREVGQVVMVF9PTlxcbmtlcm5lbC9icGYvS2NvbmZpZy03MC1cXHRkZWZfYm9vbCBBUkNIX1dBTlRfREVGQVVMVF9CUEZfSklUIHx8IEJQRl9KSVRfQUxXQVlTX09OXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDE5OjQ0OjI1LjUxMDA3MDAxWiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ4Nzc5OTA2MDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgUmVhc29uaW5nIG9uIEJQRiBKSVQgUmVxdWlyZW1lbnRzKipcblxuT2theSwgc28gSSBuZWVkIHRvIG1ha2Ugc3VyZSBgQlBGX0pJVGAgaXMgZW5hYmxlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgY29kZS4gVGhlIGNydXggb2YgdGhlIG1hdHRlciBpcyB0aGF0IGBicGZfaml0X3N1cHBvcnRzX3BlcmNwdV9pbnNuKClgIHdpbGwgZXZhbHVhdGUgdG8gZmFsc2UgdW5sZXNzIHRoZSBKSVQgaXMgZW5hYmxlZC4gR2l2ZW4gdGhhdCB3ZSdyZSBvbiB4ODZfNjQsIGFyY2hpdGVjdHVyYWwgc3VwcG9ydCBzaG91bGRuJ3QgYmUgdGhlIGlzc3VlOyBpdCdzIGFsbW9zdCBjZXJ0YWlubHkgYSBKSVQgZW5hYmxlbWVudCBwcm9ibGVtLiBJIHNob3VsZCBjb25maXJtIHRoYXQgYGJwZl9qaXRfc3VwcG9ydHNfcGVyY3B1X2luc25gIGlzIGRlZmluZWQgaW4gYGFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuY2AsIHdoaWNoLCBhcyBJIHJlY2FsbCwgaXMgb25seSBjb21waWxlZCB3aGVuIGBDT05GSUdfQlBGX0pJVGAgaXMgc2V0LiBUbyBlbnN1cmUgdGhhdCdzIHRoZSBjYXNlLCBJIHNob3VsZCBjb25maXJtIHRoZSBkZXBlbmRlbmN5IGluIHRoZSBidWlsZCBwcm9jZXNzIHZpYSBgYXJjaC94ODYvbmV0L01ha2VmaWxlYC4gTGV0IG1lIGNoZWNrIHRoYXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMxNzcyLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDE5OjQ0OjMwLjM4ODA2MzExMVoiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDcxMDQyMjcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYnBmX2ppdF9jb21wLm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC94ODYvbmV0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9uZXQvTWFrZWZpbGU9OD1lbHNlXFxuYXJjaC94ODYvbmV0L01ha2VmaWxlOjk6ICAgICAgICBvYmotJChDT05GSUdfQlBGX0pJVCkgKz0gYnBmX2ppdF9jb21wLm8gYnBmX3RpbWVkX21heV9nb3RvLm9cXG5hcmNoL3g4Ni9uZXQvTWFrZWZpbGUtMTAtZW5kaWZcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMTk6NDQ6MzAuNDM1MTcwOTY3WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQyNTE4MTM4NzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gYXMgYSBmaXJzdC1wZXJzb24gYWNjb3VudDpcblxuKipCUEYgSklUIGFuZCBCVEYgUmVxdWlyZW1lbnRzKipcblxuQWxyaWdodCwgSSBzZWUgdGhlIG5lZWQgdG8gdXRpbGl6ZSB0aGUgQlBGIEpJVCwgdGhhdCdzIGNsZWFyLiBOb3csIHdpdGggdGhlIHBhdGNoIG1vZGlmeWluZyBgYXJyYXlfbWFwX2NoZWNrX2J0ZmAgdG8gcGVybWl0IGAucGVyY3B1YCBtYXBzLCBJIGhhdmUgdG8gY29uc2lkZXIgdGhlIGBDT05GSUdfREVCVUdfSU5GT19CVEZgIHJlcXVpcmVtZW50LiBHaXZlbiB0aGUgY2hhbmdlLCB3aGljaCBlbmFibGVzIGAucGVyY3B1YCBtYXBzLCBJJ2Qgc2F5IHRoYXQgQlRGIGlzIHByb2JhYmx5IGEgbm9uLW5lZ290aWFibGUgcmVxdWlyZW1lbnQgaGVyZS4gVGhpcyBtb2RpZmljYXRpb24gdG8gYGFycmF5X21hcF9jaGVja19idGZgIG1lYW5zIHdlIGFyZSBwcm9iYWJseSBkZWFsaW5nIHdpdGggZ2xvYmFsIGRhdGEgbWFwcywgd2hpY2gsIGFzIHdlIGtub3csIGFyZSBoZWF2aWx5IHJlbGlhbnQgb24gQlRGIGZvciBjb3JyZWN0IHR5cGUgaW5mb3JtYXRpb24gYW5kIGhhbmRsaW5nLiBTbywgeWVhaCwgQlRGIGlzIGFsbW9zdCBjZXJ0YWlubHkgZ29pbmcgdG8gYmUgbmVlZGVkIGZvciB0aGlzIHRvIGZ1bmN0aW9uIGFzIGludGVuZGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMjIxOCwiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDE5OjQ0OjM0LjY4Njk4NzMyMloiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTYzMTQxODM1NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgREVCVUdfSU5GT19CVEZcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImxpYi9LY29uZmlnLmRlYnVnPTM3OD1jb25maWcgREVCVUdfSU5GT19TUExJVFxcbi0tXFxubGliL0tjb25maWcuZGVidWctMzk3LVxcbmxpYi9LY29uZmlnLmRlYnVnOjM5ODpjb25maWcgREVCVUdfSU5GT19CVEZcXG5saWIvS2NvbmZpZy5kZWJ1Zy0zOTktXFx0Ym9vbCBcXFwiR2VuZXJhdGUgQlRGIHR5cGUgaW5mb3JtYXRpb25cXFwiXFxuLS1cXG5saWIvS2NvbmZpZy5kZWJ1Zz00MTk9Y29uZmlnIFBBSE9MRV9IQVNfTEFOR19FWENMVURFXFxuLS1cXG5saWIvS2NvbmZpZy5kZWJ1Zy00MjctXFxubGliL0tjb25maWcuZGVidWc6NDI4OmNvbmZpZyBERUJVR19JTkZPX0JURl9NT0RVTEVTXFxubGliL0tjb25maWcuZGVidWctNDI5LVxcdGJvb2wgXFxcIkdlbmVyYXRlIEJURiB0eXBlIGluZm9ybWF0aW9uIGZvciBrZXJuZWwgbW9kdWxlc1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMTk6NDQ6MzYuMzE4NDExMjM5WiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjExNTYxMTIxODg3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEJQRiBGdXp6aW5nIENvbmZpZ3VyYXRpb24gQXNzZXNzbWVudCoqXG5cbk9rYXksIHNvIEknbSB0aGlua2luZyBhYm91dCB0aGUgYmVzdCB3YXkgdG8gYXBwcm9hY2ggZnV6emluZyB0aGlzIHBhdGNoLiBXaGlsZSBgREVCVUdfSU5GT19CVEZgIGlzIHVzdWFsbHkgZ29vZCBmb3IgQlRGIHRlc3RzLCBpdCdzIG5vdCB0aGUgcHJpbWFyeSBjb25jZXJuIGhlcmUuIGBCUEZfU1lTQ0FMTGAgYW5kIGBCUEZfSklUYCBhcmUgZGVmaW5pdGVseSB0aGUgY29yZSBjb25maWd1cmF0aW9ucyB0byBlbmFibGUuIExldCdzIG1ha2Ugc3VyZSB3ZSBpbmNsdWRlIHRob3NlOlxuXG4qICAgYEJQRl9TWVNDQUxMYFxuKiAgIGBCUEZfSklUYFxuXG5Ob3csIHJlZ2FyZGluZyBmb2N1cyBzeW1ib2xzLCBJJ3ZlIGdvdCB0byBlbnN1cmUgdGhlIGZ1enppbmcgaXMgaGl0dGluZyB0aGUgcmlnaHQgY29kZS4gSSdtIGZvY3VzaW5nIG9uIHRoZXNlIGZvciBzdGFydGVyczpcblxuKiAgIGBwZXJjcHVfYXJyYXlfbWFwX2RpcmVjdF92YWx1ZV9hZGRyYFxuKiAgIGBwZXJjcHVfYXJyYXlfbWFwX2RpcmVjdF92YWx1ZV9tZXRhYFxuKiAgIGBicGZfZG9fbWlzY19maXh1cHNgXG4qICAgYGJwZl9tYXBfZGlyZWN0X3JlYWRgXG5cbkhvbGQgb24sIEkgd2FzIGp1c3QgdGhpbmtpbmcgdGhhdCBgYnBmX2RvX21pc2NfZml4dXBzYCBzZWVtcyBhIGxpdHRsZSBnZW5lcmFsLiBJcyB0aGVyZSBhIG1vcmUgc3BlY2lmaWMgZnVuY3Rpb24gdG8gdGFyZ2V0PyBUaGUgcGF0Y2ggaW50cm9kdWNlcyBgY2hlY2tfbWFwX21lbV9yZWFkYCwgd2hpY2ggaXMgc3RhdGljLCBhbmQgY2FsbGVkIGZyb20gYGNoZWNrX21lbV9hY2Nlc3NgLiBTbyBJIHdpbGwgaW5jbHVkZSBgYnBmX2RvX21pc2NfZml4dXBzYCBhbmQgYGJwZl9tYXBfZGlyZWN0X3JlYWRgLlxuXG5JJ2xsIGRvdWJsZS1jaGVjayBgcGVyY3B1X2FycmF5X21hcF9kaXJlY3RfdmFsdWVfYWRkcmAuIFllcywgaXQncyBzdGF0aWMgaW4gYGtlcm5lbC9icGYvYXJyYXltYXAuY2AsIGJ1dCBpdCdzIGFzc2lnbmVkIHRvIGEgZnVuY3Rpb24gcG9pbnRlciB3aGljaCBtZWFucyBpdCB3b24ndCBiZSBpbmxpbmVkLiBTaW5jZSBpdCBoYXMgYSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzcywgaXQncyBwZXJmZWN0IGZvciBpbmNsdXNpb24uXG5cbkFsc28sIGp1c3QgdG8gYmUgdGhvcm91Z2gsIEkgc2hvdWxkIGNoZWNrIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgbm9uLXN0YXRpYyBmdW5jdGlvbnMuIGBicGZfbWFwX2RpcmVjdF9yZWFkYCBpcyBub24tc3RhdGljLlxuXG5BbHJpZ2h0LCBJIHRoaW5rIEknbSBoYXBweSB3aXRoIHRoaXMuIE15IGNvbmNsdXNpb24gaXM6XG5cbiogICAqKldvcnRoRnV6emluZzoqKiBgdHJ1ZWBcbiogICAqKkZvY3VzU3ltYm9sczoqKlxuICAgICogICBgcGVyY3B1X2FycmF5X21hcF9kaXJlY3RfdmFsdWVfYWRkcmBcbiAgICAqICAgYHBlcmNwdV9hcnJheV9tYXBfZGlyZWN0X3ZhbHVlX21ldGFgXG4gICAgKiAgIGBicGZfZG9fbWlzY19maXh1cHNgXG4gICAgKiAgIGBicGZfbWFwX2RpcmVjdF9yZWFkYFxuKiAgICoqRW5hYmxlQ29uZmlnczoqKlxuICAgICogICBgQlBGX1NZU0NBTExgXG4gICAgKiAgIGBCUEZfSklUYFxuXG5KdXN0IHRvIGJlIGFic29sdXRlbHkgY2VydGFpbiwgSSdsbCBxdWlja2x5IHZlcmlmeSB0aGF0IGBicGZfbWFwX2RpcmVjdF9yZWFkYCBpcyBpbmRlZWQgbm9uLXN0YXRpYy4gWWVwLCBpdCdzIGV4cG9ydGVkIGluIGBrZXJuZWwvYnBmL3ZlcmlmaWVyLmNgLlxuXG5GaW5hbGx5LCBJIHdpbGwgY2hlY2sgd2hldGhlciBgQlBGX0pJVGAgaXMgZW5vdWdoIG9yIGlmIHdlIG5lZWQgc29tZXRoaW5nIGVsc2UuIGBCUEZfU1lTQ0FMTGAgYW5kIGBCUEZfSklUYCBhcmUgc3RhbmRhcmQgZm9yIEJQRiBmdXp6aW5nLlxuXG5NeSByZWFzb25pbmcgaXMgdGhpczogVGhpcyBwYXRjaCBpbnRyb2R1Y2VzIHN1cHBvcnQgZm9yIGAucGVyY3B1YCBnbG9iYWwgZGF0YSBtYXBzIGluIEJQRi4gSXQgbW9kaWZpZXMgdGhlIEJQRiB2ZXJpZmllciB0byBoYW5kbGUgZGlyZWN0IG1lbW9yeSByZWFkcyBmcm9tIGBCUEZfTUFQX1RZUEVfUEVSQ1BVX0FSUkFZYCBtYXBzIGFuZCBhZGRzIEpJVCBmaXh1cHMgdG8gcGF0Y2ggYGxkX2ltbTY0YCBpbnN0cnVjdGlvbnMgd2l0aCBwZXItQ1BVIHJlZ2lzdGVyIG1vdmVzLiBUaGVzZSBhcmUgZnVuZGFtZW50YWwgY2hhbmdlcyB0byB0aGUgY29yZSBCUEYgc3Vic3lzdGVtIGFuZCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBtZW1vcnkgc2FmZXR5IGFuZCBjb3JyZWN0IHZlcmlmaWVyIGJlaGF2aW9yLiBJdCdzIGEgY2xlYXIgd2luLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMjY2NiwiT3V0cHV0VG9rZW5zIjoxOTEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NzQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMTk6NDQ6NDcuODc5NTM2OTA1WiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Nzg1Mzc1MzUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9TWVNDQUxMXCIsXG4gICAgXCJCUEZfSklUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwicGVyY3B1X2FycmF5X21hcF9kaXJlY3RfdmFsdWVfYWRkclwiLFxuICAgIFwicGVyY3B1X2FycmF5X21hcF9kaXJlY3RfdmFsdWVfbWV0YVwiLFxuICAgIFwiYnBmX2RvX21pc2NfZml4dXBzXCIsXG4gICAgXCJicGZfbWFwX2RpcmVjdF9yZWFkXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBzdXBwb3J0IGZvciBgLnBlcmNwdWAgZ2xvYmFsIGRhdGEgbWFwcyBpbiBCUEYuIEl0IG1vZGlmaWVzIHRoZSBCUEYgdmVyaWZpZXIgdG8gaGFuZGxlIGRpcmVjdCBtZW1vcnkgcmVhZHMgZnJvbSBgQlBGX01BUF9UWVBFX1BFUkNQVV9BUlJBWWAgbWFwcyBhbmQgYWRkcyBKSVQgZml4dXBzIHRvIHBhdGNoIGBsZF9pbW02NGAgaW5zdHJ1Y3Rpb25zIHdpdGggcGVyLUNQVSByZWdpc3RlciBtb3Zlcy4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUgY29yZSBCUEYgc3Vic3lzdGVtIGFuZCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBtZW1vcnkgc2FmZXR5IGFuZCBjb3JyZWN0IHZlcmlmaWVyIGJlaGF2aW9yLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9TWVNDQUxMXCIsXG4gICAgXCJCUEZfSklUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwicGVyY3B1X2FycmF5X21hcF9kaXJlY3RfdmFsdWVfYWRkclwiLFxuICAgIFwicGVyY3B1X2FycmF5X21hcF9kaXJlY3RfdmFsdWVfbWV0YVwiLFxuICAgIFwiYnBmX2RvX21pc2NfZml4dXBzXCIsXG4gICAgXCJicGZfbWFwX2RpcmVjdF9yZWFkXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBzdXBwb3J0IGZvciBgLnBlcmNwdWAgZ2xvYmFsIGRhdGEgbWFwcyBpbiBCUEYuIEl0IG1vZGlmaWVzIHRoZSBCUEYgdmVyaWZpZXIgdG8gaGFuZGxlIGRpcmVjdCBtZW1vcnkgcmVhZHMgZnJvbSBgQlBGX01BUF9UWVBFX1BFUkNQVV9BUlJBWWAgbWFwcyBhbmQgYWRkcyBKSVQgZml4dXBzIHRvIHBhdGNoIGBsZF9pbW02NGAgaW5zdHJ1Y3Rpb25zIHdpdGggcGVyLUNQVSByZWdpc3RlciBtb3Zlcy4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUgY29yZSBCUEYgc3Vic3lzdGVtIGFuZCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBtZW1vcnkgc2FmZXR5IGFuZCBjb3JyZWN0IHZlcmlmaWVyIGJlaGF2aW9yLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflowqkzn6[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-06 19:40:48 +0000 UTC FinishedAt: 2026-08-06 19:44:49 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "11c1e836710dcba03e50454a4eedfdbaf8d3050e", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL", "BPF_JIT" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "11c1e836710dcba03e50454a4eedfdbaf8d3050e", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL", "BPF_JIT" ], "series_id": "6985708a-edac-4791-8132-bf1f0839f3d2" }, "track": "KASAN", "fuzz": { "focus": [ "bpf" ], "focus_symbols": [ "percpu_array_map_direct_value_addr", "percpu_array_map_direct_value_meta", "bpf_do_misc_fixups", "bpf_map_direct_read" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDE5OjQyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDssCiAgICAmIzM0O0JQRl9KSVQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtwZXJjcHVfYXJyYXlfbWFwX2RpcmVjdF92YWx1ZV9hZGRyJiMzNDssCiAgICAmIzM0O3BlcmNwdV9hcnJheV9tYXBfZGlyZWN0X3ZhbHVlX21ldGEmIzM0OywKICAgICYjMzQ7YnBmX2RvX21pc2NfZml4dXBzJiMzNDssCiAgICAmIzM0O2JwZl9tYXBfZGlyZWN0X3JlYWQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBzdXBwb3J0IGZvciBgLnBlcmNwdWAgZ2xvYmFsIGRhdGEgbWFwcyBpbiBCUEYuIEl0IG1vZGlmaWVzIHRoZSBCUEYgdmVyaWZpZXIgdG8gaGFuZGxlIGRpcmVjdCBtZW1vcnkgcmVhZHMgZnJvbSBgQlBGX01BUF9UWVBFX1BFUkNQVV9BUlJBWWAgbWFwcyBhbmQgYWRkcyBKSVQgZml4dXBzIHRvIHBhdGNoIGBsZF9pbW02NGAgaW5zdHJ1Y3Rpb25zIHdpdGggcGVyLUNQVSByZWdpc3RlciBtb3Zlcy4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUgY29yZSBCUEYgc3Vic3lzdGVtIGFuZCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBtZW1vcnkgc2FmZXR5IGFuZCBjb3JyZWN0IHZlcmlmaWVyIGJlaGF2aW9yLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDE5OjQyPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgZDE1MWQzZDA5MzJhMzMxYzNlZjM4OWY4NjY3ODFhYTk1OGViODM5ZFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgQXVnIDYgMTk6NDI6MjAgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9hcnJheW1hcC5jIGIva2VybmVsL2JwZi9hcnJheW1hcC5jXG5pbmRleCAyNDhiNDgxODE3OGNkLi4zNDg2NTcwMWY3Zjc1IDEwMDY0NFxuLS0tIGEva2VybmVsL2JwZi9hcnJheW1hcC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvYnBmL2FycmF5bWFwLmNcbkBAIC0yNTksNiAmIzQzOzI1OSwzNyBAQCBzdGF0aWMgdm9pZCAqcGVyY3B1X2FycmF5X21hcF9sb29rdXBfZWxlbShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXkpXG4gXHRyZXR1cm4gdGhpc19jcHVfcHRyKGFycmF5LVx1MDAzZXBwdHJzW2luZGV4IFx1MDAyNiBhcnJheS1cdTAwM2VpbmRleF9tYXNrXSk7XG4gfVxuIFxuJiM0MztzdGF0aWMgaW50IHBlcmNwdV9hcnJheV9tYXBfZGlyZWN0X3ZhbHVlX2FkZHIoY29uc3Qgc3RydWN0IGJwZl9tYXAgKm1hcCwgdTY0ICppbW0sIHUzMiBvZmYpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgYnBmX2FycmF5ICphcnJheSA9IGNvbnRhaW5lcl9vZihtYXAsIHN0cnVjdCBicGZfYXJyYXksIG1hcCk7XG4mIzQzO1xuJiM0MztcdGlmICghYnBmX2ppdF9zdXBwb3J0c19wZXJjcHVfaW5zbigpKVxuJiM0MztcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuJiM0MztcdGlmIChtYXAtXHUwMDNlbWF4X2VudHJpZXMgIT0gMSlcbiYjNDM7XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiYjNDM7XHRpZiAob2ZmIFx1MDAzZT0gbWFwLVx1MDAzZXZhbHVlX3NpemUpXG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XG4mIzQzO1x0KmltbSA9ICh1NjQpKF9fZm9yY2UgdW5zaWduZWQgbG9uZykgYXJyYXktXHUwMDNlcHB0cnNbMF07XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgcGVyY3B1X2FycmF5X21hcF9kaXJlY3RfdmFsdWVfbWV0YShjb25zdCBzdHJ1Y3QgYnBmX21hcCAqbWFwLCB1NjQgaW1tLCB1MzIgKm9mZilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBicGZfYXJyYXkgKmFycmF5ID0gY29udGFpbmVyX29mKG1hcCwgc3RydWN0IGJwZl9hcnJheSwgbWFwKTtcbiYjNDM7XHR1NjQgYmFzZSA9ICh1NjQpKF9fZm9yY2UgdW5zaWduZWQgbG9uZykgYXJyYXktXHUwMDNlcHB0cnNbMF07XG4mIzQzO1xuJiM0MztcdGlmICghYnBmX2ppdF9zdXBwb3J0c19wZXJjcHVfaW5zbigpKVxuJiM0MztcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuJiM0MztcdGlmIChtYXAtXHUwMDNlbWF4X2VudHJpZXMgIT0gMSlcbiYjNDM7XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiYjNDM7XHRpZiAoaW1tIFx1MDAzYyBiYXNlIHx8IGltbSBcdTAwM2U9IGJhc2UgJiM0MzsgYXJyYXktXHUwMDNlZWxlbV9zaXplKVxuJiM0MztcdFx0cmV0dXJuIC1FTk9FTlQ7XG4mIzQzO1xuJiM0MztcdCpvZmYgPSBpbW0gLSBiYXNlO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuIC8qIGVtaXQgQlBGIGluc3RydWN0aW9ucyBlcXVpdmFsZW50IHRvIEMgY29kZSBvZiBwZXJjcHVfYXJyYXlfbWFwX2xvb2t1cF9lbGVtKCkgKi9cbiBzdGF0aWMgaW50IHBlcmNwdV9hcnJheV9tYXBfZ2VuX2xvb2t1cChzdHJ1Y3QgYnBmX21hcCAqbWFwLCBzdHJ1Y3QgYnBmX2luc24gKmluc25fYnVmKVxuIHtcbkBAIC01NTEsOSAmIzQzOzU4MiwxMCBAQCBzdGF0aWMgaW50IGFycmF5X21hcF9jaGVja19idGYoc3RydWN0IGJwZl9tYXAgKm1hcCxcbiBcdFx0XHQgICAgICAgY29uc3Qgc3RydWN0IGJ0Zl90eXBlICprZXlfdHlwZSxcbiBcdFx0XHQgICAgICAgY29uc3Qgc3RydWN0IGJ0Zl90eXBlICp2YWx1ZV90eXBlKVxuIHtcbi1cdC8qIE9uZSBleGNlcHRpb24gZm9yIGtleWxlc3MgQlRGOiAuYnNzLy5kYXRhLy5yb2RhdGEgbWFwICovXG4mIzQzO1x0LyogT25lIGV4Y2VwdGlvbiBmb3Iga2V5bGVzcyBCVEY6IC5ic3MvLmRhdGEvLnJvZGF0YS8ucGVyY3B1IG1hcCAqL1xuIFx0aWYgKGJ0Zl90eXBlX2lzX3ZvaWQoa2V5X3R5cGUpKSB7XG4tXHRcdGlmIChtYXAtXHUwMDNlbWFwX3R5cGUgIT0gQlBGX01BUF9UWVBFX0FSUkFZIHx8XG4mIzQzO1x0XHRpZiAoKG1hcC1cdTAwM2VtYXBfdHlwZSAhPSBCUEZfTUFQX1RZUEVfQVJSQVkgXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHQgICAgIG1hcC1cdTAwM2VtYXBfdHlwZSAhPSBCUEZfTUFQX1RZUEVfUEVSQ1BVX0FSUkFZKSB8fFxuIFx0XHQgICAgbWFwLVx1MDAzZW1heF9lbnRyaWVzICE9IDEpXG4gXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG5AQCAtODMyLDYgJiM0Mzs4NjQsOCBAQCBjb25zdCBzdHJ1Y3QgYnBmX21hcF9vcHMgcGVyY3B1X2FycmF5X21hcF9vcHMgPSB7XG4gXHQubWFwX2dldF9uZXh0X2tleSA9IGJwZl9hcnJheV9nZXRfbmV4dF9rZXksXG4gXHQubWFwX2xvb2t1cF9lbGVtID0gcGVyY3B1X2FycmF5X21hcF9sb29rdXBfZWxlbSxcbiBcdC5tYXBfZ2VuX2xvb2t1cCA9IHBlcmNwdV9hcnJheV9tYXBfZ2VuX2xvb2t1cCxcbiYjNDM7XHQubWFwX2RpcmVjdF92YWx1ZV9hZGRyID0gcGVyY3B1X2FycmF5X21hcF9kaXJlY3RfdmFsdWVfYWRkcixcbiYjNDM7XHQubWFwX2RpcmVjdF92YWx1ZV9tZXRhID0gcGVyY3B1X2FycmF5X21hcF9kaXJlY3RfdmFsdWVfbWV0YSxcbiBcdC5tYXBfdXBkYXRlX2VsZW0gPSBhcnJheV9tYXBfdXBkYXRlX2VsZW0sXG4gXHQubWFwX2RlbGV0ZV9lbGVtID0gYXJyYXlfbWFwX2RlbGV0ZV9lbGVtLFxuIFx0Lm1hcF9sb29rdXBfcGVyY3B1X2VsZW0gPSBwZXJjcHVfYXJyYXlfbWFwX2xvb2t1cF9wZXJjcHVfZWxlbSxcbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL2JhY2t0cmFjay5jIGIva2VybmVsL2JwZi9iYWNrdHJhY2suY1xuaW5kZXggMmY0NzNhZDRmZDdjMS4uM2YxNTBlODU4YWU4YSAxMDA2NDRcbi0tLSBhL2tlcm5lbC9icGYvYmFja3RyYWNrLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9icGYvYmFja3RyYWNrLmNcbkBAIC0yMTQsNyAmIzQzOzIxNCw2IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBidF9pc19yZWdfc2V0KHN0cnVjdCBiYWNrdHJhY2tfc3RhdGUgKmJ0LCB1MzIgcmVnKVxuIFx0cmV0dXJuIGJ0LVx1MDAzZXJlZ19tYXNrc1tidC1cdTAwM2VmcmFtZV0gXHUwMDI2ICgxIFx1MDAzY1x1MDAzYyByZWcpO1xuIH1cbiBcbi1cbiAvKiBmb3JtYXQgcmVnaXN0ZXJzIGJpdG1hc2ssIGUuZy4sIFwmIzM0O3IwLHIyLHI0XCYjMzQ7IGZvciAweDE1IG1hc2sgKi9cbiBzdGF0aWMgdm9pZCBmbXRfcmVnX21hc2soY2hhciAqYnVmLCBzc2l6ZV90IGJ1Zl9zeiwgdTMyIHJlZ19tYXNrKVxuIHtcbkBAIC0yNTQsNyAmIzQzOzI1Myw2IEBAIHZvaWQgYnBmX2ZtdF9zdGFja19tYXNrKGNoYXIgKmJ1Ziwgc3NpemVfdCBidWZfc3osIHU2NCBzdGFja19tYXNrKVxuIFx0fVxuIH1cbiBcbi1cbiAvKiBGb3IgZ2l2ZW4gdmVyaWZpZXIgc3RhdGUgYmFja3RyYWNrX2luc24oKSBpcyBjYWxsZWQgZnJvbSB0aGUgbGFzdCBpbnNuIHRvXG4gICogdGhlIGZpcnN0IGluc24uIEl0cyBwdXJwb3NlIGlzIHRvIGNvbXB1dGUgYSBiaXRtYXNrIG9mIHJlZ2lzdGVycyBhbmRcbiAgKiBzdGFjayBzbG90cyB0aGF0IG5lZWRzIHByZWNpc2lvbiBpbiB0aGUgcGFyZW50IHZlcmlmaWVyIHN0YXRlLlxuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvYnRmLmMgYi9rZXJuZWwvYnBmL2J0Zi5jXG5pbmRleCA0MjQxNDYzM2NmMjYzLi5jODA3YWQyNjNlNmY4IDEwMDY0NFxuLS0tIGEva2VybmVsL2JwZi9idGYuY1xuJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2JwZi9idGYuY1xuQEAgLTI1MzQsNyAmIzQzOzI1MzQsNiBAQCBzdGF0aWMgdm9pZCBidGZfYml0ZmllbGRfc2hvdyh2b2lkICpkYXRhLCB1OCBiaXRzX29mZnNldCxcbiBcdGJ0Zl9pbnQxMjhfcHJpbnQoc2hvdywgcHJpbnRfbnVtKTtcbiB9XG4gXG4tXG4gc3RhdGljIHZvaWQgYnRmX2ludF9iaXRzX3Nob3coY29uc3Qgc3RydWN0IGJ0ZiAqYnRmLFxuIFx0XHRcdCAgICAgIGNvbnN0IHN0cnVjdCBidGZfdHlwZSAqdCxcbiBcdFx0XHQgICAgICB2b2lkICpkYXRhLCB1OCBiaXRzX29mZnNldCxcbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL2NmZy5jIGIva2VybmVsL2JwZi9jZmcuY1xuaW5kZXggZGIzNDE2YTdjOTA0Ny4uODE4ZjdhZmFjODNhNSAxMDA2NDRcbi0tLSBhL2tlcm5lbC9icGYvY2ZnLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9icGYvY2ZnLmNcbkBAIC00Nyw3ICYjNDM7NDcsNiBAQCBlbnVtIHtcbiBcdEJSQU5DSCA9IDIsXG4gfTtcbiBcbi1cbiBzdGF0aWMgdm9pZCBtYXJrX3N1YnByb2dfY2hhbmdlc19wa3RfZGF0YShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBpbnQgb2ZmKVxuIHtcbiBcdHN0cnVjdCBicGZfc3VicHJvZ19pbmZvICpzdWJwcm9nO1xuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvY29uc3RfZm9sZC5jIGIva2VybmVsL2JwZi9jb25zdF9mb2xkLmNcbmluZGV4IGIyYTE5YWNhZGI5MWUuLjU3ODcyNDZiZWYzMDEgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvYnBmL2NvbnN0X2ZvbGQuY1xuJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2JwZi9jb25zdF9mb2xkLmNcbkBAIC0xODIsNyAmIzQzOzE4Miw2IEBAIHN0YXRpYyB2b2lkIGNvbnN0X3JlZ194ZmVyKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBjb25zdF9hcmdfaW5mbyAqXG4gXHRcdHU2NCB2YWwgPSAwO1xuIFxuIFx0XHRpZiAoIWJwZl9tYXBfaXNfcmRvbmx5KG1hcCkgfHwgIW1hcC1cdTAwM2VvcHMtXHUwMDNlbWFwX2RpcmVjdF92YWx1ZV9hZGRyIHx8XG4tXHRcdCAgICBtYXAtXHUwMDNlbWFwX3R5cGUgPT0gQlBGX01BUF9UWVBFX0lOU05fQVJSQVkgfHxcbiBcdFx0ICAgIG9mZiBcdTAwM2MgMCB8fCBvZmYgJiM0Mzsgc2l6ZSBcdTAwM2UgbWFwLVx1MDAzZXZhbHVlX3NpemUgfHxcbiBcdFx0ICAgIGJwZl9tYXBfZGlyZWN0X3JlYWQobWFwLCBvZmYsIHNpemUsIFx1MDAyNnZhbCwgaXNfbGRzeCkpIHtcbiBcdFx0XHQqZHN0ID0gdW5rbm93bjtcbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL2ZpeHVwcy5jIGIva2VybmVsL2JwZi9maXh1cHMuY1xuaW5kZXggYTBiZGRhZGE3OTY0ZS4uZjIzOTg3NDkxMDNiYSAxMDA2NDRcbi0tLSBhL2tlcm5lbC9icGYvZml4dXBzLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9icGYvZml4dXBzLmNcbkBAIC0xNDQ2LDcgJiM0MzsxNDQ2LDYgQEAgaW50IGJwZl9maXh1cF9jYWxsX2FyZ3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcbiBcdHJldHVybiBlcnI7XG4gfVxuIFxuLVxuIC8qIFRoZSBmdW5jdGlvbiByZXF1aXJlcyB0aGF0IGZpcnN0IGluc3RydWN0aW9uIGluICYjMzk7cGF0Y2gmIzM5OyBpcyBpbnNuc2lbcHJvZy1cdTAwM2VsZW4gLSAxXSAqL1xuIHN0YXRpYyBpbnQgYWRkX2hpZGRlbl9zdWJwcm9nKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqcGF0Y2gsIGludCBsZW4pXG4ge1xuQEAgLTE4MTgsNiAmIzQzOzE4MTcsNDMgQEAgaW50IGJwZl9kb19taXNjX2ZpeHVwcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxuIFx0XHRcdGdvdG8gbmV4dF9pbnNuO1xuIFx0XHR9XG4gXG4mIzQzO1x0XHRpZiAoYnBmX2ppdF9zdXBwb3J0c19wZXJjcHVfaW5zbigpIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0ICAgIGluc24tXHUwMDNlY29kZSA9PSAoQlBGX0xEIHwgQlBGX0lNTSB8IEJQRl9EVykgXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHQgICAgKGluc24tXHUwMDNlc3JjX3JlZyA9PSBCUEZfUFNFVURPX01BUF9WQUxVRSB8fFxuJiM0MztcdFx0ICAgICBpbnNuLVx1MDAzZXNyY19yZWcgPT0gQlBGX1BTRVVET19NQVBfSURYX1ZBTFVFKSkge1xuJiM0MztcdFx0XHRzdHJ1Y3QgYnBmX21hcCAqbWFwO1xuJiM0MztcbiYjNDM7XHRcdFx0YXV4ID0gXHUwMDI2ZW52LVx1MDAzZWluc25fYXV4X2RhdGFbaSAmIzQzOyBkZWx0YV07XG4mIzQzO1x0XHRcdG1hcCA9IGVudi1cdTAwM2V1c2VkX21hcHNbYXV4LVx1MDAzZW1hcF9pbmRleF07XG4mIzQzO1x0XHRcdGlmIChtYXAtXHUwMDNlbWFwX3R5cGUgIT0gQlBGX01BUF9UWVBFX1BFUkNQVV9BUlJBWSlcbiYjNDM7XHRcdFx0XHRnb3RvIG5leHRfaW5zbjtcbiYjNDM7XG4mIzQzO1x0XHRcdHByb2ctXHUwMDNlaml0X3JlcXVpcmVkID0gdHJ1ZTtcbiYjNDM7XG4mIzQzO1x0XHRcdC8qXG4mIzQzO1x0XHRcdCAqIFdlIGFyZSAqc2tpcHBpbmcqIGZpcnN0IGhhbGYgb2YgbGRfaW1tNjQgaW5zblxuJiM0MztcdFx0XHQgKiB3aXRoICYjMzk7aSYjNDM7JiM0Mzs7JiMzOTssIHBhdGNoaW5nIG92ZXIgc2Vjb25kIGhhbGYgb2YgaXRcbiYjNDM7XHRcdFx0ICogd2l0aCB0aGF0IHNhbWUgaGFsZiAmIzQzOyBtb3Y2NF9wZXJjcHVfcmVnIGluc24uXG4mIzQzO1x0XHRcdCAqIEFsbCBiZWNhdXNlIGJwZl9wYXRjaF9pbnNuX2RhdGEoKSBjYW4gb25seVxuJiM0MztcdFx0XHQgKiByZXBsYWNlIG9uZSA4LWJ5dGUgaW5zbiwgd2hpY2ggZG9lcyBub3Qgd29ya1xuJiM0MztcdFx0XHQgKiB3ZWxsIGZvciBsZF9pbW02NCBpbnNuLlxuJiM0MztcdFx0XHQgKi9cbiYjNDM7XG4mIzQzO1x0XHRcdGluc25fYnVmWzBdID0gaW5zblsxXTtcbiYjNDM7XHRcdFx0aW5zbl9idWZbMV0gPSBCUEZfTU9WNjRfUEVSQ1BVX1JFRyhpbnNuLVx1MDAzZWRzdF9yZWcsIGluc24tXHUwMDNlZHN0X3JlZyk7XG4mIzQzO1x0XHRcdGNudCA9IDI7XG4mIzQzO1xuJiM0MztcdFx0XHRpJiM0MzsmIzQzOztcbiYjNDM7XHRcdFx0bmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgaSAmIzQzOyBkZWx0YSwgaW5zbl9idWYsIGNudCk7XG4mIzQzO1x0XHRcdGlmICghbmV3X3Byb2cpXG4mIzQzO1x0XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4mIzQzO1xuJiM0MztcdFx0XHRkZWx0YSAgICAmIzQzOz0gY250IC0gMTtcbiYjNDM7XHRcdFx0ZW52LVx1MDAzZXByb2cgPSBwcm9nID0gbmV3X3Byb2c7XG4mIzQzO1x0XHRcdGluc24gICAgICA9IG5ld19wcm9nLVx1MDAzZWluc25zaSAmIzQzOyBpICYjNDM7IGRlbHRhO1xuJiM0MztcdFx0XHRnb3RvIG5leHRfaW5zbjtcbiYjNDM7XHRcdH1cbiYjNDM7XG4gXHRcdGlmIChpbnNuLVx1MDAzZWNvZGUgIT0gKEJQRl9KTVAgfCBCUEZfQ0FMTCkpXG4gXHRcdFx0Z290byBuZXh0X2luc247XG4gXHRcdGlmIChpbnNuLVx1MDAzZXNyY19yZWcgPT0gQlBGX1BTRVVET19DQUxMKVxuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvaGFzaHRhYi5jIGIva2VybmVsL2JwZi9oYXNodGFiLmNcbmluZGV4IDlmMzk0ZTFhYTJlODUuLmQ0MGNiNWRkNDQ2Y2EgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvYnBmL2hhc2h0YWIuY1xuJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2JwZi9oYXNodGFiLmNcbkBAIC05OTgsNyAmIzQzOzk5OCw2IEBAIHN0YXRpYyB2b2lkIGRlY19lbGVtX2NvdW50KHN0cnVjdCBicGZfaHRhYiAqaHRhYilcbiBcdFx0YXRvbWljX2RlYyhcdTAwMjZodGFiLVx1MDAzZWNvdW50KTtcbiB9XG4gXG4tXG4gc3RhdGljIHZvaWQgZnJlZV9odGFiX2VsZW0oc3RydWN0IGJwZl9odGFiICpodGFiLCBzdHJ1Y3QgaHRhYl9lbGVtICpsKVxuIHtcbiBcdGh0YWJfcHV0X2ZkX3ZhbHVlKGh0YWIsIGwpO1xuQEAgLTI5NzAsNyAmIzQzOzI5NjksNiBAQCBzdGF0aWMgaW50IHJodGFiX2RlbGV0ZV9lbGVtKHN0cnVjdCBicGZfcmh0YWIgKnJodGFiLCBzdHJ1Y3Qgcmh0YWJfZWxlbSAqZWxlbSwgdlxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuLVxuIHN0YXRpYyBsb25nIHJodGFiX21hcF9kZWxldGVfZWxlbShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXkpXG4ge1xuIFx0c3RydWN0IGJwZl9yaHRhYiAqcmh0YWIgPSBjb250YWluZXJfb2YobWFwLCBzdHJ1Y3QgYnBmX3JodGFiLCBtYXApO1xuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvaGVscGVycy5jIGIva2VybmVsL2JwZi9oZWxwZXJzLmNcbmluZGV4IDQ3MDlhNWFkMDQ3NDcuLjVlNjhhMGFkYjE0YjQgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvYnBmL2hlbHBlcnMuY1xuJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2JwZi9oZWxwZXJzLmNcbkBAIC00ODY5LDcgJiM0Mzs0ODY5LDYgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBidGZfa2Z1bmNfaWRfc2V0IGdlbmVyaWNfa2Z1bmNfc2V0ID0ge1xuIFx0LnNldCAgID0gXHUwMDI2Z2VuZXJpY19idGZfaWRzLFxuIH07XG4gXG4tXG4gQlRGX0lEX0xJU1QoZ2VuZXJpY19kdG9yX2lkcylcbiBCVEZfSUQoc3RydWN0LCB0YXNrX3N0cnVjdClcbiBCVEZfSUQoZnVuYywgYnBmX3Rhc2tfcmVsZWFzZV9kdG9yKVxuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvbGl2ZW5lc3MuYyBiL2tlcm5lbC9icGYvbGl2ZW5lc3MuY1xuaW5kZXggMGFhZGZiYWUwYWNjNS4uOWUyNWUyNDFlMWZmNCAxMDA2NDRcbi0tLSBhL2tlcm5lbC9icGYvbGl2ZW5lc3MuY1xuJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2JwZi9saXZlbmVzcy5jXG5AQCAtMjY5LDcgJiM0MzsyNjksNiBAQCBicGZfaW5zbl9zdWNjZXNzb3JzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHUzMiBpZHgpXG4gXG4gX19kaWFnX3BvcCgpO1xuIFxuLVxuIHN0YXRpYyBpbmxpbmUgYm9vbCB1cGRhdGVfaW5zbihzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuIFx0XHRcdCAgICAgICBzdHJ1Y3QgZnVuY19pbnN0YW5jZSAqaW5zdGFuY2UsIHUzMiBmcmFtZSwgdTMyIGluc25faWR4KVxuIHtcbkBAIC0xODY4LDcgJiM0MzsxODY3LDYgQEAgc3RhdGljIGludCBhbmFseXplX3N1YnByb2coc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbiBcdGlmIChuZWVkX3Jlc2NoZWQoKSlcbiBcdFx0Y29uZF9yZXNjaGVkKCk7XG4gXG4tXG4gXHQvKlxuIFx0ICogV2hlbiBhbiBpbnN0YW5jZSBpcyByZXVzZWQgKG11c3Rfd3JpdGVfaW5pdGlhbGl6ZWQgPT0gdHJ1ZSksXG4gXHQgKiByZWNvcmQgaW50byBhIGZyZXNoIGluc3RhbmNlIGFuZCBtZXJnZSBhZnRlcndhcmQuICBUaGlzIGF2b2lkc1xuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvcXVldWVfc3RhY2tfbWFwcy5jIGIva2VybmVsL2JwZi9xdWV1ZV9zdGFja19tYXBzLmNcbmluZGV4IGMxYzlkZWU0ZGNkZDAuLjZlOGIxOGMzMmExMDYgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvYnBmL3F1ZXVlX3N0YWNrX21hcHMuY1xuJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2JwZi9xdWV1ZV9zdGFja19tYXBzLmNcbkBAIC0xMjMsNyAmIzQzOzEyMyw2IEBAIHN0YXRpYyBsb25nIF9fcXVldWVfbWFwX2dldChzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICp2YWx1ZSwgYm9vbCBkZWxldGUpXG4gXHRyZXR1cm4gZXJyO1xuIH1cbiBcbi1cbiBzdGF0aWMgbG9uZyBfX3N0YWNrX21hcF9nZXQoc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqdmFsdWUsIGJvb2wgZGVsZXRlKVxuIHtcbiBcdHN0cnVjdCBicGZfcXVldWVfc3RhY2sgKnFzID0gYnBmX3F1ZXVlX3N0YWNrKG1hcCk7XG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9zeXNjYWxsLmMgYi9rZXJuZWwvYnBmL3N5c2NhbGwuY1xuaW5kZXggOGQxMTFkYTg4NjU1My4uN2Q4YzNlOGU2ZDYyZSAxMDA2NDRcbi0tLSBhL2tlcm5lbC9icGYvc3lzY2FsbC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvYnBmL3N5c2NhbGwuY1xuQEAgLTYzNiw3ICYjNDM7NjM2LDYgQEAgaW50IGJwZl9tYXBfYWxsb2NfcGFnZXMoY29uc3Qgc3RydWN0IGJwZl9tYXAgKm1hcCwgaW50IG5pZCxcbiBcdHJldHVybiByZXQ7XG4gfVxuIFxuLVxuIHN0YXRpYyBpbnQgYnRmX2ZpZWxkX2NtcChjb25zdCB2b2lkICphLCBjb25zdCB2b2lkICpiKVxuIHtcbiBcdGNvbnN0IHN0cnVjdCBidGZfZmllbGQgKmYxID0gYSwgKmYyID0gYjtcbkBAIC0xODMwLDcgJiM0MzsxODI5LDYgQEAgc3RhdGljIGludCBtYXBfbG9va3VwX2VsZW0odW5pb24gYnBmX2F0dHIgKmF0dHIpXG4gXHRyZXR1cm4gZXJyO1xuIH1cbiBcbi1cbiAjZGVmaW5lIEJQRl9NQVBfVVBEQVRFX0VMRU1fTEFTVF9GSUVMRCBmbGFnc1xuIFxuIHN0YXRpYyBpbnQgbWFwX3VwZGF0ZV9lbGVtKHVuaW9uIGJwZl9hdHRyICphdHRyLCBicGZwdHJfdCB1YXR0cilcbkBAIC0zNDk3LDcgJiM0MzszNDk1LDYgQEAgaW50IGJwZl9saW5rX3ByaW1lKHN0cnVjdCBicGZfbGluayAqbGluaywgc3RydWN0IGJwZl9saW5rX3ByaW1lciAqcHJpbWVyKVxuIFx0aWYgKGZkIFx1MDAzYyAwKVxuIFx0XHRyZXR1cm4gZmQ7XG4gXG4tXG4gXHRpZCA9IGJwZl9saW5rX2FsbG9jX2lkKGxpbmspO1xuIFx0aWYgKGlkIFx1MDAzYyAwKSB7XG4gXHRcdHB1dF91bnVzZWRfZmQoZmQpO1xuQEAgLTU1MDUsNyAmIzQzOzU1MDIsNiBAQCBzdGF0aWMgaW50IGJwZl9saW5rX2dldF9pbmZvX2J5X2ZkKHN0cnVjdCBmaWxlICpmaWxlLFxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuLVxuIHN0YXRpYyBpbnQgdG9rZW5fZ2V0X2luZm9fYnlfZmQoc3RydWN0IGZpbGUgKmZpbGUsXG4gXHRcdFx0XHRzdHJ1Y3QgYnBmX3Rva2VuICp0b2tlbixcbiBcdFx0XHRcdGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyLFxuQEAgLTY1MDcsNyAmIzQzOzY1MDMsNiBAQCBCUEZfQ0FMTF8zKGJwZl9zeXNfYnBmLCBpbnQsIGNtZCwgdW5pb24gYnBmX2F0dHIgKiwgYXR0ciwgdTMyLCBhdHRyX3NpemUpXG4gXHRyZXR1cm4gX19zeXNfYnBmKGNtZCwgS0VSTkVMX0JQRlBUUihhdHRyKSwgYXR0cl9zaXplLCBLRVJORUxfQlBGUFRSKE5VTEwpLCAwKTtcbiB9XG4gXG4tXG4gLyogVG8gc2h1dCB1cCAtV21pc3NpbmctcHJvdG90eXBlcy5cbiAgKiBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgYnkgdGhlIGtlcm5lbCBsaWdodCBza2VsZXRvblxuICAqIHRvIGxvYWQgYnBmIHByb2dyYW1zIHdoZW4gbW9kdWxlcyBhcmUgbG9hZGVkIG9yIGR1cmluZyBrZXJuZWwgYm9vdC5cbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL3ZlcmlmaWVyLmMgYi9rZXJuZWwvYnBmL3ZlcmlmaWVyLmNcbmluZGV4IGQ5MjUxOTdjMmU1ZjcuLjM5NzcyMDAyY2I3YmYgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvYnBmL3ZlcmlmaWVyLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9icGYvdmVyaWZpZXIuY1xuQEAgLTYzNSw3ICYjNDM7NjM1LDYgQEAgc3RhdGljIHZvaWQgX19tYXJrX2R5bnB0cl9yZWcoc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZyxcbiBcdFx0XHQgICAgICBlbnVtIGJwZl9keW5wdHJfdHlwZSB0eXBlLFxuIFx0XHRcdCAgICAgIGJvb2wgZmlyc3Rfc2xvdCwgaW50IGlkLCBpbnQgcGFyZW50X2lkKTtcbiBcbi1cbiBzdGF0aWMgdm9pZCBtYXJrX2R5bnB0cl9zdGFja19yZWdzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4gXHRcdFx0XHQgICBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqc3JlZzEsXG4gXHRcdFx0XHQgICBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqc3JlZzIsXG5AQCAtMTY3Miw3ICYjNDM7MTY3MSw2IEBAIHN0YXRpYyBib29sIHNhbWVfY2FsbHNpdGVzKHN0cnVjdCBicGZfdmVyaWZpZXJfc3RhdGUgKmEsIHN0cnVjdCBicGZfdmVyaWZpZXJfc3RhXG4gXHRyZXR1cm4gdHJ1ZTtcbiB9XG4gXG4tXG4gdm9pZCBicGZfZnJlZV9iYWNrZWRnZXMoc3RydWN0IGJwZl9zY2NfdmlzaXQgKnZpc2l0KVxuIHtcbiBcdHN0cnVjdCBicGZfc2NjX2JhY2tlZGdlICpiYWNrZWRnZSwgKm5leHQ7XG5AQCAtMjI5NCw3ICYjNDM7MjI5Miw2IEBAIHN0YXRpYyBzdHJ1Y3QgYnBmX3ZlcmlmaWVyX3N0YXRlICpwdXNoX2FzeW5jX2NiKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4gXHRyZXR1cm4gXHUwMDI2ZWxlbS1cdTAwM2VzdDtcbiB9XG4gXG4tXG4gc3RhdGljIGludCBjbXBfc3VicHJvZ3MoY29uc3Qgdm9pZCAqYSwgY29uc3Qgdm9pZCAqYilcbiB7XG4gXHRyZXR1cm4gKChzdHJ1Y3QgYnBmX3N1YnByb2dfaW5mbyAqKWEpLVx1MDAzZXN0YXJ0IC1cbkBAIC00MDcxLDcgJiM0Mzs0MDY4LDYgQEAgc3RhdGljIGludCBjaGVja19zdGFja19yZWFkKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4gXHRyZXR1cm4gZXJyO1xuIH1cbiBcbi1cbiAvKiBjaGVja19zdGFja193cml0ZSBkaXNwYXRjaGVzIHRvIGNoZWNrX3N0YWNrX3dyaXRlX2ZpeGVkX29mZiBvclxuICAqIGNoZWNrX3N0YWNrX3dyaXRlX3Zhcl9vZmYuXG4gICpcbkBAIC00ODY3LDcgJiM0Mzs0ODYzLDYgQEAgc3RhdGljIGludCBjaGVja19zb2NrX2FjY2VzcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBpbnQgaW5zbl9pZHgsXG4gXHRcdHZhbGlkID0gZmFsc2U7XG4gXHR9XG4gXG4tXG4gXHRpZiAodmFsaWQpIHtcbiBcdFx0ZW52LVx1MDAzZWluc25fYXV4X2RhdGFbaW5zbl9pZHhdLmN0eF9maWVsZF9zaXplID1cbiBcdFx0XHRpbmZvLmN0eF9maWVsZF9zaXplO1xuQEAgLTU2NjIsNiAmIzQzOzU2NTcsOCBAQCBpbnQgYnBmX21hcF9kaXJlY3RfcmVhZChzdHJ1Y3QgYnBmX21hcCAqbWFwLCBpbnQgb2ZmLCBpbnQgc2l6ZSwgdTY0ICp2YWwsXG4gXHR1NjQgYWRkcjtcbiBcdGludCBlcnI7XG4gXG4mIzQzO1x0aWYgKG1hcC1cdTAwM2VtYXBfdHlwZSA9PSBCUEZfTUFQX1RZUEVfSU5TTl9BUlJBWSB8fCBtYXAtXHUwMDNlbWFwX3R5cGUgPT0gQlBGX01BUF9UWVBFX1BFUkNQVV9BUlJBWSlcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuIFx0ZXJyID0gbWFwLVx1MDAzZW9wcy1cdTAwM2VtYXBfZGlyZWN0X3ZhbHVlX2FkZHIobWFwLCBcdTAwMjZhZGRyLCBvZmYpO1xuIFx0aWYgKGVycilcbiBcdFx0cmV0dXJuIGVycjtcbkBAIC02MTU4LDYgJiM0Mzs2MTU1LDUxIEBAIHN0YXRpYyB2b2lkIGFkZF9zY2FsYXJfdG9fcmVnKHN0cnVjdCBicGZfcmVnX3N0YXRlICpkc3RfcmVnLCBzNjQgdmFsKVxuIFx0cmVnX2JvdW5kc19zeW5jKGRzdF9yZWcpO1xuIH1cbiBcbiYjNDM7c3RhdGljIGludCBjaGVja19tYXBfbWVtX3JlYWQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZywgaW50IG9mZixcbiYjNDM7XHRcdFx0ICAgICAgaW50IGJwZl9zaXplLCBpbnQgdmFsdWVfcmVnbm8sIGJvb2wgaXNfbGRzeClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWdzID0gY3VyX3JlZ3MoZW52KTtcbiYjNDM7XHRpbnQgc2l6ZSA9IGJwZl9zaXplX3RvX2J5dGVzKGJwZl9zaXplKTtcbiYjNDM7XHRzdHJ1Y3QgYnBmX21hcCAqbWFwID0gcmVnLVx1MDAzZW1hcF9wdHI7XG4mIzQzO1xuJiM0MztcdHN3aXRjaCAobWFwLVx1MDAzZW1hcF90eXBlKSB7XG4mIzQzO1x0Y2FzZSBCUEZfTUFQX1RZUEVfSU5TTl9BUlJBWTpcbiYjNDM7XHRcdGlmIChicGZfc2l6ZSAhPSBCUEZfRFcpIHtcbiYjNDM7XHRcdFx0dmVyYm9zZShlbnYsIFwmIzM0O0ludmFsaWQgcmVhZCBvZiAlZCBieXRlcyBmcm9tIGluc25fYXJyYXlcXG5cJiMzNDssIHNpemUpO1xuJiM0MztcdFx0XHRyZXR1cm4gLUVBQ0NFUztcbiYjNDM7XHRcdH1cbiYjNDM7XHRcdHJlZ3NbdmFsdWVfcmVnbm9dID0gKnJlZztcbiYjNDM7XHRcdGFkZF9zY2FsYXJfdG9fcmVnKFx1MDAyNnJlZ3NbdmFsdWVfcmVnbm9dLCBvZmYpO1xuJiM0MztcdFx0cmVnc1t2YWx1ZV9yZWdub10udHlwZSA9IFBUUl9UT19JTlNOO1xuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1x0Y2FzZSBCUEZfTUFQX1RZUEVfUEVSQ1BVX0FSUkFZOlxuJiM0MztcdFx0Z290byByZWdfdW5rbm93bjtcbiYjNDM7XHRkZWZhdWx0OlxuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHQvKiBJZiBtYXAgaXMgcmVhZC1vbmx5LCB0cmFjayBpdHMgY29udGVudHMgYXMgc2NhbGFycy4gKi9cbiYjNDM7XHRpZiAodG51bV9pc19jb25zdChyZWctXHUwMDNldmFyX29mZikgXHUwMDI2XHUwMDI2XG4mIzQzO1x0ICAgIGJwZl9tYXBfaXNfcmRvbmx5KG1hcCkgXHUwMDI2XHUwMDI2XG4mIzQzO1x0ICAgIG1hcC1cdTAwM2VvcHMtXHUwMDNlbWFwX2RpcmVjdF92YWx1ZV9hZGRyKSB7XG4mIzQzO1x0XHRpbnQgbWFwX29mZiA9IG9mZiAmIzQzOyByZWctXHUwMDNldmFyX29mZi52YWx1ZTtcbiYjNDM7XHRcdHU2NCB2YWwgPSAwO1xuJiM0MztcdFx0aW50IGVycjtcbiYjNDM7XG4mIzQzO1x0XHRlcnIgPSBicGZfbWFwX2RpcmVjdF9yZWFkKG1hcCwgbWFwX29mZiwgc2l6ZSwgXHUwMDI2dmFsLCBpc19sZHN4KTtcbiYjNDM7XHRcdGlmIChlcnIpXG4mIzQzO1x0XHRcdHJldHVybiBlcnI7XG4mIzQzO1xuJiM0MztcdFx0cmVnc1t2YWx1ZV9yZWdub10udHlwZSA9IFNDQUxBUl9WQUxVRTtcbiYjNDM7XHRcdF9fbWFya19yZWdfa25vd24oXHUwMDI2cmVnc1t2YWx1ZV9yZWdub10sIHZhbCk7XG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztyZWdfdW5rbm93bjpcbiYjNDM7XHRtYXJrX3JlZ191bmtub3duKGVudiwgcmVncywgdmFsdWVfcmVnbm8pO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuIC8qIGNoZWNrIHdoZXRoZXIgbWVtb3J5IGF0IChyZWdubyAmIzQzOyBvZmYpIGlzIGFjY2Vzc2libGUgZm9yIHQgPSAocmVhZCB8IHdyaXRlKVxuICAqIGlmIHQ9PXdyaXRlLCB2YWx1ZV9yZWdubyBpcyBhIHJlZ2lzdGVyIHdoaWNoIHZhbHVlIGlzIHN0b3JlZCBpbnRvIG1lbW9yeVxuICAqIGlmIHQ9PXJlYWQsIHZhbHVlX3JlZ25vIGlzIGEgcmVnaXN0ZXIgd2hpY2ggd2lsbCByZWNlaXZlIHRoZSB2YWx1ZSBmcm9tIG1lbW9yeVxuQEAgLTYyMTIsMzggJiM0Mzs2MjU0LDcgQEAgc3RhdGljIGludCBjaGVja19tZW1fYWNjZXNzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGludCBpbnNuX2lkeCwgc3RydWN0IGJcbiBcdFx0aWYgKGtwdHJfZmllbGQpIHtcbiBcdFx0XHRlcnIgPSBjaGVja19tYXBfa3B0cl9hY2Nlc3MoZW52LCB2YWx1ZV9yZWdubywgaW5zbl9pZHgsIGtwdHJfZmllbGQpO1xuIFx0XHR9IGVsc2UgaWYgKHQgPT0gQlBGX1JFQUQgXHUwMDI2XHUwMDI2IHZhbHVlX3JlZ25vIFx1MDAzZT0gMCkge1xuLVx0XHRcdHN0cnVjdCBicGZfbWFwICptYXAgPSByZWctXHUwMDNlbWFwX3B0cjtcbi1cbi1cdFx0XHQvKlxuLVx0XHRcdCAqIElmIG1hcCBpcyByZWFkLW9ubHksIHRyYWNrIGl0cyBjb250ZW50cyBhcyBzY2FsYXJzLFxuLVx0XHRcdCAqIHVubGVzcyBpdCBpcyBhbiBpbnNuIGFycmF5IChzZWUgdGhlIHNwZWNpYWwgY2FzZSBiZWxvdylcbi1cdFx0XHQgKi9cbi1cdFx0XHRpZiAodG51bV9pc19jb25zdChyZWctXHUwMDNldmFyX29mZikgXHUwMDI2XHUwMDI2XG4tXHRcdFx0ICAgIGJwZl9tYXBfaXNfcmRvbmx5KG1hcCkgXHUwMDI2XHUwMDI2XG4tXHRcdFx0ICAgIG1hcC1cdTAwM2VvcHMtXHUwMDNlbWFwX2RpcmVjdF92YWx1ZV9hZGRyIFx1MDAyNlx1MDAyNlxuLVx0XHRcdCAgICBtYXAtXHUwMDNlbWFwX3R5cGUgIT0gQlBGX01BUF9UWVBFX0lOU05fQVJSQVkpIHtcbi1cdFx0XHRcdGludCBtYXBfb2ZmID0gb2ZmICYjNDM7IHJlZy1cdTAwM2V2YXJfb2ZmLnZhbHVlO1xuLVx0XHRcdFx0dTY0IHZhbCA9IDA7XG4tXG4tXHRcdFx0XHRlcnIgPSBicGZfbWFwX2RpcmVjdF9yZWFkKG1hcCwgbWFwX29mZiwgc2l6ZSxcbi1cdFx0XHRcdFx0XHRcdCAgXHUwMDI2dmFsLCBpc19sZHN4KTtcbi1cdFx0XHRcdGlmIChlcnIpXG4tXHRcdFx0XHRcdHJldHVybiBlcnI7XG4tXG4tXHRcdFx0XHRyZWdzW3ZhbHVlX3JlZ25vXS50eXBlID0gU0NBTEFSX1ZBTFVFO1xuLVx0XHRcdFx0X19tYXJrX3JlZ19rbm93bihcdTAwMjZyZWdzW3ZhbHVlX3JlZ25vXSwgdmFsKTtcbi1cdFx0XHR9IGVsc2UgaWYgKG1hcC1cdTAwM2VtYXBfdHlwZSA9PSBCUEZfTUFQX1RZUEVfSU5TTl9BUlJBWSkge1xuLVx0XHRcdFx0aWYgKGJwZl9zaXplICE9IEJQRl9EVykge1xuLVx0XHRcdFx0XHR2ZXJib3NlKGVudiwgXCYjMzQ7SW52YWxpZCByZWFkIG9mICVkIGJ5dGVzIGZyb20gaW5zbl9hcnJheVxcblwmIzM0Oyxcbi1cdFx0XHRcdFx0XHQgICAgIHNpemUpO1xuLVx0XHRcdFx0XHRyZXR1cm4gLUVBQ0NFUztcbi1cdFx0XHRcdH1cbi1cdFx0XHRcdHJlZ3NbdmFsdWVfcmVnbm9dID0gKnJlZztcbi1cdFx0XHRcdGFkZF9zY2FsYXJfdG9fcmVnKFx1MDAyNnJlZ3NbdmFsdWVfcmVnbm9dLCBvZmYpO1xuLVx0XHRcdFx0cmVnc1t2YWx1ZV9yZWdub10udHlwZSA9IFBUUl9UT19JTlNOO1xuLVx0XHRcdH0gZWxzZSB7XG4tXHRcdFx0XHRtYXJrX3JlZ191bmtub3duKGVudiwgcmVncywgdmFsdWVfcmVnbm8pO1xuLVx0XHRcdH1cbiYjNDM7XHRcdFx0ZXJyID0gY2hlY2tfbWFwX21lbV9yZWFkKGVudiwgcmVnLCBvZmYsIGJwZl9zaXplLCB2YWx1ZV9yZWdubywgaXNfbGRzeCk7XG4gXHRcdH1cbiBcdH0gZWxzZSBpZiAoYmFzZV90eXBlKHJlZy1cdTAwM2V0eXBlKSA9PSBQVFJfVE9fTUVNKSB7XG4gXHRcdGJvb2wgcmRvbmx5X21lbSA9IHR5cGVfaXNfcmRvbmx5X21lbShyZWctXHUwMDNldHlwZSk7XG5AQCAtNjcyNSw3ICYjNDM7NjczNiw2IEBAIHN0YXRpYyBpbnQgY2hlY2tfc3RhY2tfcmFuZ2VfaW5pdGlhbGl6ZWQoXG4gXHRpZiAoZXJyKVxuIFx0XHRyZXR1cm4gZXJyO1xuIFxuLVxuIFx0aWYgKHRudW1faXNfY29uc3QocmVnLVx1MDAzZXZhcl9vZmYpKSB7XG4gXHRcdG1pbl9vZmYgPSBtYXhfb2ZmID0gcmVnLVx1MDAzZXZhcl9vZmYudmFsdWUgJiM0Mzsgb2ZmO1xuIFx0fSBlbHNlIHtcbkBAIC03NDQzLDcgJiM0Mzs3NDUzLDYgQEAgc3RhdGljIGJvb2wgaXNfaXRlcl9uZXdfa2Z1bmMoc3RydWN0IGJwZl9jYWxsX2FyZ19tZXRhICptZXRhKVxuIFx0cmV0dXJuIG1ldGEtXHUwMDNla2Z1bmNfZmxhZ3MgXHUwMDI2IEtGX0lURVJfTkVXO1xuIH1cbiBcbi1cbiBzdGF0aWMgYm9vbCBpc19pdGVyX2Rlc3Ryb3lfa2Z1bmMoc3RydWN0IGJwZl9jYWxsX2FyZ19tZXRhICptZXRhKVxuIHtcbiBcdHJldHVybiBtZXRhLVx1MDAzZWtmdW5jX2ZsYWdzIFx1MDAyNiBLRl9JVEVSX0RFU1RST1k7XG5AQCAtODIyMSw2ICYjNDM7ODIzMCwxMiBAQCBzdGF0aWMgaW50IGNoZWNrX2FyZ19jb25zdF9zdHIoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbiBcdFx0cmV0dXJuIC1FQUNDRVM7XG4gXHR9XG4gXG4mIzQzO1x0aWYgKG1hcC1cdTAwM2VtYXBfdHlwZSA9PSBCUEZfTUFQX1RZUEVfUEVSQ1BVX0FSUkFZKSB7XG4mIzQzO1x0XHR2ZXJib3NlKGVudiwgXCYjMzQ7JXMgcG9pbnRzIHRvIHBlcmNwdV9hcnJheSBtYXAgd2hpY2ggY2Fubm90IGJlIHVzZWQgYXMgY29uc3Qgc3RyaW5nXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRyZWdfYXJnX25hbWUoZW52LCBhcmdubykpO1xuJiM0MztcdFx0cmV0dXJuIC1FQUNDRVM7XG4mIzQzO1x0fVxuJiM0MztcbiBcdGlmICghYnBmX21hcF9pc19yZG9ubHkobWFwKSkge1xuIFx0XHR2ZXJib3NlKGVudiwgXCYjMzQ7JXMgZG9lcyBub3QgcG9pbnQgdG8gYSByZWFkb25seSBtYXAmIzM5O1xcblwmIzM0OywgcmVnX2FyZ19uYW1lKGVudiwgYXJnbm8pKTtcbiBcdFx0cmV0dXJuIC1FQUNDRVM7XG5AQCAtMTE2NjcsNyAmIzQzOzExNjgyLDYgQEAgc3RhdGljIGludCBwcm9jZXNzX2lycV9mbGFnKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcmVnX3N0YXRlICpcbiBcdHJldHVybiAwO1xuIH1cbiBcbi1cbiBzdGF0aWMgaW50IHJlZl9zZXRfbm9uX293bmluZyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnKVxuIHtcbiBcdHN0cnVjdCBidGZfcmVjb3JkICpyZWMgPSByZWdfYnRmX3JlY29yZChyZWcpO1xuQEAgLTE2NTE1LDcgJiM0MzsxNjUyOSw2IEBAIHN0YXRpYyBpbnQgY2hlY2tfbGRfYWJzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqaW5zbilcbiBcdHJldHVybiAwO1xuIH1cbiBcbi1cbiBzdGF0aWMgYm9vbCByZXR1cm5fcmV0dmFsX3JhbmdlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcmV0dmFsX3JhbmdlICpyYW5nZSlcbiB7XG4gXHRlbnVtIGJwZl9wcm9nX3R5cGUgcHJvZ190eXBlID0gcmVzb2x2ZV9wcm9nX3R5cGUoZW52LVx1MDAzZXByb2cpO1xuQEAgLTE4NDYxLDggJiM0MzsxODQ3NCw2IEBAIHN0YXRpYyB2b2lkIHJlbGVhc2VfaW5zbl9hcnJheXMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcbiBcdFx0YnBmX2luc25fYXJyYXlfcmVsZWFzZShlbnYtXHUwMDNlaW5zbl9hcnJheV9tYXBzW2ldKTtcbiB9XG4gXG4tXG4tXG4gLyogVGhlIHZlcmlmaWVyIGRvZXMgbW9yZSBkYXRhIGZsb3cgYW5hbHlzaXMgdGhhbiBsbHZtIGFuZCB3aWxsIG5vdFxuICAqIGV4cGxvcmUgYnJhbmNoZXMgdGhhdCBhcmUgZGVhZCBhdCBydW4gdGltZS4gTWFsaWNpb3VzIHByb2dyYW1zIGNhblxuICAqIGhhdmUgZGVhZCBjb2RlIHRvby4gVGhlcmVmb3JlIHJlcGxhY2UgYWxsIGRlYWQgYXQtcnVuLXRpbWUgY29kZVxuQEAgLTE4NDkwLDggJiM0MzsxODUwMSw2IEBAIHN0YXRpYyB2b2lkIHNhbml0aXplX2RlYWRfY29kZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxuIFx0fVxuIH1cbiBcbi1cbi1cbiBzdGF0aWMgdm9pZCBmcmVlX3N0YXRlcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxuIHtcbiBcdHN0cnVjdCBicGZfdmVyaWZpZXJfc3RhdGVfbGlzdCAqc2w7XG5AQCAtMTg3NzMsNyAmIzQzOzE4NzgyLDYgQEAgc3RhdGljIGludCBkb19jaGVja19tYWluKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXG4gXHRyZXR1cm4gcmV0O1xuIH1cbiBcbi1cbiBzdGF0aWMgdm9pZCBwcmludF92ZXJpZmljYXRpb25fc3RhdHMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcbiB7XG4gXHQvKiBTa2lwIG92ZXIgaGlkZGVuIHN1YnByb2dzIHdoaWNoIGFyZSBub3QgdmVyaWZpZWQuICovXG5kaWZmIC0tZ2l0IGEvdG9vbHMvYnBmL2JwZnRvb2wvZ2VuLmMgYi90b29scy9icGYvYnBmdG9vbC9nZW4uY1xuaW5kZXggYTAxZDA2ZDIyZDFhMy4uYTUwNTQwZWY2NTIxYyAxMDA2NDRcbi0tLSBhL3Rvb2xzL2JwZi9icGZ0b29sL2dlbi5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy9icGYvYnBmdG9vbC9nZW4uY1xuQEAgLTEwMSw2ICYjNDM7MTAxLDEyIEBAIHN0YXRpYyBib29sIGdldF9tYXBfaWRlbnQoY29uc3Qgc3RydWN0IGJwZl9tYXAgKm1hcCwgY2hhciAqYnVmLCBzaXplX3QgYnVmX3N6KVxuIFx0XHRyZXR1cm4gdHJ1ZTtcbiBcdH1cbiBcbiYjNDM7XHRpZiAoYnBmX21hcF9fdHlwZShtYXApID09IEJQRl9NQVBfVFlQRV9QRVJDUFVfQVJSQVkpIHtcbiYjNDM7XHRcdHNucHJpbnRmKGJ1ZiwgYnVmX3N6LCBcJiMzNDslc1wmIzM0OywgbmFtZSAmIzQzOyAxKTtcbiYjNDM7XHRcdHNhbml0aXplX2lkZW50aWZpZXIoYnVmKTtcbiYjNDM7XHRcdHJldHVybiB0cnVlO1xuJiM0MztcdH1cbiYjNDM7XG4gXHRmb3IgIChpID0gMCwgbiA9IEFSUkFZX1NJWkUoc2Z4cyk7IGkgXHUwMDNjIG47IGkmIzQzOyYjNDM7KSB7XG4gXHRcdGNvbnN0IGNoYXIgKnNmeCA9IHNmeHNbaV0sICpwO1xuIFxuQEAgLTExNyw3ICYjNDM7MTIzLDcgQEAgc3RhdGljIGJvb2wgZ2V0X21hcF9pZGVudChjb25zdCBzdHJ1Y3QgYnBmX21hcCAqbWFwLCBjaGFyICpidWYsIHNpemVfdCBidWZfc3opXG4gXG4gc3RhdGljIGJvb2wgZ2V0X2RhdGFzZWNfaWRlbnQoY29uc3QgY2hhciAqc2VjX25hbWUsIGNoYXIgKmJ1Ziwgc2l6ZV90IGJ1Zl9zeilcbiB7XG4tXHRzdGF0aWMgY29uc3QgY2hhciAqcGZ4c1tdID0geyBcJiMzNDsuZGF0YVwmIzM0OywgXCYjMzQ7LnJvZGF0YVwmIzM0OywgXCYjMzQ7LmJzc1wmIzM0OywgXCYjMzQ7Lmtjb25maWdcJiMzNDsgfTtcbiYjNDM7XHRzdGF0aWMgY29uc3QgY2hhciAqcGZ4c1tdID0geyBcJiMzNDsuZGF0YVwmIzM0OywgXCYjMzQ7LnJvZGF0YVwmIzM0OywgXCYjMzQ7LmJzc1wmIzM0OywgXCYjMzQ7LnBlcmNwdVwmIzM0OywgXCYjMzQ7Lmtjb25maWdcJiMzNDsgfTtcbiBcdGludCBpLCBuO1xuIFxuIFx0LyogcmVjb2duaXplIGhhcmQgY29kZWQgTExWTSBzZWN0aW9uIG5hbWUgKi9cbkBAIC0yNTQsNyAmIzQzOzI2MCw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYnRmX3R5cGUgKmZpbmRfdHlwZV9mb3JfbWFwKHN0cnVjdCBidGYgKmJ0ZiwgY29uc3QgY2hhciAqbWFwXG4gXHRyZXR1cm4gTlVMTDtcbiB9XG4gXG4tc3RhdGljIGJvb2wgaXNfbW1hcGFibGVfbWFwKGNvbnN0IHN0cnVjdCBicGZfbWFwICptYXAsIGNoYXIgKmJ1Ziwgc2l6ZV90IHN6KVxuJiM0MztzdGF0aWMgYm9vbCBpc19za2VsX2RhdGEoY29uc3Qgc3RydWN0IGJwZl9tYXAgKm1hcCwgY2hhciAqYnVmLCBzaXplX3Qgc3opXG4ge1xuIFx0c2l6ZV90IHRtcF9zejtcbiBcbkBAIC0yNjMsMTMgJiM0MzsyNjksMjQgQEAgc3RhdGljIGJvb2wgaXNfbW1hcGFibGVfbWFwKGNvbnN0IHN0cnVjdCBicGZfbWFwICptYXAsIGNoYXIgKmJ1Ziwgc2l6ZV90IHN6KVxuIFx0XHRyZXR1cm4gdHJ1ZTtcbiBcdH1cbiBcbi1cdGlmICghYnBmX21hcF9faXNfaW50ZXJuYWwobWFwKSB8fCAhKGJwZl9tYXBfX21hcF9mbGFncyhtYXApIFx1MDAyNiBCUEZfRl9NTUFQQUJMRSkpXG4mIzQzO1x0aWYgKCFicGZfbWFwX19pc19pbnRlcm5hbChtYXApKVxuIFx0XHRyZXR1cm4gZmFsc2U7XG4gXG4gXHRpZiAoIWdldF9tYXBfaWRlbnQobWFwLCBidWYsIHN6KSlcbiBcdFx0cmV0dXJuIGZhbHNlO1xuIFxuLVx0cmV0dXJuIHRydWU7XG4mIzQzO1x0aWYgKGJwZl9tYXBfX21hcF9mbGFncyhtYXApIFx1MDAyNiBCUEZfRl9NTUFQQUJMRSlcbiYjNDM7XHRcdHJldHVybiB0cnVlO1xuJiM0MztcbiYjNDM7XHRpZiAoYnBmX21hcF9fdHlwZShtYXApID09IEJQRl9NQVBfVFlQRV9QRVJDUFVfQVJSQVkpXG4mIzQzO1x0XHRyZXR1cm4gYnBmX21hcF9fYnRmX3ZhbHVlX3R5cGVfaWQobWFwKSAhPSAwO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gZmFsc2U7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBib29sIGlzX21tYXBhYmxlX21hcChjb25zdCBzdHJ1Y3QgYnBmX21hcCAqbWFwLCBjaGFyICpidWYsIHNpemVfdCBzeilcbiYjNDM7e1xuJiM0MztcdHJldHVybiBpc19za2VsX2RhdGEobWFwLCBidWYsIHN6KSBcdTAwMjZcdTAwMjYgYnBmX21hcF9fdHlwZShtYXApICE9IEJQRl9NQVBfVFlQRV9QRVJDUFVfQVJSQVk7XG4gfVxuIFxuIHN0YXRpYyBpbnQgY29kZWdlbl9kYXRhc2VjcyhzdHJ1Y3QgYnBmX29iamVjdCAqb2JqLCBjb25zdCBjaGFyICpvYmpfbmFtZSlcbkBAIC0yODcsNyAmIzQzOzMwNCw3IEBAIHN0YXRpYyBpbnQgY29kZWdlbl9kYXRhc2VjcyhzdHJ1Y3QgYnBmX29iamVjdCAqb2JqLCBjb25zdCBjaGFyICpvYmpfbmFtZSlcbiBcbiBcdGJwZl9vYmplY3RfX2Zvcl9lYWNoX21hcChtYXAsIG9iaikge1xuIFx0XHQvKiBvbmx5IGdlbmVyYXRlIGRlZmluaXRpb25zIGZvciBtZW1vcnktbWFwcGVkIGludGVybmFsIG1hcHMgKi9cbi1cdFx0aWYgKCFpc19tbWFwYWJsZV9tYXAobWFwLCBtYXBfaWRlbnQsIHNpemVvZihtYXBfaWRlbnQpKSlcbiYjNDM7XHRcdGlmICghaXNfc2tlbF9kYXRhKG1hcCwgbWFwX2lkZW50LCBzaXplb2YobWFwX2lkZW50KSkpXG4gXHRcdFx0Y29udGludWU7XG4gXG4gXHRcdHNlYyA9IGZpbmRfdHlwZV9mb3JfbWFwKGJ0ZiwgbWFwX2lkZW50KTtcbkBAIC01MTcsNyAmIzQzOzUzNCw3IEBAIHN0YXRpYyB2b2lkIGNvZGVnZW5fYXNzZXJ0cyhzdHJ1Y3QgYnBmX29iamVjdCAqb2JqLCBjb25zdCBjaGFyICpvYmpfbmFtZSlcbiBcdFx0XCYjMzQ7LCBvYmpfbmFtZSk7XG4gXG4gXHRicGZfb2JqZWN0X19mb3JfZWFjaF9tYXAobWFwLCBvYmopIHtcbi1cdFx0aWYgKCFpc19tbWFwYWJsZV9tYXAobWFwLCBtYXBfaWRlbnQsIHNpemVvZihtYXBfaWRlbnQpKSlcbiYjNDM7XHRcdGlmICghaXNfc2tlbF9kYXRhKG1hcCwgbWFwX2lkZW50LCBzaXplb2YobWFwX2lkZW50KSkpXG4gXHRcdFx0Y29udGludWU7XG4gXG4gXHRcdHNlYyA9IGZpbmRfdHlwZV9mb3JfbWFwKGJ0ZiwgbWFwX2lkZW50KTtcbkBAIC02NjgsOCAmIzQzOzY4NSw3IEBAIHN0YXRpYyB2b2lkIGNvZGVnZW5fZGVzdHJveShzdHJ1Y3QgYnBmX29iamVjdCAqb2JqLCBjb25zdCBjaGFyICpvYmpfbmFtZSlcbiBcdGJwZl9vYmplY3RfX2Zvcl9lYWNoX21hcChtYXAsIG9iaikge1xuIFx0XHRpZiAoIWdldF9tYXBfaWRlbnQobWFwLCBpZGVudCwgc2l6ZW9mKGlkZW50KSkpXG4gXHRcdFx0Y29udGludWU7XG4tXHRcdGlmIChicGZfbWFwX19pc19pbnRlcm5hbChtYXApIFx1MDAyNlx1MDAyNlxuLVx0XHQgICAgKGJwZl9tYXBfX21hcF9mbGFncyhtYXApIFx1MDAyNiBCUEZfRl9NTUFQQUJMRSkpXG4mIzQzO1x0XHRpZiAoaXNfc2tlbF9kYXRhKG1hcCwgaWRlbnQsIHNpemVvZihpZGVudCkpKVxuIFx0XHRcdHByaW50ZihcJiMzNDtcXHRza2VsX2ZyZWVfbWFwX2RhdGEoc2tlbC1cdTAwM2UlMSRzLCBza2VsLVx1MDAzZW1hcHMuJTEkcy5pbml0aWFsX3ZhbHVlLCAlMiR6dSk7XFxuXCYjMzQ7LFxuIFx0XHRcdCAgICAgICBpZGVudCwgYnBmX21hcF9tbWFwX3N6KG1hcCkpO1xuIFx0XHRjb2RlZ2VuKFwmIzM0O1xcXG5AQCAtNzQxLDcgJiM0Mzs3NTcsNyBAQCBzdGF0aWMgaW50IGdlbl90cmFjZShzdHJ1Y3QgYnBmX29iamVjdCAqb2JqLCBjb25zdCBjaGFyICpvYmpfbmFtZSwgY29uc3QgY2hhciAqaFxuIFx0XHRjb25zdCB2b2lkICptbWFwX2RhdGEgPSBOVUxMO1xuIFx0XHRzaXplX3QgbW1hcF9zaXplID0gMDtcbiBcbi1cdFx0aWYgKCFpc19tbWFwYWJsZV9tYXAobWFwLCBpZGVudCwgc2l6ZW9mKGlkZW50KSkpXG4mIzQzO1x0XHRpZiAoIWlzX3NrZWxfZGF0YShtYXAsIGlkZW50LCBzaXplb2YoaWRlbnQpKSlcbiBcdFx0XHRjb250aW51ZTtcbiBcbiBcdFx0Y29kZWdlbihcJiMzNDtcXFxuQEAgLTg0OSw5ICYjNDM7ODY1LDIzIEBAIHN0YXRpYyBpbnQgZ2VuX3RyYWNlKHN0cnVjdCBicGZfb2JqZWN0ICpvYmosIGNvbnN0IGNoYXIgKm9ial9uYW1lLCBjb25zdCBjaGFyICpoXG4gXHRicGZfb2JqZWN0X19mb3JfZWFjaF9tYXAobWFwLCBvYmopIHtcbiBcdFx0Y29uc3QgY2hhciAqbW1hcF9mbGFncztcbiBcbi1cdFx0aWYgKCFpc19tbWFwYWJsZV9tYXAobWFwLCBpZGVudCwgc2l6ZW9mKGlkZW50KSkpXG4mIzQzO1x0XHRpZiAoIWlzX3NrZWxfZGF0YShtYXAsIGlkZW50LCBzaXplb2YoaWRlbnQpKSlcbiBcdFx0XHRjb250aW51ZTtcbiBcbiYjNDM7XHRcdGlmIChicGZfbWFwX190eXBlKG1hcCkgPT0gQlBGX01BUF9UWVBFX1BFUkNQVV9BUlJBWSkge1xuJiM0MztcdFx0XHRjb2RlZ2VuKFwmIzM0O1xcXG4mIzQzO1x0XHRcXG5cXFxuJiM0MztcdFx0XHRlcnIgPSBza2VsX3Byb3RlY3RfbWFwX2RhdGEoc2tlbC1cdTAwM2UlMSRzLCBcdTAwMjZza2VsLVx1MDAzZW1hcHMuJTEkcy5pbml0aWFsX3ZhbHVlLCAlMiR6ZCk7XFxuXFxcbiYjNDM7XHRcdFx0aWYgKGVycilcdFx0XHRcdFx0ICAgIFxcblxcXG4mIzQzO1x0XHRcdFx0cmV0dXJuIGVycjtcdFx0XHRcdCAgICBcXG5cXFxuJiM0MztcdFx0I2lmZGVmIF9fS0VSTkVMX19cdFx0XHRcdFx0ICAgIFxcblxcXG4mIzQzO1x0XHRcdHNrZWwtXHUwMDNlJTEkcyA9IE5VTEw7XHRcdFx0XHQgICAgXFxuXFxcbiYjNDM7XHRcdCNlbmRpZlx0XHRcdFx0XHRcdFx0ICAgIFxcblxcXG4mIzQzO1x0XHRcdFwmIzM0OyxcbiYjNDM7XHRcdFx0aWRlbnQsIGJwZl9tYXBfbW1hcF9zeihtYXApKTtcbiYjNDM7XHRcdFx0Y29udGludWU7XG4mIzQzO1x0XHR9XG4mIzQzO1xuIFx0XHRpZiAoYnBmX21hcF9fbWFwX2ZsYWdzKG1hcCkgXHUwMDI2IEJQRl9GX1JET05MWV9QUk9HKVxuIFx0XHRcdG1tYXBfZmxhZ3MgPSBcJiMzNDtQUk9UX1JFQURcJiMzNDs7XG4gXHRcdGVsc2VcbkBAIC05NTUsOCAmIzQzOzk4NSw3IEBAIGNvZGVnZW5fbWFwc19za2VsZXRvbihzdHJ1Y3QgYnBmX29iamVjdCAqb2JqLCBzaXplX3QgbWFwX2NudCwgYm9vbCBtbWFwZWQsIGJvb2xcbiBcdFx0XHRcdG1hcC1cdTAwM2VtYXAgPSBcdTAwMjZvYmotXHUwMDNlbWFwcy4lcztcdCAgICBcXG5cXFxuIFx0XHRcdFwmIzM0OyxcbiBcdFx0XHRpLCBicGZfbWFwX19uYW1lKG1hcCksIGlkZW50KTtcbi1cdFx0LyogbWVtb3J5LW1hcHBlZCBpbnRlcm5hbCBtYXBzICovXG4tXHRcdGlmIChtbWFwZWQgXHUwMDI2XHUwMDI2IGlzX21tYXBhYmxlX21hcChtYXAsIGlkZW50LCBzaXplb2YoaWRlbnQpKSkge1xuJiM0MztcdFx0aWYgKG1tYXBlZCBcdTAwMjZcdTAwMjYgaXNfc2tlbF9kYXRhKG1hcCwgaWRlbnQsIHNpemVvZihpZGVudCkpKSB7XG4gXHRcdFx0cHJpbnRmKFwmIzM0O1xcdG1hcC1cdTAwM2VtbWFwZWQgPSAodm9pZCAqKilcdTAwMjZvYmotXHUwMDNlJXM7XFxuXCYjMzQ7LCBpZGVudCk7XG4gXHRcdH1cbiBcbmRpZmYgLS1naXQgYS90b29scy9saWIvYnBmL2JwZl9nZW5faW50ZXJuYWwuaCBiL3Rvb2xzL2xpYi9icGYvYnBmX2dlbl9pbnRlcm5hbC5oXG5pbmRleCAwNDI1NjkxODc3NTIxLi42YzVhZDZjNTVlOGE2IDEwMDY0NFxuLS0tIGEvdG9vbHMvbGliL2JwZi9icGZfZ2VuX2ludGVybmFsLmhcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL2xpYi9icGYvYnBmX2dlbl9pbnRlcm5hbC5oXG5AQCAtNjUsNyAmIzQzOzY1LDggQEAgdm9pZCBicGZfZ2VuX19wcm9nX2xvYWQoc3RydWN0IGJwZl9nZW4gKmdlbixcbiBcdFx0XHRlbnVtIGJwZl9wcm9nX3R5cGUgcHJvZ190eXBlLCBjb25zdCBjaGFyICpwcm9nX25hbWUsXG4gXHRcdFx0Y29uc3QgY2hhciAqbGljZW5zZSwgc3RydWN0IGJwZl9pbnNuICppbnNucywgc2l6ZV90IGluc25fY250LFxuIFx0XHRcdHN0cnVjdCBicGZfcHJvZ19sb2FkX29wdHMgKmxvYWRfYXR0ciwgaW50IHByb2dfaWR4KTtcbi12b2lkIGJwZl9nZW5fX21hcF91cGRhdGVfZWxlbShzdHJ1Y3QgYnBmX2dlbiAqZ2VuLCBpbnQgbWFwX2lkeCwgdm9pZCAqdmFsdWUsIF9fdTMyIHZhbHVlX3NpemUpO1xuJiM0Mzt2b2lkIGJwZl9nZW5fX21hcF91cGRhdGVfZWxlbShzdHJ1Y3QgYnBmX2dlbiAqZ2VuLCBpbnQgbWFwX2lkeCwgdm9pZCAqdmFsdWUsIF9fdTMyIHZhbHVlX3NpemUsXG4mIzQzO1x0XHRcdCAgICAgIF9fdTY0IGZsYWdzKTtcbiB2b2lkIGJwZl9nZW5fX21hcF9mcmVlemUoc3RydWN0IGJwZl9nZW4gKmdlbiwgaW50IG1hcF9pZHgpO1xuIHZvaWQgYnBmX2dlbl9fcmVjb3JkX2F0dGFjaF90YXJnZXQoc3RydWN0IGJwZl9nZW4gKmdlbiwgY29uc3QgY2hhciAqbmFtZSwgZW51bSBicGZfYXR0YWNoX3R5cGUgdHlwZSk7XG4gdm9pZCBicGZfZ2VuX19yZWNvcmRfZXh0ZXJuKHN0cnVjdCBicGZfZ2VuICpnZW4sIGNvbnN0IGNoYXIgKm5hbWUsIGJvb2wgaXNfd2VhayxcbmRpZmYgLS1naXQgYS90b29scy9saWIvYnBmL2ZlYXR1cmVzLmMgYi90b29scy9saWIvYnBmL2ZlYXR1cmVzLmNcbmluZGV4IGI3ZTM4OGY5OWQwYmIuLmVmOTU4MWMxMTMwMzUgMTAwNjQ0XG4tLS0gYS90b29scy9saWIvYnBmL2ZlYXR1cmVzLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL2xpYi9icGYvZmVhdHVyZXMuY1xuQEAgLTYyMCw2ICYjNDM7NjIwLDM4IEBAIHN0YXRpYyBpbnQgcHJvYmVfYnBmX3N5c2NhbGxfY29tbW9uX2F0dHJzKGludCB0b2tlbl9mZClcbiBcdHJldHVybiBwcm9iZV9zeXNfYnBmX2V4dCgpO1xuIH1cbiBcbiYjNDM7c3RhdGljIGludCBwcm9iZV9rZXJuX3BlcmNwdV9kYXRhKGludCB0b2tlbl9mZClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBicGZfaW5zbiBpbnNuc1tdID0ge1xuJiM0MztcdFx0QlBGX0xEX01BUF9WQUxVRShCUEZfUkVHXzEsIDAsIDApLFxuJiM0MztcdFx0QlBGX0xEWF9NRU0oQlBGX0RXLCBCUEZfUkVHXzAsIEJQRl9SRUdfMSwgMCksXG4mIzQzO1x0XHRCUEZfRVhJVF9JTlNOKCksXG4mIzQzO1x0fTtcbiYjNDM7XHRMSUJCUEZfT1BUUyhicGZfbWFwX2NyZWF0ZV9vcHRzLCBtYXBfb3B0cyxcbiYjNDM7XHRcdC50b2tlbl9mZCA9IHRva2VuX2ZkLFxuJiM0MztcdFx0Lm1hcF9mbGFncyA9IHRva2VuX2ZkID8gQlBGX0ZfVE9LRU5fRkQgOiAwLFxuJiM0MztcdCk7XG4mIzQzO1x0TElCQlBGX09QVFMoYnBmX3Byb2dfbG9hZF9vcHRzLCBwcm9nX29wdHMsXG4mIzQzO1x0XHQudG9rZW5fZmQgPSB0b2tlbl9mZCxcbiYjNDM7XHRcdC5wcm9nX2ZsYWdzID0gdG9rZW5fZmQgPyBCUEZfRl9UT0tFTl9GRCA6IDAsXG4mIzQzO1x0KTtcbiYjNDM7XHRpbnQgcmV0LCBtYXAsIGluc25fY250ID0gQVJSQVlfU0laRShpbnNucyk7XG4mIzQzO1xuJiM0MztcdG1hcCA9IGJwZl9tYXBfY3JlYXRlKEJQRl9NQVBfVFlQRV9QRVJDUFVfQVJSQVksIFwmIzM0O2xpYmJwZl9wZXJjcHVcJiMzNDssIHNpemVvZihpbnQpLCA4LCAxLFxuJiM0MztcdFx0XHQgICAgIFx1MDAyNm1hcF9vcHRzKTtcbiYjNDM7XHRpZiAobWFwIFx1MDAzYyAwKSB7XG4mIzQzO1x0XHRwcl93YXJuKFwmIzM0O0Vycm9yIGluICVzKCk6ICVzLiBDb3VsZG4mIzM5O3QgY3JlYXRlIHNpbXBsZSBwZXJjcHVfYXJyYXkgbWFwLlxcblwmIzM0OyxcbiYjNDM7XHRcdFx0X19mdW5jX18sIGVycnN0cihtYXApKTtcbiYjNDM7XHRcdHJldHVybiBtYXA7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpbnNuc1swXS5pbW0gPSBtYXA7XG4mIzQzO1xuJiM0MztcdHJldCA9IGJwZl9wcm9nX2xvYWQoQlBGX1BST0dfVFlQRV9TT0NLRVRfRklMVEVSLCBOVUxMLCBcJiMzNDtHUExcJiMzNDssIGluc25zLCBpbnNuX2NudCwgXHUwMDI2cHJvZ19vcHRzKTtcbiYjNDM7XHRjbG9zZShtYXApO1xuJiM0MztcdHJldHVybiBwcm9iZV9mZChyZXQpO1xuJiM0Mzt9XG4mIzQzO1xuIHR5cGVkZWYgaW50ICgqZmVhdHVyZV9wcm9iZV9mbikoaW50IC8qIHRva2VuX2ZkICovKTtcbiBcbiBzdGF0aWMgc3RydWN0IGtlcm5fZmVhdHVyZV9jYWNoZSBmZWF0dXJlX2NhY2hlO1xuQEAgLTcwNyw2ICYjNDM7NzM5LDkgQEAgc3RhdGljIHN0cnVjdCBrZXJuX2ZlYXR1cmVfZGVzYyB7XG4gXHRbRkVBVF9CUEZfU1lTQ0FMTF9DT01NT05fQVRUUlNdID0ge1xuIFx0XHRcJiMzNDtCUEYgc3lzY2FsbCBjb21tb24gYXR0cmlidXRlcyBzdXBwb3J0XCYjMzQ7LCBwcm9iZV9icGZfc3lzY2FsbF9jb21tb25fYXR0cnMsXG4gXHR9LFxuJiM0MztcdFtGRUFUX1BFUkNQVV9EQVRBXSA9IHtcbiYjNDM7XHRcdFwmIzM0O2tlcm5lbCBzdXBwb3J0cyBwZXJjcHUgZGF0YVwmIzM0OywgcHJvYmVfa2Vybl9wZXJjcHVfZGF0YSxcbiYjNDM7XHR9LFxuIH07XG4gXG4gYm9vbCBmZWF0X3N1cHBvcnRlZChzdHJ1Y3Qga2Vybl9mZWF0dXJlX2NhY2hlICpjYWNoZSwgZW51bSBrZXJuX2ZlYXR1cmVfaWQgZmVhdF9pZClcbmRpZmYgLS1naXQgYS90b29scy9saWIvYnBmL2dlbl9sb2FkZXIuYyBiL3Rvb2xzL2xpYi9icGYvZ2VuX2xvYWRlci5jXG5pbmRleCA2ZTNkZDUyNDI3NjE4Li5hZjNhMDRmMTYxYWMxIDEwMDY0NFxuLS0tIGEvdG9vbHMvbGliL2JwZi9nZW5fbG9hZGVyLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL2xpYi9icGYvZ2VuX2xvYWRlci5jXG5AQCAtMTEyOCw3ICYjNDM7MTEyOCw3IEBAIHZvaWQgYnBmX2dlbl9fcHJvZ19sb2FkKHN0cnVjdCBicGZfZ2VuICpnZW4sXG4gfVxuIFxuIHZvaWQgYnBmX2dlbl9fbWFwX3VwZGF0ZV9lbGVtKHN0cnVjdCBicGZfZ2VuICpnZW4sIGludCBtYXBfaWR4LCB2b2lkICpwdmFsdWUsXG4tXHRcdFx0ICAgICAgX191MzIgdmFsdWVfc2l6ZSlcbiYjNDM7XHRcdFx0ICAgICAgX191MzIgdmFsdWVfc2l6ZSwgX191NjQgZmxhZ3MpXG4ge1xuIFx0aW50IGF0dHJfc2l6ZSA9IG9mZnNldG9mZW5kKHVuaW9uIGJwZl9hdHRyLCBmbGFncyk7XG4gXHRpbnQgbWFwX3VwZGF0ZV9hdHRyLCB2YWx1ZSwga2V5O1xuQEAgLTExMzYsNiAmIzQzOzExMzYsNyBAQCB2b2lkIGJwZl9nZW5fX21hcF91cGRhdGVfZWxlbShzdHJ1Y3QgYnBmX2dlbiAqZ2VuLCBpbnQgbWFwX2lkeCwgdm9pZCAqcHZhbHVlLFxuIFx0aW50IHplcm8gPSAwO1xuIFxuIFx0bWVtc2V0KFx1MDAyNmF0dHIsIDAsIGF0dHJfc2l6ZSk7XG4mIzQzO1x0YXR0ci5mbGFncyA9IHRndF9lbmRpYW4oZmxhZ3MpO1xuIFxuIFx0dmFsdWUgPSBhZGRfZGF0YShnZW4sIHB2YWx1ZSwgdmFsdWVfc2l6ZSk7XG4gXHRrZXkgPSBhZGRfZGF0YShnZW4sIFx1MDAyNnplcm8sIHNpemVvZih6ZXJvKSk7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvbGliL2JwZi9saWJicGYuYyBiL3Rvb2xzL2xpYi9icGYvbGliYnBmLmNcbmluZGV4IDUxNGU0ZTlkYWE4MjUuLjlmNzlhOGU4NTBmZGIgMTAwNjQ0XG4tLS0gYS90b29scy9saWIvYnBmL2xpYmJwZi5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy9saWIvYnBmL2xpYmJwZi5jXG5AQCAtNTQxLDYgJiM0Mzs1NDEsNyBAQCBzdHJ1Y3QgYnBmX3N0cnVjdF9vcHMge1xuIH07XG4gXG4gI2RlZmluZSBEQVRBX1NFQyBcJiMzNDsuZGF0YVwmIzM0O1xuJiM0MzsjZGVmaW5lIFBFUkNQVV9TRUMgXCYjMzQ7LnBlcmNwdVwmIzM0O1xuICNkZWZpbmUgQlNTX1NFQyBcJiMzNDsuYnNzXCYjMzQ7XG4gI2RlZmluZSBST0RBVEFfU0VDIFwmIzM0Oy5yb2RhdGFcJiMzNDtcbiAjZGVmaW5lIEtDT05GSUdfU0VDIFwmIzM0Oy5rY29uZmlnXCYjMzQ7XG5AQCAtNTU1LDYgJiM0Mzs1NTYsNyBAQCBlbnVtIGxpYmJwZl9tYXBfdHlwZSB7XG4gXHRMSUJCUEZfTUFQX0JTUyxcbiBcdExJQkJQRl9NQVBfUk9EQVRBLFxuIFx0TElCQlBGX01BUF9LQ09ORklHLFxuJiM0MztcdExJQkJQRl9NQVBfUEVSQ1BVLFxuIH07XG4gXG4gc3RydWN0IGJwZl9tYXBfZGVmIHtcbkBAIC02NjYsNiAmIzQzOzY2OCw3IEBAIGVudW0gc2VjX3R5cGUge1xuIFx0U0VDX0RBVEEsXG4gXHRTRUNfUk9EQVRBLFxuIFx0U0VDX1NUX09QUyxcbiYjNDM7XHRTRUNfUEVSQ1BVLFxuIH07XG4gXG4gc3RydWN0IGVsZl9zZWNfZGVzYyB7XG5AQCAtMTgzOSw2ICYjNDM7MTg0Miw4IEBAIHN0YXRpYyBzaXplX3QgYnBmX21hcF9tbWFwX3N6KGNvbnN0IHN0cnVjdCBicGZfbWFwICptYXApXG4gXHRzd2l0Y2ggKG1hcC1cdTAwM2VkZWYudHlwZSkge1xuIFx0Y2FzZSBCUEZfTUFQX1RZUEVfQVJSQVk6XG4gXHRcdHJldHVybiBhcnJheV9tYXBfbW1hcF9zeihtYXAtXHUwMDNlZGVmLnZhbHVlX3NpemUsIG1hcC1cdTAwM2VkZWYubWF4X2VudHJpZXMpO1xuJiM0MztcdGNhc2UgQlBGX01BUF9UWVBFX1BFUkNQVV9BUlJBWTpcbiYjNDM7XHRcdHJldHVybiBtYXAtXHUwMDNlZGVmLnZhbHVlX3NpemU7XG4gXHRjYXNlIEJQRl9NQVBfVFlQRV9BUkVOQTpcbiBcdFx0cmV0dXJuIHBhZ2Vfc3ogKiBtYXAtXHUwMDNlZGVmLm1heF9lbnRyaWVzO1xuIFx0ZGVmYXVsdDpcbkBAIC0xODY2LDcgJiM0MzsxODcxLDggQEAgc3RhdGljIGludCBicGZfbWFwX21tYXBfcmVzaXplKHN0cnVjdCBicGZfbWFwICptYXAsIHNpemVfdCBvbGRfc3osIHNpemVfdCBuZXdfc3pcbiBcdHJldHVybiAwO1xuIH1cbiBcbi1zdGF0aWMgY2hhciAqaW50ZXJuYWxfbWFwX25hbWUoc3RydWN0IGJwZl9vYmplY3QgKm9iaiwgY29uc3QgY2hhciAqcmVhbF9uYW1lKVxuJiM0MztzdGF0aWMgY2hhciAqaW50ZXJuYWxfbWFwX25hbWUoc3RydWN0IGJwZl9vYmplY3QgKm9iaiwgY29uc3QgY2hhciAqcmVhbF9uYW1lLFxuJiM0MztcdFx0XHQgICAgICAgZW51bSBsaWJicGZfbWFwX3R5cGUgdHlwZSlcbiB7XG4gXHRjaGFyIG1hcF9uYW1lW0JQRl9PQkpfTkFNRV9MRU5dLCAqcDtcbiBcdGludCBwZnhfbGVuLCBzZnhfbGVuID0gbWF4KChzaXplX3QpNywgc3RybGVuKHJlYWxfbmFtZSkpO1xuQEAgLTE5MDcsOCAmIzQzOzE5MTMsMTEgQEAgc3RhdGljIGNoYXIgKmludGVybmFsX21hcF9uYW1lKHN0cnVjdCBicGZfb2JqZWN0ICpvYmosIGNvbnN0IGNoYXIgKnJlYWxfbmFtZSlcbiBcdGlmIChzZnhfbGVuIFx1MDAzZT0gQlBGX09CSl9OQU1FX0xFTilcbiBcdFx0c2Z4X2xlbiA9IEJQRl9PQkpfTkFNRV9MRU4gLSAxO1xuIFxuLVx0LyogaWYgdGhlcmUgYXJlIHR3byBvciBtb3JlIGRvdHMgaW4gbWFwIG5hbWUsIGl0JiMzOTtzIGEgY3VzdG9tIGRvdCBtYXAgKi9cbi1cdGlmIChzdHJjaHIocmVhbF9uYW1lICYjNDM7IDEsICYjMzk7LiYjMzk7KSAhPSBOVUxMKVxuJiM0MztcdC8qXG4mIzQzO1x0ICogRG9uJiMzOTt0IHByZWZpeCB0aGUgYnBmX29iamVjdCBuYW1lIGlmIHRoaXMgaXMgYSBjdXN0b20gZG90IG1hcFxuJiM0MztcdCAqIChjb250YWluaW5nIHR3byBvciBtb3JlIGRvdHMpIG9yIGEgcGVyY3B1IGRhdGEgbWFwLlxuJiM0MztcdCAqL1xuJiM0MztcdGlmIChzdHJjaHIocmVhbF9uYW1lICYjNDM7IDEsICYjMzk7LiYjMzk7KSAhPSBOVUxMIHx8IHR5cGUgPT0gTElCQlBGX01BUF9QRVJDUFUpXG4gXHRcdHBmeF9sZW4gPSAwO1xuIFx0ZWxzZVxuIFx0XHRwZnhfbGVuID0gbWluKChzaXplX3QpQlBGX09CSl9OQU1FX0xFTiAtIHNmeF9sZW4gLSAxLCBzdHJsZW4ob2JqLVx1MDAzZW5hbWUpKTtcbkBAIC0xOTQxLDYgJiM0MzsxOTUwLDEzIEBAIHN0YXRpYyBib29sIG1hcF9pc19tbWFwYWJsZShzdHJ1Y3QgYnBmX29iamVjdCAqb2JqLCBzdHJ1Y3QgYnBmX21hcCAqbWFwKVxuIFx0aWYgKCFtYXAtXHUwMDNlYnRmX3ZhbHVlX3R5cGVfaWQpXG4gXHRcdHJldHVybiBmYWxzZTtcbiBcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFRoZSBpbnRlcm5hbCBQRVJDUFUgbWFwcyBhcmUgbm90IG1tYXBibGUgYmVjYXVzZSB0aGUgdW5kZXJseWluZ1xuJiM0MztcdCAqIHBlcmNwdV9hcnJheSBtYXBzIGRvIG5vdCBoYXZlIG1tYXAgc3VwcG9ydC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAobWFwLVx1MDAzZWxpYmJwZl90eXBlID09IExJQkJQRl9NQVBfUEVSQ1BVKVxuJiM0MztcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcbiBcdHQgPSBidGZfX3R5cGVfYnlfaWQob2JqLVx1MDAzZWJ0ZiwgbWFwLVx1MDAzZWJ0Zl92YWx1ZV90eXBlX2lkKTtcbiBcdGlmICghYnRmX2lzX2RhdGFzZWModCkpXG4gXHRcdHJldHVybiBmYWxzZTtcbkBAIC0xOTYyLDYgJiM0MzsxOTc4LDcgQEAgc3RhdGljIGludFxuIGJwZl9vYmplY3RfX2luaXRfaW50ZXJuYWxfbWFwKHN0cnVjdCBicGZfb2JqZWN0ICpvYmosIGVudW0gbGliYnBmX21hcF90eXBlIHR5cGUsXG4gXHRcdFx0ICAgICAgY29uc3QgY2hhciAqcmVhbF9uYW1lLCBpbnQgc2VjX2lkeCwgdm9pZCAqZGF0YSwgc2l6ZV90IGRhdGFfc3opXG4ge1xuJiM0MztcdGJvb2wgaXNfcGVyY3B1ID0gdHlwZSA9PSBMSUJCUEZfTUFQX1BFUkNQVTtcbiBcdHN0cnVjdCBicGZfbWFwX2RlZiAqZGVmO1xuIFx0c3RydWN0IGJwZl9tYXAgKm1hcDtcbiBcdHNpemVfdCBtbWFwX3N6O1xuQEAgLTE5NzUsNyAmIzQzOzE5OTIsNyBAQCBicGZfb2JqZWN0X19pbml0X2ludGVybmFsX21hcChzdHJ1Y3QgYnBmX29iamVjdCAqb2JqLCBlbnVtIGxpYmJwZl9tYXBfdHlwZSB0eXBlLFxuIFx0bWFwLVx1MDAzZXNlY19pZHggPSBzZWNfaWR4O1xuIFx0bWFwLVx1MDAzZXNlY19vZmZzZXQgPSAwO1xuIFx0bWFwLVx1MDAzZXJlYWxfbmFtZSA9IHN0cmR1cChyZWFsX25hbWUpO1xuLVx0bWFwLVx1MDAzZW5hbWUgPSBpbnRlcm5hbF9tYXBfbmFtZShvYmosIHJlYWxfbmFtZSk7XG4mIzQzO1x0bWFwLVx1MDAzZW5hbWUgPSBpbnRlcm5hbF9tYXBfbmFtZShvYmosIHJlYWxfbmFtZSwgdHlwZSk7XG4gXHRpZiAoIW1hcC1cdTAwM2VyZWFsX25hbWUgfHwgIW1hcC1cdTAwM2VuYW1lKSB7XG4gXHRcdHpmcmVlKFx1MDAyNm1hcC1cdTAwM2VyZWFsX25hbWUpO1xuIFx0XHR6ZnJlZShcdTAwMjZtYXAtXHUwMDNlbmFtZSk7XG5AQCAtMTk4Myw3ICYjNDM7MjAwMCw3IEBAIGJwZl9vYmplY3RfX2luaXRfaW50ZXJuYWxfbWFwKHN0cnVjdCBicGZfb2JqZWN0ICpvYmosIGVudW0gbGliYnBmX21hcF90eXBlIHR5cGUsXG4gXHR9XG4gXG4gXHRkZWYgPSBcdTAwMjZtYXAtXHUwMDNlZGVmO1xuLVx0ZGVmLVx1MDAzZXR5cGUgPSBCUEZfTUFQX1RZUEVfQVJSQVk7XG4mIzQzO1x0ZGVmLVx1MDAzZXR5cGUgPSBpc19wZXJjcHUgPyBCUEZfTUFQX1RZUEVfUEVSQ1BVX0FSUkFZIDogQlBGX01BUF9UWVBFX0FSUkFZO1xuIFx0ZGVmLVx1MDAzZWtleV9zaXplID0gc2l6ZW9mKGludCk7XG4gXHRkZWYtXHUwMDNldmFsdWVfc2l6ZSA9IGRhdGFfc3o7XG4gXHRkZWYtXHUwMDNlbWF4X2VudHJpZXMgPSAxO1xuQEAgLTE5OTYsOCAmIzQzOzIwMTMsOSBAQCBicGZfb2JqZWN0X19pbml0X2ludGVybmFsX21hcChzdHJ1Y3QgYnBmX29iamVjdCAqb2JqLCBlbnVtIGxpYmJwZl9tYXBfdHlwZSB0eXBlLFxuIFx0aWYgKG1hcF9pc19tbWFwYWJsZShvYmosIG1hcCkpXG4gXHRcdGRlZi1cdTAwM2VtYXBfZmxhZ3MgfD0gQlBGX0ZfTU1BUEFCTEU7XG4gXG4tXHRwcl9kZWJ1ZyhcJiMzNDttYXAgJiMzOTslcyYjMzk7IChnbG9iYWwgZGF0YSk6IGF0IHNlY19pZHggJWQsIG9mZnNldCAlenUsIGZsYWdzICV4LlxcblwmIzM0Oyxcbi1cdFx0IG1hcC1cdTAwM2VuYW1lLCBtYXAtXHUwMDNlc2VjX2lkeCwgbWFwLVx1MDAzZXNlY19vZmZzZXQsIGRlZi1cdTAwM2VtYXBfZmxhZ3MpO1xuJiM0MztcdHByX2RlYnVnKFwmIzM0O21hcCAmIzM5OyVzJiMzOTsgKGdsb2JhbCAlc2RhdGEpOiBhdCBzZWNfaWR4ICVkLCBvZmZzZXQgJXp1LCBmbGFncyAleC5cXG5cJiMzNDssXG4mIzQzO1x0XHQgbWFwLVx1MDAzZW5hbWUsIGlzX3BlcmNwdSA/IFwmIzM0O3BlcmNwdSBcJiMzNDsgOiBcJiMzNDtcJiMzNDssIG1hcC1cdTAwM2VzZWNfaWR4LFxuJiM0MztcdFx0IG1hcC1cdTAwM2VzZWNfb2Zmc2V0LCBkZWYtXHUwMDNlbWFwX2ZsYWdzKTtcbiBcbiBcdG1tYXBfc3ogPSBicGZfbWFwX21tYXBfc3oobWFwKTtcbiBcdG1hcC1cdTAwM2VtbWFwZWQgPSBtbWFwKE5VTEwsIG1tYXBfc3osIFBST1RfUkVBRCB8IFBST1RfV1JJVEUsXG5AQCAtMjA1Nyw2ICYjNDM7MjA3NSwxMyBAQCBzdGF0aWMgaW50IGJwZl9vYmplY3RfX2luaXRfZ2xvYmFsX2RhdGFfbWFwcyhzdHJ1Y3QgYnBmX29iamVjdCAqb2JqKVxuIFx0XHRcdFx0XHRcdFx0ICAgIE5VTEwsXG4gXHRcdFx0XHRcdFx0XHQgICAgc2VjX2Rlc2MtXHUwMDNlZGF0YS1cdTAwM2VkX3NpemUpO1xuIFx0XHRcdGJyZWFrO1xuJiM0MztcdFx0Y2FzZSBTRUNfUEVSQ1BVOlxuJiM0MztcdFx0XHRzZWNfbmFtZSA9IGVsZl9zZWNfbmFtZShvYmosIGVsZl9zZWNfYnlfaWR4KG9iaiwgc2VjX2lkeCkpO1xuJiM0MztcdFx0XHRlcnIgPSBicGZfb2JqZWN0X19pbml0X2ludGVybmFsX21hcChvYmosIExJQkJQRl9NQVBfUEVSQ1BVLFxuJiM0MztcdFx0XHRcdFx0XHRcdCAgICBzZWNfbmFtZSwgc2VjX2lkeCxcbiYjNDM7XHRcdFx0XHRcdFx0XHQgICAgc2VjX2Rlc2MtXHUwMDNlZGF0YS1cdTAwM2VkX2J1ZixcbiYjNDM7XHRcdFx0XHRcdFx0XHQgICAgc2VjX2Rlc2MtXHUwMDNlZGF0YS1cdTAwM2VkX3NpemUpO1xuJiM0MztcdFx0XHRicmVhaztcbiBcdFx0ZGVmYXVsdDpcbiBcdFx0XHQvKiBza2lwICovXG4gXHRcdFx0YnJlYWs7XG5AQCAtNDAxNiw2ICYjNDM7NDA0MSwxMSBAQCBzdGF0aWMgaW50IGJwZl9vYmplY3RfX2VsZl9jb2xsZWN0KHN0cnVjdCBicGZfb2JqZWN0ICpvYmopXG4gXHRcdFx0XHRzZWNfZGVzYy1cdTAwM2VzZWNfdHlwZSA9IFNFQ19ST0RBVEE7XG4gXHRcdFx0XHRzZWNfZGVzYy1cdTAwM2VzaGRyID0gc2g7XG4gXHRcdFx0XHRzZWNfZGVzYy1cdTAwM2VkYXRhID0gZGF0YTtcbiYjNDM7XHRcdFx0fSBlbHNlIGlmIChzdHJjbXAobmFtZSwgUEVSQ1BVX1NFQykgPT0gMCB8fFxuJiM0MztcdFx0XHRcdCAgIHN0cl9oYXNfcGZ4KG5hbWUsIFBFUkNQVV9TRUMgXCYjMzQ7LlwmIzM0OykpIHtcbiYjNDM7XHRcdFx0XHRzZWNfZGVzYy1cdTAwM2VzZWNfdHlwZSA9IFNFQ19QRVJDUFU7XG4mIzQzO1x0XHRcdFx0c2VjX2Rlc2MtXHUwMDNlc2hkciA9IHNoO1xuJiM0MztcdFx0XHRcdHNlY19kZXNjLVx1MDAzZWRhdGEgPSBkYXRhO1xuIFx0XHRcdH0gZWxzZSBpZiAoc3RyY21wKG5hbWUsIFNUUlVDVF9PUFNfU0VDKSA9PSAwIHx8XG4gXHRcdFx0XHQgICBzdHJjbXAobmFtZSwgU1RSVUNUX09QU19MSU5LX1NFQykgPT0gMCB8fFxuIFx0XHRcdFx0ICAgc3RyY21wKG5hbWUsIFwmIzM0Oz9cJiMzNDsgU1RSVUNUX09QU19TRUMpID09IDAgfHxcbkBAIC00NTQ0LDYgJiM0Mzs0NTc0LDcgQEAgc3RhdGljIGJvb2wgYnBmX29iamVjdF9fc2huZHhfaXNfZGF0YShjb25zdCBzdHJ1Y3QgYnBmX29iamVjdCAqb2JqLFxuIFx0Y2FzZSBTRUNfQlNTOlxuIFx0Y2FzZSBTRUNfREFUQTpcbiBcdGNhc2UgU0VDX1JPREFUQTpcbiYjNDM7XHRjYXNlIFNFQ19QRVJDUFU6XG4gXHRcdHJldHVybiB0cnVlO1xuIFx0ZGVmYXVsdDpcbiBcdFx0cmV0dXJuIGZhbHNlO1xuQEAgLTQ1NjksNiAmIzQzOzQ2MDAsOCBAQCBicGZfb2JqZWN0X19zZWN0aW9uX3RvX2xpYmJwZl9tYXBfdHlwZShjb25zdCBzdHJ1Y3QgYnBmX29iamVjdCAqb2JqLCBpbnQgc2huZHgpXG4gXHRcdHJldHVybiBMSUJCUEZfTUFQX0RBVEE7XG4gXHRjYXNlIFNFQ19ST0RBVEE6XG4gXHRcdHJldHVybiBMSUJCUEZfTUFQX1JPREFUQTtcbiYjNDM7XHRjYXNlIFNFQ19QRVJDUFU6XG4mIzQzO1x0XHRyZXR1cm4gTElCQlBGX01BUF9QRVJDUFU7XG4gXHRkZWZhdWx0OlxuIFx0XHRyZXR1cm4gTElCQlBGX01BUF9VTlNQRUM7XG4gXHR9XG5AQCAtNDk0NCw3ICYjNDM7NDk3Nyw3IEBAIHN0YXRpYyBpbnQgbWFwX2ZpbGxfYnRmX3R5cGVfaW5mbyhzdHJ1Y3QgYnBmX29iamVjdCAqb2JqLCBzdHJ1Y3QgYnBmX21hcCAqbWFwKVxuIFxuIFx0LypcbiBcdCAqIExMVk0gYW5ub3RhdGVzIGdsb2JhbCBkYXRhIGRpZmZlcmVudGx5IGluIEJURiwgdGhhdCBpcyxcbi1cdCAqIG9ubHkgYXMgJiMzOTsuZGF0YSYjMzk7LCAmIzM5Oy5ic3MmIzM5OyBvciAmIzM5Oy5yb2RhdGEmIzM5Oy5cbiYjNDM7XHQgKiBvbmx5IGFzICYjMzk7LmRhdGEmIzM5OywgJiMzOTsuYnNzJiMzOTssICYjMzk7LnBlcmNwdSYjMzk7IG9yICYjMzk7LnJvZGF0YSYjMzk7LlxuIFx0ICovXG4gXHRpZiAoIWJwZl9tYXBfX2lzX2ludGVybmFsKG1hcCkpXG4gXHRcdHJldHVybiAtRU5PRU5UO1xuQEAgLTUyOTMsMTggJiM0Mzs1MzI2LDI2IEBAIHN0YXRpYyBpbnRcbiBicGZfb2JqZWN0X19wb3B1bGF0ZV9pbnRlcm5hbF9tYXAoc3RydWN0IGJwZl9vYmplY3QgKm9iaiwgc3RydWN0IGJwZl9tYXAgKm1hcClcbiB7XG4gXHRlbnVtIGxpYmJwZl9tYXBfdHlwZSBtYXBfdHlwZSA9IG1hcC1cdTAwM2VsaWJicGZfdHlwZTtcbiYjNDM7XHRib29sIGlzX3BlcmNwdSA9IG1hcF90eXBlID09IExJQkJQRl9NQVBfUEVSQ1BVO1xuJiM0MztcdGNvbnN0IF9fdTY0IHVwZGF0ZV9mbGFncyA9IGlzX3BlcmNwdSA/IEJQRl9GX0FMTF9DUFVTIDogMDtcbiBcdGludCBlcnIsIHplcm8gPSAwO1xuIFx0c2l6ZV90IG1tYXBfc3o7XG4gXG4mIzQzO1x0aWYgKGlzX3BlcmNwdSBcdTAwMjZcdTAwMjYgIW9iai1cdTAwM2VnZW5fbG9hZGVyIFx1MDAyNlx1MDAyNiAha2VybmVsX3N1cHBvcnRzKG9iaiwgRkVBVF9QRVJDUFVfREFUQSkpIHtcbiYjNDM7XHRcdHByX3dhcm4oXCYjMzQ7bWFwICYjMzk7JXMmIzM5Ozoga2VybmVsIGRvZXMgbm90IHN1cHBvcnQgcGVyY3B1IGRhdGEuXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRicGZfbWFwX19uYW1lKG1hcCkpO1xuJiM0MztcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuJiM0MztcdH1cbiYjNDM7XG4gXHRpZiAob2JqLVx1MDAzZWdlbl9sb2FkZXIpIHtcbiBcdFx0YnBmX2dlbl9fbWFwX3VwZGF0ZV9lbGVtKG9iai1cdTAwM2VnZW5fbG9hZGVyLCBtYXAgLSBvYmotXHUwMDNlbWFwcyxcbi1cdFx0XHRcdFx0IG1hcC1cdTAwM2VtbWFwZWQsIG1hcC1cdTAwM2VkZWYudmFsdWVfc2l6ZSk7XG4mIzQzO1x0XHRcdFx0XHQgbWFwLVx1MDAzZW1tYXBlZCwgbWFwLVx1MDAzZWRlZi52YWx1ZV9zaXplLCB1cGRhdGVfZmxhZ3MpO1xuIFx0XHRpZiAobWFwX3R5cGUgPT0gTElCQlBGX01BUF9ST0RBVEEgfHwgbWFwX3R5cGUgPT0gTElCQlBGX01BUF9LQ09ORklHKVxuIFx0XHRcdGJwZl9nZW5fX21hcF9mcmVlemUob2JqLVx1MDAzZWdlbl9sb2FkZXIsIG1hcCAtIG9iai1cdTAwM2VtYXBzKTtcbiBcdFx0cmV0dXJuIDA7XG4gXHR9XG4gXG4tXHRlcnIgPSBicGZfbWFwX3VwZGF0ZV9lbGVtKG1hcC1cdTAwM2VmZCwgXHUwMDI2emVybywgbWFwLVx1MDAzZW1tYXBlZCwgMCk7XG4mIzQzO1x0ZXJyID0gYnBmX21hcF91cGRhdGVfZWxlbShtYXAtXHUwMDNlZmQsIFx1MDAyNnplcm8sIG1hcC1cdTAwM2VtbWFwZWQsIHVwZGF0ZV9mbGFncyk7XG4gXHRpZiAoZXJyKSB7XG4gXHRcdGVyciA9IC1lcnJubztcbiBcdFx0cHJfd2FybihcJiMzNDttYXAgJiMzOTslcyYjMzk7OiBmYWlsZWQgdG8gc2V0IGluaXRpYWwgY29udGVudHM6ICVzXFxuXCYjMzQ7LFxuQEAgLTUzNDksNiAmIzQzOzUzOTAsMTMgQEAgYnBmX29iamVjdF9fcG9wdWxhdGVfaW50ZXJuYWxfbWFwKHN0cnVjdCBicGZfb2JqZWN0ICpvYmosIHN0cnVjdCBicGZfbWFwICptYXApXG4gXHRcdFx0cmV0dXJuIGVycjtcbiBcdFx0fVxuIFx0XHRtYXAtXHUwMDNlbW1hcGVkID0gbW1hcGVkO1xuJiM0MztcdH0gZWxzZSBpZiAoaXNfcGVyY3B1KSB7XG4mIzQzO1x0XHRpZiAobXByb3RlY3QobWFwLVx1MDAzZW1tYXBlZCwgbW1hcF9zeiwgUFJPVF9SRUFEKSkge1xuJiM0MztcdFx0XHRlcnIgPSAtZXJybm87XG4mIzQzO1x0XHRcdHByX3dhcm4oXCYjMzQ7bWFwICYjMzk7JXMmIzM5OzogZmFpbGVkIHRvIG1wcm90ZWN0KCkgY29udGVudHM6ICVzXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRcdGJwZl9tYXBfX25hbWUobWFwKSwgZXJyc3RyKGVycikpO1xuJiM0MztcdFx0XHRyZXR1cm4gZXJyO1xuJiM0MztcdFx0fVxuIFx0fSBlbHNlIGlmIChtYXAtXHUwMDNlbW1hcGVkKSB7XG4gXHRcdG11bm1hcChtYXAtXHUwMDNlbW1hcGVkLCBtbWFwX3N6KTtcbiBcdFx0bWFwLVx1MDAzZW1tYXBlZCA9IE5VTEw7XG5AQCAtNTYyNyw2ICYjNDM7NTY3NSw5IEBAIGJwZl9vYmplY3RfX2NyZWF0ZV9tYXBzKHN0cnVjdCBicGZfb2JqZWN0ICpvYmopXG4gXHRcdCAqL1xuIFx0XHRpZiAoYnBmX21hcF9faXNfaW50ZXJuYWwobWFwKSBcdTAwMjZcdTAwMjYgIWtlcm5lbF9zdXBwb3J0cyhvYmosIEZFQVRfR0xPQkFMX0RBVEEpKVxuIFx0XHRcdG1hcC1cdTAwM2VhdXRvY3JlYXRlID0gZmFsc2U7XG4mIzQzO1x0XHRpZiAoYnBmX21hcF9faXNfaW50ZXJuYWwobWFwKSBcdTAwMjZcdTAwMjYgYnBmX21hcF9fdHlwZShtYXApID09IEJQRl9NQVBfVFlQRV9QRVJDUFVfQVJSQVkgXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHQgICAgIWtlcm5lbF9zdXBwb3J0cyhvYmosIEZFQVRfUEVSQ1BVX0RBVEEpKVxuJiM0MztcdFx0XHRtYXAtXHUwMDNlYXV0b2NyZWF0ZSA9IGZhbHNlO1xuIFxuIFx0XHRpZiAoIW1hcC1cdTAwM2VhdXRvY3JlYXRlKSB7XG4gXHRcdFx0cHJfZGVidWcoXCYjMzQ7bWFwICYjMzk7JXMmIzM5Ozogc2tpcHBlZCBhdXRvLWNyZWF0aW5nLi4uXFxuXCYjMzQ7LCBtYXAtXHUwMDNlbmFtZSk7XG5AQCAtMTA4MDcsMTEgJiM0MzsxMDg1OCwxNiBAQCBzdGF0aWMgYm9vbCBtYXBfdXNlc19yZWFsX25hbWUoY29uc3Qgc3RydWN0IGJwZl9tYXAgKm1hcClcbiBcdCAqIHN1Y2ggbWFwJiMzOTtzIGNvcnJlc3BvbmRpbmcgRUxGIHNlY3Rpb24gbmFtZSBhcyBhIG1hcCBuYW1lLlxuIFx0ICogVGhpcyBjaGVjayBkaXN0aW5ndWlzaGVzIC5kYXRhLy5yb2RhdGEgZnJvbSAuZGF0YS4qIGFuZCAucm9kYXRhLipcbiBcdCAqIG1hcHMgdG8ga25vdyB3aGljaCBuYW1lIGhhcyB0byBiZSByZXR1cm5lZCB0byB0aGUgdXNlci5cbiYjNDM7XHQgKiBNYXAgbmFtZSBvZiB0aGUgY3VzdG9tIC5wZXJjcHUuKiBtYXBzIG1pZ2h0IGJlIHRydW5jYXRlZCB0b1xuJiM0MztcdCAqIEJQRl9PQkpfTkFNRV9MRU4tMSBjaGFycyBpbiBpbnRlcm5hbF9tYXBfbmFtZSgpLiBIZW5jZSwgcGVyY3B1IGRhdGFcbiYjNDM7XHQgKiBtYXBzIG11c3QgdXNlIHJlYWwgbmFtZSBmb3IgdGhlaXIgdXNlci12aXNpYmxlIG5hbWUuXG4gXHQgKi9cbiBcdGlmIChtYXAtXHUwMDNlbGliYnBmX3R5cGUgPT0gTElCQlBGX01BUF9EQVRBIFx1MDAyNlx1MDAyNiBzdHJjbXAobWFwLVx1MDAzZXJlYWxfbmFtZSwgREFUQV9TRUMpICE9IDApXG4gXHRcdHJldHVybiB0cnVlO1xuIFx0aWYgKG1hcC1cdTAwM2VsaWJicGZfdHlwZSA9PSBMSUJCUEZfTUFQX1JPREFUQSBcdTAwMjZcdTAwMjYgc3RyY21wKG1hcC1cdTAwM2VyZWFsX25hbWUsIFJPREFUQV9TRUMpICE9IDApXG4gXHRcdHJldHVybiB0cnVlO1xuJiM0MztcdGlmIChtYXAtXHUwMDNlbGliYnBmX3R5cGUgPT0gTElCQlBGX01BUF9QRVJDUFUpXG4mIzQzO1x0XHRyZXR1cm4gdHJ1ZTtcbiBcdHJldHVybiBmYWxzZTtcbiB9XG4gXG5kaWZmIC0tZ2l0IGEvdG9vbHMvbGliL2JwZi9saWJicGZfaW50ZXJuYWwuaCBiL3Rvb2xzL2xpYi9icGYvbGliYnBmX2ludGVybmFsLmhcbmluZGV4IDdhNzRhYmI5MDRmOGIuLjRjNDZkMzRmYzA1NWQgMTAwNjQ0XG4tLS0gYS90b29scy9saWIvYnBmL2xpYmJwZl9pbnRlcm5hbC5oXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy9saWIvYnBmL2xpYmJwZl9pbnRlcm5hbC5oXG5AQCAtNDAxLDYgJiM0Mzs0MDEsOCBAQCBlbnVtIGtlcm5fZmVhdHVyZV9pZCB7XG4gXHRGRUFUX0JURl9MQVlPVVQsXG4gXHQvKiBLZXJuZWwgc3VwcG9ydHMgQlBGIHN5c2NhbGwgY29tbW9uIGF0dHJpYnV0ZXMgKi9cbiBcdEZFQVRfQlBGX1NZU0NBTExfQ09NTU9OX0FUVFJTLFxuJiM0MztcdC8qIEtlcm5lbCBzdXBwb3J0cyBwZXJjcHUgZGF0YSAqL1xuJiM0MztcdEZFQVRfUEVSQ1BVX0RBVEEsXG4gXHRfX0ZFQVRfQ05ULFxuIH07XG4gXG5kaWZmIC0tZ2l0IGEvdG9vbHMvbGliL2JwZi9za2VsX2ludGVybmFsLmggYi90b29scy9saWIvYnBmL3NrZWxfaW50ZXJuYWwuaFxuaW5kZXggNTNmZWU1M2QzNmQ1MS4uMWYzZjMzMmRmZmJlOSAxMDA2NDRcbi0tLSBhL3Rvb2xzL2xpYi9icGYvc2tlbF9pbnRlcm5hbC5oXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy9saWIvYnBmL3NrZWxfaW50ZXJuYWwuaFxuQEAgLTEzMSw4ICYjNDM7MTMxLDEwIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBza2VsX2ZyZWVfbWFwX2RhdGEodm9pZCAqcCwgX191NjQgYWRkciwgc2l6ZV90IHN6KVxuIHtcbiBcdGlmIChhZGRyICE9IH4wVUxMKVxuIFx0XHRrdmZyZWUocCk7XG4tXHQvKiBXaGVuIGFkZHIgPT0gfjBVTEwgdGhlICYjMzk7cCYjMzk7IHBvaW50cyB0b1xuLVx0ICogKChzdHJ1Y3QgYnBmX2FycmF5ICopbWFwKS1cdTAwM2V2YWx1ZS4gU2VlIHNrZWxfZmluYWxpemVfbWFwX2RhdGEuXG4mIzQzO1x0LypcbiYjNDM7XHQgKiBXaGVuIGFkZHIgPT0gfjBVTEwgdGhlIGluaXQgYnVmZmVyIGhhcyBhbHJlYWR5IGJlZW4gcmVsZWFzZWQuXG4mIzQzO1x0ICogRm9yIHNrZWxfZmluYWxpemVfbWFwX2RhdGEoKSwgJiMzOTtwJiMzOTsgcG9pbnRzIHRvXG4mIzQzO1x0ICogKChzdHJ1Y3QgYnBmX2FycmF5ICopbWFwKS1cdTAwM2V2YWx1ZS5cbiBcdCAqL1xuIH1cbiBcbkBAIC0xNzAsNiAmIzQzOzE3MiwxNSBAQCBzdGF0aWMgaW5saW5lIHZvaWQgKnNrZWxfZmluYWxpemVfbWFwX2RhdGEoX191NjQgKmluaXRfdmFsLCBzaXplX3QgbW1hcF9zeiwgaW50XG4gXHRyZXR1cm4gYWRkcjtcbiB9XG4gXG4mIzQzO3N0YXRpYyBpbmxpbmUgaW50IHNrZWxfcHJvdGVjdF9tYXBfZGF0YSh2b2lkICpwLCBfX3U2NCAqaW5pdF92YWwsIHNpemVfdCBzeilcbiYjNDM7e1xuJiM0MztcdCh2b2lkKXN6O1xuJiM0MztcbiYjNDM7XHRrdmZyZWUocCk7XG4mIzQzO1x0KmluaXRfdmFsID0gfjBVTEw7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4gI2Vsc2VcbiBcbiBzdGF0aWMgaW5saW5lIHZvaWQgKnNrZWxfYWxsb2Moc2l6ZV90IHNpemUpXG5AQCAtMjA4LDYgJiM0MzsyMTksMTUgQEAgc3RhdGljIGlubGluZSB2b2lkICpza2VsX2ZpbmFsaXplX21hcF9kYXRhKF9fdTY0ICppbml0X3ZhbCwgc2l6ZV90IG1tYXBfc3osIGludFxuIFx0XHRyZXR1cm4gTlVMTDtcbiBcdHJldHVybiBhZGRyO1xuIH1cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbmxpbmUgaW50IHNrZWxfcHJvdGVjdF9tYXBfZGF0YSh2b2lkICpwLCBfX3U2NCAqaW5pdF92YWwsIHNpemVfdCBzeilcbiYjNDM7e1xuJiM0MztcdCh2b2lkKWluaXRfdmFsO1xuJiM0MztcbiYjNDM7XHRpZiAobXByb3RlY3QocCwgc3osIFBST1RfUkVBRCkpXG4mIzQzO1x0XHRyZXR1cm4gLWVycm5vO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4gI2VuZGlmXG4gXG4gc3RhdGljIGlubGluZSBpbnQgc2tlbF9jbG9zZW56KGludCBmZClcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvTWFrZWZpbGUgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvTWFrZWZpbGVcbmluZGV4IGQzNjU1YTcwNjQ4MjYuLjU2MGNlNDAxNmZiZmYgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvTWFrZWZpbGVcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9NYWtlZmlsZVxuQEAgLTUzMSw3ICYjNDM7NTMxLDcgQEAgTFNLRUxTX1NJR05FRCA6PSBmZW50cnlfdGVzdC5jIGZleGl0X3Rlc3QuYyBhdG9taWNzLmNcbiBcbiAjIEdlbmVyYXRlIGJvdGggbGlnaHQgc2tlbGV0b24gYW5kIGxpYmJwZiBza2VsZXRvbiBmb3IgdGhlc2VcbiBMU0tFTFNfRVhUUkEgOj0gdGVzdF9rc3ltc19tb2R1bGUuYyB0ZXN0X2tzeW1zX3dlYWsuYyBrZnVuY19jYWxsX3Rlc3QuYyBcXFxuLVx0a2Z1bmNfY2FsbF90ZXN0X3N1YnByb2cuY1xuJiM0MztcdGtmdW5jX2NhbGxfdGVzdF9zdWJwcm9nLmMgdGVzdF9nbG9iYWxfcGVyY3B1X2RhdGEuY1xuIFNLRUxfQkxBQ0tMSVNUICYjNDM7PSAkJChMU0tFTFMpICQkKExTS0VMU19TSUdORUQpXG4gXG4gdGVzdF9zdGF0aWNfbGlua2VkLnNrZWwuaC1kZXBzIDo9IHRlc3Rfc3RhdGljX2xpbmtlZDEuYnBmLm8gdGVzdF9zdGF0aWNfbGlua2VkMi5icGYub1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2dsb2JhbF9kYXRhX2luaXQuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2dsb2JhbF9kYXRhX2luaXQuY1xuaW5kZXggODQ2NjMzMmQ3NDA2Zi4uMjYyNTY1MWIzNGM3ZSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2dsb2JhbF9kYXRhX2luaXQuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvZ2xvYmFsX2RhdGFfaW5pdC5jXG5AQCAtMSw1ICYjNDM7MSw4IEBAXG4gLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiAjaW5jbHVkZSBcdTAwM2N0ZXN0X3Byb2dzLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7YnBmL2xpYmJwZl9pbnRlcm5hbC5oXCYjMzQ7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O3Rlc3RfZ2xvYmFsX3BlcmNwdV9kYXRhLnNrZWwuaFwmIzM0O1xuJiM0MzsjaW5jbHVkZSBcJiMzNDt0ZXN0X2dsb2JhbF9wZXJjcHVfZGF0YS5sc2tlbC5oXCYjMzQ7XG4gXG4gdm9pZCB0ZXN0X2dsb2JhbF9kYXRhX2luaXQodm9pZClcbiB7XG5AQCAtNjAsMyAmIzQzOzYzLDMxMCBAQCB2b2lkIHRlc3RfZ2xvYmFsX2RhdGFfaW5pdCh2b2lkKVxuIFx0ZnJlZShuZXd2YWwpO1xuIFx0YnBmX29iamVjdF9fY2xvc2Uob2JqKTtcbiB9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCB0ZXN0X3BlcmNwdV9kYXRhX29uX2NwdXMoc3RydWN0IGJwZl9tYXAgKm1hcCwgaW50IG1hcF9mZCwgaW50IHByb2dfZmQsIGludCAqcnVucClcbiYjNDM7e1xuJiM0MztcdF9fdTY0IGFyZ3NbMl0gPSB7MHgxMjM0VUxMLCAweDU2NzhVTEx9O1xuJiM0MztcdExJQkJQRl9PUFRTKGJwZl90ZXN0X3J1bl9vcHRzLCB0b3B0cyxcbiYjNDM7XHRcdCAgICAuY3R4X2luID0gYXJncyxcbiYjNDM7XHRcdCAgICAuY3R4X3NpemVfaW4gPSBzaXplb2YoYXJncyksXG4mIzQzO1x0XHQgICAgLmZsYWdzID0gQlBGX0ZfVEVTVF9SVU5fT05fQ1BVLFxuJiM0MztcdCk7XG4mIzQzO1x0aW50IGksIGVyciwga2V5ID0gMCwgbnVtX29ubGluZSwgcnVuID0gMDtcbiYjNDM7XHRib29sICpvbmxpbmU7XG4mIzQzO1xuJiM0MztcdGVyciA9IHBhcnNlX2NwdV9tYXNrX2ZpbGUoXCYjMzQ7L3N5cy9kZXZpY2VzL3N5c3RlbS9jcHUvb25saW5lXCYjMzQ7LCBcdTAwMjZvbmxpbmUsIFx1MDAyNm51bV9vbmxpbmUpO1xuJiM0MztcdGlmICghQVNTRVJUX09LKGVyciwgXCYjMzQ7cGFyc2VfY3B1X21hc2tfZmlsZVwmIzM0OykpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdC8qIHJ1biBvbiBldmVyeSBvbmxpbmUtQ1BVICovXG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgbnVtX29ubGluZTsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdHN0cnVjdCB0ZXN0X2dsb2JhbF9wZXJjcHVfZGF0YV9fcGVyY3B1IGRhdGEgPSB7fTtcbiYjNDM7XHRcdF9fdTY0IGZsYWdzO1xuJiM0MztcbiYjNDM7XHRcdGlmICghb25saW5lW2ldKVxuJiM0MztcdFx0XHRjb250aW51ZTtcbiYjNDM7XG4mIzQzO1x0XHR0b3B0cy5jcHUgPSBpO1xuJiM0MztcdFx0dG9wdHMucmV0dmFsID0gLTE7XG4mIzQzO1x0XHRlcnIgPSBicGZfcHJvZ190ZXN0X3J1bl9vcHRzKHByb2dfZmQsIFx1MDAyNnRvcHRzKTtcbiYjNDM7XHRcdEFTU0VSVF9PSyhlcnIsIFwmIzM0O2JwZl9wcm9nX3Rlc3RfcnVuX29wdHNcJiMzNDspO1xuJiM0MztcdFx0QVNTRVJUX0VRKHRvcHRzLnJldHZhbCwgMCwgXCYjMzQ7YnBmX3Byb2dfdGVzdF9ydW5fb3B0cyByZXR2YWxcJiMzNDspO1xuJiM0MztcbiYjNDM7XHRcdGZsYWdzID0gKChfX3U2NCkgaSBcdTAwM2NcdTAwM2MgMzIpIHwgQlBGX0ZfQ1BVO1xuJiM0MztcdFx0aWYgKG1hcClcbiYjNDM7XHRcdFx0ZXJyID0gYnBmX21hcF9fbG9va3VwX2VsZW0obWFwLCBcdTAwMjZrZXksIHNpemVvZihrZXkpLCBcdTAwMjZkYXRhLCBzaXplb2YoZGF0YSksXG4mIzQzO1x0XHRcdFx0XHRcdCAgIGZsYWdzKTtcbiYjNDM7XHRcdGVsc2VcbiYjNDM7XHRcdFx0ZXJyID0gYnBmX21hcF9sb29rdXBfZWxlbV9mbGFncyhtYXBfZmQsIFx1MDAyNmtleSwgXHUwMDI2ZGF0YSwgZmxhZ3MpO1xuJiM0MztcdFx0aWYgKCFBU1NFUlRfT0soZXJyLCBcJiMzNDtsb29rdXBfZWxlbSBvbiBjcHVcJiMzNDspKVxuJiM0MztcdFx0XHRicmVhaztcbiYjNDM7XG4mIzQzO1x0XHRBU1NFUlRfRVEoKnJ1bnAsICYjNDM7JiM0MztydW4sIFwmIzM0O3J1blwmIzM0Oyk7XG4mIzQzO1x0XHRBU1NFUlRfRVEoZGF0YS5jcHVfaWQsIGksIFwmIzM0O2RhdGEuY3B1X2lkXCYjMzQ7KTtcbiYjNDM7XHRcdEFTU0VSVF9FUShkYXRhLmRhdGEsIDEsIFwmIzM0O2RhdGEuZGF0YVwmIzM0Oyk7XG4mIzQzO1x0XHRBU1NFUlRfVFJVRShkYXRhLnNldCwgXCYjMzQ7ZGF0YS5zZXRcJiMzNDspO1xuJiM0MztcdFx0QVNTRVJUX0VRKGRhdGEubnVtc1s2XSwgMHhjMGRlLCBcJiMzNDtkYXRhLm51bXNbNl1cJiMzNDspO1xuJiM0MztcdFx0QVNTRVJUX0VRKGRhdGEuc3RydWN0X2RhdGEuaSwgMSwgXCYjMzQ7c3RydWN0X2RhdGEuaVwmIzM0Oyk7XG4mIzQzO1x0XHRBU1NFUlRfVFJVRShkYXRhLnN0cnVjdF9kYXRhLnNldCwgXCYjMzQ7c3RydWN0X2RhdGEuc2V0XCYjMzQ7KTtcbiYjNDM7XHRcdEFTU0VSVF9FUShkYXRhLnN0cnVjdF9kYXRhLm51bXNbNl0sIDB4YzBkZSwgXCYjMzQ7c3RydWN0X2RhdGEubnVtc1s2XVwmIzM0Oyk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRmcmVlKG9ubGluZSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIHRlc3RfZ2xvYmFsX3BlcmNwdV9kYXRhX2luaXQodm9pZClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB0ZXN0X2dsb2JhbF9wZXJjcHVfZGF0YV9fcGVyY3B1IGluaXRfdmFsdWUgPSB7fTtcbiYjNDM7XHRzdHJ1Y3QgdGVzdF9nbG9iYWxfcGVyY3B1X2RhdGFfX3BlcmNwdSAqaW5pdF9kYXRhO1xuJiM0MztcdHN0cnVjdCB0ZXN0X2dsb2JhbF9wZXJjcHVfZGF0YSAqc2tlbCA9IE5VTEw7XG4mIzQzO1x0c2l6ZV90IGluaXRfZGF0YV9zejtcbiYjNDM7XHRzdHJ1Y3QgYnBmX21hcCAqbWFwO1xuJiM0MztcdGludCBwcm9nX2ZkLCBlcnI7XG4mIzQzO1xuJiM0MztcdHNrZWwgPSB0ZXN0X2dsb2JhbF9wZXJjcHVfZGF0YV9fb3BlbigpO1xuJiM0MztcdGlmICghQVNTRVJUX09LX1BUUihza2VsLCBcJiMzNDt0ZXN0X2dsb2JhbF9wZXJjcHVfZGF0YV9fb3BlblwmIzM0OykpXG4mIzQzO1x0XHRnb3RvIG91dDtcbiYjNDM7XHRpZiAoIUFTU0VSVF9PS19QVFIoc2tlbC1cdTAwM2VwZXJjcHUsIFwmIzM0O3NrZWwtXHUwMDNlcGVyY3B1XCYjMzQ7KSlcbiYjNDM7XHRcdGdvdG8gb3V0O1xuJiM0MztcdGlmICghQVNTRVJUX09LX1BUUihza2VsLVx1MDAzZWRhdGFfcGVyY3B1LCBcJiMzNDtza2VsLVx1MDAzZWRhdGFfcGVyY3B1XCYjMzQ7KSlcbiYjNDM7XHRcdGdvdG8gb3V0O1xuJiM0MztcdGlmICghQVNTRVJUX09LX1BUUihza2VsLVx1MDAzZXBlcmNwdV9kYXRhLCBcJiMzNDtza2VsLVx1MDAzZXBlcmNwdV9kYXRhXCYjMzQ7KSlcbiYjNDM7XHRcdGdvdG8gb3V0O1xuJiM0MztcdGlmICghQVNTRVJUX09LX1BUUihza2VsLVx1MDAzZXBlcmNwdV9sb29vb29vb29vbmcsIFwmIzM0O3NrZWwtXHUwMDNlcGVyY3B1X2xvb29vb29vb29uZ1wmIzM0OykpXG4mIzQzO1x0XHRnb3RvIG91dDtcbiYjNDM7XG4mIzQzO1x0QVNTRVJUX1NUUkVRKGJwZl9tYXBfX25hbWUoc2tlbC1cdTAwM2VtYXBzLnBlcmNwdV9kYXRhKSwgXCYjMzQ7LnBlcmNwdS5kYXRhXCYjMzQ7LFxuJiM0MztcdFx0ICAgICBcJiMzNDsucGVyY3B1LmRhdGEgbWFwIG5hbWVcJiMzNDspO1xuJiM0MztcdEFTU0VSVF9TVFJFUShicGZfbWFwX19uYW1lKHNrZWwtXHUwMDNlbWFwcy5kYXRhX3BlcmNwdSksIFwmIzM0Oy5kYXRhLnBlcmNwdVwmIzM0OyxcbiYjNDM7XHRcdCAgICAgXCYjMzQ7LmRhdGEucGVyY3B1IG1hcCBuYW1lXCYjMzQ7KTtcbiYjNDM7XHRBU1NFUlRfU1RSRVEoYnBmX21hcF9fbmFtZShza2VsLVx1MDAzZW1hcHMucGVyY3B1X2xvb29vb29vb29uZyksIFwmIzM0Oy5wZXJjcHUubG9vb29vb29vb25nXCYjMzQ7LFxuJiM0MztcdFx0ICAgICBcJiMzNDtsb25nIG1hcCBuYW1lXCYjMzQ7KTtcbiYjNDM7XHRBU1NFUlRfU1RSRVEoYnBmX21hcF9fbmFtZShza2VsLVx1MDAzZW1hcHMucGVyY3B1KSwgXCYjMzQ7LnBlcmNwdVwmIzM0OywgXCYjMzQ7bWFwIG5hbWVcJiMzNDspO1xuJiM0MztcdEFTU0VSVF9FUShza2VsLVx1MDAzZXBlcmNwdS1cdTAwM2VkYXRhLCAtMSwgXCYjMzQ7c2tlbC1cdTAwM2VwZXJjcHUtXHUwMDNlZGF0YVwmIzM0Oyk7XG4mIzQzO1x0QVNTRVJUX0ZBTFNFKHNrZWwtXHUwMDNlcGVyY3B1LVx1MDAzZXNldCwgXCYjMzQ7c2tlbC1cdTAwM2VwZXJjcHUtXHUwMDNlc2V0XCYjMzQ7KTtcbiYjNDM7XHRBU1NFUlRfRVEoc2tlbC1cdTAwM2VwZXJjcHUtXHUwMDNlbnVtc1s2XSwgMCwgXCYjMzQ7c2tlbC1cdTAwM2VwZXJjcHUtXHUwMDNlbnVtc1s2XVwmIzM0Oyk7XG4mIzQzO1x0QVNTRVJUX0VRKHNrZWwtXHUwMDNlcGVyY3B1LVx1MDAzZXN0cnVjdF9kYXRhLmksIC0xLCBcJiMzNDtzdHJ1Y3RfZGF0YS5pXCYjMzQ7KTtcbiYjNDM7XHRBU1NFUlRfRkFMU0Uoc2tlbC1cdTAwM2VwZXJjcHUtXHUwMDNlc3RydWN0X2RhdGEuc2V0LCBcJiMzNDtzdHJ1Y3RfZGF0YS5zZXRcJiMzNDspO1xuJiM0MztcdEFTU0VSVF9FUShza2VsLVx1MDAzZXBlcmNwdS1cdTAwM2VzdHJ1Y3RfZGF0YS5udW1zWzZdLCAwLCBcJiMzNDtzdHJ1Y3RfZGF0YS5udW1zWzZdXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0bWFwID0gc2tlbC1cdTAwM2VtYXBzLnBlcmNwdTtcbiYjNDM7XHRpZiAoIUFTU0VSVF9FUShicGZfbWFwX190eXBlKG1hcCksIEJQRl9NQVBfVFlQRV9QRVJDUFVfQVJSQVksIFwmIzM0O2JwZl9tYXBfX3R5cGVcJiMzNDspKVxuJiM0MztcdFx0Z290byBvdXQ7XG4mIzQzO1xuJiM0MztcdGluaXRfdmFsdWUuZGF0YSA9IDI7XG4mIzQzO1x0aW5pdF92YWx1ZS5udW1zWzZdID0gLTE7XG4mIzQzO1x0aW5pdF92YWx1ZS5zdHJ1Y3RfZGF0YS5pID0gMjtcbiYjNDM7XHRpbml0X3ZhbHVlLnN0cnVjdF9kYXRhLm51bXNbNl0gPSAtMTtcbiYjNDM7XHRlcnIgPSBicGZfbWFwX19zZXRfaW5pdGlhbF92YWx1ZShtYXAsIFx1MDAyNmluaXRfdmFsdWUsIHNpemVvZihpbml0X3ZhbHVlKSk7XG4mIzQzO1x0aWYgKCFBU1NFUlRfT0soZXJyLCBcJiMzNDticGZfbWFwX19zZXRfaW5pdGlhbF92YWx1ZVwmIzM0OykpXG4mIzQzO1x0XHRnb3RvIG91dDtcbiYjNDM7XG4mIzQzO1x0aW5pdF9kYXRhID0gYnBmX21hcF9faW5pdGlhbF92YWx1ZShtYXAsIFx1MDAyNmluaXRfZGF0YV9zeik7XG4mIzQzO1x0aWYgKCFBU1NFUlRfT0tfUFRSKGluaXRfZGF0YSwgXCYjMzQ7YnBmX21hcF9faW5pdGlhbF92YWx1ZVwmIzM0OykpXG4mIzQzO1x0XHRnb3RvIG91dDtcbiYjNDM7XG4mIzQzO1x0QVNTRVJUX0VRKGluaXRfZGF0YS1cdTAwM2VkYXRhLCBpbml0X3ZhbHVlLmRhdGEsIFwmIzM0O2luaXRfdmFsdWUgZGF0YVwmIzM0Oyk7XG4mIzQzO1x0QVNTRVJUX0VRKGluaXRfZGF0YS1cdTAwM2VzZXQsIGluaXRfdmFsdWUuc2V0LCBcJiMzNDtpbml0X3ZhbHVlIHNldFwmIzM0Oyk7XG4mIzQzO1x0QVNTRVJUX0VRKGluaXRfZGF0YS1cdTAwM2VzdHJ1Y3RfZGF0YS5pLCBpbml0X3ZhbHVlLnN0cnVjdF9kYXRhLmksIFwmIzM0O2luaXRfdmFsdWUgc3RydWN0X2RhdGEuaVwmIzM0Oyk7XG4mIzQzO1x0QVNTRVJUX0VRKGluaXRfZGF0YS1cdTAwM2VzdHJ1Y3RfZGF0YS5udW1zWzZdLCBpbml0X3ZhbHVlLnN0cnVjdF9kYXRhLm51bXNbNl0sXG4mIzQzO1x0XHQgIFwmIzM0O2luaXRfdmFsdWUgc3RydWN0X2RhdGEubnVtc1s2XVwmIzM0Oyk7XG4mIzQzO1x0QVNTRVJUX0VRKGluaXRfZGF0YV9zeiwgc2l6ZW9mKGluaXRfdmFsdWUpLCBcJiMzNDtpbml0X3ZhbHVlIHNpemVcJiMzNDspO1xuJiM0MztcdEFTU0VSVF9FUSgodm9pZCAqKSBpbml0X2RhdGEsICh2b2lkICopIHNrZWwtXHUwMDNlcGVyY3B1LCBcJiMzNDtza2VsLVx1MDAzZXBlcmNwdSBlcSBpbml0X2RhdGFcJiMzNDspO1xuJiM0MztcdEFTU0VSVF9FUShza2VsLVx1MDAzZXBlcmNwdS1cdTAwM2VkYXRhLCBpbml0X3ZhbHVlLmRhdGEsIFwmIzM0O3NrZWwtXHUwMDNlcGVyY3B1LVx1MDAzZWRhdGFcJiMzNDspO1xuJiM0MztcdEFTU0VSVF9FUShza2VsLVx1MDAzZXBlcmNwdS1cdTAwM2VzZXQsIGluaXRfdmFsdWUuc2V0LCBcJiMzNDtza2VsLVx1MDAzZXBlcmNwdS1cdTAwM2VzZXRcJiMzNDspO1xuJiM0MztcdEFTU0VSVF9FUShza2VsLVx1MDAzZXBlcmNwdS1cdTAwM2VzdHJ1Y3RfZGF0YS5pLCBpbml0X3ZhbHVlLnN0cnVjdF9kYXRhLmksXG4mIzQzO1x0XHQgIFwmIzM0O3NrZWwtXHUwMDNlcGVyY3B1LVx1MDAzZXN0cnVjdF9kYXRhLmlcJiMzNDspO1xuJiM0MztcdEFTU0VSVF9FUShza2VsLVx1MDAzZXBlcmNwdS1cdTAwM2VzdHJ1Y3RfZGF0YS5udW1zWzZdLCBpbml0X3ZhbHVlLnN0cnVjdF9kYXRhLm51bXNbNl0sXG4mIzQzO1x0XHQgIFwmIzM0O3NrZWwtXHUwMDNlcGVyY3B1LVx1MDAzZXN0cnVjdF9kYXRhLm51bXNbNl1cJiMzNDspO1xuJiM0MztcbiYjNDM7XHRlcnIgPSB0ZXN0X2dsb2JhbF9wZXJjcHVfZGF0YV9fbG9hZChza2VsKTtcbiYjNDM7XHRpZiAoIUFTU0VSVF9PSyhlcnIsIFwmIzM0O3Rlc3RfZ2xvYmFsX3BlcmNwdV9kYXRhX19sb2FkXCYjMzQ7KSlcbiYjNDM7XHRcdGdvdG8gb3V0O1xuJiM0MztcbiYjNDM7XHRBU1NFUlRfT0tfUFRSKHNrZWwtXHUwMDNlcGVyY3B1LCBcJiMzNDtza2VsLVx1MDAzZXBlcmNwdVwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdHByb2dfZmQgPSBicGZfcHJvZ3JhbV9fZmQoc2tlbC1cdTAwM2Vwcm9ncy51cGRhdGVfcGVyY3B1X2RhdGEpO1xuJiM0MztcdHRlc3RfcGVyY3B1X2RhdGFfb25fY3B1cyhtYXAsIGJwZl9tYXBfX2ZkKG1hcCksIHByb2dfZmQsIFx1MDAyNnNrZWwtXHUwMDNlYnNzLVx1MDAzZXJ1bik7XG4mIzQzO1xuJiM0MztvdXQ6XG4mIzQzO1x0dGVzdF9nbG9iYWxfcGVyY3B1X2RhdGFfX2Rlc3Ryb3koc2tlbCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIHRlc3RfZ2xvYmFsX3BlcmNwdV9kYXRhX2xza2VsKHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgdGVzdF9nbG9iYWxfcGVyY3B1X2RhdGFfbHNrZWwgKmxza2VsID0gTlVMTDtcbiYjNDM7XHRpbnQgcHJvZ19mZCwgbWFwX2ZkO1xuJiM0MztcbiYjNDM7XHRsc2tlbCA9IHRlc3RfZ2xvYmFsX3BlcmNwdV9kYXRhX2xza2VsX19vcGVuX2FuZF9sb2FkKCk7XG4mIzQzO1x0aWYgKCFBU1NFUlRfT0tfUFRSKGxza2VsLCBcJiMzNDt0ZXN0X2dsb2JhbF9wZXJjcHVfZGF0YV9sc2tlbF9fb3Blbl9hbmRfbG9hZFwmIzM0OykpXG4mIzQzO1x0XHRnb3RvIG91dDtcbiYjNDM7XG4mIzQzO1x0bWFwX2ZkID0gbHNrZWwtXHUwMDNlbWFwcy5wZXJjcHUubWFwX2ZkO1xuJiM0MztcdHByb2dfZmQgPSBsc2tlbC1cdTAwM2Vwcm9ncy51cGRhdGVfcGVyY3B1X2RhdGEucHJvZ19mZDtcbiYjNDM7XHR0ZXN0X3BlcmNwdV9kYXRhX29uX2NwdXMoTlVMTCwgbWFwX2ZkLCBwcm9nX2ZkLCBcdTAwMjZsc2tlbC1cdTAwM2Vic3MtXHUwMDNlcnVuKTtcbiYjNDM7XG4mIzQzO291dDpcbiYjNDM7XHR0ZXN0X2dsb2JhbF9wZXJjcHVfZGF0YV9sc2tlbF9fZGVzdHJveShsc2tlbCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgY3JlYXRlX3Jkb25seV9wZXJjcHVfYXJyYXkodm9pZClcbiYjNDM7e1xuJiM0MztcdExJQkJQRl9PUFRTKGJwZl9tYXBfY3JlYXRlX29wdHMsIG1hcF9vcHRzLFxuJiM0MztcdFx0ICAgIC5tYXBfZmxhZ3MgPSBCUEZfRl9SRE9OTFlfUFJPRyxcbiYjNDM7XHQpO1xuJiM0MztcdGludCBrZXkgPSAwLCBtYXBfZmQsIGVycjtcbiYjNDM7XHRfX3U2NCB2YWx1ZSA9IDA7XG4mIzQzO1xuJiM0MztcdG1hcF9mZCA9IGJwZl9tYXBfY3JlYXRlKEJQRl9NQVBfVFlQRV9QRVJDUFVfQVJSQVksIFwmIzM0O3BlcmNwdV9yb19tYXBcJiMzNDssIHNpemVvZihpbnQpLFxuJiM0MztcdFx0XHRcdHNpemVvZihfX3U2NCksIDEsIFx1MDAyNm1hcF9vcHRzKTtcbiYjNDM7XHRpZiAoIUFTU0VSVF9HRShtYXBfZmQsIDAsIFwmIzM0O2JwZl9tYXBfY3JlYXRlXCYjMzQ7KSlcbiYjNDM7XHRcdHJldHVybiAtMTtcbiYjNDM7XG4mIzQzO1x0ZXJyID0gYnBmX21hcF91cGRhdGVfZWxlbShtYXBfZmQsIFx1MDAyNmtleSwgXHUwMDI2dmFsdWUsIEJQRl9GX0FMTF9DUFVTKTtcbiYjNDM7XHRpZiAoIUFTU0VSVF9PSyhlcnIsIFwmIzM0O2JwZl9tYXBfdXBkYXRlX2VsZW1cJiMzNDspKVxuJiM0MztcdFx0Z290byBvdXQ7XG4mIzQzO1xuJiM0MztcdGVyciA9IGJwZl9tYXBfZnJlZXplKG1hcF9mZCk7XG4mIzQzO1x0aWYgKCFBU1NFUlRfT0soZXJyLCBcJiMzNDticGZfbWFwX2ZyZWV6ZVwmIzM0OykpXG4mIzQzO1x0XHRnb3RvIG91dDtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIG1hcF9mZDtcbiYjNDM7XG4mIzQzO291dDpcbiYjNDM7XHRjbG9zZShtYXBfZmQpO1xuJiM0MztcdHJldHVybiAtMTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgdGVzdF9nbG9iYWxfcGVyY3B1X2RhdGFfcmRvbmx5X2RpcmVjdF9yZWFkKHZvaWQpXG4mIzQzO3tcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFJhdyBpbnN0cnVjdGlvbnMgd2l0aCBtYW51YWxseSBwcmVwYXJlZCByZG9ubHkgcGVyY3B1X2FycmF5IG1hcFxuJiM0MztcdCAqIGZvciB0ZXN0aW5nIGRpcmVjdC1yZWFkIGdsb2JhbCBwZXJjcHUgZGF0YSwgYmVjYXVzZSBsaWJicGZcbiYjNDM7XHQgKiBkb2VzbiYjMzk7dCBoYXZlIHJkb25seSBpbnRlcm5hbCBwZXJjcHVfYXJyYXkgbWFwIHN1cHBvcnQgZm9yXG4mIzQzO1x0ICogZ2xvYmFsIHBlcmNwdSBkYXRhLlxuJiM0MztcdCAqL1xuJiM0MztcdHN0cnVjdCBicGZfaW5zbiBpbnNuc1tdID0ge1xuJiM0MztcdFx0QlBGX0xEX01BUF9WQUxVRShCUEZfUkVHXzEsIDAsIDApLFxuJiM0MztcdFx0QlBGX0xEWF9NRU0oQlBGX0RXLCBCUEZfUkVHXzAsIEJQRl9SRUdfMSwgMCksXG4mIzQzO1x0XHRCUEZfRVhJVF9JTlNOKCksXG4mIzQzO1x0fTtcbiYjNDM7XHRpbnQgbWFwX2ZkLCBwcm9nX2ZkO1xuJiM0MztcbiYjNDM7XHRtYXBfZmQgPSBjcmVhdGVfcmRvbmx5X3BlcmNwdV9hcnJheSgpO1xuJiM0MztcdGlmIChtYXBfZmQgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdGluc25zWzBdLmltbSA9IG1hcF9mZDtcbiYjNDM7XHRwcm9nX2ZkID0gYnBmX3Byb2dfbG9hZChCUEZfUFJPR19UWVBFX1NPQ0tFVF9GSUxURVIsIFwmIzM0O3BlcmNwdV9yb19wcm9nXCYjMzQ7LCBcJiMzNDtHUExcJiMzNDssIGluc25zLFxuJiM0MztcdFx0XHRcdEFSUkFZX1NJWkUoaW5zbnMpLCBOVUxMKTtcbiYjNDM7XHRpZiAoQVNTRVJUX0dFKHByb2dfZmQsIDAsIFwmIzM0O2JwZl9wcm9nX2xvYWRcJiMzNDspKVxuJiM0MztcdFx0Y2xvc2UocHJvZ19mZCk7XG4mIzQzO1x0Y2xvc2UobWFwX2ZkKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgdGVzdF9nbG9iYWxfcGVyY3B1X2RhdGFfcmRvbmx5X2RpcmVjdF93cml0ZSh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0TElCQlBGX09QVFMoYnBmX3Byb2dfbG9hZF9vcHRzLCBwcm9nX29wdHMpO1xuJiM0MztcdC8qIFNlZSB0aGUgY29tbWVudCBpbiB0ZXN0X2dsb2JhbF9wZXJjcHVfZGF0YV9yZG9ubHlfZGlyZWN0X3JlYWQoKSAqL1xuJiM0MztcdHN0cnVjdCBicGZfaW5zbiBpbnNuc1tdID0ge1xuJiM0MztcdFx0QlBGX0xEX01BUF9WQUxVRShCUEZfUkVHXzEsIDAsIDApLFxuJiM0MztcdFx0QlBGX0xEWF9NRU0oQlBGX0RXLCBCUEZfUkVHXzAsIEJQRl9SRUdfMSwgMCksXG4mIzQzO1x0XHRCUEZfU1RfTUVNKEJQRl9EVywgQlBGX1JFR18xLCAwLCAwKSxcbiYjNDM7XHRcdEJQRl9FWElUX0lOU04oKSxcbiYjNDM7XHR9O1xuJiM0MztcdGNoYXIgbG9nX2J1ZlsyNTZdID0ge307XG4mIzQzO1x0aW50IG1hcF9mZCwgcHJvZ19mZDtcbiYjNDM7XG4mIzQzO1x0cHJvZ19vcHRzLmxvZ19idWYgPSBsb2dfYnVmO1xuJiM0MztcdHByb2dfb3B0cy5sb2dfc2l6ZSA9IHNpemVvZihsb2dfYnVmKTtcbiYjNDM7XHRwcm9nX29wdHMubG9nX2xldmVsID0gMTtcbiYjNDM7XG4mIzQzO1x0bWFwX2ZkID0gY3JlYXRlX3Jkb25seV9wZXJjcHVfYXJyYXkoKTtcbiYjNDM7XHRpZiAobWFwX2ZkIFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHRpbnNuc1swXS5pbW0gPSBtYXBfZmQ7XG4mIzQzO1x0cHJvZ19mZCA9IGJwZl9wcm9nX2xvYWQoQlBGX1BST0dfVFlQRV9TT0NLRVRfRklMVEVSLCBcJiMzNDtwZXJjcHVfcm9fcHJvZ1wmIzM0OywgXCYjMzQ7R1BMXCYjMzQ7LCBpbnNucyxcbiYjNDM7XHRcdFx0XHRBUlJBWV9TSVpFKGluc25zKSwgXHUwMDI2cHJvZ19vcHRzKTtcbiYjNDM7XHRpZiAoIUFTU0VSVF9MVChwcm9nX2ZkLCAwLCBcJiMzNDticGZfcHJvZ19sb2FkXCYjMzQ7KSlcbiYjNDM7XHRcdGNsb3NlKHByb2dfZmQpO1xuJiM0MztcdGVsc2VcbiYjNDM7XHRcdEFTU0VSVF9IQVNfU1VCU1RSKGxvZ19idWYsIFwmIzM0O3dyaXRlIGludG8gbWFwIGZvcmJpZGRlblwmIzM0OywgXCYjMzQ7dmVyaWZpZXIgbG9nXCYjMzQ7KTtcbiYjNDM7XHRjbG9zZShtYXBfZmQpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCB0ZXN0X2dsb2JhbF9wZXJjcHVfZGF0YV92ZXJpZmllcl9sb2codm9pZClcbiYjNDM7e1xuJiM0MztcdFJVTl9URVNUUyh0ZXN0X2dsb2JhbF9wZXJjcHVfZGF0YSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIHRlc3RfZ2xvYmFsX3BlcmNwdV9kYXRhX2l0ZXIodm9pZClcbiYjNDM7e1xuJiM0MztcdERFQ0xBUkVfTElCQlBGX09QVFMoYnBmX2l0ZXJfYXR0YWNoX29wdHMsIG9wdHMpO1xuJiM0MztcdHN0cnVjdCB0ZXN0X2dsb2JhbF9wZXJjcHVfZGF0YSAqc2tlbDtcbiYjNDM7XHR1bmlvbiBicGZfaXRlcl9saW5rX2luZm8gbGluZm8gPSB7fTtcbiYjNDM7XHRzdHJ1Y3QgYnBmX2xpbmsgKmxpbmsgPSBOVUxMO1xuJiM0MztcdGludCBmZCwgbnVtX2NwdXMsIGxlbiwgZXJyO1xuJiM0MztcdGNoYXIgYnVmWzE2XTtcbiYjNDM7XG4mIzQzO1x0bnVtX2NwdXMgPSBsaWJicGZfbnVtX3Bvc3NpYmxlX2NwdXMoKTtcbiYjNDM7XHRpZiAoIUFTU0VSVF9HVChudW1fY3B1cywgMCwgXCYjMzQ7bGliYnBmX251bV9wb3NzaWJsZV9jcHVzXCYjMzQ7KSlcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0c2tlbCA9IHRlc3RfZ2xvYmFsX3BlcmNwdV9kYXRhX19vcGVuKCk7XG4mIzQzO1x0aWYgKCFBU1NFUlRfT0tfUFRSKHNrZWwsIFwmIzM0O3Rlc3RfZ2xvYmFsX3BlcmNwdV9kYXRhX19vcGVuXCYjMzQ7KSlcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0c2tlbC1cdTAwM2Vyb2RhdGEtXHUwMDNlbnVtX2NwdXMgPSBudW1fY3B1cztcbiYjNDM7XHRza2VsLVx1MDAzZXJvZGF0YS1cdTAwM2VvZmZzZXRvZl9udW0gPSBvZmZzZXRvZihzdHJ1Y3QgdGVzdF9nbG9iYWxfcGVyY3B1X2RhdGFfX3BlcmNwdSwgc3RydWN0X2RhdGEpO1xuJiM0MztcdHNrZWwtXHUwMDNlcm9kYXRhLVx1MDAzZW9mZnNldG9mX251bSAmIzQzOz0gc2l6ZW9mKHNrZWwtXHUwMDNlcGVyY3B1LVx1MDAzZXN0cnVjdF9kYXRhKSAtIHNpemVvZihpbnQpO1xuJiM0MztcdHNrZWwtXHUwMDNlcm9kYXRhLVx1MDAzZWVsZW1fc3ogPSByb3VuZHVwKHNpemVvZihzdHJ1Y3QgdGVzdF9nbG9iYWxfcGVyY3B1X2RhdGFfX3BlcmNwdSksIDgpO1xuJiM0MztcdHNrZWwtXHUwMDNlcGVyY3B1LVx1MDAzZXN0cnVjdF9kYXRhLm51bXNbNl0gPSAweGMwZGU7XG4mIzQzO1xuJiM0MztcdGVyciA9IHRlc3RfZ2xvYmFsX3BlcmNwdV9kYXRhX19sb2FkKHNrZWwpO1xuJiM0MztcdGlmICghQVNTRVJUX09LKGVyciwgXCYjMzQ7dGVzdF9nbG9iYWxfcGVyY3B1X2RhdGFfX2xvYWRcJiMzNDspKVxuJiM0MztcdFx0Z290byBvdXQ7XG4mIzQzO1xuJiM0MztcdGxpbmZvLm1hcC5tYXBfZmQgPSBicGZfbWFwX19mZChza2VsLVx1MDAzZW1hcHMucGVyY3B1KTtcbiYjNDM7XHRvcHRzLmxpbmtfaW5mbyA9IFx1MDAyNmxpbmZvO1xuJiM0MztcdG9wdHMubGlua19pbmZvX2xlbiA9IHNpemVvZihsaW5mbyk7XG4mIzQzO1x0bGluayA9IGJwZl9wcm9ncmFtX19hdHRhY2hfaXRlcihza2VsLVx1MDAzZXByb2dzLmR1bXBfcGVyY3B1X2RhdGEsIFx1MDAyNm9wdHMpO1xuJiM0MztcdGlmICghQVNTRVJUX09LX1BUUihsaW5rLCBcJiMzNDticGZfcHJvZ3JhbV9fYXR0YWNoX2l0ZXJcJiMzNDspKVxuJiM0MztcdFx0Z290byBvdXQ7XG4mIzQzO1xuJiM0MztcdGZkID0gYnBmX2l0ZXJfY3JlYXRlKGJwZl9saW5rX19mZChsaW5rKSk7XG4mIzQzO1x0aWYgKCFBU1NFUlRfR0UoZmQsIDAsIFwmIzM0O2JwZl9pdGVyX2NyZWF0ZVwmIzM0OykpXG4mIzQzO1x0XHRnb3RvIG91dDtcbiYjNDM7XG4mIzQzO1x0d2hpbGUgKChsZW4gPSByZWFkKGZkLCBidWYsIHNpemVvZihidWYpKSkgXHUwMDNlIDApXG4mIzQzO1x0XHRkbyB7IH0gd2hpbGUgKDApO1xuJiM0MztcdEFTU0VSVF9FUShsZW4sIDAsIFwmIzM0O3JlYWQgaXRlclwmIzM0Oyk7XG4mIzQzO1x0QVNTRVJUX1RSVUUoc2tlbC1cdTAwM2Vic3MtXHUwMDNlcnVuX2l0ZXIsIFwmIzM0O3J1bl9pdGVyXCYjMzQ7KTtcbiYjNDM7XHRBU1NFUlRfRVEoc2tlbC1cdTAwM2Vic3MtXHUwMDNlcGVyY3B1X2RhdGFfc3VtLCAweGMwZGUgKiBudW1fY3B1cywgXCYjMzQ7cGVyY3B1X2RhdGFfc3VtXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0Y2xvc2UoZmQpO1xuJiM0MztvdXQ6XG4mIzQzO1x0YnBmX2xpbmtfX2Rlc3Ryb3kobGluayk7XG4mIzQzO1x0dGVzdF9nbG9iYWxfcGVyY3B1X2RhdGFfX2Rlc3Ryb3koc2tlbCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3ZvaWQgdGVzdF9nbG9iYWxfcGVyY3B1X2RhdGEodm9pZClcbiYjNDM7e1xuJiM0MztcdGlmICghZmVhdF9zdXBwb3J0ZWQoTlVMTCwgRkVBVF9QRVJDUFVfREFUQSkpIHtcbiYjNDM7XHRcdHRlc3RfX3NraXAoKTtcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFwmIzM0O2luaXRcJiMzNDspKVxuJiM0MztcdFx0dGVzdF9nbG9iYWxfcGVyY3B1X2RhdGFfaW5pdCgpO1xuJiM0MztcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFwmIzM0O2xza2VsXCYjMzQ7KSlcbiYjNDM7XHRcdHRlc3RfZ2xvYmFsX3BlcmNwdV9kYXRhX2xza2VsKCk7XG4mIzQzO1x0aWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoXCYjMzQ7cmRvbmx5X2RpcmVjdF9yZWFkXCYjMzQ7KSlcbiYjNDM7XHRcdHRlc3RfZ2xvYmFsX3BlcmNwdV9kYXRhX3Jkb25seV9kaXJlY3RfcmVhZCgpO1xuJiM0MztcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFwmIzM0O3Jkb25seV9kaXJlY3Rfd3JpdGVcJiMzNDspKVxuJiM0MztcdFx0dGVzdF9nbG9iYWxfcGVyY3B1X2RhdGFfcmRvbmx5X2RpcmVjdF93cml0ZSgpO1xuJiM0MztcdHRlc3RfZ2xvYmFsX3BlcmNwdV9kYXRhX3ZlcmlmaWVyX2xvZygpO1xuJiM0MztcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFwmIzM0O2l0ZXJcJiMzNDspKVxuJiM0MztcdFx0dGVzdF9nbG9iYWxfcGVyY3B1X2RhdGFfaXRlcigpO1xuJiM0Mzt9XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3RfZ2xvYmFsX3BlcmNwdV9kYXRhLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF9nbG9iYWxfcGVyY3B1X2RhdGEuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLmE5NDQzZmIyMDUwZTlcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X2dsb2JhbF9wZXJjcHVfZGF0YS5jXG5AQCAtMCwwICYjNDM7MSw4OCBAQFxuJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuJiM0MzsjaW5jbHVkZSBcdTAwM2N2bWxpbnV4LmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjYnBmL2JwZl9oZWxwZXJzLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7YnBmX21pc2MuaFwmIzM0O1xuJiM0MztcbiYjNDM7LyogVXNlZCBmb3IgdGVzdGluZyBtYXAgbmFtZS4gKi9cbiYjNDM7aW50IGxvb25nIFNFQyhcJiMzNDsucGVyY3B1Lmxvb29vb29vb29uZ1wmIzM0Oyk7XG4mIzQzO2ludCBkYXRhMyBTRUMoXCYjMzQ7LmRhdGEucGVyY3B1XCYjMzQ7KTtcbiYjNDM7aW50IGRhdGEyIFNFQyhcJiMzNDsucGVyY3B1LmRhdGFcJiMzNDspO1xuJiM0MztcbiYjNDM7aW50IHJ1bjtcbiYjNDM7aW50IGNwdV9pZCBTRUMoXCYjMzQ7LnBlcmNwdVwmIzM0Oyk7XG4mIzQzO2ludCBkYXRhIFNFQyhcJiMzNDsucGVyY3B1XCYjMzQ7KSA9IC0xO1xuJiM0MztpbnQgbnVtc1s3XSBTRUMoXCYjMzQ7LnBlcmNwdVwmIzM0Oyk7XG4mIzQzO2Jvb2wgc2V0IFNFQyhcJiMzNDsucGVyY3B1XCYjMzQ7KSA9IGZhbHNlO1xuJiM0MztzdHJ1Y3Qge1xuJiM0MztcdGNoYXIgc2V0O1xuJiM0MztcdGludCBpO1xuJiM0MztcdGludCBudW1zWzddO1xuJiM0Mzt9IHN0cnVjdF9kYXRhIFNFQyhcJiMzNDsucGVyY3B1XCYjMzQ7KSA9IHtcbiYjNDM7XHQuc2V0ID0gMCxcbiYjNDM7XHQuaSA9IC0xLFxuJiM0Mzt9O1xuJiM0MztcbiYjNDM7U0VDKFwmIzM0O3Jhd190cC90YXNrX3JlbmFtZVwmIzM0OylcbiYjNDM7X19hdXhpbGlhcnlcbiYjNDM7aW50IHVwZGF0ZV9wZXJjcHVfZGF0YSh2b2lkICpjdHgpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3RfZGF0YS5udW1zWzZdID0gMHhjMGRlO1xuJiM0MztcdHN0cnVjdF9kYXRhLnNldCA9IDE7XG4mIzQzO1x0c3RydWN0X2RhdGEuaSA9IDE7XG4mIzQzO1x0bnVtc1s2XSA9IDB4YzBkZTtcbiYjNDM7XHRkYXRhID0gMTtcbiYjNDM7XHRydW4mIzQzOyYjNDM7O1xuJiM0MztcdHNldCA9IHRydWU7XG4mIzQzO1x0Y3B1X2lkID0gYnBmX2dldF9zbXBfcHJvY2Vzc29yX2lkKCk7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBjb25zdCBjaGFyIGZtdFtdIFNFQyhcJiMzNDsucGVyY3B1LmZtdFwmIzM0OykgPSBcJiMzNDtkYXRhICVkXFxuXCYjMzQ7O1xuJiM0MztcbiYjNDM7U0VDKFwmIzM0Oz9rcHJvYmVcJiMzNDspXG4mIzQzO19fZmFpbHVyZSBfX21zZyhcJiMzNDtSe3tbMC05XSYjNDM7fX0gcG9pbnRzIHRvIHBlcmNwdV9hcnJheSBtYXAgd2hpY2ggY2Fubm90IGJlIHVzZWQgYXMgY29uc3Qgc3RyaW5nXCYjMzQ7KVxuJiM0MztpbnQgdmVyaWZpZXJfc3RybmNtcCh2b2lkICpjdHgpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gYnBmX3N0cm5jbXAoXCYjMzQ7dGVzdFwmIzM0OywgNSwgZm10KTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7U0VDKFwmIzM0Oz9rcHJvYmVcJiMzNDspXG4mIzQzO19fZmFpbHVyZSBfX21zZyhcJiMzNDtSe3tbMC05XSYjNDM7fX0gcG9pbnRzIHRvIHBlcmNwdV9hcnJheSBtYXAgd2hpY2ggY2Fubm90IGJlIHVzZWQgYXMgY29uc3Qgc3RyaW5nXCYjMzQ7KVxuJiM0MztpbnQgdmVyaWZpZXJfc25wcmludGYodm9pZCAqY3R4KVxuJiM0Mzt7XG4mIzQzO1x0dTY0IGFyZ3NbXSA9IHsgZGF0YSB9O1xuJiM0MztcdGNoYXIgYnVmWzEyOF07XG4mIzQzO1x0aW50IGxlbjtcbiYjNDM7XG4mIzQzO1x0bGVuID0gYnBmX3NucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksIGZtdCwgYXJncywgc2l6ZW9mKGFyZ3MpKTtcbiYjNDM7XHRpZiAobGVuIFx1MDAzZSAwKVxuJiM0MztcdFx0YnBmX3ByaW50ayhcJiMzNDtzbnByaW50ZjogJXNcXG5cJiMzNDssIGJ1Zik7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3ZvbGF0aWxlIGNvbnN0IF9fdTMyIG51bV9jcHVzID0gMDtcbiYjNDM7dm9sYXRpbGUgY29uc3QgaW50IG9mZnNldG9mX251bTtcbiYjNDM7dm9sYXRpbGUgY29uc3QgaW50IGVsZW1fc3o7XG4mIzQzO19fdTMyIHBlcmNwdV9kYXRhX3N1bSA9IDA7XG4mIzQzO2Jvb2wgcnVuX2l0ZXIgPSBmYWxzZTtcbiYjNDM7XG4mIzQzO1NFQyhcJiMzNDtpdGVyL2JwZl9tYXBfZWxlbVwmIzM0OylcbiYjNDM7X19hdXhpbGlhcnlcbiYjNDM7aW50IGR1bXBfcGVyY3B1X2RhdGEoc3RydWN0IGJwZl9pdGVyX19icGZfbWFwX2VsZW0gKmN0eClcbiYjNDM7e1xuJiM0MztcdHZvaWQgKnBwdHIgPSBjdHgtXHUwMDNldmFsdWU7XG4mIzQzO1x0aW50IGk7XG4mIzQzO1xuJiM0MztcdGlmICghcHB0cilcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7XHRydW5faXRlciA9IHRydWU7XG4mIzQzO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG51bV9jcHVzOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0cGVyY3B1X2RhdGFfc3VtICYjNDM7PSAqKGludCAqKSAocHB0ciAmIzQzOyBvZmZzZXRvZl9udW0pO1xuJiM0MztcdFx0cHB0ciAmIzQzOz0gZWxlbV9zejtcbiYjNDM7XHR9XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO2NoYXIgX2xpY2Vuc2VbXSBTRUMoXCYjMzQ7bGljZW5zZVwmIzM0OykgPSBcJiMzNDtHUExcJiMzNDs7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMTk6NDI8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDssCiAgICAmIzM0O0JQRl9KSVQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtwZXJjcHVfYXJyYXlfbWFwX2RpcmVjdF92YWx1ZV9hZGRyJiMzNDssCiAgICAmIzM0O3BlcmNwdV9hcnJheV9tYXBfZGlyZWN0X3ZhbHVlX21ldGEmIzM0OywKICAgICYjMzQ7YnBmX2RvX21pc2NfZml4dXBzJiMzNDssCiAgICAmIzM0O2JwZl9tYXBfZGlyZWN0X3JlYWQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBzdXBwb3J0IGZvciBgLnBlcmNwdWAgZ2xvYmFsIGRhdGEgbWFwcyBpbiBCUEYuIEl0IG1vZGlmaWVzIHRoZSBCUEYgdmVyaWZpZXIgdG8gaGFuZGxlIGRpcmVjdCBtZW1vcnkgcmVhZHMgZnJvbSBgQlBGX01BUF9UWVBFX1BFUkNQVV9BUlJBWWAgbWFwcyBhbmQgYWRkcyBKSVQgZml4dXBzIHRvIHBhdGNoIGBsZF9pbW02NGAgaW5zdHJ1Y3Rpb25zIHdpdGggcGVyLUNQVSByZWdpc3RlciBtb3Zlcy4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUgY29yZSBCUEYgc3Vic3lzdGVtIGFuZCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBtZW1vcnkgc2FmZXR5IGFuZCBjb3JyZWN0IHZlcmlmaWVyIGJlaGF2aW9yLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZDE1MWQzZDA5MzJhMzMxYzNlZjM4OWY4NjY3ODFhYTk1OGViODM5ZApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUaHUgQXVnIDYgMTk6NDI6MjAgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL2FycmF5bWFwLmMgYi9rZXJuZWwvYnBmL2FycmF5bWFwLmMKaW5kZXggMjQ4YjQ4MTgxNzhjZC4uMzQ4NjU3MDFmN2Y3NSAxMDA2NDQKLS0tIGEva2VybmVsL2JwZi9hcnJheW1hcC5jCiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9icGYvYXJyYXltYXAuYwpAQCAtMjU5LDYgJiM0MzsyNTksMzcgQEAgc3RhdGljIHZvaWQgKnBlcmNwdV9hcnJheV9tYXBfbG9va3VwX2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5KQogCXJldHVybiB0aGlzX2NwdV9wdHIoYXJyYXktJmd0O3BwdHJzW2luZGV4ICZhbXA7IGFycmF5LSZndDtpbmRleF9tYXNrXSk7CiB9CiAKJiM0MztzdGF0aWMgaW50IHBlcmNwdV9hcnJheV9tYXBfZGlyZWN0X3ZhbHVlX2FkZHIoY29uc3Qgc3RydWN0IGJwZl9tYXAgKm1hcCwgdTY0ICppbW0sIHUzMiBvZmYpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgYnBmX2FycmF5ICphcnJheSA9IGNvbnRhaW5lcl9vZihtYXAsIHN0cnVjdCBicGZfYXJyYXksIG1hcCk7CiYjNDM7CiYjNDM7CWlmICghYnBmX2ppdF9zdXBwb3J0c19wZXJjcHVfaW5zbigpKQomIzQzOwkJcmV0dXJuIC1FT1BOT1RTVVBQOwomIzQzOwlpZiAobWFwLSZndDttYXhfZW50cmllcyAhPSAxKQomIzQzOwkJcmV0dXJuIC1FT1BOT1RTVVBQOwomIzQzOwlpZiAob2ZmICZndDs9IG1hcC0mZ3Q7dmFsdWVfc2l6ZSkKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwomIzQzOwkqaW1tID0gKHU2NCkoX19mb3JjZSB1bnNpZ25lZCBsb25nKSBhcnJheS0mZ3Q7cHB0cnNbMF07CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHBlcmNwdV9hcnJheV9tYXBfZGlyZWN0X3ZhbHVlX21ldGEoY29uc3Qgc3RydWN0IGJwZl9tYXAgKm1hcCwgdTY0IGltbSwgdTMyICpvZmYpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgYnBmX2FycmF5ICphcnJheSA9IGNvbnRhaW5lcl9vZihtYXAsIHN0cnVjdCBicGZfYXJyYXksIG1hcCk7CiYjNDM7CXU2NCBiYXNlID0gKHU2NCkoX19mb3JjZSB1bnNpZ25lZCBsb25nKSBhcnJheS0mZ3Q7cHB0cnNbMF07CiYjNDM7CiYjNDM7CWlmICghYnBmX2ppdF9zdXBwb3J0c19wZXJjcHVfaW5zbigpKQomIzQzOwkJcmV0dXJuIC1FT1BOT1RTVVBQOwomIzQzOwlpZiAobWFwLSZndDttYXhfZW50cmllcyAhPSAxKQomIzQzOwkJcmV0dXJuIC1FT1BOT1RTVVBQOwomIzQzOwlpZiAoaW1tICZsdDsgYmFzZSB8fCBpbW0gJmd0Oz0gYmFzZSAmIzQzOyBhcnJheS0mZ3Q7ZWxlbV9zaXplKQomIzQzOwkJcmV0dXJuIC1FTk9FTlQ7CiYjNDM7CiYjNDM7CSpvZmYgPSBpbW0gLSBiYXNlOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiAvKiBlbWl0IEJQRiBpbnN0cnVjdGlvbnMgZXF1aXZhbGVudCB0byBDIGNvZGUgb2YgcGVyY3B1X2FycmF5X21hcF9sb29rdXBfZWxlbSgpICovCiBzdGF0aWMgaW50IHBlcmNwdV9hcnJheV9tYXBfZ2VuX2xvb2t1cChzdHJ1Y3QgYnBmX21hcCAqbWFwLCBzdHJ1Y3QgYnBmX2luc24gKmluc25fYnVmKQogewpAQCAtNTUxLDkgJiM0Mzs1ODIsMTAgQEAgc3RhdGljIGludCBhcnJheV9tYXBfY2hlY2tfYnRmKHN0cnVjdCBicGZfbWFwICptYXAsCiAJCQkgICAgICAgY29uc3Qgc3RydWN0IGJ0Zl90eXBlICprZXlfdHlwZSwKIAkJCSAgICAgICBjb25zdCBzdHJ1Y3QgYnRmX3R5cGUgKnZhbHVlX3R5cGUpCiB7Ci0JLyogT25lIGV4Y2VwdGlvbiBmb3Iga2V5bGVzcyBCVEY6IC5ic3MvLmRhdGEvLnJvZGF0YSBtYXAgKi8KJiM0MzsJLyogT25lIGV4Y2VwdGlvbiBmb3Iga2V5bGVzcyBCVEY6IC5ic3MvLmRhdGEvLnJvZGF0YS8ucGVyY3B1IG1hcCAqLwogCWlmIChidGZfdHlwZV9pc192b2lkKGtleV90eXBlKSkgewotCQlpZiAobWFwLSZndDttYXBfdHlwZSAhPSBCUEZfTUFQX1RZUEVfQVJSQVkgfHwKJiM0MzsJCWlmICgobWFwLSZndDttYXBfdHlwZSAhPSBCUEZfTUFQX1RZUEVfQVJSQVkgJmFtcDsmYW1wOwomIzQzOwkJICAgICBtYXAtJmd0O21hcF90eXBlICE9IEJQRl9NQVBfVFlQRV9QRVJDUFVfQVJSQVkpIHx8CiAJCSAgICBtYXAtJmd0O21heF9lbnRyaWVzICE9IDEpCiAJCQlyZXR1cm4gLUVJTlZBTDsKIApAQCAtODMyLDYgJiM0Mzs4NjQsOCBAQCBjb25zdCBzdHJ1Y3QgYnBmX21hcF9vcHMgcGVyY3B1X2FycmF5X21hcF9vcHMgPSB7CiAJLm1hcF9nZXRfbmV4dF9rZXkgPSBicGZfYXJyYXlfZ2V0X25leHRfa2V5LAogCS5tYXBfbG9va3VwX2VsZW0gPSBwZXJjcHVfYXJyYXlfbWFwX2xvb2t1cF9lbGVtLAogCS5tYXBfZ2VuX2xvb2t1cCA9IHBlcmNwdV9hcnJheV9tYXBfZ2VuX2xvb2t1cCwKJiM0MzsJLm1hcF9kaXJlY3RfdmFsdWVfYWRkciA9IHBlcmNwdV9hcnJheV9tYXBfZGlyZWN0X3ZhbHVlX2FkZHIsCiYjNDM7CS5tYXBfZGlyZWN0X3ZhbHVlX21ldGEgPSBwZXJjcHVfYXJyYXlfbWFwX2RpcmVjdF92YWx1ZV9tZXRhLAogCS5tYXBfdXBkYXRlX2VsZW0gPSBhcnJheV9tYXBfdXBkYXRlX2VsZW0sCiAJLm1hcF9kZWxldGVfZWxlbSA9IGFycmF5X21hcF9kZWxldGVfZWxlbSwKIAkubWFwX2xvb2t1cF9wZXJjcHVfZWxlbSA9IHBlcmNwdV9hcnJheV9tYXBfbG9va3VwX3BlcmNwdV9lbGVtLApkaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9iYWNrdHJhY2suYyBiL2tlcm5lbC9icGYvYmFja3RyYWNrLmMKaW5kZXggMmY0NzNhZDRmZDdjMS4uM2YxNTBlODU4YWU4YSAxMDA2NDQKLS0tIGEva2VybmVsL2JwZi9iYWNrdHJhY2suYwomIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvYnBmL2JhY2t0cmFjay5jCkBAIC0yMTQsNyAmIzQzOzIxNCw2IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBidF9pc19yZWdfc2V0KHN0cnVjdCBiYWNrdHJhY2tfc3RhdGUgKmJ0LCB1MzIgcmVnKQogCXJldHVybiBidC0mZ3Q7cmVnX21hc2tzW2J0LSZndDtmcmFtZV0gJmFtcDsgKDEgJmx0OyZsdDsgcmVnKTsKIH0KIAotCiAvKiBmb3JtYXQgcmVnaXN0ZXJzIGJpdG1hc2ssIGUuZy4sICYjMzQ7cjAscjIscjQmIzM0OyBmb3IgMHgxNSBtYXNrICovCiBzdGF0aWMgdm9pZCBmbXRfcmVnX21hc2soY2hhciAqYnVmLCBzc2l6ZV90IGJ1Zl9zeiwgdTMyIHJlZ19tYXNrKQogewpAQCAtMjU0LDcgJiM0MzsyNTMsNiBAQCB2b2lkIGJwZl9mbXRfc3RhY2tfbWFzayhjaGFyICpidWYsIHNzaXplX3QgYnVmX3N6LCB1NjQgc3RhY2tfbWFzaykKIAl9CiB9CiAKLQogLyogRm9yIGdpdmVuIHZlcmlmaWVyIHN0YXRlIGJhY2t0cmFja19pbnNuKCkgaXMgY2FsbGVkIGZyb20gdGhlIGxhc3QgaW5zbiB0bwogICogdGhlIGZpcnN0IGluc24uIEl0cyBwdXJwb3NlIGlzIHRvIGNvbXB1dGUgYSBiaXRtYXNrIG9mIHJlZ2lzdGVycyBhbmQKICAqIHN0YWNrIHNsb3RzIHRoYXQgbmVlZHMgcHJlY2lzaW9uIGluIHRoZSBwYXJlbnQgdmVyaWZpZXIgc3RhdGUuCmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL2J0Zi5jIGIva2VybmVsL2JwZi9idGYuYwppbmRleCA0MjQxNDYzM2NmMjYzLi5jODA3YWQyNjNlNmY4IDEwMDY0NAotLS0gYS9rZXJuZWwvYnBmL2J0Zi5jCiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9icGYvYnRmLmMKQEAgLTI1MzQsNyAmIzQzOzI1MzQsNiBAQCBzdGF0aWMgdm9pZCBidGZfYml0ZmllbGRfc2hvdyh2b2lkICpkYXRhLCB1OCBiaXRzX29mZnNldCwKIAlidGZfaW50MTI4X3ByaW50KHNob3csIHByaW50X251bSk7CiB9CiAKLQogc3RhdGljIHZvaWQgYnRmX2ludF9iaXRzX3Nob3coY29uc3Qgc3RydWN0IGJ0ZiAqYnRmLAogCQkJICAgICAgY29uc3Qgc3RydWN0IGJ0Zl90eXBlICp0LAogCQkJICAgICAgdm9pZCAqZGF0YSwgdTggYml0c19vZmZzZXQsCmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL2NmZy5jIGIva2VybmVsL2JwZi9jZmcuYwppbmRleCBkYjM0MTZhN2M5MDQ3Li44MThmN2FmYWM4M2E1IDEwMDY0NAotLS0gYS9rZXJuZWwvYnBmL2NmZy5jCiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9icGYvY2ZnLmMKQEAgLTQ3LDcgJiM0Mzs0Nyw2IEBAIGVudW0gewogCUJSQU5DSCA9IDIsCiB9OwogCi0KIHN0YXRpYyB2b2lkIG1hcmtfc3VicHJvZ19jaGFuZ2VzX3BrdF9kYXRhKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGludCBvZmYpCiB7CiAJc3RydWN0IGJwZl9zdWJwcm9nX2luZm8gKnN1YnByb2c7CmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL2NvbnN0X2ZvbGQuYyBiL2tlcm5lbC9icGYvY29uc3RfZm9sZC5jCmluZGV4IGIyYTE5YWNhZGI5MWUuLjU3ODcyNDZiZWYzMDEgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9icGYvY29uc3RfZm9sZC5jCiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9icGYvY29uc3RfZm9sZC5jCkBAIC0xODIsNyAmIzQzOzE4Miw2IEBAIHN0YXRpYyB2b2lkIGNvbnN0X3JlZ194ZmVyKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBjb25zdF9hcmdfaW5mbyAqCiAJCXU2NCB2YWwgPSAwOwogCiAJCWlmICghYnBmX21hcF9pc19yZG9ubHkobWFwKSB8fCAhbWFwLSZndDtvcHMtJmd0O21hcF9kaXJlY3RfdmFsdWVfYWRkciB8fAotCQkgICAgbWFwLSZndDttYXBfdHlwZSA9PSBCUEZfTUFQX1RZUEVfSU5TTl9BUlJBWSB8fAogCQkgICAgb2ZmICZsdDsgMCB8fCBvZmYgJiM0Mzsgc2l6ZSAmZ3Q7IG1hcC0mZ3Q7dmFsdWVfc2l6ZSB8fAogCQkgICAgYnBmX21hcF9kaXJlY3RfcmVhZChtYXAsIG9mZiwgc2l6ZSwgJmFtcDt2YWwsIGlzX2xkc3gpKSB7CiAJCQkqZHN0ID0gdW5rbm93bjsKZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvZml4dXBzLmMgYi9rZXJuZWwvYnBmL2ZpeHVwcy5jCmluZGV4IGEwYmRkYWRhNzk2NGUuLmYyMzk4NzQ5MTAzYmEgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9icGYvZml4dXBzLmMKJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2JwZi9maXh1cHMuYwpAQCAtMTQ0Niw3ICYjNDM7MTQ0Niw2IEBAIGludCBicGZfZml4dXBfY2FsbF9hcmdzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpCiAJcmV0dXJuIGVycjsKIH0KIAotCiAvKiBUaGUgZnVuY3Rpb24gcmVxdWlyZXMgdGhhdCBmaXJzdCBpbnN0cnVjdGlvbiBpbiAmIzM5O3BhdGNoJiMzOTsgaXMgaW5zbnNpW3Byb2ctJmd0O2xlbiAtIDFdICovCiBzdGF0aWMgaW50IGFkZF9oaWRkZW5fc3VicHJvZyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKnBhdGNoLCBpbnQgbGVuKQogewpAQCAtMTgxOCw2ICYjNDM7MTgxNyw0MyBAQCBpbnQgYnBmX2RvX21pc2NfZml4dXBzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpCiAJCQlnb3RvIG5leHRfaW5zbjsKIAkJfQogCiYjNDM7CQlpZiAoYnBmX2ppdF9zdXBwb3J0c19wZXJjcHVfaW5zbigpICZhbXA7JmFtcDsKJiM0MzsJCSAgICBpbnNuLSZndDtjb2RlID09IChCUEZfTEQgfCBCUEZfSU1NIHwgQlBGX0RXKSAmYW1wOyZhbXA7CiYjNDM7CQkgICAgKGluc24tJmd0O3NyY19yZWcgPT0gQlBGX1BTRVVET19NQVBfVkFMVUUgfHwKJiM0MzsJCSAgICAgaW5zbi0mZ3Q7c3JjX3JlZyA9PSBCUEZfUFNFVURPX01BUF9JRFhfVkFMVUUpKSB7CiYjNDM7CQkJc3RydWN0IGJwZl9tYXAgKm1hcDsKJiM0MzsKJiM0MzsJCQlhdXggPSAmYW1wO2Vudi0mZ3Q7aW5zbl9hdXhfZGF0YVtpICYjNDM7IGRlbHRhXTsKJiM0MzsJCQltYXAgPSBlbnYtJmd0O3VzZWRfbWFwc1thdXgtJmd0O21hcF9pbmRleF07CiYjNDM7CQkJaWYgKG1hcC0mZ3Q7bWFwX3R5cGUgIT0gQlBGX01BUF9UWVBFX1BFUkNQVV9BUlJBWSkKJiM0MzsJCQkJZ290byBuZXh0X2luc247CiYjNDM7CiYjNDM7CQkJcHJvZy0mZ3Q7aml0X3JlcXVpcmVkID0gdHJ1ZTsKJiM0MzsKJiM0MzsJCQkvKgomIzQzOwkJCSAqIFdlIGFyZSAqc2tpcHBpbmcqIGZpcnN0IGhhbGYgb2YgbGRfaW1tNjQgaW5zbgomIzQzOwkJCSAqIHdpdGggJiMzOTtpJiM0MzsmIzQzOzsmIzM5OywgcGF0Y2hpbmcgb3ZlciBzZWNvbmQgaGFsZiBvZiBpdAomIzQzOwkJCSAqIHdpdGggdGhhdCBzYW1lIGhhbGYgJiM0MzsgbW92NjRfcGVyY3B1X3JlZyBpbnNuLgomIzQzOwkJCSAqIEFsbCBiZWNhdXNlIGJwZl9wYXRjaF9pbnNuX2RhdGEoKSBjYW4gb25seQomIzQzOwkJCSAqIHJlcGxhY2Ugb25lIDgtYnl0ZSBpbnNuLCB3aGljaCBkb2VzIG5vdCB3b3JrCiYjNDM7CQkJICogd2VsbCBmb3IgbGRfaW1tNjQgaW5zbi4KJiM0MzsJCQkgKi8KJiM0MzsKJiM0MzsJCQlpbnNuX2J1ZlswXSA9IGluc25bMV07CiYjNDM7CQkJaW5zbl9idWZbMV0gPSBCUEZfTU9WNjRfUEVSQ1BVX1JFRyhpbnNuLSZndDtkc3RfcmVnLCBpbnNuLSZndDtkc3RfcmVnKTsKJiM0MzsJCQljbnQgPSAyOwomIzQzOwomIzQzOwkJCWkmIzQzOyYjNDM7OwomIzQzOwkJCW5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGkgJiM0MzsgZGVsdGEsIGluc25fYnVmLCBjbnQpOwomIzQzOwkJCWlmICghbmV3X3Byb2cpCiYjNDM7CQkJCXJldHVybiAtRU5PTUVNOwomIzQzOwomIzQzOwkJCWRlbHRhICAgICYjNDM7PSBjbnQgLSAxOwomIzQzOwkJCWVudi0mZ3Q7cHJvZyA9IHByb2cgPSBuZXdfcHJvZzsKJiM0MzsJCQlpbnNuICAgICAgPSBuZXdfcHJvZy0mZ3Q7aW5zbnNpICYjNDM7IGkgJiM0MzsgZGVsdGE7CiYjNDM7CQkJZ290byBuZXh0X2luc247CiYjNDM7CQl9CiYjNDM7CiAJCWlmIChpbnNuLSZndDtjb2RlICE9IChCUEZfSk1QIHwgQlBGX0NBTEwpKQogCQkJZ290byBuZXh0X2luc247CiAJCWlmIChpbnNuLSZndDtzcmNfcmVnID09IEJQRl9QU0VVRE9fQ0FMTCkKZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvaGFzaHRhYi5jIGIva2VybmVsL2JwZi9oYXNodGFiLmMKaW5kZXggOWYzOTRlMWFhMmU4NS4uZDQwY2I1ZGQ0NDZjYSAxMDA2NDQKLS0tIGEva2VybmVsL2JwZi9oYXNodGFiLmMKJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2JwZi9oYXNodGFiLmMKQEAgLTk5OCw3ICYjNDM7OTk4LDYgQEAgc3RhdGljIHZvaWQgZGVjX2VsZW1fY291bnQoc3RydWN0IGJwZl9odGFiICpodGFiKQogCQlhdG9taWNfZGVjKCZhbXA7aHRhYi0mZ3Q7Y291bnQpOwogfQogCi0KIHN0YXRpYyB2b2lkIGZyZWVfaHRhYl9lbGVtKHN0cnVjdCBicGZfaHRhYiAqaHRhYiwgc3RydWN0IGh0YWJfZWxlbSAqbCkKIHsKIAlodGFiX3B1dF9mZF92YWx1ZShodGFiLCBsKTsKQEAgLTI5NzAsNyAmIzQzOzI5NjksNiBAQCBzdGF0aWMgaW50IHJodGFiX2RlbGV0ZV9lbGVtKHN0cnVjdCBicGZfcmh0YWIgKnJodGFiLCBzdHJ1Y3Qgcmh0YWJfZWxlbSAqZWxlbSwgdgogCXJldHVybiAwOwogfQogCi0KIHN0YXRpYyBsb25nIHJodGFiX21hcF9kZWxldGVfZWxlbShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXkpCiB7CiAJc3RydWN0IGJwZl9yaHRhYiAqcmh0YWIgPSBjb250YWluZXJfb2YobWFwLCBzdHJ1Y3QgYnBmX3JodGFiLCBtYXApOwpkaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9oZWxwZXJzLmMgYi9rZXJuZWwvYnBmL2hlbHBlcnMuYwppbmRleCA0NzA5YTVhZDA0NzQ3Li41ZTY4YTBhZGIxNGI0IDEwMDY0NAotLS0gYS9rZXJuZWwvYnBmL2hlbHBlcnMuYwomIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvYnBmL2hlbHBlcnMuYwpAQCAtNDg2OSw3ICYjNDM7NDg2OSw2IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYnRmX2tmdW5jX2lkX3NldCBnZW5lcmljX2tmdW5jX3NldCA9IHsKIAkuc2V0ICAgPSAmYW1wO2dlbmVyaWNfYnRmX2lkcywKIH07CiAKLQogQlRGX0lEX0xJU1QoZ2VuZXJpY19kdG9yX2lkcykKIEJURl9JRChzdHJ1Y3QsIHRhc2tfc3RydWN0KQogQlRGX0lEKGZ1bmMsIGJwZl90YXNrX3JlbGVhc2VfZHRvcikKZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvbGl2ZW5lc3MuYyBiL2tlcm5lbC9icGYvbGl2ZW5lc3MuYwppbmRleCAwYWFkZmJhZTBhY2M1Li45ZTI1ZTI0MWUxZmY0IDEwMDY0NAotLS0gYS9rZXJuZWwvYnBmL2xpdmVuZXNzLmMKJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2JwZi9saXZlbmVzcy5jCkBAIC0yNjksNyAmIzQzOzI2OSw2IEBAIGJwZl9pbnNuX3N1Y2Nlc3NvcnMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgdTMyIGlkeCkKIAogX19kaWFnX3BvcCgpOwogCi0KIHN0YXRpYyBpbmxpbmUgYm9vbCB1cGRhdGVfaW5zbihzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LAogCQkJICAgICAgIHN0cnVjdCBmdW5jX2luc3RhbmNlICppbnN0YW5jZSwgdTMyIGZyYW1lLCB1MzIgaW5zbl9pZHgpCiB7CkBAIC0xODY4LDcgJiM0MzsxODY3LDYgQEAgc3RhdGljIGludCBhbmFseXplX3N1YnByb2coc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwKIAlpZiAobmVlZF9yZXNjaGVkKCkpCiAJCWNvbmRfcmVzY2hlZCgpOwogCi0KIAkvKgogCSAqIFdoZW4gYW4gaW5zdGFuY2UgaXMgcmV1c2VkIChtdXN0X3dyaXRlX2luaXRpYWxpemVkID09IHRydWUpLAogCSAqIHJlY29yZCBpbnRvIGEgZnJlc2ggaW5zdGFuY2UgYW5kIG1lcmdlIGFmdGVyd2FyZC4gIFRoaXMgYXZvaWRzCmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL3F1ZXVlX3N0YWNrX21hcHMuYyBiL2tlcm5lbC9icGYvcXVldWVfc3RhY2tfbWFwcy5jCmluZGV4IGMxYzlkZWU0ZGNkZDAuLjZlOGIxOGMzMmExMDYgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9icGYvcXVldWVfc3RhY2tfbWFwcy5jCiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9icGYvcXVldWVfc3RhY2tfbWFwcy5jCkBAIC0xMjMsNyAmIzQzOzEyMyw2IEBAIHN0YXRpYyBsb25nIF9fcXVldWVfbWFwX2dldChzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICp2YWx1ZSwgYm9vbCBkZWxldGUpCiAJcmV0dXJuIGVycjsKIH0KIAotCiBzdGF0aWMgbG9uZyBfX3N0YWNrX21hcF9nZXQoc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqdmFsdWUsIGJvb2wgZGVsZXRlKQogewogCXN0cnVjdCBicGZfcXVldWVfc3RhY2sgKnFzID0gYnBmX3F1ZXVlX3N0YWNrKG1hcCk7CmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL3N5c2NhbGwuYyBiL2tlcm5lbC9icGYvc3lzY2FsbC5jCmluZGV4IDhkMTExZGE4ODY1NTMuLjdkOGMzZThlNmQ2MmUgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9icGYvc3lzY2FsbC5jCiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9icGYvc3lzY2FsbC5jCkBAIC02MzYsNyAmIzQzOzYzNiw2IEBAIGludCBicGZfbWFwX2FsbG9jX3BhZ2VzKGNvbnN0IHN0cnVjdCBicGZfbWFwICptYXAsIGludCBuaWQsCiAJcmV0dXJuIHJldDsKIH0KIAotCiBzdGF0aWMgaW50IGJ0Zl9maWVsZF9jbXAoY29uc3Qgdm9pZCAqYSwgY29uc3Qgdm9pZCAqYikKIHsKIAljb25zdCBzdHJ1Y3QgYnRmX2ZpZWxkICpmMSA9IGEsICpmMiA9IGI7CkBAIC0xODMwLDcgJiM0MzsxODI5LDYgQEAgc3RhdGljIGludCBtYXBfbG9va3VwX2VsZW0odW5pb24gYnBmX2F0dHIgKmF0dHIpCiAJcmV0dXJuIGVycjsKIH0KIAotCiAjZGVmaW5lIEJQRl9NQVBfVVBEQVRFX0VMRU1fTEFTVF9GSUVMRCBmbGFncwogCiBzdGF0aWMgaW50IG1hcF91cGRhdGVfZWxlbSh1bmlvbiBicGZfYXR0ciAqYXR0ciwgYnBmcHRyX3QgdWF0dHIpCkBAIC0zNDk3LDcgJiM0MzszNDk1LDYgQEAgaW50IGJwZl9saW5rX3ByaW1lKHN0cnVjdCBicGZfbGluayAqbGluaywgc3RydWN0IGJwZl9saW5rX3ByaW1lciAqcHJpbWVyKQogCWlmIChmZCAmbHQ7IDApCiAJCXJldHVybiBmZDsKIAotCiAJaWQgPSBicGZfbGlua19hbGxvY19pZChsaW5rKTsKIAlpZiAoaWQgJmx0OyAwKSB7CiAJCXB1dF91bnVzZWRfZmQoZmQpOwpAQCAtNTUwNSw3ICYjNDM7NTUwMiw2IEBAIHN0YXRpYyBpbnQgYnBmX2xpbmtfZ2V0X2luZm9fYnlfZmQoc3RydWN0IGZpbGUgKmZpbGUsCiAJcmV0dXJuIDA7CiB9CiAKLQogc3RhdGljIGludCB0b2tlbl9nZXRfaW5mb19ieV9mZChzdHJ1Y3QgZmlsZSAqZmlsZSwKIAkJCQlzdHJ1Y3QgYnBmX3Rva2VuICp0b2tlbiwKIAkJCQljb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0ciwKQEAgLTY1MDcsNyAmIzQzOzY1MDMsNiBAQCBCUEZfQ0FMTF8zKGJwZl9zeXNfYnBmLCBpbnQsIGNtZCwgdW5pb24gYnBmX2F0dHIgKiwgYXR0ciwgdTMyLCBhdHRyX3NpemUpCiAJcmV0dXJuIF9fc3lzX2JwZihjbWQsIEtFUk5FTF9CUEZQVFIoYXR0ciksIGF0dHJfc2l6ZSwgS0VSTkVMX0JQRlBUUihOVUxMKSwgMCk7CiB9CiAKLQogLyogVG8gc2h1dCB1cCAtV21pc3NpbmctcHJvdG90eXBlcy4KICAqIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCBieSB0aGUga2VybmVsIGxpZ2h0IHNrZWxldG9uCiAgKiB0byBsb2FkIGJwZiBwcm9ncmFtcyB3aGVuIG1vZHVsZXMgYXJlIGxvYWRlZCBvciBkdXJpbmcga2VybmVsIGJvb3QuCmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL3ZlcmlmaWVyLmMgYi9rZXJuZWwvYnBmL3ZlcmlmaWVyLmMKaW5kZXggZDkyNTE5N2MyZTVmNy4uMzk3NzIwMDJjYjdiZiAxMDA2NDQKLS0tIGEva2VybmVsL2JwZi92ZXJpZmllci5jCiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9icGYvdmVyaWZpZXIuYwpAQCAtNjM1LDcgJiM0Mzs2MzUsNiBAQCBzdGF0aWMgdm9pZCBfX21hcmtfZHlucHRyX3JlZyhzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnLAogCQkJICAgICAgZW51bSBicGZfZHlucHRyX3R5cGUgdHlwZSwKIAkJCSAgICAgIGJvb2wgZmlyc3Rfc2xvdCwgaW50IGlkLCBpbnQgcGFyZW50X2lkKTsKIAotCiBzdGF0aWMgdm9pZCBtYXJrX2R5bnB0cl9zdGFja19yZWdzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsCiAJCQkJICAgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnNyZWcxLAogCQkJCSAgIHN0cnVjdCBicGZfcmVnX3N0YXRlICpzcmVnMiwKQEAgLTE2NzIsNyAmIzQzOzE2NzEsNiBAQCBzdGF0aWMgYm9vbCBzYW1lX2NhbGxzaXRlcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX3N0YXRlICphLCBzdHJ1Y3QgYnBmX3ZlcmlmaWVyX3N0YQogCXJldHVybiB0cnVlOwogfQogCi0KIHZvaWQgYnBmX2ZyZWVfYmFja2VkZ2VzKHN0cnVjdCBicGZfc2NjX3Zpc2l0ICp2aXNpdCkKIHsKIAlzdHJ1Y3QgYnBmX3NjY19iYWNrZWRnZSAqYmFja2VkZ2UsICpuZXh0OwpAQCAtMjI5NCw3ICYjNDM7MjI5Miw2IEBAIHN0YXRpYyBzdHJ1Y3QgYnBmX3ZlcmlmaWVyX3N0YXRlICpwdXNoX2FzeW5jX2NiKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsCiAJcmV0dXJuICZhbXA7ZWxlbS0mZ3Q7c3Q7CiB9CiAKLQogc3RhdGljIGludCBjbXBfc3VicHJvZ3MoY29uc3Qgdm9pZCAqYSwgY29uc3Qgdm9pZCAqYikKIHsKIAlyZXR1cm4gKChzdHJ1Y3QgYnBmX3N1YnByb2dfaW5mbyAqKWEpLSZndDtzdGFydCAtCkBAIC00MDcxLDcgJiM0Mzs0MDY4LDYgQEAgc3RhdGljIGludCBjaGVja19zdGFja19yZWFkKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsCiAJcmV0dXJuIGVycjsKIH0KIAotCiAvKiBjaGVja19zdGFja193cml0ZSBkaXNwYXRjaGVzIHRvIGNoZWNrX3N0YWNrX3dyaXRlX2ZpeGVkX29mZiBvcgogICogY2hlY2tfc3RhY2tfd3JpdGVfdmFyX29mZi4KICAqCkBAIC00ODY3LDcgJiM0Mzs0ODYzLDYgQEAgc3RhdGljIGludCBjaGVja19zb2NrX2FjY2VzcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBpbnQgaW5zbl9pZHgsCiAJCXZhbGlkID0gZmFsc2U7CiAJfQogCi0KIAlpZiAodmFsaWQpIHsKIAkJZW52LSZndDtpbnNuX2F1eF9kYXRhW2luc25faWR4XS5jdHhfZmllbGRfc2l6ZSA9CiAJCQlpbmZvLmN0eF9maWVsZF9zaXplOwpAQCAtNTY2Miw2ICYjNDM7NTY1Nyw4IEBAIGludCBicGZfbWFwX2RpcmVjdF9yZWFkKHN0cnVjdCBicGZfbWFwICptYXAsIGludCBvZmYsIGludCBzaXplLCB1NjQgKnZhbCwKIAl1NjQgYWRkcjsKIAlpbnQgZXJyOwogCiYjNDM7CWlmIChtYXAtJmd0O21hcF90eXBlID09IEJQRl9NQVBfVFlQRV9JTlNOX0FSUkFZIHx8IG1hcC0mZ3Q7bWFwX3R5cGUgPT0gQlBGX01BUF9UWVBFX1BFUkNQVV9BUlJBWSkKJiM0MzsJCXJldHVybiAtRUlOVkFMOwogCWVyciA9IG1hcC0mZ3Q7b3BzLSZndDttYXBfZGlyZWN0X3ZhbHVlX2FkZHIobWFwLCAmYW1wO2FkZHIsIG9mZik7CiAJaWYgKGVycikKIAkJcmV0dXJuIGVycjsKQEAgLTYxNTgsNiAmIzQzOzYxNTUsNTEgQEAgc3RhdGljIHZvaWQgYWRkX3NjYWxhcl90b19yZWcoc3RydWN0IGJwZl9yZWdfc3RhdGUgKmRzdF9yZWcsIHM2NCB2YWwpCiAJcmVnX2JvdW5kc19zeW5jKGRzdF9yZWcpOwogfQogCiYjNDM7c3RhdGljIGludCBjaGVja19tYXBfbWVtX3JlYWQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZywgaW50IG9mZiwKJiM0MzsJCQkgICAgICBpbnQgYnBmX3NpemUsIGludCB2YWx1ZV9yZWdubywgYm9vbCBpc19sZHN4KQomIzQzO3sKJiM0MzsJc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZ3MgPSBjdXJfcmVncyhlbnYpOwomIzQzOwlpbnQgc2l6ZSA9IGJwZl9zaXplX3RvX2J5dGVzKGJwZl9zaXplKTsKJiM0MzsJc3RydWN0IGJwZl9tYXAgKm1hcCA9IHJlZy0mZ3Q7bWFwX3B0cjsKJiM0MzsKJiM0MzsJc3dpdGNoIChtYXAtJmd0O21hcF90eXBlKSB7CiYjNDM7CWNhc2UgQlBGX01BUF9UWVBFX0lOU05fQVJSQVk6CiYjNDM7CQlpZiAoYnBmX3NpemUgIT0gQlBGX0RXKSB7CiYjNDM7CQkJdmVyYm9zZShlbnYsICYjMzQ7SW52YWxpZCByZWFkIG9mICVkIGJ5dGVzIGZyb20gaW5zbl9hcnJheVxuJiMzNDssIHNpemUpOwomIzQzOwkJCXJldHVybiAtRUFDQ0VTOwomIzQzOwkJfQomIzQzOwkJcmVnc1t2YWx1ZV9yZWdub10gPSAqcmVnOwomIzQzOwkJYWRkX3NjYWxhcl90b19yZWcoJmFtcDtyZWdzW3ZhbHVlX3JlZ25vXSwgb2ZmKTsKJiM0MzsJCXJlZ3NbdmFsdWVfcmVnbm9dLnR5cGUgPSBQVFJfVE9fSU5TTjsKJiM0MzsJCXJldHVybiAwOwomIzQzOwljYXNlIEJQRl9NQVBfVFlQRV9QRVJDUFVfQVJSQVk6CiYjNDM7CQlnb3RvIHJlZ191bmtub3duOwomIzQzOwlkZWZhdWx0OgomIzQzOwkJYnJlYWs7CiYjNDM7CX0KJiM0MzsKJiM0MzsJLyogSWYgbWFwIGlzIHJlYWQtb25seSwgdHJhY2sgaXRzIGNvbnRlbnRzIGFzIHNjYWxhcnMuICovCiYjNDM7CWlmICh0bnVtX2lzX2NvbnN0KHJlZy0mZ3Q7dmFyX29mZikgJmFtcDsmYW1wOwomIzQzOwkgICAgYnBmX21hcF9pc19yZG9ubHkobWFwKSAmYW1wOyZhbXA7CiYjNDM7CSAgICBtYXAtJmd0O29wcy0mZ3Q7bWFwX2RpcmVjdF92YWx1ZV9hZGRyKSB7CiYjNDM7CQlpbnQgbWFwX29mZiA9IG9mZiAmIzQzOyByZWctJmd0O3Zhcl9vZmYudmFsdWU7CiYjNDM7CQl1NjQgdmFsID0gMDsKJiM0MzsJCWludCBlcnI7CiYjNDM7CiYjNDM7CQllcnIgPSBicGZfbWFwX2RpcmVjdF9yZWFkKG1hcCwgbWFwX29mZiwgc2l6ZSwgJmFtcDt2YWwsIGlzX2xkc3gpOwomIzQzOwkJaWYgKGVycikKJiM0MzsJCQlyZXR1cm4gZXJyOwomIzQzOwomIzQzOwkJcmVnc1t2YWx1ZV9yZWdub10udHlwZSA9IFNDQUxBUl9WQUxVRTsKJiM0MzsJCV9fbWFya19yZWdfa25vd24oJmFtcDtyZWdzW3ZhbHVlX3JlZ25vXSwgdmFsKTsKJiM0MzsJCXJldHVybiAwOwomIzQzOwl9CiYjNDM7CiYjNDM7cmVnX3Vua25vd246CiYjNDM7CW1hcmtfcmVnX3Vua25vd24oZW52LCByZWdzLCB2YWx1ZV9yZWdubyk7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKIC8qIGNoZWNrIHdoZXRoZXIgbWVtb3J5IGF0IChyZWdubyAmIzQzOyBvZmYpIGlzIGFjY2Vzc2libGUgZm9yIHQgPSAocmVhZCB8IHdyaXRlKQogICogaWYgdD09d3JpdGUsIHZhbHVlX3JlZ25vIGlzIGEgcmVnaXN0ZXIgd2hpY2ggdmFsdWUgaXMgc3RvcmVkIGludG8gbWVtb3J5CiAgKiBpZiB0PT1yZWFkLCB2YWx1ZV9yZWdubyBpcyBhIHJlZ2lzdGVyIHdoaWNoIHdpbGwgcmVjZWl2ZSB0aGUgdmFsdWUgZnJvbSBtZW1vcnkKQEAgLTYyMTIsMzggJiM0Mzs2MjU0LDcgQEAgc3RhdGljIGludCBjaGVja19tZW1fYWNjZXNzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGludCBpbnNuX2lkeCwgc3RydWN0IGIKIAkJaWYgKGtwdHJfZmllbGQpIHsKIAkJCWVyciA9IGNoZWNrX21hcF9rcHRyX2FjY2VzcyhlbnYsIHZhbHVlX3JlZ25vLCBpbnNuX2lkeCwga3B0cl9maWVsZCk7CiAJCX0gZWxzZSBpZiAodCA9PSBCUEZfUkVBRCAmYW1wOyZhbXA7IHZhbHVlX3JlZ25vICZndDs9IDApIHsKLQkJCXN0cnVjdCBicGZfbWFwICptYXAgPSByZWctJmd0O21hcF9wdHI7Ci0KLQkJCS8qCi0JCQkgKiBJZiBtYXAgaXMgcmVhZC1vbmx5LCB0cmFjayBpdHMgY29udGVudHMgYXMgc2NhbGFycywKLQkJCSAqIHVubGVzcyBpdCBpcyBhbiBpbnNuIGFycmF5IChzZWUgdGhlIHNwZWNpYWwgY2FzZSBiZWxvdykKLQkJCSAqLwotCQkJaWYgKHRudW1faXNfY29uc3QocmVnLSZndDt2YXJfb2ZmKSAmYW1wOyZhbXA7Ci0JCQkgICAgYnBmX21hcF9pc19yZG9ubHkobWFwKSAmYW1wOyZhbXA7Ci0JCQkgICAgbWFwLSZndDtvcHMtJmd0O21hcF9kaXJlY3RfdmFsdWVfYWRkciAmYW1wOyZhbXA7Ci0JCQkgICAgbWFwLSZndDttYXBfdHlwZSAhPSBCUEZfTUFQX1RZUEVfSU5TTl9BUlJBWSkgewotCQkJCWludCBtYXBfb2ZmID0gb2ZmICYjNDM7IHJlZy0mZ3Q7dmFyX29mZi52YWx1ZTsKLQkJCQl1NjQgdmFsID0gMDsKLQotCQkJCWVyciA9IGJwZl9tYXBfZGlyZWN0X3JlYWQobWFwLCBtYXBfb2ZmLCBzaXplLAotCQkJCQkJCSAgJmFtcDt2YWwsIGlzX2xkc3gpOwotCQkJCWlmIChlcnIpCi0JCQkJCXJldHVybiBlcnI7Ci0KLQkJCQlyZWdzW3ZhbHVlX3JlZ25vXS50eXBlID0gU0NBTEFSX1ZBTFVFOwotCQkJCV9fbWFya19yZWdfa25vd24oJmFtcDtyZWdzW3ZhbHVlX3JlZ25vXSwgdmFsKTsKLQkJCX0gZWxzZSBpZiAobWFwLSZndDttYXBfdHlwZSA9PSBCUEZfTUFQX1RZUEVfSU5TTl9BUlJBWSkgewotCQkJCWlmIChicGZfc2l6ZSAhPSBCUEZfRFcpIHsKLQkJCQkJdmVyYm9zZShlbnYsICYjMzQ7SW52YWxpZCByZWFkIG9mICVkIGJ5dGVzIGZyb20gaW5zbl9hcnJheVxuJiMzNDssCi0JCQkJCQkgICAgIHNpemUpOwotCQkJCQlyZXR1cm4gLUVBQ0NFUzsKLQkJCQl9Ci0JCQkJcmVnc1t2YWx1ZV9yZWdub10gPSAqcmVnOwotCQkJCWFkZF9zY2FsYXJfdG9fcmVnKCZhbXA7cmVnc1t2YWx1ZV9yZWdub10sIG9mZik7Ci0JCQkJcmVnc1t2YWx1ZV9yZWdub10udHlwZSA9IFBUUl9UT19JTlNOOwotCQkJfSBlbHNlIHsKLQkJCQltYXJrX3JlZ191bmtub3duKGVudiwgcmVncywgdmFsdWVfcmVnbm8pOwotCQkJfQomIzQzOwkJCWVyciA9IGNoZWNrX21hcF9tZW1fcmVhZChlbnYsIHJlZywgb2ZmLCBicGZfc2l6ZSwgdmFsdWVfcmVnbm8sIGlzX2xkc3gpOwogCQl9CiAJfSBlbHNlIGlmIChiYXNlX3R5cGUocmVnLSZndDt0eXBlKSA9PSBQVFJfVE9fTUVNKSB7CiAJCWJvb2wgcmRvbmx5X21lbSA9IHR5cGVfaXNfcmRvbmx5X21lbShyZWctJmd0O3R5cGUpOwpAQCAtNjcyNSw3ICYjNDM7NjczNiw2IEBAIHN0YXRpYyBpbnQgY2hlY2tfc3RhY2tfcmFuZ2VfaW5pdGlhbGl6ZWQoCiAJaWYgKGVycikKIAkJcmV0dXJuIGVycjsKIAotCiAJaWYgKHRudW1faXNfY29uc3QocmVnLSZndDt2YXJfb2ZmKSkgewogCQltaW5fb2ZmID0gbWF4X29mZiA9IHJlZy0mZ3Q7dmFyX29mZi52YWx1ZSAmIzQzOyBvZmY7CiAJfSBlbHNlIHsKQEAgLTc0NDMsNyAmIzQzOzc0NTMsNiBAQCBzdGF0aWMgYm9vbCBpc19pdGVyX25ld19rZnVuYyhzdHJ1Y3QgYnBmX2NhbGxfYXJnX21ldGEgKm1ldGEpCiAJcmV0dXJuIG1ldGEtJmd0O2tmdW5jX2ZsYWdzICZhbXA7IEtGX0lURVJfTkVXOwogfQogCi0KIHN0YXRpYyBib29sIGlzX2l0ZXJfZGVzdHJveV9rZnVuYyhzdHJ1Y3QgYnBmX2NhbGxfYXJnX21ldGEgKm1ldGEpCiB7CiAJcmV0dXJuIG1ldGEtJmd0O2tmdW5jX2ZsYWdzICZhbXA7IEtGX0lURVJfREVTVFJPWTsKQEAgLTgyMjEsNiAmIzQzOzgyMzAsMTIgQEAgc3RhdGljIGludCBjaGVja19hcmdfY29uc3Rfc3RyKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsCiAJCXJldHVybiAtRUFDQ0VTOwogCX0KIAomIzQzOwlpZiAobWFwLSZndDttYXBfdHlwZSA9PSBCUEZfTUFQX1RZUEVfUEVSQ1BVX0FSUkFZKSB7CiYjNDM7CQl2ZXJib3NlKGVudiwgJiMzNDslcyBwb2ludHMgdG8gcGVyY3B1X2FycmF5IG1hcCB3aGljaCBjYW5ub3QgYmUgdXNlZCBhcyBjb25zdCBzdHJpbmdcbiYjMzQ7LAomIzQzOwkJCXJlZ19hcmdfbmFtZShlbnYsIGFyZ25vKSk7CiYjNDM7CQlyZXR1cm4gLUVBQ0NFUzsKJiM0MzsJfQomIzQzOwogCWlmICghYnBmX21hcF9pc19yZG9ubHkobWFwKSkgewogCQl2ZXJib3NlKGVudiwgJiMzNDslcyBkb2VzIG5vdCBwb2ludCB0byBhIHJlYWRvbmx5IG1hcCYjMzk7XG4mIzM0OywgcmVnX2FyZ19uYW1lKGVudiwgYXJnbm8pKTsKIAkJcmV0dXJuIC1FQUNDRVM7CkBAIC0xMTY2Nyw3ICYjNDM7MTE2ODIsNiBAQCBzdGF0aWMgaW50IHByb2Nlc3NfaXJxX2ZsYWcoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9yZWdfc3RhdGUgKgogCXJldHVybiAwOwogfQogCi0KIHN0YXRpYyBpbnQgcmVmX3NldF9ub25fb3duaW5nKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcpCiB7CiAJc3RydWN0IGJ0Zl9yZWNvcmQgKnJlYyA9IHJlZ19idGZfcmVjb3JkKHJlZyk7CkBAIC0xNjUxNSw3ICYjNDM7MTY1MjksNiBAQCBzdGF0aWMgaW50IGNoZWNrX2xkX2FicyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmluc24pCiAJcmV0dXJuIDA7CiB9CiAKLQogc3RhdGljIGJvb2wgcmV0dXJuX3JldHZhbF9yYW5nZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3JldHZhbF9yYW5nZSAqcmFuZ2UpCiB7CiAJZW51bSBicGZfcHJvZ190eXBlIHByb2dfdHlwZSA9IHJlc29sdmVfcHJvZ190eXBlKGVudi0mZ3Q7cHJvZyk7CkBAIC0xODQ2MSw4ICYjNDM7MTg0NzQsNiBAQCBzdGF0aWMgdm9pZCByZWxlYXNlX2luc25fYXJyYXlzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpCiAJCWJwZl9pbnNuX2FycmF5X3JlbGVhc2UoZW52LSZndDtpbnNuX2FycmF5X21hcHNbaV0pOwogfQogCi0KLQogLyogVGhlIHZlcmlmaWVyIGRvZXMgbW9yZSBkYXRhIGZsb3cgYW5hbHlzaXMgdGhhbiBsbHZtIGFuZCB3aWxsIG5vdAogICogZXhwbG9yZSBicmFuY2hlcyB0aGF0IGFyZSBkZWFkIGF0IHJ1biB0aW1lLiBNYWxpY2lvdXMgcHJvZ3JhbXMgY2FuCiAgKiBoYXZlIGRlYWQgY29kZSB0b28uIFRoZXJlZm9yZSByZXBsYWNlIGFsbCBkZWFkIGF0LXJ1bi10aW1lIGNvZGUKQEAgLTE4NDkwLDggJiM0MzsxODUwMSw2IEBAIHN0YXRpYyB2b2lkIHNhbml0aXplX2RlYWRfY29kZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KQogCX0KIH0KIAotCi0KIHN0YXRpYyB2b2lkIGZyZWVfc3RhdGVzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpCiB7CiAJc3RydWN0IGJwZl92ZXJpZmllcl9zdGF0ZV9saXN0ICpzbDsKQEAgLTE4NzczLDcgJiM0MzsxODc4Miw2IEBAIHN0YXRpYyBpbnQgZG9fY2hlY2tfbWFpbihzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KQogCXJldHVybiByZXQ7CiB9CiAKLQogc3RhdGljIHZvaWQgcHJpbnRfdmVyaWZpY2F0aW9uX3N0YXRzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpCiB7CiAJLyogU2tpcCBvdmVyIGhpZGRlbiBzdWJwcm9ncyB3aGljaCBhcmUgbm90IHZlcmlmaWVkLiAqLwpkaWZmIC0tZ2l0IGEvdG9vbHMvYnBmL2JwZnRvb2wvZ2VuLmMgYi90b29scy9icGYvYnBmdG9vbC9nZW4uYwppbmRleCBhMDFkMDZkMjJkMWEzLi5hNTA1NDBlZjY1MjFjIDEwMDY0NAotLS0gYS90b29scy9icGYvYnBmdG9vbC9nZW4uYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy9icGYvYnBmdG9vbC9nZW4uYwpAQCAtMTAxLDYgJiM0MzsxMDEsMTIgQEAgc3RhdGljIGJvb2wgZ2V0X21hcF9pZGVudChjb25zdCBzdHJ1Y3QgYnBmX21hcCAqbWFwLCBjaGFyICpidWYsIHNpemVfdCBidWZfc3opCiAJCXJldHVybiB0cnVlOwogCX0KIAomIzQzOwlpZiAoYnBmX21hcF9fdHlwZShtYXApID09IEJQRl9NQVBfVFlQRV9QRVJDUFVfQVJSQVkpIHsKJiM0MzsJCXNucHJpbnRmKGJ1ZiwgYnVmX3N6LCAmIzM0OyVzJiMzNDssIG5hbWUgJiM0MzsgMSk7CiYjNDM7CQlzYW5pdGl6ZV9pZGVudGlmaWVyKGJ1Zik7CiYjNDM7CQlyZXR1cm4gdHJ1ZTsKJiM0MzsJfQomIzQzOwogCWZvciAgKGkgPSAwLCBuID0gQVJSQVlfU0laRShzZnhzKTsgaSAmbHQ7IG47IGkmIzQzOyYjNDM7KSB7CiAJCWNvbnN0IGNoYXIgKnNmeCA9IHNmeHNbaV0sICpwOwogCkBAIC0xMTcsNyAmIzQzOzEyMyw3IEBAIHN0YXRpYyBib29sIGdldF9tYXBfaWRlbnQoY29uc3Qgc3RydWN0IGJwZl9tYXAgKm1hcCwgY2hhciAqYnVmLCBzaXplX3QgYnVmX3N6KQogCiBzdGF0aWMgYm9vbCBnZXRfZGF0YXNlY19pZGVudChjb25zdCBjaGFyICpzZWNfbmFtZSwgY2hhciAqYnVmLCBzaXplX3QgYnVmX3N6KQogewotCXN0YXRpYyBjb25zdCBjaGFyICpwZnhzW10gPSB7ICYjMzQ7LmRhdGEmIzM0OywgJiMzNDsucm9kYXRhJiMzNDssICYjMzQ7LmJzcyYjMzQ7LCAmIzM0Oy5rY29uZmlnJiMzNDsgfTsKJiM0MzsJc3RhdGljIGNvbnN0IGNoYXIgKnBmeHNbXSA9IHsgJiMzNDsuZGF0YSYjMzQ7LCAmIzM0Oy5yb2RhdGEmIzM0OywgJiMzNDsuYnNzJiMzNDssICYjMzQ7LnBlcmNwdSYjMzQ7LCAmIzM0Oy5rY29uZmlnJiMzNDsgfTsKIAlpbnQgaSwgbjsKIAogCS8qIHJlY29nbml6ZSBoYXJkIGNvZGVkIExMVk0gc2VjdGlvbiBuYW1lICovCkBAIC0yNTQsNyAmIzQzOzI2MCw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYnRmX3R5cGUgKmZpbmRfdHlwZV9mb3JfbWFwKHN0cnVjdCBidGYgKmJ0ZiwgY29uc3QgY2hhciAqbWFwCiAJcmV0dXJuIE5VTEw7CiB9CiAKLXN0YXRpYyBib29sIGlzX21tYXBhYmxlX21hcChjb25zdCBzdHJ1Y3QgYnBmX21hcCAqbWFwLCBjaGFyICpidWYsIHNpemVfdCBzeikKJiM0MztzdGF0aWMgYm9vbCBpc19za2VsX2RhdGEoY29uc3Qgc3RydWN0IGJwZl9tYXAgKm1hcCwgY2hhciAqYnVmLCBzaXplX3Qgc3opCiB7CiAJc2l6ZV90IHRtcF9zejsKIApAQCAtMjYzLDEzICYjNDM7MjY5LDI0IEBAIHN0YXRpYyBib29sIGlzX21tYXBhYmxlX21hcChjb25zdCBzdHJ1Y3QgYnBmX21hcCAqbWFwLCBjaGFyICpidWYsIHNpemVfdCBzeikKIAkJcmV0dXJuIHRydWU7CiAJfQogCi0JaWYgKCFicGZfbWFwX19pc19pbnRlcm5hbChtYXApIHx8ICEoYnBmX21hcF9fbWFwX2ZsYWdzKG1hcCkgJmFtcDsgQlBGX0ZfTU1BUEFCTEUpKQomIzQzOwlpZiAoIWJwZl9tYXBfX2lzX2ludGVybmFsKG1hcCkpCiAJCXJldHVybiBmYWxzZTsKIAogCWlmICghZ2V0X21hcF9pZGVudChtYXAsIGJ1Ziwgc3opKQogCQlyZXR1cm4gZmFsc2U7CiAKLQlyZXR1cm4gdHJ1ZTsKJiM0MzsJaWYgKGJwZl9tYXBfX21hcF9mbGFncyhtYXApICZhbXA7IEJQRl9GX01NQVBBQkxFKQomIzQzOwkJcmV0dXJuIHRydWU7CiYjNDM7CiYjNDM7CWlmIChicGZfbWFwX190eXBlKG1hcCkgPT0gQlBGX01BUF9UWVBFX1BFUkNQVV9BUlJBWSkKJiM0MzsJCXJldHVybiBicGZfbWFwX19idGZfdmFsdWVfdHlwZV9pZChtYXApICE9IDA7CiYjNDM7CiYjNDM7CXJldHVybiBmYWxzZTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGJvb2wgaXNfbW1hcGFibGVfbWFwKGNvbnN0IHN0cnVjdCBicGZfbWFwICptYXAsIGNoYXIgKmJ1Ziwgc2l6ZV90IHN6KQomIzQzO3sKJiM0MzsJcmV0dXJuIGlzX3NrZWxfZGF0YShtYXAsIGJ1Ziwgc3opICZhbXA7JmFtcDsgYnBmX21hcF9fdHlwZShtYXApICE9IEJQRl9NQVBfVFlQRV9QRVJDUFVfQVJSQVk7CiB9CiAKIHN0YXRpYyBpbnQgY29kZWdlbl9kYXRhc2VjcyhzdHJ1Y3QgYnBmX29iamVjdCAqb2JqLCBjb25zdCBjaGFyICpvYmpfbmFtZSkKQEAgLTI4Nyw3ICYjNDM7MzA0LDcgQEAgc3RhdGljIGludCBjb2RlZ2VuX2RhdGFzZWNzKHN0cnVjdCBicGZfb2JqZWN0ICpvYmosIGNvbnN0IGNoYXIgKm9ial9uYW1lKQogCiAJYnBmX29iamVjdF9fZm9yX2VhY2hfbWFwKG1hcCwgb2JqKSB7CiAJCS8qIG9ubHkgZ2VuZXJhdGUgZGVmaW5pdGlvbnMgZm9yIG1lbW9yeS1tYXBwZWQgaW50ZXJuYWwgbWFwcyAqLwotCQlpZiAoIWlzX21tYXBhYmxlX21hcChtYXAsIG1hcF9pZGVudCwgc2l6ZW9mKG1hcF9pZGVudCkpKQomIzQzOwkJaWYgKCFpc19za2VsX2RhdGEobWFwLCBtYXBfaWRlbnQsIHNpemVvZihtYXBfaWRlbnQpKSkKIAkJCWNvbnRpbnVlOwogCiAJCXNlYyA9IGZpbmRfdHlwZV9mb3JfbWFwKGJ0ZiwgbWFwX2lkZW50KTsKQEAgLTUxNyw3ICYjNDM7NTM0LDcgQEAgc3RhdGljIHZvaWQgY29kZWdlbl9hc3NlcnRzKHN0cnVjdCBicGZfb2JqZWN0ICpvYmosIGNvbnN0IGNoYXIgKm9ial9uYW1lKQogCQkmIzM0Oywgb2JqX25hbWUpOwogCiAJYnBmX29iamVjdF9fZm9yX2VhY2hfbWFwKG1hcCwgb2JqKSB7Ci0JCWlmICghaXNfbW1hcGFibGVfbWFwKG1hcCwgbWFwX2lkZW50LCBzaXplb2YobWFwX2lkZW50KSkpCiYjNDM7CQlpZiAoIWlzX3NrZWxfZGF0YShtYXAsIG1hcF9pZGVudCwgc2l6ZW9mKG1hcF9pZGVudCkpKQogCQkJY29udGludWU7CiAKIAkJc2VjID0gZmluZF90eXBlX2Zvcl9tYXAoYnRmLCBtYXBfaWRlbnQpOwpAQCAtNjY4LDggJiM0Mzs2ODUsNyBAQCBzdGF0aWMgdm9pZCBjb2RlZ2VuX2Rlc3Ryb3koc3RydWN0IGJwZl9vYmplY3QgKm9iaiwgY29uc3QgY2hhciAqb2JqX25hbWUpCiAJYnBmX29iamVjdF9fZm9yX2VhY2hfbWFwKG1hcCwgb2JqKSB7CiAJCWlmICghZ2V0X21hcF9pZGVudChtYXAsIGlkZW50LCBzaXplb2YoaWRlbnQpKSkKIAkJCWNvbnRpbnVlOwotCQlpZiAoYnBmX21hcF9faXNfaW50ZXJuYWwobWFwKSAmYW1wOyZhbXA7Ci0JCSAgICAoYnBmX21hcF9fbWFwX2ZsYWdzKG1hcCkgJmFtcDsgQlBGX0ZfTU1BUEFCTEUpKQomIzQzOwkJaWYgKGlzX3NrZWxfZGF0YShtYXAsIGlkZW50LCBzaXplb2YoaWRlbnQpKSkKIAkJCXByaW50ZigmIzM0O1x0c2tlbF9mcmVlX21hcF9kYXRhKHNrZWwtJmd0OyUxJHMsIHNrZWwtJmd0O21hcHMuJTEkcy5pbml0aWFsX3ZhbHVlLCAlMiR6dSk7XG4mIzM0OywKIAkJCSAgICAgICBpZGVudCwgYnBmX21hcF9tbWFwX3N6KG1hcCkpOwogCQljb2RlZ2VuKCYjMzQ7XApAQCAtNzQxLDcgJiM0Mzs3NTcsNyBAQCBzdGF0aWMgaW50IGdlbl90cmFjZShzdHJ1Y3QgYnBmX29iamVjdCAqb2JqLCBjb25zdCBjaGFyICpvYmpfbmFtZSwgY29uc3QgY2hhciAqaAogCQljb25zdCB2b2lkICptbWFwX2RhdGEgPSBOVUxMOwogCQlzaXplX3QgbW1hcF9zaXplID0gMDsKIAotCQlpZiAoIWlzX21tYXBhYmxlX21hcChtYXAsIGlkZW50LCBzaXplb2YoaWRlbnQpKSkKJiM0MzsJCWlmICghaXNfc2tlbF9kYXRhKG1hcCwgaWRlbnQsIHNpemVvZihpZGVudCkpKQogCQkJY29udGludWU7CiAKIAkJY29kZWdlbigmIzM0O1wKQEAgLTg0OSw5ICYjNDM7ODY1LDIzIEBAIHN0YXRpYyBpbnQgZ2VuX3RyYWNlKHN0cnVjdCBicGZfb2JqZWN0ICpvYmosIGNvbnN0IGNoYXIgKm9ial9uYW1lLCBjb25zdCBjaGFyICpoCiAJYnBmX29iamVjdF9fZm9yX2VhY2hfbWFwKG1hcCwgb2JqKSB7CiAJCWNvbnN0IGNoYXIgKm1tYXBfZmxhZ3M7CiAKLQkJaWYgKCFpc19tbWFwYWJsZV9tYXAobWFwLCBpZGVudCwgc2l6ZW9mKGlkZW50KSkpCiYjNDM7CQlpZiAoIWlzX3NrZWxfZGF0YShtYXAsIGlkZW50LCBzaXplb2YoaWRlbnQpKSkKIAkJCWNvbnRpbnVlOwogCiYjNDM7CQlpZiAoYnBmX21hcF9fdHlwZShtYXApID09IEJQRl9NQVBfVFlQRV9QRVJDUFVfQVJSQVkpIHsKJiM0MzsJCQljb2RlZ2VuKCYjMzQ7XAomIzQzOwkJXG5cCiYjNDM7CQkJZXJyID0gc2tlbF9wcm90ZWN0X21hcF9kYXRhKHNrZWwtJmd0OyUxJHMsICZhbXA7c2tlbC0mZ3Q7bWFwcy4lMSRzLmluaXRpYWxfdmFsdWUsICUyJHpkKTtcblwKJiM0MzsJCQlpZiAoZXJyKQkJCQkJICAgIFxuXAomIzQzOwkJCQlyZXR1cm4gZXJyOwkJCQkgICAgXG5cCiYjNDM7CQkjaWZkZWYgX19LRVJORUxfXwkJCQkJICAgIFxuXAomIzQzOwkJCXNrZWwtJmd0OyUxJHMgPSBOVUxMOwkJCQkgICAgXG5cCiYjNDM7CQkjZW5kaWYJCQkJCQkJICAgIFxuXAomIzQzOwkJCSYjMzQ7LAomIzQzOwkJCWlkZW50LCBicGZfbWFwX21tYXBfc3oobWFwKSk7CiYjNDM7CQkJY29udGludWU7CiYjNDM7CQl9CiYjNDM7CiAJCWlmIChicGZfbWFwX19tYXBfZmxhZ3MobWFwKSAmYW1wOyBCUEZfRl9SRE9OTFlfUFJPRykKIAkJCW1tYXBfZmxhZ3MgPSAmIzM0O1BST1RfUkVBRCYjMzQ7OwogCQllbHNlCkBAIC05NTUsOCAmIzQzOzk4NSw3IEBAIGNvZGVnZW5fbWFwc19za2VsZXRvbihzdHJ1Y3QgYnBmX29iamVjdCAqb2JqLCBzaXplX3QgbWFwX2NudCwgYm9vbCBtbWFwZWQsIGJvb2wKIAkJCQltYXAtJmd0O21hcCA9ICZhbXA7b2JqLSZndDttYXBzLiVzOwkgICAgXG5cCiAJCQkmIzM0OywKIAkJCWksIGJwZl9tYXBfX25hbWUobWFwKSwgaWRlbnQpOwotCQkvKiBtZW1vcnktbWFwcGVkIGludGVybmFsIG1hcHMgKi8KLQkJaWYgKG1tYXBlZCAmYW1wOyZhbXA7IGlzX21tYXBhYmxlX21hcChtYXAsIGlkZW50LCBzaXplb2YoaWRlbnQpKSkgewomIzQzOwkJaWYgKG1tYXBlZCAmYW1wOyZhbXA7IGlzX3NrZWxfZGF0YShtYXAsIGlkZW50LCBzaXplb2YoaWRlbnQpKSkgewogCQkJcHJpbnRmKCYjMzQ7XHRtYXAtJmd0O21tYXBlZCA9ICh2b2lkICoqKSZhbXA7b2JqLSZndDslcztcbiYjMzQ7LCBpZGVudCk7CiAJCX0KIApkaWZmIC0tZ2l0IGEvdG9vbHMvbGliL2JwZi9icGZfZ2VuX2ludGVybmFsLmggYi90b29scy9saWIvYnBmL2JwZl9nZW5faW50ZXJuYWwuaAppbmRleCAwNDI1NjkxODc3NTIxLi42YzVhZDZjNTVlOGE2IDEwMDY0NAotLS0gYS90b29scy9saWIvYnBmL2JwZl9nZW5faW50ZXJuYWwuaAomIzQzOyYjNDM7JiM0MzsgYi90b29scy9saWIvYnBmL2JwZl9nZW5faW50ZXJuYWwuaApAQCAtNjUsNyAmIzQzOzY1LDggQEAgdm9pZCBicGZfZ2VuX19wcm9nX2xvYWQoc3RydWN0IGJwZl9nZW4gKmdlbiwKIAkJCWVudW0gYnBmX3Byb2dfdHlwZSBwcm9nX3R5cGUsIGNvbnN0IGNoYXIgKnByb2dfbmFtZSwKIAkJCWNvbnN0IGNoYXIgKmxpY2Vuc2UsIHN0cnVjdCBicGZfaW5zbiAqaW5zbnMsIHNpemVfdCBpbnNuX2NudCwKIAkJCXN0cnVjdCBicGZfcHJvZ19sb2FkX29wdHMgKmxvYWRfYXR0ciwgaW50IHByb2dfaWR4KTsKLXZvaWQgYnBmX2dlbl9fbWFwX3VwZGF0ZV9lbGVtKHN0cnVjdCBicGZfZ2VuICpnZW4sIGludCBtYXBfaWR4LCB2b2lkICp2YWx1ZSwgX191MzIgdmFsdWVfc2l6ZSk7CiYjNDM7dm9pZCBicGZfZ2VuX19tYXBfdXBkYXRlX2VsZW0oc3RydWN0IGJwZl9nZW4gKmdlbiwgaW50IG1hcF9pZHgsIHZvaWQgKnZhbHVlLCBfX3UzMiB2YWx1ZV9zaXplLAomIzQzOwkJCSAgICAgIF9fdTY0IGZsYWdzKTsKIHZvaWQgYnBmX2dlbl9fbWFwX2ZyZWV6ZShzdHJ1Y3QgYnBmX2dlbiAqZ2VuLCBpbnQgbWFwX2lkeCk7CiB2b2lkIGJwZl9nZW5fX3JlY29yZF9hdHRhY2hfdGFyZ2V0KHN0cnVjdCBicGZfZ2VuICpnZW4sIGNvbnN0IGNoYXIgKm5hbWUsIGVudW0gYnBmX2F0dGFjaF90eXBlIHR5cGUpOwogdm9pZCBicGZfZ2VuX19yZWNvcmRfZXh0ZXJuKHN0cnVjdCBicGZfZ2VuICpnZW4sIGNvbnN0IGNoYXIgKm5hbWUsIGJvb2wgaXNfd2VhaywKZGlmZiAtLWdpdCBhL3Rvb2xzL2xpYi9icGYvZmVhdHVyZXMuYyBiL3Rvb2xzL2xpYi9icGYvZmVhdHVyZXMuYwppbmRleCBiN2UzODhmOTlkMGJiLi5lZjk1ODFjMTEzMDM1IDEwMDY0NAotLS0gYS90b29scy9saWIvYnBmL2ZlYXR1cmVzLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvbGliL2JwZi9mZWF0dXJlcy5jCkBAIC02MjAsNiAmIzQzOzYyMCwzOCBAQCBzdGF0aWMgaW50IHByb2JlX2JwZl9zeXNjYWxsX2NvbW1vbl9hdHRycyhpbnQgdG9rZW5fZmQpCiAJcmV0dXJuIHByb2JlX3N5c19icGZfZXh0KCk7CiB9CiAKJiM0MztzdGF0aWMgaW50IHByb2JlX2tlcm5fcGVyY3B1X2RhdGEoaW50IHRva2VuX2ZkKQomIzQzO3sKJiM0MzsJc3RydWN0IGJwZl9pbnNuIGluc25zW10gPSB7CiYjNDM7CQlCUEZfTERfTUFQX1ZBTFVFKEJQRl9SRUdfMSwgMCwgMCksCiYjNDM7CQlCUEZfTERYX01FTShCUEZfRFcsIEJQRl9SRUdfMCwgQlBGX1JFR18xLCAwKSwKJiM0MzsJCUJQRl9FWElUX0lOU04oKSwKJiM0MzsJfTsKJiM0MzsJTElCQlBGX09QVFMoYnBmX21hcF9jcmVhdGVfb3B0cywgbWFwX29wdHMsCiYjNDM7CQkudG9rZW5fZmQgPSB0b2tlbl9mZCwKJiM0MzsJCS5tYXBfZmxhZ3MgPSB0b2tlbl9mZCA/IEJQRl9GX1RPS0VOX0ZEIDogMCwKJiM0MzsJKTsKJiM0MzsJTElCQlBGX09QVFMoYnBmX3Byb2dfbG9hZF9vcHRzLCBwcm9nX29wdHMsCiYjNDM7CQkudG9rZW5fZmQgPSB0b2tlbl9mZCwKJiM0MzsJCS5wcm9nX2ZsYWdzID0gdG9rZW5fZmQgPyBCUEZfRl9UT0tFTl9GRCA6IDAsCiYjNDM7CSk7CiYjNDM7CWludCByZXQsIG1hcCwgaW5zbl9jbnQgPSBBUlJBWV9TSVpFKGluc25zKTsKJiM0MzsKJiM0MzsJbWFwID0gYnBmX21hcF9jcmVhdGUoQlBGX01BUF9UWVBFX1BFUkNQVV9BUlJBWSwgJiMzNDtsaWJicGZfcGVyY3B1JiMzNDssIHNpemVvZihpbnQpLCA4LCAxLAomIzQzOwkJCSAgICAgJmFtcDttYXBfb3B0cyk7CiYjNDM7CWlmIChtYXAgJmx0OyAwKSB7CiYjNDM7CQlwcl93YXJuKCYjMzQ7RXJyb3IgaW4gJXMoKTogJXMuIENvdWxkbiYjMzk7dCBjcmVhdGUgc2ltcGxlIHBlcmNwdV9hcnJheSBtYXAuXG4mIzM0OywKJiM0MzsJCQlfX2Z1bmNfXywgZXJyc3RyKG1hcCkpOwomIzQzOwkJcmV0dXJuIG1hcDsKJiM0MzsJfQomIzQzOwomIzQzOwlpbnNuc1swXS5pbW0gPSBtYXA7CiYjNDM7CiYjNDM7CXJldCA9IGJwZl9wcm9nX2xvYWQoQlBGX1BST0dfVFlQRV9TT0NLRVRfRklMVEVSLCBOVUxMLCAmIzM0O0dQTCYjMzQ7LCBpbnNucywgaW5zbl9jbnQsICZhbXA7cHJvZ19vcHRzKTsKJiM0MzsJY2xvc2UobWFwKTsKJiM0MzsJcmV0dXJuIHByb2JlX2ZkKHJldCk7CiYjNDM7fQomIzQzOwogdHlwZWRlZiBpbnQgKCpmZWF0dXJlX3Byb2JlX2ZuKShpbnQgLyogdG9rZW5fZmQgKi8pOwogCiBzdGF0aWMgc3RydWN0IGtlcm5fZmVhdHVyZV9jYWNoZSBmZWF0dXJlX2NhY2hlOwpAQCAtNzA3LDYgJiM0Mzs3MzksOSBAQCBzdGF0aWMgc3RydWN0IGtlcm5fZmVhdHVyZV9kZXNjIHsKIAlbRkVBVF9CUEZfU1lTQ0FMTF9DT01NT05fQVRUUlNdID0gewogCQkmIzM0O0JQRiBzeXNjYWxsIGNvbW1vbiBhdHRyaWJ1dGVzIHN1cHBvcnQmIzM0OywgcHJvYmVfYnBmX3N5c2NhbGxfY29tbW9uX2F0dHJzLAogCX0sCiYjNDM7CVtGRUFUX1BFUkNQVV9EQVRBXSA9IHsKJiM0MzsJCSYjMzQ7a2VybmVsIHN1cHBvcnRzIHBlcmNwdSBkYXRhJiMzNDssIHByb2JlX2tlcm5fcGVyY3B1X2RhdGEsCiYjNDM7CX0sCiB9OwogCiBib29sIGZlYXRfc3VwcG9ydGVkKHN0cnVjdCBrZXJuX2ZlYXR1cmVfY2FjaGUgKmNhY2hlLCBlbnVtIGtlcm5fZmVhdHVyZV9pZCBmZWF0X2lkKQpkaWZmIC0tZ2l0IGEvdG9vbHMvbGliL2JwZi9nZW5fbG9hZGVyLmMgYi90b29scy9saWIvYnBmL2dlbl9sb2FkZXIuYwppbmRleCA2ZTNkZDUyNDI3NjE4Li5hZjNhMDRmMTYxYWMxIDEwMDY0NAotLS0gYS90b29scy9saWIvYnBmL2dlbl9sb2FkZXIuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy9saWIvYnBmL2dlbl9sb2FkZXIuYwpAQCAtMTEyOCw3ICYjNDM7MTEyOCw3IEBAIHZvaWQgYnBmX2dlbl9fcHJvZ19sb2FkKHN0cnVjdCBicGZfZ2VuICpnZW4sCiB9CiAKIHZvaWQgYnBmX2dlbl9fbWFwX3VwZGF0ZV9lbGVtKHN0cnVjdCBicGZfZ2VuICpnZW4sIGludCBtYXBfaWR4LCB2b2lkICpwdmFsdWUsCi0JCQkgICAgICBfX3UzMiB2YWx1ZV9zaXplKQomIzQzOwkJCSAgICAgIF9fdTMyIHZhbHVlX3NpemUsIF9fdTY0IGZsYWdzKQogewogCWludCBhdHRyX3NpemUgPSBvZmZzZXRvZmVuZCh1bmlvbiBicGZfYXR0ciwgZmxhZ3MpOwogCWludCBtYXBfdXBkYXRlX2F0dHIsIHZhbHVlLCBrZXk7CkBAIC0xMTM2LDYgJiM0MzsxMTM2LDcgQEAgdm9pZCBicGZfZ2VuX19tYXBfdXBkYXRlX2VsZW0oc3RydWN0IGJwZl9nZW4gKmdlbiwgaW50IG1hcF9pZHgsIHZvaWQgKnB2YWx1ZSwKIAlpbnQgemVybyA9IDA7CiAKIAltZW1zZXQoJmFtcDthdHRyLCAwLCBhdHRyX3NpemUpOwomIzQzOwlhdHRyLmZsYWdzID0gdGd0X2VuZGlhbihmbGFncyk7CiAKIAl2YWx1ZSA9IGFkZF9kYXRhKGdlbiwgcHZhbHVlLCB2YWx1ZV9zaXplKTsKIAlrZXkgPSBhZGRfZGF0YShnZW4sICZhbXA7emVybywgc2l6ZW9mKHplcm8pKTsKZGlmZiAtLWdpdCBhL3Rvb2xzL2xpYi9icGYvbGliYnBmLmMgYi90b29scy9saWIvYnBmL2xpYmJwZi5jCmluZGV4IDUxNGU0ZTlkYWE4MjUuLjlmNzlhOGU4NTBmZGIgMTAwNjQ0Ci0tLSBhL3Rvb2xzL2xpYi9icGYvbGliYnBmLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvbGliL2JwZi9saWJicGYuYwpAQCAtNTQxLDYgJiM0Mzs1NDEsNyBAQCBzdHJ1Y3QgYnBmX3N0cnVjdF9vcHMgewogfTsKIAogI2RlZmluZSBEQVRBX1NFQyAmIzM0Oy5kYXRhJiMzNDsKJiM0MzsjZGVmaW5lIFBFUkNQVV9TRUMgJiMzNDsucGVyY3B1JiMzNDsKICNkZWZpbmUgQlNTX1NFQyAmIzM0Oy5ic3MmIzM0OwogI2RlZmluZSBST0RBVEFfU0VDICYjMzQ7LnJvZGF0YSYjMzQ7CiAjZGVmaW5lIEtDT05GSUdfU0VDICYjMzQ7Lmtjb25maWcmIzM0OwpAQCAtNTU1LDYgJiM0Mzs1NTYsNyBAQCBlbnVtIGxpYmJwZl9tYXBfdHlwZSB7CiAJTElCQlBGX01BUF9CU1MsCiAJTElCQlBGX01BUF9ST0RBVEEsCiAJTElCQlBGX01BUF9LQ09ORklHLAomIzQzOwlMSUJCUEZfTUFQX1BFUkNQVSwKIH07CiAKIHN0cnVjdCBicGZfbWFwX2RlZiB7CkBAIC02NjYsNiAmIzQzOzY2OCw3IEBAIGVudW0gc2VjX3R5cGUgewogCVNFQ19EQVRBLAogCVNFQ19ST0RBVEEsCiAJU0VDX1NUX09QUywKJiM0MzsJU0VDX1BFUkNQVSwKIH07CiAKIHN0cnVjdCBlbGZfc2VjX2Rlc2MgewpAQCAtMTgzOSw2ICYjNDM7MTg0Miw4IEBAIHN0YXRpYyBzaXplX3QgYnBmX21hcF9tbWFwX3N6KGNvbnN0IHN0cnVjdCBicGZfbWFwICptYXApCiAJc3dpdGNoIChtYXAtJmd0O2RlZi50eXBlKSB7CiAJY2FzZSBCUEZfTUFQX1RZUEVfQVJSQVk6CiAJCXJldHVybiBhcnJheV9tYXBfbW1hcF9zeihtYXAtJmd0O2RlZi52YWx1ZV9zaXplLCBtYXAtJmd0O2RlZi5tYXhfZW50cmllcyk7CiYjNDM7CWNhc2UgQlBGX01BUF9UWVBFX1BFUkNQVV9BUlJBWToKJiM0MzsJCXJldHVybiBtYXAtJmd0O2RlZi52YWx1ZV9zaXplOwogCWNhc2UgQlBGX01BUF9UWVBFX0FSRU5BOgogCQlyZXR1cm4gcGFnZV9zeiAqIG1hcC0mZ3Q7ZGVmLm1heF9lbnRyaWVzOwogCWRlZmF1bHQ6CkBAIC0xODY2LDcgJiM0MzsxODcxLDggQEAgc3RhdGljIGludCBicGZfbWFwX21tYXBfcmVzaXplKHN0cnVjdCBicGZfbWFwICptYXAsIHNpemVfdCBvbGRfc3osIHNpemVfdCBuZXdfc3oKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGNoYXIgKmludGVybmFsX21hcF9uYW1lKHN0cnVjdCBicGZfb2JqZWN0ICpvYmosIGNvbnN0IGNoYXIgKnJlYWxfbmFtZSkKJiM0MztzdGF0aWMgY2hhciAqaW50ZXJuYWxfbWFwX25hbWUoc3RydWN0IGJwZl9vYmplY3QgKm9iaiwgY29uc3QgY2hhciAqcmVhbF9uYW1lLAomIzQzOwkJCSAgICAgICBlbnVtIGxpYmJwZl9tYXBfdHlwZSB0eXBlKQogewogCWNoYXIgbWFwX25hbWVbQlBGX09CSl9OQU1FX0xFTl0sICpwOwogCWludCBwZnhfbGVuLCBzZnhfbGVuID0gbWF4KChzaXplX3QpNywgc3RybGVuKHJlYWxfbmFtZSkpOwpAQCAtMTkwNyw4ICYjNDM7MTkxMywxMSBAQCBzdGF0aWMgY2hhciAqaW50ZXJuYWxfbWFwX25hbWUoc3RydWN0IGJwZl9vYmplY3QgKm9iaiwgY29uc3QgY2hhciAqcmVhbF9uYW1lKQogCWlmIChzZnhfbGVuICZndDs9IEJQRl9PQkpfTkFNRV9MRU4pCiAJCXNmeF9sZW4gPSBCUEZfT0JKX05BTUVfTEVOIC0gMTsKIAotCS8qIGlmIHRoZXJlIGFyZSB0d28gb3IgbW9yZSBkb3RzIGluIG1hcCBuYW1lLCBpdCYjMzk7cyBhIGN1c3RvbSBkb3QgbWFwICovCi0JaWYgKHN0cmNocihyZWFsX25hbWUgJiM0MzsgMSwgJiMzOTsuJiMzOTspICE9IE5VTEwpCiYjNDM7CS8qCiYjNDM7CSAqIERvbiYjMzk7dCBwcmVmaXggdGhlIGJwZl9vYmplY3QgbmFtZSBpZiB0aGlzIGlzIGEgY3VzdG9tIGRvdCBtYXAKJiM0MzsJICogKGNvbnRhaW5pbmcgdHdvIG9yIG1vcmUgZG90cykgb3IgYSBwZXJjcHUgZGF0YSBtYXAuCiYjNDM7CSAqLwomIzQzOwlpZiAoc3RyY2hyKHJlYWxfbmFtZSAmIzQzOyAxLCAmIzM5Oy4mIzM5OykgIT0gTlVMTCB8fCB0eXBlID09IExJQkJQRl9NQVBfUEVSQ1BVKQogCQlwZnhfbGVuID0gMDsKIAllbHNlCiAJCXBmeF9sZW4gPSBtaW4oKHNpemVfdClCUEZfT0JKX05BTUVfTEVOIC0gc2Z4X2xlbiAtIDEsIHN0cmxlbihvYmotJmd0O25hbWUpKTsKQEAgLTE5NDEsNiAmIzQzOzE5NTAsMTMgQEAgc3RhdGljIGJvb2wgbWFwX2lzX21tYXBhYmxlKHN0cnVjdCBicGZfb2JqZWN0ICpvYmosIHN0cnVjdCBicGZfbWFwICptYXApCiAJaWYgKCFtYXAtJmd0O2J0Zl92YWx1ZV90eXBlX2lkKQogCQlyZXR1cm4gZmFsc2U7CiAKJiM0MzsJLyoKJiM0MzsJICogVGhlIGludGVybmFsIFBFUkNQVSBtYXBzIGFyZSBub3QgbW1hcGJsZSBiZWNhdXNlIHRoZSB1bmRlcmx5aW5nCiYjNDM7CSAqIHBlcmNwdV9hcnJheSBtYXBzIGRvIG5vdCBoYXZlIG1tYXAgc3VwcG9ydC4KJiM0MzsJICovCiYjNDM7CWlmIChtYXAtJmd0O2xpYmJwZl90eXBlID09IExJQkJQRl9NQVBfUEVSQ1BVKQomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwogCXQgPSBidGZfX3R5cGVfYnlfaWQob2JqLSZndDtidGYsIG1hcC0mZ3Q7YnRmX3ZhbHVlX3R5cGVfaWQpOwogCWlmICghYnRmX2lzX2RhdGFzZWModCkpCiAJCXJldHVybiBmYWxzZTsKQEAgLTE5NjIsNiAmIzQzOzE5NzgsNyBAQCBzdGF0aWMgaW50CiBicGZfb2JqZWN0X19pbml0X2ludGVybmFsX21hcChzdHJ1Y3QgYnBmX29iamVjdCAqb2JqLCBlbnVtIGxpYmJwZl9tYXBfdHlwZSB0eXBlLAogCQkJICAgICAgY29uc3QgY2hhciAqcmVhbF9uYW1lLCBpbnQgc2VjX2lkeCwgdm9pZCAqZGF0YSwgc2l6ZV90IGRhdGFfc3opCiB7CiYjNDM7CWJvb2wgaXNfcGVyY3B1ID0gdHlwZSA9PSBMSUJCUEZfTUFQX1BFUkNQVTsKIAlzdHJ1Y3QgYnBmX21hcF9kZWYgKmRlZjsKIAlzdHJ1Y3QgYnBmX21hcCAqbWFwOwogCXNpemVfdCBtbWFwX3N6OwpAQCAtMTk3NSw3ICYjNDM7MTk5Miw3IEBAIGJwZl9vYmplY3RfX2luaXRfaW50ZXJuYWxfbWFwKHN0cnVjdCBicGZfb2JqZWN0ICpvYmosIGVudW0gbGliYnBmX21hcF90eXBlIHR5cGUsCiAJbWFwLSZndDtzZWNfaWR4ID0gc2VjX2lkeDsKIAltYXAtJmd0O3NlY19vZmZzZXQgPSAwOwogCW1hcC0mZ3Q7cmVhbF9uYW1lID0gc3RyZHVwKHJlYWxfbmFtZSk7Ci0JbWFwLSZndDtuYW1lID0gaW50ZXJuYWxfbWFwX25hbWUob2JqLCByZWFsX25hbWUpOwomIzQzOwltYXAtJmd0O25hbWUgPSBpbnRlcm5hbF9tYXBfbmFtZShvYmosIHJlYWxfbmFtZSwgdHlwZSk7CiAJaWYgKCFtYXAtJmd0O3JlYWxfbmFtZSB8fCAhbWFwLSZndDtuYW1lKSB7CiAJCXpmcmVlKCZhbXA7bWFwLSZndDtyZWFsX25hbWUpOwogCQl6ZnJlZSgmYW1wO21hcC0mZ3Q7bmFtZSk7CkBAIC0xOTgzLDcgJiM0MzsyMDAwLDcgQEAgYnBmX29iamVjdF9faW5pdF9pbnRlcm5hbF9tYXAoc3RydWN0IGJwZl9vYmplY3QgKm9iaiwgZW51bSBsaWJicGZfbWFwX3R5cGUgdHlwZSwKIAl9CiAKIAlkZWYgPSAmYW1wO21hcC0mZ3Q7ZGVmOwotCWRlZi0mZ3Q7dHlwZSA9IEJQRl9NQVBfVFlQRV9BUlJBWTsKJiM0MzsJZGVmLSZndDt0eXBlID0gaXNfcGVyY3B1ID8gQlBGX01BUF9UWVBFX1BFUkNQVV9BUlJBWSA6IEJQRl9NQVBfVFlQRV9BUlJBWTsKIAlkZWYtJmd0O2tleV9zaXplID0gc2l6ZW9mKGludCk7CiAJZGVmLSZndDt2YWx1ZV9zaXplID0gZGF0YV9zejsKIAlkZWYtJmd0O21heF9lbnRyaWVzID0gMTsKQEAgLTE5OTYsOCAmIzQzOzIwMTMsOSBAQCBicGZfb2JqZWN0X19pbml0X2ludGVybmFsX21hcChzdHJ1Y3QgYnBmX29iamVjdCAqb2JqLCBlbnVtIGxpYmJwZl9tYXBfdHlwZSB0eXBlLAogCWlmIChtYXBfaXNfbW1hcGFibGUob2JqLCBtYXApKQogCQlkZWYtJmd0O21hcF9mbGFncyB8PSBCUEZfRl9NTUFQQUJMRTsKIAotCXByX2RlYnVnKCYjMzQ7bWFwICYjMzk7JXMmIzM5OyAoZ2xvYmFsIGRhdGEpOiBhdCBzZWNfaWR4ICVkLCBvZmZzZXQgJXp1LCBmbGFncyAleC5cbiYjMzQ7LAotCQkgbWFwLSZndDtuYW1lLCBtYXAtJmd0O3NlY19pZHgsIG1hcC0mZ3Q7c2VjX29mZnNldCwgZGVmLSZndDttYXBfZmxhZ3MpOwomIzQzOwlwcl9kZWJ1ZygmIzM0O21hcCAmIzM5OyVzJiMzOTsgKGdsb2JhbCAlc2RhdGEpOiBhdCBzZWNfaWR4ICVkLCBvZmZzZXQgJXp1LCBmbGFncyAleC5cbiYjMzQ7LAomIzQzOwkJIG1hcC0mZ3Q7bmFtZSwgaXNfcGVyY3B1ID8gJiMzNDtwZXJjcHUgJiMzNDsgOiAmIzM0OyYjMzQ7LCBtYXAtJmd0O3NlY19pZHgsCiYjNDM7CQkgbWFwLSZndDtzZWNfb2Zmc2V0LCBkZWYtJmd0O21hcF9mbGFncyk7CiAKIAltbWFwX3N6ID0gYnBmX21hcF9tbWFwX3N6KG1hcCk7CiAJbWFwLSZndDttbWFwZWQgPSBtbWFwKE5VTEwsIG1tYXBfc3osIFBST1RfUkVBRCB8IFBST1RfV1JJVEUsCkBAIC0yMDU3LDYgJiM0MzsyMDc1LDEzIEBAIHN0YXRpYyBpbnQgYnBmX29iamVjdF9faW5pdF9nbG9iYWxfZGF0YV9tYXBzKHN0cnVjdCBicGZfb2JqZWN0ICpvYmopCiAJCQkJCQkJICAgIE5VTEwsCiAJCQkJCQkJICAgIHNlY19kZXNjLSZndDtkYXRhLSZndDtkX3NpemUpOwogCQkJYnJlYWs7CiYjNDM7CQljYXNlIFNFQ19QRVJDUFU6CiYjNDM7CQkJc2VjX25hbWUgPSBlbGZfc2VjX25hbWUob2JqLCBlbGZfc2VjX2J5X2lkeChvYmosIHNlY19pZHgpKTsKJiM0MzsJCQllcnIgPSBicGZfb2JqZWN0X19pbml0X2ludGVybmFsX21hcChvYmosIExJQkJQRl9NQVBfUEVSQ1BVLAomIzQzOwkJCQkJCQkgICAgc2VjX25hbWUsIHNlY19pZHgsCiYjNDM7CQkJCQkJCSAgICBzZWNfZGVzYy0mZ3Q7ZGF0YS0mZ3Q7ZF9idWYsCiYjNDM7CQkJCQkJCSAgICBzZWNfZGVzYy0mZ3Q7ZGF0YS0mZ3Q7ZF9zaXplKTsKJiM0MzsJCQlicmVhazsKIAkJZGVmYXVsdDoKIAkJCS8qIHNraXAgKi8KIAkJCWJyZWFrOwpAQCAtNDAxNiw2ICYjNDM7NDA0MSwxMSBAQCBzdGF0aWMgaW50IGJwZl9vYmplY3RfX2VsZl9jb2xsZWN0KHN0cnVjdCBicGZfb2JqZWN0ICpvYmopCiAJCQkJc2VjX2Rlc2MtJmd0O3NlY190eXBlID0gU0VDX1JPREFUQTsKIAkJCQlzZWNfZGVzYy0mZ3Q7c2hkciA9IHNoOwogCQkJCXNlY19kZXNjLSZndDtkYXRhID0gZGF0YTsKJiM0MzsJCQl9IGVsc2UgaWYgKHN0cmNtcChuYW1lLCBQRVJDUFVfU0VDKSA9PSAwIHx8CiYjNDM7CQkJCSAgIHN0cl9oYXNfcGZ4KG5hbWUsIFBFUkNQVV9TRUMgJiMzNDsuJiMzNDspKSB7CiYjNDM7CQkJCXNlY19kZXNjLSZndDtzZWNfdHlwZSA9IFNFQ19QRVJDUFU7CiYjNDM7CQkJCXNlY19kZXNjLSZndDtzaGRyID0gc2g7CiYjNDM7CQkJCXNlY19kZXNjLSZndDtkYXRhID0gZGF0YTsKIAkJCX0gZWxzZSBpZiAoc3RyY21wKG5hbWUsIFNUUlVDVF9PUFNfU0VDKSA9PSAwIHx8CiAJCQkJICAgc3RyY21wKG5hbWUsIFNUUlVDVF9PUFNfTElOS19TRUMpID09IDAgfHwKIAkJCQkgICBzdHJjbXAobmFtZSwgJiMzNDs/JiMzNDsgU1RSVUNUX09QU19TRUMpID09IDAgfHwKQEAgLTQ1NDQsNiAmIzQzOzQ1NzQsNyBAQCBzdGF0aWMgYm9vbCBicGZfb2JqZWN0X19zaG5keF9pc19kYXRhKGNvbnN0IHN0cnVjdCBicGZfb2JqZWN0ICpvYmosCiAJY2FzZSBTRUNfQlNTOgogCWNhc2UgU0VDX0RBVEE6CiAJY2FzZSBTRUNfUk9EQVRBOgomIzQzOwljYXNlIFNFQ19QRVJDUFU6CiAJCXJldHVybiB0cnVlOwogCWRlZmF1bHQ6CiAJCXJldHVybiBmYWxzZTsKQEAgLTQ1NjksNiAmIzQzOzQ2MDAsOCBAQCBicGZfb2JqZWN0X19zZWN0aW9uX3RvX2xpYmJwZl9tYXBfdHlwZShjb25zdCBzdHJ1Y3QgYnBmX29iamVjdCAqb2JqLCBpbnQgc2huZHgpCiAJCXJldHVybiBMSUJCUEZfTUFQX0RBVEE7CiAJY2FzZSBTRUNfUk9EQVRBOgogCQlyZXR1cm4gTElCQlBGX01BUF9ST0RBVEE7CiYjNDM7CWNhc2UgU0VDX1BFUkNQVToKJiM0MzsJCXJldHVybiBMSUJCUEZfTUFQX1BFUkNQVTsKIAlkZWZhdWx0OgogCQlyZXR1cm4gTElCQlBGX01BUF9VTlNQRUM7CiAJfQpAQCAtNDk0NCw3ICYjNDM7NDk3Nyw3IEBAIHN0YXRpYyBpbnQgbWFwX2ZpbGxfYnRmX3R5cGVfaW5mbyhzdHJ1Y3QgYnBmX29iamVjdCAqb2JqLCBzdHJ1Y3QgYnBmX21hcCAqbWFwKQogCiAJLyoKIAkgKiBMTFZNIGFubm90YXRlcyBnbG9iYWwgZGF0YSBkaWZmZXJlbnRseSBpbiBCVEYsIHRoYXQgaXMsCi0JICogb25seSBhcyAmIzM5Oy5kYXRhJiMzOTssICYjMzk7LmJzcyYjMzk7IG9yICYjMzk7LnJvZGF0YSYjMzk7LgomIzQzOwkgKiBvbmx5IGFzICYjMzk7LmRhdGEmIzM5OywgJiMzOTsuYnNzJiMzOTssICYjMzk7LnBlcmNwdSYjMzk7IG9yICYjMzk7LnJvZGF0YSYjMzk7LgogCSAqLwogCWlmICghYnBmX21hcF9faXNfaW50ZXJuYWwobWFwKSkKIAkJcmV0dXJuIC1FTk9FTlQ7CkBAIC01MjkzLDE4ICYjNDM7NTMyNiwyNiBAQCBzdGF0aWMgaW50CiBicGZfb2JqZWN0X19wb3B1bGF0ZV9pbnRlcm5hbF9tYXAoc3RydWN0IGJwZl9vYmplY3QgKm9iaiwgc3RydWN0IGJwZl9tYXAgKm1hcCkKIHsKIAllbnVtIGxpYmJwZl9tYXBfdHlwZSBtYXBfdHlwZSA9IG1hcC0mZ3Q7bGliYnBmX3R5cGU7CiYjNDM7CWJvb2wgaXNfcGVyY3B1ID0gbWFwX3R5cGUgPT0gTElCQlBGX01BUF9QRVJDUFU7CiYjNDM7CWNvbnN0IF9fdTY0IHVwZGF0ZV9mbGFncyA9IGlzX3BlcmNwdSA/IEJQRl9GX0FMTF9DUFVTIDogMDsKIAlpbnQgZXJyLCB6ZXJvID0gMDsKIAlzaXplX3QgbW1hcF9zejsKIAomIzQzOwlpZiAoaXNfcGVyY3B1ICZhbXA7JmFtcDsgIW9iai0mZ3Q7Z2VuX2xvYWRlciAmYW1wOyZhbXA7ICFrZXJuZWxfc3VwcG9ydHMob2JqLCBGRUFUX1BFUkNQVV9EQVRBKSkgewomIzQzOwkJcHJfd2FybigmIzM0O21hcCAmIzM5OyVzJiMzOTs6IGtlcm5lbCBkb2VzIG5vdCBzdXBwb3J0IHBlcmNwdSBkYXRhLlxuJiMzNDssCiYjNDM7CQkJYnBmX21hcF9fbmFtZShtYXApKTsKJiM0MzsJCXJldHVybiAtRU9QTk9UU1VQUDsKJiM0MzsJfQomIzQzOwogCWlmIChvYmotJmd0O2dlbl9sb2FkZXIpIHsKIAkJYnBmX2dlbl9fbWFwX3VwZGF0ZV9lbGVtKG9iai0mZ3Q7Z2VuX2xvYWRlciwgbWFwIC0gb2JqLSZndDttYXBzLAotCQkJCQkgbWFwLSZndDttbWFwZWQsIG1hcC0mZ3Q7ZGVmLnZhbHVlX3NpemUpOwomIzQzOwkJCQkJIG1hcC0mZ3Q7bW1hcGVkLCBtYXAtJmd0O2RlZi52YWx1ZV9zaXplLCB1cGRhdGVfZmxhZ3MpOwogCQlpZiAobWFwX3R5cGUgPT0gTElCQlBGX01BUF9ST0RBVEEgfHwgbWFwX3R5cGUgPT0gTElCQlBGX01BUF9LQ09ORklHKQogCQkJYnBmX2dlbl9fbWFwX2ZyZWV6ZShvYmotJmd0O2dlbl9sb2FkZXIsIG1hcCAtIG9iai0mZ3Q7bWFwcyk7CiAJCXJldHVybiAwOwogCX0KIAotCWVyciA9IGJwZl9tYXBfdXBkYXRlX2VsZW0obWFwLSZndDtmZCwgJmFtcDt6ZXJvLCBtYXAtJmd0O21tYXBlZCwgMCk7CiYjNDM7CWVyciA9IGJwZl9tYXBfdXBkYXRlX2VsZW0obWFwLSZndDtmZCwgJmFtcDt6ZXJvLCBtYXAtJmd0O21tYXBlZCwgdXBkYXRlX2ZsYWdzKTsKIAlpZiAoZXJyKSB7CiAJCWVyciA9IC1lcnJubzsKIAkJcHJfd2FybigmIzM0O21hcCAmIzM5OyVzJiMzOTs6IGZhaWxlZCB0byBzZXQgaW5pdGlhbCBjb250ZW50czogJXNcbiYjMzQ7LApAQCAtNTM0OSw2ICYjNDM7NTM5MCwxMyBAQCBicGZfb2JqZWN0X19wb3B1bGF0ZV9pbnRlcm5hbF9tYXAoc3RydWN0IGJwZl9vYmplY3QgKm9iaiwgc3RydWN0IGJwZl9tYXAgKm1hcCkKIAkJCXJldHVybiBlcnI7CiAJCX0KIAkJbWFwLSZndDttbWFwZWQgPSBtbWFwZWQ7CiYjNDM7CX0gZWxzZSBpZiAoaXNfcGVyY3B1KSB7CiYjNDM7CQlpZiAobXByb3RlY3QobWFwLSZndDttbWFwZWQsIG1tYXBfc3osIFBST1RfUkVBRCkpIHsKJiM0MzsJCQllcnIgPSAtZXJybm87CiYjNDM7CQkJcHJfd2FybigmIzM0O21hcCAmIzM5OyVzJiMzOTs6IGZhaWxlZCB0byBtcHJvdGVjdCgpIGNvbnRlbnRzOiAlc1xuJiMzNDssCiYjNDM7CQkJCWJwZl9tYXBfX25hbWUobWFwKSwgZXJyc3RyKGVycikpOwomIzQzOwkJCXJldHVybiBlcnI7CiYjNDM7CQl9CiAJfSBlbHNlIGlmIChtYXAtJmd0O21tYXBlZCkgewogCQltdW5tYXAobWFwLSZndDttbWFwZWQsIG1tYXBfc3opOwogCQltYXAtJmd0O21tYXBlZCA9IE5VTEw7CkBAIC01NjI3LDYgJiM0Mzs1Njc1LDkgQEAgYnBmX29iamVjdF9fY3JlYXRlX21hcHMoc3RydWN0IGJwZl9vYmplY3QgKm9iaikKIAkJICovCiAJCWlmIChicGZfbWFwX19pc19pbnRlcm5hbChtYXApICZhbXA7JmFtcDsgIWtlcm5lbF9zdXBwb3J0cyhvYmosIEZFQVRfR0xPQkFMX0RBVEEpKQogCQkJbWFwLSZndDthdXRvY3JlYXRlID0gZmFsc2U7CiYjNDM7CQlpZiAoYnBmX21hcF9faXNfaW50ZXJuYWwobWFwKSAmYW1wOyZhbXA7IGJwZl9tYXBfX3R5cGUobWFwKSA9PSBCUEZfTUFQX1RZUEVfUEVSQ1BVX0FSUkFZICZhbXA7JmFtcDsKJiM0MzsJCSAgICAha2VybmVsX3N1cHBvcnRzKG9iaiwgRkVBVF9QRVJDUFVfREFUQSkpCiYjNDM7CQkJbWFwLSZndDthdXRvY3JlYXRlID0gZmFsc2U7CiAKIAkJaWYgKCFtYXAtJmd0O2F1dG9jcmVhdGUpIHsKIAkJCXByX2RlYnVnKCYjMzQ7bWFwICYjMzk7JXMmIzM5Ozogc2tpcHBlZCBhdXRvLWNyZWF0aW5nLi4uXG4mIzM0OywgbWFwLSZndDtuYW1lKTsKQEAgLTEwODA3LDExICYjNDM7MTA4NTgsMTYgQEAgc3RhdGljIGJvb2wgbWFwX3VzZXNfcmVhbF9uYW1lKGNvbnN0IHN0cnVjdCBicGZfbWFwICptYXApCiAJICogc3VjaCBtYXAmIzM5O3MgY29ycmVzcG9uZGluZyBFTEYgc2VjdGlvbiBuYW1lIGFzIGEgbWFwIG5hbWUuCiAJICogVGhpcyBjaGVjayBkaXN0aW5ndWlzaGVzIC5kYXRhLy5yb2RhdGEgZnJvbSAuZGF0YS4qIGFuZCAucm9kYXRhLioKIAkgKiBtYXBzIHRvIGtub3cgd2hpY2ggbmFtZSBoYXMgdG8gYmUgcmV0dXJuZWQgdG8gdGhlIHVzZXIuCiYjNDM7CSAqIE1hcCBuYW1lIG9mIHRoZSBjdXN0b20gLnBlcmNwdS4qIG1hcHMgbWlnaHQgYmUgdHJ1bmNhdGVkIHRvCiYjNDM7CSAqIEJQRl9PQkpfTkFNRV9MRU4tMSBjaGFycyBpbiBpbnRlcm5hbF9tYXBfbmFtZSgpLiBIZW5jZSwgcGVyY3B1IGRhdGEKJiM0MzsJICogbWFwcyBtdXN0IHVzZSByZWFsIG5hbWUgZm9yIHRoZWlyIHVzZXItdmlzaWJsZSBuYW1lLgogCSAqLwogCWlmIChtYXAtJmd0O2xpYmJwZl90eXBlID09IExJQkJQRl9NQVBfREFUQSAmYW1wOyZhbXA7IHN0cmNtcChtYXAtJmd0O3JlYWxfbmFtZSwgREFUQV9TRUMpICE9IDApCiAJCXJldHVybiB0cnVlOwogCWlmIChtYXAtJmd0O2xpYmJwZl90eXBlID09IExJQkJQRl9NQVBfUk9EQVRBICZhbXA7JmFtcDsgc3RyY21wKG1hcC0mZ3Q7cmVhbF9uYW1lLCBST0RBVEFfU0VDKSAhPSAwKQogCQlyZXR1cm4gdHJ1ZTsKJiM0MzsJaWYgKG1hcC0mZ3Q7bGliYnBmX3R5cGUgPT0gTElCQlBGX01BUF9QRVJDUFUpCiYjNDM7CQlyZXR1cm4gdHJ1ZTsKIAlyZXR1cm4gZmFsc2U7CiB9CiAKZGlmZiAtLWdpdCBhL3Rvb2xzL2xpYi9icGYvbGliYnBmX2ludGVybmFsLmggYi90b29scy9saWIvYnBmL2xpYmJwZl9pbnRlcm5hbC5oCmluZGV4IDdhNzRhYmI5MDRmOGIuLjRjNDZkMzRmYzA1NWQgMTAwNjQ0Ci0tLSBhL3Rvb2xzL2xpYi9icGYvbGliYnBmX2ludGVybmFsLmgKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvbGliL2JwZi9saWJicGZfaW50ZXJuYWwuaApAQCAtNDAxLDYgJiM0Mzs0MDEsOCBAQCBlbnVtIGtlcm5fZmVhdHVyZV9pZCB7CiAJRkVBVF9CVEZfTEFZT1VULAogCS8qIEtlcm5lbCBzdXBwb3J0cyBCUEYgc3lzY2FsbCBjb21tb24gYXR0cmlidXRlcyAqLwogCUZFQVRfQlBGX1NZU0NBTExfQ09NTU9OX0FUVFJTLAomIzQzOwkvKiBLZXJuZWwgc3VwcG9ydHMgcGVyY3B1IGRhdGEgKi8KJiM0MzsJRkVBVF9QRVJDUFVfREFUQSwKIAlfX0ZFQVRfQ05ULAogfTsKIApkaWZmIC0tZ2l0IGEvdG9vbHMvbGliL2JwZi9za2VsX2ludGVybmFsLmggYi90b29scy9saWIvYnBmL3NrZWxfaW50ZXJuYWwuaAppbmRleCA1M2ZlZTUzZDM2ZDUxLi4xZjNmMzMyZGZmYmU5IDEwMDY0NAotLS0gYS90b29scy9saWIvYnBmL3NrZWxfaW50ZXJuYWwuaAomIzQzOyYjNDM7JiM0MzsgYi90b29scy9saWIvYnBmL3NrZWxfaW50ZXJuYWwuaApAQCAtMTMxLDggJiM0MzsxMzEsMTAgQEAgc3RhdGljIGlubGluZSB2b2lkIHNrZWxfZnJlZV9tYXBfZGF0YSh2b2lkICpwLCBfX3U2NCBhZGRyLCBzaXplX3Qgc3opCiB7CiAJaWYgKGFkZHIgIT0gfjBVTEwpCiAJCWt2ZnJlZShwKTsKLQkvKiBXaGVuIGFkZHIgPT0gfjBVTEwgdGhlICYjMzk7cCYjMzk7IHBvaW50cyB0bwotCSAqICgoc3RydWN0IGJwZl9hcnJheSAqKW1hcCktJmd0O3ZhbHVlLiBTZWUgc2tlbF9maW5hbGl6ZV9tYXBfZGF0YS4KJiM0MzsJLyoKJiM0MzsJICogV2hlbiBhZGRyID09IH4wVUxMIHRoZSBpbml0IGJ1ZmZlciBoYXMgYWxyZWFkeSBiZWVuIHJlbGVhc2VkLgomIzQzOwkgKiBGb3Igc2tlbF9maW5hbGl6ZV9tYXBfZGF0YSgpLCAmIzM5O3AmIzM5OyBwb2ludHMgdG8KJiM0MzsJICogKChzdHJ1Y3QgYnBmX2FycmF5ICopbWFwKS0mZ3Q7dmFsdWUuCiAJICovCiB9CiAKQEAgLTE3MCw2ICYjNDM7MTcyLDE1IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCAqc2tlbF9maW5hbGl6ZV9tYXBfZGF0YShfX3U2NCAqaW5pdF92YWwsIHNpemVfdCBtbWFwX3N6LCBpbnQKIAlyZXR1cm4gYWRkcjsKIH0KIAomIzQzO3N0YXRpYyBpbmxpbmUgaW50IHNrZWxfcHJvdGVjdF9tYXBfZGF0YSh2b2lkICpwLCBfX3U2NCAqaW5pdF92YWwsIHNpemVfdCBzeikKJiM0Mzt7CiYjNDM7CSh2b2lkKXN6OwomIzQzOwomIzQzOwlrdmZyZWUocCk7CiYjNDM7CSppbml0X3ZhbCA9IH4wVUxMOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiAjZWxzZQogCiBzdGF0aWMgaW5saW5lIHZvaWQgKnNrZWxfYWxsb2Moc2l6ZV90IHNpemUpCkBAIC0yMDgsNiAmIzQzOzIxOSwxNSBAQCBzdGF0aWMgaW5saW5lIHZvaWQgKnNrZWxfZmluYWxpemVfbWFwX2RhdGEoX191NjQgKmluaXRfdmFsLCBzaXplX3QgbW1hcF9zeiwgaW50CiAJCXJldHVybiBOVUxMOwogCXJldHVybiBhZGRyOwogfQomIzQzOwomIzQzO3N0YXRpYyBpbmxpbmUgaW50IHNrZWxfcHJvdGVjdF9tYXBfZGF0YSh2b2lkICpwLCBfX3U2NCAqaW5pdF92YWwsIHNpemVfdCBzeikKJiM0Mzt7CiYjNDM7CSh2b2lkKWluaXRfdmFsOwomIzQzOwomIzQzOwlpZiAobXByb3RlY3QocCwgc3osIFBST1RfUkVBRCkpCiYjNDM7CQlyZXR1cm4gLWVycm5vOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiAjZW5kaWYKIAogc3RhdGljIGlubGluZSBpbnQgc2tlbF9jbG9zZW56KGludCBmZCkKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9NYWtlZmlsZSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9NYWtlZmlsZQppbmRleCBkMzY1NWE3MDY0ODI2Li41NjBjZTQwMTZmYmZmIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvTWFrZWZpbGUKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL01ha2VmaWxlCkBAIC01MzEsNyAmIzQzOzUzMSw3IEBAIExTS0VMU19TSUdORUQgOj0gZmVudHJ5X3Rlc3QuYyBmZXhpdF90ZXN0LmMgYXRvbWljcy5jCiAKICMgR2VuZXJhdGUgYm90aCBsaWdodCBza2VsZXRvbiBhbmQgbGliYnBmIHNrZWxldG9uIGZvciB0aGVzZQogTFNLRUxTX0VYVFJBIDo9IHRlc3Rfa3N5bXNfbW9kdWxlLmMgdGVzdF9rc3ltc193ZWFrLmMga2Z1bmNfY2FsbF90ZXN0LmMgXAotCWtmdW5jX2NhbGxfdGVzdF9zdWJwcm9nLmMKJiM0MzsJa2Z1bmNfY2FsbF90ZXN0X3N1YnByb2cuYyB0ZXN0X2dsb2JhbF9wZXJjcHVfZGF0YS5jCiBTS0VMX0JMQUNLTElTVCAmIzQzOz0gJCQoTFNLRUxTKSAkJChMU0tFTFNfU0lHTkVEKQogCiB0ZXN0X3N0YXRpY19saW5rZWQuc2tlbC5oLWRlcHMgOj0gdGVzdF9zdGF0aWNfbGlua2VkMS5icGYubyB0ZXN0X3N0YXRpY19saW5rZWQyLmJwZi5vCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9nbG9iYWxfZGF0YV9pbml0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9nbG9iYWxfZGF0YV9pbml0LmMKaW5kZXggODQ2NjMzMmQ3NDA2Zi4uMjYyNTY1MWIzNGM3ZSAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvZ2xvYmFsX2RhdGFfaW5pdC5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2dsb2JhbF9kYXRhX2luaXQuYwpAQCAtMSw1ICYjNDM7MSw4IEBACiAvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAogI2luY2x1ZGUgJmx0O3Rlc3RfcHJvZ3MuaCZndDsKJiM0MzsjaW5jbHVkZSAmIzM0O2JwZi9saWJicGZfaW50ZXJuYWwuaCYjMzQ7CiYjNDM7I2luY2x1ZGUgJiMzNDt0ZXN0X2dsb2JhbF9wZXJjcHVfZGF0YS5za2VsLmgmIzM0OwomIzQzOyNpbmNsdWRlICYjMzQ7dGVzdF9nbG9iYWxfcGVyY3B1X2RhdGEubHNrZWwuaCYjMzQ7CiAKIHZvaWQgdGVzdF9nbG9iYWxfZGF0YV9pbml0KHZvaWQpCiB7CkBAIC02MCwzICYjNDM7NjMsMzEwIEBAIHZvaWQgdGVzdF9nbG9iYWxfZGF0YV9pbml0KHZvaWQpCiAJZnJlZShuZXd2YWwpOwogCWJwZl9vYmplY3RfX2Nsb3NlKG9iaik7CiB9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgdGVzdF9wZXJjcHVfZGF0YV9vbl9jcHVzKHN0cnVjdCBicGZfbWFwICptYXAsIGludCBtYXBfZmQsIGludCBwcm9nX2ZkLCBpbnQgKnJ1bnApCiYjNDM7ewomIzQzOwlfX3U2NCBhcmdzWzJdID0gezB4MTIzNFVMTCwgMHg1Njc4VUxMfTsKJiM0MzsJTElCQlBGX09QVFMoYnBmX3Rlc3RfcnVuX29wdHMsIHRvcHRzLAomIzQzOwkJICAgIC5jdHhfaW4gPSBhcmdzLAomIzQzOwkJICAgIC5jdHhfc2l6ZV9pbiA9IHNpemVvZihhcmdzKSwKJiM0MzsJCSAgICAuZmxhZ3MgPSBCUEZfRl9URVNUX1JVTl9PTl9DUFUsCiYjNDM7CSk7CiYjNDM7CWludCBpLCBlcnIsIGtleSA9IDAsIG51bV9vbmxpbmUsIHJ1biA9IDA7CiYjNDM7CWJvb2wgKm9ubGluZTsKJiM0MzsKJiM0MzsJZXJyID0gcGFyc2VfY3B1X21hc2tfZmlsZSgmIzM0Oy9zeXMvZGV2aWNlcy9zeXN0ZW0vY3B1L29ubGluZSYjMzQ7LCAmYW1wO29ubGluZSwgJmFtcDtudW1fb25saW5lKTsKJiM0MzsJaWYgKCFBU1NFUlRfT0soZXJyLCAmIzM0O3BhcnNlX2NwdV9tYXNrX2ZpbGUmIzM0OykpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CS8qIHJ1biBvbiBldmVyeSBvbmxpbmUtQ1BVICovCiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBudW1fb25saW5lOyBpJiM0MzsmIzQzOykgewomIzQzOwkJc3RydWN0IHRlc3RfZ2xvYmFsX3BlcmNwdV9kYXRhX19wZXJjcHUgZGF0YSA9IHt9OwomIzQzOwkJX191NjQgZmxhZ3M7CiYjNDM7CiYjNDM7CQlpZiAoIW9ubGluZVtpXSkKJiM0MzsJCQljb250aW51ZTsKJiM0MzsKJiM0MzsJCXRvcHRzLmNwdSA9IGk7CiYjNDM7CQl0b3B0cy5yZXR2YWwgPSAtMTsKJiM0MzsJCWVyciA9IGJwZl9wcm9nX3Rlc3RfcnVuX29wdHMocHJvZ19mZCwgJmFtcDt0b3B0cyk7CiYjNDM7CQlBU1NFUlRfT0soZXJyLCAmIzM0O2JwZl9wcm9nX3Rlc3RfcnVuX29wdHMmIzM0Oyk7CiYjNDM7CQlBU1NFUlRfRVEodG9wdHMucmV0dmFsLCAwLCAmIzM0O2JwZl9wcm9nX3Rlc3RfcnVuX29wdHMgcmV0dmFsJiMzNDspOwomIzQzOwomIzQzOwkJZmxhZ3MgPSAoKF9fdTY0KSBpICZsdDsmbHQ7IDMyKSB8IEJQRl9GX0NQVTsKJiM0MzsJCWlmIChtYXApCiYjNDM7CQkJZXJyID0gYnBmX21hcF9fbG9va3VwX2VsZW0obWFwLCAmYW1wO2tleSwgc2l6ZW9mKGtleSksICZhbXA7ZGF0YSwgc2l6ZW9mKGRhdGEpLAomIzQzOwkJCQkJCSAgIGZsYWdzKTsKJiM0MzsJCWVsc2UKJiM0MzsJCQllcnIgPSBicGZfbWFwX2xvb2t1cF9lbGVtX2ZsYWdzKG1hcF9mZCwgJmFtcDtrZXksICZhbXA7ZGF0YSwgZmxhZ3MpOwomIzQzOwkJaWYgKCFBU1NFUlRfT0soZXJyLCAmIzM0O2xvb2t1cF9lbGVtIG9uIGNwdSYjMzQ7KSkKJiM0MzsJCQlicmVhazsKJiM0MzsKJiM0MzsJCUFTU0VSVF9FUSgqcnVucCwgJiM0MzsmIzQzO3J1biwgJiMzNDtydW4mIzM0Oyk7CiYjNDM7CQlBU1NFUlRfRVEoZGF0YS5jcHVfaWQsIGksICYjMzQ7ZGF0YS5jcHVfaWQmIzM0Oyk7CiYjNDM7CQlBU1NFUlRfRVEoZGF0YS5kYXRhLCAxLCAmIzM0O2RhdGEuZGF0YSYjMzQ7KTsKJiM0MzsJCUFTU0VSVF9UUlVFKGRhdGEuc2V0LCAmIzM0O2RhdGEuc2V0JiMzNDspOwomIzQzOwkJQVNTRVJUX0VRKGRhdGEubnVtc1s2XSwgMHhjMGRlLCAmIzM0O2RhdGEubnVtc1s2XSYjMzQ7KTsKJiM0MzsJCUFTU0VSVF9FUShkYXRhLnN0cnVjdF9kYXRhLmksIDEsICYjMzQ7c3RydWN0X2RhdGEuaSYjMzQ7KTsKJiM0MzsJCUFTU0VSVF9UUlVFKGRhdGEuc3RydWN0X2RhdGEuc2V0LCAmIzM0O3N0cnVjdF9kYXRhLnNldCYjMzQ7KTsKJiM0MzsJCUFTU0VSVF9FUShkYXRhLnN0cnVjdF9kYXRhLm51bXNbNl0sIDB4YzBkZSwgJiMzNDtzdHJ1Y3RfZGF0YS5udW1zWzZdJiMzNDspOwomIzQzOwl9CiYjNDM7CiYjNDM7CWZyZWUob25saW5lKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgdGVzdF9nbG9iYWxfcGVyY3B1X2RhdGFfaW5pdCh2b2lkKQomIzQzO3sKJiM0MzsJc3RydWN0IHRlc3RfZ2xvYmFsX3BlcmNwdV9kYXRhX19wZXJjcHUgaW5pdF92YWx1ZSA9IHt9OwomIzQzOwlzdHJ1Y3QgdGVzdF9nbG9iYWxfcGVyY3B1X2RhdGFfX3BlcmNwdSAqaW5pdF9kYXRhOwomIzQzOwlzdHJ1Y3QgdGVzdF9nbG9iYWxfcGVyY3B1X2RhdGEgKnNrZWwgPSBOVUxMOwomIzQzOwlzaXplX3QgaW5pdF9kYXRhX3N6OwomIzQzOwlzdHJ1Y3QgYnBmX21hcCAqbWFwOwomIzQzOwlpbnQgcHJvZ19mZCwgZXJyOwomIzQzOwomIzQzOwlza2VsID0gdGVzdF9nbG9iYWxfcGVyY3B1X2RhdGFfX29wZW4oKTsKJiM0MzsJaWYgKCFBU1NFUlRfT0tfUFRSKHNrZWwsICYjMzQ7dGVzdF9nbG9iYWxfcGVyY3B1X2RhdGFfX29wZW4mIzM0OykpCiYjNDM7CQlnb3RvIG91dDsKJiM0MzsJaWYgKCFBU1NFUlRfT0tfUFRSKHNrZWwtJmd0O3BlcmNwdSwgJiMzNDtza2VsLSZndDtwZXJjcHUmIzM0OykpCiYjNDM7CQlnb3RvIG91dDsKJiM0MzsJaWYgKCFBU1NFUlRfT0tfUFRSKHNrZWwtJmd0O2RhdGFfcGVyY3B1LCAmIzM0O3NrZWwtJmd0O2RhdGFfcGVyY3B1JiMzNDspKQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CWlmICghQVNTRVJUX09LX1BUUihza2VsLSZndDtwZXJjcHVfZGF0YSwgJiMzNDtza2VsLSZndDtwZXJjcHVfZGF0YSYjMzQ7KSkKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwlpZiAoIUFTU0VSVF9PS19QVFIoc2tlbC0mZ3Q7cGVyY3B1X2xvb29vb29vb29uZywgJiMzNDtza2VsLSZndDtwZXJjcHVfbG9vb29vb29vb25nJiMzNDspKQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CiYjNDM7CUFTU0VSVF9TVFJFUShicGZfbWFwX19uYW1lKHNrZWwtJmd0O21hcHMucGVyY3B1X2RhdGEpLCAmIzM0Oy5wZXJjcHUuZGF0YSYjMzQ7LAomIzQzOwkJICAgICAmIzM0Oy5wZXJjcHUuZGF0YSBtYXAgbmFtZSYjMzQ7KTsKJiM0MzsJQVNTRVJUX1NUUkVRKGJwZl9tYXBfX25hbWUoc2tlbC0mZ3Q7bWFwcy5kYXRhX3BlcmNwdSksICYjMzQ7LmRhdGEucGVyY3B1JiMzNDssCiYjNDM7CQkgICAgICYjMzQ7LmRhdGEucGVyY3B1IG1hcCBuYW1lJiMzNDspOwomIzQzOwlBU1NFUlRfU1RSRVEoYnBmX21hcF9fbmFtZShza2VsLSZndDttYXBzLnBlcmNwdV9sb29vb29vb29vbmcpLCAmIzM0Oy5wZXJjcHUubG9vb29vb29vb25nJiMzNDssCiYjNDM7CQkgICAgICYjMzQ7bG9uZyBtYXAgbmFtZSYjMzQ7KTsKJiM0MzsJQVNTRVJUX1NUUkVRKGJwZl9tYXBfX25hbWUoc2tlbC0mZ3Q7bWFwcy5wZXJjcHUpLCAmIzM0Oy5wZXJjcHUmIzM0OywgJiMzNDttYXAgbmFtZSYjMzQ7KTsKJiM0MzsJQVNTRVJUX0VRKHNrZWwtJmd0O3BlcmNwdS0mZ3Q7ZGF0YSwgLTEsICYjMzQ7c2tlbC0mZ3Q7cGVyY3B1LSZndDtkYXRhJiMzNDspOwomIzQzOwlBU1NFUlRfRkFMU0Uoc2tlbC0mZ3Q7cGVyY3B1LSZndDtzZXQsICYjMzQ7c2tlbC0mZ3Q7cGVyY3B1LSZndDtzZXQmIzM0Oyk7CiYjNDM7CUFTU0VSVF9FUShza2VsLSZndDtwZXJjcHUtJmd0O251bXNbNl0sIDAsICYjMzQ7c2tlbC0mZ3Q7cGVyY3B1LSZndDtudW1zWzZdJiMzNDspOwomIzQzOwlBU1NFUlRfRVEoc2tlbC0mZ3Q7cGVyY3B1LSZndDtzdHJ1Y3RfZGF0YS5pLCAtMSwgJiMzNDtzdHJ1Y3RfZGF0YS5pJiMzNDspOwomIzQzOwlBU1NFUlRfRkFMU0Uoc2tlbC0mZ3Q7cGVyY3B1LSZndDtzdHJ1Y3RfZGF0YS5zZXQsICYjMzQ7c3RydWN0X2RhdGEuc2V0JiMzNDspOwomIzQzOwlBU1NFUlRfRVEoc2tlbC0mZ3Q7cGVyY3B1LSZndDtzdHJ1Y3RfZGF0YS5udW1zWzZdLCAwLCAmIzM0O3N0cnVjdF9kYXRhLm51bXNbNl0mIzM0Oyk7CiYjNDM7CiYjNDM7CW1hcCA9IHNrZWwtJmd0O21hcHMucGVyY3B1OwomIzQzOwlpZiAoIUFTU0VSVF9FUShicGZfbWFwX190eXBlKG1hcCksIEJQRl9NQVBfVFlQRV9QRVJDUFVfQVJSQVksICYjMzQ7YnBmX21hcF9fdHlwZSYjMzQ7KSkKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwomIzQzOwlpbml0X3ZhbHVlLmRhdGEgPSAyOwomIzQzOwlpbml0X3ZhbHVlLm51bXNbNl0gPSAtMTsKJiM0MzsJaW5pdF92YWx1ZS5zdHJ1Y3RfZGF0YS5pID0gMjsKJiM0MzsJaW5pdF92YWx1ZS5zdHJ1Y3RfZGF0YS5udW1zWzZdID0gLTE7CiYjNDM7CWVyciA9IGJwZl9tYXBfX3NldF9pbml0aWFsX3ZhbHVlKG1hcCwgJmFtcDtpbml0X3ZhbHVlLCBzaXplb2YoaW5pdF92YWx1ZSkpOwomIzQzOwlpZiAoIUFTU0VSVF9PSyhlcnIsICYjMzQ7YnBmX21hcF9fc2V0X2luaXRpYWxfdmFsdWUmIzM0OykpCiYjNDM7CQlnb3RvIG91dDsKJiM0MzsKJiM0MzsJaW5pdF9kYXRhID0gYnBmX21hcF9faW5pdGlhbF92YWx1ZShtYXAsICZhbXA7aW5pdF9kYXRhX3N6KTsKJiM0MzsJaWYgKCFBU1NFUlRfT0tfUFRSKGluaXRfZGF0YSwgJiMzNDticGZfbWFwX19pbml0aWFsX3ZhbHVlJiMzNDspKQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CiYjNDM7CUFTU0VSVF9FUShpbml0X2RhdGEtJmd0O2RhdGEsIGluaXRfdmFsdWUuZGF0YSwgJiMzNDtpbml0X3ZhbHVlIGRhdGEmIzM0Oyk7CiYjNDM7CUFTU0VSVF9FUShpbml0X2RhdGEtJmd0O3NldCwgaW5pdF92YWx1ZS5zZXQsICYjMzQ7aW5pdF92YWx1ZSBzZXQmIzM0Oyk7CiYjNDM7CUFTU0VSVF9FUShpbml0X2RhdGEtJmd0O3N0cnVjdF9kYXRhLmksIGluaXRfdmFsdWUuc3RydWN0X2RhdGEuaSwgJiMzNDtpbml0X3ZhbHVlIHN0cnVjdF9kYXRhLmkmIzM0Oyk7CiYjNDM7CUFTU0VSVF9FUShpbml0X2RhdGEtJmd0O3N0cnVjdF9kYXRhLm51bXNbNl0sIGluaXRfdmFsdWUuc3RydWN0X2RhdGEubnVtc1s2XSwKJiM0MzsJCSAgJiMzNDtpbml0X3ZhbHVlIHN0cnVjdF9kYXRhLm51bXNbNl0mIzM0Oyk7CiYjNDM7CUFTU0VSVF9FUShpbml0X2RhdGFfc3osIHNpemVvZihpbml0X3ZhbHVlKSwgJiMzNDtpbml0X3ZhbHVlIHNpemUmIzM0Oyk7CiYjNDM7CUFTU0VSVF9FUSgodm9pZCAqKSBpbml0X2RhdGEsICh2b2lkICopIHNrZWwtJmd0O3BlcmNwdSwgJiMzNDtza2VsLSZndDtwZXJjcHUgZXEgaW5pdF9kYXRhJiMzNDspOwomIzQzOwlBU1NFUlRfRVEoc2tlbC0mZ3Q7cGVyY3B1LSZndDtkYXRhLCBpbml0X3ZhbHVlLmRhdGEsICYjMzQ7c2tlbC0mZ3Q7cGVyY3B1LSZndDtkYXRhJiMzNDspOwomIzQzOwlBU1NFUlRfRVEoc2tlbC0mZ3Q7cGVyY3B1LSZndDtzZXQsIGluaXRfdmFsdWUuc2V0LCAmIzM0O3NrZWwtJmd0O3BlcmNwdS0mZ3Q7c2V0JiMzNDspOwomIzQzOwlBU1NFUlRfRVEoc2tlbC0mZ3Q7cGVyY3B1LSZndDtzdHJ1Y3RfZGF0YS5pLCBpbml0X3ZhbHVlLnN0cnVjdF9kYXRhLmksCiYjNDM7CQkgICYjMzQ7c2tlbC0mZ3Q7cGVyY3B1LSZndDtzdHJ1Y3RfZGF0YS5pJiMzNDspOwomIzQzOwlBU1NFUlRfRVEoc2tlbC0mZ3Q7cGVyY3B1LSZndDtzdHJ1Y3RfZGF0YS5udW1zWzZdLCBpbml0X3ZhbHVlLnN0cnVjdF9kYXRhLm51bXNbNl0sCiYjNDM7CQkgICYjMzQ7c2tlbC0mZ3Q7cGVyY3B1LSZndDtzdHJ1Y3RfZGF0YS5udW1zWzZdJiMzNDspOwomIzQzOwomIzQzOwllcnIgPSB0ZXN0X2dsb2JhbF9wZXJjcHVfZGF0YV9fbG9hZChza2VsKTsKJiM0MzsJaWYgKCFBU1NFUlRfT0soZXJyLCAmIzM0O3Rlc3RfZ2xvYmFsX3BlcmNwdV9kYXRhX19sb2FkJiMzNDspKQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CiYjNDM7CUFTU0VSVF9PS19QVFIoc2tlbC0mZ3Q7cGVyY3B1LCAmIzM0O3NrZWwtJmd0O3BlcmNwdSYjMzQ7KTsKJiM0MzsKJiM0MzsJcHJvZ19mZCA9IGJwZl9wcm9ncmFtX19mZChza2VsLSZndDtwcm9ncy51cGRhdGVfcGVyY3B1X2RhdGEpOwomIzQzOwl0ZXN0X3BlcmNwdV9kYXRhX29uX2NwdXMobWFwLCBicGZfbWFwX19mZChtYXApLCBwcm9nX2ZkLCAmYW1wO3NrZWwtJmd0O2Jzcy0mZ3Q7cnVuKTsKJiM0MzsKJiM0MztvdXQ6CiYjNDM7CXRlc3RfZ2xvYmFsX3BlcmNwdV9kYXRhX19kZXN0cm95KHNrZWwpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCB0ZXN0X2dsb2JhbF9wZXJjcHVfZGF0YV9sc2tlbCh2b2lkKQomIzQzO3sKJiM0MzsJc3RydWN0IHRlc3RfZ2xvYmFsX3BlcmNwdV9kYXRhX2xza2VsICpsc2tlbCA9IE5VTEw7CiYjNDM7CWludCBwcm9nX2ZkLCBtYXBfZmQ7CiYjNDM7CiYjNDM7CWxza2VsID0gdGVzdF9nbG9iYWxfcGVyY3B1X2RhdGFfbHNrZWxfX29wZW5fYW5kX2xvYWQoKTsKJiM0MzsJaWYgKCFBU1NFUlRfT0tfUFRSKGxza2VsLCAmIzM0O3Rlc3RfZ2xvYmFsX3BlcmNwdV9kYXRhX2xza2VsX19vcGVuX2FuZF9sb2FkJiMzNDspKQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CiYjNDM7CW1hcF9mZCA9IGxza2VsLSZndDttYXBzLnBlcmNwdS5tYXBfZmQ7CiYjNDM7CXByb2dfZmQgPSBsc2tlbC0mZ3Q7cHJvZ3MudXBkYXRlX3BlcmNwdV9kYXRhLnByb2dfZmQ7CiYjNDM7CXRlc3RfcGVyY3B1X2RhdGFfb25fY3B1cyhOVUxMLCBtYXBfZmQsIHByb2dfZmQsICZhbXA7bHNrZWwtJmd0O2Jzcy0mZ3Q7cnVuKTsKJiM0MzsKJiM0MztvdXQ6CiYjNDM7CXRlc3RfZ2xvYmFsX3BlcmNwdV9kYXRhX2xza2VsX19kZXN0cm95KGxza2VsKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBjcmVhdGVfcmRvbmx5X3BlcmNwdV9hcnJheSh2b2lkKQomIzQzO3sKJiM0MzsJTElCQlBGX09QVFMoYnBmX21hcF9jcmVhdGVfb3B0cywgbWFwX29wdHMsCiYjNDM7CQkgICAgLm1hcF9mbGFncyA9IEJQRl9GX1JET05MWV9QUk9HLAomIzQzOwkpOwomIzQzOwlpbnQga2V5ID0gMCwgbWFwX2ZkLCBlcnI7CiYjNDM7CV9fdTY0IHZhbHVlID0gMDsKJiM0MzsKJiM0MzsJbWFwX2ZkID0gYnBmX21hcF9jcmVhdGUoQlBGX01BUF9UWVBFX1BFUkNQVV9BUlJBWSwgJiMzNDtwZXJjcHVfcm9fbWFwJiMzNDssIHNpemVvZihpbnQpLAomIzQzOwkJCQlzaXplb2YoX191NjQpLCAxLCAmYW1wO21hcF9vcHRzKTsKJiM0MzsJaWYgKCFBU1NFUlRfR0UobWFwX2ZkLCAwLCAmIzM0O2JwZl9tYXBfY3JlYXRlJiMzNDspKQomIzQzOwkJcmV0dXJuIC0xOwomIzQzOwomIzQzOwllcnIgPSBicGZfbWFwX3VwZGF0ZV9lbGVtKG1hcF9mZCwgJmFtcDtrZXksICZhbXA7dmFsdWUsIEJQRl9GX0FMTF9DUFVTKTsKJiM0MzsJaWYgKCFBU1NFUlRfT0soZXJyLCAmIzM0O2JwZl9tYXBfdXBkYXRlX2VsZW0mIzM0OykpCiYjNDM7CQlnb3RvIG91dDsKJiM0MzsKJiM0MzsJZXJyID0gYnBmX21hcF9mcmVlemUobWFwX2ZkKTsKJiM0MzsJaWYgKCFBU1NFUlRfT0soZXJyLCAmIzM0O2JwZl9tYXBfZnJlZXplJiMzNDspKQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CiYjNDM7CXJldHVybiBtYXBfZmQ7CiYjNDM7CiYjNDM7b3V0OgomIzQzOwljbG9zZShtYXBfZmQpOwomIzQzOwlyZXR1cm4gLTE7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIHRlc3RfZ2xvYmFsX3BlcmNwdV9kYXRhX3Jkb25seV9kaXJlY3RfcmVhZCh2b2lkKQomIzQzO3sKJiM0MzsJLyoKJiM0MzsJICogUmF3IGluc3RydWN0aW9ucyB3aXRoIG1hbnVhbGx5IHByZXBhcmVkIHJkb25seSBwZXJjcHVfYXJyYXkgbWFwCiYjNDM7CSAqIGZvciB0ZXN0aW5nIGRpcmVjdC1yZWFkIGdsb2JhbCBwZXJjcHUgZGF0YSwgYmVjYXVzZSBsaWJicGYKJiM0MzsJICogZG9lc24mIzM5O3QgaGF2ZSByZG9ubHkgaW50ZXJuYWwgcGVyY3B1X2FycmF5IG1hcCBzdXBwb3J0IGZvcgomIzQzOwkgKiBnbG9iYWwgcGVyY3B1IGRhdGEuCiYjNDM7CSAqLwomIzQzOwlzdHJ1Y3QgYnBmX2luc24gaW5zbnNbXSA9IHsKJiM0MzsJCUJQRl9MRF9NQVBfVkFMVUUoQlBGX1JFR18xLCAwLCAwKSwKJiM0MzsJCUJQRl9MRFhfTUVNKEJQRl9EVywgQlBGX1JFR18wLCBCUEZfUkVHXzEsIDApLAomIzQzOwkJQlBGX0VYSVRfSU5TTigpLAomIzQzOwl9OwomIzQzOwlpbnQgbWFwX2ZkLCBwcm9nX2ZkOwomIzQzOwomIzQzOwltYXBfZmQgPSBjcmVhdGVfcmRvbmx5X3BlcmNwdV9hcnJheSgpOwomIzQzOwlpZiAobWFwX2ZkICZsdDsgMCkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJaW5zbnNbMF0uaW1tID0gbWFwX2ZkOwomIzQzOwlwcm9nX2ZkID0gYnBmX3Byb2dfbG9hZChCUEZfUFJPR19UWVBFX1NPQ0tFVF9GSUxURVIsICYjMzQ7cGVyY3B1X3JvX3Byb2cmIzM0OywgJiMzNDtHUEwmIzM0OywgaW5zbnMsCiYjNDM7CQkJCUFSUkFZX1NJWkUoaW5zbnMpLCBOVUxMKTsKJiM0MzsJaWYgKEFTU0VSVF9HRShwcm9nX2ZkLCAwLCAmIzM0O2JwZl9wcm9nX2xvYWQmIzM0OykpCiYjNDM7CQljbG9zZShwcm9nX2ZkKTsKJiM0MzsJY2xvc2UobWFwX2ZkKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgdGVzdF9nbG9iYWxfcGVyY3B1X2RhdGFfcmRvbmx5X2RpcmVjdF93cml0ZSh2b2lkKQomIzQzO3sKJiM0MzsJTElCQlBGX09QVFMoYnBmX3Byb2dfbG9hZF9vcHRzLCBwcm9nX29wdHMpOwomIzQzOwkvKiBTZWUgdGhlIGNvbW1lbnQgaW4gdGVzdF9nbG9iYWxfcGVyY3B1X2RhdGFfcmRvbmx5X2RpcmVjdF9yZWFkKCkgKi8KJiM0MzsJc3RydWN0IGJwZl9pbnNuIGluc25zW10gPSB7CiYjNDM7CQlCUEZfTERfTUFQX1ZBTFVFKEJQRl9SRUdfMSwgMCwgMCksCiYjNDM7CQlCUEZfTERYX01FTShCUEZfRFcsIEJQRl9SRUdfMCwgQlBGX1JFR18xLCAwKSwKJiM0MzsJCUJQRl9TVF9NRU0oQlBGX0RXLCBCUEZfUkVHXzEsIDAsIDApLAomIzQzOwkJQlBGX0VYSVRfSU5TTigpLAomIzQzOwl9OwomIzQzOwljaGFyIGxvZ19idWZbMjU2XSA9IHt9OwomIzQzOwlpbnQgbWFwX2ZkLCBwcm9nX2ZkOwomIzQzOwomIzQzOwlwcm9nX29wdHMubG9nX2J1ZiA9IGxvZ19idWY7CiYjNDM7CXByb2dfb3B0cy5sb2dfc2l6ZSA9IHNpemVvZihsb2dfYnVmKTsKJiM0MzsJcHJvZ19vcHRzLmxvZ19sZXZlbCA9IDE7CiYjNDM7CiYjNDM7CW1hcF9mZCA9IGNyZWF0ZV9yZG9ubHlfcGVyY3B1X2FycmF5KCk7CiYjNDM7CWlmIChtYXBfZmQgJmx0OyAwKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwlpbnNuc1swXS5pbW0gPSBtYXBfZmQ7CiYjNDM7CXByb2dfZmQgPSBicGZfcHJvZ19sb2FkKEJQRl9QUk9HX1RZUEVfU09DS0VUX0ZJTFRFUiwgJiMzNDtwZXJjcHVfcm9fcHJvZyYjMzQ7LCAmIzM0O0dQTCYjMzQ7LCBpbnNucywKJiM0MzsJCQkJQVJSQVlfU0laRShpbnNucyksICZhbXA7cHJvZ19vcHRzKTsKJiM0MzsJaWYgKCFBU1NFUlRfTFQocHJvZ19mZCwgMCwgJiMzNDticGZfcHJvZ19sb2FkJiMzNDspKQomIzQzOwkJY2xvc2UocHJvZ19mZCk7CiYjNDM7CWVsc2UKJiM0MzsJCUFTU0VSVF9IQVNfU1VCU1RSKGxvZ19idWYsICYjMzQ7d3JpdGUgaW50byBtYXAgZm9yYmlkZGVuJiMzNDssICYjMzQ7dmVyaWZpZXIgbG9nJiMzNDspOwomIzQzOwljbG9zZShtYXBfZmQpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCB0ZXN0X2dsb2JhbF9wZXJjcHVfZGF0YV92ZXJpZmllcl9sb2codm9pZCkKJiM0Mzt7CiYjNDM7CVJVTl9URVNUUyh0ZXN0X2dsb2JhbF9wZXJjcHVfZGF0YSk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIHRlc3RfZ2xvYmFsX3BlcmNwdV9kYXRhX2l0ZXIodm9pZCkKJiM0Mzt7CiYjNDM7CURFQ0xBUkVfTElCQlBGX09QVFMoYnBmX2l0ZXJfYXR0YWNoX29wdHMsIG9wdHMpOwomIzQzOwlzdHJ1Y3QgdGVzdF9nbG9iYWxfcGVyY3B1X2RhdGEgKnNrZWw7CiYjNDM7CXVuaW9uIGJwZl9pdGVyX2xpbmtfaW5mbyBsaW5mbyA9IHt9OwomIzQzOwlzdHJ1Y3QgYnBmX2xpbmsgKmxpbmsgPSBOVUxMOwomIzQzOwlpbnQgZmQsIG51bV9jcHVzLCBsZW4sIGVycjsKJiM0MzsJY2hhciBidWZbMTZdOwomIzQzOwomIzQzOwludW1fY3B1cyA9IGxpYmJwZl9udW1fcG9zc2libGVfY3B1cygpOwomIzQzOwlpZiAoIUFTU0VSVF9HVChudW1fY3B1cywgMCwgJiMzNDtsaWJicGZfbnVtX3Bvc3NpYmxlX2NwdXMmIzM0OykpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CXNrZWwgPSB0ZXN0X2dsb2JhbF9wZXJjcHVfZGF0YV9fb3BlbigpOwomIzQzOwlpZiAoIUFTU0VSVF9PS19QVFIoc2tlbCwgJiMzNDt0ZXN0X2dsb2JhbF9wZXJjcHVfZGF0YV9fb3BlbiYjMzQ7KSkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJc2tlbC0mZ3Q7cm9kYXRhLSZndDtudW1fY3B1cyA9IG51bV9jcHVzOwomIzQzOwlza2VsLSZndDtyb2RhdGEtJmd0O29mZnNldG9mX251bSA9IG9mZnNldG9mKHN0cnVjdCB0ZXN0X2dsb2JhbF9wZXJjcHVfZGF0YV9fcGVyY3B1LCBzdHJ1Y3RfZGF0YSk7CiYjNDM7CXNrZWwtJmd0O3JvZGF0YS0mZ3Q7b2Zmc2V0b2ZfbnVtICYjNDM7PSBzaXplb2Yoc2tlbC0mZ3Q7cGVyY3B1LSZndDtzdHJ1Y3RfZGF0YSkgLSBzaXplb2YoaW50KTsKJiM0MzsJc2tlbC0mZ3Q7cm9kYXRhLSZndDtlbGVtX3N6ID0gcm91bmR1cChzaXplb2Yoc3RydWN0IHRlc3RfZ2xvYmFsX3BlcmNwdV9kYXRhX19wZXJjcHUpLCA4KTsKJiM0MzsJc2tlbC0mZ3Q7cGVyY3B1LSZndDtzdHJ1Y3RfZGF0YS5udW1zWzZdID0gMHhjMGRlOwomIzQzOwomIzQzOwllcnIgPSB0ZXN0X2dsb2JhbF9wZXJjcHVfZGF0YV9fbG9hZChza2VsKTsKJiM0MzsJaWYgKCFBU1NFUlRfT0soZXJyLCAmIzM0O3Rlc3RfZ2xvYmFsX3BlcmNwdV9kYXRhX19sb2FkJiMzNDspKQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CiYjNDM7CWxpbmZvLm1hcC5tYXBfZmQgPSBicGZfbWFwX19mZChza2VsLSZndDttYXBzLnBlcmNwdSk7CiYjNDM7CW9wdHMubGlua19pbmZvID0gJmFtcDtsaW5mbzsKJiM0MzsJb3B0cy5saW5rX2luZm9fbGVuID0gc2l6ZW9mKGxpbmZvKTsKJiM0MzsJbGluayA9IGJwZl9wcm9ncmFtX19hdHRhY2hfaXRlcihza2VsLSZndDtwcm9ncy5kdW1wX3BlcmNwdV9kYXRhLCAmYW1wO29wdHMpOwomIzQzOwlpZiAoIUFTU0VSVF9PS19QVFIobGluaywgJiMzNDticGZfcHJvZ3JhbV9fYXR0YWNoX2l0ZXImIzM0OykpCiYjNDM7CQlnb3RvIG91dDsKJiM0MzsKJiM0MzsJZmQgPSBicGZfaXRlcl9jcmVhdGUoYnBmX2xpbmtfX2ZkKGxpbmspKTsKJiM0MzsJaWYgKCFBU1NFUlRfR0UoZmQsIDAsICYjMzQ7YnBmX2l0ZXJfY3JlYXRlJiMzNDspKQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CiYjNDM7CXdoaWxlICgobGVuID0gcmVhZChmZCwgYnVmLCBzaXplb2YoYnVmKSkpICZndDsgMCkKJiM0MzsJCWRvIHsgfSB3aGlsZSAoMCk7CiYjNDM7CUFTU0VSVF9FUShsZW4sIDAsICYjMzQ7cmVhZCBpdGVyJiMzNDspOwomIzQzOwlBU1NFUlRfVFJVRShza2VsLSZndDtic3MtJmd0O3J1bl9pdGVyLCAmIzM0O3J1bl9pdGVyJiMzNDspOwomIzQzOwlBU1NFUlRfRVEoc2tlbC0mZ3Q7YnNzLSZndDtwZXJjcHVfZGF0YV9zdW0sIDB4YzBkZSAqIG51bV9jcHVzLCAmIzM0O3BlcmNwdV9kYXRhX3N1bSYjMzQ7KTsKJiM0MzsKJiM0MzsJY2xvc2UoZmQpOwomIzQzO291dDoKJiM0MzsJYnBmX2xpbmtfX2Rlc3Ryb3kobGluayk7CiYjNDM7CXRlc3RfZ2xvYmFsX3BlcmNwdV9kYXRhX19kZXN0cm95KHNrZWwpOwomIzQzO30KJiM0MzsKJiM0Mzt2b2lkIHRlc3RfZ2xvYmFsX3BlcmNwdV9kYXRhKHZvaWQpCiYjNDM7ewomIzQzOwlpZiAoIWZlYXRfc3VwcG9ydGVkKE5VTEwsIEZFQVRfUEVSQ1BVX0RBVEEpKSB7CiYjNDM7CQl0ZXN0X19za2lwKCk7CiYjNDM7CQlyZXR1cm47CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoJiMzNDtpbml0JiMzNDspKQomIzQzOwkJdGVzdF9nbG9iYWxfcGVyY3B1X2RhdGFfaW5pdCgpOwomIzQzOwlpZiAodGVzdF9fc3RhcnRfc3VidGVzdCgmIzM0O2xza2VsJiMzNDspKQomIzQzOwkJdGVzdF9nbG9iYWxfcGVyY3B1X2RhdGFfbHNrZWwoKTsKJiM0MzsJaWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoJiMzNDtyZG9ubHlfZGlyZWN0X3JlYWQmIzM0OykpCiYjNDM7CQl0ZXN0X2dsb2JhbF9wZXJjcHVfZGF0YV9yZG9ubHlfZGlyZWN0X3JlYWQoKTsKJiM0MzsJaWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoJiMzNDtyZG9ubHlfZGlyZWN0X3dyaXRlJiMzNDspKQomIzQzOwkJdGVzdF9nbG9iYWxfcGVyY3B1X2RhdGFfcmRvbmx5X2RpcmVjdF93cml0ZSgpOwomIzQzOwl0ZXN0X2dsb2JhbF9wZXJjcHVfZGF0YV92ZXJpZmllcl9sb2coKTsKJiM0MzsJaWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoJiMzNDtpdGVyJiMzNDspKQomIzQzOwkJdGVzdF9nbG9iYWxfcGVyY3B1X2RhdGFfaXRlcigpOwomIzQzO30KZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X2dsb2JhbF9wZXJjcHVfZGF0YS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3RfZ2xvYmFsX3BlcmNwdV9kYXRhLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMC4uYTk0NDNmYjIwNTBlOQotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X2dsb2JhbF9wZXJjcHVfZGF0YS5jCkBAIC0wLDAgJiM0MzsxLDg4IEBACiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKJiM0MzsjaW5jbHVkZSAmbHQ7dm1saW51eC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDticGYvYnBmX2hlbHBlcnMuaCZndDsKJiM0MzsjaW5jbHVkZSAmIzM0O2JwZl9taXNjLmgmIzM0OwomIzQzOwomIzQzOy8qIFVzZWQgZm9yIHRlc3RpbmcgbWFwIG5hbWUuICovCiYjNDM7aW50IGxvb25nIFNFQygmIzM0Oy5wZXJjcHUubG9vb29vb29vb25nJiMzNDspOwomIzQzO2ludCBkYXRhMyBTRUMoJiMzNDsuZGF0YS5wZXJjcHUmIzM0Oyk7CiYjNDM7aW50IGRhdGEyIFNFQygmIzM0Oy5wZXJjcHUuZGF0YSYjMzQ7KTsKJiM0MzsKJiM0MztpbnQgcnVuOwomIzQzO2ludCBjcHVfaWQgU0VDKCYjMzQ7LnBlcmNwdSYjMzQ7KTsKJiM0MztpbnQgZGF0YSBTRUMoJiMzNDsucGVyY3B1JiMzNDspID0gLTE7CiYjNDM7aW50IG51bXNbN10gU0VDKCYjMzQ7LnBlcmNwdSYjMzQ7KTsKJiM0Mztib29sIHNldCBTRUMoJiMzNDsucGVyY3B1JiMzNDspID0gZmFsc2U7CiYjNDM7c3RydWN0IHsKJiM0MzsJY2hhciBzZXQ7CiYjNDM7CWludCBpOwomIzQzOwlpbnQgbnVtc1s3XTsKJiM0Mzt9IHN0cnVjdF9kYXRhIFNFQygmIzM0Oy5wZXJjcHUmIzM0OykgPSB7CiYjNDM7CS5zZXQgPSAwLAomIzQzOwkuaSA9IC0xLAomIzQzO307CiYjNDM7CiYjNDM7U0VDKCYjMzQ7cmF3X3RwL3Rhc2tfcmVuYW1lJiMzNDspCiYjNDM7X19hdXhpbGlhcnkKJiM0MztpbnQgdXBkYXRlX3BlcmNwdV9kYXRhKHZvaWQgKmN0eCkKJiM0Mzt7CiYjNDM7CXN0cnVjdF9kYXRhLm51bXNbNl0gPSAweGMwZGU7CiYjNDM7CXN0cnVjdF9kYXRhLnNldCA9IDE7CiYjNDM7CXN0cnVjdF9kYXRhLmkgPSAxOwomIzQzOwludW1zWzZdID0gMHhjMGRlOwomIzQzOwlkYXRhID0gMTsKJiM0MzsJcnVuJiM0MzsmIzQzOzsKJiM0MzsJc2V0ID0gdHJ1ZTsKJiM0MzsJY3B1X2lkID0gYnBmX2dldF9zbXBfcHJvY2Vzc29yX2lkKCk7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgY29uc3QgY2hhciBmbXRbXSBTRUMoJiMzNDsucGVyY3B1LmZtdCYjMzQ7KSA9ICYjMzQ7ZGF0YSAlZFxuJiMzNDs7CiYjNDM7CiYjNDM7U0VDKCYjMzQ7P2twcm9iZSYjMzQ7KQomIzQzO19fZmFpbHVyZSBfX21zZygmIzM0O1J7e1swLTldJiM0Mzt9fSBwb2ludHMgdG8gcGVyY3B1X2FycmF5IG1hcCB3aGljaCBjYW5ub3QgYmUgdXNlZCBhcyBjb25zdCBzdHJpbmcmIzM0OykKJiM0MztpbnQgdmVyaWZpZXJfc3RybmNtcCh2b2lkICpjdHgpCiYjNDM7ewomIzQzOwlyZXR1cm4gYnBmX3N0cm5jbXAoJiMzNDt0ZXN0JiMzNDssIDUsIGZtdCk7CiYjNDM7fQomIzQzOwomIzQzO1NFQygmIzM0Oz9rcHJvYmUmIzM0OykKJiM0MztfX2ZhaWx1cmUgX19tc2coJiMzNDtSe3tbMC05XSYjNDM7fX0gcG9pbnRzIHRvIHBlcmNwdV9hcnJheSBtYXAgd2hpY2ggY2Fubm90IGJlIHVzZWQgYXMgY29uc3Qgc3RyaW5nJiMzNDspCiYjNDM7aW50IHZlcmlmaWVyX3NucHJpbnRmKHZvaWQgKmN0eCkKJiM0Mzt7CiYjNDM7CXU2NCBhcmdzW10gPSB7IGRhdGEgfTsKJiM0MzsJY2hhciBidWZbMTI4XTsKJiM0MzsJaW50IGxlbjsKJiM0MzsKJiM0MzsJbGVuID0gYnBmX3NucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksIGZtdCwgYXJncywgc2l6ZW9mKGFyZ3MpKTsKJiM0MzsJaWYgKGxlbiAmZ3Q7IDApCiYjNDM7CQlicGZfcHJpbnRrKCYjMzQ7c25wcmludGY6ICVzXG4mIzM0OywgYnVmKTsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3ZvbGF0aWxlIGNvbnN0IF9fdTMyIG51bV9jcHVzID0gMDsKJiM0Mzt2b2xhdGlsZSBjb25zdCBpbnQgb2Zmc2V0b2ZfbnVtOwomIzQzO3ZvbGF0aWxlIGNvbnN0IGludCBlbGVtX3N6OwomIzQzO19fdTMyIHBlcmNwdV9kYXRhX3N1bSA9IDA7CiYjNDM7Ym9vbCBydW5faXRlciA9IGZhbHNlOwomIzQzOwomIzQzO1NFQygmIzM0O2l0ZXIvYnBmX21hcF9lbGVtJiMzNDspCiYjNDM7X19hdXhpbGlhcnkKJiM0MztpbnQgZHVtcF9wZXJjcHVfZGF0YShzdHJ1Y3QgYnBmX2l0ZXJfX2JwZl9tYXBfZWxlbSAqY3R4KQomIzQzO3sKJiM0MzsJdm9pZCAqcHB0ciA9IGN0eC0mZ3Q7dmFsdWU7CiYjNDM7CWludCBpOwomIzQzOwomIzQzOwlpZiAoIXBwdHIpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJcnVuX2l0ZXIgPSB0cnVlOwomIzQzOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgbnVtX2NwdXM7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQlwZXJjcHVfZGF0YV9zdW0gJiM0Mzs9ICooaW50ICopIChwcHRyICYjNDM7IG9mZnNldG9mX251bSk7CiYjNDM7CQlwcHRyICYjNDM7PSBlbGVtX3N6OwomIzQzOwl9CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztjaGFyIF9saWNlbnNlW10gU0VDKCYjMzQ7bGljZW5zZSYjMzQ7KSA9ICYjMzQ7R1BMJiMzNDs7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDE5OjQyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIzMDgzCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogODYyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgQlBGIFBlci1DUFUgQXJyYXkgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggaW50cm9kdWNpbmcgYC5wZXJjcHVgIGdsb2JhbCBkYXRhIG1hcCBzdXBwb3J0IHdpdGhpbiBCUEYuIEl0JiMzOTtzIHRvdWNoaW5nIHNvbWUgY29yZSBhcmVhcywgc3BlY2lmaWNhbGx5IGBhcnJheW1hcC5jYCwgYGZpeHVwcy5jYCwgYW5kIHRoZSB2ZXJpZmllciAoYHZlcmlmaWVyLmNgKSwgYWxvbmcgd2l0aCBzb21lIHRvb2xpbmcuIFRoZSBjb3JlIGZ1bmN0aW9uYWxpdHkgc2VlbXMgY2VudGVyZWQgYXJvdW5kIGhhbmRsaW5nIGBCUEZfTUFQX1RZUEVfUEVSQ1BVX0FSUkFZYCBtYXBzLiBUaGlzIGlzIGEgc2lnbmlmaWNhbnQgZnVuY3Rpb25hbCBjaGFuZ2Ugd2l0aGluIHRoZSBCUEYgc3Vic3lzdGVtLCB3aGljaCBzY3JlYW1zIGZvciBmdXp6aW5nIHRvIHVuY292ZXIgYW55IGVkZ2UgY2FzZSBpc3N1ZXMuCgpNeSBpbW1lZGlhdGUgZm9jdXMgcG9pbnRzIGFyZSB0aGVzZSBzeW1ib2xzOgoKKiAgIGBwZXJjcHVfYXJyYXlfbWFwX2RpcmVjdF92YWx1ZV9hZGRyYAoqICAgYHBlcmNwdV9hcnJheV9tYXBfZGlyZWN0X3ZhbHVlX21ldGFgCiogICBgYnBmX2RvX21pc2NfZml4dXBzYCDigJMgYWx0aG91Z2ggdGhhdCYjMzk7cyBhIGJpdCBicm9hZCwgaXTigJlzIHdoZXJlIHRoZSBuZXcgZml4dXAgbG9naWMgbGl2ZXMuCiogICBgY2hlY2tfbWFwX21lbV9yZWFkYCDigJMgdGhpcyBuZXcgZnVuY3Rpb24gaW4gdGhlIHZlcmlmaWVyIGlzIGludGVyZXN0aW5nLgoKTGV0JiMzOTtzIGRpdmUgaW50byBgYXJyYXltYXAuY2AgYW5kIGNoZWNrIG91dCBgcGVyY3B1X2FycmF5X21hcF9kaXJlY3RfdmFsdWVfYWRkcmAuIEl0JiMzOTtzIGBzdGF0aWNgLCBidXQsIGl0JiMzOTtzIGFzc2lnbmVkIHRvIGBtYXBfZGlyZWN0X3ZhbHVlX2FkZHJgIGluIGBwZXJjcHVfYXJyYXlfbWFwX29wc2AsIHNvIGl0JiMzOTtzIGEgZnVuY3Rpb24gcG9pbnRlciBhbmQgd29uJiMzOTt0IGJlIGlubGluZWQuIFRoYXQgbWVhbnMgaXQgKnNob3VsZCogaGF2ZSBhIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzLCBzbyBpdCYjMzk7cyBhIHZhbGlkIHRhcmdldC4gSSYjMzk7bGwgbmVlZCB0byBkb3VibGUgY2hlY2sgZm9yIGFueSBub24tc3RhdGljIGFsdGVybmF0aXZlcy4KClJpZ2h0LCBgY2hlY2tfbWFwX21lbV9yZWFkYCBpcyBgc3RhdGljYCwgYnV0IGl0JiMzOTtzIG5ldywgc28gSSYjMzk7bGwga2VlcCBpdCBvbiB0aGUgcmFkYXIuIGBicGZfZG9fbWlzY19maXh1cHNgIGlzICpub3QqIGBzdGF0aWNgIGFuZCBJIGNhbiBzZWUgaXQmIzM5O3MgY2FsbGVkIGZyb20gYHZlcmlmaWVyLmNgLCB3aGljaCBtYWtlcyBpdCBhbiBpbnRlcmVzdGluZyB0YXJnZXQuIEFuZCwgaW50ZXJlc3RpbmdseSwgYGJwZl9tYXBfZGlyZWN0X3JlYWRgIGlzIGFsc28gbm90IHN0YXRpYy4gTGV0JiMzOTtzIHNlZS4uLiBBaGEhIEkgc2VlIHRoYXQgYGJwZl9tYXBfZGlyZWN0X3JlYWRgIGhhcyBhIGNydWNpYWwgY2hhbmdlOgoKYGBgYwpAQCAtNTY2Miw2ICYjNDM7NTY1Nyw4IEBAIGludCBicGZfbWFwX2RpcmVjdF9yZWFkKHN0cnVjdCBicGZfbWFwICptYXAsIGludCBvZmYsIGludCBzaXplLCB1NjQgKnZhbCwKIAl1NjQgYWRkcjsKIAlpbnQgZXJyOwogCiYjNDM7CWlmIChtYXAtJmd0O21hcF90eXBlID09IEJQRl9NQVBfVFlQRV9JTlNOX0FSUkFZIHx8IG1hcC0mZ3Q7bWFwX3R5cGUgPT0gQlBGX01BUF9UWVBFX1BFUkNQVV9BUlJBWSkKJiM0MzsJCXJldHVybiAtRUlOVkFMOwogCWVyciA9IG1hcC0mZ3Q7b3BzLSZndDttYXBfZGlyZWN0X3ZhbHVlX2FkZHIobWFwLCAmYW1wO2FkZHIsIG9mZik7CiBgYGAKCkl0JiMzOTtzIG5vdyByZXR1cm5pbmcgYC1FSU5WQUxgIGZvciBgQlBGX01BUF9UWVBFX1BFUkNQVV9BUlJBWWAsIHdoaWNoIGxvb2tzIGltcG9ydGFudCEKCk5vdywgdGhlIG5ldyBgY2hlY2tfbWFwX21lbV9yZWFkYCBsb29rcyBsaWtlOgoKYGBgYwomIzQzO3N0YXRpYyBpbnQgY2hlY2tfbWFwX21lbV9yZWFkKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcsIGludCBvZmYsCiYjNDM7CQkJICAgICAgaW50IGJwZl9zaXplLCBpbnQgdmFsdWVfcmVnbm8sIGJvb2wgaXNfbGRzeCkKYGBgCgpJdCYjMzk7cyBgc3RhdGljYCwgYnV0IGl0JiMzOTtzICpuZXcqIGNvZGUsIHNvIGEgZGVmaW5pdGUgdGFyZ2V0IGZvciBhbmFseXNpcy4gSSYjMzk7bGwgbmVlZCB0byBzZWUgaG93IGl0JiMzOTtzIHVzZWQuCgpMYXN0bHksIEkgc2hvdWxkIHByb2JhYmx5IGdsYW5jZSBhdCB0aGUgS2NvbmZpZyB0byBzZWUgd2hhdCB0aGUgbWFpbiBCUEYgY29uZmlndXJhdGlvbiBvcHRpb24gaXMuIFl1cCwgYENPTkZJR19CUEZfU1lTQ0FMTGAgc2VlbXMgdG8gYmUgdGhlIGNyaXRpY2FsIG9uZS4KCkkmIzM5O20gcmVhZHkgdG8gc3RhcnQgc29tZSB2ZXJpZmljYXRpb24gd2l0aCB0aGUgdG9vbHMgdG8gdmFsaWRhdGUgdGhpcyBwYXRjaC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAxOTo0MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDticGZfZG9fbWlzY19maXh1cHMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvYnBmLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL2ZpeHVwcy5jPTE0NTA9c3RhdGljIGludCBhZGRfaGlkZGVuX3N1YnByb2coc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICpwYXRjaCwgaW50IGxlbilcbi0tXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTE0NzgtICovXG5rZXJuZWwvYnBmL2ZpeHVwcy5jOjE0Nzk6aW50IGJwZl9kb19taXNjX2ZpeHVwcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxua2VybmVsL2JwZi9maXh1cHMuYy0xNDgwLXtcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MjAyMjA9aW50IGJwZl9jaGVjayhzdHJ1Y3QgYnBmX3Byb2cgKipwcm9nLCB1bmlvbiBicGZfYXR0ciAqYXR0ciwgYnBmcHRyX3QgdWF0dHIsXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTIwNDMyLVx0aWYgKHJldCA9PSAwKVxua2VybmVsL2JwZi92ZXJpZmllci5jOjIwNDMzOlx0XHRyZXQgPSBicGZfZG9fbWlzY19maXh1cHMoZW52KTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMDQzNC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAxOTo0MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNTAxNQoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDM2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipDb25zaWRlcmluZyBCUEYgRml4dXBzIGFuZCBQZXItQ1BVIEFycmF5IEFkZHJlc3NpbmcqKgoKUmlnaHQsIHNvIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgd2hlcmUgdG8gZGlnIGluIG9uIHRoaXMuICpgYnBmX2RvX21pc2NfZml4dXBzYCogaXMgZGVmaW5pdGVseSBhIHNvbGlkIGNhbmRpZGF0ZSBmb3IgZnVydGhlciBpbnZlc3RpZ2F0aW9uLiBJdCBzZWVtcyBsaWtlIGl0IGNvdWxkIGJlIGEgY3J1Y2lhbCBwYXJ0IG9mIHRoZSBwcm9jZXNzLCBhbmQgSSBzaG91bGQgc3RhcnQgdGhlcmUuIEJ1dCB0aGVuLCBJJiMzOTttIGFsc28gd29uZGVyaW5nIGFib3V0ICpgcGVyY3B1X2FycmF5X21hcF9kaXJlY3RfdmFsdWVfYWRkcmAqLiBDb3VsZCB0aGF0IGJlIGEgcmVsYXRlZCBhcmVhIHRoYXQgaG9sZHMgc29tZSBpbnRlcmVzdGluZyBjbHVlcz8gSSBrbm93IHRob3NlIHBlci1DUFUgYXJyYXlzIGNhbiBiZSBhIHNvdXJjZSBvZiBzb21lIHRyaWNreSBiZWhhdmlvciwgZXNwZWNpYWxseSB3aGVuIGRlYWxpbmcgd2l0aCBkaXJlY3QgYWNjZXNzLCBzbyBJIHNob3VsZCBzZWUgaWYgdGhlcmUgYXJlIGNvbm5lY3Rpb25zLiBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIGlmIHRoZXJlIGFyZSBzaGFyZWQgdmFyaWFibGVzIG9yIGZ1bmN0aW9ucyB0aGF0IGNyb3NzIGJvdGggdGhlIGZpeHVwcyBhbmQgdGhlIHBlci1DUFUgYXJyYXkuIEl0IG1heSBiZSBpbXBvcnRhbnQgdG8gZXhhbWluZSBob3cgdGhvc2UgYWRkcmVzc2VzIGFyZSBjYWxjdWxhdGVkIGFuZCB1c2VkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDE5OjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3BlcmNwdV9hcnJheV9tYXBfZGlyZWN0X3ZhbHVlX2FkZHImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvYnBmLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL2FycmF5bWFwLmM9MjUxPXN0YXRpYyB2b2lkICpwZXJjcHVfYXJyYXlfbWFwX2xvb2t1cF9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSlcbi0tXG5rZXJuZWwvYnBmL2FycmF5bWFwLmMtMjYxLVxua2VybmVsL2JwZi9hcnJheW1hcC5jOjI2MjpzdGF0aWMgaW50IHBlcmNwdV9hcnJheV9tYXBfZGlyZWN0X3ZhbHVlX2FkZHIoY29uc3Qgc3RydWN0IGJwZl9tYXAgKm1hcCwgdTY0ICppbW0sIHUzMiBvZmYpXG5rZXJuZWwvYnBmL2FycmF5bWFwLmMtMjYzLXtcbi0tXG5rZXJuZWwvYnBmL2FycmF5bWFwLmM9ODU5PWNvbnN0IHN0cnVjdCBicGZfbWFwX29wcyBwZXJjcHVfYXJyYXlfbWFwX29wcyA9IHtcbi0tXG5rZXJuZWwvYnBmL2FycmF5bWFwLmMtODY2LVx0Lm1hcF9nZW5fbG9va3VwID0gcGVyY3B1X2FycmF5X21hcF9nZW5fbG9va3VwLFxua2VybmVsL2JwZi9hcnJheW1hcC5jOjg2NzpcdC5tYXBfZGlyZWN0X3ZhbHVlX2FkZHIgPSBwZXJjcHVfYXJyYXlfbWFwX2RpcmVjdF92YWx1ZV9hZGRyLFxua2VybmVsL2JwZi9hcnJheW1hcC5jLTg2OC1cdC5tYXBfZGlyZWN0X3ZhbHVlX21ldGEgPSBwZXJjcHVfYXJyYXlfbWFwX2RpcmVjdF92YWx1ZV9tZXRhLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDE5OjQzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI1NTcxCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjoKCioqQW5hbHl6aW5nIHRoYXQgU3RhdGljIEZ1bmN0aW9uIFBvaW50ZXIgQXNzaWdubWVudCoqCgpBbHJpZ2h0LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwaWVjZSBvZiBjb2RlLCBhbmQgaXQmIzM5O3MgYSBzdGF0aWMgdmFyaWFibGUsIGJ1dCBpdCYjMzk7cyBhc3NpZ25lZCB0byBhIGZ1bmN0aW9uIHBvaW50ZXIuIFRoYXQmIzM5O3MgaW50ZXJlc3RpbmcuIFRoZSAmIzM0O3N0YXRpYyYjMzQ7IGtleXdvcmQgdGVsbHMgbWUgdGhpcyB0aGluZyBoYXMgaW50ZXJuYWwgbGlua2FnZTsgaXQmIzM5O3MgYSBkaXN0aW5jdCBzeW1ib2wgd2l0aGluIHRoaXMgY29tcGlsYXRpb24gdW5pdC4gRXZlbiB0aG91Z2ggaXQmIzM5O3Mgc3RhdGljLCB0aGUgYXNzaWdubWVudCB0byBhIGZ1bmN0aW9uIHBvaW50ZXIgbWFrZXMgaXQgYmVoYXZlIGluIGEgdmVyeSBzcGVjaWZpYyB3YXkuIEl04oCZcyBnb3QgaXRzIG93biBpZGVudGl0eSwgYXMgaXQgd2VyZSwgZGVzcGl0ZSB0aGUgbGFjayBvZiBleHRlcm5hbCBsaW5rYWdlLgoKTm93LCBsZXQmIzM5O3Mgc2VlIHdoYXQgYGNoZWNrX21hcF9tZW1fcmVhZGAgaXMgYWxsIGFib3V0LiBUaW1lIHRvIGRpdmUgZGVlcGVyIGludG8gdGhhdCBmdW5jdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAxOTo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjaGVja19tYXBfbWVtX3JlYWQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvYnBmLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL3ZlcmlmaWVyLmM9NjE0MT1zdGF0aWMgdm9pZCBhZGRfc2NhbGFyX3RvX3JlZyhzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqZHN0X3JlZywgczY0IHZhbClcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNjE1Ny1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo2MTU4OnN0YXRpYyBpbnQgY2hlY2tfbWFwX21lbV9yZWFkKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcsIGludCBvZmYsXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNjE1OS1cdFx0XHQgICAgICBpbnQgYnBmX3NpemUsIGludCB2YWx1ZV9yZWdubywgYm9vbCBpc19sZHN4KVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz02MjA5PXN0YXRpYyBpbnQgY2hlY2tfbWVtX2FjY2VzcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBpbnQgaW5zbl9pZHgsIHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcsIGFyZ25vX3QgYXJnbm8sXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTYyNTYtXHRcdH0gZWxzZSBpZiAodCA9PSBCUEZfUkVBRCBcdTAwMjZcdTAwMjYgdmFsdWVfcmVnbm8gXHUwMDNlPSAwKSB7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NjI1NzpcdFx0XHRlcnIgPSBjaGVja19tYXBfbWVtX3JlYWQoZW52LCByZWcsIG9mZiwgYnBmX3NpemUsIHZhbHVlX3JlZ25vLCBpc19sZHN4KTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy02MjU4LVx0XHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMTk6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjYxMDYKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiA1MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOgoKKipBbmFseXppbmcgUG90ZW50aWFsIE9wdGltaXphdGlvbnMgaW4gTWVtb3J5IEFjY2VzcyBDaGVja3MqKgoKUmlnaHQsIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGBjaGVja19tYXBfbWVtX3JlYWRgIGZ1bmN0aW9uLiBJdCYjMzk7cyBtYXJrZWQgYXMgYHN0YXRpY2AsIGFuZCB0aGUgb25seSBwbGFjZSBJIHNlZSBpdCBiZWluZyBjYWxsZWQgaXMgd2l0aGluIGBjaGVja19tZW1fYWNjZXNzYC4gVGhhdCBzY3JlYW1zICYjMzQ7aW5saW5pbmcgY2FuZGlkYXRlJiMzNDsgdG8gbWUuIEl0JiMzOTtzIHdvcnRoIGludmVzdGlnYXRpbmcgaWYgdGhlIGNvbXBpbGVyIGlzIGFscmVhZHkgZG9pbmcgdGhhdCBhdXRvbWF0aWNhbGx5LiBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQsIG9mIGNvdXJzZSwgYmVjYXVzZSBhbiBhc3N1bWVkIG9wdGltaXphdGlvbiBpc24mIzM5O3QgYWx3YXlzIHBlcmZvcm1lZC4gSWYgaXQmIzM5O3MgKm5vdCogYmVpbmcgaW5saW5lZCwgdGhlbiBsZXQmIzM5O3Mgc2VlIGlmIHdlIGNhbiBmb3JjZSB0aGF0LCBvciBhdCBsZWFzdCB1bmRlcnN0YW5kIHdoeSB0aGUgY29tcGlsZXIgaXNuJiMzOTt0IGRvaW5nIHNvIGF1dG9tYXRpY2FsbHkuCgpOb3csIGEgcmVsYXRlZCB0aG91Z2h0Li4uIGNvdWxkIGBicGZfbWFwX2RpcmVjdF9yZWFkYCBiZSBhIHBvdGVudGlhbCB0YXJnZXQgZnVuY3Rpb24gZm9yIGZ1cnRoZXIgb3B0aW1pemF0aW9uIG9yIHNwZWNpYWwgaGFuZGxpbmc/IEl0IHNlZW1zIGxpa2UgYSBnb29kIHBsYWNlIHRvIHN0YXJ0IGRpZ2dpbmcgZGVlcGVyIHRvIGZpbmQgb3RoZXIgb3Bwb3J0dW5pdGllcyB0byBpbXByb3ZlIHBlcmZvcm1hbmNlIGlmIHRoZSBjdXJyZW50IGlubGluaW5nIGlzIGZvdW5kIHRvIG5vdCBiZSBwZXJmb3JtZWQsIG9yIHRvIHRyeSBhbmQgaW1wcm92ZSBwZXJmb3JtYW5jZS4gTGV0JiMzOTtzIHNlZSBpZiB3ZSBjYW4gZG8gc29tZXRoaW5nIG1vcmUgd2l0aCBpdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMTk6NDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnBmX21hcF9kaXJlY3RfcmVhZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvY29uc3RfZm9sZC5jPTUwPXN0YXRpYyB2b2lkIGNvbnN0X3JlZ194ZmVyKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBjb25zdF9hcmdfaW5mbyAqY2lfb3V0LFxuLS1cbmtlcm5lbC9icGYvY29uc3RfZm9sZC5jLTE4NS1cdFx0ICAgIG9mZiBcdTAwM2MgMCB8fCBvZmYgJiM0Mzsgc2l6ZSBcdTAwM2UgbWFwLVx1MDAzZXZhbHVlX3NpemUgfHxcbmtlcm5lbC9icGYvY29uc3RfZm9sZC5jOjE4NjpcdFx0ICAgIGJwZl9tYXBfZGlyZWN0X3JlYWQobWFwLCBvZmYsIHNpemUsIFx1MDAyNnZhbCwgaXNfbGRzeCkpIHtcbmtlcm5lbC9icGYvY29uc3RfZm9sZC5jLTE4Ny1cdFx0XHQqZHN0ID0gdW5rbm93bjtcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9NTYzMz1ib29sIGJwZl9tYXBfaXNfcmRvbmx5KGNvbnN0IHN0cnVjdCBicGZfbWFwICptYXApXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTU2NTItXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NTY1MzppbnQgYnBmX21hcF9kaXJlY3RfcmVhZChzdHJ1Y3QgYnBmX21hcCAqbWFwLCBpbnQgb2ZmLCBpbnQgc2l6ZSwgdTY0ICp2YWwsXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNTY1NC1cdFx0XHRib29sIGlzX2xkc3gpXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTYxNTg9c3RhdGljIGludCBjaGVja19tYXBfbWVtX3JlYWQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZywgaW50IG9mZixcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNjE4OC1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo2MTg5Olx0XHRlcnIgPSBicGZfbWFwX2RpcmVjdF9yZWFkKG1hcCwgbWFwX29mZiwgc2l6ZSwgXHUwMDI2dmFsLCBpc19sZHN4KTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy02MTkwLVx0XHRpZiAoZXJyKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAxOTo0MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNjgzMAoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDQwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246CgoqKkludmVzdGlnYXRpbmcgYGJwZl9tYXBfZGlyZWN0X3JlYWRgKioKCkFscmlnaHQsIHNvIGBicGZfbWFwX2RpcmVjdF9yZWFkYC4uLiBJIHJlbWVtYmVyIHNlZWluZyB0aGF0LiBUaGUgZmFjdCB0aGF0IGl0JiMzOTtzICpub3QqIGRlY2xhcmVkIHN0YXRpYyBpcyBpbW1lZGlhdGVseSBpbnRlcmVzdGluZy4gVGhhdCBtZWFucyBpdCYjMzk7cyBleHBvcnRlZCBhbmQgdXNlZCBhY3Jvc3MgbXVsdGlwbGUgZmlsZXMg4oCTIHByb2JhYmx5IGEgY29yZSBCUEYgaGVscGVyIGZ1bmN0aW9uLCBvciBwZXJoYXBzIHNvbWV0aGluZyBzcGVjaWZpYyB0byBhIGNlcnRhaW4gc3Vic3lzdGVtLiBUaGF0IG5lZWRzIGZ1cnRoZXIgaW52ZXN0aWdhdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHNjb3BlIGFuZCBpbXBhY3QuCgpOb3csIHdoZXJlIHdhcyBJPyBSaWdodCwgSSBzaG91bGQgdGFrZSBhIGxvb2sgYXQgYHBlcmNwdV9hcnJheV9tYXBfZGlyZWN0X3ZhbHVlX21ldGFgLiBMZXQmIzM5O3Mgc2VlIHdoYXQgdGhhdCBob2xkcy4gVGhhdCBzZWVtcyBsaWtlIHRoZSByaWdodCBwYXRoIHRvIHRyYWNrIGRvd24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDE5OjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3BlcmNwdV9hcnJheV9tYXBfZGlyZWN0X3ZhbHVlX21ldGEmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvYnBmLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL2FycmF5bWFwLmM9MjYyPXN0YXRpYyBpbnQgcGVyY3B1X2FycmF5X21hcF9kaXJlY3RfdmFsdWVfYWRkcihjb25zdCBzdHJ1Y3QgYnBmX21hcCAqbWFwLCB1NjQgKmltbSwgdTMyIG9mZilcbi0tXG5rZXJuZWwvYnBmL2FycmF5bWFwLmMtMjc2LVxua2VybmVsL2JwZi9hcnJheW1hcC5jOjI3NzpzdGF0aWMgaW50IHBlcmNwdV9hcnJheV9tYXBfZGlyZWN0X3ZhbHVlX21ldGEoY29uc3Qgc3RydWN0IGJwZl9tYXAgKm1hcCwgdTY0IGltbSwgdTMyICpvZmYpXG5rZXJuZWwvYnBmL2FycmF5bWFwLmMtMjc4LXtcbi0tXG5rZXJuZWwvYnBmL2FycmF5bWFwLmM9ODU5PWNvbnN0IHN0cnVjdCBicGZfbWFwX29wcyBwZXJjcHVfYXJyYXlfbWFwX29wcyA9IHtcbi0tXG5rZXJuZWwvYnBmL2FycmF5bWFwLmMtODY3LVx0Lm1hcF9kaXJlY3RfdmFsdWVfYWRkciA9IHBlcmNwdV9hcnJheV9tYXBfZGlyZWN0X3ZhbHVlX2FkZHIsXG5rZXJuZWwvYnBmL2FycmF5bWFwLmM6ODY4Olx0Lm1hcF9kaXJlY3RfdmFsdWVfbWV0YSA9IHBlcmNwdV9hcnJheV9tYXBfZGlyZWN0X3ZhbHVlX21ldGEsXG5rZXJuZWwvYnBmL2FycmF5bWFwLmMtODY5LVx0Lm1hcF91cGRhdGVfZWxlbSA9IGFycmF5X21hcF91cGRhdGVfZWxlbSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMTk6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjczNTIKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiA4MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHN5bWJvbHMgYW5kIHRoZSBkaXJlY3Rpb24gdGhpcyBhbmFseXNpcyBpcyBsaWtlbHkgaGVhZGluZzoKCioqRGl2aW5nIGludG8gQlBGIERpcmVjdCBBY2Nlc3MgYW5kIEtjb25maWcgRGVwZW5kZW5jaWVzKioKCkFscmlnaHQsIG15IGluaXRpYWwgZm9jdXMgc2VlbXMgdG8gYmUgb24gYSBmZXcgc3BlY2lmaWMgQlBGLXJlbGF0ZWQgc3ltYm9sczogYHBlcmNwdV9hcnJheV9tYXBfZGlyZWN0X3ZhbHVlX2FkZHJgLCBgcGVyY3B1X2FycmF5X21hcF9kaXJlY3RfdmFsdWVfbWV0YWAsIGBicGZfZG9fbWlzY19maXh1cHNgLCBhbmQgYGJwZl9tYXBfZGlyZWN0X3JlYWRgLiBUaGVzZSBuYW1lcyBzdHJvbmdseSBzdWdnZXN0IEkmIzM5O20gZGVhbGluZyB3aXRoIGRpcmVjdCBhY2Nlc3MgdG8gcGVyLUNQVSBhcnJheSBtYXBzIHdpdGhpbiB0aGUgQlBGIGZyYW1ld29yay4gVGhhdCAmIzM0O2RpcmVjdCYjMzQ7IGtleXdvcmQgaXMgdGhlIGtleSBoZXJlLiBJdCBpbXBsaWVzIHBvdGVudGlhbGx5IGJ5cGFzc2luZyBzb21lIG9mIHRoZSBzdGFuZGFyZCBCUEYgbWFwIGFjY2VzcyBtZWNoYW5pc21zLCBhbmQgdGhhdCBpbW1lZGlhdGVseSBnZXRzIG15IGF0dGVudGlvbiwgc3BlY2lmaWNhbGx5IHJlZ2FyZGluZyBwZXJmb3JtYW5jZSBjb25zaWRlcmF0aW9ucyBhbmQgcG90ZW50aWFsIHNlY3VyaXR5IGltcGxpY2F0aW9ucyBpZiBub3QgaGFuZGxlZCBjb3JyZWN0bHkuIFdlIGFyZSwgZXNzZW50aWFsbHksIHRhbGtpbmcgYWJvdXQgZmFzdCBkYXRhIGFjY2VzcyBpbiB0aGUgQlBGIHdvcmxkLgoKR2l2ZW4gdGhpcywgYSBjcnVjaWFsIG5leHQgc3RlcCBpcyB0byBleGFtaW5lIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbiwgc3BlY2lmaWNhbGx5IGBDT05GSUdfQlBGX1NZU0NBTExgLiBUaGlzIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGlzIGZ1bmRhbWVudGFsIHRvIGVuYWJsaW5nIEJQRiBzeXN0ZW0gY2FsbHMuIFRoZSBwcmVzZW5jZSBvciBhYnNlbmNlIG9mIHRoYXQgc2V0dGluZyB3aWxsIGRldGVybWluZSB0aGUgZmVhc2liaWxpdHkgb2YgdmFyaW91cyBCUEYgb3BlcmF0aW9ucywgaW5jbHVkaW5nIHRoaXMgZGlyZWN0IGFjY2VzcyBzY2hlbWUuIEkmIzM5O2xsIG5lZWQgdG8gY29uZmlybSBpZiB0aGlzIG9wdGlvbiBpcyBlbmFibGVkLiBJIGtub3cgZnJvbSBleHBlcmllbmNlIHRoYXQgbWFueSBvZiB0aGVzZSBhZHZhbmNlZCBmZWF0dXJlcyBoaW5nZSBvbiB0aGF0IGNvcmUgc2V0dGluZy4gSXRzIHN0YXRlIHdpbGwgcHJvdmlkZSBpbW1lZGlhdGUgY29udGV4dCBvbiB3aGF0JiMzOTtzIGV2ZW4gcG9zc2libGUgd2l0aGluIHRoaXMgc3lzdGVtLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAxOTo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgQlBGX1NZU0NBTEwmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9LY29uZmlnPTI1PW1lbnUgXCYjMzQ7QlBGIHN1YnN5c3RlbVwmIzM0O1xua2VybmVsL2JwZi9LY29uZmlnLTI2LVxua2VybmVsL2JwZi9LY29uZmlnOjI3OmNvbmZpZyBCUEZfU1lTQ0FMTFxua2VybmVsL2JwZi9LY29uZmlnLTI4LVx0Ym9vbCBcJiMzNDtFbmFibGUgYnBmKCkgc3lzdGVtIGNhbGxcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMTk6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjc4MzMKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAzOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0JiMzOTtzIGludGVybmFsIG1vbm9sb2d1ZToKCioqSW52ZXN0aWdhdGluZyBCUEYgQXJyYXlNYXAgQ2hhbmdlcyoqCgpBbHJpZ2h0LCBsZXQmIzM5O3Mgc2VlLi4uIHRoZSBwYXRjaCBpbiBxdWVzdGlvbiBpcyB0b3VjaGluZyBga2VybmVsL2JwZi9hcnJheW1hcC5jYC4gVGhhdCBpbW1lZGlhdGVseSBmbGFncyBteSBhdHRlbnRpb24uIFRoaXMgaXMgY29yZSBCUEYgc3R1ZmYsIGFuZCBzcGVjaWZpY2FsbHkgZGVhbGluZyB3aXRoIGFycmF5IG1hcHMg4oCTIGEgZnVuZGFtZW50YWwgZGF0YSBzdHJ1Y3R1cmUuIEFuZCB0aGUgZmlsZSYjMzk7cyBsb2NhdGlvbiB3aXRoaW4gdGhlIGtlcm5lbCB0cmVlIHBvaW50cyB0byBpdCBiZWluZyBjb21waWxlZCBpZiBgQ09ORklHX0JQRl9TWVNDQUxMYCBpcyBlbmFibGVkLiBNYWtlcyBzZW5zZS4gQnV0IG15IG1pbmQgZHJpZnRzIC0gSSYjMzk7ZCB3YW50IHRvIHF1aWNrbHkgZG91YmxlLWNoZWNrOiBhbSBJIG1pc3NpbmcgYW55ICpvdGhlciogY29uZmlndXJhdGlvbnMgdGhhdCBtaWdodCBpbXBhY3Qgb3IgaW50ZXJhY3Qgd2l0aCB0aGlzIGNoYW5nZT8gSXMgdGhlcmUgYW55dGhpbmcgZWxzZSB0aGF0ICpjb25kaXRpb25hbGx5KiBpbmNsdWRlcywgb3IgZXhjbHVkZXMsIHBvcnRpb25zIG9mIGBhcnJheW1hcC5jYD8gR290dGEgbWFrZSBzdXJlIEkmIzM5O3ZlIGdvdCB0aGUgY29tcGxldGUgcGljdHVyZS4gVGhlIGRlcGVuZGVuY3kgb24gYENPTkZJR19CUEZfU1lTQ0FMTGAgaXMgb2J2aW91cywgYnV0IEkmIzM5O20gbG9va2luZyBmb3IgYW55dGhpbmcgbGVzcyBhcHBhcmVudCB0aGF0IHRoaXMgcGF0Y2ggKm1pZ2h0KiBiZSBjb3VwbGVkIHRvLiBHb3QgdG8gYmUgdGhvcm91Z2guCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDE5OjQ0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2FycmF5bWFwLm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvYnBmLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL01ha2VmaWxlPTEwPW9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IGJwZl9pdGVyLm8gbWFwX2l0ZXIubyB0YXNrX2l0ZXIubyBwcm9nX2l0ZXIubyBsaW5rX2l0ZXIub1xua2VybmVsL2JwZi9NYWtlZmlsZToxMTpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBoYXNodGFiLm8gYXJyYXltYXAubyBwZXJjcHVfZnJlZWxpc3QubyBicGZfbHJ1X2xpc3QubyBscG1fdHJpZS5vIG1hcF9pbl9tYXAubyBibG9vbV9maWx0ZXIub1xua2VybmVsL2JwZi9NYWtlZmlsZS0xMi1vYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBsb2NhbF9zdG9yYWdlLm8gcXVldWVfc3RhY2tfbWFwcy5vIHJpbmdidWYubyBicGZfaW5zbl9hcnJheS5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDE5OjQ0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI4Mjk3CgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogNzMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uCgoqKkJQRiBTeXN0ZW0gQ2FsbCBDb25maWd1cmF0aW9uIFBhdGgqKgoKTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gemVybyBpbiBvbiBgQlBGX1NZU0NBTExgIOKAkyB0aGF0JiMzOTtzIHRoZSBwcmltYXJ5IGNvbmZpZ3VyYXRpb24gb3B0aW9uLCB0aGUgY2VudHJhbCBjb250cm9sIHBvaW50IGZvciBCUEYgc3lzdGVtIGNhbGxzLiBTZWVtcyBzdHJhaWdodGZvcndhcmQuIEJ1dCwgd2FpdC4uLiBJIG5lZWQgdG8gYmUgbW9yZSBwcmVjaXNlIGFib3V0IHdoZXJlIHRoZSBzdXBwb3J0aW5nIGNvZGUgbGl2ZXMuCgpNeSBtaW5kIGZsYXNoZXMgdG8gYGJwZl9kb19taXNjX2ZpeHVwc2AuIEl0JiMzOTtzIGEga2V5IGZ1bmN0aW9uIGFuZCBJIHJlY2FsbCBpdCByZXNpZGVzIGluIGBmaXh1cHMuY2AuIE9rYXksIHNvIGBmaXh1cHMuY2AgaGFuZGxlcyBzb21lIEJQRiB0YXNrcyBhbmQgaXMgY29tcGlsZWQgdW5kZXIgYENPTkZJR19CUEZfU1lTQ0FMTGA/IFRoYXQgbWFrZXMgc2Vuc2UuIFdlJiMzOTtyZSBrZWVwaW5nIGV2ZXJ5dGhpbmcgcmVsYXRlZCB0byB0aGUgc3lzdGVtIGNhbGwgbmVhdGx5IGFsaWduZWQgd2l0aCB0aGlzIHByaW1hcnkgY29uZmlndXJhdGlvbiBvcHRpb24uCgpOb3csIGp1c3QgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluLCBpdCYjMzk7cyB3b3J0aCBhIHF1aWNrIGNoZWNrIG9mIHRoZSBidWlsZCBwcm9jZXNzLiBJIHdhbnQgdG8gdmVyaWZ5IHRoYXQgYGZpeHVwcy5vYCBpcyBpbmRlZWQgYmVpbmcgY29tcGlsZWQgaW4gdGhlIHJpZ2h0IHBsYWNlLiBUaW1lIHRvIGNvbnN1bHQgYGtlcm5lbC9icGYvTWFrZWZpbGVgIHRvIGNvbmZpcm0gd2hlcmUgYGZpeHVwcy5vYCBmaXRzIGludG8gdGhlIGJ1aWxkIHByb2Nlc3MuIEEgcXVpY2sgc2NhbiBzaG91bGQgY29uZmlybSB0aGF0IGxpbmsgYmV0d2VlbiBgQ09ORklHX0JQRl9TWVNDQUxMYCBhbmQgYGZpeHVwcy5vYCB3aGljaCB3aWxsIG1ha2UgbWUgZmVlbCBjb25maWRlbnQgdGhhdCB0aGUgd2hvbGUgQlBGIHN5c3RlbSBjYWxsIHNldHVwIGlzIHVuZGVyc3Rvb2QuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDE5OjQ0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2ZpeHVwcy5vJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9NYWtlZmlsZT0xMz1vYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBicGZfbG9jYWxfc3RvcmFnZS5vIGJwZl90YXNrX3N0b3JhZ2Uub1xua2VybmVsL2JwZi9NYWtlZmlsZToxNDpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBmaXh1cHMubyBjZmcubyBzdGF0ZXMubyBiYWNrdHJhY2subyBjaGVja19idGYub1xua2VybmVsL2JwZi9NYWtlZmlsZS0xNS1vYmotJHtDT05GSUdfQlBGX0xTTX1cdCAgJiM0Mzs9IGJwZl9pbm9kZV9zdG9yYWdlLm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMTk6NDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjg3OTUKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiA0NzgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBCUEYgUGF0Y2gqKgoKT2theSwgc28gdGhlIGVzc2VudGlhbCBjb25maWd1cmF0aW9uIHJlcXVpcmVtZW50IGhlcmUgaXMgZGVmaW5pdGVseSBgQlBGX1NZU0NBTExgLiBUaGF0JiMzOTtzIHRoZSBiYXNlbGluZS4gTm93LCBsZXQmIzM5O3MgY2lyY2xlIGJhY2sgdG8gdGhlIGNvcmUgc3ltYm9scyB3ZSYjMzk7cmUgaW50ZXJlc3RlZCBpbi4gV2UmIzM5O3ZlIGdvdDoKCiogICBgcGVyY3B1X2FycmF5X21hcF9kaXJlY3RfdmFsdWVfYWRkcmAKKiAgIGBwZXJjcHVfYXJyYXlfbWFwX2RpcmVjdF92YWx1ZV9tZXRhYAoqICAgYGJwZl9kb19taXNjX2ZpeHVwc2AKKiAgIGBicGZfbWFwX2RpcmVjdF9yZWFkYAoKSG9sZCBvbiBhIHNlY29uZC4uLiBgYnBmX2RvX21pc2NfZml4dXBzYC4gUmlnaHQsIHRoYXQmIzM5O3MgYSAqYmlnKiBmdW5jdGlvbi4gSXQgaGFuZGxlcyBhIGxvdCBvZiBkaWZmZXJlbnQgdGhpbmdzLCBidXQgdGhlIGNyaXRpY2FsIHBhcnQgaGVyZSBpcyB0aGUgY29uZGl0aW9uYWwgYmxvY2sgc3BlY2lmaWNhbGx5IHRhcmdldGluZyBgQlBGX01BUF9UWVBFX1BFUkNQVV9BUlJBWWAuIFRoYXQgbWFrZXMgc2Vuc2U7IHRoZSBwYXRjaCBhZGRzIHNwZWNpYWwgaGFuZGxpbmcgZm9yIHBlcmNwdSBhcnJheXMgd2l0aGluIHRoYXQgYnJvYWRlciBmdW5jdGlvbi4gVGhlIHJlbGV2YW50IGNvZGUgaXMgY2hlY2tpbmcgZm9yIHNwZWNpZmljIGluc3RydWN0aW9uIHBhdHRlcm5zLCBwYXJ0aWN1bGFybHkgYEJQRl9MRCB8IEJQRl9JTU0gfCBCUEZfRFdgIHdpdGggc291cmNlIHJlZ2lzdGVycyBgQlBGX1BTRVVET19NQVBfVkFMVUVgIG9yIGBCUEZfUFNFVURPX01BUF9JRFhfVkFMVUVgLiBJdCB2ZXJpZmllcyB0aGUgbWFwIHR5cGUgYW5kIGp1bXBzIHRvIHRoZSBuZXh0IGluc3RydWN0aW9uIGlmIGl0IGlzbiYjMzk7dCBhIHBlcmNwdSBhcnJheS4gSW5jbHVkaW5nIGBicGZfZG9fbWlzY19maXh1cHNgIGlzIGNvcnJlY3QsIGJlY2F1c2UgaXQmIzM5O3MgdGhlIGVudHJ5IHBvaW50IHRvIHRoaXMgbmV3IHBlcmNwdSBhcnJheSBsb2dpYy4KCkxldCYjMzk7cyBxdWlja2x5IGNoZWNrIGZvciBhbnkgb3RoZXIgbm9uLXN0YXRpYyBmdW5jdGlvbnMgYmVpbmcgbW9kaWZpZWQuIEFoYSwgYGFycmF5X21hcF9jaGVja19idGZgIGlzIHRvdWNoZWQsIGJ1dCB0aGF0JiMzOTtzIHN0YXRpYywgc28gaXQmIzM5O3Mgbm90IGEgY29uY2Vybi4gQW5kIGBicGZfbWFwX2RpcmVjdF9yZWFkYCBpcyBhbHNvIGdldHRpbmcgbW9kaWZpZWQuCgpBbHJpZ2h0LCB0byByZWNhcCwgdGhlIGltcG9ydGFudCBzeW1ib2xzIGFyZToKCiogICBgcGVyY3B1X2FycmF5X21hcF9kaXJlY3RfdmFsdWVfYWRkcmAKKiAgIGBwZXJjcHVfYXJyYXlfbWFwX2RpcmVjdF92YWx1ZV9tZXRhYAoqICAgYGJwZl9kb19taXNjX2ZpeHVwc2AKKiAgIGBicGZfbWFwX2RpcmVjdF9yZWFkYAoKT25lIGxhc3QgdGhpbmcgdG8gY2hlY2s6IERvZXMgYGJwZl9qaXRfc3VwcG9ydHNfcGVyY3B1X2luc24oKWAgcmVxdWlyZSBgQlBGX0pJVGA/IFRoYXQmIzM5O3MgcHJvYmFibHkgYSBnaXZlbiwgYnV0IGl0JiMzOTtzIGFsd2F5cyBnb29kIHRvIGRvdWJsZS1jaGVjayB0aGVzZSBhc3N1bXB0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMTk6NDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnBmX2ppdF9zdXBwb3J0c19wZXJjcHVfaW5zbiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYz0zMTc4PWJvb2wgYnBmX2ppdF9zdXBwb3J0c19pbnNuKHN0cnVjdCBicGZfaW5zbiAqaW5zbiwgYm9vbCBpbl9hcmVuYSlcbi0tXG5hcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYy0zMTkxLVxuYXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmM6MzE5Mjpib29sIGJwZl9qaXRfc3VwcG9ydHNfcGVyY3B1X2luc24odm9pZClcbmFyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jLTMxOTMte1xuLS1cbmFyY2gvcG93ZXJwYy9uZXQvYnBmX2ppdF9jb21wLmM9NTU2PWJvb2wgYnBmX2ppdF9zdXBwb3J0c19pbnNuKHN0cnVjdCBicGZfaW5zbiAqaW5zbiwgYm9vbCBpbl9hcmVuYSlcbi0tXG5hcmNoL3Bvd2VycGMvbmV0L2JwZl9qaXRfY29tcC5jLTU3MS1cbmFyY2gvcG93ZXJwYy9uZXQvYnBmX2ppdF9jb21wLmM6NTcyOmJvb2wgYnBmX2ppdF9zdXBwb3J0c19wZXJjcHVfaW5zbih2b2lkKVxuYXJjaC9wb3dlcnBjL25ldC9icGZfaml0X2NvbXAuYy01NzMte1xuLS1cbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmM9MjEyND1ib29sIGJwZl9qaXRfc3VwcG9ydHNfaW5zbihzdHJ1Y3QgYnBmX2luc24gKmluc24sIGJvb2wgaW5fYXJlbmEpXG4tLVxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYy0yMTQyLVxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYzoyMTQzOmJvb2wgYnBmX2ppdF9zdXBwb3J0c19wZXJjcHVfaW5zbih2b2lkKVxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYy0yMTQ0LXtcbi0tXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM9NDA1Nz1ib29sIGJwZl9qaXRfc3VwcG9ydHNfc3VicHJvZ190YWlsY2FsbHModm9pZClcbi0tXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtNDA2MS1cbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYzo0MDYyOmJvb2wgYnBmX2ppdF9zdXBwb3J0c19wZXJjcHVfaW5zbih2b2lkKVxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTQwNjMte1xuLS1cbmluY2x1ZGUvbGludXgvZmlsdGVyLmg9MTE4Mj1ib29sIGJwZl9qaXRfc3VwcG9ydHNfc3VicHJvZ190YWlsY2FsbHModm9pZCk7XG5pbmNsdWRlL2xpbnV4L2ZpbHRlci5oOjExODM6Ym9vbCBicGZfaml0X3N1cHBvcnRzX3BlcmNwdV9pbnNuKHZvaWQpO1xuaW5jbHVkZS9saW51eC9maWx0ZXIuaC0xMTg0LWJvb2wgYnBmX2ppdF9zdXBwb3J0c19rZnVuY19jYWxsKHZvaWQpO1xuLS1cbmtlcm5lbC9icGYvYXJyYXltYXAuYz0yNjI9c3RhdGljIGludCBwZXJjcHVfYXJyYXlfbWFwX2RpcmVjdF92YWx1ZV9hZGRyKGNvbnN0IHN0cnVjdCBicGZfbWFwICptYXAsIHU2NCAqaW1tLCB1MzIgb2ZmKVxuLS1cbmtlcm5lbC9icGYvYXJyYXltYXAuYy0yNjUtXG5rZXJuZWwvYnBmL2FycmF5bWFwLmM6MjY2Olx0aWYgKCFicGZfaml0X3N1cHBvcnRzX3BlcmNwdV9pbnNuKCkpXG5rZXJuZWwvYnBmL2FycmF5bWFwLmMtMjY3LVx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4tLVxua2VybmVsL2JwZi9hcnJheW1hcC5jPTI3Nz1zdGF0aWMgaW50IHBlcmNwdV9hcnJheV9tYXBfZGlyZWN0X3ZhbHVlX21ldGEoY29uc3Qgc3RydWN0IGJwZl9tYXAgKm1hcCwgdTY0IGltbSwgdTMyICpvZmYpXG4tLVxua2VybmVsL2JwZi9hcnJheW1hcC5jLTI4MS1cbmtlcm5lbC9icGYvYXJyYXltYXAuYzoyODI6XHRpZiAoIWJwZl9qaXRfc3VwcG9ydHNfcGVyY3B1X2luc24oKSlcbmtlcm5lbC9icGYvYXJyYXltYXAuYy0yODMtXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbi0tXG5rZXJuZWwvYnBmL2FycmF5bWFwLmM9Mjk0PXN0YXRpYyBpbnQgcGVyY3B1X2FycmF5X21hcF9nZW5fbG9va3VwKHN0cnVjdCBicGZfbWFwICptYXAsIHN0cnVjdCBicGZfaW5zbiAqaW5zbl9idWYpXG4tLVxua2VybmVsL2JwZi9hcnJheW1hcC5jLTI5OC1cbmtlcm5lbC9icGYvYXJyYXltYXAuYzoyOTk6XHRpZiAoIWJwZl9qaXRfc3VwcG9ydHNfcGVyY3B1X2luc24oKSlcbmtlcm5lbC9icGYvYXJyYXltYXAuYy0zMDAtXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbi0tXG5rZXJuZWwvYnBmL2NvcmUuYz0zMjkxPWJvb2wgX193ZWFrIGJwZl9qaXRfc3VwcG9ydHNfc3VicHJvZ190YWlsY2FsbHModm9pZClcbi0tXG5rZXJuZWwvYnBmL2NvcmUuYy0zMjk1LVxua2VybmVsL2JwZi9jb3JlLmM6MzI5Njpib29sIF9fd2VhayBicGZfaml0X3N1cHBvcnRzX3BlcmNwdV9pbnNuKHZvaWQpXG5rZXJuZWwvYnBmL2NvcmUuYy0zMjk3LXtcbi0tXG5rZXJuZWwvYnBmL2ZpeHVwcy5jPTE0Nzk9aW50IGJwZl9kb19taXNjX2ZpeHVwcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxuLS1cbmtlcm5lbC9icGYvZml4dXBzLmMtMTgxOS1cbmtlcm5lbC9icGYvZml4dXBzLmM6MTgyMDpcdFx0aWYgKGJwZl9qaXRfc3VwcG9ydHNfcGVyY3B1X2luc24oKSBcdTAwMjZcdTAwMjZcbmtlcm5lbC9icGYvZml4dXBzLmMtMTgyMS1cdFx0ICAgIGluc24tXHUwMDNlY29kZSA9PSAoQlBGX0xEIHwgQlBGX0lNTSB8IEJQRl9EVykgXHUwMDI2XHUwMDI2XG4tLVxua2VybmVsL2JwZi9oYXNodGFiLmM9MjQxND1zdGF0aWMgaW50IGh0YWJfcGVyY3B1X21hcF9nZW5fbG9va3VwKHN0cnVjdCBicGZfbWFwICptYXAsIHN0cnVjdCBicGZfaW5zbiAqaW5zbl9idWYpXG4tLVxua2VybmVsL2JwZi9oYXNodGFiLmMtMjQxNy1cbmtlcm5lbC9icGYvaGFzaHRhYi5jOjI0MTg6XHRpZiAoIWJwZl9qaXRfc3VwcG9ydHNfcGVyY3B1X2luc24oKSlcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTI0MTktXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTY3OTg9Ym9vbCBicGZfdmVyaWZpZXJfaW5saW5lc19oZWxwZXJfY2FsbChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzMzIgaW1tKVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNjgwNi0jZW5kaWZcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxNjgwNzpcdFx0cmV0dXJuIGVudi1cdTAwM2Vwcm9nLVx1MDAzZWppdF9yZXF1ZXN0ZWQgXHUwMDI2XHUwMDI2IGJwZl9qaXRfc3VwcG9ydHNfcGVyY3B1X2luc24oKTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNjgwOC0jZW5kaWZcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMTk6NDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzEyNzgKCQkJCQkJCW91dHB1dDogMjYKCQkJCQkJCXRob3VnaHRzOiA1MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBhcyBpZiB0aGV5IHdlcmUgbXkgb3duOgoKKipJbnZlc3RpZ2F0aW5nIEJQRiBKSVQgU3VwcG9ydCoqCgpSaWdodCwgc28gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGBCUEZfSklUYCBhbmQgYGJwZl9qaXRfc3VwcG9ydHNfcGVyY3B1X2luc24oKWAuIEl0IHNlZW1zIHRoYXQgdGhlIGxhdHRlciwgd2hpY2ggaW5kaWNhdGVzIHN1cHBvcnQgZm9yIHBlci1DUFUgaW5zdHJ1Y3Rpb24gSklULCByZWxpZXMgb24gdGhlIGZvcm1lciDigJMgYEJQRl9KSVRgIOKAkyB0byBiZSBlbmFibGVkIG9uIGFyY2hpdGVjdHVyZXMgdGhhdCBvZmZlciB0aGlzIGNhcGFiaWxpdHkuCgpUaGVyZWZvcmUsIHRoZSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byBxdWlja2x5IGRldGVybWluZSB3aGV0aGVyIGBDT05GSUdfQlBGX0pJVGAgaXMgZXZlbiBhICpyZXF1aXJlZCogY29uZmlndXJhdGlvbiBvcHRpb24gaW4gdGhpcyBjb250ZXh0LiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IGhhcHBlbnMgaWYgaXQmIzM5O3MgZGlzYWJsZWQuIFdoYXQgYXJlIHRoZSBpbXBsaWNhdGlvbnM/IERvZXMgZGlzYWJsaW5nIGl0IHJlbW92ZSB0aGUgY2FwYWJpbGl0eSB0byB1c2UgdGhlIHBlci1DUFUgSklUIGZ1bmN0aW9uYWxpdHk/IEkmIzM5O20gZ29pbmcgdG8gbG9vayBpbnRvIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgYW5kIGNvZGUgYmFzZSB0byBnZXQgdGhlIGZ1bGwgcGljdHVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMTk6NDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEJQRl9KSVQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9LY29uZmlnPTI3PWNvbmZpZyBCUEZfU1lTQ0FMTFxuLS1cbmtlcm5lbC9icGYvS2NvbmZpZy00MS1cbmtlcm5lbC9icGYvS2NvbmZpZzo0Mjpjb25maWcgQlBGX0pJVFxua2VybmVsL2JwZi9LY29uZmlnLTQzLVx0Ym9vbCBcJiMzNDtFbmFibGUgQlBGIEp1c3QgSW4gVGltZSBjb21waWxlclwmIzM0O1xuLS1cbmtlcm5lbC9icGYvS2NvbmZpZy01Ny1cbmtlcm5lbC9icGYvS2NvbmZpZzo1ODpjb25maWcgQlBGX0pJVF9BTFdBWVNfT05cbmtlcm5lbC9icGYvS2NvbmZpZy01OS1cdGJvb2wgXCYjMzQ7UGVybWFuZW50bHkgZW5hYmxlIEJQRiBKSVQgYW5kIHJlbW92ZSBCUEYgaW50ZXJwcmV0ZXJcJiMzNDtcbi0tXG5rZXJuZWwvYnBmL0tjb25maWctNjgtXG5rZXJuZWwvYnBmL0tjb25maWc6Njk6Y29uZmlnIEJQRl9KSVRfREVGQVVMVF9PTlxua2VybmVsL2JwZi9LY29uZmlnLTcwLVx0ZGVmX2Jvb2wgQVJDSF9XQU5UX0RFRkFVTFRfQlBGX0pJVCB8fCBCUEZfSklUX0FMV0FZU19PTlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAxOTo0NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMTc3MgoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDEzMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBSZWFzb25pbmcgb24gQlBGIEpJVCBSZXF1aXJlbWVudHMqKgoKT2theSwgc28gSSBuZWVkIHRvIG1ha2Ugc3VyZSBgQlBGX0pJVGAgaXMgZW5hYmxlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgY29kZS4gVGhlIGNydXggb2YgdGhlIG1hdHRlciBpcyB0aGF0IGBicGZfaml0X3N1cHBvcnRzX3BlcmNwdV9pbnNuKClgIHdpbGwgZXZhbHVhdGUgdG8gZmFsc2UgdW5sZXNzIHRoZSBKSVQgaXMgZW5hYmxlZC4gR2l2ZW4gdGhhdCB3ZSYjMzk7cmUgb24geDg2XzY0LCBhcmNoaXRlY3R1cmFsIHN1cHBvcnQgc2hvdWxkbiYjMzk7dCBiZSB0aGUgaXNzdWU7IGl0JiMzOTtzIGFsbW9zdCBjZXJ0YWlubHkgYSBKSVQgZW5hYmxlbWVudCBwcm9ibGVtLiBJIHNob3VsZCBjb25maXJtIHRoYXQgYGJwZl9qaXRfc3VwcG9ydHNfcGVyY3B1X2luc25gIGlzIGRlZmluZWQgaW4gYGFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuY2AsIHdoaWNoLCBhcyBJIHJlY2FsbCwgaXMgb25seSBjb21waWxlZCB3aGVuIGBDT05GSUdfQlBGX0pJVGAgaXMgc2V0LiBUbyBlbnN1cmUgdGhhdCYjMzk7cyB0aGUgY2FzZSwgSSBzaG91bGQgY29uZmlybSB0aGUgZGVwZW5kZW5jeSBpbiB0aGUgYnVpbGQgcHJvY2VzcyB2aWEgYGFyY2gveDg2L25ldC9NYWtlZmlsZWAuIExldCBtZSBjaGVjayB0aGF0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAxOTo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDticGZfaml0X2NvbXAubyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gveDg2L25ldC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYvbmV0L01ha2VmaWxlPTg9ZWxzZVxuYXJjaC94ODYvbmV0L01ha2VmaWxlOjk6ICAgICAgICBvYmotJChDT05GSUdfQlBGX0pJVCkgJiM0Mzs9IGJwZl9qaXRfY29tcC5vIGJwZl90aW1lZF9tYXlfZ290by5vXG5hcmNoL3g4Ni9uZXQvTWFrZWZpbGUtMTAtZW5kaWZcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMTk6NDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzIyMTgKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiA2MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gYXMgYSBmaXJzdC1wZXJzb24gYWNjb3VudDoKCioqQlBGIEpJVCBhbmQgQlRGIFJlcXVpcmVtZW50cyoqCgpBbHJpZ2h0LCBJIHNlZSB0aGUgbmVlZCB0byB1dGlsaXplIHRoZSBCUEYgSklULCB0aGF0JiMzOTtzIGNsZWFyLiBOb3csIHdpdGggdGhlIHBhdGNoIG1vZGlmeWluZyBgYXJyYXlfbWFwX2NoZWNrX2J0ZmAgdG8gcGVybWl0IGAucGVyY3B1YCBtYXBzLCBJIGhhdmUgdG8gY29uc2lkZXIgdGhlIGBDT05GSUdfREVCVUdfSU5GT19CVEZgIHJlcXVpcmVtZW50LiBHaXZlbiB0aGUgY2hhbmdlLCB3aGljaCBlbmFibGVzIGAucGVyY3B1YCBtYXBzLCBJJiMzOTtkIHNheSB0aGF0IEJURiBpcyBwcm9iYWJseSBhIG5vbi1uZWdvdGlhYmxlIHJlcXVpcmVtZW50IGhlcmUuIFRoaXMgbW9kaWZpY2F0aW9uIHRvIGBhcnJheV9tYXBfY2hlY2tfYnRmYCBtZWFucyB3ZSBhcmUgcHJvYmFibHkgZGVhbGluZyB3aXRoIGdsb2JhbCBkYXRhIG1hcHMsIHdoaWNoLCBhcyB3ZSBrbm93LCBhcmUgaGVhdmlseSByZWxpYW50IG9uIEJURiBmb3IgY29ycmVjdCB0eXBlIGluZm9ybWF0aW9uIGFuZCBoYW5kbGluZy4gU28sIHllYWgsIEJURiBpcyBhbG1vc3QgY2VydGFpbmx5IGdvaW5nIHRvIGJlIG5lZWRlZCBmb3IgdGhpcyB0byBmdW5jdGlvbiBhcyBpbnRlbmRlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMTk6NDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIERFQlVHX0lORk9fQlRGJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2xpYi9LY29uZmlnLmRlYnVnPTM3OD1jb25maWcgREVCVUdfSU5GT19TUExJVFxuLS1cbmxpYi9LY29uZmlnLmRlYnVnLTM5Ny1cbmxpYi9LY29uZmlnLmRlYnVnOjM5ODpjb25maWcgREVCVUdfSU5GT19CVEZcbmxpYi9LY29uZmlnLmRlYnVnLTM5OS1cdGJvb2wgXCYjMzQ7R2VuZXJhdGUgQlRGIHR5cGUgaW5mb3JtYXRpb25cJiMzNDtcbi0tXG5saWIvS2NvbmZpZy5kZWJ1Zz00MTk9Y29uZmlnIFBBSE9MRV9IQVNfTEFOR19FWENMVURFXG4tLVxubGliL0tjb25maWcuZGVidWctNDI3LVxubGliL0tjb25maWcuZGVidWc6NDI4OmNvbmZpZyBERUJVR19JTkZPX0JURl9NT0RVTEVTXG5saWIvS2NvbmZpZy5kZWJ1Zy00MjktXHRib29sIFwmIzM0O0dlbmVyYXRlIEJURiB0eXBlIGluZm9ybWF0aW9uIGZvciBrZXJuZWwgbW9kdWxlc1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAxOTo0NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMjY2NgoJCQkJCQkJb3V0cHV0OiAxOTEKCQkJCQkJCXRob3VnaHRzOiA2NzQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQlBGIEZ1enppbmcgQ29uZmlndXJhdGlvbiBBc3Nlc3NtZW50KioKCk9rYXksIHNvIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhlIGJlc3Qgd2F5IHRvIGFwcHJvYWNoIGZ1enppbmcgdGhpcyBwYXRjaC4gV2hpbGUgYERFQlVHX0lORk9fQlRGYCBpcyB1c3VhbGx5IGdvb2QgZm9yIEJURiB0ZXN0cywgaXQmIzM5O3Mgbm90IHRoZSBwcmltYXJ5IGNvbmNlcm4gaGVyZS4gYEJQRl9TWVNDQUxMYCBhbmQgYEJQRl9KSVRgIGFyZSBkZWZpbml0ZWx5IHRoZSBjb3JlIGNvbmZpZ3VyYXRpb25zIHRvIGVuYWJsZS4gTGV0JiMzOTtzIG1ha2Ugc3VyZSB3ZSBpbmNsdWRlIHRob3NlOgoKKiAgIGBCUEZfU1lTQ0FMTGAKKiAgIGBCUEZfSklUYAoKTm93LCByZWdhcmRpbmcgZm9jdXMgc3ltYm9scywgSSYjMzk7dmUgZ290IHRvIGVuc3VyZSB0aGUgZnV6emluZyBpcyBoaXR0aW5nIHRoZSByaWdodCBjb2RlLiBJJiMzOTttIGZvY3VzaW5nIG9uIHRoZXNlIGZvciBzdGFydGVyczoKCiogICBgcGVyY3B1X2FycmF5X21hcF9kaXJlY3RfdmFsdWVfYWRkcmAKKiAgIGBwZXJjcHVfYXJyYXlfbWFwX2RpcmVjdF92YWx1ZV9tZXRhYAoqICAgYGJwZl9kb19taXNjX2ZpeHVwc2AKKiAgIGBicGZfbWFwX2RpcmVjdF9yZWFkYAoKSG9sZCBvbiwgSSB3YXMganVzdCB0aGlua2luZyB0aGF0IGBicGZfZG9fbWlzY19maXh1cHNgIHNlZW1zIGEgbGl0dGxlIGdlbmVyYWwuIElzIHRoZXJlIGEgbW9yZSBzcGVjaWZpYyBmdW5jdGlvbiB0byB0YXJnZXQ/IFRoZSBwYXRjaCBpbnRyb2R1Y2VzIGBjaGVja19tYXBfbWVtX3JlYWRgLCB3aGljaCBpcyBzdGF0aWMsIGFuZCBjYWxsZWQgZnJvbSBgY2hlY2tfbWVtX2FjY2Vzc2AuIFNvIEkgd2lsbCBpbmNsdWRlIGBicGZfZG9fbWlzY19maXh1cHNgIGFuZCBgYnBmX21hcF9kaXJlY3RfcmVhZGAuCgpJJiMzOTtsbCBkb3VibGUtY2hlY2sgYHBlcmNwdV9hcnJheV9tYXBfZGlyZWN0X3ZhbHVlX2FkZHJgLiBZZXMsIGl0JiMzOTtzIHN0YXRpYyBpbiBga2VybmVsL2JwZi9hcnJheW1hcC5jYCwgYnV0IGl0JiMzOTtzIGFzc2lnbmVkIHRvIGEgZnVuY3Rpb24gcG9pbnRlciB3aGljaCBtZWFucyBpdCB3b24mIzM5O3QgYmUgaW5saW5lZC4gU2luY2UgaXQgaGFzIGEgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3MsIGl0JiMzOTtzIHBlcmZlY3QgZm9yIGluY2x1c2lvbi4KCkFsc28sIGp1c3QgdG8gYmUgdGhvcm91Z2gsIEkgc2hvdWxkIGNoZWNrIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgbm9uLXN0YXRpYyBmdW5jdGlvbnMuIGBicGZfbWFwX2RpcmVjdF9yZWFkYCBpcyBub24tc3RhdGljLgoKQWxyaWdodCwgSSB0aGluayBJJiMzOTttIGhhcHB5IHdpdGggdGhpcy4gTXkgY29uY2x1c2lvbiBpczoKCiogICAqKldvcnRoRnV6emluZzoqKiBgdHJ1ZWAKKiAgICoqRm9jdXNTeW1ib2xzOioqCiAgICAqICAgYHBlcmNwdV9hcnJheV9tYXBfZGlyZWN0X3ZhbHVlX2FkZHJgCiAgICAqICAgYHBlcmNwdV9hcnJheV9tYXBfZGlyZWN0X3ZhbHVlX21ldGFgCiAgICAqICAgYGJwZl9kb19taXNjX2ZpeHVwc2AKICAgICogICBgYnBmX21hcF9kaXJlY3RfcmVhZGAKKiAgICoqRW5hYmxlQ29uZmlnczoqKgogICAgKiAgIGBCUEZfU1lTQ0FMTGAKICAgICogICBgQlBGX0pJVGAKCkp1c3QgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluLCBJJiMzOTtsbCBxdWlja2x5IHZlcmlmeSB0aGF0IGBicGZfbWFwX2RpcmVjdF9yZWFkYCBpcyBpbmRlZWQgbm9uLXN0YXRpYy4gWWVwLCBpdCYjMzk7cyBleHBvcnRlZCBpbiBga2VybmVsL2JwZi92ZXJpZmllci5jYC4KCkZpbmFsbHksIEkgd2lsbCBjaGVjayB3aGV0aGVyIGBCUEZfSklUYCBpcyBlbm91Z2ggb3IgaWYgd2UgbmVlZCBzb21ldGhpbmcgZWxzZS4gYEJQRl9TWVNDQUxMYCBhbmQgYEJQRl9KSVRgIGFyZSBzdGFuZGFyZCBmb3IgQlBGIGZ1enppbmcuCgpNeSByZWFzb25pbmcgaXMgdGhpczogVGhpcyBwYXRjaCBpbnRyb2R1Y2VzIHN1cHBvcnQgZm9yIGAucGVyY3B1YCBnbG9iYWwgZGF0YSBtYXBzIGluIEJQRi4gSXQgbW9kaWZpZXMgdGhlIEJQRiB2ZXJpZmllciB0byBoYW5kbGUgZGlyZWN0IG1lbW9yeSByZWFkcyBmcm9tIGBCUEZfTUFQX1RZUEVfUEVSQ1BVX0FSUkFZYCBtYXBzIGFuZCBhZGRzIEpJVCBmaXh1cHMgdG8gcGF0Y2ggYGxkX2ltbTY0YCBpbnN0cnVjdGlvbnMgd2l0aCBwZXItQ1BVIHJlZ2lzdGVyIG1vdmVzLiBUaGVzZSBhcmUgZnVuZGFtZW50YWwgY2hhbmdlcyB0byB0aGUgY29yZSBCUEYgc3Vic3lzdGVtIGFuZCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBtZW1vcnkgc2FmZXR5IGFuZCBjb3JyZWN0IHZlcmlmaWVyIGJlaGF2aW9yLiBJdCYjMzk7cyBhIGNsZWFyIHdpbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMTk6NDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDssCiAgICAmIzM0O0JQRl9KSVQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtwZXJjcHVfYXJyYXlfbWFwX2RpcmVjdF92YWx1ZV9hZGRyJiMzNDssCiAgICAmIzM0O3BlcmNwdV9hcnJheV9tYXBfZGlyZWN0X3ZhbHVlX21ldGEmIzM0OywKICAgICYjMzQ7YnBmX2RvX21pc2NfZml4dXBzJiMzNDssCiAgICAmIzM0O2JwZl9tYXBfZGlyZWN0X3JlYWQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBzdXBwb3J0IGZvciBgLnBlcmNwdWAgZ2xvYmFsIGRhdGEgbWFwcyBpbiBCUEYuIEl0IG1vZGlmaWVzIHRoZSBCUEYgdmVyaWZpZXIgdG8gaGFuZGxlIGRpcmVjdCBtZW1vcnkgcmVhZHMgZnJvbSBgQlBGX01BUF9UWVBFX1BFUkNQVV9BUlJBWWAgbWFwcyBhbmQgYWRkcyBKSVQgZml4dXBzIHRvIHBhdGNoIGBsZF9pbW02NGAgaW5zdHJ1Y3Rpb25zIHdpdGggcGVyLUNQVSByZWdpc3RlciBtb3Zlcy4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUgY29yZSBCUEYgc3Vic3lzdGVtIGFuZCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBtZW1vcnkgc2FmZXR5IGFuZCBjb3JyZWN0IHZlcmlmaWVyIGJlaGF2aW9yLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCUEZfU1lTQ0FMTCYjMzQ7LAogICAgJiMzNDtCUEZfSklUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cGVyY3B1X2FycmF5X21hcF9kaXJlY3RfdmFsdWVfYWRkciYjMzQ7LAogICAgJiMzNDtwZXJjcHVfYXJyYXlfbWFwX2RpcmVjdF92YWx1ZV9tZXRhJiMzNDssCiAgICAmIzM0O2JwZl9kb19taXNjX2ZpeHVwcyYjMzQ7LAogICAgJiMzNDticGZfbWFwX2RpcmVjdF9yZWFkJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgc3VwcG9ydCBmb3IgYC5wZXJjcHVgIGdsb2JhbCBkYXRhIG1hcHMgaW4gQlBGLiBJdCBtb2RpZmllcyB0aGUgQlBGIHZlcmlmaWVyIHRvIGhhbmRsZSBkaXJlY3QgbWVtb3J5IHJlYWRzIGZyb20gYEJQRl9NQVBfVFlQRV9QRVJDUFVfQVJSQVlgIG1hcHMgYW5kIGFkZHMgSklUIGZpeHVwcyB0byBwYXRjaCBgbGRfaW1tNjRgIGluc3RydWN0aW9ucyB3aXRoIHBlci1DUFUgcmVnaXN0ZXIgbW92ZXMuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGNvcmUgQlBGIHN1YnN5c3RlbSBhbmQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgbWVtb3J5IHNhZmV0eSBhbmQgY29ycmVjdCB2ZXJpZmllciBiZWhhdmlvci4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDE5OjQyOjIxLjk5Mjc2NjE2M1oiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0NTk2NTMyMDcyNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfU1lTQ0FMTFwiLFxuICAgIFwiQlBGX0pJVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInBlcmNwdV9hcnJheV9tYXBfZGlyZWN0X3ZhbHVlX2FkZHJcIixcbiAgICBcInBlcmNwdV9hcnJheV9tYXBfZGlyZWN0X3ZhbHVlX21ldGFcIixcbiAgICBcImJwZl9kb19taXNjX2ZpeHVwc1wiLFxuICAgIFwiYnBmX21hcF9kaXJlY3RfcmVhZFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgc3VwcG9ydCBmb3IgYC5wZXJjcHVgIGdsb2JhbCBkYXRhIG1hcHMgaW4gQlBGLiBJdCBtb2RpZmllcyB0aGUgQlBGIHZlcmlmaWVyIHRvIGhhbmRsZSBkaXJlY3QgbWVtb3J5IHJlYWRzIGZyb20gYEJQRl9NQVBfVFlQRV9QRVJDUFVfQVJSQVlgIG1hcHMgYW5kIGFkZHMgSklUIGZpeHVwcyB0byBwYXRjaCBgbGRfaW1tNjRgIGluc3RydWN0aW9ucyB3aXRoIHBlci1DUFUgcmVnaXN0ZXIgbW92ZXMuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGNvcmUgQlBGIHN1YnN5c3RlbSBhbmQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgbWVtb3J5IHNhZmV0eSBhbmQgY29ycmVjdCB2ZXJpZmllciBiZWhhdmlvci5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMTk6NDI6MjEuOTkyNzcxMDEzWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDQ2MTcxNzE5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgZDE1MWQzZDA5MzJhMzMxYzNlZjM4OWY4NjY3ODFhYTk1OGViODM5ZFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVGh1IEF1ZyA2IDE5OjQyOjIwIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvYXJyYXltYXAuYyBiL2tlcm5lbC9icGYvYXJyYXltYXAuY1xcbmluZGV4IDI0OGI0ODE4MTc4Y2QuLjM0ODY1NzAxZjdmNzUgMTAwNjQ0XFxuLS0tIGEva2VybmVsL2JwZi9hcnJheW1hcC5jXFxuKysrIGIva2VybmVsL2JwZi9hcnJheW1hcC5jXFxuQEAgLTI1OSw2ICsyNTksMzcgQEAgc3RhdGljIHZvaWQgKnBlcmNwdV9hcnJheV9tYXBfbG9va3VwX2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5KVxcbiBcXHRyZXR1cm4gdGhpc19jcHVfcHRyKGFycmF5LVxcdTAwM2VwcHRyc1tpbmRleCBcXHUwMDI2IGFycmF5LVxcdTAwM2VpbmRleF9tYXNrXSk7XFxuIH1cXG4gXFxuK3N0YXRpYyBpbnQgcGVyY3B1X2FycmF5X21hcF9kaXJlY3RfdmFsdWVfYWRkcihjb25zdCBzdHJ1Y3QgYnBmX21hcCAqbWFwLCB1NjQgKmltbSwgdTMyIG9mZilcXG4re1xcbitcXHRzdHJ1Y3QgYnBmX2FycmF5ICphcnJheSA9IGNvbnRhaW5lcl9vZihtYXAsIHN0cnVjdCBicGZfYXJyYXksIG1hcCk7XFxuK1xcbitcXHRpZiAoIWJwZl9qaXRfc3VwcG9ydHNfcGVyY3B1X2luc24oKSlcXG4rXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbitcXHRpZiAobWFwLVxcdTAwM2VtYXhfZW50cmllcyAhPSAxKVxcbitcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuK1xcdGlmIChvZmYgXFx1MDAzZT0gbWFwLVxcdTAwM2V2YWx1ZV9zaXplKVxcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFxuK1xcdCppbW0gPSAodTY0KShfX2ZvcmNlIHVuc2lnbmVkIGxvbmcpIGFycmF5LVxcdTAwM2VwcHRyc1swXTtcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgcGVyY3B1X2FycmF5X21hcF9kaXJlY3RfdmFsdWVfbWV0YShjb25zdCBzdHJ1Y3QgYnBmX21hcCAqbWFwLCB1NjQgaW1tLCB1MzIgKm9mZilcXG4re1xcbitcXHRzdHJ1Y3QgYnBmX2FycmF5ICphcnJheSA9IGNvbnRhaW5lcl9vZihtYXAsIHN0cnVjdCBicGZfYXJyYXksIG1hcCk7XFxuK1xcdHU2NCBiYXNlID0gKHU2NCkoX19mb3JjZSB1bnNpZ25lZCBsb25nKSBhcnJheS1cXHUwMDNlcHB0cnNbMF07XFxuK1xcbitcXHRpZiAoIWJwZl9qaXRfc3VwcG9ydHNfcGVyY3B1X2luc24oKSlcXG4rXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbitcXHRpZiAobWFwLVxcdTAwM2VtYXhfZW50cmllcyAhPSAxKVxcbitcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuK1xcdGlmIChpbW0gXFx1MDAzYyBiYXNlIHx8IGltbSBcXHUwMDNlPSBiYXNlICsgYXJyYXktXFx1MDAzZWVsZW1fc2l6ZSlcXG4rXFx0XFx0cmV0dXJuIC1FTk9FTlQ7XFxuK1xcbitcXHQqb2ZmID0gaW1tIC0gYmFzZTtcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuIC8qIGVtaXQgQlBGIGluc3RydWN0aW9ucyBlcXVpdmFsZW50IHRvIEMgY29kZSBvZiBwZXJjcHVfYXJyYXlfbWFwX2xvb2t1cF9lbGVtKCkgKi9cXG4gc3RhdGljIGludCBwZXJjcHVfYXJyYXlfbWFwX2dlbl9sb29rdXAoc3RydWN0IGJwZl9tYXAgKm1hcCwgc3RydWN0IGJwZl9pbnNuICppbnNuX2J1ZilcXG4ge1xcbkBAIC01NTEsOSArNTgyLDEwIEBAIHN0YXRpYyBpbnQgYXJyYXlfbWFwX2NoZWNrX2J0ZihzdHJ1Y3QgYnBmX21hcCAqbWFwLFxcbiBcXHRcXHRcXHQgICAgICAgY29uc3Qgc3RydWN0IGJ0Zl90eXBlICprZXlfdHlwZSxcXG4gXFx0XFx0XFx0ICAgICAgIGNvbnN0IHN0cnVjdCBidGZfdHlwZSAqdmFsdWVfdHlwZSlcXG4ge1xcbi1cXHQvKiBPbmUgZXhjZXB0aW9uIGZvciBrZXlsZXNzIEJURjogLmJzcy8uZGF0YS8ucm9kYXRhIG1hcCAqL1xcbitcXHQvKiBPbmUgZXhjZXB0aW9uIGZvciBrZXlsZXNzIEJURjogLmJzcy8uZGF0YS8ucm9kYXRhLy5wZXJjcHUgbWFwICovXFxuIFxcdGlmIChidGZfdHlwZV9pc192b2lkKGtleV90eXBlKSkge1xcbi1cXHRcXHRpZiAobWFwLVxcdTAwM2VtYXBfdHlwZSAhPSBCUEZfTUFQX1RZUEVfQVJSQVkgfHxcXG4rXFx0XFx0aWYgKChtYXAtXFx1MDAzZW1hcF90eXBlICE9IEJQRl9NQVBfVFlQRV9BUlJBWSBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHQgICAgIG1hcC1cXHUwMDNlbWFwX3R5cGUgIT0gQlBGX01BUF9UWVBFX1BFUkNQVV9BUlJBWSkgfHxcXG4gXFx0XFx0ICAgIG1hcC1cXHUwMDNlbWF4X2VudHJpZXMgIT0gMSlcXG4gXFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIFxcbkBAIC04MzIsNiArODY0LDggQEAgY29uc3Qgc3RydWN0IGJwZl9tYXBfb3BzIHBlcmNwdV9hcnJheV9tYXBfb3BzID0ge1xcbiBcXHQubWFwX2dldF9uZXh0X2tleSA9IGJwZl9hcnJheV9nZXRfbmV4dF9rZXksXFxuIFxcdC5tYXBfbG9va3VwX2VsZW0gPSBwZXJjcHVfYXJyYXlfbWFwX2xvb2t1cF9lbGVtLFxcbiBcXHQubWFwX2dlbl9sb29rdXAgPSBwZXJjcHVfYXJyYXlfbWFwX2dlbl9sb29rdXAsXFxuK1xcdC5tYXBfZGlyZWN0X3ZhbHVlX2FkZHIgPSBwZXJjcHVfYXJyYXlfbWFwX2RpcmVjdF92YWx1ZV9hZGRyLFxcbitcXHQubWFwX2RpcmVjdF92YWx1ZV9tZXRhID0gcGVyY3B1X2FycmF5X21hcF9kaXJlY3RfdmFsdWVfbWV0YSxcXG4gXFx0Lm1hcF91cGRhdGVfZWxlbSA9IGFycmF5X21hcF91cGRhdGVfZWxlbSxcXG4gXFx0Lm1hcF9kZWxldGVfZWxlbSA9IGFycmF5X21hcF9kZWxldGVfZWxlbSxcXG4gXFx0Lm1hcF9sb29rdXBfcGVyY3B1X2VsZW0gPSBwZXJjcHVfYXJyYXlfbWFwX2xvb2t1cF9wZXJjcHVfZWxlbSxcXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9iYWNrdHJhY2suYyBiL2tlcm5lbC9icGYvYmFja3RyYWNrLmNcXG5pbmRleCAyZjQ3M2FkNGZkN2MxLi4zZjE1MGU4NThhZThhIDEwMDY0NFxcbi0tLSBhL2tlcm5lbC9icGYvYmFja3RyYWNrLmNcXG4rKysgYi9rZXJuZWwvYnBmL2JhY2t0cmFjay5jXFxuQEAgLTIxNCw3ICsyMTQsNiBAQCBzdGF0aWMgaW5saW5lIGJvb2wgYnRfaXNfcmVnX3NldChzdHJ1Y3QgYmFja3RyYWNrX3N0YXRlICpidCwgdTMyIHJlZylcXG4gXFx0cmV0dXJuIGJ0LVxcdTAwM2VyZWdfbWFza3NbYnQtXFx1MDAzZWZyYW1lXSBcXHUwMDI2ICgxIFxcdTAwM2NcXHUwMDNjIHJlZyk7XFxuIH1cXG4gXFxuLVxcbiAvKiBmb3JtYXQgcmVnaXN0ZXJzIGJpdG1hc2ssIGUuZy4sIFxcXCJyMCxyMixyNFxcXCIgZm9yIDB4MTUgbWFzayAqL1xcbiBzdGF0aWMgdm9pZCBmbXRfcmVnX21hc2soY2hhciAqYnVmLCBzc2l6ZV90IGJ1Zl9zeiwgdTMyIHJlZ19tYXNrKVxcbiB7XFxuQEAgLTI1NCw3ICsyNTMsNiBAQCB2b2lkIGJwZl9mbXRfc3RhY2tfbWFzayhjaGFyICpidWYsIHNzaXplX3QgYnVmX3N6LCB1NjQgc3RhY2tfbWFzaylcXG4gXFx0fVxcbiB9XFxuIFxcbi1cXG4gLyogRm9yIGdpdmVuIHZlcmlmaWVyIHN0YXRlIGJhY2t0cmFja19pbnNuKCkgaXMgY2FsbGVkIGZyb20gdGhlIGxhc3QgaW5zbiB0b1xcbiAgKiB0aGUgZmlyc3QgaW5zbi4gSXRzIHB1cnBvc2UgaXMgdG8gY29tcHV0ZSBhIGJpdG1hc2sgb2YgcmVnaXN0ZXJzIGFuZFxcbiAgKiBzdGFjayBzbG90cyB0aGF0IG5lZWRzIHByZWNpc2lvbiBpbiB0aGUgcGFyZW50IHZlcmlmaWVyIHN0YXRlLlxcbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL2J0Zi5jIGIva2VybmVsL2JwZi9idGYuY1xcbmluZGV4IDQyNDE0NjMzY2YyNjMuLmM4MDdhZDI2M2U2ZjggMTAwNjQ0XFxuLS0tIGEva2VybmVsL2JwZi9idGYuY1xcbisrKyBiL2tlcm5lbC9icGYvYnRmLmNcXG5AQCAtMjUzNCw3ICsyNTM0LDYgQEAgc3RhdGljIHZvaWQgYnRmX2JpdGZpZWxkX3Nob3codm9pZCAqZGF0YSwgdTggYml0c19vZmZzZXQsXFxuIFxcdGJ0Zl9pbnQxMjhfcHJpbnQoc2hvdywgcHJpbnRfbnVtKTtcXG4gfVxcbiBcXG4tXFxuIHN0YXRpYyB2b2lkIGJ0Zl9pbnRfYml0c19zaG93KGNvbnN0IHN0cnVjdCBidGYgKmJ0ZixcXG4gXFx0XFx0XFx0ICAgICAgY29uc3Qgc3RydWN0IGJ0Zl90eXBlICp0LFxcbiBcXHRcXHRcXHQgICAgICB2b2lkICpkYXRhLCB1OCBiaXRzX29mZnNldCxcXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9jZmcuYyBiL2tlcm5lbC9icGYvY2ZnLmNcXG5pbmRleCBkYjM0MTZhN2M5MDQ3Li44MThmN2FmYWM4M2E1IDEwMDY0NFxcbi0tLSBhL2tlcm5lbC9icGYvY2ZnLmNcXG4rKysgYi9rZXJuZWwvYnBmL2NmZy5jXFxuQEAgLTQ3LDcgKzQ3LDYgQEAgZW51bSB7XFxuIFxcdEJSQU5DSCA9IDIsXFxuIH07XFxuIFxcbi1cXG4gc3RhdGljIHZvaWQgbWFya19zdWJwcm9nX2NoYW5nZXNfcGt0X2RhdGEoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50IG9mZilcXG4ge1xcbiBcXHRzdHJ1Y3QgYnBmX3N1YnByb2dfaW5mbyAqc3VicHJvZztcXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9jb25zdF9mb2xkLmMgYi9rZXJuZWwvYnBmL2NvbnN0X2ZvbGQuY1xcbmluZGV4IGIyYTE5YWNhZGI5MWUuLjU3ODcyNDZiZWYzMDEgMTAwNjQ0XFxuLS0tIGEva2VybmVsL2JwZi9jb25zdF9mb2xkLmNcXG4rKysgYi9rZXJuZWwvYnBmL2NvbnN0X2ZvbGQuY1xcbkBAIC0xODIsNyArMTgyLDYgQEAgc3RhdGljIHZvaWQgY29uc3RfcmVnX3hmZXIoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGNvbnN0X2FyZ19pbmZvICpcXG4gXFx0XFx0dTY0IHZhbCA9IDA7XFxuIFxcbiBcXHRcXHRpZiAoIWJwZl9tYXBfaXNfcmRvbmx5KG1hcCkgfHwgIW1hcC1cXHUwMDNlb3BzLVxcdTAwM2VtYXBfZGlyZWN0X3ZhbHVlX2FkZHIgfHxcXG4tXFx0XFx0ICAgIG1hcC1cXHUwMDNlbWFwX3R5cGUgPT0gQlBGX01BUF9UWVBFX0lOU05fQVJSQVkgfHxcXG4gXFx0XFx0ICAgIG9mZiBcXHUwMDNjIDAgfHwgb2ZmICsgc2l6ZSBcXHUwMDNlIG1hcC1cXHUwMDNldmFsdWVfc2l6ZSB8fFxcbiBcXHRcXHQgICAgYnBmX21hcF9kaXJlY3RfcmVhZChtYXAsIG9mZiwgc2l6ZSwgXFx1MDAyNnZhbCwgaXNfbGRzeCkpIHtcXG4gXFx0XFx0XFx0KmRzdCA9IHVua25vd247XFxuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvZml4dXBzLmMgYi9rZXJuZWwvYnBmL2ZpeHVwcy5jXFxuaW5kZXggYTBiZGRhZGE3OTY0ZS4uZjIzOTg3NDkxMDNiYSAxMDA2NDRcXG4tLS0gYS9rZXJuZWwvYnBmL2ZpeHVwcy5jXFxuKysrIGIva2VybmVsL2JwZi9maXh1cHMuY1xcbkBAIC0xNDQ2LDcgKzE0NDYsNiBAQCBpbnQgYnBmX2ZpeHVwX2NhbGxfYXJncyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxcbiBcXHRyZXR1cm4gZXJyO1xcbiB9XFxuIFxcbi1cXG4gLyogVGhlIGZ1bmN0aW9uIHJlcXVpcmVzIHRoYXQgZmlyc3QgaW5zdHJ1Y3Rpb24gaW4gJ3BhdGNoJyBpcyBpbnNuc2lbcHJvZy1cXHUwMDNlbGVuIC0gMV0gKi9cXG4gc3RhdGljIGludCBhZGRfaGlkZGVuX3N1YnByb2coc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICpwYXRjaCwgaW50IGxlbilcXG4ge1xcbkBAIC0xODE4LDYgKzE4MTcsNDMgQEAgaW50IGJwZl9kb19taXNjX2ZpeHVwcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxcbiBcXHRcXHRcXHRnb3RvIG5leHRfaW5zbjtcXG4gXFx0XFx0fVxcbiBcXG4rXFx0XFx0aWYgKGJwZl9qaXRfc3VwcG9ydHNfcGVyY3B1X2luc24oKSBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHQgICAgaW5zbi1cXHUwMDNlY29kZSA9PSAoQlBGX0xEIHwgQlBGX0lNTSB8IEJQRl9EVykgXFx1MDAyNlxcdTAwMjZcXG4rXFx0XFx0ICAgIChpbnNuLVxcdTAwM2VzcmNfcmVnID09IEJQRl9QU0VVRE9fTUFQX1ZBTFVFIHx8XFxuK1xcdFxcdCAgICAgaW5zbi1cXHUwMDNlc3JjX3JlZyA9PSBCUEZfUFNFVURPX01BUF9JRFhfVkFMVUUpKSB7XFxuK1xcdFxcdFxcdHN0cnVjdCBicGZfbWFwICptYXA7XFxuK1xcbitcXHRcXHRcXHRhdXggPSBcXHUwMDI2ZW52LVxcdTAwM2VpbnNuX2F1eF9kYXRhW2kgKyBkZWx0YV07XFxuK1xcdFxcdFxcdG1hcCA9IGVudi1cXHUwMDNldXNlZF9tYXBzW2F1eC1cXHUwMDNlbWFwX2luZGV4XTtcXG4rXFx0XFx0XFx0aWYgKG1hcC1cXHUwMDNlbWFwX3R5cGUgIT0gQlBGX01BUF9UWVBFX1BFUkNQVV9BUlJBWSlcXG4rXFx0XFx0XFx0XFx0Z290byBuZXh0X2luc247XFxuK1xcbitcXHRcXHRcXHRwcm9nLVxcdTAwM2VqaXRfcmVxdWlyZWQgPSB0cnVlO1xcbitcXG4rXFx0XFx0XFx0LypcXG4rXFx0XFx0XFx0ICogV2UgYXJlICpza2lwcGluZyogZmlyc3QgaGFsZiBvZiBsZF9pbW02NCBpbnNuXFxuK1xcdFxcdFxcdCAqIHdpdGggJ2krKzsnLCBwYXRjaGluZyBvdmVyIHNlY29uZCBoYWxmIG9mIGl0XFxuK1xcdFxcdFxcdCAqIHdpdGggdGhhdCBzYW1lIGhhbGYgKyBtb3Y2NF9wZXJjcHVfcmVnIGluc24uXFxuK1xcdFxcdFxcdCAqIEFsbCBiZWNhdXNlIGJwZl9wYXRjaF9pbnNuX2RhdGEoKSBjYW4gb25seVxcbitcXHRcXHRcXHQgKiByZXBsYWNlIG9uZSA4LWJ5dGUgaW5zbiwgd2hpY2ggZG9lcyBub3Qgd29ya1xcbitcXHRcXHRcXHQgKiB3ZWxsIGZvciBsZF9pbW02NCBpbnNuLlxcbitcXHRcXHRcXHQgKi9cXG4rXFxuK1xcdFxcdFxcdGluc25fYnVmWzBdID0gaW5zblsxXTtcXG4rXFx0XFx0XFx0aW5zbl9idWZbMV0gPSBCUEZfTU9WNjRfUEVSQ1BVX1JFRyhpbnNuLVxcdTAwM2Vkc3RfcmVnLCBpbnNuLVxcdTAwM2Vkc3RfcmVnKTtcXG4rXFx0XFx0XFx0Y250ID0gMjtcXG4rXFxuK1xcdFxcdFxcdGkrKztcXG4rXFx0XFx0XFx0bmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgaSArIGRlbHRhLCBpbnNuX2J1ZiwgY250KTtcXG4rXFx0XFx0XFx0aWYgKCFuZXdfcHJvZylcXG4rXFx0XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuK1xcbitcXHRcXHRcXHRkZWx0YSAgICArPSBjbnQgLSAxO1xcbitcXHRcXHRcXHRlbnYtXFx1MDAzZXByb2cgPSBwcm9nID0gbmV3X3Byb2c7XFxuK1xcdFxcdFxcdGluc24gICAgICA9IG5ld19wcm9nLVxcdTAwM2VpbnNuc2kgKyBpICsgZGVsdGE7XFxuK1xcdFxcdFxcdGdvdG8gbmV4dF9pbnNuO1xcbitcXHRcXHR9XFxuK1xcbiBcXHRcXHRpZiAoaW5zbi1cXHUwMDNlY29kZSAhPSAoQlBGX0pNUCB8IEJQRl9DQUxMKSlcXG4gXFx0XFx0XFx0Z290byBuZXh0X2luc247XFxuIFxcdFxcdGlmIChpbnNuLVxcdTAwM2VzcmNfcmVnID09IEJQRl9QU0VVRE9fQ0FMTClcXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9oYXNodGFiLmMgYi9rZXJuZWwvYnBmL2hhc2h0YWIuY1xcbmluZGV4IDlmMzk0ZTFhYTJlODUuLmQ0MGNiNWRkNDQ2Y2EgMTAwNjQ0XFxuLS0tIGEva2VybmVsL2JwZi9oYXNodGFiLmNcXG4rKysgYi9rZXJuZWwvYnBmL2hhc2h0YWIuY1xcbkBAIC05OTgsNyArOTk4LDYgQEAgc3RhdGljIHZvaWQgZGVjX2VsZW1fY291bnQoc3RydWN0IGJwZl9odGFiICpodGFiKVxcbiBcXHRcXHRhdG9taWNfZGVjKFxcdTAwMjZodGFiLVxcdTAwM2Vjb3VudCk7XFxuIH1cXG4gXFxuLVxcbiBzdGF0aWMgdm9pZCBmcmVlX2h0YWJfZWxlbShzdHJ1Y3QgYnBmX2h0YWIgKmh0YWIsIHN0cnVjdCBodGFiX2VsZW0gKmwpXFxuIHtcXG4gXFx0aHRhYl9wdXRfZmRfdmFsdWUoaHRhYiwgbCk7XFxuQEAgLTI5NzAsNyArMjk2OSw2IEBAIHN0YXRpYyBpbnQgcmh0YWJfZGVsZXRlX2VsZW0oc3RydWN0IGJwZl9yaHRhYiAqcmh0YWIsIHN0cnVjdCByaHRhYl9lbGVtICplbGVtLCB2XFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbi1cXG4gc3RhdGljIGxvbmcgcmh0YWJfbWFwX2RlbGV0ZV9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSlcXG4ge1xcbiBcXHRzdHJ1Y3QgYnBmX3JodGFiICpyaHRhYiA9IGNvbnRhaW5lcl9vZihtYXAsIHN0cnVjdCBicGZfcmh0YWIsIG1hcCk7XFxuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvaGVscGVycy5jIGIva2VybmVsL2JwZi9oZWxwZXJzLmNcXG5pbmRleCA0NzA5YTVhZDA0NzQ3Li41ZTY4YTBhZGIxNGI0IDEwMDY0NFxcbi0tLSBhL2tlcm5lbC9icGYvaGVscGVycy5jXFxuKysrIGIva2VybmVsL2JwZi9oZWxwZXJzLmNcXG5AQCAtNDg2OSw3ICs0ODY5LDYgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBidGZfa2Z1bmNfaWRfc2V0IGdlbmVyaWNfa2Z1bmNfc2V0ID0ge1xcbiBcXHQuc2V0ICAgPSBcXHUwMDI2Z2VuZXJpY19idGZfaWRzLFxcbiB9O1xcbiBcXG4tXFxuIEJURl9JRF9MSVNUKGdlbmVyaWNfZHRvcl9pZHMpXFxuIEJURl9JRChzdHJ1Y3QsIHRhc2tfc3RydWN0KVxcbiBCVEZfSUQoZnVuYywgYnBmX3Rhc2tfcmVsZWFzZV9kdG9yKVxcbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL2xpdmVuZXNzLmMgYi9rZXJuZWwvYnBmL2xpdmVuZXNzLmNcXG5pbmRleCAwYWFkZmJhZTBhY2M1Li45ZTI1ZTI0MWUxZmY0IDEwMDY0NFxcbi0tLSBhL2tlcm5lbC9icGYvbGl2ZW5lc3MuY1xcbisrKyBiL2tlcm5lbC9icGYvbGl2ZW5lc3MuY1xcbkBAIC0yNjksNyArMjY5LDYgQEAgYnBmX2luc25fc3VjY2Vzc29ycyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCB1MzIgaWR4KVxcbiBcXG4gX19kaWFnX3BvcCgpO1xcbiBcXG4tXFxuIHN0YXRpYyBpbmxpbmUgYm9vbCB1cGRhdGVfaW5zbihzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbiBcXHRcXHRcXHQgICAgICAgc3RydWN0IGZ1bmNfaW5zdGFuY2UgKmluc3RhbmNlLCB1MzIgZnJhbWUsIHUzMiBpbnNuX2lkeClcXG4ge1xcbkBAIC0xODY4LDcgKzE4NjcsNiBAQCBzdGF0aWMgaW50IGFuYWx5emVfc3VicHJvZyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbiBcXHRpZiAobmVlZF9yZXNjaGVkKCkpXFxuIFxcdFxcdGNvbmRfcmVzY2hlZCgpO1xcbiBcXG4tXFxuIFxcdC8qXFxuIFxcdCAqIFdoZW4gYW4gaW5zdGFuY2UgaXMgcmV1c2VkIChtdXN0X3dyaXRlX2luaXRpYWxpemVkID09IHRydWUpLFxcbiBcXHQgKiByZWNvcmQgaW50byBhIGZyZXNoIGluc3RhbmNlIGFuZCBtZXJnZSBhZnRlcndhcmQuICBUaGlzIGF2b2lkc1xcbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL3F1ZXVlX3N0YWNrX21hcHMuYyBiL2tlcm5lbC9icGYvcXVldWVfc3RhY2tfbWFwcy5jXFxuaW5kZXggYzFjOWRlZTRkY2RkMC4uNmU4YjE4YzMyYTEwNiAxMDA2NDRcXG4tLS0gYS9rZXJuZWwvYnBmL3F1ZXVlX3N0YWNrX21hcHMuY1xcbisrKyBiL2tlcm5lbC9icGYvcXVldWVfc3RhY2tfbWFwcy5jXFxuQEAgLTEyMyw3ICsxMjMsNiBAQCBzdGF0aWMgbG9uZyBfX3F1ZXVlX21hcF9nZXQoc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqdmFsdWUsIGJvb2wgZGVsZXRlKVxcbiBcXHRyZXR1cm4gZXJyO1xcbiB9XFxuIFxcbi1cXG4gc3RhdGljIGxvbmcgX19zdGFja19tYXBfZ2V0KHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKnZhbHVlLCBib29sIGRlbGV0ZSlcXG4ge1xcbiBcXHRzdHJ1Y3QgYnBmX3F1ZXVlX3N0YWNrICpxcyA9IGJwZl9xdWV1ZV9zdGFjayhtYXApO1xcbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL3N5c2NhbGwuYyBiL2tlcm5lbC9icGYvc3lzY2FsbC5jXFxuaW5kZXggOGQxMTFkYTg4NjU1My4uN2Q4YzNlOGU2ZDYyZSAxMDA2NDRcXG4tLS0gYS9rZXJuZWwvYnBmL3N5c2NhbGwuY1xcbisrKyBiL2tlcm5lbC9icGYvc3lzY2FsbC5jXFxuQEAgLTYzNiw3ICs2MzYsNiBAQCBpbnQgYnBmX21hcF9hbGxvY19wYWdlcyhjb25zdCBzdHJ1Y3QgYnBmX21hcCAqbWFwLCBpbnQgbmlkLFxcbiBcXHRyZXR1cm4gcmV0O1xcbiB9XFxuIFxcbi1cXG4gc3RhdGljIGludCBidGZfZmllbGRfY21wKGNvbnN0IHZvaWQgKmEsIGNvbnN0IHZvaWQgKmIpXFxuIHtcXG4gXFx0Y29uc3Qgc3RydWN0IGJ0Zl9maWVsZCAqZjEgPSBhLCAqZjIgPSBiO1xcbkBAIC0xODMwLDcgKzE4MjksNiBAQCBzdGF0aWMgaW50IG1hcF9sb29rdXBfZWxlbSh1bmlvbiBicGZfYXR0ciAqYXR0cilcXG4gXFx0cmV0dXJuIGVycjtcXG4gfVxcbiBcXG4tXFxuICNkZWZpbmUgQlBGX01BUF9VUERBVEVfRUxFTV9MQVNUX0ZJRUxEIGZsYWdzXFxuIFxcbiBzdGF0aWMgaW50IG1hcF91cGRhdGVfZWxlbSh1bmlvbiBicGZfYXR0ciAqYXR0ciwgYnBmcHRyX3QgdWF0dHIpXFxuQEAgLTM0OTcsNyArMzQ5NSw2IEBAIGludCBicGZfbGlua19wcmltZShzdHJ1Y3QgYnBmX2xpbmsgKmxpbmssIHN0cnVjdCBicGZfbGlua19wcmltZXIgKnByaW1lcilcXG4gXFx0aWYgKGZkIFxcdTAwM2MgMClcXG4gXFx0XFx0cmV0dXJuIGZkO1xcbiBcXG4tXFxuIFxcdGlkID0gYnBmX2xpbmtfYWxsb2NfaWQobGluayk7XFxuIFxcdGlmIChpZCBcXHUwMDNjIDApIHtcXG4gXFx0XFx0cHV0X3VudXNlZF9mZChmZCk7XFxuQEAgLTU1MDUsNyArNTUwMiw2IEBAIHN0YXRpYyBpbnQgYnBmX2xpbmtfZ2V0X2luZm9fYnlfZmQoc3RydWN0IGZpbGUgKmZpbGUsXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbi1cXG4gc3RhdGljIGludCB0b2tlbl9nZXRfaW5mb19ieV9mZChzdHJ1Y3QgZmlsZSAqZmlsZSxcXG4gXFx0XFx0XFx0XFx0c3RydWN0IGJwZl90b2tlbiAqdG9rZW4sXFxuIFxcdFxcdFxcdFxcdGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyLFxcbkBAIC02NTA3LDcgKzY1MDMsNiBAQCBCUEZfQ0FMTF8zKGJwZl9zeXNfYnBmLCBpbnQsIGNtZCwgdW5pb24gYnBmX2F0dHIgKiwgYXR0ciwgdTMyLCBhdHRyX3NpemUpXFxuIFxcdHJldHVybiBfX3N5c19icGYoY21kLCBLRVJORUxfQlBGUFRSKGF0dHIpLCBhdHRyX3NpemUsIEtFUk5FTF9CUEZQVFIoTlVMTCksIDApO1xcbiB9XFxuIFxcbi1cXG4gLyogVG8gc2h1dCB1cCAtV21pc3NpbmctcHJvdG90eXBlcy5cXG4gICogVGhpcyBmdW5jdGlvbiBpcyB1c2VkIGJ5IHRoZSBrZXJuZWwgbGlnaHQgc2tlbGV0b25cXG4gICogdG8gbG9hZCBicGYgcHJvZ3JhbXMgd2hlbiBtb2R1bGVzIGFyZSBsb2FkZWQgb3IgZHVyaW5nIGtlcm5lbCBib290LlxcbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL3ZlcmlmaWVyLmMgYi9rZXJuZWwvYnBmL3ZlcmlmaWVyLmNcXG5pbmRleCBkOTI1MTk3YzJlNWY3Li4zOTc3MjAwMmNiN2JmIDEwMDY0NFxcbi0tLSBhL2tlcm5lbC9icGYvdmVyaWZpZXIuY1xcbisrKyBiL2tlcm5lbC9icGYvdmVyaWZpZXIuY1xcbkBAIC02MzUsNyArNjM1LDYgQEAgc3RhdGljIHZvaWQgX19tYXJrX2R5bnB0cl9yZWcoc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZyxcXG4gXFx0XFx0XFx0ICAgICAgZW51bSBicGZfZHlucHRyX3R5cGUgdHlwZSxcXG4gXFx0XFx0XFx0ICAgICAgYm9vbCBmaXJzdF9zbG90LCBpbnQgaWQsIGludCBwYXJlbnRfaWQpO1xcbiBcXG4tXFxuIHN0YXRpYyB2b2lkIG1hcmtfZHlucHRyX3N0YWNrX3JlZ3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcXG4gXFx0XFx0XFx0XFx0ICAgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnNyZWcxLFxcbiBcXHRcXHRcXHRcXHQgICBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqc3JlZzIsXFxuQEAgLTE2NzIsNyArMTY3MSw2IEBAIHN0YXRpYyBib29sIHNhbWVfY2FsbHNpdGVzKHN0cnVjdCBicGZfdmVyaWZpZXJfc3RhdGUgKmEsIHN0cnVjdCBicGZfdmVyaWZpZXJfc3RhXFxuIFxcdHJldHVybiB0cnVlO1xcbiB9XFxuIFxcbi1cXG4gdm9pZCBicGZfZnJlZV9iYWNrZWRnZXMoc3RydWN0IGJwZl9zY2NfdmlzaXQgKnZpc2l0KVxcbiB7XFxuIFxcdHN0cnVjdCBicGZfc2NjX2JhY2tlZGdlICpiYWNrZWRnZSwgKm5leHQ7XFxuQEAgLTIyOTQsNyArMjI5Miw2IEBAIHN0YXRpYyBzdHJ1Y3QgYnBmX3ZlcmlmaWVyX3N0YXRlICpwdXNoX2FzeW5jX2NiKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxuIFxcdHJldHVybiBcXHUwMDI2ZWxlbS1cXHUwMDNlc3Q7XFxuIH1cXG4gXFxuLVxcbiBzdGF0aWMgaW50IGNtcF9zdWJwcm9ncyhjb25zdCB2b2lkICphLCBjb25zdCB2b2lkICpiKVxcbiB7XFxuIFxcdHJldHVybiAoKHN0cnVjdCBicGZfc3VicHJvZ19pbmZvICopYSktXFx1MDAzZXN0YXJ0IC1cXG5AQCAtNDA3MSw3ICs0MDY4LDYgQEAgc3RhdGljIGludCBjaGVja19zdGFja19yZWFkKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxuIFxcdHJldHVybiBlcnI7XFxuIH1cXG4gXFxuLVxcbiAvKiBjaGVja19zdGFja193cml0ZSBkaXNwYXRjaGVzIHRvIGNoZWNrX3N0YWNrX3dyaXRlX2ZpeGVkX29mZiBvclxcbiAgKiBjaGVja19zdGFja193cml0ZV92YXJfb2ZmLlxcbiAgKlxcbkBAIC00ODY3LDcgKzQ4NjMsNiBAQCBzdGF0aWMgaW50IGNoZWNrX3NvY2tfYWNjZXNzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGludCBpbnNuX2lkeCxcXG4gXFx0XFx0dmFsaWQgPSBmYWxzZTtcXG4gXFx0fVxcbiBcXG4tXFxuIFxcdGlmICh2YWxpZCkge1xcbiBcXHRcXHRlbnYtXFx1MDAzZWluc25fYXV4X2RhdGFbaW5zbl9pZHhdLmN0eF9maWVsZF9zaXplID1cXG4gXFx0XFx0XFx0aW5mby5jdHhfZmllbGRfc2l6ZTtcXG5AQCAtNTY2Miw2ICs1NjU3LDggQEAgaW50IGJwZl9tYXBfZGlyZWN0X3JlYWQoc3RydWN0IGJwZl9tYXAgKm1hcCwgaW50IG9mZiwgaW50IHNpemUsIHU2NCAqdmFsLFxcbiBcXHR1NjQgYWRkcjtcXG4gXFx0aW50IGVycjtcXG4gXFxuK1xcdGlmIChtYXAtXFx1MDAzZW1hcF90eXBlID09IEJQRl9NQVBfVFlQRV9JTlNOX0FSUkFZIHx8IG1hcC1cXHUwMDNlbWFwX3R5cGUgPT0gQlBGX01BUF9UWVBFX1BFUkNQVV9BUlJBWSlcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIFxcdGVyciA9IG1hcC1cXHUwMDNlb3BzLVxcdTAwM2VtYXBfZGlyZWN0X3ZhbHVlX2FkZHIobWFwLCBcXHUwMDI2YWRkciwgb2ZmKTtcXG4gXFx0aWYgKGVycilcXG4gXFx0XFx0cmV0dXJuIGVycjtcXG5AQCAtNjE1OCw2ICs2MTU1LDUxIEBAIHN0YXRpYyB2b2lkIGFkZF9zY2FsYXJfdG9fcmVnKHN0cnVjdCBicGZfcmVnX3N0YXRlICpkc3RfcmVnLCBzNjQgdmFsKVxcbiBcXHRyZWdfYm91bmRzX3N5bmMoZHN0X3JlZyk7XFxuIH1cXG4gXFxuK3N0YXRpYyBpbnQgY2hlY2tfbWFwX21lbV9yZWFkKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcsIGludCBvZmYsXFxuK1xcdFxcdFxcdCAgICAgIGludCBicGZfc2l6ZSwgaW50IHZhbHVlX3JlZ25vLCBib29sIGlzX2xkc3gpXFxuK3tcXG4rXFx0c3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZ3MgPSBjdXJfcmVncyhlbnYpO1xcbitcXHRpbnQgc2l6ZSA9IGJwZl9zaXplX3RvX2J5dGVzKGJwZl9zaXplKTtcXG4rXFx0c3RydWN0IGJwZl9tYXAgKm1hcCA9IHJlZy1cXHUwMDNlbWFwX3B0cjtcXG4rXFxuK1xcdHN3aXRjaCAobWFwLVxcdTAwM2VtYXBfdHlwZSkge1xcbitcXHRjYXNlIEJQRl9NQVBfVFlQRV9JTlNOX0FSUkFZOlxcbitcXHRcXHRpZiAoYnBmX3NpemUgIT0gQlBGX0RXKSB7XFxuK1xcdFxcdFxcdHZlcmJvc2UoZW52LCBcXFwiSW52YWxpZCByZWFkIG9mICVkIGJ5dGVzIGZyb20gaW5zbl9hcnJheVxcXFxuXFxcIiwgc2l6ZSk7XFxuK1xcdFxcdFxcdHJldHVybiAtRUFDQ0VTO1xcbitcXHRcXHR9XFxuK1xcdFxcdHJlZ3NbdmFsdWVfcmVnbm9dID0gKnJlZztcXG4rXFx0XFx0YWRkX3NjYWxhcl90b19yZWcoXFx1MDAyNnJlZ3NbdmFsdWVfcmVnbm9dLCBvZmYpO1xcbitcXHRcXHRyZWdzW3ZhbHVlX3JlZ25vXS50eXBlID0gUFRSX1RPX0lOU047XFxuK1xcdFxcdHJldHVybiAwO1xcbitcXHRjYXNlIEJQRl9NQVBfVFlQRV9QRVJDUFVfQVJSQVk6XFxuK1xcdFxcdGdvdG8gcmVnX3Vua25vd247XFxuK1xcdGRlZmF1bHQ6XFxuK1xcdFxcdGJyZWFrO1xcbitcXHR9XFxuK1xcbitcXHQvKiBJZiBtYXAgaXMgcmVhZC1vbmx5LCB0cmFjayBpdHMgY29udGVudHMgYXMgc2NhbGFycy4gKi9cXG4rXFx0aWYgKHRudW1faXNfY29uc3QocmVnLVxcdTAwM2V2YXJfb2ZmKSBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAgYnBmX21hcF9pc19yZG9ubHkobWFwKSBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAgbWFwLVxcdTAwM2VvcHMtXFx1MDAzZW1hcF9kaXJlY3RfdmFsdWVfYWRkcikge1xcbitcXHRcXHRpbnQgbWFwX29mZiA9IG9mZiArIHJlZy1cXHUwMDNldmFyX29mZi52YWx1ZTtcXG4rXFx0XFx0dTY0IHZhbCA9IDA7XFxuK1xcdFxcdGludCBlcnI7XFxuK1xcbitcXHRcXHRlcnIgPSBicGZfbWFwX2RpcmVjdF9yZWFkKG1hcCwgbWFwX29mZiwgc2l6ZSwgXFx1MDAyNnZhbCwgaXNfbGRzeCk7XFxuK1xcdFxcdGlmIChlcnIpXFxuK1xcdFxcdFxcdHJldHVybiBlcnI7XFxuK1xcbitcXHRcXHRyZWdzW3ZhbHVlX3JlZ25vXS50eXBlID0gU0NBTEFSX1ZBTFVFO1xcbitcXHRcXHRfX21hcmtfcmVnX2tub3duKFxcdTAwMjZyZWdzW3ZhbHVlX3JlZ25vXSwgdmFsKTtcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcdH1cXG4rXFxuK3JlZ191bmtub3duOlxcbitcXHRtYXJrX3JlZ191bmtub3duKGVudiwgcmVncywgdmFsdWVfcmVnbm8pO1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4gLyogY2hlY2sgd2hldGhlciBtZW1vcnkgYXQgKHJlZ25vICsgb2ZmKSBpcyBhY2Nlc3NpYmxlIGZvciB0ID0gKHJlYWQgfCB3cml0ZSlcXG4gICogaWYgdD09d3JpdGUsIHZhbHVlX3JlZ25vIGlzIGEgcmVnaXN0ZXIgd2hpY2ggdmFsdWUgaXMgc3RvcmVkIGludG8gbWVtb3J5XFxuICAqIGlmIHQ9PXJlYWQsIHZhbHVlX3JlZ25vIGlzIGEgcmVnaXN0ZXIgd2hpY2ggd2lsbCByZWNlaXZlIHRoZSB2YWx1ZSBmcm9tIG1lbW9yeVxcbkBAIC02MjEyLDM4ICs2MjU0LDcgQEAgc3RhdGljIGludCBjaGVja19tZW1fYWNjZXNzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGludCBpbnNuX2lkeCwgc3RydWN0IGJcXG4gXFx0XFx0aWYgKGtwdHJfZmllbGQpIHtcXG4gXFx0XFx0XFx0ZXJyID0gY2hlY2tfbWFwX2twdHJfYWNjZXNzKGVudiwgdmFsdWVfcmVnbm8sIGluc25faWR4LCBrcHRyX2ZpZWxkKTtcXG4gXFx0XFx0fSBlbHNlIGlmICh0ID09IEJQRl9SRUFEIFxcdTAwMjZcXHUwMDI2IHZhbHVlX3JlZ25vIFxcdTAwM2U9IDApIHtcXG4tXFx0XFx0XFx0c3RydWN0IGJwZl9tYXAgKm1hcCA9IHJlZy1cXHUwMDNlbWFwX3B0cjtcXG4tXFxuLVxcdFxcdFxcdC8qXFxuLVxcdFxcdFxcdCAqIElmIG1hcCBpcyByZWFkLW9ubHksIHRyYWNrIGl0cyBjb250ZW50cyBhcyBzY2FsYXJzLFxcbi1cXHRcXHRcXHQgKiB1bmxlc3MgaXQgaXMgYW4gaW5zbiBhcnJheSAoc2VlIHRoZSBzcGVjaWFsIGNhc2UgYmVsb3cpXFxuLVxcdFxcdFxcdCAqL1xcbi1cXHRcXHRcXHRpZiAodG51bV9pc19jb25zdChyZWctXFx1MDAzZXZhcl9vZmYpIFxcdTAwMjZcXHUwMDI2XFxuLVxcdFxcdFxcdCAgICBicGZfbWFwX2lzX3Jkb25seShtYXApIFxcdTAwMjZcXHUwMDI2XFxuLVxcdFxcdFxcdCAgICBtYXAtXFx1MDAzZW9wcy1cXHUwMDNlbWFwX2RpcmVjdF92YWx1ZV9hZGRyIFxcdTAwMjZcXHUwMDI2XFxuLVxcdFxcdFxcdCAgICBtYXAtXFx1MDAzZW1hcF90eXBlICE9IEJQRl9NQVBfVFlQRV9JTlNOX0FSUkFZKSB7XFxuLVxcdFxcdFxcdFxcdGludCBtYXBfb2ZmID0gb2ZmICsgcmVnLVxcdTAwM2V2YXJfb2ZmLnZhbHVlO1xcbi1cXHRcXHRcXHRcXHR1NjQgdmFsID0gMDtcXG4tXFxuLVxcdFxcdFxcdFxcdGVyciA9IGJwZl9tYXBfZGlyZWN0X3JlYWQobWFwLCBtYXBfb2ZmLCBzaXplLFxcbi1cXHRcXHRcXHRcXHRcXHRcXHRcXHQgIFxcdTAwMjZ2YWwsIGlzX2xkc3gpO1xcbi1cXHRcXHRcXHRcXHRpZiAoZXJyKVxcbi1cXHRcXHRcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbi1cXG4tXFx0XFx0XFx0XFx0cmVnc1t2YWx1ZV9yZWdub10udHlwZSA9IFNDQUxBUl9WQUxVRTtcXG4tXFx0XFx0XFx0XFx0X19tYXJrX3JlZ19rbm93bihcXHUwMDI2cmVnc1t2YWx1ZV9yZWdub10sIHZhbCk7XFxuLVxcdFxcdFxcdH0gZWxzZSBpZiAobWFwLVxcdTAwM2VtYXBfdHlwZSA9PSBCUEZfTUFQX1RZUEVfSU5TTl9BUlJBWSkge1xcbi1cXHRcXHRcXHRcXHRpZiAoYnBmX3NpemUgIT0gQlBGX0RXKSB7XFxuLVxcdFxcdFxcdFxcdFxcdHZlcmJvc2UoZW52LCBcXFwiSW52YWxpZCByZWFkIG9mICVkIGJ5dGVzIGZyb20gaW5zbl9hcnJheVxcXFxuXFxcIixcXG4tXFx0XFx0XFx0XFx0XFx0XFx0ICAgICBzaXplKTtcXG4tXFx0XFx0XFx0XFx0XFx0cmV0dXJuIC1FQUNDRVM7XFxuLVxcdFxcdFxcdFxcdH1cXG4tXFx0XFx0XFx0XFx0cmVnc1t2YWx1ZV9yZWdub10gPSAqcmVnO1xcbi1cXHRcXHRcXHRcXHRhZGRfc2NhbGFyX3RvX3JlZyhcXHUwMDI2cmVnc1t2YWx1ZV9yZWdub10sIG9mZik7XFxuLVxcdFxcdFxcdFxcdHJlZ3NbdmFsdWVfcmVnbm9dLnR5cGUgPSBQVFJfVE9fSU5TTjtcXG4tXFx0XFx0XFx0fSBlbHNlIHtcXG4tXFx0XFx0XFx0XFx0bWFya19yZWdfdW5rbm93bihlbnYsIHJlZ3MsIHZhbHVlX3JlZ25vKTtcXG4tXFx0XFx0XFx0fVxcbitcXHRcXHRcXHRlcnIgPSBjaGVja19tYXBfbWVtX3JlYWQoZW52LCByZWcsIG9mZiwgYnBmX3NpemUsIHZhbHVlX3JlZ25vLCBpc19sZHN4KTtcXG4gXFx0XFx0fVxcbiBcXHR9IGVsc2UgaWYgKGJhc2VfdHlwZShyZWctXFx1MDAzZXR5cGUpID09IFBUUl9UT19NRU0pIHtcXG4gXFx0XFx0Ym9vbCByZG9ubHlfbWVtID0gdHlwZV9pc19yZG9ubHlfbWVtKHJlZy1cXHUwMDNldHlwZSk7XFxuQEAgLTY3MjUsNyArNjczNiw2IEBAIHN0YXRpYyBpbnQgY2hlY2tfc3RhY2tfcmFuZ2VfaW5pdGlhbGl6ZWQoXFxuIFxcdGlmIChlcnIpXFxuIFxcdFxcdHJldHVybiBlcnI7XFxuIFxcbi1cXG4gXFx0aWYgKHRudW1faXNfY29uc3QocmVnLVxcdTAwM2V2YXJfb2ZmKSkge1xcbiBcXHRcXHRtaW5fb2ZmID0gbWF4X29mZiA9IHJlZy1cXHUwMDNldmFyX29mZi52YWx1ZSArIG9mZjtcXG4gXFx0fSBlbHNlIHtcXG5AQCAtNzQ0Myw3ICs3NDUzLDYgQEAgc3RhdGljIGJvb2wgaXNfaXRlcl9uZXdfa2Z1bmMoc3RydWN0IGJwZl9jYWxsX2FyZ19tZXRhICptZXRhKVxcbiBcXHRyZXR1cm4gbWV0YS1cXHUwMDNla2Z1bmNfZmxhZ3MgXFx1MDAyNiBLRl9JVEVSX05FVztcXG4gfVxcbiBcXG4tXFxuIHN0YXRpYyBib29sIGlzX2l0ZXJfZGVzdHJveV9rZnVuYyhzdHJ1Y3QgYnBmX2NhbGxfYXJnX21ldGEgKm1ldGEpXFxuIHtcXG4gXFx0cmV0dXJuIG1ldGEtXFx1MDAzZWtmdW5jX2ZsYWdzIFxcdTAwMjYgS0ZfSVRFUl9ERVNUUk9ZO1xcbkBAIC04MjIxLDYgKzgyMzAsMTIgQEAgc3RhdGljIGludCBjaGVja19hcmdfY29uc3Rfc3RyKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxuIFxcdFxcdHJldHVybiAtRUFDQ0VTO1xcbiBcXHR9XFxuIFxcbitcXHRpZiAobWFwLVxcdTAwM2VtYXBfdHlwZSA9PSBCUEZfTUFQX1RZUEVfUEVSQ1BVX0FSUkFZKSB7XFxuK1xcdFxcdHZlcmJvc2UoZW52LCBcXFwiJXMgcG9pbnRzIHRvIHBlcmNwdV9hcnJheSBtYXAgd2hpY2ggY2Fubm90IGJlIHVzZWQgYXMgY29uc3Qgc3RyaW5nXFxcXG5cXFwiLFxcbitcXHRcXHRcXHRyZWdfYXJnX25hbWUoZW52LCBhcmdubykpO1xcbitcXHRcXHRyZXR1cm4gLUVBQ0NFUztcXG4rXFx0fVxcbitcXG4gXFx0aWYgKCFicGZfbWFwX2lzX3Jkb25seShtYXApKSB7XFxuIFxcdFxcdHZlcmJvc2UoZW52LCBcXFwiJXMgZG9lcyBub3QgcG9pbnQgdG8gYSByZWFkb25seSBtYXAnXFxcXG5cXFwiLCByZWdfYXJnX25hbWUoZW52LCBhcmdubykpO1xcbiBcXHRcXHRyZXR1cm4gLUVBQ0NFUztcXG5AQCAtMTE2NjcsNyArMTE2ODIsNiBAQCBzdGF0aWMgaW50IHByb2Nlc3NfaXJxX2ZsYWcoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9yZWdfc3RhdGUgKlxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4tXFxuIHN0YXRpYyBpbnQgcmVmX3NldF9ub25fb3duaW5nKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcpXFxuIHtcXG4gXFx0c3RydWN0IGJ0Zl9yZWNvcmQgKnJlYyA9IHJlZ19idGZfcmVjb3JkKHJlZyk7XFxuQEAgLTE2NTE1LDcgKzE2NTI5LDYgQEAgc3RhdGljIGludCBjaGVja19sZF9hYnMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuKVxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4tXFxuIHN0YXRpYyBib29sIHJldHVybl9yZXR2YWxfcmFuZ2Uoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9yZXR2YWxfcmFuZ2UgKnJhbmdlKVxcbiB7XFxuIFxcdGVudW0gYnBmX3Byb2dfdHlwZSBwcm9nX3R5cGUgPSByZXNvbHZlX3Byb2dfdHlwZShlbnYtXFx1MDAzZXByb2cpO1xcbkBAIC0xODQ2MSw4ICsxODQ3NCw2IEBAIHN0YXRpYyB2b2lkIHJlbGVhc2VfaW5zbl9hcnJheXMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcXG4gXFx0XFx0YnBmX2luc25fYXJyYXlfcmVsZWFzZShlbnYtXFx1MDAzZWluc25fYXJyYXlfbWFwc1tpXSk7XFxuIH1cXG4gXFxuLVxcbi1cXG4gLyogVGhlIHZlcmlmaWVyIGRvZXMgbW9yZSBkYXRhIGZsb3cgYW5hbHlzaXMgdGhhbiBsbHZtIGFuZCB3aWxsIG5vdFxcbiAgKiBleHBsb3JlIGJyYW5jaGVzIHRoYXQgYXJlIGRlYWQgYXQgcnVuIHRpbWUuIE1hbGljaW91cyBwcm9ncmFtcyBjYW5cXG4gICogaGF2ZSBkZWFkIGNvZGUgdG9vLiBUaGVyZWZvcmUgcmVwbGFjZSBhbGwgZGVhZCBhdC1ydW4tdGltZSBjb2RlXFxuQEAgLTE4NDkwLDggKzE4NTAxLDYgQEAgc3RhdGljIHZvaWQgc2FuaXRpemVfZGVhZF9jb2RlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXFxuIFxcdH1cXG4gfVxcbiBcXG4tXFxuLVxcbiBzdGF0aWMgdm9pZCBmcmVlX3N0YXRlcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxcbiB7XFxuIFxcdHN0cnVjdCBicGZfdmVyaWZpZXJfc3RhdGVfbGlzdCAqc2w7XFxuQEAgLTE4NzczLDcgKzE4NzgyLDYgQEAgc3RhdGljIGludCBkb19jaGVja19tYWluKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXFxuIFxcdHJldHVybiByZXQ7XFxuIH1cXG4gXFxuLVxcbiBzdGF0aWMgdm9pZCBwcmludF92ZXJpZmljYXRpb25fc3RhdHMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcXG4ge1xcbiBcXHQvKiBTa2lwIG92ZXIgaGlkZGVuIHN1YnByb2dzIHdoaWNoIGFyZSBub3QgdmVyaWZpZWQuICovXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL2JwZi9icGZ0b29sL2dlbi5jIGIvdG9vbHMvYnBmL2JwZnRvb2wvZ2VuLmNcXG5pbmRleCBhMDFkMDZkMjJkMWEzLi5hNTA1NDBlZjY1MjFjIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL2JwZi9icGZ0b29sL2dlbi5jXFxuKysrIGIvdG9vbHMvYnBmL2JwZnRvb2wvZ2VuLmNcXG5AQCAtMTAxLDYgKzEwMSwxMiBAQCBzdGF0aWMgYm9vbCBnZXRfbWFwX2lkZW50KGNvbnN0IHN0cnVjdCBicGZfbWFwICptYXAsIGNoYXIgKmJ1Ziwgc2l6ZV90IGJ1Zl9zeilcXG4gXFx0XFx0cmV0dXJuIHRydWU7XFxuIFxcdH1cXG4gXFxuK1xcdGlmIChicGZfbWFwX190eXBlKG1hcCkgPT0gQlBGX01BUF9UWVBFX1BFUkNQVV9BUlJBWSkge1xcbitcXHRcXHRzbnByaW50ZihidWYsIGJ1Zl9zeiwgXFxcIiVzXFxcIiwgbmFtZSArIDEpO1xcbitcXHRcXHRzYW5pdGl6ZV9pZGVudGlmaWVyKGJ1Zik7XFxuK1xcdFxcdHJldHVybiB0cnVlO1xcbitcXHR9XFxuK1xcbiBcXHRmb3IgIChpID0gMCwgbiA9IEFSUkFZX1NJWkUoc2Z4cyk7IGkgXFx1MDAzYyBuOyBpKyspIHtcXG4gXFx0XFx0Y29uc3QgY2hhciAqc2Z4ID0gc2Z4c1tpXSwgKnA7XFxuIFxcbkBAIC0xMTcsNyArMTIzLDcgQEAgc3RhdGljIGJvb2wgZ2V0X21hcF9pZGVudChjb25zdCBzdHJ1Y3QgYnBmX21hcCAqbWFwLCBjaGFyICpidWYsIHNpemVfdCBidWZfc3opXFxuIFxcbiBzdGF0aWMgYm9vbCBnZXRfZGF0YXNlY19pZGVudChjb25zdCBjaGFyICpzZWNfbmFtZSwgY2hhciAqYnVmLCBzaXplX3QgYnVmX3N6KVxcbiB7XFxuLVxcdHN0YXRpYyBjb25zdCBjaGFyICpwZnhzW10gPSB7IFxcXCIuZGF0YVxcXCIsIFxcXCIucm9kYXRhXFxcIiwgXFxcIi5ic3NcXFwiLCBcXFwiLmtjb25maWdcXFwiIH07XFxuK1xcdHN0YXRpYyBjb25zdCBjaGFyICpwZnhzW10gPSB7IFxcXCIuZGF0YVxcXCIsIFxcXCIucm9kYXRhXFxcIiwgXFxcIi5ic3NcXFwiLCBcXFwiLnBlcmNwdVxcXCIsIFxcXCIua2NvbmZpZ1xcXCIgfTtcXG4gXFx0aW50IGksIG47XFxuIFxcbiBcXHQvKiByZWNvZ25pemUgaGFyZCBjb2RlZCBMTFZNIHNlY3Rpb24gbmFtZSAqL1xcbkBAIC0yNTQsNyArMjYwLDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBidGZfdHlwZSAqZmluZF90eXBlX2Zvcl9tYXAoc3RydWN0IGJ0ZiAqYnRmLCBjb25zdCBjaGFyICptYXBcXG4gXFx0cmV0dXJuIE5VTEw7XFxuIH1cXG4gXFxuLXN0YXRpYyBib29sIGlzX21tYXBhYmxlX21hcChjb25zdCBzdHJ1Y3QgYnBmX21hcCAqbWFwLCBjaGFyICpidWYsIHNpemVfdCBzeilcXG4rc3RhdGljIGJvb2wgaXNfc2tlbF9kYXRhKGNvbnN0IHN0cnVjdCBicGZfbWFwICptYXAsIGNoYXIgKmJ1Ziwgc2l6ZV90IHN6KVxcbiB7XFxuIFxcdHNpemVfdCB0bXBfc3o7XFxuIFxcbkBAIC0yNjMsMTMgKzI2OSwyNCBAQCBzdGF0aWMgYm9vbCBpc19tbWFwYWJsZV9tYXAoY29uc3Qgc3RydWN0IGJwZl9tYXAgKm1hcCwgY2hhciAqYnVmLCBzaXplX3Qgc3opXFxuIFxcdFxcdHJldHVybiB0cnVlO1xcbiBcXHR9XFxuIFxcbi1cXHRpZiAoIWJwZl9tYXBfX2lzX2ludGVybmFsKG1hcCkgfHwgIShicGZfbWFwX19tYXBfZmxhZ3MobWFwKSBcXHUwMDI2IEJQRl9GX01NQVBBQkxFKSlcXG4rXFx0aWYgKCFicGZfbWFwX19pc19pbnRlcm5hbChtYXApKVxcbiBcXHRcXHRyZXR1cm4gZmFsc2U7XFxuIFxcbiBcXHRpZiAoIWdldF9tYXBfaWRlbnQobWFwLCBidWYsIHN6KSlcXG4gXFx0XFx0cmV0dXJuIGZhbHNlO1xcbiBcXG4tXFx0cmV0dXJuIHRydWU7XFxuK1xcdGlmIChicGZfbWFwX19tYXBfZmxhZ3MobWFwKSBcXHUwMDI2IEJQRl9GX01NQVBBQkxFKVxcbitcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4rXFxuK1xcdGlmIChicGZfbWFwX190eXBlKG1hcCkgPT0gQlBGX01BUF9UWVBFX1BFUkNQVV9BUlJBWSlcXG4rXFx0XFx0cmV0dXJuIGJwZl9tYXBfX2J0Zl92YWx1ZV90eXBlX2lkKG1hcCkgIT0gMDtcXG4rXFxuK1xcdHJldHVybiBmYWxzZTtcXG4rfVxcbitcXG4rc3RhdGljIGJvb2wgaXNfbW1hcGFibGVfbWFwKGNvbnN0IHN0cnVjdCBicGZfbWFwICptYXAsIGNoYXIgKmJ1Ziwgc2l6ZV90IHN6KVxcbit7XFxuK1xcdHJldHVybiBpc19za2VsX2RhdGEobWFwLCBidWYsIHN6KSBcXHUwMDI2XFx1MDAyNiBicGZfbWFwX190eXBlKG1hcCkgIT0gQlBGX01BUF9UWVBFX1BFUkNQVV9BUlJBWTtcXG4gfVxcbiBcXG4gc3RhdGljIGludCBjb2RlZ2VuX2RhdGFzZWNzKHN0cnVjdCBicGZfb2JqZWN0ICpvYmosIGNvbnN0IGNoYXIgKm9ial9uYW1lKVxcbkBAIC0yODcsNyArMzA0LDcgQEAgc3RhdGljIGludCBjb2RlZ2VuX2RhdGFzZWNzKHN0cnVjdCBicGZfb2JqZWN0ICpvYmosIGNvbnN0IGNoYXIgKm9ial9uYW1lKVxcbiBcXG4gXFx0YnBmX29iamVjdF9fZm9yX2VhY2hfbWFwKG1hcCwgb2JqKSB7XFxuIFxcdFxcdC8qIG9ubHkgZ2VuZXJhdGUgZGVmaW5pdGlvbnMgZm9yIG1lbW9yeS1tYXBwZWQgaW50ZXJuYWwgbWFwcyAqL1xcbi1cXHRcXHRpZiAoIWlzX21tYXBhYmxlX21hcChtYXAsIG1hcF9pZGVudCwgc2l6ZW9mKG1hcF9pZGVudCkpKVxcbitcXHRcXHRpZiAoIWlzX3NrZWxfZGF0YShtYXAsIG1hcF9pZGVudCwgc2l6ZW9mKG1hcF9pZGVudCkpKVxcbiBcXHRcXHRcXHRjb250aW51ZTtcXG4gXFxuIFxcdFxcdHNlYyA9IGZpbmRfdHlwZV9mb3JfbWFwKGJ0ZiwgbWFwX2lkZW50KTtcXG5AQCAtNTE3LDcgKzUzNCw3IEBAIHN0YXRpYyB2b2lkIGNvZGVnZW5fYXNzZXJ0cyhzdHJ1Y3QgYnBmX29iamVjdCAqb2JqLCBjb25zdCBjaGFyICpvYmpfbmFtZSlcXG4gXFx0XFx0XFxcIiwgb2JqX25hbWUpO1xcbiBcXG4gXFx0YnBmX29iamVjdF9fZm9yX2VhY2hfbWFwKG1hcCwgb2JqKSB7XFxuLVxcdFxcdGlmICghaXNfbW1hcGFibGVfbWFwKG1hcCwgbWFwX2lkZW50LCBzaXplb2YobWFwX2lkZW50KSkpXFxuK1xcdFxcdGlmICghaXNfc2tlbF9kYXRhKG1hcCwgbWFwX2lkZW50LCBzaXplb2YobWFwX2lkZW50KSkpXFxuIFxcdFxcdFxcdGNvbnRpbnVlO1xcbiBcXG4gXFx0XFx0c2VjID0gZmluZF90eXBlX2Zvcl9tYXAoYnRmLCBtYXBfaWRlbnQpO1xcbkBAIC02NjgsOCArNjg1LDcgQEAgc3RhdGljIHZvaWQgY29kZWdlbl9kZXN0cm95KHN0cnVjdCBicGZfb2JqZWN0ICpvYmosIGNvbnN0IGNoYXIgKm9ial9uYW1lKVxcbiBcXHRicGZfb2JqZWN0X19mb3JfZWFjaF9tYXAobWFwLCBvYmopIHtcXG4gXFx0XFx0aWYgKCFnZXRfbWFwX2lkZW50KG1hcCwgaWRlbnQsIHNpemVvZihpZGVudCkpKVxcbiBcXHRcXHRcXHRjb250aW51ZTtcXG4tXFx0XFx0aWYgKGJwZl9tYXBfX2lzX2ludGVybmFsKG1hcCkgXFx1MDAyNlxcdTAwMjZcXG4tXFx0XFx0ICAgIChicGZfbWFwX19tYXBfZmxhZ3MobWFwKSBcXHUwMDI2IEJQRl9GX01NQVBBQkxFKSlcXG4rXFx0XFx0aWYgKGlzX3NrZWxfZGF0YShtYXAsIGlkZW50LCBzaXplb2YoaWRlbnQpKSlcXG4gXFx0XFx0XFx0cHJpbnRmKFxcXCJcXFxcdHNrZWxfZnJlZV9tYXBfZGF0YShza2VsLVxcdTAwM2UlMSRzLCBza2VsLVxcdTAwM2VtYXBzLiUxJHMuaW5pdGlhbF92YWx1ZSwgJTIkenUpO1xcXFxuXFxcIixcXG4gXFx0XFx0XFx0ICAgICAgIGlkZW50LCBicGZfbWFwX21tYXBfc3oobWFwKSk7XFxuIFxcdFxcdGNvZGVnZW4oXFxcIlxcXFxcXG5AQCAtNzQxLDcgKzc1Nyw3IEBAIHN0YXRpYyBpbnQgZ2VuX3RyYWNlKHN0cnVjdCBicGZfb2JqZWN0ICpvYmosIGNvbnN0IGNoYXIgKm9ial9uYW1lLCBjb25zdCBjaGFyICpoXFxuIFxcdFxcdGNvbnN0IHZvaWQgKm1tYXBfZGF0YSA9IE5VTEw7XFxuIFxcdFxcdHNpemVfdCBtbWFwX3NpemUgPSAwO1xcbiBcXG4tXFx0XFx0aWYgKCFpc19tbWFwYWJsZV9tYXAobWFwLCBpZGVudCwgc2l6ZW9mKGlkZW50KSkpXFxuK1xcdFxcdGlmICghaXNfc2tlbF9kYXRhKG1hcCwgaWRlbnQsIHNpemVvZihpZGVudCkpKVxcbiBcXHRcXHRcXHRjb250aW51ZTtcXG4gXFxuIFxcdFxcdGNvZGVnZW4oXFxcIlxcXFxcXG5AQCAtODQ5LDkgKzg2NSwyMyBAQCBzdGF0aWMgaW50IGdlbl90cmFjZShzdHJ1Y3QgYnBmX29iamVjdCAqb2JqLCBjb25zdCBjaGFyICpvYmpfbmFtZSwgY29uc3QgY2hhciAqaFxcbiBcXHRicGZfb2JqZWN0X19mb3JfZWFjaF9tYXAobWFwLCBvYmopIHtcXG4gXFx0XFx0Y29uc3QgY2hhciAqbW1hcF9mbGFncztcXG4gXFxuLVxcdFxcdGlmICghaXNfbW1hcGFibGVfbWFwKG1hcCwgaWRlbnQsIHNpemVvZihpZGVudCkpKVxcbitcXHRcXHRpZiAoIWlzX3NrZWxfZGF0YShtYXAsIGlkZW50LCBzaXplb2YoaWRlbnQpKSlcXG4gXFx0XFx0XFx0Y29udGludWU7XFxuIFxcbitcXHRcXHRpZiAoYnBmX21hcF9fdHlwZShtYXApID09IEJQRl9NQVBfVFlQRV9QRVJDUFVfQVJSQVkpIHtcXG4rXFx0XFx0XFx0Y29kZWdlbihcXFwiXFxcXFxcbitcXHRcXHRcXFxcblxcXFxcXG4rXFx0XFx0XFx0ZXJyID0gc2tlbF9wcm90ZWN0X21hcF9kYXRhKHNrZWwtXFx1MDAzZSUxJHMsIFxcdTAwMjZza2VsLVxcdTAwM2VtYXBzLiUxJHMuaW5pdGlhbF92YWx1ZSwgJTIkemQpO1xcXFxuXFxcXFxcbitcXHRcXHRcXHRpZiAoZXJyKVxcdFxcdFxcdFxcdFxcdCAgICBcXFxcblxcXFxcXG4rXFx0XFx0XFx0XFx0cmV0dXJuIGVycjtcXHRcXHRcXHRcXHQgICAgXFxcXG5cXFxcXFxuK1xcdFxcdCNpZmRlZiBfX0tFUk5FTF9fXFx0XFx0XFx0XFx0XFx0ICAgIFxcXFxuXFxcXFxcbitcXHRcXHRcXHRza2VsLVxcdTAwM2UlMSRzID0gTlVMTDtcXHRcXHRcXHRcXHQgICAgXFxcXG5cXFxcXFxuK1xcdFxcdCNlbmRpZlxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICBcXFxcblxcXFxcXG4rXFx0XFx0XFx0XFxcIixcXG4rXFx0XFx0XFx0aWRlbnQsIGJwZl9tYXBfbW1hcF9zeihtYXApKTtcXG4rXFx0XFx0XFx0Y29udGludWU7XFxuK1xcdFxcdH1cXG4rXFxuIFxcdFxcdGlmIChicGZfbWFwX19tYXBfZmxhZ3MobWFwKSBcXHUwMDI2IEJQRl9GX1JET05MWV9QUk9HKVxcbiBcXHRcXHRcXHRtbWFwX2ZsYWdzID0gXFxcIlBST1RfUkVBRFxcXCI7XFxuIFxcdFxcdGVsc2VcXG5AQCAtOTU1LDggKzk4NSw3IEBAIGNvZGVnZW5fbWFwc19za2VsZXRvbihzdHJ1Y3QgYnBmX29iamVjdCAqb2JqLCBzaXplX3QgbWFwX2NudCwgYm9vbCBtbWFwZWQsIGJvb2xcXG4gXFx0XFx0XFx0XFx0bWFwLVxcdTAwM2VtYXAgPSBcXHUwMDI2b2JqLVxcdTAwM2VtYXBzLiVzO1xcdCAgICBcXFxcblxcXFxcXG4gXFx0XFx0XFx0XFxcIixcXG4gXFx0XFx0XFx0aSwgYnBmX21hcF9fbmFtZShtYXApLCBpZGVudCk7XFxuLVxcdFxcdC8qIG1lbW9yeS1tYXBwZWQgaW50ZXJuYWwgbWFwcyAqL1xcbi1cXHRcXHRpZiAobW1hcGVkIFxcdTAwMjZcXHUwMDI2IGlzX21tYXBhYmxlX21hcChtYXAsIGlkZW50LCBzaXplb2YoaWRlbnQpKSkge1xcbitcXHRcXHRpZiAobW1hcGVkIFxcdTAwMjZcXHUwMDI2IGlzX3NrZWxfZGF0YShtYXAsIGlkZW50LCBzaXplb2YoaWRlbnQpKSkge1xcbiBcXHRcXHRcXHRwcmludGYoXFxcIlxcXFx0bWFwLVxcdTAwM2VtbWFwZWQgPSAodm9pZCAqKilcXHUwMDI2b2JqLVxcdTAwM2UlcztcXFxcblxcXCIsIGlkZW50KTtcXG4gXFx0XFx0fVxcbiBcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvbGliL2JwZi9icGZfZ2VuX2ludGVybmFsLmggYi90b29scy9saWIvYnBmL2JwZl9nZW5faW50ZXJuYWwuaFxcbmluZGV4IDA0MjU2OTE4Nzc1MjEuLjZjNWFkNmM1NWU4YTYgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvbGliL2JwZi9icGZfZ2VuX2ludGVybmFsLmhcXG4rKysgYi90b29scy9saWIvYnBmL2JwZl9nZW5faW50ZXJuYWwuaFxcbkBAIC02NSw3ICs2NSw4IEBAIHZvaWQgYnBmX2dlbl9fcHJvZ19sb2FkKHN0cnVjdCBicGZfZ2VuICpnZW4sXFxuIFxcdFxcdFxcdGVudW0gYnBmX3Byb2dfdHlwZSBwcm9nX3R5cGUsIGNvbnN0IGNoYXIgKnByb2dfbmFtZSxcXG4gXFx0XFx0XFx0Y29uc3QgY2hhciAqbGljZW5zZSwgc3RydWN0IGJwZl9pbnNuICppbnNucywgc2l6ZV90IGluc25fY250LFxcbiBcXHRcXHRcXHRzdHJ1Y3QgYnBmX3Byb2dfbG9hZF9vcHRzICpsb2FkX2F0dHIsIGludCBwcm9nX2lkeCk7XFxuLXZvaWQgYnBmX2dlbl9fbWFwX3VwZGF0ZV9lbGVtKHN0cnVjdCBicGZfZ2VuICpnZW4sIGludCBtYXBfaWR4LCB2b2lkICp2YWx1ZSwgX191MzIgdmFsdWVfc2l6ZSk7XFxuK3ZvaWQgYnBmX2dlbl9fbWFwX3VwZGF0ZV9lbGVtKHN0cnVjdCBicGZfZ2VuICpnZW4sIGludCBtYXBfaWR4LCB2b2lkICp2YWx1ZSwgX191MzIgdmFsdWVfc2l6ZSxcXG4rXFx0XFx0XFx0ICAgICAgX191NjQgZmxhZ3MpO1xcbiB2b2lkIGJwZl9nZW5fX21hcF9mcmVlemUoc3RydWN0IGJwZl9nZW4gKmdlbiwgaW50IG1hcF9pZHgpO1xcbiB2b2lkIGJwZl9nZW5fX3JlY29yZF9hdHRhY2hfdGFyZ2V0KHN0cnVjdCBicGZfZ2VuICpnZW4sIGNvbnN0IGNoYXIgKm5hbWUsIGVudW0gYnBmX2F0dGFjaF90eXBlIHR5cGUpO1xcbiB2b2lkIGJwZl9nZW5fX3JlY29yZF9leHRlcm4oc3RydWN0IGJwZl9nZW4gKmdlbiwgY29uc3QgY2hhciAqbmFtZSwgYm9vbCBpc193ZWFrLFxcbmRpZmYgLS1naXQgYS90b29scy9saWIvYnBmL2ZlYXR1cmVzLmMgYi90b29scy9saWIvYnBmL2ZlYXR1cmVzLmNcXG5pbmRleCBiN2UzODhmOTlkMGJiLi5lZjk1ODFjMTEzMDM1IDEwMDY0NFxcbi0tLSBhL3Rvb2xzL2xpYi9icGYvZmVhdHVyZXMuY1xcbisrKyBiL3Rvb2xzL2xpYi9icGYvZmVhdHVyZXMuY1xcbkBAIC02MjAsNiArNjIwLDM4IEBAIHN0YXRpYyBpbnQgcHJvYmVfYnBmX3N5c2NhbGxfY29tbW9uX2F0dHJzKGludCB0b2tlbl9mZClcXG4gXFx0cmV0dXJuIHByb2JlX3N5c19icGZfZXh0KCk7XFxuIH1cXG4gXFxuK3N0YXRpYyBpbnQgcHJvYmVfa2Vybl9wZXJjcHVfZGF0YShpbnQgdG9rZW5fZmQpXFxuK3tcXG4rXFx0c3RydWN0IGJwZl9pbnNuIGluc25zW10gPSB7XFxuK1xcdFxcdEJQRl9MRF9NQVBfVkFMVUUoQlBGX1JFR18xLCAwLCAwKSxcXG4rXFx0XFx0QlBGX0xEWF9NRU0oQlBGX0RXLCBCUEZfUkVHXzAsIEJQRl9SRUdfMSwgMCksXFxuK1xcdFxcdEJQRl9FWElUX0lOU04oKSxcXG4rXFx0fTtcXG4rXFx0TElCQlBGX09QVFMoYnBmX21hcF9jcmVhdGVfb3B0cywgbWFwX29wdHMsXFxuK1xcdFxcdC50b2tlbl9mZCA9IHRva2VuX2ZkLFxcbitcXHRcXHQubWFwX2ZsYWdzID0gdG9rZW5fZmQgPyBCUEZfRl9UT0tFTl9GRCA6IDAsXFxuK1xcdCk7XFxuK1xcdExJQkJQRl9PUFRTKGJwZl9wcm9nX2xvYWRfb3B0cywgcHJvZ19vcHRzLFxcbitcXHRcXHQudG9rZW5fZmQgPSB0b2tlbl9mZCxcXG4rXFx0XFx0LnByb2dfZmxhZ3MgPSB0b2tlbl9mZCA/IEJQRl9GX1RPS0VOX0ZEIDogMCxcXG4rXFx0KTtcXG4rXFx0aW50IHJldCwgbWFwLCBpbnNuX2NudCA9IEFSUkFZX1NJWkUoaW5zbnMpO1xcbitcXG4rXFx0bWFwID0gYnBmX21hcF9jcmVhdGUoQlBGX01BUF9UWVBFX1BFUkNQVV9BUlJBWSwgXFxcImxpYmJwZl9wZXJjcHVcXFwiLCBzaXplb2YoaW50KSwgOCwgMSxcXG4rXFx0XFx0XFx0ICAgICBcXHUwMDI2bWFwX29wdHMpO1xcbitcXHRpZiAobWFwIFxcdTAwM2MgMCkge1xcbitcXHRcXHRwcl93YXJuKFxcXCJFcnJvciBpbiAlcygpOiAlcy4gQ291bGRuJ3QgY3JlYXRlIHNpbXBsZSBwZXJjcHVfYXJyYXkgbWFwLlxcXFxuXFxcIixcXG4rXFx0XFx0XFx0X19mdW5jX18sIGVycnN0cihtYXApKTtcXG4rXFx0XFx0cmV0dXJuIG1hcDtcXG4rXFx0fVxcbitcXG4rXFx0aW5zbnNbMF0uaW1tID0gbWFwO1xcbitcXG4rXFx0cmV0ID0gYnBmX3Byb2dfbG9hZChCUEZfUFJPR19UWVBFX1NPQ0tFVF9GSUxURVIsIE5VTEwsIFxcXCJHUExcXFwiLCBpbnNucywgaW5zbl9jbnQsIFxcdTAwMjZwcm9nX29wdHMpO1xcbitcXHRjbG9zZShtYXApO1xcbitcXHRyZXR1cm4gcHJvYmVfZmQocmV0KTtcXG4rfVxcbitcXG4gdHlwZWRlZiBpbnQgKCpmZWF0dXJlX3Byb2JlX2ZuKShpbnQgLyogdG9rZW5fZmQgKi8pO1xcbiBcXG4gc3RhdGljIHN0cnVjdCBrZXJuX2ZlYXR1cmVfY2FjaGUgZmVhdHVyZV9jYWNoZTtcXG5AQCAtNzA3LDYgKzczOSw5IEBAIHN0YXRpYyBzdHJ1Y3Qga2Vybl9mZWF0dXJlX2Rlc2Mge1xcbiBcXHRbRkVBVF9CUEZfU1lTQ0FMTF9DT01NT05fQVRUUlNdID0ge1xcbiBcXHRcXHRcXFwiQlBGIHN5c2NhbGwgY29tbW9uIGF0dHJpYnV0ZXMgc3VwcG9ydFxcXCIsIHByb2JlX2JwZl9zeXNjYWxsX2NvbW1vbl9hdHRycyxcXG4gXFx0fSxcXG4rXFx0W0ZFQVRfUEVSQ1BVX0RBVEFdID0ge1xcbitcXHRcXHRcXFwia2VybmVsIHN1cHBvcnRzIHBlcmNwdSBkYXRhXFxcIiwgcHJvYmVfa2Vybl9wZXJjcHVfZGF0YSxcXG4rXFx0fSxcXG4gfTtcXG4gXFxuIGJvb2wgZmVhdF9zdXBwb3J0ZWQoc3RydWN0IGtlcm5fZmVhdHVyZV9jYWNoZSAqY2FjaGUsIGVudW0ga2Vybl9mZWF0dXJlX2lkIGZlYXRfaWQpXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL2xpYi9icGYvZ2VuX2xvYWRlci5jIGIvdG9vbHMvbGliL2JwZi9nZW5fbG9hZGVyLmNcXG5pbmRleCA2ZTNkZDUyNDI3NjE4Li5hZjNhMDRmMTYxYWMxIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL2xpYi9icGYvZ2VuX2xvYWRlci5jXFxuKysrIGIvdG9vbHMvbGliL2JwZi9nZW5fbG9hZGVyLmNcXG5AQCAtMTEyOCw3ICsxMTI4LDcgQEAgdm9pZCBicGZfZ2VuX19wcm9nX2xvYWQoc3RydWN0IGJwZl9nZW4gKmdlbixcXG4gfVxcbiBcXG4gdm9pZCBicGZfZ2VuX19tYXBfdXBkYXRlX2VsZW0oc3RydWN0IGJwZl9nZW4gKmdlbiwgaW50IG1hcF9pZHgsIHZvaWQgKnB2YWx1ZSxcXG4tXFx0XFx0XFx0ICAgICAgX191MzIgdmFsdWVfc2l6ZSlcXG4rXFx0XFx0XFx0ICAgICAgX191MzIgdmFsdWVfc2l6ZSwgX191NjQgZmxhZ3MpXFxuIHtcXG4gXFx0aW50IGF0dHJfc2l6ZSA9IG9mZnNldG9mZW5kKHVuaW9uIGJwZl9hdHRyLCBmbGFncyk7XFxuIFxcdGludCBtYXBfdXBkYXRlX2F0dHIsIHZhbHVlLCBrZXk7XFxuQEAgLTExMzYsNiArMTEzNiw3IEBAIHZvaWQgYnBmX2dlbl9fbWFwX3VwZGF0ZV9lbGVtKHN0cnVjdCBicGZfZ2VuICpnZW4sIGludCBtYXBfaWR4LCB2b2lkICpwdmFsdWUsXFxuIFxcdGludCB6ZXJvID0gMDtcXG4gXFxuIFxcdG1lbXNldChcXHUwMDI2YXR0ciwgMCwgYXR0cl9zaXplKTtcXG4rXFx0YXR0ci5mbGFncyA9IHRndF9lbmRpYW4oZmxhZ3MpO1xcbiBcXG4gXFx0dmFsdWUgPSBhZGRfZGF0YShnZW4sIHB2YWx1ZSwgdmFsdWVfc2l6ZSk7XFxuIFxcdGtleSA9IGFkZF9kYXRhKGdlbiwgXFx1MDAyNnplcm8sIHNpemVvZih6ZXJvKSk7XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL2xpYi9icGYvbGliYnBmLmMgYi90b29scy9saWIvYnBmL2xpYmJwZi5jXFxuaW5kZXggNTE0ZTRlOWRhYTgyNS4uOWY3OWE4ZTg1MGZkYiAxMDA2NDRcXG4tLS0gYS90b29scy9saWIvYnBmL2xpYmJwZi5jXFxuKysrIGIvdG9vbHMvbGliL2JwZi9saWJicGYuY1xcbkBAIC01NDEsNiArNTQxLDcgQEAgc3RydWN0IGJwZl9zdHJ1Y3Rfb3BzIHtcXG4gfTtcXG4gXFxuICNkZWZpbmUgREFUQV9TRUMgXFxcIi5kYXRhXFxcIlxcbisjZGVmaW5lIFBFUkNQVV9TRUMgXFxcIi5wZXJjcHVcXFwiXFxuICNkZWZpbmUgQlNTX1NFQyBcXFwiLmJzc1xcXCJcXG4gI2RlZmluZSBST0RBVEFfU0VDIFxcXCIucm9kYXRhXFxcIlxcbiAjZGVmaW5lIEtDT05GSUdfU0VDIFxcXCIua2NvbmZpZ1xcXCJcXG5AQCAtNTU1LDYgKzU1Niw3IEBAIGVudW0gbGliYnBmX21hcF90eXBlIHtcXG4gXFx0TElCQlBGX01BUF9CU1MsXFxuIFxcdExJQkJQRl9NQVBfUk9EQVRBLFxcbiBcXHRMSUJCUEZfTUFQX0tDT05GSUcsXFxuK1xcdExJQkJQRl9NQVBfUEVSQ1BVLFxcbiB9O1xcbiBcXG4gc3RydWN0IGJwZl9tYXBfZGVmIHtcXG5AQCAtNjY2LDYgKzY2OCw3IEBAIGVudW0gc2VjX3R5cGUge1xcbiBcXHRTRUNfREFUQSxcXG4gXFx0U0VDX1JPREFUQSxcXG4gXFx0U0VDX1NUX09QUyxcXG4rXFx0U0VDX1BFUkNQVSxcXG4gfTtcXG4gXFxuIHN0cnVjdCBlbGZfc2VjX2Rlc2Mge1xcbkBAIC0xODM5LDYgKzE4NDIsOCBAQCBzdGF0aWMgc2l6ZV90IGJwZl9tYXBfbW1hcF9zeihjb25zdCBzdHJ1Y3QgYnBmX21hcCAqbWFwKVxcbiBcXHRzd2l0Y2ggKG1hcC1cXHUwMDNlZGVmLnR5cGUpIHtcXG4gXFx0Y2FzZSBCUEZfTUFQX1RZUEVfQVJSQVk6XFxuIFxcdFxcdHJldHVybiBhcnJheV9tYXBfbW1hcF9zeihtYXAtXFx1MDAzZWRlZi52YWx1ZV9zaXplLCBtYXAtXFx1MDAzZWRlZi5tYXhfZW50cmllcyk7XFxuK1xcdGNhc2UgQlBGX01BUF9UWVBFX1BFUkNQVV9BUlJBWTpcXG4rXFx0XFx0cmV0dXJuIG1hcC1cXHUwMDNlZGVmLnZhbHVlX3NpemU7XFxuIFxcdGNhc2UgQlBGX01BUF9UWVBFX0FSRU5BOlxcbiBcXHRcXHRyZXR1cm4gcGFnZV9zeiAqIG1hcC1cXHUwMDNlZGVmLm1heF9lbnRyaWVzO1xcbiBcXHRkZWZhdWx0OlxcbkBAIC0xODY2LDcgKzE4NzEsOCBAQCBzdGF0aWMgaW50IGJwZl9tYXBfbW1hcF9yZXNpemUoc3RydWN0IGJwZl9tYXAgKm1hcCwgc2l6ZV90IG9sZF9zeiwgc2l6ZV90IG5ld19zelxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4tc3RhdGljIGNoYXIgKmludGVybmFsX21hcF9uYW1lKHN0cnVjdCBicGZfb2JqZWN0ICpvYmosIGNvbnN0IGNoYXIgKnJlYWxfbmFtZSlcXG4rc3RhdGljIGNoYXIgKmludGVybmFsX21hcF9uYW1lKHN0cnVjdCBicGZfb2JqZWN0ICpvYmosIGNvbnN0IGNoYXIgKnJlYWxfbmFtZSxcXG4rXFx0XFx0XFx0ICAgICAgIGVudW0gbGliYnBmX21hcF90eXBlIHR5cGUpXFxuIHtcXG4gXFx0Y2hhciBtYXBfbmFtZVtCUEZfT0JKX05BTUVfTEVOXSwgKnA7XFxuIFxcdGludCBwZnhfbGVuLCBzZnhfbGVuID0gbWF4KChzaXplX3QpNywgc3RybGVuKHJlYWxfbmFtZSkpO1xcbkBAIC0xOTA3LDggKzE5MTMsMTEgQEAgc3RhdGljIGNoYXIgKmludGVybmFsX21hcF9uYW1lKHN0cnVjdCBicGZfb2JqZWN0ICpvYmosIGNvbnN0IGNoYXIgKnJlYWxfbmFtZSlcXG4gXFx0aWYgKHNmeF9sZW4gXFx1MDAzZT0gQlBGX09CSl9OQU1FX0xFTilcXG4gXFx0XFx0c2Z4X2xlbiA9IEJQRl9PQkpfTkFNRV9MRU4gLSAxO1xcbiBcXG4tXFx0LyogaWYgdGhlcmUgYXJlIHR3byBvciBtb3JlIGRvdHMgaW4gbWFwIG5hbWUsIGl0J3MgYSBjdXN0b20gZG90IG1hcCAqL1xcbi1cXHRpZiAoc3RyY2hyKHJlYWxfbmFtZSArIDEsICcuJykgIT0gTlVMTClcXG4rXFx0LypcXG4rXFx0ICogRG9uJ3QgcHJlZml4IHRoZSBicGZfb2JqZWN0IG5hbWUgaWYgdGhpcyBpcyBhIGN1c3RvbSBkb3QgbWFwXFxuK1xcdCAqIChjb250YWluaW5nIHR3byBvciBtb3JlIGRvdHMpIG9yIGEgcGVyY3B1IGRhdGEgbWFwLlxcbitcXHQgKi9cXG4rXFx0aWYgKHN0cmNocihyZWFsX25hbWUgKyAxLCAnLicpICE9IE5VTEwgfHwgdHlwZSA9PSBMSUJCUEZfTUFQX1BFUkNQVSlcXG4gXFx0XFx0cGZ4X2xlbiA9IDA7XFxuIFxcdGVsc2VcXG4gXFx0XFx0cGZ4X2xlbiA9IG1pbigoc2l6ZV90KUJQRl9PQkpfTkFNRV9MRU4gLSBzZnhfbGVuIC0gMSwgc3RybGVuKG9iai1cXHUwMDNlbmFtZSkpO1xcbkBAIC0xOTQxLDYgKzE5NTAsMTMgQEAgc3RhdGljIGJvb2wgbWFwX2lzX21tYXBhYmxlKHN0cnVjdCBicGZfb2JqZWN0ICpvYmosIHN0cnVjdCBicGZfbWFwICptYXApXFxuIFxcdGlmICghbWFwLVxcdTAwM2VidGZfdmFsdWVfdHlwZV9pZClcXG4gXFx0XFx0cmV0dXJuIGZhbHNlO1xcbiBcXG4rXFx0LypcXG4rXFx0ICogVGhlIGludGVybmFsIFBFUkNQVSBtYXBzIGFyZSBub3QgbW1hcGJsZSBiZWNhdXNlIHRoZSB1bmRlcmx5aW5nXFxuK1xcdCAqIHBlcmNwdV9hcnJheSBtYXBzIGRvIG5vdCBoYXZlIG1tYXAgc3VwcG9ydC5cXG4rXFx0ICovXFxuK1xcdGlmIChtYXAtXFx1MDAzZWxpYmJwZl90eXBlID09IExJQkJQRl9NQVBfUEVSQ1BVKVxcbitcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcbiBcXHR0ID0gYnRmX190eXBlX2J5X2lkKG9iai1cXHUwMDNlYnRmLCBtYXAtXFx1MDAzZWJ0Zl92YWx1ZV90eXBlX2lkKTtcXG4gXFx0aWYgKCFidGZfaXNfZGF0YXNlYyh0KSlcXG4gXFx0XFx0cmV0dXJuIGZhbHNlO1xcbkBAIC0xOTYyLDYgKzE5NzgsNyBAQCBzdGF0aWMgaW50XFxuIGJwZl9vYmplY3RfX2luaXRfaW50ZXJuYWxfbWFwKHN0cnVjdCBicGZfb2JqZWN0ICpvYmosIGVudW0gbGliYnBmX21hcF90eXBlIHR5cGUsXFxuIFxcdFxcdFxcdCAgICAgIGNvbnN0IGNoYXIgKnJlYWxfbmFtZSwgaW50IHNlY19pZHgsIHZvaWQgKmRhdGEsIHNpemVfdCBkYXRhX3N6KVxcbiB7XFxuK1xcdGJvb2wgaXNfcGVyY3B1ID0gdHlwZSA9PSBMSUJCUEZfTUFQX1BFUkNQVTtcXG4gXFx0c3RydWN0IGJwZl9tYXBfZGVmICpkZWY7XFxuIFxcdHN0cnVjdCBicGZfbWFwICptYXA7XFxuIFxcdHNpemVfdCBtbWFwX3N6O1xcbkBAIC0xOTc1LDcgKzE5OTIsNyBAQCBicGZfb2JqZWN0X19pbml0X2ludGVybmFsX21hcChzdHJ1Y3QgYnBmX29iamVjdCAqb2JqLCBlbnVtIGxpYmJwZl9tYXBfdHlwZSB0eXBlLFxcbiBcXHRtYXAtXFx1MDAzZXNlY19pZHggPSBzZWNfaWR4O1xcbiBcXHRtYXAtXFx1MDAzZXNlY19vZmZzZXQgPSAwO1xcbiBcXHRtYXAtXFx1MDAzZXJlYWxfbmFtZSA9IHN0cmR1cChyZWFsX25hbWUpO1xcbi1cXHRtYXAtXFx1MDAzZW5hbWUgPSBpbnRlcm5hbF9tYXBfbmFtZShvYmosIHJlYWxfbmFtZSk7XFxuK1xcdG1hcC1cXHUwMDNlbmFtZSA9IGludGVybmFsX21hcF9uYW1lKG9iaiwgcmVhbF9uYW1lLCB0eXBlKTtcXG4gXFx0aWYgKCFtYXAtXFx1MDAzZXJlYWxfbmFtZSB8fCAhbWFwLVxcdTAwM2VuYW1lKSB7XFxuIFxcdFxcdHpmcmVlKFxcdTAwMjZtYXAtXFx1MDAzZXJlYWxfbmFtZSk7XFxuIFxcdFxcdHpmcmVlKFxcdTAwMjZtYXAtXFx1MDAzZW5hbWUpO1xcbkBAIC0xOTgzLDcgKzIwMDAsNyBAQCBicGZfb2JqZWN0X19pbml0X2ludGVybmFsX21hcChzdHJ1Y3QgYnBmX29iamVjdCAqb2JqLCBlbnVtIGxpYmJwZl9tYXBfdHlwZSB0eXBlLFxcbiBcXHR9XFxuIFxcbiBcXHRkZWYgPSBcXHUwMDI2bWFwLVxcdTAwM2VkZWY7XFxuLVxcdGRlZi1cXHUwMDNldHlwZSA9IEJQRl9NQVBfVFlQRV9BUlJBWTtcXG4rXFx0ZGVmLVxcdTAwM2V0eXBlID0gaXNfcGVyY3B1ID8gQlBGX01BUF9UWVBFX1BFUkNQVV9BUlJBWSA6IEJQRl9NQVBfVFlQRV9BUlJBWTtcXG4gXFx0ZGVmLVxcdTAwM2VrZXlfc2l6ZSA9IHNpemVvZihpbnQpO1xcbiBcXHRkZWYtXFx1MDAzZXZhbHVlX3NpemUgPSBkYXRhX3N6O1xcbiBcXHRkZWYtXFx1MDAzZW1heF9lbnRyaWVzID0gMTtcXG5AQCAtMTk5Niw4ICsyMDEzLDkgQEAgYnBmX29iamVjdF9faW5pdF9pbnRlcm5hbF9tYXAoc3RydWN0IGJwZl9vYmplY3QgKm9iaiwgZW51bSBsaWJicGZfbWFwX3R5cGUgdHlwZSxcXG4gXFx0aWYgKG1hcF9pc19tbWFwYWJsZShvYmosIG1hcCkpXFxuIFxcdFxcdGRlZi1cXHUwMDNlbWFwX2ZsYWdzIHw9IEJQRl9GX01NQVBBQkxFO1xcbiBcXG4tXFx0cHJfZGVidWcoXFxcIm1hcCAnJXMnIChnbG9iYWwgZGF0YSk6IGF0IHNlY19pZHggJWQsIG9mZnNldCAlenUsIGZsYWdzICV4LlxcXFxuXFxcIixcXG4tXFx0XFx0IG1hcC1cXHUwMDNlbmFtZSwgbWFwLVxcdTAwM2VzZWNfaWR4LCBtYXAtXFx1MDAzZXNlY19vZmZzZXQsIGRlZi1cXHUwMDNlbWFwX2ZsYWdzKTtcXG4rXFx0cHJfZGVidWcoXFxcIm1hcCAnJXMnIChnbG9iYWwgJXNkYXRhKTogYXQgc2VjX2lkeCAlZCwgb2Zmc2V0ICV6dSwgZmxhZ3MgJXguXFxcXG5cXFwiLFxcbitcXHRcXHQgbWFwLVxcdTAwM2VuYW1lLCBpc19wZXJjcHUgPyBcXFwicGVyY3B1IFxcXCIgOiBcXFwiXFxcIiwgbWFwLVxcdTAwM2VzZWNfaWR4LFxcbitcXHRcXHQgbWFwLVxcdTAwM2VzZWNfb2Zmc2V0LCBkZWYtXFx1MDAzZW1hcF9mbGFncyk7XFxuIFxcbiBcXHRtbWFwX3N6ID0gYnBmX21hcF9tbWFwX3N6KG1hcCk7XFxuIFxcdG1hcC1cXHUwMDNlbW1hcGVkID0gbW1hcChOVUxMLCBtbWFwX3N6LCBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFLFxcbkBAIC0yMDU3LDYgKzIwNzUsMTMgQEAgc3RhdGljIGludCBicGZfb2JqZWN0X19pbml0X2dsb2JhbF9kYXRhX21hcHMoc3RydWN0IGJwZl9vYmplY3QgKm9iailcXG4gXFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgIE5VTEwsXFxuIFxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICBzZWNfZGVzYy1cXHUwMDNlZGF0YS1cXHUwMDNlZF9zaXplKTtcXG4gXFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdGNhc2UgU0VDX1BFUkNQVTpcXG4rXFx0XFx0XFx0c2VjX25hbWUgPSBlbGZfc2VjX25hbWUob2JqLCBlbGZfc2VjX2J5X2lkeChvYmosIHNlY19pZHgpKTtcXG4rXFx0XFx0XFx0ZXJyID0gYnBmX29iamVjdF9faW5pdF9pbnRlcm5hbF9tYXAob2JqLCBMSUJCUEZfTUFQX1BFUkNQVSxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgIHNlY19uYW1lLCBzZWNfaWR4LFxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgc2VjX2Rlc2MtXFx1MDAzZWRhdGEtXFx1MDAzZWRfYnVmLFxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgc2VjX2Rlc2MtXFx1MDAzZWRhdGEtXFx1MDAzZWRfc2l6ZSk7XFxuK1xcdFxcdFxcdGJyZWFrO1xcbiBcXHRcXHRkZWZhdWx0OlxcbiBcXHRcXHRcXHQvKiBza2lwICovXFxuIFxcdFxcdFxcdGJyZWFrO1xcbkBAIC00MDE2LDYgKzQwNDEsMTEgQEAgc3RhdGljIGludCBicGZfb2JqZWN0X19lbGZfY29sbGVjdChzdHJ1Y3QgYnBmX29iamVjdCAqb2JqKVxcbiBcXHRcXHRcXHRcXHRzZWNfZGVzYy1cXHUwMDNlc2VjX3R5cGUgPSBTRUNfUk9EQVRBO1xcbiBcXHRcXHRcXHRcXHRzZWNfZGVzYy1cXHUwMDNlc2hkciA9IHNoO1xcbiBcXHRcXHRcXHRcXHRzZWNfZGVzYy1cXHUwMDNlZGF0YSA9IGRhdGE7XFxuK1xcdFxcdFxcdH0gZWxzZSBpZiAoc3RyY21wKG5hbWUsIFBFUkNQVV9TRUMpID09IDAgfHxcXG4rXFx0XFx0XFx0XFx0ICAgc3RyX2hhc19wZngobmFtZSwgUEVSQ1BVX1NFQyBcXFwiLlxcXCIpKSB7XFxuK1xcdFxcdFxcdFxcdHNlY19kZXNjLVxcdTAwM2VzZWNfdHlwZSA9IFNFQ19QRVJDUFU7XFxuK1xcdFxcdFxcdFxcdHNlY19kZXNjLVxcdTAwM2VzaGRyID0gc2g7XFxuK1xcdFxcdFxcdFxcdHNlY19kZXNjLVxcdTAwM2VkYXRhID0gZGF0YTtcXG4gXFx0XFx0XFx0fSBlbHNlIGlmIChzdHJjbXAobmFtZSwgU1RSVUNUX09QU19TRUMpID09IDAgfHxcXG4gXFx0XFx0XFx0XFx0ICAgc3RyY21wKG5hbWUsIFNUUlVDVF9PUFNfTElOS19TRUMpID09IDAgfHxcXG4gXFx0XFx0XFx0XFx0ICAgc3RyY21wKG5hbWUsIFxcXCI/XFxcIiBTVFJVQ1RfT1BTX1NFQykgPT0gMCB8fFxcbkBAIC00NTQ0LDYgKzQ1NzQsNyBAQCBzdGF0aWMgYm9vbCBicGZfb2JqZWN0X19zaG5keF9pc19kYXRhKGNvbnN0IHN0cnVjdCBicGZfb2JqZWN0ICpvYmosXFxuIFxcdGNhc2UgU0VDX0JTUzpcXG4gXFx0Y2FzZSBTRUNfREFUQTpcXG4gXFx0Y2FzZSBTRUNfUk9EQVRBOlxcbitcXHRjYXNlIFNFQ19QRVJDUFU6XFxuIFxcdFxcdHJldHVybiB0cnVlO1xcbiBcXHRkZWZhdWx0OlxcbiBcXHRcXHRyZXR1cm4gZmFsc2U7XFxuQEAgLTQ1NjksNiArNDYwMCw4IEBAIGJwZl9vYmplY3RfX3NlY3Rpb25fdG9fbGliYnBmX21hcF90eXBlKGNvbnN0IHN0cnVjdCBicGZfb2JqZWN0ICpvYmosIGludCBzaG5keClcXG4gXFx0XFx0cmV0dXJuIExJQkJQRl9NQVBfREFUQTtcXG4gXFx0Y2FzZSBTRUNfUk9EQVRBOlxcbiBcXHRcXHRyZXR1cm4gTElCQlBGX01BUF9ST0RBVEE7XFxuK1xcdGNhc2UgU0VDX1BFUkNQVTpcXG4rXFx0XFx0cmV0dXJuIExJQkJQRl9NQVBfUEVSQ1BVO1xcbiBcXHRkZWZhdWx0OlxcbiBcXHRcXHRyZXR1cm4gTElCQlBGX01BUF9VTlNQRUM7XFxuIFxcdH1cXG5AQCAtNDk0NCw3ICs0OTc3LDcgQEAgc3RhdGljIGludCBtYXBfZmlsbF9idGZfdHlwZV9pbmZvKHN0cnVjdCBicGZfb2JqZWN0ICpvYmosIHN0cnVjdCBicGZfbWFwICptYXApXFxuIFxcbiBcXHQvKlxcbiBcXHQgKiBMTFZNIGFubm90YXRlcyBnbG9iYWwgZGF0YSBkaWZmZXJlbnRseSBpbiBCVEYsIHRoYXQgaXMsXFxuLVxcdCAqIG9ubHkgYXMgJy5kYXRhJywgJy5ic3MnIG9yICcucm9kYXRhJy5cXG4rXFx0ICogb25seSBhcyAnLmRhdGEnLCAnLmJzcycsICcucGVyY3B1JyBvciAnLnJvZGF0YScuXFxuIFxcdCAqL1xcbiBcXHRpZiAoIWJwZl9tYXBfX2lzX2ludGVybmFsKG1hcCkpXFxuIFxcdFxcdHJldHVybiAtRU5PRU5UO1xcbkBAIC01MjkzLDE4ICs1MzI2LDI2IEBAIHN0YXRpYyBpbnRcXG4gYnBmX29iamVjdF9fcG9wdWxhdGVfaW50ZXJuYWxfbWFwKHN0cnVjdCBicGZfb2JqZWN0ICpvYmosIHN0cnVjdCBicGZfbWFwICptYXApXFxuIHtcXG4gXFx0ZW51bSBsaWJicGZfbWFwX3R5cGUgbWFwX3R5cGUgPSBtYXAtXFx1MDAzZWxpYmJwZl90eXBlO1xcbitcXHRib29sIGlzX3BlcmNwdSA9IG1hcF90eXBlID09IExJQkJQRl9NQVBfUEVSQ1BVO1xcbitcXHRjb25zdCBfX3U2NCB1cGRhdGVfZmxhZ3MgPSBpc19wZXJjcHUgPyBCUEZfRl9BTExfQ1BVUyA6IDA7XFxuIFxcdGludCBlcnIsIHplcm8gPSAwO1xcbiBcXHRzaXplX3QgbW1hcF9zejtcXG4gXFxuK1xcdGlmIChpc19wZXJjcHUgXFx1MDAyNlxcdTAwMjYgIW9iai1cXHUwMDNlZ2VuX2xvYWRlciBcXHUwMDI2XFx1MDAyNiAha2VybmVsX3N1cHBvcnRzKG9iaiwgRkVBVF9QRVJDUFVfREFUQSkpIHtcXG4rXFx0XFx0cHJfd2FybihcXFwibWFwICclcyc6IGtlcm5lbCBkb2VzIG5vdCBzdXBwb3J0IHBlcmNwdSBkYXRhLlxcXFxuXFxcIixcXG4rXFx0XFx0XFx0YnBmX21hcF9fbmFtZShtYXApKTtcXG4rXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbitcXHR9XFxuK1xcbiBcXHRpZiAob2JqLVxcdTAwM2VnZW5fbG9hZGVyKSB7XFxuIFxcdFxcdGJwZl9nZW5fX21hcF91cGRhdGVfZWxlbShvYmotXFx1MDAzZWdlbl9sb2FkZXIsIG1hcCAtIG9iai1cXHUwMDNlbWFwcyxcXG4tXFx0XFx0XFx0XFx0XFx0IG1hcC1cXHUwMDNlbW1hcGVkLCBtYXAtXFx1MDAzZWRlZi52YWx1ZV9zaXplKTtcXG4rXFx0XFx0XFx0XFx0XFx0IG1hcC1cXHUwMDNlbW1hcGVkLCBtYXAtXFx1MDAzZWRlZi52YWx1ZV9zaXplLCB1cGRhdGVfZmxhZ3MpO1xcbiBcXHRcXHRpZiAobWFwX3R5cGUgPT0gTElCQlBGX01BUF9ST0RBVEEgfHwgbWFwX3R5cGUgPT0gTElCQlBGX01BUF9LQ09ORklHKVxcbiBcXHRcXHRcXHRicGZfZ2VuX19tYXBfZnJlZXplKG9iai1cXHUwMDNlZ2VuX2xvYWRlciwgbWFwIC0gb2JqLVxcdTAwM2VtYXBzKTtcXG4gXFx0XFx0cmV0dXJuIDA7XFxuIFxcdH1cXG4gXFxuLVxcdGVyciA9IGJwZl9tYXBfdXBkYXRlX2VsZW0obWFwLVxcdTAwM2VmZCwgXFx1MDAyNnplcm8sIG1hcC1cXHUwMDNlbW1hcGVkLCAwKTtcXG4rXFx0ZXJyID0gYnBmX21hcF91cGRhdGVfZWxlbShtYXAtXFx1MDAzZWZkLCBcXHUwMDI2emVybywgbWFwLVxcdTAwM2VtbWFwZWQsIHVwZGF0ZV9mbGFncyk7XFxuIFxcdGlmIChlcnIpIHtcXG4gXFx0XFx0ZXJyID0gLWVycm5vO1xcbiBcXHRcXHRwcl93YXJuKFxcXCJtYXAgJyVzJzogZmFpbGVkIHRvIHNldCBpbml0aWFsIGNvbnRlbnRzOiAlc1xcXFxuXFxcIixcXG5AQCAtNTM0OSw2ICs1MzkwLDEzIEBAIGJwZl9vYmplY3RfX3BvcHVsYXRlX2ludGVybmFsX21hcChzdHJ1Y3QgYnBmX29iamVjdCAqb2JqLCBzdHJ1Y3QgYnBmX21hcCAqbWFwKVxcbiBcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbiBcXHRcXHR9XFxuIFxcdFxcdG1hcC1cXHUwMDNlbW1hcGVkID0gbW1hcGVkO1xcbitcXHR9IGVsc2UgaWYgKGlzX3BlcmNwdSkge1xcbitcXHRcXHRpZiAobXByb3RlY3QobWFwLVxcdTAwM2VtbWFwZWQsIG1tYXBfc3osIFBST1RfUkVBRCkpIHtcXG4rXFx0XFx0XFx0ZXJyID0gLWVycm5vO1xcbitcXHRcXHRcXHRwcl93YXJuKFxcXCJtYXAgJyVzJzogZmFpbGVkIHRvIG1wcm90ZWN0KCkgY29udGVudHM6ICVzXFxcXG5cXFwiLFxcbitcXHRcXHRcXHRcXHRicGZfbWFwX19uYW1lKG1hcCksIGVycnN0cihlcnIpKTtcXG4rXFx0XFx0XFx0cmV0dXJuIGVycjtcXG4rXFx0XFx0fVxcbiBcXHR9IGVsc2UgaWYgKG1hcC1cXHUwMDNlbW1hcGVkKSB7XFxuIFxcdFxcdG11bm1hcChtYXAtXFx1MDAzZW1tYXBlZCwgbW1hcF9zeik7XFxuIFxcdFxcdG1hcC1cXHUwMDNlbW1hcGVkID0gTlVMTDtcXG5AQCAtNTYyNyw2ICs1Njc1LDkgQEAgYnBmX29iamVjdF9fY3JlYXRlX21hcHMoc3RydWN0IGJwZl9vYmplY3QgKm9iailcXG4gXFx0XFx0ICovXFxuIFxcdFxcdGlmIChicGZfbWFwX19pc19pbnRlcm5hbChtYXApIFxcdTAwMjZcXHUwMDI2ICFrZXJuZWxfc3VwcG9ydHMob2JqLCBGRUFUX0dMT0JBTF9EQVRBKSlcXG4gXFx0XFx0XFx0bWFwLVxcdTAwM2VhdXRvY3JlYXRlID0gZmFsc2U7XFxuK1xcdFxcdGlmIChicGZfbWFwX19pc19pbnRlcm5hbChtYXApIFxcdTAwMjZcXHUwMDI2IGJwZl9tYXBfX3R5cGUobWFwKSA9PSBCUEZfTUFQX1RZUEVfUEVSQ1BVX0FSUkFZIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdCAgICAha2VybmVsX3N1cHBvcnRzKG9iaiwgRkVBVF9QRVJDUFVfREFUQSkpXFxuK1xcdFxcdFxcdG1hcC1cXHUwMDNlYXV0b2NyZWF0ZSA9IGZhbHNlO1xcbiBcXG4gXFx0XFx0aWYgKCFtYXAtXFx1MDAzZWF1dG9jcmVhdGUpIHtcXG4gXFx0XFx0XFx0cHJfZGVidWcoXFxcIm1hcCAnJXMnOiBza2lwcGVkIGF1dG8tY3JlYXRpbmcuLi5cXFxcblxcXCIsIG1hcC1cXHUwMDNlbmFtZSk7XFxuQEAgLTEwODA3LDExICsxMDg1OCwxNiBAQCBzdGF0aWMgYm9vbCBtYXBfdXNlc19yZWFsX25hbWUoY29uc3Qgc3RydWN0IGJwZl9tYXAgKm1hcClcXG4gXFx0ICogc3VjaCBtYXAncyBjb3JyZXNwb25kaW5nIEVMRiBzZWN0aW9uIG5hbWUgYXMgYSBtYXAgbmFtZS5cXG4gXFx0ICogVGhpcyBjaGVjayBkaXN0aW5ndWlzaGVzIC5kYXRhLy5yb2RhdGEgZnJvbSAuZGF0YS4qIGFuZCAucm9kYXRhLipcXG4gXFx0ICogbWFwcyB0byBrbm93IHdoaWNoIG5hbWUgaGFzIHRvIGJlIHJldHVybmVkIHRvIHRoZSB1c2VyLlxcbitcXHQgKiBNYXAgbmFtZSBvZiB0aGUgY3VzdG9tIC5wZXJjcHUuKiBtYXBzIG1pZ2h0IGJlIHRydW5jYXRlZCB0b1xcbitcXHQgKiBCUEZfT0JKX05BTUVfTEVOLTEgY2hhcnMgaW4gaW50ZXJuYWxfbWFwX25hbWUoKS4gSGVuY2UsIHBlcmNwdSBkYXRhXFxuK1xcdCAqIG1hcHMgbXVzdCB1c2UgcmVhbCBuYW1lIGZvciB0aGVpciB1c2VyLXZpc2libGUgbmFtZS5cXG4gXFx0ICovXFxuIFxcdGlmIChtYXAtXFx1MDAzZWxpYmJwZl90eXBlID09IExJQkJQRl9NQVBfREFUQSBcXHUwMDI2XFx1MDAyNiBzdHJjbXAobWFwLVxcdTAwM2VyZWFsX25hbWUsIERBVEFfU0VDKSAhPSAwKVxcbiBcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4gXFx0aWYgKG1hcC1cXHUwMDNlbGliYnBmX3R5cGUgPT0gTElCQlBGX01BUF9ST0RBVEEgXFx1MDAyNlxcdTAwMjYgc3RyY21wKG1hcC1cXHUwMDNlcmVhbF9uYW1lLCBST0RBVEFfU0VDKSAhPSAwKVxcbiBcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4rXFx0aWYgKG1hcC1cXHUwMDNlbGliYnBmX3R5cGUgPT0gTElCQlBGX01BUF9QRVJDUFUpXFxuK1xcdFxcdHJldHVybiB0cnVlO1xcbiBcXHRyZXR1cm4gZmFsc2U7XFxuIH1cXG4gXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL2xpYi9icGYvbGliYnBmX2ludGVybmFsLmggYi90b29scy9saWIvYnBmL2xpYmJwZl9pbnRlcm5hbC5oXFxuaW5kZXggN2E3NGFiYjkwNGY4Yi4uNGM0NmQzNGZjMDU1ZCAxMDA2NDRcXG4tLS0gYS90b29scy9saWIvYnBmL2xpYmJwZl9pbnRlcm5hbC5oXFxuKysrIGIvdG9vbHMvbGliL2JwZi9saWJicGZfaW50ZXJuYWwuaFxcbkBAIC00MDEsNiArNDAxLDggQEAgZW51bSBrZXJuX2ZlYXR1cmVfaWQge1xcbiBcXHRGRUFUX0JURl9MQVlPVVQsXFxuIFxcdC8qIEtlcm5lbCBzdXBwb3J0cyBCUEYgc3lzY2FsbCBjb21tb24gYXR0cmlidXRlcyAqL1xcbiBcXHRGRUFUX0JQRl9TWVNDQUxMX0NPTU1PTl9BVFRSUyxcXG4rXFx0LyogS2VybmVsIHN1cHBvcnRzIHBlcmNwdSBkYXRhICovXFxuK1xcdEZFQVRfUEVSQ1BVX0RBVEEsXFxuIFxcdF9fRkVBVF9DTlQsXFxuIH07XFxuIFxcbmRpZmYgLS1naXQgYS90b29scy9saWIvYnBmL3NrZWxfaW50ZXJuYWwuaCBiL3Rvb2xzL2xpYi9icGYvc2tlbF9pbnRlcm5hbC5oXFxuaW5kZXggNTNmZWU1M2QzNmQ1MS4uMWYzZjMzMmRmZmJlOSAxMDA2NDRcXG4tLS0gYS90b29scy9saWIvYnBmL3NrZWxfaW50ZXJuYWwuaFxcbisrKyBiL3Rvb2xzL2xpYi9icGYvc2tlbF9pbnRlcm5hbC5oXFxuQEAgLTEzMSw4ICsxMzEsMTAgQEAgc3RhdGljIGlubGluZSB2b2lkIHNrZWxfZnJlZV9tYXBfZGF0YSh2b2lkICpwLCBfX3U2NCBhZGRyLCBzaXplX3Qgc3opXFxuIHtcXG4gXFx0aWYgKGFkZHIgIT0gfjBVTEwpXFxuIFxcdFxcdGt2ZnJlZShwKTtcXG4tXFx0LyogV2hlbiBhZGRyID09IH4wVUxMIHRoZSAncCcgcG9pbnRzIHRvXFxuLVxcdCAqICgoc3RydWN0IGJwZl9hcnJheSAqKW1hcCktXFx1MDAzZXZhbHVlLiBTZWUgc2tlbF9maW5hbGl6ZV9tYXBfZGF0YS5cXG4rXFx0LypcXG4rXFx0ICogV2hlbiBhZGRyID09IH4wVUxMIHRoZSBpbml0IGJ1ZmZlciBoYXMgYWxyZWFkeSBiZWVuIHJlbGVhc2VkLlxcbitcXHQgKiBGb3Igc2tlbF9maW5hbGl6ZV9tYXBfZGF0YSgpLCAncCcgcG9pbnRzIHRvXFxuK1xcdCAqICgoc3RydWN0IGJwZl9hcnJheSAqKW1hcCktXFx1MDAzZXZhbHVlLlxcbiBcXHQgKi9cXG4gfVxcbiBcXG5AQCAtMTcwLDYgKzE3MiwxNSBAQCBzdGF0aWMgaW5saW5lIHZvaWQgKnNrZWxfZmluYWxpemVfbWFwX2RhdGEoX191NjQgKmluaXRfdmFsLCBzaXplX3QgbW1hcF9zeiwgaW50XFxuIFxcdHJldHVybiBhZGRyO1xcbiB9XFxuIFxcbitzdGF0aWMgaW5saW5lIGludCBza2VsX3Byb3RlY3RfbWFwX2RhdGEodm9pZCAqcCwgX191NjQgKmluaXRfdmFsLCBzaXplX3Qgc3opXFxuK3tcXG4rXFx0KHZvaWQpc3o7XFxuK1xcbitcXHRrdmZyZWUocCk7XFxuK1xcdCppbml0X3ZhbCA9IH4wVUxMO1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4gI2Vsc2VcXG4gXFxuIHN0YXRpYyBpbmxpbmUgdm9pZCAqc2tlbF9hbGxvYyhzaXplX3Qgc2l6ZSlcXG5AQCAtMjA4LDYgKzIxOSwxNSBAQCBzdGF0aWMgaW5saW5lIHZvaWQgKnNrZWxfZmluYWxpemVfbWFwX2RhdGEoX191NjQgKmluaXRfdmFsLCBzaXplX3QgbW1hcF9zeiwgaW50XFxuIFxcdFxcdHJldHVybiBOVUxMO1xcbiBcXHRyZXR1cm4gYWRkcjtcXG4gfVxcbitcXG4rc3RhdGljIGlubGluZSBpbnQgc2tlbF9wcm90ZWN0X21hcF9kYXRhKHZvaWQgKnAsIF9fdTY0ICppbml0X3ZhbCwgc2l6ZV90IHN6KVxcbit7XFxuK1xcdCh2b2lkKWluaXRfdmFsO1xcbitcXG4rXFx0aWYgKG1wcm90ZWN0KHAsIHN6LCBQUk9UX1JFQUQpKVxcbitcXHRcXHRyZXR1cm4gLWVycm5vO1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbiAjZW5kaWZcXG4gXFxuIHN0YXRpYyBpbmxpbmUgaW50IHNrZWxfY2xvc2VueihpbnQgZmQpXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9NYWtlZmlsZSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9NYWtlZmlsZVxcbmluZGV4IGQzNjU1YTcwNjQ4MjYuLjU2MGNlNDAxNmZiZmYgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL01ha2VmaWxlXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL01ha2VmaWxlXFxuQEAgLTUzMSw3ICs1MzEsNyBAQCBMU0tFTFNfU0lHTkVEIDo9IGZlbnRyeV90ZXN0LmMgZmV4aXRfdGVzdC5jIGF0b21pY3MuY1xcbiBcXG4gIyBHZW5lcmF0ZSBib3RoIGxpZ2h0IHNrZWxldG9uIGFuZCBsaWJicGYgc2tlbGV0b24gZm9yIHRoZXNlXFxuIExTS0VMU19FWFRSQSA6PSB0ZXN0X2tzeW1zX21vZHVsZS5jIHRlc3Rfa3N5bXNfd2Vhay5jIGtmdW5jX2NhbGxfdGVzdC5jIFxcXFxcXG4tXFx0a2Z1bmNfY2FsbF90ZXN0X3N1YnByb2cuY1xcbitcXHRrZnVuY19jYWxsX3Rlc3Rfc3VicHJvZy5jIHRlc3RfZ2xvYmFsX3BlcmNwdV9kYXRhLmNcXG4gU0tFTF9CTEFDS0xJU1QgKz0gJCQoTFNLRUxTKSAkJChMU0tFTFNfU0lHTkVEKVxcbiBcXG4gdGVzdF9zdGF0aWNfbGlua2VkLnNrZWwuaC1kZXBzIDo9IHRlc3Rfc3RhdGljX2xpbmtlZDEuYnBmLm8gdGVzdF9zdGF0aWNfbGlua2VkMi5icGYub1xcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9nbG9iYWxfZGF0YV9pbml0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9nbG9iYWxfZGF0YV9pbml0LmNcXG5pbmRleCA4NDY2MzMyZDc0MDZmLi4yNjI1NjUxYjM0YzdlIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2dsb2JhbF9kYXRhX2luaXQuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2dsb2JhbF9kYXRhX2luaXQuY1xcbkBAIC0xLDUgKzEsOCBAQFxcbiAvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbiAjaW5jbHVkZSBcXHUwMDNjdGVzdF9wcm9ncy5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXFwiYnBmL2xpYmJwZl9pbnRlcm5hbC5oXFxcIlxcbisjaW5jbHVkZSBcXFwidGVzdF9nbG9iYWxfcGVyY3B1X2RhdGEuc2tlbC5oXFxcIlxcbisjaW5jbHVkZSBcXFwidGVzdF9nbG9iYWxfcGVyY3B1X2RhdGEubHNrZWwuaFxcXCJcXG4gXFxuIHZvaWQgdGVzdF9nbG9iYWxfZGF0YV9pbml0KHZvaWQpXFxuIHtcXG5AQCAtNjAsMyArNjMsMzEwIEBAIHZvaWQgdGVzdF9nbG9iYWxfZGF0YV9pbml0KHZvaWQpXFxuIFxcdGZyZWUobmV3dmFsKTtcXG4gXFx0YnBmX29iamVjdF9fY2xvc2Uob2JqKTtcXG4gfVxcbitcXG4rc3RhdGljIHZvaWQgdGVzdF9wZXJjcHVfZGF0YV9vbl9jcHVzKHN0cnVjdCBicGZfbWFwICptYXAsIGludCBtYXBfZmQsIGludCBwcm9nX2ZkLCBpbnQgKnJ1bnApXFxuK3tcXG4rXFx0X191NjQgYXJnc1syXSA9IHsweDEyMzRVTEwsIDB4NTY3OFVMTH07XFxuK1xcdExJQkJQRl9PUFRTKGJwZl90ZXN0X3J1bl9vcHRzLCB0b3B0cyxcXG4rXFx0XFx0ICAgIC5jdHhfaW4gPSBhcmdzLFxcbitcXHRcXHQgICAgLmN0eF9zaXplX2luID0gc2l6ZW9mKGFyZ3MpLFxcbitcXHRcXHQgICAgLmZsYWdzID0gQlBGX0ZfVEVTVF9SVU5fT05fQ1BVLFxcbitcXHQpO1xcbitcXHRpbnQgaSwgZXJyLCBrZXkgPSAwLCBudW1fb25saW5lLCBydW4gPSAwO1xcbitcXHRib29sICpvbmxpbmU7XFxuK1xcbitcXHRlcnIgPSBwYXJzZV9jcHVfbWFza19maWxlKFxcXCIvc3lzL2RldmljZXMvc3lzdGVtL2NwdS9vbmxpbmVcXFwiLCBcXHUwMDI2b25saW5lLCBcXHUwMDI2bnVtX29ubGluZSk7XFxuK1xcdGlmICghQVNTRVJUX09LKGVyciwgXFxcInBhcnNlX2NwdV9tYXNrX2ZpbGVcXFwiKSlcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0LyogcnVuIG9uIGV2ZXJ5IG9ubGluZS1DUFUgKi9cXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIG51bV9vbmxpbmU7IGkrKykge1xcbitcXHRcXHRzdHJ1Y3QgdGVzdF9nbG9iYWxfcGVyY3B1X2RhdGFfX3BlcmNwdSBkYXRhID0ge307XFxuK1xcdFxcdF9fdTY0IGZsYWdzO1xcbitcXG4rXFx0XFx0aWYgKCFvbmxpbmVbaV0pXFxuK1xcdFxcdFxcdGNvbnRpbnVlO1xcbitcXG4rXFx0XFx0dG9wdHMuY3B1ID0gaTtcXG4rXFx0XFx0dG9wdHMucmV0dmFsID0gLTE7XFxuK1xcdFxcdGVyciA9IGJwZl9wcm9nX3Rlc3RfcnVuX29wdHMocHJvZ19mZCwgXFx1MDAyNnRvcHRzKTtcXG4rXFx0XFx0QVNTRVJUX09LKGVyciwgXFxcImJwZl9wcm9nX3Rlc3RfcnVuX29wdHNcXFwiKTtcXG4rXFx0XFx0QVNTRVJUX0VRKHRvcHRzLnJldHZhbCwgMCwgXFxcImJwZl9wcm9nX3Rlc3RfcnVuX29wdHMgcmV0dmFsXFxcIik7XFxuK1xcbitcXHRcXHRmbGFncyA9ICgoX191NjQpIGkgXFx1MDAzY1xcdTAwM2MgMzIpIHwgQlBGX0ZfQ1BVO1xcbitcXHRcXHRpZiAobWFwKVxcbitcXHRcXHRcXHRlcnIgPSBicGZfbWFwX19sb29rdXBfZWxlbShtYXAsIFxcdTAwMjZrZXksIHNpemVvZihrZXkpLCBcXHUwMDI2ZGF0YSwgc2l6ZW9mKGRhdGEpLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgICBmbGFncyk7XFxuK1xcdFxcdGVsc2VcXG4rXFx0XFx0XFx0ZXJyID0gYnBmX21hcF9sb29rdXBfZWxlbV9mbGFncyhtYXBfZmQsIFxcdTAwMjZrZXksIFxcdTAwMjZkYXRhLCBmbGFncyk7XFxuK1xcdFxcdGlmICghQVNTRVJUX09LKGVyciwgXFxcImxvb2t1cF9lbGVtIG9uIGNwdVxcXCIpKVxcbitcXHRcXHRcXHRicmVhaztcXG4rXFxuK1xcdFxcdEFTU0VSVF9FUSgqcnVucCwgKytydW4sIFxcXCJydW5cXFwiKTtcXG4rXFx0XFx0QVNTRVJUX0VRKGRhdGEuY3B1X2lkLCBpLCBcXFwiZGF0YS5jcHVfaWRcXFwiKTtcXG4rXFx0XFx0QVNTRVJUX0VRKGRhdGEuZGF0YSwgMSwgXFxcImRhdGEuZGF0YVxcXCIpO1xcbitcXHRcXHRBU1NFUlRfVFJVRShkYXRhLnNldCwgXFxcImRhdGEuc2V0XFxcIik7XFxuK1xcdFxcdEFTU0VSVF9FUShkYXRhLm51bXNbNl0sIDB4YzBkZSwgXFxcImRhdGEubnVtc1s2XVxcXCIpO1xcbitcXHRcXHRBU1NFUlRfRVEoZGF0YS5zdHJ1Y3RfZGF0YS5pLCAxLCBcXFwic3RydWN0X2RhdGEuaVxcXCIpO1xcbitcXHRcXHRBU1NFUlRfVFJVRShkYXRhLnN0cnVjdF9kYXRhLnNldCwgXFxcInN0cnVjdF9kYXRhLnNldFxcXCIpO1xcbitcXHRcXHRBU1NFUlRfRVEoZGF0YS5zdHJ1Y3RfZGF0YS5udW1zWzZdLCAweGMwZGUsIFxcXCJzdHJ1Y3RfZGF0YS5udW1zWzZdXFxcIik7XFxuK1xcdH1cXG4rXFxuK1xcdGZyZWUob25saW5lKTtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgdGVzdF9nbG9iYWxfcGVyY3B1X2RhdGFfaW5pdCh2b2lkKVxcbit7XFxuK1xcdHN0cnVjdCB0ZXN0X2dsb2JhbF9wZXJjcHVfZGF0YV9fcGVyY3B1IGluaXRfdmFsdWUgPSB7fTtcXG4rXFx0c3RydWN0IHRlc3RfZ2xvYmFsX3BlcmNwdV9kYXRhX19wZXJjcHUgKmluaXRfZGF0YTtcXG4rXFx0c3RydWN0IHRlc3RfZ2xvYmFsX3BlcmNwdV9kYXRhICpza2VsID0gTlVMTDtcXG4rXFx0c2l6ZV90IGluaXRfZGF0YV9zejtcXG4rXFx0c3RydWN0IGJwZl9tYXAgKm1hcDtcXG4rXFx0aW50IHByb2dfZmQsIGVycjtcXG4rXFxuK1xcdHNrZWwgPSB0ZXN0X2dsb2JhbF9wZXJjcHVfZGF0YV9fb3BlbigpO1xcbitcXHRpZiAoIUFTU0VSVF9PS19QVFIoc2tlbCwgXFxcInRlc3RfZ2xvYmFsX3BlcmNwdV9kYXRhX19vcGVuXFxcIikpXFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXHRpZiAoIUFTU0VSVF9PS19QVFIoc2tlbC1cXHUwMDNlcGVyY3B1LCBcXFwic2tlbC1cXHUwMDNlcGVyY3B1XFxcIikpXFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXHRpZiAoIUFTU0VSVF9PS19QVFIoc2tlbC1cXHUwMDNlZGF0YV9wZXJjcHUsIFxcXCJza2VsLVxcdTAwM2VkYXRhX3BlcmNwdVxcXCIpKVxcbitcXHRcXHRnb3RvIG91dDtcXG4rXFx0aWYgKCFBU1NFUlRfT0tfUFRSKHNrZWwtXFx1MDAzZXBlcmNwdV9kYXRhLCBcXFwic2tlbC1cXHUwMDNlcGVyY3B1X2RhdGFcXFwiKSlcXG4rXFx0XFx0Z290byBvdXQ7XFxuK1xcdGlmICghQVNTRVJUX09LX1BUUihza2VsLVxcdTAwM2VwZXJjcHVfbG9vb29vb29vb25nLCBcXFwic2tlbC1cXHUwMDNlcGVyY3B1X2xvb29vb29vb29uZ1xcXCIpKVxcbitcXHRcXHRnb3RvIG91dDtcXG4rXFxuK1xcdEFTU0VSVF9TVFJFUShicGZfbWFwX19uYW1lKHNrZWwtXFx1MDAzZW1hcHMucGVyY3B1X2RhdGEpLCBcXFwiLnBlcmNwdS5kYXRhXFxcIixcXG4rXFx0XFx0ICAgICBcXFwiLnBlcmNwdS5kYXRhIG1hcCBuYW1lXFxcIik7XFxuK1xcdEFTU0VSVF9TVFJFUShicGZfbWFwX19uYW1lKHNrZWwtXFx1MDAzZW1hcHMuZGF0YV9wZXJjcHUpLCBcXFwiLmRhdGEucGVyY3B1XFxcIixcXG4rXFx0XFx0ICAgICBcXFwiLmRhdGEucGVyY3B1IG1hcCBuYW1lXFxcIik7XFxuK1xcdEFTU0VSVF9TVFJFUShicGZfbWFwX19uYW1lKHNrZWwtXFx1MDAzZW1hcHMucGVyY3B1X2xvb29vb29vb29uZyksIFxcXCIucGVyY3B1Lmxvb29vb29vb29uZ1xcXCIsXFxuK1xcdFxcdCAgICAgXFxcImxvbmcgbWFwIG5hbWVcXFwiKTtcXG4rXFx0QVNTRVJUX1NUUkVRKGJwZl9tYXBfX25hbWUoc2tlbC1cXHUwMDNlbWFwcy5wZXJjcHUpLCBcXFwiLnBlcmNwdVxcXCIsIFxcXCJtYXAgbmFtZVxcXCIpO1xcbitcXHRBU1NFUlRfRVEoc2tlbC1cXHUwMDNlcGVyY3B1LVxcdTAwM2VkYXRhLCAtMSwgXFxcInNrZWwtXFx1MDAzZXBlcmNwdS1cXHUwMDNlZGF0YVxcXCIpO1xcbitcXHRBU1NFUlRfRkFMU0Uoc2tlbC1cXHUwMDNlcGVyY3B1LVxcdTAwM2VzZXQsIFxcXCJza2VsLVxcdTAwM2VwZXJjcHUtXFx1MDAzZXNldFxcXCIpO1xcbitcXHRBU1NFUlRfRVEoc2tlbC1cXHUwMDNlcGVyY3B1LVxcdTAwM2VudW1zWzZdLCAwLCBcXFwic2tlbC1cXHUwMDNlcGVyY3B1LVxcdTAwM2VudW1zWzZdXFxcIik7XFxuK1xcdEFTU0VSVF9FUShza2VsLVxcdTAwM2VwZXJjcHUtXFx1MDAzZXN0cnVjdF9kYXRhLmksIC0xLCBcXFwic3RydWN0X2RhdGEuaVxcXCIpO1xcbitcXHRBU1NFUlRfRkFMU0Uoc2tlbC1cXHUwMDNlcGVyY3B1LVxcdTAwM2VzdHJ1Y3RfZGF0YS5zZXQsIFxcXCJzdHJ1Y3RfZGF0YS5zZXRcXFwiKTtcXG4rXFx0QVNTRVJUX0VRKHNrZWwtXFx1MDAzZXBlcmNwdS1cXHUwMDNlc3RydWN0X2RhdGEubnVtc1s2XSwgMCwgXFxcInN0cnVjdF9kYXRhLm51bXNbNl1cXFwiKTtcXG4rXFxuK1xcdG1hcCA9IHNrZWwtXFx1MDAzZW1hcHMucGVyY3B1O1xcbitcXHRpZiAoIUFTU0VSVF9FUShicGZfbWFwX190eXBlKG1hcCksIEJQRl9NQVBfVFlQRV9QRVJDUFVfQVJSQVksIFxcXCJicGZfbWFwX190eXBlXFxcIikpXFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXG4rXFx0aW5pdF92YWx1ZS5kYXRhID0gMjtcXG4rXFx0aW5pdF92YWx1ZS5udW1zWzZdID0gLTE7XFxuK1xcdGluaXRfdmFsdWUuc3RydWN0X2RhdGEuaSA9IDI7XFxuK1xcdGluaXRfdmFsdWUuc3RydWN0X2RhdGEubnVtc1s2XSA9IC0xO1xcbitcXHRlcnIgPSBicGZfbWFwX19zZXRfaW5pdGlhbF92YWx1ZShtYXAsIFxcdTAwMjZpbml0X3ZhbHVlLCBzaXplb2YoaW5pdF92YWx1ZSkpO1xcbitcXHRpZiAoIUFTU0VSVF9PSyhlcnIsIFxcXCJicGZfbWFwX19zZXRfaW5pdGlhbF92YWx1ZVxcXCIpKVxcbitcXHRcXHRnb3RvIG91dDtcXG4rXFxuK1xcdGluaXRfZGF0YSA9IGJwZl9tYXBfX2luaXRpYWxfdmFsdWUobWFwLCBcXHUwMDI2aW5pdF9kYXRhX3N6KTtcXG4rXFx0aWYgKCFBU1NFUlRfT0tfUFRSKGluaXRfZGF0YSwgXFxcImJwZl9tYXBfX2luaXRpYWxfdmFsdWVcXFwiKSlcXG4rXFx0XFx0Z290byBvdXQ7XFxuK1xcbitcXHRBU1NFUlRfRVEoaW5pdF9kYXRhLVxcdTAwM2VkYXRhLCBpbml0X3ZhbHVlLmRhdGEsIFxcXCJpbml0X3ZhbHVlIGRhdGFcXFwiKTtcXG4rXFx0QVNTRVJUX0VRKGluaXRfZGF0YS1cXHUwMDNlc2V0LCBpbml0X3ZhbHVlLnNldCwgXFxcImluaXRfdmFsdWUgc2V0XFxcIik7XFxuK1xcdEFTU0VSVF9FUShpbml0X2RhdGEtXFx1MDAzZXN0cnVjdF9kYXRhLmksIGluaXRfdmFsdWUuc3RydWN0X2RhdGEuaSwgXFxcImluaXRfdmFsdWUgc3RydWN0X2RhdGEuaVxcXCIpO1xcbitcXHRBU1NFUlRfRVEoaW5pdF9kYXRhLVxcdTAwM2VzdHJ1Y3RfZGF0YS5udW1zWzZdLCBpbml0X3ZhbHVlLnN0cnVjdF9kYXRhLm51bXNbNl0sXFxuK1xcdFxcdCAgXFxcImluaXRfdmFsdWUgc3RydWN0X2RhdGEubnVtc1s2XVxcXCIpO1xcbitcXHRBU1NFUlRfRVEoaW5pdF9kYXRhX3N6LCBzaXplb2YoaW5pdF92YWx1ZSksIFxcXCJpbml0X3ZhbHVlIHNpemVcXFwiKTtcXG4rXFx0QVNTRVJUX0VRKCh2b2lkICopIGluaXRfZGF0YSwgKHZvaWQgKikgc2tlbC1cXHUwMDNlcGVyY3B1LCBcXFwic2tlbC1cXHUwMDNlcGVyY3B1IGVxIGluaXRfZGF0YVxcXCIpO1xcbitcXHRBU1NFUlRfRVEoc2tlbC1cXHUwMDNlcGVyY3B1LVxcdTAwM2VkYXRhLCBpbml0X3ZhbHVlLmRhdGEsIFxcXCJza2VsLVxcdTAwM2VwZXJjcHUtXFx1MDAzZWRhdGFcXFwiKTtcXG4rXFx0QVNTRVJUX0VRKHNrZWwtXFx1MDAzZXBlcmNwdS1cXHUwMDNlc2V0LCBpbml0X3ZhbHVlLnNldCwgXFxcInNrZWwtXFx1MDAzZXBlcmNwdS1cXHUwMDNlc2V0XFxcIik7XFxuK1xcdEFTU0VSVF9FUShza2VsLVxcdTAwM2VwZXJjcHUtXFx1MDAzZXN0cnVjdF9kYXRhLmksIGluaXRfdmFsdWUuc3RydWN0X2RhdGEuaSxcXG4rXFx0XFx0ICBcXFwic2tlbC1cXHUwMDNlcGVyY3B1LVxcdTAwM2VzdHJ1Y3RfZGF0YS5pXFxcIik7XFxuK1xcdEFTU0VSVF9FUShza2VsLVxcdTAwM2VwZXJjcHUtXFx1MDAzZXN0cnVjdF9kYXRhLm51bXNbNl0sIGluaXRfdmFsdWUuc3RydWN0X2RhdGEubnVtc1s2XSxcXG4rXFx0XFx0ICBcXFwic2tlbC1cXHUwMDNlcGVyY3B1LVxcdTAwM2VzdHJ1Y3RfZGF0YS5udW1zWzZdXFxcIik7XFxuK1xcbitcXHRlcnIgPSB0ZXN0X2dsb2JhbF9wZXJjcHVfZGF0YV9fbG9hZChza2VsKTtcXG4rXFx0aWYgKCFBU1NFUlRfT0soZXJyLCBcXFwidGVzdF9nbG9iYWxfcGVyY3B1X2RhdGFfX2xvYWRcXFwiKSlcXG4rXFx0XFx0Z290byBvdXQ7XFxuK1xcbitcXHRBU1NFUlRfT0tfUFRSKHNrZWwtXFx1MDAzZXBlcmNwdSwgXFxcInNrZWwtXFx1MDAzZXBlcmNwdVxcXCIpO1xcbitcXG4rXFx0cHJvZ19mZCA9IGJwZl9wcm9ncmFtX19mZChza2VsLVxcdTAwM2Vwcm9ncy51cGRhdGVfcGVyY3B1X2RhdGEpO1xcbitcXHR0ZXN0X3BlcmNwdV9kYXRhX29uX2NwdXMobWFwLCBicGZfbWFwX19mZChtYXApLCBwcm9nX2ZkLCBcXHUwMDI2c2tlbC1cXHUwMDNlYnNzLVxcdTAwM2VydW4pO1xcbitcXG4rb3V0OlxcbitcXHR0ZXN0X2dsb2JhbF9wZXJjcHVfZGF0YV9fZGVzdHJveShza2VsKTtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgdGVzdF9nbG9iYWxfcGVyY3B1X2RhdGFfbHNrZWwodm9pZClcXG4re1xcbitcXHRzdHJ1Y3QgdGVzdF9nbG9iYWxfcGVyY3B1X2RhdGFfbHNrZWwgKmxza2VsID0gTlVMTDtcXG4rXFx0aW50IHByb2dfZmQsIG1hcF9mZDtcXG4rXFxuK1xcdGxza2VsID0gdGVzdF9nbG9iYWxfcGVyY3B1X2RhdGFfbHNrZWxfX29wZW5fYW5kX2xvYWQoKTtcXG4rXFx0aWYgKCFBU1NFUlRfT0tfUFRSKGxza2VsLCBcXFwidGVzdF9nbG9iYWxfcGVyY3B1X2RhdGFfbHNrZWxfX29wZW5fYW5kX2xvYWRcXFwiKSlcXG4rXFx0XFx0Z290byBvdXQ7XFxuK1xcbitcXHRtYXBfZmQgPSBsc2tlbC1cXHUwMDNlbWFwcy5wZXJjcHUubWFwX2ZkO1xcbitcXHRwcm9nX2ZkID0gbHNrZWwtXFx1MDAzZXByb2dzLnVwZGF0ZV9wZXJjcHVfZGF0YS5wcm9nX2ZkO1xcbitcXHR0ZXN0X3BlcmNwdV9kYXRhX29uX2NwdXMoTlVMTCwgbWFwX2ZkLCBwcm9nX2ZkLCBcXHUwMDI2bHNrZWwtXFx1MDAzZWJzcy1cXHUwMDNlcnVuKTtcXG4rXFxuK291dDpcXG4rXFx0dGVzdF9nbG9iYWxfcGVyY3B1X2RhdGFfbHNrZWxfX2Rlc3Ryb3kobHNrZWwpO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IGNyZWF0ZV9yZG9ubHlfcGVyY3B1X2FycmF5KHZvaWQpXFxuK3tcXG4rXFx0TElCQlBGX09QVFMoYnBmX21hcF9jcmVhdGVfb3B0cywgbWFwX29wdHMsXFxuK1xcdFxcdCAgICAubWFwX2ZsYWdzID0gQlBGX0ZfUkRPTkxZX1BST0csXFxuK1xcdCk7XFxuK1xcdGludCBrZXkgPSAwLCBtYXBfZmQsIGVycjtcXG4rXFx0X191NjQgdmFsdWUgPSAwO1xcbitcXG4rXFx0bWFwX2ZkID0gYnBmX21hcF9jcmVhdGUoQlBGX01BUF9UWVBFX1BFUkNQVV9BUlJBWSwgXFxcInBlcmNwdV9yb19tYXBcXFwiLCBzaXplb2YoaW50KSxcXG4rXFx0XFx0XFx0XFx0c2l6ZW9mKF9fdTY0KSwgMSwgXFx1MDAyNm1hcF9vcHRzKTtcXG4rXFx0aWYgKCFBU1NFUlRfR0UobWFwX2ZkLCAwLCBcXFwiYnBmX21hcF9jcmVhdGVcXFwiKSlcXG4rXFx0XFx0cmV0dXJuIC0xO1xcbitcXG4rXFx0ZXJyID0gYnBmX21hcF91cGRhdGVfZWxlbShtYXBfZmQsIFxcdTAwMjZrZXksIFxcdTAwMjZ2YWx1ZSwgQlBGX0ZfQUxMX0NQVVMpO1xcbitcXHRpZiAoIUFTU0VSVF9PSyhlcnIsIFxcXCJicGZfbWFwX3VwZGF0ZV9lbGVtXFxcIikpXFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXG4rXFx0ZXJyID0gYnBmX21hcF9mcmVlemUobWFwX2ZkKTtcXG4rXFx0aWYgKCFBU1NFUlRfT0soZXJyLCBcXFwiYnBmX21hcF9mcmVlemVcXFwiKSlcXG4rXFx0XFx0Z290byBvdXQ7XFxuK1xcbitcXHRyZXR1cm4gbWFwX2ZkO1xcbitcXG4rb3V0OlxcbitcXHRjbG9zZShtYXBfZmQpO1xcbitcXHRyZXR1cm4gLTE7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIHRlc3RfZ2xvYmFsX3BlcmNwdV9kYXRhX3Jkb25seV9kaXJlY3RfcmVhZCh2b2lkKVxcbit7XFxuK1xcdC8qXFxuK1xcdCAqIFJhdyBpbnN0cnVjdGlvbnMgd2l0aCBtYW51YWxseSBwcmVwYXJlZCByZG9ubHkgcGVyY3B1X2FycmF5IG1hcFxcbitcXHQgKiBmb3IgdGVzdGluZyBkaXJlY3QtcmVhZCBnbG9iYWwgcGVyY3B1IGRhdGEsIGJlY2F1c2UgbGliYnBmXFxuK1xcdCAqIGRvZXNuJ3QgaGF2ZSByZG9ubHkgaW50ZXJuYWwgcGVyY3B1X2FycmF5IG1hcCBzdXBwb3J0IGZvclxcbitcXHQgKiBnbG9iYWwgcGVyY3B1IGRhdGEuXFxuK1xcdCAqL1xcbitcXHRzdHJ1Y3QgYnBmX2luc24gaW5zbnNbXSA9IHtcXG4rXFx0XFx0QlBGX0xEX01BUF9WQUxVRShCUEZfUkVHXzEsIDAsIDApLFxcbitcXHRcXHRCUEZfTERYX01FTShCUEZfRFcsIEJQRl9SRUdfMCwgQlBGX1JFR18xLCAwKSxcXG4rXFx0XFx0QlBGX0VYSVRfSU5TTigpLFxcbitcXHR9O1xcbitcXHRpbnQgbWFwX2ZkLCBwcm9nX2ZkO1xcbitcXG4rXFx0bWFwX2ZkID0gY3JlYXRlX3Jkb25seV9wZXJjcHVfYXJyYXkoKTtcXG4rXFx0aWYgKG1hcF9mZCBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdGluc25zWzBdLmltbSA9IG1hcF9mZDtcXG4rXFx0cHJvZ19mZCA9IGJwZl9wcm9nX2xvYWQoQlBGX1BST0dfVFlQRV9TT0NLRVRfRklMVEVSLCBcXFwicGVyY3B1X3JvX3Byb2dcXFwiLCBcXFwiR1BMXFxcIiwgaW5zbnMsXFxuK1xcdFxcdFxcdFxcdEFSUkFZX1NJWkUoaW5zbnMpLCBOVUxMKTtcXG4rXFx0aWYgKEFTU0VSVF9HRShwcm9nX2ZkLCAwLCBcXFwiYnBmX3Byb2dfbG9hZFxcXCIpKVxcbitcXHRcXHRjbG9zZShwcm9nX2ZkKTtcXG4rXFx0Y2xvc2UobWFwX2ZkKTtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgdGVzdF9nbG9iYWxfcGVyY3B1X2RhdGFfcmRvbmx5X2RpcmVjdF93cml0ZSh2b2lkKVxcbit7XFxuK1xcdExJQkJQRl9PUFRTKGJwZl9wcm9nX2xvYWRfb3B0cywgcHJvZ19vcHRzKTtcXG4rXFx0LyogU2VlIHRoZSBjb21tZW50IGluIHRlc3RfZ2xvYmFsX3BlcmNwdV9kYXRhX3Jkb25seV9kaXJlY3RfcmVhZCgpICovXFxuK1xcdHN0cnVjdCBicGZfaW5zbiBpbnNuc1tdID0ge1xcbitcXHRcXHRCUEZfTERfTUFQX1ZBTFVFKEJQRl9SRUdfMSwgMCwgMCksXFxuK1xcdFxcdEJQRl9MRFhfTUVNKEJQRl9EVywgQlBGX1JFR18wLCBCUEZfUkVHXzEsIDApLFxcbitcXHRcXHRCUEZfU1RfTUVNKEJQRl9EVywgQlBGX1JFR18xLCAwLCAwKSxcXG4rXFx0XFx0QlBGX0VYSVRfSU5TTigpLFxcbitcXHR9O1xcbitcXHRjaGFyIGxvZ19idWZbMjU2XSA9IHt9O1xcbitcXHRpbnQgbWFwX2ZkLCBwcm9nX2ZkO1xcbitcXG4rXFx0cHJvZ19vcHRzLmxvZ19idWYgPSBsb2dfYnVmO1xcbitcXHRwcm9nX29wdHMubG9nX3NpemUgPSBzaXplb2YobG9nX2J1Zik7XFxuK1xcdHByb2dfb3B0cy5sb2dfbGV2ZWwgPSAxO1xcbitcXG4rXFx0bWFwX2ZkID0gY3JlYXRlX3Jkb25seV9wZXJjcHVfYXJyYXkoKTtcXG4rXFx0aWYgKG1hcF9mZCBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdGluc25zWzBdLmltbSA9IG1hcF9mZDtcXG4rXFx0cHJvZ19mZCA9IGJwZl9wcm9nX2xvYWQoQlBGX1BST0dfVFlQRV9TT0NLRVRfRklMVEVSLCBcXFwicGVyY3B1X3JvX3Byb2dcXFwiLCBcXFwiR1BMXFxcIiwgaW5zbnMsXFxuK1xcdFxcdFxcdFxcdEFSUkFZX1NJWkUoaW5zbnMpLCBcXHUwMDI2cHJvZ19vcHRzKTtcXG4rXFx0aWYgKCFBU1NFUlRfTFQocHJvZ19mZCwgMCwgXFxcImJwZl9wcm9nX2xvYWRcXFwiKSlcXG4rXFx0XFx0Y2xvc2UocHJvZ19mZCk7XFxuK1xcdGVsc2VcXG4rXFx0XFx0QVNTRVJUX0hBU19TVUJTVFIobG9nX2J1ZiwgXFxcIndyaXRlIGludG8gbWFwIGZvcmJpZGRlblxcXCIsIFxcXCJ2ZXJpZmllciBsb2dcXFwiKTtcXG4rXFx0Y2xvc2UobWFwX2ZkKTtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgdGVzdF9nbG9iYWxfcGVyY3B1X2RhdGFfdmVyaWZpZXJfbG9nKHZvaWQpXFxuK3tcXG4rXFx0UlVOX1RFU1RTKHRlc3RfZ2xvYmFsX3BlcmNwdV9kYXRhKTtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgdGVzdF9nbG9iYWxfcGVyY3B1X2RhdGFfaXRlcih2b2lkKVxcbit7XFxuK1xcdERFQ0xBUkVfTElCQlBGX09QVFMoYnBmX2l0ZXJfYXR0YWNoX29wdHMsIG9wdHMpO1xcbitcXHRzdHJ1Y3QgdGVzdF9nbG9iYWxfcGVyY3B1X2RhdGEgKnNrZWw7XFxuK1xcdHVuaW9uIGJwZl9pdGVyX2xpbmtfaW5mbyBsaW5mbyA9IHt9O1xcbitcXHRzdHJ1Y3QgYnBmX2xpbmsgKmxpbmsgPSBOVUxMO1xcbitcXHRpbnQgZmQsIG51bV9jcHVzLCBsZW4sIGVycjtcXG4rXFx0Y2hhciBidWZbMTZdO1xcbitcXG4rXFx0bnVtX2NwdXMgPSBsaWJicGZfbnVtX3Bvc3NpYmxlX2NwdXMoKTtcXG4rXFx0aWYgKCFBU1NFUlRfR1QobnVtX2NwdXMsIDAsIFxcXCJsaWJicGZfbnVtX3Bvc3NpYmxlX2NwdXNcXFwiKSlcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0c2tlbCA9IHRlc3RfZ2xvYmFsX3BlcmNwdV9kYXRhX19vcGVuKCk7XFxuK1xcdGlmICghQVNTRVJUX09LX1BUUihza2VsLCBcXFwidGVzdF9nbG9iYWxfcGVyY3B1X2RhdGFfX29wZW5cXFwiKSlcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0c2tlbC1cXHUwMDNlcm9kYXRhLVxcdTAwM2VudW1fY3B1cyA9IG51bV9jcHVzO1xcbitcXHRza2VsLVxcdTAwM2Vyb2RhdGEtXFx1MDAzZW9mZnNldG9mX251bSA9IG9mZnNldG9mKHN0cnVjdCB0ZXN0X2dsb2JhbF9wZXJjcHVfZGF0YV9fcGVyY3B1LCBzdHJ1Y3RfZGF0YSk7XFxuK1xcdHNrZWwtXFx1MDAzZXJvZGF0YS1cXHUwMDNlb2Zmc2V0b2ZfbnVtICs9IHNpemVvZihza2VsLVxcdTAwM2VwZXJjcHUtXFx1MDAzZXN0cnVjdF9kYXRhKSAtIHNpemVvZihpbnQpO1xcbitcXHRza2VsLVxcdTAwM2Vyb2RhdGEtXFx1MDAzZWVsZW1fc3ogPSByb3VuZHVwKHNpemVvZihzdHJ1Y3QgdGVzdF9nbG9iYWxfcGVyY3B1X2RhdGFfX3BlcmNwdSksIDgpO1xcbitcXHRza2VsLVxcdTAwM2VwZXJjcHUtXFx1MDAzZXN0cnVjdF9kYXRhLm51bXNbNl0gPSAweGMwZGU7XFxuK1xcbitcXHRlcnIgPSB0ZXN0X2dsb2JhbF9wZXJjcHVfZGF0YV9fbG9hZChza2VsKTtcXG4rXFx0aWYgKCFBU1NFUlRfT0soZXJyLCBcXFwidGVzdF9nbG9iYWxfcGVyY3B1X2RhdGFfX2xvYWRcXFwiKSlcXG4rXFx0XFx0Z290byBvdXQ7XFxuK1xcbitcXHRsaW5mby5tYXAubWFwX2ZkID0gYnBmX21hcF9fZmQoc2tlbC1cXHUwMDNlbWFwcy5wZXJjcHUpO1xcbitcXHRvcHRzLmxpbmtfaW5mbyA9IFxcdTAwMjZsaW5mbztcXG4rXFx0b3B0cy5saW5rX2luZm9fbGVuID0gc2l6ZW9mKGxpbmZvKTtcXG4rXFx0bGluayA9IGJwZl9wcm9ncmFtX19hdHRhY2hfaXRlcihza2VsLVxcdTAwM2Vwcm9ncy5kdW1wX3BlcmNwdV9kYXRhLCBcXHUwMDI2b3B0cyk7XFxuK1xcdGlmICghQVNTRVJUX09LX1BUUihsaW5rLCBcXFwiYnBmX3Byb2dyYW1fX2F0dGFjaF9pdGVyXFxcIikpXFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXG4rXFx0ZmQgPSBicGZfaXRlcl9jcmVhdGUoYnBmX2xpbmtfX2ZkKGxpbmspKTtcXG4rXFx0aWYgKCFBU1NFUlRfR0UoZmQsIDAsIFxcXCJicGZfaXRlcl9jcmVhdGVcXFwiKSlcXG4rXFx0XFx0Z290byBvdXQ7XFxuK1xcbitcXHR3aGlsZSAoKGxlbiA9IHJlYWQoZmQsIGJ1Ziwgc2l6ZW9mKGJ1ZikpKSBcXHUwMDNlIDApXFxuK1xcdFxcdGRvIHsgfSB3aGlsZSAoMCk7XFxuK1xcdEFTU0VSVF9FUShsZW4sIDAsIFxcXCJyZWFkIGl0ZXJcXFwiKTtcXG4rXFx0QVNTRVJUX1RSVUUoc2tlbC1cXHUwMDNlYnNzLVxcdTAwM2VydW5faXRlciwgXFxcInJ1bl9pdGVyXFxcIik7XFxuK1xcdEFTU0VSVF9FUShza2VsLVxcdTAwM2Vic3MtXFx1MDAzZXBlcmNwdV9kYXRhX3N1bSwgMHhjMGRlICogbnVtX2NwdXMsIFxcXCJwZXJjcHVfZGF0YV9zdW1cXFwiKTtcXG4rXFxuK1xcdGNsb3NlKGZkKTtcXG4rb3V0OlxcbitcXHRicGZfbGlua19fZGVzdHJveShsaW5rKTtcXG4rXFx0dGVzdF9nbG9iYWxfcGVyY3B1X2RhdGFfX2Rlc3Ryb3koc2tlbCk7XFxuK31cXG4rXFxuK3ZvaWQgdGVzdF9nbG9iYWxfcGVyY3B1X2RhdGEodm9pZClcXG4re1xcbitcXHRpZiAoIWZlYXRfc3VwcG9ydGVkKE5VTEwsIEZFQVRfUEVSQ1BVX0RBVEEpKSB7XFxuK1xcdFxcdHRlc3RfX3NraXAoKTtcXG4rXFx0XFx0cmV0dXJuO1xcbitcXHR9XFxuK1xcbitcXHRpZiAodGVzdF9fc3RhcnRfc3VidGVzdChcXFwiaW5pdFxcXCIpKVxcbitcXHRcXHR0ZXN0X2dsb2JhbF9wZXJjcHVfZGF0YV9pbml0KCk7XFxuK1xcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFxcXCJsc2tlbFxcXCIpKVxcbitcXHRcXHR0ZXN0X2dsb2JhbF9wZXJjcHVfZGF0YV9sc2tlbCgpO1xcbitcXHRpZiAodGVzdF9fc3RhcnRfc3VidGVzdChcXFwicmRvbmx5X2RpcmVjdF9yZWFkXFxcIikpXFxuK1xcdFxcdHRlc3RfZ2xvYmFsX3BlcmNwdV9kYXRhX3Jkb25seV9kaXJlY3RfcmVhZCgpO1xcbitcXHRpZiAodGVzdF9fc3RhcnRfc3VidGVzdChcXFwicmRvbmx5X2RpcmVjdF93cml0ZVxcXCIpKVxcbitcXHRcXHR0ZXN0X2dsb2JhbF9wZXJjcHVfZGF0YV9yZG9ubHlfZGlyZWN0X3dyaXRlKCk7XFxuK1xcdHRlc3RfZ2xvYmFsX3BlcmNwdV9kYXRhX3ZlcmlmaWVyX2xvZygpO1xcbitcXHRpZiAodGVzdF9fc3RhcnRfc3VidGVzdChcXFwiaXRlclxcXCIpKVxcbitcXHRcXHR0ZXN0X2dsb2JhbF9wZXJjcHVfZGF0YV9pdGVyKCk7XFxuK31cXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3RfZ2xvYmFsX3BlcmNwdV9kYXRhLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF9nbG9iYWxfcGVyY3B1X2RhdGEuY1xcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uYTk0NDNmYjIwNTBlOVxcbi0tLSAvZGV2L251bGxcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF9nbG9iYWxfcGVyY3B1X2RhdGEuY1xcbkBAIC0wLDAgKzEsODggQEBcXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG4rI2luY2x1ZGUgXFx1MDAzY3ZtbGludXguaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2JwZi9icGZfaGVscGVycy5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXFwiYnBmX21pc2MuaFxcXCJcXG4rXFxuKy8qIFVzZWQgZm9yIHRlc3RpbmcgbWFwIG5hbWUuICovXFxuK2ludCBsb29uZyBTRUMoXFxcIi5wZXJjcHUubG9vb29vb29vb25nXFxcIik7XFxuK2ludCBkYXRhMyBTRUMoXFxcIi5kYXRhLnBlcmNwdVxcXCIpO1xcbitpbnQgZGF0YTIgU0VDKFxcXCIucGVyY3B1LmRhdGFcXFwiKTtcXG4rXFxuK2ludCBydW47XFxuK2ludCBjcHVfaWQgU0VDKFxcXCIucGVyY3B1XFxcIik7XFxuK2ludCBkYXRhIFNFQyhcXFwiLnBlcmNwdVxcXCIpID0gLTE7XFxuK2ludCBudW1zWzddIFNFQyhcXFwiLnBlcmNwdVxcXCIpO1xcbitib29sIHNldCBTRUMoXFxcIi5wZXJjcHVcXFwiKSA9IGZhbHNlO1xcbitzdHJ1Y3Qge1xcbitcXHRjaGFyIHNldDtcXG4rXFx0aW50IGk7XFxuK1xcdGludCBudW1zWzddO1xcbit9IHN0cnVjdF9kYXRhIFNFQyhcXFwiLnBlcmNwdVxcXCIpID0ge1xcbitcXHQuc2V0ID0gMCxcXG4rXFx0LmkgPSAtMSxcXG4rfTtcXG4rXFxuK1NFQyhcXFwicmF3X3RwL3Rhc2tfcmVuYW1lXFxcIilcXG4rX19hdXhpbGlhcnlcXG4raW50IHVwZGF0ZV9wZXJjcHVfZGF0YSh2b2lkICpjdHgpXFxuK3tcXG4rXFx0c3RydWN0X2RhdGEubnVtc1s2XSA9IDB4YzBkZTtcXG4rXFx0c3RydWN0X2RhdGEuc2V0ID0gMTtcXG4rXFx0c3RydWN0X2RhdGEuaSA9IDE7XFxuK1xcdG51bXNbNl0gPSAweGMwZGU7XFxuK1xcdGRhdGEgPSAxO1xcbitcXHRydW4rKztcXG4rXFx0c2V0ID0gdHJ1ZTtcXG4rXFx0Y3B1X2lkID0gYnBmX2dldF9zbXBfcHJvY2Vzc29yX2lkKCk7XFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitzdGF0aWMgY29uc3QgY2hhciBmbXRbXSBTRUMoXFxcIi5wZXJjcHUuZm10XFxcIikgPSBcXFwiZGF0YSAlZFxcXFxuXFxcIjtcXG4rXFxuK1NFQyhcXFwiP2twcm9iZVxcXCIpXFxuK19fZmFpbHVyZSBfX21zZyhcXFwiUnt7WzAtOV0rfX0gcG9pbnRzIHRvIHBlcmNwdV9hcnJheSBtYXAgd2hpY2ggY2Fubm90IGJlIHVzZWQgYXMgY29uc3Qgc3RyaW5nXFxcIilcXG4raW50IHZlcmlmaWVyX3N0cm5jbXAodm9pZCAqY3R4KVxcbit7XFxuK1xcdHJldHVybiBicGZfc3RybmNtcChcXFwidGVzdFxcXCIsIDUsIGZtdCk7XFxuK31cXG4rXFxuK1NFQyhcXFwiP2twcm9iZVxcXCIpXFxuK19fZmFpbHVyZSBfX21zZyhcXFwiUnt7WzAtOV0rfX0gcG9pbnRzIHRvIHBlcmNwdV9hcnJheSBtYXAgd2hpY2ggY2Fubm90IGJlIHVzZWQgYXMgY29uc3Qgc3RyaW5nXFxcIilcXG4raW50IHZlcmlmaWVyX3NucHJpbnRmKHZvaWQgKmN0eClcXG4re1xcbitcXHR1NjQgYXJnc1tdID0geyBkYXRhIH07XFxuK1xcdGNoYXIgYnVmWzEyOF07XFxuK1xcdGludCBsZW47XFxuK1xcbitcXHRsZW4gPSBicGZfc25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgZm10LCBhcmdzLCBzaXplb2YoYXJncykpO1xcbitcXHRpZiAobGVuIFxcdTAwM2UgMClcXG4rXFx0XFx0YnBmX3ByaW50ayhcXFwic25wcmludGY6ICVzXFxcXG5cXFwiLCBidWYpO1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rdm9sYXRpbGUgY29uc3QgX191MzIgbnVtX2NwdXMgPSAwO1xcbit2b2xhdGlsZSBjb25zdCBpbnQgb2Zmc2V0b2ZfbnVtO1xcbit2b2xhdGlsZSBjb25zdCBpbnQgZWxlbV9zejtcXG4rX191MzIgcGVyY3B1X2RhdGFfc3VtID0gMDtcXG4rYm9vbCBydW5faXRlciA9IGZhbHNlO1xcbitcXG4rU0VDKFxcXCJpdGVyL2JwZl9tYXBfZWxlbVxcXCIpXFxuK19fYXV4aWxpYXJ5XFxuK2ludCBkdW1wX3BlcmNwdV9kYXRhKHN0cnVjdCBicGZfaXRlcl9fYnBmX21hcF9lbGVtICpjdHgpXFxuK3tcXG4rXFx0dm9pZCAqcHB0ciA9IGN0eC1cXHUwMDNldmFsdWU7XFxuK1xcdGludCBpO1xcbitcXG4rXFx0aWYgKCFwcHRyKVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFxuK1xcdHJ1bl9pdGVyID0gdHJ1ZTtcXG4rXFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBudW1fY3B1czsgaSsrKSB7XFxuK1xcdFxcdHBlcmNwdV9kYXRhX3N1bSArPSAqKGludCAqKSAocHB0ciArIG9mZnNldG9mX251bSk7XFxuK1xcdFxcdHBwdHIgKz0gZWxlbV9zejtcXG4rXFx0fVxcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rY2hhciBfbGljZW5zZVtdIFNFQyhcXFwibGljZW5zZVxcXCIpID0gXFxcIkdQTFxcXCI7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDE5OjQyOjIzLjQ0MDA0MTI1M1oiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjE0NDUxODAzNjQ3NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfU1lTQ0FMTFwiLFxuICAgIFwiQlBGX0pJVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInBlcmNwdV9hcnJheV9tYXBfZGlyZWN0X3ZhbHVlX2FkZHJcIixcbiAgICBcInBlcmNwdV9hcnJheV9tYXBfZGlyZWN0X3ZhbHVlX21ldGFcIixcbiAgICBcImJwZl9kb19taXNjX2ZpeHVwc1wiLFxuICAgIFwiYnBmX21hcF9kaXJlY3RfcmVhZFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgc3VwcG9ydCBmb3IgYC5wZXJjcHVgIGdsb2JhbCBkYXRhIG1hcHMgaW4gQlBGLiBJdCBtb2RpZmllcyB0aGUgQlBGIHZlcmlmaWVyIHRvIGhhbmRsZSBkaXJlY3QgbWVtb3J5IHJlYWRzIGZyb20gYEJQRl9NQVBfVFlQRV9QRVJDUFVfQVJSQVlgIG1hcHMgYW5kIGFkZHMgSklUIGZpeHVwcyB0byBwYXRjaCBgbGRfaW1tNjRgIGluc3RydWN0aW9ucyB3aXRoIHBlci1DUFUgcmVnaXN0ZXIgbW92ZXMuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGNvcmUgQlBGIHN1YnN5c3RlbSBhbmQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgbWVtb3J5IHNhZmV0eSBhbmQgY29ycmVjdCB2ZXJpZmllciBiZWhhdmlvci5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgZDE1MWQzZDA5MzJhMzMxYzNlZjM4OWY4NjY3ODFhYTk1OGViODM5ZFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgQXVnIDYgMTk6NDI6MjAgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL2FycmF5bWFwLmMgYi9rZXJuZWwvYnBmL2FycmF5bWFwLmNcbmluZGV4IDI0OGI0ODE4MTc4Y2QuLjM0ODY1NzAxZjdmNzUgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvYnBmL2FycmF5bWFwLmNcbisrKyBiL2tlcm5lbC9icGYvYXJyYXltYXAuY1xuQEAgLTI1OSw2ICsyNTksMzcgQEAgc3RhdGljIHZvaWQgKnBlcmNwdV9hcnJheV9tYXBfbG9va3VwX2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5KVxuIFx0cmV0dXJuIHRoaXNfY3B1X3B0cihhcnJheS1cdTAwM2VwcHRyc1tpbmRleCBcdTAwMjYgYXJyYXktXHUwMDNlaW5kZXhfbWFza10pO1xuIH1cbiBcbitzdGF0aWMgaW50IHBlcmNwdV9hcnJheV9tYXBfZGlyZWN0X3ZhbHVlX2FkZHIoY29uc3Qgc3RydWN0IGJwZl9tYXAgKm1hcCwgdTY0ICppbW0sIHUzMiBvZmYpXG4re1xuK1x0c3RydWN0IGJwZl9hcnJheSAqYXJyYXkgPSBjb250YWluZXJfb2YobWFwLCBzdHJ1Y3QgYnBmX2FycmF5LCBtYXApO1xuK1xuK1x0aWYgKCFicGZfaml0X3N1cHBvcnRzX3BlcmNwdV9pbnNuKCkpXG4rXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbitcdGlmIChtYXAtXHUwMDNlbWF4X2VudHJpZXMgIT0gMSlcbitcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuK1x0aWYgKG9mZiBcdTAwM2U9IG1hcC1cdTAwM2V2YWx1ZV9zaXplKVxuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcbitcdCppbW0gPSAodTY0KShfX2ZvcmNlIHVuc2lnbmVkIGxvbmcpIGFycmF5LVx1MDAzZXBwdHJzWzBdO1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyBpbnQgcGVyY3B1X2FycmF5X21hcF9kaXJlY3RfdmFsdWVfbWV0YShjb25zdCBzdHJ1Y3QgYnBmX21hcCAqbWFwLCB1NjQgaW1tLCB1MzIgKm9mZilcbit7XG4rXHRzdHJ1Y3QgYnBmX2FycmF5ICphcnJheSA9IGNvbnRhaW5lcl9vZihtYXAsIHN0cnVjdCBicGZfYXJyYXksIG1hcCk7XG4rXHR1NjQgYmFzZSA9ICh1NjQpKF9fZm9yY2UgdW5zaWduZWQgbG9uZykgYXJyYXktXHUwMDNlcHB0cnNbMF07XG4rXG4rXHRpZiAoIWJwZl9qaXRfc3VwcG9ydHNfcGVyY3B1X2luc24oKSlcbitcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuK1x0aWYgKG1hcC1cdTAwM2VtYXhfZW50cmllcyAhPSAxKVxuK1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4rXHRpZiAoaW1tIFx1MDAzYyBiYXNlIHx8IGltbSBcdTAwM2U9IGJhc2UgKyBhcnJheS1cdTAwM2VlbGVtX3NpemUpXG4rXHRcdHJldHVybiAtRU5PRU5UO1xuK1xuK1x0Km9mZiA9IGltbSAtIGJhc2U7XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4gLyogZW1pdCBCUEYgaW5zdHJ1Y3Rpb25zIGVxdWl2YWxlbnQgdG8gQyBjb2RlIG9mIHBlcmNwdV9hcnJheV9tYXBfbG9va3VwX2VsZW0oKSAqL1xuIHN0YXRpYyBpbnQgcGVyY3B1X2FycmF5X21hcF9nZW5fbG9va3VwKHN0cnVjdCBicGZfbWFwICptYXAsIHN0cnVjdCBicGZfaW5zbiAqaW5zbl9idWYpXG4ge1xuQEAgLTU1MSw5ICs1ODIsMTAgQEAgc3RhdGljIGludCBhcnJheV9tYXBfY2hlY2tfYnRmKHN0cnVjdCBicGZfbWFwICptYXAsXG4gXHRcdFx0ICAgICAgIGNvbnN0IHN0cnVjdCBidGZfdHlwZSAqa2V5X3R5cGUsXG4gXHRcdFx0ICAgICAgIGNvbnN0IHN0cnVjdCBidGZfdHlwZSAqdmFsdWVfdHlwZSlcbiB7XG4tXHQvKiBPbmUgZXhjZXB0aW9uIGZvciBrZXlsZXNzIEJURjogLmJzcy8uZGF0YS8ucm9kYXRhIG1hcCAqL1xuK1x0LyogT25lIGV4Y2VwdGlvbiBmb3Iga2V5bGVzcyBCVEY6IC5ic3MvLmRhdGEvLnJvZGF0YS8ucGVyY3B1IG1hcCAqL1xuIFx0aWYgKGJ0Zl90eXBlX2lzX3ZvaWQoa2V5X3R5cGUpKSB7XG4tXHRcdGlmIChtYXAtXHUwMDNlbWFwX3R5cGUgIT0gQlBGX01BUF9UWVBFX0FSUkFZIHx8XG4rXHRcdGlmICgobWFwLVx1MDAzZW1hcF90eXBlICE9IEJQRl9NQVBfVFlQRV9BUlJBWSBcdTAwMjZcdTAwMjZcbitcdFx0ICAgICBtYXAtXHUwMDNlbWFwX3R5cGUgIT0gQlBGX01BUF9UWVBFX1BFUkNQVV9BUlJBWSkgfHxcbiBcdFx0ICAgIG1hcC1cdTAwM2VtYXhfZW50cmllcyAhPSAxKVxuIFx0XHRcdHJldHVybiAtRUlOVkFMO1xuIFxuQEAgLTgzMiw2ICs4NjQsOCBAQCBjb25zdCBzdHJ1Y3QgYnBmX21hcF9vcHMgcGVyY3B1X2FycmF5X21hcF9vcHMgPSB7XG4gXHQubWFwX2dldF9uZXh0X2tleSA9IGJwZl9hcnJheV9nZXRfbmV4dF9rZXksXG4gXHQubWFwX2xvb2t1cF9lbGVtID0gcGVyY3B1X2FycmF5X21hcF9sb29rdXBfZWxlbSxcbiBcdC5tYXBfZ2VuX2xvb2t1cCA9IHBlcmNwdV9hcnJheV9tYXBfZ2VuX2xvb2t1cCxcbitcdC5tYXBfZGlyZWN0X3ZhbHVlX2FkZHIgPSBwZXJjcHVfYXJyYXlfbWFwX2RpcmVjdF92YWx1ZV9hZGRyLFxuK1x0Lm1hcF9kaXJlY3RfdmFsdWVfbWV0YSA9IHBlcmNwdV9hcnJheV9tYXBfZGlyZWN0X3ZhbHVlX21ldGEsXG4gXHQubWFwX3VwZGF0ZV9lbGVtID0gYXJyYXlfbWFwX3VwZGF0ZV9lbGVtLFxuIFx0Lm1hcF9kZWxldGVfZWxlbSA9IGFycmF5X21hcF9kZWxldGVfZWxlbSxcbiBcdC5tYXBfbG9va3VwX3BlcmNwdV9lbGVtID0gcGVyY3B1X2FycmF5X21hcF9sb29rdXBfcGVyY3B1X2VsZW0sXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9iYWNrdHJhY2suYyBiL2tlcm5lbC9icGYvYmFja3RyYWNrLmNcbmluZGV4IDJmNDczYWQ0ZmQ3YzEuLjNmMTUwZTg1OGFlOGEgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvYnBmL2JhY2t0cmFjay5jXG4rKysgYi9rZXJuZWwvYnBmL2JhY2t0cmFjay5jXG5AQCAtMjE0LDcgKzIxNCw2IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBidF9pc19yZWdfc2V0KHN0cnVjdCBiYWNrdHJhY2tfc3RhdGUgKmJ0LCB1MzIgcmVnKVxuIFx0cmV0dXJuIGJ0LVx1MDAzZXJlZ19tYXNrc1tidC1cdTAwM2VmcmFtZV0gXHUwMDI2ICgxIFx1MDAzY1x1MDAzYyByZWcpO1xuIH1cbiBcbi1cbiAvKiBmb3JtYXQgcmVnaXN0ZXJzIGJpdG1hc2ssIGUuZy4sIFwicjAscjIscjRcIiBmb3IgMHgxNSBtYXNrICovXG4gc3RhdGljIHZvaWQgZm10X3JlZ19tYXNrKGNoYXIgKmJ1Ziwgc3NpemVfdCBidWZfc3osIHUzMiByZWdfbWFzaylcbiB7XG5AQCAtMjU0LDcgKzI1Myw2IEBAIHZvaWQgYnBmX2ZtdF9zdGFja19tYXNrKGNoYXIgKmJ1Ziwgc3NpemVfdCBidWZfc3osIHU2NCBzdGFja19tYXNrKVxuIFx0fVxuIH1cbiBcbi1cbiAvKiBGb3IgZ2l2ZW4gdmVyaWZpZXIgc3RhdGUgYmFja3RyYWNrX2luc24oKSBpcyBjYWxsZWQgZnJvbSB0aGUgbGFzdCBpbnNuIHRvXG4gICogdGhlIGZpcnN0IGluc24uIEl0cyBwdXJwb3NlIGlzIHRvIGNvbXB1dGUgYSBiaXRtYXNrIG9mIHJlZ2lzdGVycyBhbmRcbiAgKiBzdGFjayBzbG90cyB0aGF0IG5lZWRzIHByZWNpc2lvbiBpbiB0aGUgcGFyZW50IHZlcmlmaWVyIHN0YXRlLlxuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvYnRmLmMgYi9rZXJuZWwvYnBmL2J0Zi5jXG5pbmRleCA0MjQxNDYzM2NmMjYzLi5jODA3YWQyNjNlNmY4IDEwMDY0NFxuLS0tIGEva2VybmVsL2JwZi9idGYuY1xuKysrIGIva2VybmVsL2JwZi9idGYuY1xuQEAgLTI1MzQsNyArMjUzNCw2IEBAIHN0YXRpYyB2b2lkIGJ0Zl9iaXRmaWVsZF9zaG93KHZvaWQgKmRhdGEsIHU4IGJpdHNfb2Zmc2V0LFxuIFx0YnRmX2ludDEyOF9wcmludChzaG93LCBwcmludF9udW0pO1xuIH1cbiBcbi1cbiBzdGF0aWMgdm9pZCBidGZfaW50X2JpdHNfc2hvdyhjb25zdCBzdHJ1Y3QgYnRmICpidGYsXG4gXHRcdFx0ICAgICAgY29uc3Qgc3RydWN0IGJ0Zl90eXBlICp0LFxuIFx0XHRcdCAgICAgIHZvaWQgKmRhdGEsIHU4IGJpdHNfb2Zmc2V0LFxuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvY2ZnLmMgYi9rZXJuZWwvYnBmL2NmZy5jXG5pbmRleCBkYjM0MTZhN2M5MDQ3Li44MThmN2FmYWM4M2E1IDEwMDY0NFxuLS0tIGEva2VybmVsL2JwZi9jZmcuY1xuKysrIGIva2VybmVsL2JwZi9jZmcuY1xuQEAgLTQ3LDcgKzQ3LDYgQEAgZW51bSB7XG4gXHRCUkFOQ0ggPSAyLFxuIH07XG4gXG4tXG4gc3RhdGljIHZvaWQgbWFya19zdWJwcm9nX2NoYW5nZXNfcGt0X2RhdGEoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50IG9mZilcbiB7XG4gXHRzdHJ1Y3QgYnBmX3N1YnByb2dfaW5mbyAqc3VicHJvZztcbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL2NvbnN0X2ZvbGQuYyBiL2tlcm5lbC9icGYvY29uc3RfZm9sZC5jXG5pbmRleCBiMmExOWFjYWRiOTFlLi41Nzg3MjQ2YmVmMzAxIDEwMDY0NFxuLS0tIGEva2VybmVsL2JwZi9jb25zdF9mb2xkLmNcbisrKyBiL2tlcm5lbC9icGYvY29uc3RfZm9sZC5jXG5AQCAtMTgyLDcgKzE4Miw2IEBAIHN0YXRpYyB2b2lkIGNvbnN0X3JlZ194ZmVyKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBjb25zdF9hcmdfaW5mbyAqXG4gXHRcdHU2NCB2YWwgPSAwO1xuIFxuIFx0XHRpZiAoIWJwZl9tYXBfaXNfcmRvbmx5KG1hcCkgfHwgIW1hcC1cdTAwM2VvcHMtXHUwMDNlbWFwX2RpcmVjdF92YWx1ZV9hZGRyIHx8XG4tXHRcdCAgICBtYXAtXHUwMDNlbWFwX3R5cGUgPT0gQlBGX01BUF9UWVBFX0lOU05fQVJSQVkgfHxcbiBcdFx0ICAgIG9mZiBcdTAwM2MgMCB8fCBvZmYgKyBzaXplIFx1MDAzZSBtYXAtXHUwMDNldmFsdWVfc2l6ZSB8fFxuIFx0XHQgICAgYnBmX21hcF9kaXJlY3RfcmVhZChtYXAsIG9mZiwgc2l6ZSwgXHUwMDI2dmFsLCBpc19sZHN4KSkge1xuIFx0XHRcdCpkc3QgPSB1bmtub3duO1xuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvZml4dXBzLmMgYi9rZXJuZWwvYnBmL2ZpeHVwcy5jXG5pbmRleCBhMGJkZGFkYTc5NjRlLi5mMjM5ODc0OTEwM2JhIDEwMDY0NFxuLS0tIGEva2VybmVsL2JwZi9maXh1cHMuY1xuKysrIGIva2VybmVsL2JwZi9maXh1cHMuY1xuQEAgLTE0NDYsNyArMTQ0Niw2IEBAIGludCBicGZfZml4dXBfY2FsbF9hcmdzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXG4gXHRyZXR1cm4gZXJyO1xuIH1cbiBcbi1cbiAvKiBUaGUgZnVuY3Rpb24gcmVxdWlyZXMgdGhhdCBmaXJzdCBpbnN0cnVjdGlvbiBpbiAncGF0Y2gnIGlzIGluc25zaVtwcm9nLVx1MDAzZWxlbiAtIDFdICovXG4gc3RhdGljIGludCBhZGRfaGlkZGVuX3N1YnByb2coc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICpwYXRjaCwgaW50IGxlbilcbiB7XG5AQCAtMTgxOCw2ICsxODE3LDQzIEBAIGludCBicGZfZG9fbWlzY19maXh1cHMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcbiBcdFx0XHRnb3RvIG5leHRfaW5zbjtcbiBcdFx0fVxuIFxuK1x0XHRpZiAoYnBmX2ppdF9zdXBwb3J0c19wZXJjcHVfaW5zbigpIFx1MDAyNlx1MDAyNlxuK1x0XHQgICAgaW5zbi1cdTAwM2Vjb2RlID09IChCUEZfTEQgfCBCUEZfSU1NIHwgQlBGX0RXKSBcdTAwMjZcdTAwMjZcbitcdFx0ICAgIChpbnNuLVx1MDAzZXNyY19yZWcgPT0gQlBGX1BTRVVET19NQVBfVkFMVUUgfHxcbitcdFx0ICAgICBpbnNuLVx1MDAzZXNyY19yZWcgPT0gQlBGX1BTRVVET19NQVBfSURYX1ZBTFVFKSkge1xuK1x0XHRcdHN0cnVjdCBicGZfbWFwICptYXA7XG4rXG4rXHRcdFx0YXV4ID0gXHUwMDI2ZW52LVx1MDAzZWluc25fYXV4X2RhdGFbaSArIGRlbHRhXTtcbitcdFx0XHRtYXAgPSBlbnYtXHUwMDNldXNlZF9tYXBzW2F1eC1cdTAwM2VtYXBfaW5kZXhdO1xuK1x0XHRcdGlmIChtYXAtXHUwMDNlbWFwX3R5cGUgIT0gQlBGX01BUF9UWVBFX1BFUkNQVV9BUlJBWSlcbitcdFx0XHRcdGdvdG8gbmV4dF9pbnNuO1xuK1xuK1x0XHRcdHByb2ctXHUwMDNlaml0X3JlcXVpcmVkID0gdHJ1ZTtcbitcbitcdFx0XHQvKlxuK1x0XHRcdCAqIFdlIGFyZSAqc2tpcHBpbmcqIGZpcnN0IGhhbGYgb2YgbGRfaW1tNjQgaW5zblxuK1x0XHRcdCAqIHdpdGggJ2krKzsnLCBwYXRjaGluZyBvdmVyIHNlY29uZCBoYWxmIG9mIGl0XG4rXHRcdFx0ICogd2l0aCB0aGF0IHNhbWUgaGFsZiArIG1vdjY0X3BlcmNwdV9yZWcgaW5zbi5cbitcdFx0XHQgKiBBbGwgYmVjYXVzZSBicGZfcGF0Y2hfaW5zbl9kYXRhKCkgY2FuIG9ubHlcbitcdFx0XHQgKiByZXBsYWNlIG9uZSA4LWJ5dGUgaW5zbiwgd2hpY2ggZG9lcyBub3Qgd29ya1xuK1x0XHRcdCAqIHdlbGwgZm9yIGxkX2ltbTY0IGluc24uXG4rXHRcdFx0ICovXG4rXG4rXHRcdFx0aW5zbl9idWZbMF0gPSBpbnNuWzFdO1xuK1x0XHRcdGluc25fYnVmWzFdID0gQlBGX01PVjY0X1BFUkNQVV9SRUcoaW5zbi1cdTAwM2Vkc3RfcmVnLCBpbnNuLVx1MDAzZWRzdF9yZWcpO1xuK1x0XHRcdGNudCA9IDI7XG4rXG4rXHRcdFx0aSsrO1xuK1x0XHRcdG5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGkgKyBkZWx0YSwgaW5zbl9idWYsIGNudCk7XG4rXHRcdFx0aWYgKCFuZXdfcHJvZylcbitcdFx0XHRcdHJldHVybiAtRU5PTUVNO1xuK1xuK1x0XHRcdGRlbHRhICAgICs9IGNudCAtIDE7XG4rXHRcdFx0ZW52LVx1MDAzZXByb2cgPSBwcm9nID0gbmV3X3Byb2c7XG4rXHRcdFx0aW5zbiAgICAgID0gbmV3X3Byb2ctXHUwMDNlaW5zbnNpICsgaSArIGRlbHRhO1xuK1x0XHRcdGdvdG8gbmV4dF9pbnNuO1xuK1x0XHR9XG4rXG4gXHRcdGlmIChpbnNuLVx1MDAzZWNvZGUgIT0gKEJQRl9KTVAgfCBCUEZfQ0FMTCkpXG4gXHRcdFx0Z290byBuZXh0X2luc247XG4gXHRcdGlmIChpbnNuLVx1MDAzZXNyY19yZWcgPT0gQlBGX1BTRVVET19DQUxMKVxuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvaGFzaHRhYi5jIGIva2VybmVsL2JwZi9oYXNodGFiLmNcbmluZGV4IDlmMzk0ZTFhYTJlODUuLmQ0MGNiNWRkNDQ2Y2EgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvYnBmL2hhc2h0YWIuY1xuKysrIGIva2VybmVsL2JwZi9oYXNodGFiLmNcbkBAIC05OTgsNyArOTk4LDYgQEAgc3RhdGljIHZvaWQgZGVjX2VsZW1fY291bnQoc3RydWN0IGJwZl9odGFiICpodGFiKVxuIFx0XHRhdG9taWNfZGVjKFx1MDAyNmh0YWItXHUwMDNlY291bnQpO1xuIH1cbiBcbi1cbiBzdGF0aWMgdm9pZCBmcmVlX2h0YWJfZWxlbShzdHJ1Y3QgYnBmX2h0YWIgKmh0YWIsIHN0cnVjdCBodGFiX2VsZW0gKmwpXG4ge1xuIFx0aHRhYl9wdXRfZmRfdmFsdWUoaHRhYiwgbCk7XG5AQCAtMjk3MCw3ICsyOTY5LDYgQEAgc3RhdGljIGludCByaHRhYl9kZWxldGVfZWxlbShzdHJ1Y3QgYnBmX3JodGFiICpyaHRhYiwgc3RydWN0IHJodGFiX2VsZW0gKmVsZW0sIHZcbiBcdHJldHVybiAwO1xuIH1cbiBcbi1cbiBzdGF0aWMgbG9uZyByaHRhYl9tYXBfZGVsZXRlX2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5KVxuIHtcbiBcdHN0cnVjdCBicGZfcmh0YWIgKnJodGFiID0gY29udGFpbmVyX29mKG1hcCwgc3RydWN0IGJwZl9yaHRhYiwgbWFwKTtcbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL2hlbHBlcnMuYyBiL2tlcm5lbC9icGYvaGVscGVycy5jXG5pbmRleCA0NzA5YTVhZDA0NzQ3Li41ZTY4YTBhZGIxNGI0IDEwMDY0NFxuLS0tIGEva2VybmVsL2JwZi9oZWxwZXJzLmNcbisrKyBiL2tlcm5lbC9icGYvaGVscGVycy5jXG5AQCAtNDg2OSw3ICs0ODY5LDYgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBidGZfa2Z1bmNfaWRfc2V0IGdlbmVyaWNfa2Z1bmNfc2V0ID0ge1xuIFx0LnNldCAgID0gXHUwMDI2Z2VuZXJpY19idGZfaWRzLFxuIH07XG4gXG4tXG4gQlRGX0lEX0xJU1QoZ2VuZXJpY19kdG9yX2lkcylcbiBCVEZfSUQoc3RydWN0LCB0YXNrX3N0cnVjdClcbiBCVEZfSUQoZnVuYywgYnBmX3Rhc2tfcmVsZWFzZV9kdG9yKVxuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvbGl2ZW5lc3MuYyBiL2tlcm5lbC9icGYvbGl2ZW5lc3MuY1xuaW5kZXggMGFhZGZiYWUwYWNjNS4uOWUyNWUyNDFlMWZmNCAxMDA2NDRcbi0tLSBhL2tlcm5lbC9icGYvbGl2ZW5lc3MuY1xuKysrIGIva2VybmVsL2JwZi9saXZlbmVzcy5jXG5AQCAtMjY5LDcgKzI2OSw2IEBAIGJwZl9pbnNuX3N1Y2Nlc3NvcnMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgdTMyIGlkeClcbiBcbiBfX2RpYWdfcG9wKCk7XG4gXG4tXG4gc3RhdGljIGlubGluZSBib29sIHVwZGF0ZV9pbnNuKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4gXHRcdFx0ICAgICAgIHN0cnVjdCBmdW5jX2luc3RhbmNlICppbnN0YW5jZSwgdTMyIGZyYW1lLCB1MzIgaW5zbl9pZHgpXG4ge1xuQEAgLTE4NjgsNyArMTg2Nyw2IEBAIHN0YXRpYyBpbnQgYW5hbHl6ZV9zdWJwcm9nKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4gXHRpZiAobmVlZF9yZXNjaGVkKCkpXG4gXHRcdGNvbmRfcmVzY2hlZCgpO1xuIFxuLVxuIFx0LypcbiBcdCAqIFdoZW4gYW4gaW5zdGFuY2UgaXMgcmV1c2VkIChtdXN0X3dyaXRlX2luaXRpYWxpemVkID09IHRydWUpLFxuIFx0ICogcmVjb3JkIGludG8gYSBmcmVzaCBpbnN0YW5jZSBhbmQgbWVyZ2UgYWZ0ZXJ3YXJkLiAgVGhpcyBhdm9pZHNcbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL3F1ZXVlX3N0YWNrX21hcHMuYyBiL2tlcm5lbC9icGYvcXVldWVfc3RhY2tfbWFwcy5jXG5pbmRleCBjMWM5ZGVlNGRjZGQwLi42ZThiMThjMzJhMTA2IDEwMDY0NFxuLS0tIGEva2VybmVsL2JwZi9xdWV1ZV9zdGFja19tYXBzLmNcbisrKyBiL2tlcm5lbC9icGYvcXVldWVfc3RhY2tfbWFwcy5jXG5AQCAtMTIzLDcgKzEyMyw2IEBAIHN0YXRpYyBsb25nIF9fcXVldWVfbWFwX2dldChzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICp2YWx1ZSwgYm9vbCBkZWxldGUpXG4gXHRyZXR1cm4gZXJyO1xuIH1cbiBcbi1cbiBzdGF0aWMgbG9uZyBfX3N0YWNrX21hcF9nZXQoc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqdmFsdWUsIGJvb2wgZGVsZXRlKVxuIHtcbiBcdHN0cnVjdCBicGZfcXVldWVfc3RhY2sgKnFzID0gYnBmX3F1ZXVlX3N0YWNrKG1hcCk7XG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9zeXNjYWxsLmMgYi9rZXJuZWwvYnBmL3N5c2NhbGwuY1xuaW5kZXggOGQxMTFkYTg4NjU1My4uN2Q4YzNlOGU2ZDYyZSAxMDA2NDRcbi0tLSBhL2tlcm5lbC9icGYvc3lzY2FsbC5jXG4rKysgYi9rZXJuZWwvYnBmL3N5c2NhbGwuY1xuQEAgLTYzNiw3ICs2MzYsNiBAQCBpbnQgYnBmX21hcF9hbGxvY19wYWdlcyhjb25zdCBzdHJ1Y3QgYnBmX21hcCAqbWFwLCBpbnQgbmlkLFxuIFx0cmV0dXJuIHJldDtcbiB9XG4gXG4tXG4gc3RhdGljIGludCBidGZfZmllbGRfY21wKGNvbnN0IHZvaWQgKmEsIGNvbnN0IHZvaWQgKmIpXG4ge1xuIFx0Y29uc3Qgc3RydWN0IGJ0Zl9maWVsZCAqZjEgPSBhLCAqZjIgPSBiO1xuQEAgLTE4MzAsNyArMTgyOSw2IEBAIHN0YXRpYyBpbnQgbWFwX2xvb2t1cF9lbGVtKHVuaW9uIGJwZl9hdHRyICphdHRyKVxuIFx0cmV0dXJuIGVycjtcbiB9XG4gXG4tXG4gI2RlZmluZSBCUEZfTUFQX1VQREFURV9FTEVNX0xBU1RfRklFTEQgZmxhZ3NcbiBcbiBzdGF0aWMgaW50IG1hcF91cGRhdGVfZWxlbSh1bmlvbiBicGZfYXR0ciAqYXR0ciwgYnBmcHRyX3QgdWF0dHIpXG5AQCAtMzQ5Nyw3ICszNDk1LDYgQEAgaW50IGJwZl9saW5rX3ByaW1lKHN0cnVjdCBicGZfbGluayAqbGluaywgc3RydWN0IGJwZl9saW5rX3ByaW1lciAqcHJpbWVyKVxuIFx0aWYgKGZkIFx1MDAzYyAwKVxuIFx0XHRyZXR1cm4gZmQ7XG4gXG4tXG4gXHRpZCA9IGJwZl9saW5rX2FsbG9jX2lkKGxpbmspO1xuIFx0aWYgKGlkIFx1MDAzYyAwKSB7XG4gXHRcdHB1dF91bnVzZWRfZmQoZmQpO1xuQEAgLTU1MDUsNyArNTUwMiw2IEBAIHN0YXRpYyBpbnQgYnBmX2xpbmtfZ2V0X2luZm9fYnlfZmQoc3RydWN0IGZpbGUgKmZpbGUsXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4tXG4gc3RhdGljIGludCB0b2tlbl9nZXRfaW5mb19ieV9mZChzdHJ1Y3QgZmlsZSAqZmlsZSxcbiBcdFx0XHRcdHN0cnVjdCBicGZfdG9rZW4gKnRva2VuLFxuIFx0XHRcdFx0Y29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIsXG5AQCAtNjUwNyw3ICs2NTAzLDYgQEAgQlBGX0NBTExfMyhicGZfc3lzX2JwZiwgaW50LCBjbWQsIHVuaW9uIGJwZl9hdHRyICosIGF0dHIsIHUzMiwgYXR0cl9zaXplKVxuIFx0cmV0dXJuIF9fc3lzX2JwZihjbWQsIEtFUk5FTF9CUEZQVFIoYXR0ciksIGF0dHJfc2l6ZSwgS0VSTkVMX0JQRlBUUihOVUxMKSwgMCk7XG4gfVxuIFxuLVxuIC8qIFRvIHNodXQgdXAgLVdtaXNzaW5nLXByb3RvdHlwZXMuXG4gICogVGhpcyBmdW5jdGlvbiBpcyB1c2VkIGJ5IHRoZSBrZXJuZWwgbGlnaHQgc2tlbGV0b25cbiAgKiB0byBsb2FkIGJwZiBwcm9ncmFtcyB3aGVuIG1vZHVsZXMgYXJlIGxvYWRlZCBvciBkdXJpbmcga2VybmVsIGJvb3QuXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi92ZXJpZmllci5jIGIva2VybmVsL2JwZi92ZXJpZmllci5jXG5pbmRleCBkOTI1MTk3YzJlNWY3Li4zOTc3MjAwMmNiN2JmIDEwMDY0NFxuLS0tIGEva2VybmVsL2JwZi92ZXJpZmllci5jXG4rKysgYi9rZXJuZWwvYnBmL3ZlcmlmaWVyLmNcbkBAIC02MzUsNyArNjM1LDYgQEAgc3RhdGljIHZvaWQgX19tYXJrX2R5bnB0cl9yZWcoc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZyxcbiBcdFx0XHQgICAgICBlbnVtIGJwZl9keW5wdHJfdHlwZSB0eXBlLFxuIFx0XHRcdCAgICAgIGJvb2wgZmlyc3Rfc2xvdCwgaW50IGlkLCBpbnQgcGFyZW50X2lkKTtcbiBcbi1cbiBzdGF0aWMgdm9pZCBtYXJrX2R5bnB0cl9zdGFja19yZWdzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4gXHRcdFx0XHQgICBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqc3JlZzEsXG4gXHRcdFx0XHQgICBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqc3JlZzIsXG5AQCAtMTY3Miw3ICsxNjcxLDYgQEAgc3RhdGljIGJvb2wgc2FtZV9jYWxsc2l0ZXMoc3RydWN0IGJwZl92ZXJpZmllcl9zdGF0ZSAqYSwgc3RydWN0IGJwZl92ZXJpZmllcl9zdGFcbiBcdHJldHVybiB0cnVlO1xuIH1cbiBcbi1cbiB2b2lkIGJwZl9mcmVlX2JhY2tlZGdlcyhzdHJ1Y3QgYnBmX3NjY192aXNpdCAqdmlzaXQpXG4ge1xuIFx0c3RydWN0IGJwZl9zY2NfYmFja2VkZ2UgKmJhY2tlZGdlLCAqbmV4dDtcbkBAIC0yMjk0LDcgKzIyOTIsNiBAQCBzdGF0aWMgc3RydWN0IGJwZl92ZXJpZmllcl9zdGF0ZSAqcHVzaF9hc3luY19jYihzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuIFx0cmV0dXJuIFx1MDAyNmVsZW0tXHUwMDNlc3Q7XG4gfVxuIFxuLVxuIHN0YXRpYyBpbnQgY21wX3N1YnByb2dzKGNvbnN0IHZvaWQgKmEsIGNvbnN0IHZvaWQgKmIpXG4ge1xuIFx0cmV0dXJuICgoc3RydWN0IGJwZl9zdWJwcm9nX2luZm8gKilhKS1cdTAwM2VzdGFydCAtXG5AQCAtNDA3MSw3ICs0MDY4LDYgQEAgc3RhdGljIGludCBjaGVja19zdGFja19yZWFkKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4gXHRyZXR1cm4gZXJyO1xuIH1cbiBcbi1cbiAvKiBjaGVja19zdGFja193cml0ZSBkaXNwYXRjaGVzIHRvIGNoZWNrX3N0YWNrX3dyaXRlX2ZpeGVkX29mZiBvclxuICAqIGNoZWNrX3N0YWNrX3dyaXRlX3Zhcl9vZmYuXG4gICpcbkBAIC00ODY3LDcgKzQ4NjMsNiBAQCBzdGF0aWMgaW50IGNoZWNrX3NvY2tfYWNjZXNzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGludCBpbnNuX2lkeCxcbiBcdFx0dmFsaWQgPSBmYWxzZTtcbiBcdH1cbiBcbi1cbiBcdGlmICh2YWxpZCkge1xuIFx0XHRlbnYtXHUwMDNlaW5zbl9hdXhfZGF0YVtpbnNuX2lkeF0uY3R4X2ZpZWxkX3NpemUgPVxuIFx0XHRcdGluZm8uY3R4X2ZpZWxkX3NpemU7XG5AQCAtNTY2Miw2ICs1NjU3LDggQEAgaW50IGJwZl9tYXBfZGlyZWN0X3JlYWQoc3RydWN0IGJwZl9tYXAgKm1hcCwgaW50IG9mZiwgaW50IHNpemUsIHU2NCAqdmFsLFxuIFx0dTY0IGFkZHI7XG4gXHRpbnQgZXJyO1xuIFxuK1x0aWYgKG1hcC1cdTAwM2VtYXBfdHlwZSA9PSBCUEZfTUFQX1RZUEVfSU5TTl9BUlJBWSB8fCBtYXAtXHUwMDNlbWFwX3R5cGUgPT0gQlBGX01BUF9UWVBFX1BFUkNQVV9BUlJBWSlcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHRlcnIgPSBtYXAtXHUwMDNlb3BzLVx1MDAzZW1hcF9kaXJlY3RfdmFsdWVfYWRkcihtYXAsIFx1MDAyNmFkZHIsIG9mZik7XG4gXHRpZiAoZXJyKVxuIFx0XHRyZXR1cm4gZXJyO1xuQEAgLTYxNTgsNiArNjE1NSw1MSBAQCBzdGF0aWMgdm9pZCBhZGRfc2NhbGFyX3RvX3JlZyhzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqZHN0X3JlZywgczY0IHZhbClcbiBcdHJlZ19ib3VuZHNfc3luYyhkc3RfcmVnKTtcbiB9XG4gXG4rc3RhdGljIGludCBjaGVja19tYXBfbWVtX3JlYWQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZywgaW50IG9mZixcbitcdFx0XHQgICAgICBpbnQgYnBmX3NpemUsIGludCB2YWx1ZV9yZWdubywgYm9vbCBpc19sZHN4KVxuK3tcbitcdHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWdzID0gY3VyX3JlZ3MoZW52KTtcbitcdGludCBzaXplID0gYnBmX3NpemVfdG9fYnl0ZXMoYnBmX3NpemUpO1xuK1x0c3RydWN0IGJwZl9tYXAgKm1hcCA9IHJlZy1cdTAwM2VtYXBfcHRyO1xuK1xuK1x0c3dpdGNoIChtYXAtXHUwMDNlbWFwX3R5cGUpIHtcbitcdGNhc2UgQlBGX01BUF9UWVBFX0lOU05fQVJSQVk6XG4rXHRcdGlmIChicGZfc2l6ZSAhPSBCUEZfRFcpIHtcbitcdFx0XHR2ZXJib3NlKGVudiwgXCJJbnZhbGlkIHJlYWQgb2YgJWQgYnl0ZXMgZnJvbSBpbnNuX2FycmF5XFxuXCIsIHNpemUpO1xuK1x0XHRcdHJldHVybiAtRUFDQ0VTO1xuK1x0XHR9XG4rXHRcdHJlZ3NbdmFsdWVfcmVnbm9dID0gKnJlZztcbitcdFx0YWRkX3NjYWxhcl90b19yZWcoXHUwMDI2cmVnc1t2YWx1ZV9yZWdub10sIG9mZik7XG4rXHRcdHJlZ3NbdmFsdWVfcmVnbm9dLnR5cGUgPSBQVFJfVE9fSU5TTjtcbitcdFx0cmV0dXJuIDA7XG4rXHRjYXNlIEJQRl9NQVBfVFlQRV9QRVJDUFVfQVJSQVk6XG4rXHRcdGdvdG8gcmVnX3Vua25vd247XG4rXHRkZWZhdWx0OlxuK1x0XHRicmVhaztcbitcdH1cbitcbitcdC8qIElmIG1hcCBpcyByZWFkLW9ubHksIHRyYWNrIGl0cyBjb250ZW50cyBhcyBzY2FsYXJzLiAqL1xuK1x0aWYgKHRudW1faXNfY29uc3QocmVnLVx1MDAzZXZhcl9vZmYpIFx1MDAyNlx1MDAyNlxuK1x0ICAgIGJwZl9tYXBfaXNfcmRvbmx5KG1hcCkgXHUwMDI2XHUwMDI2XG4rXHQgICAgbWFwLVx1MDAzZW9wcy1cdTAwM2VtYXBfZGlyZWN0X3ZhbHVlX2FkZHIpIHtcbitcdFx0aW50IG1hcF9vZmYgPSBvZmYgKyByZWctXHUwMDNldmFyX29mZi52YWx1ZTtcbitcdFx0dTY0IHZhbCA9IDA7XG4rXHRcdGludCBlcnI7XG4rXG4rXHRcdGVyciA9IGJwZl9tYXBfZGlyZWN0X3JlYWQobWFwLCBtYXBfb2ZmLCBzaXplLCBcdTAwMjZ2YWwsIGlzX2xkc3gpO1xuK1x0XHRpZiAoZXJyKVxuK1x0XHRcdHJldHVybiBlcnI7XG4rXG4rXHRcdHJlZ3NbdmFsdWVfcmVnbm9dLnR5cGUgPSBTQ0FMQVJfVkFMVUU7XG4rXHRcdF9fbWFya19yZWdfa25vd24oXHUwMDI2cmVnc1t2YWx1ZV9yZWdub10sIHZhbCk7XG4rXHRcdHJldHVybiAwO1xuK1x0fVxuK1xuK3JlZ191bmtub3duOlxuK1x0bWFya19yZWdfdW5rbm93bihlbnYsIHJlZ3MsIHZhbHVlX3JlZ25vKTtcbitcdHJldHVybiAwO1xuK31cbitcbiAvKiBjaGVjayB3aGV0aGVyIG1lbW9yeSBhdCAocmVnbm8gKyBvZmYpIGlzIGFjY2Vzc2libGUgZm9yIHQgPSAocmVhZCB8IHdyaXRlKVxuICAqIGlmIHQ9PXdyaXRlLCB2YWx1ZV9yZWdubyBpcyBhIHJlZ2lzdGVyIHdoaWNoIHZhbHVlIGlzIHN0b3JlZCBpbnRvIG1lbW9yeVxuICAqIGlmIHQ9PXJlYWQsIHZhbHVlX3JlZ25vIGlzIGEgcmVnaXN0ZXIgd2hpY2ggd2lsbCByZWNlaXZlIHRoZSB2YWx1ZSBmcm9tIG1lbW9yeVxuQEAgLTYyMTIsMzggKzYyNTQsNyBAQCBzdGF0aWMgaW50IGNoZWNrX21lbV9hY2Nlc3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50IGluc25faWR4LCBzdHJ1Y3QgYlxuIFx0XHRpZiAoa3B0cl9maWVsZCkge1xuIFx0XHRcdGVyciA9IGNoZWNrX21hcF9rcHRyX2FjY2VzcyhlbnYsIHZhbHVlX3JlZ25vLCBpbnNuX2lkeCwga3B0cl9maWVsZCk7XG4gXHRcdH0gZWxzZSBpZiAodCA9PSBCUEZfUkVBRCBcdTAwMjZcdTAwMjYgdmFsdWVfcmVnbm8gXHUwMDNlPSAwKSB7XG4tXHRcdFx0c3RydWN0IGJwZl9tYXAgKm1hcCA9IHJlZy1cdTAwM2VtYXBfcHRyO1xuLVxuLVx0XHRcdC8qXG4tXHRcdFx0ICogSWYgbWFwIGlzIHJlYWQtb25seSwgdHJhY2sgaXRzIGNvbnRlbnRzIGFzIHNjYWxhcnMsXG4tXHRcdFx0ICogdW5sZXNzIGl0IGlzIGFuIGluc24gYXJyYXkgKHNlZSB0aGUgc3BlY2lhbCBjYXNlIGJlbG93KVxuLVx0XHRcdCAqL1xuLVx0XHRcdGlmICh0bnVtX2lzX2NvbnN0KHJlZy1cdTAwM2V2YXJfb2ZmKSBcdTAwMjZcdTAwMjZcbi1cdFx0XHQgICAgYnBmX21hcF9pc19yZG9ubHkobWFwKSBcdTAwMjZcdTAwMjZcbi1cdFx0XHQgICAgbWFwLVx1MDAzZW9wcy1cdTAwM2VtYXBfZGlyZWN0X3ZhbHVlX2FkZHIgXHUwMDI2XHUwMDI2XG4tXHRcdFx0ICAgIG1hcC1cdTAwM2VtYXBfdHlwZSAhPSBCUEZfTUFQX1RZUEVfSU5TTl9BUlJBWSkge1xuLVx0XHRcdFx0aW50IG1hcF9vZmYgPSBvZmYgKyByZWctXHUwMDNldmFyX29mZi52YWx1ZTtcbi1cdFx0XHRcdHU2NCB2YWwgPSAwO1xuLVxuLVx0XHRcdFx0ZXJyID0gYnBmX21hcF9kaXJlY3RfcmVhZChtYXAsIG1hcF9vZmYsIHNpemUsXG4tXHRcdFx0XHRcdFx0XHQgIFx1MDAyNnZhbCwgaXNfbGRzeCk7XG4tXHRcdFx0XHRpZiAoZXJyKVxuLVx0XHRcdFx0XHRyZXR1cm4gZXJyO1xuLVxuLVx0XHRcdFx0cmVnc1t2YWx1ZV9yZWdub10udHlwZSA9IFNDQUxBUl9WQUxVRTtcbi1cdFx0XHRcdF9fbWFya19yZWdfa25vd24oXHUwMDI2cmVnc1t2YWx1ZV9yZWdub10sIHZhbCk7XG4tXHRcdFx0fSBlbHNlIGlmIChtYXAtXHUwMDNlbWFwX3R5cGUgPT0gQlBGX01BUF9UWVBFX0lOU05fQVJSQVkpIHtcbi1cdFx0XHRcdGlmIChicGZfc2l6ZSAhPSBCUEZfRFcpIHtcbi1cdFx0XHRcdFx0dmVyYm9zZShlbnYsIFwiSW52YWxpZCByZWFkIG9mICVkIGJ5dGVzIGZyb20gaW5zbl9hcnJheVxcblwiLFxuLVx0XHRcdFx0XHRcdCAgICAgc2l6ZSk7XG4tXHRcdFx0XHRcdHJldHVybiAtRUFDQ0VTO1xuLVx0XHRcdFx0fVxuLVx0XHRcdFx0cmVnc1t2YWx1ZV9yZWdub10gPSAqcmVnO1xuLVx0XHRcdFx0YWRkX3NjYWxhcl90b19yZWcoXHUwMDI2cmVnc1t2YWx1ZV9yZWdub10sIG9mZik7XG4tXHRcdFx0XHRyZWdzW3ZhbHVlX3JlZ25vXS50eXBlID0gUFRSX1RPX0lOU047XG4tXHRcdFx0fSBlbHNlIHtcbi1cdFx0XHRcdG1hcmtfcmVnX3Vua25vd24oZW52LCByZWdzLCB2YWx1ZV9yZWdubyk7XG4tXHRcdFx0fVxuK1x0XHRcdGVyciA9IGNoZWNrX21hcF9tZW1fcmVhZChlbnYsIHJlZywgb2ZmLCBicGZfc2l6ZSwgdmFsdWVfcmVnbm8sIGlzX2xkc3gpO1xuIFx0XHR9XG4gXHR9IGVsc2UgaWYgKGJhc2VfdHlwZShyZWctXHUwMDNldHlwZSkgPT0gUFRSX1RPX01FTSkge1xuIFx0XHRib29sIHJkb25seV9tZW0gPSB0eXBlX2lzX3Jkb25seV9tZW0ocmVnLVx1MDAzZXR5cGUpO1xuQEAgLTY3MjUsNyArNjczNiw2IEBAIHN0YXRpYyBpbnQgY2hlY2tfc3RhY2tfcmFuZ2VfaW5pdGlhbGl6ZWQoXG4gXHRpZiAoZXJyKVxuIFx0XHRyZXR1cm4gZXJyO1xuIFxuLVxuIFx0aWYgKHRudW1faXNfY29uc3QocmVnLVx1MDAzZXZhcl9vZmYpKSB7XG4gXHRcdG1pbl9vZmYgPSBtYXhfb2ZmID0gcmVnLVx1MDAzZXZhcl9vZmYudmFsdWUgKyBvZmY7XG4gXHR9IGVsc2Uge1xuQEAgLTc0NDMsNyArNzQ1Myw2IEBAIHN0YXRpYyBib29sIGlzX2l0ZXJfbmV3X2tmdW5jKHN0cnVjdCBicGZfY2FsbF9hcmdfbWV0YSAqbWV0YSlcbiBcdHJldHVybiBtZXRhLVx1MDAzZWtmdW5jX2ZsYWdzIFx1MDAyNiBLRl9JVEVSX05FVztcbiB9XG4gXG4tXG4gc3RhdGljIGJvb2wgaXNfaXRlcl9kZXN0cm95X2tmdW5jKHN0cnVjdCBicGZfY2FsbF9hcmdfbWV0YSAqbWV0YSlcbiB7XG4gXHRyZXR1cm4gbWV0YS1cdTAwM2VrZnVuY19mbGFncyBcdTAwMjYgS0ZfSVRFUl9ERVNUUk9ZO1xuQEAgLTgyMjEsNiArODIzMCwxMiBAQCBzdGF0aWMgaW50IGNoZWNrX2FyZ19jb25zdF9zdHIoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbiBcdFx0cmV0dXJuIC1FQUNDRVM7XG4gXHR9XG4gXG4rXHRpZiAobWFwLVx1MDAzZW1hcF90eXBlID09IEJQRl9NQVBfVFlQRV9QRVJDUFVfQVJSQVkpIHtcbitcdFx0dmVyYm9zZShlbnYsIFwiJXMgcG9pbnRzIHRvIHBlcmNwdV9hcnJheSBtYXAgd2hpY2ggY2Fubm90IGJlIHVzZWQgYXMgY29uc3Qgc3RyaW5nXFxuXCIsXG4rXHRcdFx0cmVnX2FyZ19uYW1lKGVudiwgYXJnbm8pKTtcbitcdFx0cmV0dXJuIC1FQUNDRVM7XG4rXHR9XG4rXG4gXHRpZiAoIWJwZl9tYXBfaXNfcmRvbmx5KG1hcCkpIHtcbiBcdFx0dmVyYm9zZShlbnYsIFwiJXMgZG9lcyBub3QgcG9pbnQgdG8gYSByZWFkb25seSBtYXAnXFxuXCIsIHJlZ19hcmdfbmFtZShlbnYsIGFyZ25vKSk7XG4gXHRcdHJldHVybiAtRUFDQ0VTO1xuQEAgLTExNjY3LDcgKzExNjgyLDYgQEAgc3RhdGljIGludCBwcm9jZXNzX2lycV9mbGFnKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcmVnX3N0YXRlICpcbiBcdHJldHVybiAwO1xuIH1cbiBcbi1cbiBzdGF0aWMgaW50IHJlZl9zZXRfbm9uX293bmluZyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnKVxuIHtcbiBcdHN0cnVjdCBidGZfcmVjb3JkICpyZWMgPSByZWdfYnRmX3JlY29yZChyZWcpO1xuQEAgLTE2NTE1LDcgKzE2NTI5LDYgQEAgc3RhdGljIGludCBjaGVja19sZF9hYnMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuKVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuLVxuIHN0YXRpYyBib29sIHJldHVybl9yZXR2YWxfcmFuZ2Uoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9yZXR2YWxfcmFuZ2UgKnJhbmdlKVxuIHtcbiBcdGVudW0gYnBmX3Byb2dfdHlwZSBwcm9nX3R5cGUgPSByZXNvbHZlX3Byb2dfdHlwZShlbnYtXHUwMDNlcHJvZyk7XG5AQCAtMTg0NjEsOCArMTg0NzQsNiBAQCBzdGF0aWMgdm9pZCByZWxlYXNlX2luc25fYXJyYXlzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXG4gXHRcdGJwZl9pbnNuX2FycmF5X3JlbGVhc2UoZW52LVx1MDAzZWluc25fYXJyYXlfbWFwc1tpXSk7XG4gfVxuIFxuLVxuLVxuIC8qIFRoZSB2ZXJpZmllciBkb2VzIG1vcmUgZGF0YSBmbG93IGFuYWx5c2lzIHRoYW4gbGx2bSBhbmQgd2lsbCBub3RcbiAgKiBleHBsb3JlIGJyYW5jaGVzIHRoYXQgYXJlIGRlYWQgYXQgcnVuIHRpbWUuIE1hbGljaW91cyBwcm9ncmFtcyBjYW5cbiAgKiBoYXZlIGRlYWQgY29kZSB0b28uIFRoZXJlZm9yZSByZXBsYWNlIGFsbCBkZWFkIGF0LXJ1bi10aW1lIGNvZGVcbkBAIC0xODQ5MCw4ICsxODUwMSw2IEBAIHN0YXRpYyB2b2lkIHNhbml0aXplX2RlYWRfY29kZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxuIFx0fVxuIH1cbiBcbi1cbi1cbiBzdGF0aWMgdm9pZCBmcmVlX3N0YXRlcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxuIHtcbiBcdHN0cnVjdCBicGZfdmVyaWZpZXJfc3RhdGVfbGlzdCAqc2w7XG5AQCAtMTg3NzMsNyArMTg3ODIsNiBAQCBzdGF0aWMgaW50IGRvX2NoZWNrX21haW4oc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcbiBcdHJldHVybiByZXQ7XG4gfVxuIFxuLVxuIHN0YXRpYyB2b2lkIHByaW50X3ZlcmlmaWNhdGlvbl9zdGF0cyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxuIHtcbiBcdC8qIFNraXAgb3ZlciBoaWRkZW4gc3VicHJvZ3Mgd2hpY2ggYXJlIG5vdCB2ZXJpZmllZC4gKi9cbmRpZmYgLS1naXQgYS90b29scy9icGYvYnBmdG9vbC9nZW4uYyBiL3Rvb2xzL2JwZi9icGZ0b29sL2dlbi5jXG5pbmRleCBhMDFkMDZkMjJkMWEzLi5hNTA1NDBlZjY1MjFjIDEwMDY0NFxuLS0tIGEvdG9vbHMvYnBmL2JwZnRvb2wvZ2VuLmNcbisrKyBiL3Rvb2xzL2JwZi9icGZ0b29sL2dlbi5jXG5AQCAtMTAxLDYgKzEwMSwxMiBAQCBzdGF0aWMgYm9vbCBnZXRfbWFwX2lkZW50KGNvbnN0IHN0cnVjdCBicGZfbWFwICptYXAsIGNoYXIgKmJ1Ziwgc2l6ZV90IGJ1Zl9zeilcbiBcdFx0cmV0dXJuIHRydWU7XG4gXHR9XG4gXG4rXHRpZiAoYnBmX21hcF9fdHlwZShtYXApID09IEJQRl9NQVBfVFlQRV9QRVJDUFVfQVJSQVkpIHtcbitcdFx0c25wcmludGYoYnVmLCBidWZfc3osIFwiJXNcIiwgbmFtZSArIDEpO1xuK1x0XHRzYW5pdGl6ZV9pZGVudGlmaWVyKGJ1Zik7XG4rXHRcdHJldHVybiB0cnVlO1xuK1x0fVxuK1xuIFx0Zm9yICAoaSA9IDAsIG4gPSBBUlJBWV9TSVpFKHNmeHMpOyBpIFx1MDAzYyBuOyBpKyspIHtcbiBcdFx0Y29uc3QgY2hhciAqc2Z4ID0gc2Z4c1tpXSwgKnA7XG4gXG5AQCAtMTE3LDcgKzEyMyw3IEBAIHN0YXRpYyBib29sIGdldF9tYXBfaWRlbnQoY29uc3Qgc3RydWN0IGJwZl9tYXAgKm1hcCwgY2hhciAqYnVmLCBzaXplX3QgYnVmX3N6KVxuIFxuIHN0YXRpYyBib29sIGdldF9kYXRhc2VjX2lkZW50KGNvbnN0IGNoYXIgKnNlY19uYW1lLCBjaGFyICpidWYsIHNpemVfdCBidWZfc3opXG4ge1xuLVx0c3RhdGljIGNvbnN0IGNoYXIgKnBmeHNbXSA9IHsgXCIuZGF0YVwiLCBcIi5yb2RhdGFcIiwgXCIuYnNzXCIsIFwiLmtjb25maWdcIiB9O1xuK1x0c3RhdGljIGNvbnN0IGNoYXIgKnBmeHNbXSA9IHsgXCIuZGF0YVwiLCBcIi5yb2RhdGFcIiwgXCIuYnNzXCIsIFwiLnBlcmNwdVwiLCBcIi5rY29uZmlnXCIgfTtcbiBcdGludCBpLCBuO1xuIFxuIFx0LyogcmVjb2duaXplIGhhcmQgY29kZWQgTExWTSBzZWN0aW9uIG5hbWUgKi9cbkBAIC0yNTQsNyArMjYwLDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBidGZfdHlwZSAqZmluZF90eXBlX2Zvcl9tYXAoc3RydWN0IGJ0ZiAqYnRmLCBjb25zdCBjaGFyICptYXBcbiBcdHJldHVybiBOVUxMO1xuIH1cbiBcbi1zdGF0aWMgYm9vbCBpc19tbWFwYWJsZV9tYXAoY29uc3Qgc3RydWN0IGJwZl9tYXAgKm1hcCwgY2hhciAqYnVmLCBzaXplX3Qgc3opXG4rc3RhdGljIGJvb2wgaXNfc2tlbF9kYXRhKGNvbnN0IHN0cnVjdCBicGZfbWFwICptYXAsIGNoYXIgKmJ1Ziwgc2l6ZV90IHN6KVxuIHtcbiBcdHNpemVfdCB0bXBfc3o7XG4gXG5AQCAtMjYzLDEzICsyNjksMjQgQEAgc3RhdGljIGJvb2wgaXNfbW1hcGFibGVfbWFwKGNvbnN0IHN0cnVjdCBicGZfbWFwICptYXAsIGNoYXIgKmJ1Ziwgc2l6ZV90IHN6KVxuIFx0XHRyZXR1cm4gdHJ1ZTtcbiBcdH1cbiBcbi1cdGlmICghYnBmX21hcF9faXNfaW50ZXJuYWwobWFwKSB8fCAhKGJwZl9tYXBfX21hcF9mbGFncyhtYXApIFx1MDAyNiBCUEZfRl9NTUFQQUJMRSkpXG4rXHRpZiAoIWJwZl9tYXBfX2lzX2ludGVybmFsKG1hcCkpXG4gXHRcdHJldHVybiBmYWxzZTtcbiBcbiBcdGlmICghZ2V0X21hcF9pZGVudChtYXAsIGJ1Ziwgc3opKVxuIFx0XHRyZXR1cm4gZmFsc2U7XG4gXG4tXHRyZXR1cm4gdHJ1ZTtcbitcdGlmIChicGZfbWFwX19tYXBfZmxhZ3MobWFwKSBcdTAwMjYgQlBGX0ZfTU1BUEFCTEUpXG4rXHRcdHJldHVybiB0cnVlO1xuK1xuK1x0aWYgKGJwZl9tYXBfX3R5cGUobWFwKSA9PSBCUEZfTUFQX1RZUEVfUEVSQ1BVX0FSUkFZKVxuK1x0XHRyZXR1cm4gYnBmX21hcF9fYnRmX3ZhbHVlX3R5cGVfaWQobWFwKSAhPSAwO1xuK1xuK1x0cmV0dXJuIGZhbHNlO1xuK31cbitcbitzdGF0aWMgYm9vbCBpc19tbWFwYWJsZV9tYXAoY29uc3Qgc3RydWN0IGJwZl9tYXAgKm1hcCwgY2hhciAqYnVmLCBzaXplX3Qgc3opXG4re1xuK1x0cmV0dXJuIGlzX3NrZWxfZGF0YShtYXAsIGJ1Ziwgc3opIFx1MDAyNlx1MDAyNiBicGZfbWFwX190eXBlKG1hcCkgIT0gQlBGX01BUF9UWVBFX1BFUkNQVV9BUlJBWTtcbiB9XG4gXG4gc3RhdGljIGludCBjb2RlZ2VuX2RhdGFzZWNzKHN0cnVjdCBicGZfb2JqZWN0ICpvYmosIGNvbnN0IGNoYXIgKm9ial9uYW1lKVxuQEAgLTI4Nyw3ICszMDQsNyBAQCBzdGF0aWMgaW50IGNvZGVnZW5fZGF0YXNlY3Moc3RydWN0IGJwZl9vYmplY3QgKm9iaiwgY29uc3QgY2hhciAqb2JqX25hbWUpXG4gXG4gXHRicGZfb2JqZWN0X19mb3JfZWFjaF9tYXAobWFwLCBvYmopIHtcbiBcdFx0Lyogb25seSBnZW5lcmF0ZSBkZWZpbml0aW9ucyBmb3IgbWVtb3J5LW1hcHBlZCBpbnRlcm5hbCBtYXBzICovXG4tXHRcdGlmICghaXNfbW1hcGFibGVfbWFwKG1hcCwgbWFwX2lkZW50LCBzaXplb2YobWFwX2lkZW50KSkpXG4rXHRcdGlmICghaXNfc2tlbF9kYXRhKG1hcCwgbWFwX2lkZW50LCBzaXplb2YobWFwX2lkZW50KSkpXG4gXHRcdFx0Y29udGludWU7XG4gXG4gXHRcdHNlYyA9IGZpbmRfdHlwZV9mb3JfbWFwKGJ0ZiwgbWFwX2lkZW50KTtcbkBAIC01MTcsNyArNTM0LDcgQEAgc3RhdGljIHZvaWQgY29kZWdlbl9hc3NlcnRzKHN0cnVjdCBicGZfb2JqZWN0ICpvYmosIGNvbnN0IGNoYXIgKm9ial9uYW1lKVxuIFx0XHRcIiwgb2JqX25hbWUpO1xuIFxuIFx0YnBmX29iamVjdF9fZm9yX2VhY2hfbWFwKG1hcCwgb2JqKSB7XG4tXHRcdGlmICghaXNfbW1hcGFibGVfbWFwKG1hcCwgbWFwX2lkZW50LCBzaXplb2YobWFwX2lkZW50KSkpXG4rXHRcdGlmICghaXNfc2tlbF9kYXRhKG1hcCwgbWFwX2lkZW50LCBzaXplb2YobWFwX2lkZW50KSkpXG4gXHRcdFx0Y29udGludWU7XG4gXG4gXHRcdHNlYyA9IGZpbmRfdHlwZV9mb3JfbWFwKGJ0ZiwgbWFwX2lkZW50KTtcbkBAIC02NjgsOCArNjg1LDcgQEAgc3RhdGljIHZvaWQgY29kZWdlbl9kZXN0cm95KHN0cnVjdCBicGZfb2JqZWN0ICpvYmosIGNvbnN0IGNoYXIgKm9ial9uYW1lKVxuIFx0YnBmX29iamVjdF9fZm9yX2VhY2hfbWFwKG1hcCwgb2JqKSB7XG4gXHRcdGlmICghZ2V0X21hcF9pZGVudChtYXAsIGlkZW50LCBzaXplb2YoaWRlbnQpKSlcbiBcdFx0XHRjb250aW51ZTtcbi1cdFx0aWYgKGJwZl9tYXBfX2lzX2ludGVybmFsKG1hcCkgXHUwMDI2XHUwMDI2XG4tXHRcdCAgICAoYnBmX21hcF9fbWFwX2ZsYWdzKG1hcCkgXHUwMDI2IEJQRl9GX01NQVBBQkxFKSlcbitcdFx0aWYgKGlzX3NrZWxfZGF0YShtYXAsIGlkZW50LCBzaXplb2YoaWRlbnQpKSlcbiBcdFx0XHRwcmludGYoXCJcXHRza2VsX2ZyZWVfbWFwX2RhdGEoc2tlbC1cdTAwM2UlMSRzLCBza2VsLVx1MDAzZW1hcHMuJTEkcy5pbml0aWFsX3ZhbHVlLCAlMiR6dSk7XFxuXCIsXG4gXHRcdFx0ICAgICAgIGlkZW50LCBicGZfbWFwX21tYXBfc3oobWFwKSk7XG4gXHRcdGNvZGVnZW4oXCJcXFxuQEAgLTc0MSw3ICs3NTcsNyBAQCBzdGF0aWMgaW50IGdlbl90cmFjZShzdHJ1Y3QgYnBmX29iamVjdCAqb2JqLCBjb25zdCBjaGFyICpvYmpfbmFtZSwgY29uc3QgY2hhciAqaFxuIFx0XHRjb25zdCB2b2lkICptbWFwX2RhdGEgPSBOVUxMO1xuIFx0XHRzaXplX3QgbW1hcF9zaXplID0gMDtcbiBcbi1cdFx0aWYgKCFpc19tbWFwYWJsZV9tYXAobWFwLCBpZGVudCwgc2l6ZW9mKGlkZW50KSkpXG4rXHRcdGlmICghaXNfc2tlbF9kYXRhKG1hcCwgaWRlbnQsIHNpemVvZihpZGVudCkpKVxuIFx0XHRcdGNvbnRpbnVlO1xuIFxuIFx0XHRjb2RlZ2VuKFwiXFxcbkBAIC04NDksOSArODY1LDIzIEBAIHN0YXRpYyBpbnQgZ2VuX3RyYWNlKHN0cnVjdCBicGZfb2JqZWN0ICpvYmosIGNvbnN0IGNoYXIgKm9ial9uYW1lLCBjb25zdCBjaGFyICpoXG4gXHRicGZfb2JqZWN0X19mb3JfZWFjaF9tYXAobWFwLCBvYmopIHtcbiBcdFx0Y29uc3QgY2hhciAqbW1hcF9mbGFncztcbiBcbi1cdFx0aWYgKCFpc19tbWFwYWJsZV9tYXAobWFwLCBpZGVudCwgc2l6ZW9mKGlkZW50KSkpXG4rXHRcdGlmICghaXNfc2tlbF9kYXRhKG1hcCwgaWRlbnQsIHNpemVvZihpZGVudCkpKVxuIFx0XHRcdGNvbnRpbnVlO1xuIFxuK1x0XHRpZiAoYnBmX21hcF9fdHlwZShtYXApID09IEJQRl9NQVBfVFlQRV9QRVJDUFVfQVJSQVkpIHtcbitcdFx0XHRjb2RlZ2VuKFwiXFxcbitcdFx0XFxuXFxcbitcdFx0XHRlcnIgPSBza2VsX3Byb3RlY3RfbWFwX2RhdGEoc2tlbC1cdTAwM2UlMSRzLCBcdTAwMjZza2VsLVx1MDAzZW1hcHMuJTEkcy5pbml0aWFsX3ZhbHVlLCAlMiR6ZCk7XFxuXFxcbitcdFx0XHRpZiAoZXJyKVx0XHRcdFx0XHQgICAgXFxuXFxcbitcdFx0XHRcdHJldHVybiBlcnI7XHRcdFx0XHQgICAgXFxuXFxcbitcdFx0I2lmZGVmIF9fS0VSTkVMX19cdFx0XHRcdFx0ICAgIFxcblxcXG4rXHRcdFx0c2tlbC1cdTAwM2UlMSRzID0gTlVMTDtcdFx0XHRcdCAgICBcXG5cXFxuK1x0XHQjZW5kaWZcdFx0XHRcdFx0XHRcdCAgICBcXG5cXFxuK1x0XHRcdFwiLFxuK1x0XHRcdGlkZW50LCBicGZfbWFwX21tYXBfc3oobWFwKSk7XG4rXHRcdFx0Y29udGludWU7XG4rXHRcdH1cbitcbiBcdFx0aWYgKGJwZl9tYXBfX21hcF9mbGFncyhtYXApIFx1MDAyNiBCUEZfRl9SRE9OTFlfUFJPRylcbiBcdFx0XHRtbWFwX2ZsYWdzID0gXCJQUk9UX1JFQURcIjtcbiBcdFx0ZWxzZVxuQEAgLTk1NSw4ICs5ODUsNyBAQCBjb2RlZ2VuX21hcHNfc2tlbGV0b24oc3RydWN0IGJwZl9vYmplY3QgKm9iaiwgc2l6ZV90IG1hcF9jbnQsIGJvb2wgbW1hcGVkLCBib29sXG4gXHRcdFx0XHRtYXAtXHUwMDNlbWFwID0gXHUwMDI2b2JqLVx1MDAzZW1hcHMuJXM7XHQgICAgXFxuXFxcbiBcdFx0XHRcIixcbiBcdFx0XHRpLCBicGZfbWFwX19uYW1lKG1hcCksIGlkZW50KTtcbi1cdFx0LyogbWVtb3J5LW1hcHBlZCBpbnRlcm5hbCBtYXBzICovXG4tXHRcdGlmIChtbWFwZWQgXHUwMDI2XHUwMDI2IGlzX21tYXBhYmxlX21hcChtYXAsIGlkZW50LCBzaXplb2YoaWRlbnQpKSkge1xuK1x0XHRpZiAobW1hcGVkIFx1MDAyNlx1MDAyNiBpc19za2VsX2RhdGEobWFwLCBpZGVudCwgc2l6ZW9mKGlkZW50KSkpIHtcbiBcdFx0XHRwcmludGYoXCJcXHRtYXAtXHUwMDNlbW1hcGVkID0gKHZvaWQgKiopXHUwMDI2b2JqLVx1MDAzZSVzO1xcblwiLCBpZGVudCk7XG4gXHRcdH1cbiBcbmRpZmYgLS1naXQgYS90b29scy9saWIvYnBmL2JwZl9nZW5faW50ZXJuYWwuaCBiL3Rvb2xzL2xpYi9icGYvYnBmX2dlbl9pbnRlcm5hbC5oXG5pbmRleCAwNDI1NjkxODc3NTIxLi42YzVhZDZjNTVlOGE2IDEwMDY0NFxuLS0tIGEvdG9vbHMvbGliL2JwZi9icGZfZ2VuX2ludGVybmFsLmhcbisrKyBiL3Rvb2xzL2xpYi9icGYvYnBmX2dlbl9pbnRlcm5hbC5oXG5AQCAtNjUsNyArNjUsOCBAQCB2b2lkIGJwZl9nZW5fX3Byb2dfbG9hZChzdHJ1Y3QgYnBmX2dlbiAqZ2VuLFxuIFx0XHRcdGVudW0gYnBmX3Byb2dfdHlwZSBwcm9nX3R5cGUsIGNvbnN0IGNoYXIgKnByb2dfbmFtZSxcbiBcdFx0XHRjb25zdCBjaGFyICpsaWNlbnNlLCBzdHJ1Y3QgYnBmX2luc24gKmluc25zLCBzaXplX3QgaW5zbl9jbnQsXG4gXHRcdFx0c3RydWN0IGJwZl9wcm9nX2xvYWRfb3B0cyAqbG9hZF9hdHRyLCBpbnQgcHJvZ19pZHgpO1xuLXZvaWQgYnBmX2dlbl9fbWFwX3VwZGF0ZV9lbGVtKHN0cnVjdCBicGZfZ2VuICpnZW4sIGludCBtYXBfaWR4LCB2b2lkICp2YWx1ZSwgX191MzIgdmFsdWVfc2l6ZSk7XG4rdm9pZCBicGZfZ2VuX19tYXBfdXBkYXRlX2VsZW0oc3RydWN0IGJwZl9nZW4gKmdlbiwgaW50IG1hcF9pZHgsIHZvaWQgKnZhbHVlLCBfX3UzMiB2YWx1ZV9zaXplLFxuK1x0XHRcdCAgICAgIF9fdTY0IGZsYWdzKTtcbiB2b2lkIGJwZl9nZW5fX21hcF9mcmVlemUoc3RydWN0IGJwZl9nZW4gKmdlbiwgaW50IG1hcF9pZHgpO1xuIHZvaWQgYnBmX2dlbl9fcmVjb3JkX2F0dGFjaF90YXJnZXQoc3RydWN0IGJwZl9nZW4gKmdlbiwgY29uc3QgY2hhciAqbmFtZSwgZW51bSBicGZfYXR0YWNoX3R5cGUgdHlwZSk7XG4gdm9pZCBicGZfZ2VuX19yZWNvcmRfZXh0ZXJuKHN0cnVjdCBicGZfZ2VuICpnZW4sIGNvbnN0IGNoYXIgKm5hbWUsIGJvb2wgaXNfd2VhayxcbmRpZmYgLS1naXQgYS90b29scy9saWIvYnBmL2ZlYXR1cmVzLmMgYi90b29scy9saWIvYnBmL2ZlYXR1cmVzLmNcbmluZGV4IGI3ZTM4OGY5OWQwYmIuLmVmOTU4MWMxMTMwMzUgMTAwNjQ0XG4tLS0gYS90b29scy9saWIvYnBmL2ZlYXR1cmVzLmNcbisrKyBiL3Rvb2xzL2xpYi9icGYvZmVhdHVyZXMuY1xuQEAgLTYyMCw2ICs2MjAsMzggQEAgc3RhdGljIGludCBwcm9iZV9icGZfc3lzY2FsbF9jb21tb25fYXR0cnMoaW50IHRva2VuX2ZkKVxuIFx0cmV0dXJuIHByb2JlX3N5c19icGZfZXh0KCk7XG4gfVxuIFxuK3N0YXRpYyBpbnQgcHJvYmVfa2Vybl9wZXJjcHVfZGF0YShpbnQgdG9rZW5fZmQpXG4re1xuK1x0c3RydWN0IGJwZl9pbnNuIGluc25zW10gPSB7XG4rXHRcdEJQRl9MRF9NQVBfVkFMVUUoQlBGX1JFR18xLCAwLCAwKSxcbitcdFx0QlBGX0xEWF9NRU0oQlBGX0RXLCBCUEZfUkVHXzAsIEJQRl9SRUdfMSwgMCksXG4rXHRcdEJQRl9FWElUX0lOU04oKSxcbitcdH07XG4rXHRMSUJCUEZfT1BUUyhicGZfbWFwX2NyZWF0ZV9vcHRzLCBtYXBfb3B0cyxcbitcdFx0LnRva2VuX2ZkID0gdG9rZW5fZmQsXG4rXHRcdC5tYXBfZmxhZ3MgPSB0b2tlbl9mZCA/IEJQRl9GX1RPS0VOX0ZEIDogMCxcbitcdCk7XG4rXHRMSUJCUEZfT1BUUyhicGZfcHJvZ19sb2FkX29wdHMsIHByb2dfb3B0cyxcbitcdFx0LnRva2VuX2ZkID0gdG9rZW5fZmQsXG4rXHRcdC5wcm9nX2ZsYWdzID0gdG9rZW5fZmQgPyBCUEZfRl9UT0tFTl9GRCA6IDAsXG4rXHQpO1xuK1x0aW50IHJldCwgbWFwLCBpbnNuX2NudCA9IEFSUkFZX1NJWkUoaW5zbnMpO1xuK1xuK1x0bWFwID0gYnBmX21hcF9jcmVhdGUoQlBGX01BUF9UWVBFX1BFUkNQVV9BUlJBWSwgXCJsaWJicGZfcGVyY3B1XCIsIHNpemVvZihpbnQpLCA4LCAxLFxuK1x0XHRcdCAgICAgXHUwMDI2bWFwX29wdHMpO1xuK1x0aWYgKG1hcCBcdTAwM2MgMCkge1xuK1x0XHRwcl93YXJuKFwiRXJyb3IgaW4gJXMoKTogJXMuIENvdWxkbid0IGNyZWF0ZSBzaW1wbGUgcGVyY3B1X2FycmF5IG1hcC5cXG5cIixcbitcdFx0XHRfX2Z1bmNfXywgZXJyc3RyKG1hcCkpO1xuK1x0XHRyZXR1cm4gbWFwO1xuK1x0fVxuK1xuK1x0aW5zbnNbMF0uaW1tID0gbWFwO1xuK1xuK1x0cmV0ID0gYnBmX3Byb2dfbG9hZChCUEZfUFJPR19UWVBFX1NPQ0tFVF9GSUxURVIsIE5VTEwsIFwiR1BMXCIsIGluc25zLCBpbnNuX2NudCwgXHUwMDI2cHJvZ19vcHRzKTtcbitcdGNsb3NlKG1hcCk7XG4rXHRyZXR1cm4gcHJvYmVfZmQocmV0KTtcbit9XG4rXG4gdHlwZWRlZiBpbnQgKCpmZWF0dXJlX3Byb2JlX2ZuKShpbnQgLyogdG9rZW5fZmQgKi8pO1xuIFxuIHN0YXRpYyBzdHJ1Y3Qga2Vybl9mZWF0dXJlX2NhY2hlIGZlYXR1cmVfY2FjaGU7XG5AQCAtNzA3LDYgKzczOSw5IEBAIHN0YXRpYyBzdHJ1Y3Qga2Vybl9mZWF0dXJlX2Rlc2Mge1xuIFx0W0ZFQVRfQlBGX1NZU0NBTExfQ09NTU9OX0FUVFJTXSA9IHtcbiBcdFx0XCJCUEYgc3lzY2FsbCBjb21tb24gYXR0cmlidXRlcyBzdXBwb3J0XCIsIHByb2JlX2JwZl9zeXNjYWxsX2NvbW1vbl9hdHRycyxcbiBcdH0sXG4rXHRbRkVBVF9QRVJDUFVfREFUQV0gPSB7XG4rXHRcdFwia2VybmVsIHN1cHBvcnRzIHBlcmNwdSBkYXRhXCIsIHByb2JlX2tlcm5fcGVyY3B1X2RhdGEsXG4rXHR9LFxuIH07XG4gXG4gYm9vbCBmZWF0X3N1cHBvcnRlZChzdHJ1Y3Qga2Vybl9mZWF0dXJlX2NhY2hlICpjYWNoZSwgZW51bSBrZXJuX2ZlYXR1cmVfaWQgZmVhdF9pZClcbmRpZmYgLS1naXQgYS90b29scy9saWIvYnBmL2dlbl9sb2FkZXIuYyBiL3Rvb2xzL2xpYi9icGYvZ2VuX2xvYWRlci5jXG5pbmRleCA2ZTNkZDUyNDI3NjE4Li5hZjNhMDRmMTYxYWMxIDEwMDY0NFxuLS0tIGEvdG9vbHMvbGliL2JwZi9nZW5fbG9hZGVyLmNcbisrKyBiL3Rvb2xzL2xpYi9icGYvZ2VuX2xvYWRlci5jXG5AQCAtMTEyOCw3ICsxMTI4LDcgQEAgdm9pZCBicGZfZ2VuX19wcm9nX2xvYWQoc3RydWN0IGJwZl9nZW4gKmdlbixcbiB9XG4gXG4gdm9pZCBicGZfZ2VuX19tYXBfdXBkYXRlX2VsZW0oc3RydWN0IGJwZl9nZW4gKmdlbiwgaW50IG1hcF9pZHgsIHZvaWQgKnB2YWx1ZSxcbi1cdFx0XHQgICAgICBfX3UzMiB2YWx1ZV9zaXplKVxuK1x0XHRcdCAgICAgIF9fdTMyIHZhbHVlX3NpemUsIF9fdTY0IGZsYWdzKVxuIHtcbiBcdGludCBhdHRyX3NpemUgPSBvZmZzZXRvZmVuZCh1bmlvbiBicGZfYXR0ciwgZmxhZ3MpO1xuIFx0aW50IG1hcF91cGRhdGVfYXR0ciwgdmFsdWUsIGtleTtcbkBAIC0xMTM2LDYgKzExMzYsNyBAQCB2b2lkIGJwZl9nZW5fX21hcF91cGRhdGVfZWxlbShzdHJ1Y3QgYnBmX2dlbiAqZ2VuLCBpbnQgbWFwX2lkeCwgdm9pZCAqcHZhbHVlLFxuIFx0aW50IHplcm8gPSAwO1xuIFxuIFx0bWVtc2V0KFx1MDAyNmF0dHIsIDAsIGF0dHJfc2l6ZSk7XG4rXHRhdHRyLmZsYWdzID0gdGd0X2VuZGlhbihmbGFncyk7XG4gXG4gXHR2YWx1ZSA9IGFkZF9kYXRhKGdlbiwgcHZhbHVlLCB2YWx1ZV9zaXplKTtcbiBcdGtleSA9IGFkZF9kYXRhKGdlbiwgXHUwMDI2emVybywgc2l6ZW9mKHplcm8pKTtcbmRpZmYgLS1naXQgYS90b29scy9saWIvYnBmL2xpYmJwZi5jIGIvdG9vbHMvbGliL2JwZi9saWJicGYuY1xuaW5kZXggNTE0ZTRlOWRhYTgyNS4uOWY3OWE4ZTg1MGZkYiAxMDA2NDRcbi0tLSBhL3Rvb2xzL2xpYi9icGYvbGliYnBmLmNcbisrKyBiL3Rvb2xzL2xpYi9icGYvbGliYnBmLmNcbkBAIC01NDEsNiArNTQxLDcgQEAgc3RydWN0IGJwZl9zdHJ1Y3Rfb3BzIHtcbiB9O1xuIFxuICNkZWZpbmUgREFUQV9TRUMgXCIuZGF0YVwiXG4rI2RlZmluZSBQRVJDUFVfU0VDIFwiLnBlcmNwdVwiXG4gI2RlZmluZSBCU1NfU0VDIFwiLmJzc1wiXG4gI2RlZmluZSBST0RBVEFfU0VDIFwiLnJvZGF0YVwiXG4gI2RlZmluZSBLQ09ORklHX1NFQyBcIi5rY29uZmlnXCJcbkBAIC01NTUsNiArNTU2LDcgQEAgZW51bSBsaWJicGZfbWFwX3R5cGUge1xuIFx0TElCQlBGX01BUF9CU1MsXG4gXHRMSUJCUEZfTUFQX1JPREFUQSxcbiBcdExJQkJQRl9NQVBfS0NPTkZJRyxcbitcdExJQkJQRl9NQVBfUEVSQ1BVLFxuIH07XG4gXG4gc3RydWN0IGJwZl9tYXBfZGVmIHtcbkBAIC02NjYsNiArNjY4LDcgQEAgZW51bSBzZWNfdHlwZSB7XG4gXHRTRUNfREFUQSxcbiBcdFNFQ19ST0RBVEEsXG4gXHRTRUNfU1RfT1BTLFxuK1x0U0VDX1BFUkNQVSxcbiB9O1xuIFxuIHN0cnVjdCBlbGZfc2VjX2Rlc2Mge1xuQEAgLTE4MzksNiArMTg0Miw4IEBAIHN0YXRpYyBzaXplX3QgYnBmX21hcF9tbWFwX3N6KGNvbnN0IHN0cnVjdCBicGZfbWFwICptYXApXG4gXHRzd2l0Y2ggKG1hcC1cdTAwM2VkZWYudHlwZSkge1xuIFx0Y2FzZSBCUEZfTUFQX1RZUEVfQVJSQVk6XG4gXHRcdHJldHVybiBhcnJheV9tYXBfbW1hcF9zeihtYXAtXHUwMDNlZGVmLnZhbHVlX3NpemUsIG1hcC1cdTAwM2VkZWYubWF4X2VudHJpZXMpO1xuK1x0Y2FzZSBCUEZfTUFQX1RZUEVfUEVSQ1BVX0FSUkFZOlxuK1x0XHRyZXR1cm4gbWFwLVx1MDAzZWRlZi52YWx1ZV9zaXplO1xuIFx0Y2FzZSBCUEZfTUFQX1RZUEVfQVJFTkE6XG4gXHRcdHJldHVybiBwYWdlX3N6ICogbWFwLVx1MDAzZWRlZi5tYXhfZW50cmllcztcbiBcdGRlZmF1bHQ6XG5AQCAtMTg2Niw3ICsxODcxLDggQEAgc3RhdGljIGludCBicGZfbWFwX21tYXBfcmVzaXplKHN0cnVjdCBicGZfbWFwICptYXAsIHNpemVfdCBvbGRfc3osIHNpemVfdCBuZXdfc3pcbiBcdHJldHVybiAwO1xuIH1cbiBcbi1zdGF0aWMgY2hhciAqaW50ZXJuYWxfbWFwX25hbWUoc3RydWN0IGJwZl9vYmplY3QgKm9iaiwgY29uc3QgY2hhciAqcmVhbF9uYW1lKVxuK3N0YXRpYyBjaGFyICppbnRlcm5hbF9tYXBfbmFtZShzdHJ1Y3QgYnBmX29iamVjdCAqb2JqLCBjb25zdCBjaGFyICpyZWFsX25hbWUsXG4rXHRcdFx0ICAgICAgIGVudW0gbGliYnBmX21hcF90eXBlIHR5cGUpXG4ge1xuIFx0Y2hhciBtYXBfbmFtZVtCUEZfT0JKX05BTUVfTEVOXSwgKnA7XG4gXHRpbnQgcGZ4X2xlbiwgc2Z4X2xlbiA9IG1heCgoc2l6ZV90KTcsIHN0cmxlbihyZWFsX25hbWUpKTtcbkBAIC0xOTA3LDggKzE5MTMsMTEgQEAgc3RhdGljIGNoYXIgKmludGVybmFsX21hcF9uYW1lKHN0cnVjdCBicGZfb2JqZWN0ICpvYmosIGNvbnN0IGNoYXIgKnJlYWxfbmFtZSlcbiBcdGlmIChzZnhfbGVuIFx1MDAzZT0gQlBGX09CSl9OQU1FX0xFTilcbiBcdFx0c2Z4X2xlbiA9IEJQRl9PQkpfTkFNRV9MRU4gLSAxO1xuIFxuLVx0LyogaWYgdGhlcmUgYXJlIHR3byBvciBtb3JlIGRvdHMgaW4gbWFwIG5hbWUsIGl0J3MgYSBjdXN0b20gZG90IG1hcCAqL1xuLVx0aWYgKHN0cmNocihyZWFsX25hbWUgKyAxLCAnLicpICE9IE5VTEwpXG4rXHQvKlxuK1x0ICogRG9uJ3QgcHJlZml4IHRoZSBicGZfb2JqZWN0IG5hbWUgaWYgdGhpcyBpcyBhIGN1c3RvbSBkb3QgbWFwXG4rXHQgKiAoY29udGFpbmluZyB0d28gb3IgbW9yZSBkb3RzKSBvciBhIHBlcmNwdSBkYXRhIG1hcC5cbitcdCAqL1xuK1x0aWYgKHN0cmNocihyZWFsX25hbWUgKyAxLCAnLicpICE9IE5VTEwgfHwgdHlwZSA9PSBMSUJCUEZfTUFQX1BFUkNQVSlcbiBcdFx0cGZ4X2xlbiA9IDA7XG4gXHRlbHNlXG4gXHRcdHBmeF9sZW4gPSBtaW4oKHNpemVfdClCUEZfT0JKX05BTUVfTEVOIC0gc2Z4X2xlbiAtIDEsIHN0cmxlbihvYmotXHUwMDNlbmFtZSkpO1xuQEAgLTE5NDEsNiArMTk1MCwxMyBAQCBzdGF0aWMgYm9vbCBtYXBfaXNfbW1hcGFibGUoc3RydWN0IGJwZl9vYmplY3QgKm9iaiwgc3RydWN0IGJwZl9tYXAgKm1hcClcbiBcdGlmICghbWFwLVx1MDAzZWJ0Zl92YWx1ZV90eXBlX2lkKVxuIFx0XHRyZXR1cm4gZmFsc2U7XG4gXG4rXHQvKlxuK1x0ICogVGhlIGludGVybmFsIFBFUkNQVSBtYXBzIGFyZSBub3QgbW1hcGJsZSBiZWNhdXNlIHRoZSB1bmRlcmx5aW5nXG4rXHQgKiBwZXJjcHVfYXJyYXkgbWFwcyBkbyBub3QgaGF2ZSBtbWFwIHN1cHBvcnQuXG4rXHQgKi9cbitcdGlmIChtYXAtXHUwMDNlbGliYnBmX3R5cGUgPT0gTElCQlBGX01BUF9QRVJDUFUpXG4rXHRcdHJldHVybiBmYWxzZTtcbitcbiBcdHQgPSBidGZfX3R5cGVfYnlfaWQob2JqLVx1MDAzZWJ0ZiwgbWFwLVx1MDAzZWJ0Zl92YWx1ZV90eXBlX2lkKTtcbiBcdGlmICghYnRmX2lzX2RhdGFzZWModCkpXG4gXHRcdHJldHVybiBmYWxzZTtcbkBAIC0xOTYyLDYgKzE5NzgsNyBAQCBzdGF0aWMgaW50XG4gYnBmX29iamVjdF9faW5pdF9pbnRlcm5hbF9tYXAoc3RydWN0IGJwZl9vYmplY3QgKm9iaiwgZW51bSBsaWJicGZfbWFwX3R5cGUgdHlwZSxcbiBcdFx0XHQgICAgICBjb25zdCBjaGFyICpyZWFsX25hbWUsIGludCBzZWNfaWR4LCB2b2lkICpkYXRhLCBzaXplX3QgZGF0YV9zeilcbiB7XG4rXHRib29sIGlzX3BlcmNwdSA9IHR5cGUgPT0gTElCQlBGX01BUF9QRVJDUFU7XG4gXHRzdHJ1Y3QgYnBmX21hcF9kZWYgKmRlZjtcbiBcdHN0cnVjdCBicGZfbWFwICptYXA7XG4gXHRzaXplX3QgbW1hcF9zejtcbkBAIC0xOTc1LDcgKzE5OTIsNyBAQCBicGZfb2JqZWN0X19pbml0X2ludGVybmFsX21hcChzdHJ1Y3QgYnBmX29iamVjdCAqb2JqLCBlbnVtIGxpYmJwZl9tYXBfdHlwZSB0eXBlLFxuIFx0bWFwLVx1MDAzZXNlY19pZHggPSBzZWNfaWR4O1xuIFx0bWFwLVx1MDAzZXNlY19vZmZzZXQgPSAwO1xuIFx0bWFwLVx1MDAzZXJlYWxfbmFtZSA9IHN0cmR1cChyZWFsX25hbWUpO1xuLVx0bWFwLVx1MDAzZW5hbWUgPSBpbnRlcm5hbF9tYXBfbmFtZShvYmosIHJlYWxfbmFtZSk7XG4rXHRtYXAtXHUwMDNlbmFtZSA9IGludGVybmFsX21hcF9uYW1lKG9iaiwgcmVhbF9uYW1lLCB0eXBlKTtcbiBcdGlmICghbWFwLVx1MDAzZXJlYWxfbmFtZSB8fCAhbWFwLVx1MDAzZW5hbWUpIHtcbiBcdFx0emZyZWUoXHUwMDI2bWFwLVx1MDAzZXJlYWxfbmFtZSk7XG4gXHRcdHpmcmVlKFx1MDAyNm1hcC1cdTAwM2VuYW1lKTtcbkBAIC0xOTgzLDcgKzIwMDAsNyBAQCBicGZfb2JqZWN0X19pbml0X2ludGVybmFsX21hcChzdHJ1Y3QgYnBmX29iamVjdCAqb2JqLCBlbnVtIGxpYmJwZl9tYXBfdHlwZSB0eXBlLFxuIFx0fVxuIFxuIFx0ZGVmID0gXHUwMDI2bWFwLVx1MDAzZWRlZjtcbi1cdGRlZi1cdTAwM2V0eXBlID0gQlBGX01BUF9UWVBFX0FSUkFZO1xuK1x0ZGVmLVx1MDAzZXR5cGUgPSBpc19wZXJjcHUgPyBCUEZfTUFQX1RZUEVfUEVSQ1BVX0FSUkFZIDogQlBGX01BUF9UWVBFX0FSUkFZO1xuIFx0ZGVmLVx1MDAzZWtleV9zaXplID0gc2l6ZW9mKGludCk7XG4gXHRkZWYtXHUwMDNldmFsdWVfc2l6ZSA9IGRhdGFfc3o7XG4gXHRkZWYtXHUwMDNlbWF4X2VudHJpZXMgPSAxO1xuQEAgLTE5OTYsOCArMjAxMyw5IEBAIGJwZl9vYmplY3RfX2luaXRfaW50ZXJuYWxfbWFwKHN0cnVjdCBicGZfb2JqZWN0ICpvYmosIGVudW0gbGliYnBmX21hcF90eXBlIHR5cGUsXG4gXHRpZiAobWFwX2lzX21tYXBhYmxlKG9iaiwgbWFwKSlcbiBcdFx0ZGVmLVx1MDAzZW1hcF9mbGFncyB8PSBCUEZfRl9NTUFQQUJMRTtcbiBcbi1cdHByX2RlYnVnKFwibWFwICclcycgKGdsb2JhbCBkYXRhKTogYXQgc2VjX2lkeCAlZCwgb2Zmc2V0ICV6dSwgZmxhZ3MgJXguXFxuXCIsXG4tXHRcdCBtYXAtXHUwMDNlbmFtZSwgbWFwLVx1MDAzZXNlY19pZHgsIG1hcC1cdTAwM2VzZWNfb2Zmc2V0LCBkZWYtXHUwMDNlbWFwX2ZsYWdzKTtcbitcdHByX2RlYnVnKFwibWFwICclcycgKGdsb2JhbCAlc2RhdGEpOiBhdCBzZWNfaWR4ICVkLCBvZmZzZXQgJXp1LCBmbGFncyAleC5cXG5cIixcbitcdFx0IG1hcC1cdTAwM2VuYW1lLCBpc19wZXJjcHUgPyBcInBlcmNwdSBcIiA6IFwiXCIsIG1hcC1cdTAwM2VzZWNfaWR4LFxuK1x0XHQgbWFwLVx1MDAzZXNlY19vZmZzZXQsIGRlZi1cdTAwM2VtYXBfZmxhZ3MpO1xuIFxuIFx0bW1hcF9zeiA9IGJwZl9tYXBfbW1hcF9zeihtYXApO1xuIFx0bWFwLVx1MDAzZW1tYXBlZCA9IG1tYXAoTlVMTCwgbW1hcF9zeiwgUFJPVF9SRUFEIHwgUFJPVF9XUklURSxcbkBAIC0yMDU3LDYgKzIwNzUsMTMgQEAgc3RhdGljIGludCBicGZfb2JqZWN0X19pbml0X2dsb2JhbF9kYXRhX21hcHMoc3RydWN0IGJwZl9vYmplY3QgKm9iailcbiBcdFx0XHRcdFx0XHRcdCAgICBOVUxMLFxuIFx0XHRcdFx0XHRcdFx0ICAgIHNlY19kZXNjLVx1MDAzZWRhdGEtXHUwMDNlZF9zaXplKTtcbiBcdFx0XHRicmVhaztcbitcdFx0Y2FzZSBTRUNfUEVSQ1BVOlxuK1x0XHRcdHNlY19uYW1lID0gZWxmX3NlY19uYW1lKG9iaiwgZWxmX3NlY19ieV9pZHgob2JqLCBzZWNfaWR4KSk7XG4rXHRcdFx0ZXJyID0gYnBmX29iamVjdF9faW5pdF9pbnRlcm5hbF9tYXAob2JqLCBMSUJCUEZfTUFQX1BFUkNQVSxcbitcdFx0XHRcdFx0XHRcdCAgICBzZWNfbmFtZSwgc2VjX2lkeCxcbitcdFx0XHRcdFx0XHRcdCAgICBzZWNfZGVzYy1cdTAwM2VkYXRhLVx1MDAzZWRfYnVmLFxuK1x0XHRcdFx0XHRcdFx0ICAgIHNlY19kZXNjLVx1MDAzZWRhdGEtXHUwMDNlZF9zaXplKTtcbitcdFx0XHRicmVhaztcbiBcdFx0ZGVmYXVsdDpcbiBcdFx0XHQvKiBza2lwICovXG4gXHRcdFx0YnJlYWs7XG5AQCAtNDAxNiw2ICs0MDQxLDExIEBAIHN0YXRpYyBpbnQgYnBmX29iamVjdF9fZWxmX2NvbGxlY3Qoc3RydWN0IGJwZl9vYmplY3QgKm9iailcbiBcdFx0XHRcdHNlY19kZXNjLVx1MDAzZXNlY190eXBlID0gU0VDX1JPREFUQTtcbiBcdFx0XHRcdHNlY19kZXNjLVx1MDAzZXNoZHIgPSBzaDtcbiBcdFx0XHRcdHNlY19kZXNjLVx1MDAzZWRhdGEgPSBkYXRhO1xuK1x0XHRcdH0gZWxzZSBpZiAoc3RyY21wKG5hbWUsIFBFUkNQVV9TRUMpID09IDAgfHxcbitcdFx0XHRcdCAgIHN0cl9oYXNfcGZ4KG5hbWUsIFBFUkNQVV9TRUMgXCIuXCIpKSB7XG4rXHRcdFx0XHRzZWNfZGVzYy1cdTAwM2VzZWNfdHlwZSA9IFNFQ19QRVJDUFU7XG4rXHRcdFx0XHRzZWNfZGVzYy1cdTAwM2VzaGRyID0gc2g7XG4rXHRcdFx0XHRzZWNfZGVzYy1cdTAwM2VkYXRhID0gZGF0YTtcbiBcdFx0XHR9IGVsc2UgaWYgKHN0cmNtcChuYW1lLCBTVFJVQ1RfT1BTX1NFQykgPT0gMCB8fFxuIFx0XHRcdFx0ICAgc3RyY21wKG5hbWUsIFNUUlVDVF9PUFNfTElOS19TRUMpID09IDAgfHxcbiBcdFx0XHRcdCAgIHN0cmNtcChuYW1lLCBcIj9cIiBTVFJVQ1RfT1BTX1NFQykgPT0gMCB8fFxuQEAgLTQ1NDQsNiArNDU3NCw3IEBAIHN0YXRpYyBib29sIGJwZl9vYmplY3RfX3NobmR4X2lzX2RhdGEoY29uc3Qgc3RydWN0IGJwZl9vYmplY3QgKm9iaixcbiBcdGNhc2UgU0VDX0JTUzpcbiBcdGNhc2UgU0VDX0RBVEE6XG4gXHRjYXNlIFNFQ19ST0RBVEE6XG4rXHRjYXNlIFNFQ19QRVJDUFU6XG4gXHRcdHJldHVybiB0cnVlO1xuIFx0ZGVmYXVsdDpcbiBcdFx0cmV0dXJuIGZhbHNlO1xuQEAgLTQ1NjksNiArNDYwMCw4IEBAIGJwZl9vYmplY3RfX3NlY3Rpb25fdG9fbGliYnBmX21hcF90eXBlKGNvbnN0IHN0cnVjdCBicGZfb2JqZWN0ICpvYmosIGludCBzaG5keClcbiBcdFx0cmV0dXJuIExJQkJQRl9NQVBfREFUQTtcbiBcdGNhc2UgU0VDX1JPREFUQTpcbiBcdFx0cmV0dXJuIExJQkJQRl9NQVBfUk9EQVRBO1xuK1x0Y2FzZSBTRUNfUEVSQ1BVOlxuK1x0XHRyZXR1cm4gTElCQlBGX01BUF9QRVJDUFU7XG4gXHRkZWZhdWx0OlxuIFx0XHRyZXR1cm4gTElCQlBGX01BUF9VTlNQRUM7XG4gXHR9XG5AQCAtNDk0NCw3ICs0OTc3LDcgQEAgc3RhdGljIGludCBtYXBfZmlsbF9idGZfdHlwZV9pbmZvKHN0cnVjdCBicGZfb2JqZWN0ICpvYmosIHN0cnVjdCBicGZfbWFwICptYXApXG4gXG4gXHQvKlxuIFx0ICogTExWTSBhbm5vdGF0ZXMgZ2xvYmFsIGRhdGEgZGlmZmVyZW50bHkgaW4gQlRGLCB0aGF0IGlzLFxuLVx0ICogb25seSBhcyAnLmRhdGEnLCAnLmJzcycgb3IgJy5yb2RhdGEnLlxuK1x0ICogb25seSBhcyAnLmRhdGEnLCAnLmJzcycsICcucGVyY3B1JyBvciAnLnJvZGF0YScuXG4gXHQgKi9cbiBcdGlmICghYnBmX21hcF9faXNfaW50ZXJuYWwobWFwKSlcbiBcdFx0cmV0dXJuIC1FTk9FTlQ7XG5AQCAtNTI5MywxOCArNTMyNiwyNiBAQCBzdGF0aWMgaW50XG4gYnBmX29iamVjdF9fcG9wdWxhdGVfaW50ZXJuYWxfbWFwKHN0cnVjdCBicGZfb2JqZWN0ICpvYmosIHN0cnVjdCBicGZfbWFwICptYXApXG4ge1xuIFx0ZW51bSBsaWJicGZfbWFwX3R5cGUgbWFwX3R5cGUgPSBtYXAtXHUwMDNlbGliYnBmX3R5cGU7XG4rXHRib29sIGlzX3BlcmNwdSA9IG1hcF90eXBlID09IExJQkJQRl9NQVBfUEVSQ1BVO1xuK1x0Y29uc3QgX191NjQgdXBkYXRlX2ZsYWdzID0gaXNfcGVyY3B1ID8gQlBGX0ZfQUxMX0NQVVMgOiAwO1xuIFx0aW50IGVyciwgemVybyA9IDA7XG4gXHRzaXplX3QgbW1hcF9zejtcbiBcbitcdGlmIChpc19wZXJjcHUgXHUwMDI2XHUwMDI2ICFvYmotXHUwMDNlZ2VuX2xvYWRlciBcdTAwMjZcdTAwMjYgIWtlcm5lbF9zdXBwb3J0cyhvYmosIEZFQVRfUEVSQ1BVX0RBVEEpKSB7XG4rXHRcdHByX3dhcm4oXCJtYXAgJyVzJzoga2VybmVsIGRvZXMgbm90IHN1cHBvcnQgcGVyY3B1IGRhdGEuXFxuXCIsXG4rXHRcdFx0YnBmX21hcF9fbmFtZShtYXApKTtcbitcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuK1x0fVxuK1xuIFx0aWYgKG9iai1cdTAwM2VnZW5fbG9hZGVyKSB7XG4gXHRcdGJwZl9nZW5fX21hcF91cGRhdGVfZWxlbShvYmotXHUwMDNlZ2VuX2xvYWRlciwgbWFwIC0gb2JqLVx1MDAzZW1hcHMsXG4tXHRcdFx0XHRcdCBtYXAtXHUwMDNlbW1hcGVkLCBtYXAtXHUwMDNlZGVmLnZhbHVlX3NpemUpO1xuK1x0XHRcdFx0XHQgbWFwLVx1MDAzZW1tYXBlZCwgbWFwLVx1MDAzZWRlZi52YWx1ZV9zaXplLCB1cGRhdGVfZmxhZ3MpO1xuIFx0XHRpZiAobWFwX3R5cGUgPT0gTElCQlBGX01BUF9ST0RBVEEgfHwgbWFwX3R5cGUgPT0gTElCQlBGX01BUF9LQ09ORklHKVxuIFx0XHRcdGJwZl9nZW5fX21hcF9mcmVlemUob2JqLVx1MDAzZWdlbl9sb2FkZXIsIG1hcCAtIG9iai1cdTAwM2VtYXBzKTtcbiBcdFx0cmV0dXJuIDA7XG4gXHR9XG4gXG4tXHRlcnIgPSBicGZfbWFwX3VwZGF0ZV9lbGVtKG1hcC1cdTAwM2VmZCwgXHUwMDI2emVybywgbWFwLVx1MDAzZW1tYXBlZCwgMCk7XG4rXHRlcnIgPSBicGZfbWFwX3VwZGF0ZV9lbGVtKG1hcC1cdTAwM2VmZCwgXHUwMDI2emVybywgbWFwLVx1MDAzZW1tYXBlZCwgdXBkYXRlX2ZsYWdzKTtcbiBcdGlmIChlcnIpIHtcbiBcdFx0ZXJyID0gLWVycm5vO1xuIFx0XHRwcl93YXJuKFwibWFwICclcyc6IGZhaWxlZCB0byBzZXQgaW5pdGlhbCBjb250ZW50czogJXNcXG5cIixcbkBAIC01MzQ5LDYgKzUzOTAsMTMgQEAgYnBmX29iamVjdF9fcG9wdWxhdGVfaW50ZXJuYWxfbWFwKHN0cnVjdCBicGZfb2JqZWN0ICpvYmosIHN0cnVjdCBicGZfbWFwICptYXApXG4gXHRcdFx0cmV0dXJuIGVycjtcbiBcdFx0fVxuIFx0XHRtYXAtXHUwMDNlbW1hcGVkID0gbW1hcGVkO1xuK1x0fSBlbHNlIGlmIChpc19wZXJjcHUpIHtcbitcdFx0aWYgKG1wcm90ZWN0KG1hcC1cdTAwM2VtbWFwZWQsIG1tYXBfc3osIFBST1RfUkVBRCkpIHtcbitcdFx0XHRlcnIgPSAtZXJybm87XG4rXHRcdFx0cHJfd2FybihcIm1hcCAnJXMnOiBmYWlsZWQgdG8gbXByb3RlY3QoKSBjb250ZW50czogJXNcXG5cIixcbitcdFx0XHRcdGJwZl9tYXBfX25hbWUobWFwKSwgZXJyc3RyKGVycikpO1xuK1x0XHRcdHJldHVybiBlcnI7XG4rXHRcdH1cbiBcdH0gZWxzZSBpZiAobWFwLVx1MDAzZW1tYXBlZCkge1xuIFx0XHRtdW5tYXAobWFwLVx1MDAzZW1tYXBlZCwgbW1hcF9zeik7XG4gXHRcdG1hcC1cdTAwM2VtbWFwZWQgPSBOVUxMO1xuQEAgLTU2MjcsNiArNTY3NSw5IEBAIGJwZl9vYmplY3RfX2NyZWF0ZV9tYXBzKHN0cnVjdCBicGZfb2JqZWN0ICpvYmopXG4gXHRcdCAqL1xuIFx0XHRpZiAoYnBmX21hcF9faXNfaW50ZXJuYWwobWFwKSBcdTAwMjZcdTAwMjYgIWtlcm5lbF9zdXBwb3J0cyhvYmosIEZFQVRfR0xPQkFMX0RBVEEpKVxuIFx0XHRcdG1hcC1cdTAwM2VhdXRvY3JlYXRlID0gZmFsc2U7XG4rXHRcdGlmIChicGZfbWFwX19pc19pbnRlcm5hbChtYXApIFx1MDAyNlx1MDAyNiBicGZfbWFwX190eXBlKG1hcCkgPT0gQlBGX01BUF9UWVBFX1BFUkNQVV9BUlJBWSBcdTAwMjZcdTAwMjZcbitcdFx0ICAgICFrZXJuZWxfc3VwcG9ydHMob2JqLCBGRUFUX1BFUkNQVV9EQVRBKSlcbitcdFx0XHRtYXAtXHUwMDNlYXV0b2NyZWF0ZSA9IGZhbHNlO1xuIFxuIFx0XHRpZiAoIW1hcC1cdTAwM2VhdXRvY3JlYXRlKSB7XG4gXHRcdFx0cHJfZGVidWcoXCJtYXAgJyVzJzogc2tpcHBlZCBhdXRvLWNyZWF0aW5nLi4uXFxuXCIsIG1hcC1cdTAwM2VuYW1lKTtcbkBAIC0xMDgwNywxMSArMTA4NTgsMTYgQEAgc3RhdGljIGJvb2wgbWFwX3VzZXNfcmVhbF9uYW1lKGNvbnN0IHN0cnVjdCBicGZfbWFwICptYXApXG4gXHQgKiBzdWNoIG1hcCdzIGNvcnJlc3BvbmRpbmcgRUxGIHNlY3Rpb24gbmFtZSBhcyBhIG1hcCBuYW1lLlxuIFx0ICogVGhpcyBjaGVjayBkaXN0aW5ndWlzaGVzIC5kYXRhLy5yb2RhdGEgZnJvbSAuZGF0YS4qIGFuZCAucm9kYXRhLipcbiBcdCAqIG1hcHMgdG8ga25vdyB3aGljaCBuYW1lIGhhcyB0byBiZSByZXR1cm5lZCB0byB0aGUgdXNlci5cbitcdCAqIE1hcCBuYW1lIG9mIHRoZSBjdXN0b20gLnBlcmNwdS4qIG1hcHMgbWlnaHQgYmUgdHJ1bmNhdGVkIHRvXG4rXHQgKiBCUEZfT0JKX05BTUVfTEVOLTEgY2hhcnMgaW4gaW50ZXJuYWxfbWFwX25hbWUoKS4gSGVuY2UsIHBlcmNwdSBkYXRhXG4rXHQgKiBtYXBzIG11c3QgdXNlIHJlYWwgbmFtZSBmb3IgdGhlaXIgdXNlci12aXNpYmxlIG5hbWUuXG4gXHQgKi9cbiBcdGlmIChtYXAtXHUwMDNlbGliYnBmX3R5cGUgPT0gTElCQlBGX01BUF9EQVRBIFx1MDAyNlx1MDAyNiBzdHJjbXAobWFwLVx1MDAzZXJlYWxfbmFtZSwgREFUQV9TRUMpICE9IDApXG4gXHRcdHJldHVybiB0cnVlO1xuIFx0aWYgKG1hcC1cdTAwM2VsaWJicGZfdHlwZSA9PSBMSUJCUEZfTUFQX1JPREFUQSBcdTAwMjZcdTAwMjYgc3RyY21wKG1hcC1cdTAwM2VyZWFsX25hbWUsIFJPREFUQV9TRUMpICE9IDApXG4gXHRcdHJldHVybiB0cnVlO1xuK1x0aWYgKG1hcC1cdTAwM2VsaWJicGZfdHlwZSA9PSBMSUJCUEZfTUFQX1BFUkNQVSlcbitcdFx0cmV0dXJuIHRydWU7XG4gXHRyZXR1cm4gZmFsc2U7XG4gfVxuIFxuZGlmZiAtLWdpdCBhL3Rvb2xzL2xpYi9icGYvbGliYnBmX2ludGVybmFsLmggYi90b29scy9saWIvYnBmL2xpYmJwZl9pbnRlcm5hbC5oXG5pbmRleCA3YTc0YWJiOTA0ZjhiLi40YzQ2ZDM0ZmMwNTVkIDEwMDY0NFxuLS0tIGEvdG9vbHMvbGliL2JwZi9saWJicGZfaW50ZXJuYWwuaFxuKysrIGIvdG9vbHMvbGliL2JwZi9saWJicGZfaW50ZXJuYWwuaFxuQEAgLTQwMSw2ICs0MDEsOCBAQCBlbnVtIGtlcm5fZmVhdHVyZV9pZCB7XG4gXHRGRUFUX0JURl9MQVlPVVQsXG4gXHQvKiBLZXJuZWwgc3VwcG9ydHMgQlBGIHN5c2NhbGwgY29tbW9uIGF0dHJpYnV0ZXMgKi9cbiBcdEZFQVRfQlBGX1NZU0NBTExfQ09NTU9OX0FUVFJTLFxuK1x0LyogS2VybmVsIHN1cHBvcnRzIHBlcmNwdSBkYXRhICovXG4rXHRGRUFUX1BFUkNQVV9EQVRBLFxuIFx0X19GRUFUX0NOVCxcbiB9O1xuIFxuZGlmZiAtLWdpdCBhL3Rvb2xzL2xpYi9icGYvc2tlbF9pbnRlcm5hbC5oIGIvdG9vbHMvbGliL2JwZi9za2VsX2ludGVybmFsLmhcbmluZGV4IDUzZmVlNTNkMzZkNTEuLjFmM2YzMzJkZmZiZTkgMTAwNjQ0XG4tLS0gYS90b29scy9saWIvYnBmL3NrZWxfaW50ZXJuYWwuaFxuKysrIGIvdG9vbHMvbGliL2JwZi9za2VsX2ludGVybmFsLmhcbkBAIC0xMzEsOCArMTMxLDEwIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBza2VsX2ZyZWVfbWFwX2RhdGEodm9pZCAqcCwgX191NjQgYWRkciwgc2l6ZV90IHN6KVxuIHtcbiBcdGlmIChhZGRyICE9IH4wVUxMKVxuIFx0XHRrdmZyZWUocCk7XG4tXHQvKiBXaGVuIGFkZHIgPT0gfjBVTEwgdGhlICdwJyBwb2ludHMgdG9cbi1cdCAqICgoc3RydWN0IGJwZl9hcnJheSAqKW1hcCktXHUwMDNldmFsdWUuIFNlZSBza2VsX2ZpbmFsaXplX21hcF9kYXRhLlxuK1x0LypcbitcdCAqIFdoZW4gYWRkciA9PSB+MFVMTCB0aGUgaW5pdCBidWZmZXIgaGFzIGFscmVhZHkgYmVlbiByZWxlYXNlZC5cbitcdCAqIEZvciBza2VsX2ZpbmFsaXplX21hcF9kYXRhKCksICdwJyBwb2ludHMgdG9cbitcdCAqICgoc3RydWN0IGJwZl9hcnJheSAqKW1hcCktXHUwMDNldmFsdWUuXG4gXHQgKi9cbiB9XG4gXG5AQCAtMTcwLDYgKzE3MiwxNSBAQCBzdGF0aWMgaW5saW5lIHZvaWQgKnNrZWxfZmluYWxpemVfbWFwX2RhdGEoX191NjQgKmluaXRfdmFsLCBzaXplX3QgbW1hcF9zeiwgaW50XG4gXHRyZXR1cm4gYWRkcjtcbiB9XG4gXG4rc3RhdGljIGlubGluZSBpbnQgc2tlbF9wcm90ZWN0X21hcF9kYXRhKHZvaWQgKnAsIF9fdTY0ICppbml0X3ZhbCwgc2l6ZV90IHN6KVxuK3tcbitcdCh2b2lkKXN6O1xuK1xuK1x0a3ZmcmVlKHApO1xuK1x0KmluaXRfdmFsID0gfjBVTEw7XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4gI2Vsc2VcbiBcbiBzdGF0aWMgaW5saW5lIHZvaWQgKnNrZWxfYWxsb2Moc2l6ZV90IHNpemUpXG5AQCAtMjA4LDYgKzIxOSwxNSBAQCBzdGF0aWMgaW5saW5lIHZvaWQgKnNrZWxfZmluYWxpemVfbWFwX2RhdGEoX191NjQgKmluaXRfdmFsLCBzaXplX3QgbW1hcF9zeiwgaW50XG4gXHRcdHJldHVybiBOVUxMO1xuIFx0cmV0dXJuIGFkZHI7XG4gfVxuK1xuK3N0YXRpYyBpbmxpbmUgaW50IHNrZWxfcHJvdGVjdF9tYXBfZGF0YSh2b2lkICpwLCBfX3U2NCAqaW5pdF92YWwsIHNpemVfdCBzeilcbit7XG4rXHQodm9pZClpbml0X3ZhbDtcbitcbitcdGlmIChtcHJvdGVjdChwLCBzeiwgUFJPVF9SRUFEKSlcbitcdFx0cmV0dXJuIC1lcnJubztcbitcdHJldHVybiAwO1xuK31cbiAjZW5kaWZcbiBcbiBzdGF0aWMgaW5saW5lIGludCBza2VsX2Nsb3NlbnooaW50IGZkKVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9NYWtlZmlsZSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9NYWtlZmlsZVxuaW5kZXggZDM2NTVhNzA2NDgyNi4uNTYwY2U0MDE2ZmJmZiAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9NYWtlZmlsZVxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL01ha2VmaWxlXG5AQCAtNTMxLDcgKzUzMSw3IEBAIExTS0VMU19TSUdORUQgOj0gZmVudHJ5X3Rlc3QuYyBmZXhpdF90ZXN0LmMgYXRvbWljcy5jXG4gXG4gIyBHZW5lcmF0ZSBib3RoIGxpZ2h0IHNrZWxldG9uIGFuZCBsaWJicGYgc2tlbGV0b24gZm9yIHRoZXNlXG4gTFNLRUxTX0VYVFJBIDo9IHRlc3Rfa3N5bXNfbW9kdWxlLmMgdGVzdF9rc3ltc193ZWFrLmMga2Z1bmNfY2FsbF90ZXN0LmMgXFxcbi1cdGtmdW5jX2NhbGxfdGVzdF9zdWJwcm9nLmNcbitcdGtmdW5jX2NhbGxfdGVzdF9zdWJwcm9nLmMgdGVzdF9nbG9iYWxfcGVyY3B1X2RhdGEuY1xuIFNLRUxfQkxBQ0tMSVNUICs9ICQkKExTS0VMUykgJCQoTFNLRUxTX1NJR05FRClcbiBcbiB0ZXN0X3N0YXRpY19saW5rZWQuc2tlbC5oLWRlcHMgOj0gdGVzdF9zdGF0aWNfbGlua2VkMS5icGYubyB0ZXN0X3N0YXRpY19saW5rZWQyLmJwZi5vXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvZ2xvYmFsX2RhdGFfaW5pdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvZ2xvYmFsX2RhdGFfaW5pdC5jXG5pbmRleCA4NDY2MzMyZDc0MDZmLi4yNjI1NjUxYjM0YzdlIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvZ2xvYmFsX2RhdGFfaW5pdC5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9nbG9iYWxfZGF0YV9pbml0LmNcbkBAIC0xLDUgKzEsOCBAQFxuIC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4gI2luY2x1ZGUgXHUwMDNjdGVzdF9wcm9ncy5oXHUwMDNlXG4rI2luY2x1ZGUgXCJicGYvbGliYnBmX2ludGVybmFsLmhcIlxuKyNpbmNsdWRlIFwidGVzdF9nbG9iYWxfcGVyY3B1X2RhdGEuc2tlbC5oXCJcbisjaW5jbHVkZSBcInRlc3RfZ2xvYmFsX3BlcmNwdV9kYXRhLmxza2VsLmhcIlxuIFxuIHZvaWQgdGVzdF9nbG9iYWxfZGF0YV9pbml0KHZvaWQpXG4ge1xuQEAgLTYwLDMgKzYzLDMxMCBAQCB2b2lkIHRlc3RfZ2xvYmFsX2RhdGFfaW5pdCh2b2lkKVxuIFx0ZnJlZShuZXd2YWwpO1xuIFx0YnBmX29iamVjdF9fY2xvc2Uob2JqKTtcbiB9XG4rXG4rc3RhdGljIHZvaWQgdGVzdF9wZXJjcHVfZGF0YV9vbl9jcHVzKHN0cnVjdCBicGZfbWFwICptYXAsIGludCBtYXBfZmQsIGludCBwcm9nX2ZkLCBpbnQgKnJ1bnApXG4re1xuK1x0X191NjQgYXJnc1syXSA9IHsweDEyMzRVTEwsIDB4NTY3OFVMTH07XG4rXHRMSUJCUEZfT1BUUyhicGZfdGVzdF9ydW5fb3B0cywgdG9wdHMsXG4rXHRcdCAgICAuY3R4X2luID0gYXJncyxcbitcdFx0ICAgIC5jdHhfc2l6ZV9pbiA9IHNpemVvZihhcmdzKSxcbitcdFx0ICAgIC5mbGFncyA9IEJQRl9GX1RFU1RfUlVOX09OX0NQVSxcbitcdCk7XG4rXHRpbnQgaSwgZXJyLCBrZXkgPSAwLCBudW1fb25saW5lLCBydW4gPSAwO1xuK1x0Ym9vbCAqb25saW5lO1xuK1xuK1x0ZXJyID0gcGFyc2VfY3B1X21hc2tfZmlsZShcIi9zeXMvZGV2aWNlcy9zeXN0ZW0vY3B1L29ubGluZVwiLCBcdTAwMjZvbmxpbmUsIFx1MDAyNm51bV9vbmxpbmUpO1xuK1x0aWYgKCFBU1NFUlRfT0soZXJyLCBcInBhcnNlX2NwdV9tYXNrX2ZpbGVcIikpXG4rXHRcdHJldHVybjtcbitcbitcdC8qIHJ1biBvbiBldmVyeSBvbmxpbmUtQ1BVICovXG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBudW1fb25saW5lOyBpKyspIHtcbitcdFx0c3RydWN0IHRlc3RfZ2xvYmFsX3BlcmNwdV9kYXRhX19wZXJjcHUgZGF0YSA9IHt9O1xuK1x0XHRfX3U2NCBmbGFncztcbitcbitcdFx0aWYgKCFvbmxpbmVbaV0pXG4rXHRcdFx0Y29udGludWU7XG4rXG4rXHRcdHRvcHRzLmNwdSA9IGk7XG4rXHRcdHRvcHRzLnJldHZhbCA9IC0xO1xuK1x0XHRlcnIgPSBicGZfcHJvZ190ZXN0X3J1bl9vcHRzKHByb2dfZmQsIFx1MDAyNnRvcHRzKTtcbitcdFx0QVNTRVJUX09LKGVyciwgXCJicGZfcHJvZ190ZXN0X3J1bl9vcHRzXCIpO1xuK1x0XHRBU1NFUlRfRVEodG9wdHMucmV0dmFsLCAwLCBcImJwZl9wcm9nX3Rlc3RfcnVuX29wdHMgcmV0dmFsXCIpO1xuK1xuK1x0XHRmbGFncyA9ICgoX191NjQpIGkgXHUwMDNjXHUwMDNjIDMyKSB8IEJQRl9GX0NQVTtcbitcdFx0aWYgKG1hcClcbitcdFx0XHRlcnIgPSBicGZfbWFwX19sb29rdXBfZWxlbShtYXAsIFx1MDAyNmtleSwgc2l6ZW9mKGtleSksIFx1MDAyNmRhdGEsIHNpemVvZihkYXRhKSxcbitcdFx0XHRcdFx0XHQgICBmbGFncyk7XG4rXHRcdGVsc2VcbitcdFx0XHRlcnIgPSBicGZfbWFwX2xvb2t1cF9lbGVtX2ZsYWdzKG1hcF9mZCwgXHUwMDI2a2V5LCBcdTAwMjZkYXRhLCBmbGFncyk7XG4rXHRcdGlmICghQVNTRVJUX09LKGVyciwgXCJsb29rdXBfZWxlbSBvbiBjcHVcIikpXG4rXHRcdFx0YnJlYWs7XG4rXG4rXHRcdEFTU0VSVF9FUSgqcnVucCwgKytydW4sIFwicnVuXCIpO1xuK1x0XHRBU1NFUlRfRVEoZGF0YS5jcHVfaWQsIGksIFwiZGF0YS5jcHVfaWRcIik7XG4rXHRcdEFTU0VSVF9FUShkYXRhLmRhdGEsIDEsIFwiZGF0YS5kYXRhXCIpO1xuK1x0XHRBU1NFUlRfVFJVRShkYXRhLnNldCwgXCJkYXRhLnNldFwiKTtcbitcdFx0QVNTRVJUX0VRKGRhdGEubnVtc1s2XSwgMHhjMGRlLCBcImRhdGEubnVtc1s2XVwiKTtcbitcdFx0QVNTRVJUX0VRKGRhdGEuc3RydWN0X2RhdGEuaSwgMSwgXCJzdHJ1Y3RfZGF0YS5pXCIpO1xuK1x0XHRBU1NFUlRfVFJVRShkYXRhLnN0cnVjdF9kYXRhLnNldCwgXCJzdHJ1Y3RfZGF0YS5zZXRcIik7XG4rXHRcdEFTU0VSVF9FUShkYXRhLnN0cnVjdF9kYXRhLm51bXNbNl0sIDB4YzBkZSwgXCJzdHJ1Y3RfZGF0YS5udW1zWzZdXCIpO1xuK1x0fVxuK1xuK1x0ZnJlZShvbmxpbmUpO1xuK31cbitcbitzdGF0aWMgdm9pZCB0ZXN0X2dsb2JhbF9wZXJjcHVfZGF0YV9pbml0KHZvaWQpXG4re1xuK1x0c3RydWN0IHRlc3RfZ2xvYmFsX3BlcmNwdV9kYXRhX19wZXJjcHUgaW5pdF92YWx1ZSA9IHt9O1xuK1x0c3RydWN0IHRlc3RfZ2xvYmFsX3BlcmNwdV9kYXRhX19wZXJjcHUgKmluaXRfZGF0YTtcbitcdHN0cnVjdCB0ZXN0X2dsb2JhbF9wZXJjcHVfZGF0YSAqc2tlbCA9IE5VTEw7XG4rXHRzaXplX3QgaW5pdF9kYXRhX3N6O1xuK1x0c3RydWN0IGJwZl9tYXAgKm1hcDtcbitcdGludCBwcm9nX2ZkLCBlcnI7XG4rXG4rXHRza2VsID0gdGVzdF9nbG9iYWxfcGVyY3B1X2RhdGFfX29wZW4oKTtcbitcdGlmICghQVNTRVJUX09LX1BUUihza2VsLCBcInRlc3RfZ2xvYmFsX3BlcmNwdV9kYXRhX19vcGVuXCIpKVxuK1x0XHRnb3RvIG91dDtcbitcdGlmICghQVNTRVJUX09LX1BUUihza2VsLVx1MDAzZXBlcmNwdSwgXCJza2VsLVx1MDAzZXBlcmNwdVwiKSlcbitcdFx0Z290byBvdXQ7XG4rXHRpZiAoIUFTU0VSVF9PS19QVFIoc2tlbC1cdTAwM2VkYXRhX3BlcmNwdSwgXCJza2VsLVx1MDAzZWRhdGFfcGVyY3B1XCIpKVxuK1x0XHRnb3RvIG91dDtcbitcdGlmICghQVNTRVJUX09LX1BUUihza2VsLVx1MDAzZXBlcmNwdV9kYXRhLCBcInNrZWwtXHUwMDNlcGVyY3B1X2RhdGFcIikpXG4rXHRcdGdvdG8gb3V0O1xuK1x0aWYgKCFBU1NFUlRfT0tfUFRSKHNrZWwtXHUwMDNlcGVyY3B1X2xvb29vb29vb29uZywgXCJza2VsLVx1MDAzZXBlcmNwdV9sb29vb29vb29vbmdcIikpXG4rXHRcdGdvdG8gb3V0O1xuK1xuK1x0QVNTRVJUX1NUUkVRKGJwZl9tYXBfX25hbWUoc2tlbC1cdTAwM2VtYXBzLnBlcmNwdV9kYXRhKSwgXCIucGVyY3B1LmRhdGFcIixcbitcdFx0ICAgICBcIi5wZXJjcHUuZGF0YSBtYXAgbmFtZVwiKTtcbitcdEFTU0VSVF9TVFJFUShicGZfbWFwX19uYW1lKHNrZWwtXHUwMDNlbWFwcy5kYXRhX3BlcmNwdSksIFwiLmRhdGEucGVyY3B1XCIsXG4rXHRcdCAgICAgXCIuZGF0YS5wZXJjcHUgbWFwIG5hbWVcIik7XG4rXHRBU1NFUlRfU1RSRVEoYnBmX21hcF9fbmFtZShza2VsLVx1MDAzZW1hcHMucGVyY3B1X2xvb29vb29vb29uZyksIFwiLnBlcmNwdS5sb29vb29vb29vbmdcIixcbitcdFx0ICAgICBcImxvbmcgbWFwIG5hbWVcIik7XG4rXHRBU1NFUlRfU1RSRVEoYnBmX21hcF9fbmFtZShza2VsLVx1MDAzZW1hcHMucGVyY3B1KSwgXCIucGVyY3B1XCIsIFwibWFwIG5hbWVcIik7XG4rXHRBU1NFUlRfRVEoc2tlbC1cdTAwM2VwZXJjcHUtXHUwMDNlZGF0YSwgLTEsIFwic2tlbC1cdTAwM2VwZXJjcHUtXHUwMDNlZGF0YVwiKTtcbitcdEFTU0VSVF9GQUxTRShza2VsLVx1MDAzZXBlcmNwdS1cdTAwM2VzZXQsIFwic2tlbC1cdTAwM2VwZXJjcHUtXHUwMDNlc2V0XCIpO1xuK1x0QVNTRVJUX0VRKHNrZWwtXHUwMDNlcGVyY3B1LVx1MDAzZW51bXNbNl0sIDAsIFwic2tlbC1cdTAwM2VwZXJjcHUtXHUwMDNlbnVtc1s2XVwiKTtcbitcdEFTU0VSVF9FUShza2VsLVx1MDAzZXBlcmNwdS1cdTAwM2VzdHJ1Y3RfZGF0YS5pLCAtMSwgXCJzdHJ1Y3RfZGF0YS5pXCIpO1xuK1x0QVNTRVJUX0ZBTFNFKHNrZWwtXHUwMDNlcGVyY3B1LVx1MDAzZXN0cnVjdF9kYXRhLnNldCwgXCJzdHJ1Y3RfZGF0YS5zZXRcIik7XG4rXHRBU1NFUlRfRVEoc2tlbC1cdTAwM2VwZXJjcHUtXHUwMDNlc3RydWN0X2RhdGEubnVtc1s2XSwgMCwgXCJzdHJ1Y3RfZGF0YS5udW1zWzZdXCIpO1xuK1xuK1x0bWFwID0gc2tlbC1cdTAwM2VtYXBzLnBlcmNwdTtcbitcdGlmICghQVNTRVJUX0VRKGJwZl9tYXBfX3R5cGUobWFwKSwgQlBGX01BUF9UWVBFX1BFUkNQVV9BUlJBWSwgXCJicGZfbWFwX190eXBlXCIpKVxuK1x0XHRnb3RvIG91dDtcbitcbitcdGluaXRfdmFsdWUuZGF0YSA9IDI7XG4rXHRpbml0X3ZhbHVlLm51bXNbNl0gPSAtMTtcbitcdGluaXRfdmFsdWUuc3RydWN0X2RhdGEuaSA9IDI7XG4rXHRpbml0X3ZhbHVlLnN0cnVjdF9kYXRhLm51bXNbNl0gPSAtMTtcbitcdGVyciA9IGJwZl9tYXBfX3NldF9pbml0aWFsX3ZhbHVlKG1hcCwgXHUwMDI2aW5pdF92YWx1ZSwgc2l6ZW9mKGluaXRfdmFsdWUpKTtcbitcdGlmICghQVNTRVJUX09LKGVyciwgXCJicGZfbWFwX19zZXRfaW5pdGlhbF92YWx1ZVwiKSlcbitcdFx0Z290byBvdXQ7XG4rXG4rXHRpbml0X2RhdGEgPSBicGZfbWFwX19pbml0aWFsX3ZhbHVlKG1hcCwgXHUwMDI2aW5pdF9kYXRhX3N6KTtcbitcdGlmICghQVNTRVJUX09LX1BUUihpbml0X2RhdGEsIFwiYnBmX21hcF9faW5pdGlhbF92YWx1ZVwiKSlcbitcdFx0Z290byBvdXQ7XG4rXG4rXHRBU1NFUlRfRVEoaW5pdF9kYXRhLVx1MDAzZWRhdGEsIGluaXRfdmFsdWUuZGF0YSwgXCJpbml0X3ZhbHVlIGRhdGFcIik7XG4rXHRBU1NFUlRfRVEoaW5pdF9kYXRhLVx1MDAzZXNldCwgaW5pdF92YWx1ZS5zZXQsIFwiaW5pdF92YWx1ZSBzZXRcIik7XG4rXHRBU1NFUlRfRVEoaW5pdF9kYXRhLVx1MDAzZXN0cnVjdF9kYXRhLmksIGluaXRfdmFsdWUuc3RydWN0X2RhdGEuaSwgXCJpbml0X3ZhbHVlIHN0cnVjdF9kYXRhLmlcIik7XG4rXHRBU1NFUlRfRVEoaW5pdF9kYXRhLVx1MDAzZXN0cnVjdF9kYXRhLm51bXNbNl0sIGluaXRfdmFsdWUuc3RydWN0X2RhdGEubnVtc1s2XSxcbitcdFx0ICBcImluaXRfdmFsdWUgc3RydWN0X2RhdGEubnVtc1s2XVwiKTtcbitcdEFTU0VSVF9FUShpbml0X2RhdGFfc3osIHNpemVvZihpbml0X3ZhbHVlKSwgXCJpbml0X3ZhbHVlIHNpemVcIik7XG4rXHRBU1NFUlRfRVEoKHZvaWQgKikgaW5pdF9kYXRhLCAodm9pZCAqKSBza2VsLVx1MDAzZXBlcmNwdSwgXCJza2VsLVx1MDAzZXBlcmNwdSBlcSBpbml0X2RhdGFcIik7XG4rXHRBU1NFUlRfRVEoc2tlbC1cdTAwM2VwZXJjcHUtXHUwMDNlZGF0YSwgaW5pdF92YWx1ZS5kYXRhLCBcInNrZWwtXHUwMDNlcGVyY3B1LVx1MDAzZWRhdGFcIik7XG4rXHRBU1NFUlRfRVEoc2tlbC1cdTAwM2VwZXJjcHUtXHUwMDNlc2V0LCBpbml0X3ZhbHVlLnNldCwgXCJza2VsLVx1MDAzZXBlcmNwdS1cdTAwM2VzZXRcIik7XG4rXHRBU1NFUlRfRVEoc2tlbC1cdTAwM2VwZXJjcHUtXHUwMDNlc3RydWN0X2RhdGEuaSwgaW5pdF92YWx1ZS5zdHJ1Y3RfZGF0YS5pLFxuK1x0XHQgIFwic2tlbC1cdTAwM2VwZXJjcHUtXHUwMDNlc3RydWN0X2RhdGEuaVwiKTtcbitcdEFTU0VSVF9FUShza2VsLVx1MDAzZXBlcmNwdS1cdTAwM2VzdHJ1Y3RfZGF0YS5udW1zWzZdLCBpbml0X3ZhbHVlLnN0cnVjdF9kYXRhLm51bXNbNl0sXG4rXHRcdCAgXCJza2VsLVx1MDAzZXBlcmNwdS1cdTAwM2VzdHJ1Y3RfZGF0YS5udW1zWzZdXCIpO1xuK1xuK1x0ZXJyID0gdGVzdF9nbG9iYWxfcGVyY3B1X2RhdGFfX2xvYWQoc2tlbCk7XG4rXHRpZiAoIUFTU0VSVF9PSyhlcnIsIFwidGVzdF9nbG9iYWxfcGVyY3B1X2RhdGFfX2xvYWRcIikpXG4rXHRcdGdvdG8gb3V0O1xuK1xuK1x0QVNTRVJUX09LX1BUUihza2VsLVx1MDAzZXBlcmNwdSwgXCJza2VsLVx1MDAzZXBlcmNwdVwiKTtcbitcbitcdHByb2dfZmQgPSBicGZfcHJvZ3JhbV9fZmQoc2tlbC1cdTAwM2Vwcm9ncy51cGRhdGVfcGVyY3B1X2RhdGEpO1xuK1x0dGVzdF9wZXJjcHVfZGF0YV9vbl9jcHVzKG1hcCwgYnBmX21hcF9fZmQobWFwKSwgcHJvZ19mZCwgXHUwMDI2c2tlbC1cdTAwM2Vic3MtXHUwMDNlcnVuKTtcbitcbitvdXQ6XG4rXHR0ZXN0X2dsb2JhbF9wZXJjcHVfZGF0YV9fZGVzdHJveShza2VsKTtcbit9XG4rXG4rc3RhdGljIHZvaWQgdGVzdF9nbG9iYWxfcGVyY3B1X2RhdGFfbHNrZWwodm9pZClcbit7XG4rXHRzdHJ1Y3QgdGVzdF9nbG9iYWxfcGVyY3B1X2RhdGFfbHNrZWwgKmxza2VsID0gTlVMTDtcbitcdGludCBwcm9nX2ZkLCBtYXBfZmQ7XG4rXG4rXHRsc2tlbCA9IHRlc3RfZ2xvYmFsX3BlcmNwdV9kYXRhX2xza2VsX19vcGVuX2FuZF9sb2FkKCk7XG4rXHRpZiAoIUFTU0VSVF9PS19QVFIobHNrZWwsIFwidGVzdF9nbG9iYWxfcGVyY3B1X2RhdGFfbHNrZWxfX29wZW5fYW5kX2xvYWRcIikpXG4rXHRcdGdvdG8gb3V0O1xuK1xuK1x0bWFwX2ZkID0gbHNrZWwtXHUwMDNlbWFwcy5wZXJjcHUubWFwX2ZkO1xuK1x0cHJvZ19mZCA9IGxza2VsLVx1MDAzZXByb2dzLnVwZGF0ZV9wZXJjcHVfZGF0YS5wcm9nX2ZkO1xuK1x0dGVzdF9wZXJjcHVfZGF0YV9vbl9jcHVzKE5VTEwsIG1hcF9mZCwgcHJvZ19mZCwgXHUwMDI2bHNrZWwtXHUwMDNlYnNzLVx1MDAzZXJ1bik7XG4rXG4rb3V0OlxuK1x0dGVzdF9nbG9iYWxfcGVyY3B1X2RhdGFfbHNrZWxfX2Rlc3Ryb3kobHNrZWwpO1xuK31cbitcbitzdGF0aWMgaW50IGNyZWF0ZV9yZG9ubHlfcGVyY3B1X2FycmF5KHZvaWQpXG4re1xuK1x0TElCQlBGX09QVFMoYnBmX21hcF9jcmVhdGVfb3B0cywgbWFwX29wdHMsXG4rXHRcdCAgICAubWFwX2ZsYWdzID0gQlBGX0ZfUkRPTkxZX1BST0csXG4rXHQpO1xuK1x0aW50IGtleSA9IDAsIG1hcF9mZCwgZXJyO1xuK1x0X191NjQgdmFsdWUgPSAwO1xuK1xuK1x0bWFwX2ZkID0gYnBmX21hcF9jcmVhdGUoQlBGX01BUF9UWVBFX1BFUkNQVV9BUlJBWSwgXCJwZXJjcHVfcm9fbWFwXCIsIHNpemVvZihpbnQpLFxuK1x0XHRcdFx0c2l6ZW9mKF9fdTY0KSwgMSwgXHUwMDI2bWFwX29wdHMpO1xuK1x0aWYgKCFBU1NFUlRfR0UobWFwX2ZkLCAwLCBcImJwZl9tYXBfY3JlYXRlXCIpKVxuK1x0XHRyZXR1cm4gLTE7XG4rXG4rXHRlcnIgPSBicGZfbWFwX3VwZGF0ZV9lbGVtKG1hcF9mZCwgXHUwMDI2a2V5LCBcdTAwMjZ2YWx1ZSwgQlBGX0ZfQUxMX0NQVVMpO1xuK1x0aWYgKCFBU1NFUlRfT0soZXJyLCBcImJwZl9tYXBfdXBkYXRlX2VsZW1cIikpXG4rXHRcdGdvdG8gb3V0O1xuK1xuK1x0ZXJyID0gYnBmX21hcF9mcmVlemUobWFwX2ZkKTtcbitcdGlmICghQVNTRVJUX09LKGVyciwgXCJicGZfbWFwX2ZyZWV6ZVwiKSlcbitcdFx0Z290byBvdXQ7XG4rXG4rXHRyZXR1cm4gbWFwX2ZkO1xuK1xuK291dDpcbitcdGNsb3NlKG1hcF9mZCk7XG4rXHRyZXR1cm4gLTE7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIHRlc3RfZ2xvYmFsX3BlcmNwdV9kYXRhX3Jkb25seV9kaXJlY3RfcmVhZCh2b2lkKVxuK3tcbitcdC8qXG4rXHQgKiBSYXcgaW5zdHJ1Y3Rpb25zIHdpdGggbWFudWFsbHkgcHJlcGFyZWQgcmRvbmx5IHBlcmNwdV9hcnJheSBtYXBcbitcdCAqIGZvciB0ZXN0aW5nIGRpcmVjdC1yZWFkIGdsb2JhbCBwZXJjcHUgZGF0YSwgYmVjYXVzZSBsaWJicGZcbitcdCAqIGRvZXNuJ3QgaGF2ZSByZG9ubHkgaW50ZXJuYWwgcGVyY3B1X2FycmF5IG1hcCBzdXBwb3J0IGZvclxuK1x0ICogZ2xvYmFsIHBlcmNwdSBkYXRhLlxuK1x0ICovXG4rXHRzdHJ1Y3QgYnBmX2luc24gaW5zbnNbXSA9IHtcbitcdFx0QlBGX0xEX01BUF9WQUxVRShCUEZfUkVHXzEsIDAsIDApLFxuK1x0XHRCUEZfTERYX01FTShCUEZfRFcsIEJQRl9SRUdfMCwgQlBGX1JFR18xLCAwKSxcbitcdFx0QlBGX0VYSVRfSU5TTigpLFxuK1x0fTtcbitcdGludCBtYXBfZmQsIHByb2dfZmQ7XG4rXG4rXHRtYXBfZmQgPSBjcmVhdGVfcmRvbmx5X3BlcmNwdV9hcnJheSgpO1xuK1x0aWYgKG1hcF9mZCBcdTAwM2MgMClcbitcdFx0cmV0dXJuO1xuK1xuK1x0aW5zbnNbMF0uaW1tID0gbWFwX2ZkO1xuK1x0cHJvZ19mZCA9IGJwZl9wcm9nX2xvYWQoQlBGX1BST0dfVFlQRV9TT0NLRVRfRklMVEVSLCBcInBlcmNwdV9yb19wcm9nXCIsIFwiR1BMXCIsIGluc25zLFxuK1x0XHRcdFx0QVJSQVlfU0laRShpbnNucyksIE5VTEwpO1xuK1x0aWYgKEFTU0VSVF9HRShwcm9nX2ZkLCAwLCBcImJwZl9wcm9nX2xvYWRcIikpXG4rXHRcdGNsb3NlKHByb2dfZmQpO1xuK1x0Y2xvc2UobWFwX2ZkKTtcbit9XG4rXG4rc3RhdGljIHZvaWQgdGVzdF9nbG9iYWxfcGVyY3B1X2RhdGFfcmRvbmx5X2RpcmVjdF93cml0ZSh2b2lkKVxuK3tcbitcdExJQkJQRl9PUFRTKGJwZl9wcm9nX2xvYWRfb3B0cywgcHJvZ19vcHRzKTtcbitcdC8qIFNlZSB0aGUgY29tbWVudCBpbiB0ZXN0X2dsb2JhbF9wZXJjcHVfZGF0YV9yZG9ubHlfZGlyZWN0X3JlYWQoKSAqL1xuK1x0c3RydWN0IGJwZl9pbnNuIGluc25zW10gPSB7XG4rXHRcdEJQRl9MRF9NQVBfVkFMVUUoQlBGX1JFR18xLCAwLCAwKSxcbitcdFx0QlBGX0xEWF9NRU0oQlBGX0RXLCBCUEZfUkVHXzAsIEJQRl9SRUdfMSwgMCksXG4rXHRcdEJQRl9TVF9NRU0oQlBGX0RXLCBCUEZfUkVHXzEsIDAsIDApLFxuK1x0XHRCUEZfRVhJVF9JTlNOKCksXG4rXHR9O1xuK1x0Y2hhciBsb2dfYnVmWzI1Nl0gPSB7fTtcbitcdGludCBtYXBfZmQsIHByb2dfZmQ7XG4rXG4rXHRwcm9nX29wdHMubG9nX2J1ZiA9IGxvZ19idWY7XG4rXHRwcm9nX29wdHMubG9nX3NpemUgPSBzaXplb2YobG9nX2J1Zik7XG4rXHRwcm9nX29wdHMubG9nX2xldmVsID0gMTtcbitcbitcdG1hcF9mZCA9IGNyZWF0ZV9yZG9ubHlfcGVyY3B1X2FycmF5KCk7XG4rXHRpZiAobWFwX2ZkIFx1MDAzYyAwKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRpbnNuc1swXS5pbW0gPSBtYXBfZmQ7XG4rXHRwcm9nX2ZkID0gYnBmX3Byb2dfbG9hZChCUEZfUFJPR19UWVBFX1NPQ0tFVF9GSUxURVIsIFwicGVyY3B1X3JvX3Byb2dcIiwgXCJHUExcIiwgaW5zbnMsXG4rXHRcdFx0XHRBUlJBWV9TSVpFKGluc25zKSwgXHUwMDI2cHJvZ19vcHRzKTtcbitcdGlmICghQVNTRVJUX0xUKHByb2dfZmQsIDAsIFwiYnBmX3Byb2dfbG9hZFwiKSlcbitcdFx0Y2xvc2UocHJvZ19mZCk7XG4rXHRlbHNlXG4rXHRcdEFTU0VSVF9IQVNfU1VCU1RSKGxvZ19idWYsIFwid3JpdGUgaW50byBtYXAgZm9yYmlkZGVuXCIsIFwidmVyaWZpZXIgbG9nXCIpO1xuK1x0Y2xvc2UobWFwX2ZkKTtcbit9XG4rXG4rc3RhdGljIHZvaWQgdGVzdF9nbG9iYWxfcGVyY3B1X2RhdGFfdmVyaWZpZXJfbG9nKHZvaWQpXG4re1xuK1x0UlVOX1RFU1RTKHRlc3RfZ2xvYmFsX3BlcmNwdV9kYXRhKTtcbit9XG4rXG4rc3RhdGljIHZvaWQgdGVzdF9nbG9iYWxfcGVyY3B1X2RhdGFfaXRlcih2b2lkKVxuK3tcbitcdERFQ0xBUkVfTElCQlBGX09QVFMoYnBmX2l0ZXJfYXR0YWNoX29wdHMsIG9wdHMpO1xuK1x0c3RydWN0IHRlc3RfZ2xvYmFsX3BlcmNwdV9kYXRhICpza2VsO1xuK1x0dW5pb24gYnBmX2l0ZXJfbGlua19pbmZvIGxpbmZvID0ge307XG4rXHRzdHJ1Y3QgYnBmX2xpbmsgKmxpbmsgPSBOVUxMO1xuK1x0aW50IGZkLCBudW1fY3B1cywgbGVuLCBlcnI7XG4rXHRjaGFyIGJ1ZlsxNl07XG4rXG4rXHRudW1fY3B1cyA9IGxpYmJwZl9udW1fcG9zc2libGVfY3B1cygpO1xuK1x0aWYgKCFBU1NFUlRfR1QobnVtX2NwdXMsIDAsIFwibGliYnBmX251bV9wb3NzaWJsZV9jcHVzXCIpKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRza2VsID0gdGVzdF9nbG9iYWxfcGVyY3B1X2RhdGFfX29wZW4oKTtcbitcdGlmICghQVNTRVJUX09LX1BUUihza2VsLCBcInRlc3RfZ2xvYmFsX3BlcmNwdV9kYXRhX19vcGVuXCIpKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRza2VsLVx1MDAzZXJvZGF0YS1cdTAwM2VudW1fY3B1cyA9IG51bV9jcHVzO1xuK1x0c2tlbC1cdTAwM2Vyb2RhdGEtXHUwMDNlb2Zmc2V0b2ZfbnVtID0gb2Zmc2V0b2Yoc3RydWN0IHRlc3RfZ2xvYmFsX3BlcmNwdV9kYXRhX19wZXJjcHUsIHN0cnVjdF9kYXRhKTtcbitcdHNrZWwtXHUwMDNlcm9kYXRhLVx1MDAzZW9mZnNldG9mX251bSArPSBzaXplb2Yoc2tlbC1cdTAwM2VwZXJjcHUtXHUwMDNlc3RydWN0X2RhdGEpIC0gc2l6ZW9mKGludCk7XG4rXHRza2VsLVx1MDAzZXJvZGF0YS1cdTAwM2VlbGVtX3N6ID0gcm91bmR1cChzaXplb2Yoc3RydWN0IHRlc3RfZ2xvYmFsX3BlcmNwdV9kYXRhX19wZXJjcHUpLCA4KTtcbitcdHNrZWwtXHUwMDNlcGVyY3B1LVx1MDAzZXN0cnVjdF9kYXRhLm51bXNbNl0gPSAweGMwZGU7XG4rXG4rXHRlcnIgPSB0ZXN0X2dsb2JhbF9wZXJjcHVfZGF0YV9fbG9hZChza2VsKTtcbitcdGlmICghQVNTRVJUX09LKGVyciwgXCJ0ZXN0X2dsb2JhbF9wZXJjcHVfZGF0YV9fbG9hZFwiKSlcbitcdFx0Z290byBvdXQ7XG4rXG4rXHRsaW5mby5tYXAubWFwX2ZkID0gYnBmX21hcF9fZmQoc2tlbC1cdTAwM2VtYXBzLnBlcmNwdSk7XG4rXHRvcHRzLmxpbmtfaW5mbyA9IFx1MDAyNmxpbmZvO1xuK1x0b3B0cy5saW5rX2luZm9fbGVuID0gc2l6ZW9mKGxpbmZvKTtcbitcdGxpbmsgPSBicGZfcHJvZ3JhbV9fYXR0YWNoX2l0ZXIoc2tlbC1cdTAwM2Vwcm9ncy5kdW1wX3BlcmNwdV9kYXRhLCBcdTAwMjZvcHRzKTtcbitcdGlmICghQVNTRVJUX09LX1BUUihsaW5rLCBcImJwZl9wcm9ncmFtX19hdHRhY2hfaXRlclwiKSlcbitcdFx0Z290byBvdXQ7XG4rXG4rXHRmZCA9IGJwZl9pdGVyX2NyZWF0ZShicGZfbGlua19fZmQobGluaykpO1xuK1x0aWYgKCFBU1NFUlRfR0UoZmQsIDAsIFwiYnBmX2l0ZXJfY3JlYXRlXCIpKVxuK1x0XHRnb3RvIG91dDtcbitcbitcdHdoaWxlICgobGVuID0gcmVhZChmZCwgYnVmLCBzaXplb2YoYnVmKSkpIFx1MDAzZSAwKVxuK1x0XHRkbyB7IH0gd2hpbGUgKDApO1xuK1x0QVNTRVJUX0VRKGxlbiwgMCwgXCJyZWFkIGl0ZXJcIik7XG4rXHRBU1NFUlRfVFJVRShza2VsLVx1MDAzZWJzcy1cdTAwM2VydW5faXRlciwgXCJydW5faXRlclwiKTtcbitcdEFTU0VSVF9FUShza2VsLVx1MDAzZWJzcy1cdTAwM2VwZXJjcHVfZGF0YV9zdW0sIDB4YzBkZSAqIG51bV9jcHVzLCBcInBlcmNwdV9kYXRhX3N1bVwiKTtcbitcbitcdGNsb3NlKGZkKTtcbitvdXQ6XG4rXHRicGZfbGlua19fZGVzdHJveShsaW5rKTtcbitcdHRlc3RfZ2xvYmFsX3BlcmNwdV9kYXRhX19kZXN0cm95KHNrZWwpO1xuK31cbitcbit2b2lkIHRlc3RfZ2xvYmFsX3BlcmNwdV9kYXRhKHZvaWQpXG4re1xuK1x0aWYgKCFmZWF0X3N1cHBvcnRlZChOVUxMLCBGRUFUX1BFUkNQVV9EQVRBKSkge1xuK1x0XHR0ZXN0X19za2lwKCk7XG4rXHRcdHJldHVybjtcbitcdH1cbitcbitcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFwiaW5pdFwiKSlcbitcdFx0dGVzdF9nbG9iYWxfcGVyY3B1X2RhdGFfaW5pdCgpO1xuK1x0aWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoXCJsc2tlbFwiKSlcbitcdFx0dGVzdF9nbG9iYWxfcGVyY3B1X2RhdGFfbHNrZWwoKTtcbitcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFwicmRvbmx5X2RpcmVjdF9yZWFkXCIpKVxuK1x0XHR0ZXN0X2dsb2JhbF9wZXJjcHVfZGF0YV9yZG9ubHlfZGlyZWN0X3JlYWQoKTtcbitcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFwicmRvbmx5X2RpcmVjdF93cml0ZVwiKSlcbitcdFx0dGVzdF9nbG9iYWxfcGVyY3B1X2RhdGFfcmRvbmx5X2RpcmVjdF93cml0ZSgpO1xuK1x0dGVzdF9nbG9iYWxfcGVyY3B1X2RhdGFfdmVyaWZpZXJfbG9nKCk7XG4rXHRpZiAodGVzdF9fc3RhcnRfc3VidGVzdChcIml0ZXJcIikpXG4rXHRcdHRlc3RfZ2xvYmFsX3BlcmNwdV9kYXRhX2l0ZXIoKTtcbit9XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3RfZ2xvYmFsX3BlcmNwdV9kYXRhLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF9nbG9iYWxfcGVyY3B1X2RhdGEuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLmE5NDQzZmIyMDUwZTlcbi0tLSAvZGV2L251bGxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X2dsb2JhbF9wZXJjcHVfZGF0YS5jXG5AQCAtMCwwICsxLDg4IEBAXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbisjaW5jbHVkZSBcdTAwM2N2bWxpbnV4LmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NicGYvYnBmX2hlbHBlcnMuaFx1MDAzZVxuKyNpbmNsdWRlIFwiYnBmX21pc2MuaFwiXG4rXG4rLyogVXNlZCBmb3IgdGVzdGluZyBtYXAgbmFtZS4gKi9cbitpbnQgbG9vbmcgU0VDKFwiLnBlcmNwdS5sb29vb29vb29vbmdcIik7XG4raW50IGRhdGEzIFNFQyhcIi5kYXRhLnBlcmNwdVwiKTtcbitpbnQgZGF0YTIgU0VDKFwiLnBlcmNwdS5kYXRhXCIpO1xuK1xuK2ludCBydW47XG4raW50IGNwdV9pZCBTRUMoXCIucGVyY3B1XCIpO1xuK2ludCBkYXRhIFNFQyhcIi5wZXJjcHVcIikgPSAtMTtcbitpbnQgbnVtc1s3XSBTRUMoXCIucGVyY3B1XCIpO1xuK2Jvb2wgc2V0IFNFQyhcIi5wZXJjcHVcIikgPSBmYWxzZTtcbitzdHJ1Y3Qge1xuK1x0Y2hhciBzZXQ7XG4rXHRpbnQgaTtcbitcdGludCBudW1zWzddO1xuK30gc3RydWN0X2RhdGEgU0VDKFwiLnBlcmNwdVwiKSA9IHtcbitcdC5zZXQgPSAwLFxuK1x0LmkgPSAtMSxcbit9O1xuK1xuK1NFQyhcInJhd190cC90YXNrX3JlbmFtZVwiKVxuK19fYXV4aWxpYXJ5XG4raW50IHVwZGF0ZV9wZXJjcHVfZGF0YSh2b2lkICpjdHgpXG4re1xuK1x0c3RydWN0X2RhdGEubnVtc1s2XSA9IDB4YzBkZTtcbitcdHN0cnVjdF9kYXRhLnNldCA9IDE7XG4rXHRzdHJ1Y3RfZGF0YS5pID0gMTtcbitcdG51bXNbNl0gPSAweGMwZGU7XG4rXHRkYXRhID0gMTtcbitcdHJ1bisrO1xuK1x0c2V0ID0gdHJ1ZTtcbitcdGNwdV9pZCA9IGJwZl9nZXRfc21wX3Byb2Nlc3Nvcl9pZCgpO1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyBjb25zdCBjaGFyIGZtdFtdIFNFQyhcIi5wZXJjcHUuZm10XCIpID0gXCJkYXRhICVkXFxuXCI7XG4rXG4rU0VDKFwiP2twcm9iZVwiKVxuK19fZmFpbHVyZSBfX21zZyhcIlJ7e1swLTldK319IHBvaW50cyB0byBwZXJjcHVfYXJyYXkgbWFwIHdoaWNoIGNhbm5vdCBiZSB1c2VkIGFzIGNvbnN0IHN0cmluZ1wiKVxuK2ludCB2ZXJpZmllcl9zdHJuY21wKHZvaWQgKmN0eClcbit7XG4rXHRyZXR1cm4gYnBmX3N0cm5jbXAoXCJ0ZXN0XCIsIDUsIGZtdCk7XG4rfVxuK1xuK1NFQyhcIj9rcHJvYmVcIilcbitfX2ZhaWx1cmUgX19tc2coXCJSe3tbMC05XSt9fSBwb2ludHMgdG8gcGVyY3B1X2FycmF5IG1hcCB3aGljaCBjYW5ub3QgYmUgdXNlZCBhcyBjb25zdCBzdHJpbmdcIilcbitpbnQgdmVyaWZpZXJfc25wcmludGYodm9pZCAqY3R4KVxuK3tcbitcdHU2NCBhcmdzW10gPSB7IGRhdGEgfTtcbitcdGNoYXIgYnVmWzEyOF07XG4rXHRpbnQgbGVuO1xuK1xuK1x0bGVuID0gYnBmX3NucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksIGZtdCwgYXJncywgc2l6ZW9mKGFyZ3MpKTtcbitcdGlmIChsZW4gXHUwMDNlIDApXG4rXHRcdGJwZl9wcmludGsoXCJzbnByaW50ZjogJXNcXG5cIiwgYnVmKTtcbitcdHJldHVybiAwO1xuK31cbitcbit2b2xhdGlsZSBjb25zdCBfX3UzMiBudW1fY3B1cyA9IDA7XG4rdm9sYXRpbGUgY29uc3QgaW50IG9mZnNldG9mX251bTtcbit2b2xhdGlsZSBjb25zdCBpbnQgZWxlbV9zejtcbitfX3UzMiBwZXJjcHVfZGF0YV9zdW0gPSAwO1xuK2Jvb2wgcnVuX2l0ZXIgPSBmYWxzZTtcbitcbitTRUMoXCJpdGVyL2JwZl9tYXBfZWxlbVwiKVxuK19fYXV4aWxpYXJ5XG4raW50IGR1bXBfcGVyY3B1X2RhdGEoc3RydWN0IGJwZl9pdGVyX19icGZfbWFwX2VsZW0gKmN0eClcbit7XG4rXHR2b2lkICpwcHRyID0gY3R4LVx1MDAzZXZhbHVlO1xuK1x0aW50IGk7XG4rXG4rXHRpZiAoIXBwdHIpXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0cnVuX2l0ZXIgPSB0cnVlO1xuK1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgbnVtX2NwdXM7IGkrKykge1xuK1x0XHRwZXJjcHVfZGF0YV9zdW0gKz0gKihpbnQgKikgKHBwdHIgKyBvZmZzZXRvZl9udW0pO1xuK1x0XHRwcHRyICs9IGVsZW1fc3o7XG4rXHR9XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rY2hhciBfbGljZW5zZVtdIFNFQyhcImxpY2Vuc2VcIikgPSBcIkdQTFwiO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMTk6NDI6MjMuNDQwMDQyNjUzWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTk1MDQ4MzI2OTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBCUEYgUGVyLUNQVSBBcnJheSBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggaW50cm9kdWNpbmcgYC5wZXJjcHVgIGdsb2JhbCBkYXRhIG1hcCBzdXBwb3J0IHdpdGhpbiBCUEYuIEl0J3MgdG91Y2hpbmcgc29tZSBjb3JlIGFyZWFzLCBzcGVjaWZpY2FsbHkgYGFycmF5bWFwLmNgLCBgZml4dXBzLmNgLCBhbmQgdGhlIHZlcmlmaWVyIChgdmVyaWZpZXIuY2ApLCBhbG9uZyB3aXRoIHNvbWUgdG9vbGluZy4gVGhlIGNvcmUgZnVuY3Rpb25hbGl0eSBzZWVtcyBjZW50ZXJlZCBhcm91bmQgaGFuZGxpbmcgYEJQRl9NQVBfVFlQRV9QRVJDUFVfQVJSQVlgIG1hcHMuIFRoaXMgaXMgYSBzaWduaWZpY2FudCBmdW5jdGlvbmFsIGNoYW5nZSB3aXRoaW4gdGhlIEJQRiBzdWJzeXN0ZW0sIHdoaWNoIHNjcmVhbXMgZm9yIGZ1enppbmcgdG8gdW5jb3ZlciBhbnkgZWRnZSBjYXNlIGlzc3Vlcy5cblxuTXkgaW1tZWRpYXRlIGZvY3VzIHBvaW50cyBhcmUgdGhlc2Ugc3ltYm9sczpcblxuKiAgIGBwZXJjcHVfYXJyYXlfbWFwX2RpcmVjdF92YWx1ZV9hZGRyYFxuKiAgIGBwZXJjcHVfYXJyYXlfbWFwX2RpcmVjdF92YWx1ZV9tZXRhYFxuKiAgIGBicGZfZG9fbWlzY19maXh1cHNgIOKAkyBhbHRob3VnaCB0aGF0J3MgYSBiaXQgYnJvYWQsIGl04oCZcyB3aGVyZSB0aGUgbmV3IGZpeHVwIGxvZ2ljIGxpdmVzLlxuKiAgIGBjaGVja19tYXBfbWVtX3JlYWRgIOKAkyB0aGlzIG5ldyBmdW5jdGlvbiBpbiB0aGUgdmVyaWZpZXIgaXMgaW50ZXJlc3RpbmcuXG5cbkxldCdzIGRpdmUgaW50byBgYXJyYXltYXAuY2AgYW5kIGNoZWNrIG91dCBgcGVyY3B1X2FycmF5X21hcF9kaXJlY3RfdmFsdWVfYWRkcmAuIEl0J3MgYHN0YXRpY2AsIGJ1dCwgaXQncyBhc3NpZ25lZCB0byBgbWFwX2RpcmVjdF92YWx1ZV9hZGRyYCBpbiBgcGVyY3B1X2FycmF5X21hcF9vcHNgLCBzbyBpdCdzIGEgZnVuY3Rpb24gcG9pbnRlciBhbmQgd29uJ3QgYmUgaW5saW5lZC4gVGhhdCBtZWFucyBpdCAqc2hvdWxkKiBoYXZlIGEgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3MsIHNvIGl0J3MgYSB2YWxpZCB0YXJnZXQuIEknbGwgbmVlZCB0byBkb3VibGUgY2hlY2sgZm9yIGFueSBub24tc3RhdGljIGFsdGVybmF0aXZlcy5cblxuUmlnaHQsIGBjaGVja19tYXBfbWVtX3JlYWRgIGlzIGBzdGF0aWNgLCBidXQgaXQncyBuZXcsIHNvIEknbGwga2VlcCBpdCBvbiB0aGUgcmFkYXIuIGBicGZfZG9fbWlzY19maXh1cHNgIGlzICpub3QqIGBzdGF0aWNgIGFuZCBJIGNhbiBzZWUgaXQncyBjYWxsZWQgZnJvbSBgdmVyaWZpZXIuY2AsIHdoaWNoIG1ha2VzIGl0IGFuIGludGVyZXN0aW5nIHRhcmdldC4gQW5kLCBpbnRlcmVzdGluZ2x5LCBgYnBmX21hcF9kaXJlY3RfcmVhZGAgaXMgYWxzbyBub3Qgc3RhdGljLiBMZXQncyBzZWUuLi4gQWhhISBJIHNlZSB0aGF0IGBicGZfbWFwX2RpcmVjdF9yZWFkYCBoYXMgYSBjcnVjaWFsIGNoYW5nZTpcblxuYGBgY1xuQEAgLTU2NjIsNiArNTY1Nyw4IEBAIGludCBicGZfbWFwX2RpcmVjdF9yZWFkKHN0cnVjdCBicGZfbWFwICptYXAsIGludCBvZmYsIGludCBzaXplLCB1NjQgKnZhbCxcbiBcdHU2NCBhZGRyO1xuIFx0aW50IGVycjtcbiBcbitcdGlmIChtYXAtXHUwMDNlbWFwX3R5cGUgPT0gQlBGX01BUF9UWVBFX0lOU05fQVJSQVkgfHwgbWFwLVx1MDAzZW1hcF90eXBlID09IEJQRl9NQVBfVFlQRV9QRVJDUFVfQVJSQVkpXG4rXHRcdHJldHVybiAtRUlOVkFMO1xuIFx0ZXJyID0gbWFwLVx1MDAzZW9wcy1cdTAwM2VtYXBfZGlyZWN0X3ZhbHVlX2FkZHIobWFwLCBcdTAwMjZhZGRyLCBvZmYpO1xuIGBgYFxuXG5JdCdzIG5vdyByZXR1cm5pbmcgYC1FSU5WQUxgIGZvciBgQlBGX01BUF9UWVBFX1BFUkNQVV9BUlJBWWAsIHdoaWNoIGxvb2tzIGltcG9ydGFudCFcblxuTm93LCB0aGUgbmV3IGBjaGVja19tYXBfbWVtX3JlYWRgIGxvb2tzIGxpa2U6XG5cbmBgYGNcbitzdGF0aWMgaW50IGNoZWNrX21hcF9tZW1fcmVhZChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnLCBpbnQgb2ZmLFxuK1x0XHRcdCAgICAgIGludCBicGZfc2l6ZSwgaW50IHZhbHVlX3JlZ25vLCBib29sIGlzX2xkc3gpXG5gYGBcblxuSXQncyBgc3RhdGljYCwgYnV0IGl0J3MgKm5ldyogY29kZSwgc28gYSBkZWZpbml0ZSB0YXJnZXQgZm9yIGFuYWx5c2lzLiBJJ2xsIG5lZWQgdG8gc2VlIGhvdyBpdCdzIHVzZWQuXG5cbkxhc3RseSwgSSBzaG91bGQgcHJvYmFibHkgZ2xhbmNlIGF0IHRoZSBLY29uZmlnIHRvIHNlZSB3aGF0IHRoZSBtYWluIEJQRiBjb25maWd1cmF0aW9uIG9wdGlvbiBpcy4gWXVwLCBgQ09ORklHX0JQRl9TWVNDQUxMYCBzZWVtcyB0byBiZSB0aGUgY3JpdGljYWwgb25lLlxuXG5JJ20gcmVhZHkgdG8gc3RhcnQgc29tZSB2ZXJpZmljYXRpb24gd2l0aCB0aGUgdG9vbHMgdG8gdmFsaWRhdGUgdGhpcyBwYXRjaC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjMwODMsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4NjIsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQxOTo0Mjo0Mi45NDQ4Nzc2OTdaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDc3MTI0NjcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYnBmX2RvX21pc2NfZml4dXBzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9icGYvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvZml4dXBzLmM9MTQ1MD1zdGF0aWMgaW50IGFkZF9oaWRkZW5fc3VicHJvZyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKnBhdGNoLCBpbnQgbGVuKVxcbi0tXFxua2VybmVsL2JwZi9maXh1cHMuYy0xNDc4LSAqL1xcbmtlcm5lbC9icGYvZml4dXBzLmM6MTQ3OTppbnQgYnBmX2RvX21pc2NfZml4dXBzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXFxua2VybmVsL2JwZi9maXh1cHMuYy0xNDgwLXtcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0yMDIyMD1pbnQgYnBmX2NoZWNrKHN0cnVjdCBicGZfcHJvZyAqKnByb2csIHVuaW9uIGJwZl9hdHRyICphdHRyLCBicGZwdHJfdCB1YXR0cixcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMDQzMi1cXHRpZiAocmV0ID09IDApXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjIwNDMzOlxcdFxcdHJldCA9IGJwZl9kb19taXNjX2ZpeHVwcyhlbnYpO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMDQzNC1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMTk6NDI6NDIuOTkyNTk1OTg0WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDU2OTYzNDQ1MTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkNvbnNpZGVyaW5nIEJQRiBGaXh1cHMgYW5kIFBlci1DUFUgQXJyYXkgQWRkcmVzc2luZyoqXG5cblJpZ2h0LCBzbyBJJ20gdGhpbmtpbmcgYWJvdXQgd2hlcmUgdG8gZGlnIGluIG9uIHRoaXMuICpgYnBmX2RvX21pc2NfZml4dXBzYCogaXMgZGVmaW5pdGVseSBhIHNvbGlkIGNhbmRpZGF0ZSBmb3IgZnVydGhlciBpbnZlc3RpZ2F0aW9uLiBJdCBzZWVtcyBsaWtlIGl0IGNvdWxkIGJlIGEgY3J1Y2lhbCBwYXJ0IG9mIHRoZSBwcm9jZXNzLCBhbmQgSSBzaG91bGQgc3RhcnQgdGhlcmUuIEJ1dCB0aGVuLCBJJ20gYWxzbyB3b25kZXJpbmcgYWJvdXQgKmBwZXJjcHVfYXJyYXlfbWFwX2RpcmVjdF92YWx1ZV9hZGRyYCouIENvdWxkIHRoYXQgYmUgYSByZWxhdGVkIGFyZWEgdGhhdCBob2xkcyBzb21lIGludGVyZXN0aW5nIGNsdWVzPyBJIGtub3cgdGhvc2UgcGVyLUNQVSBhcnJheXMgY2FuIGJlIGEgc291cmNlIG9mIHNvbWUgdHJpY2t5IGJlaGF2aW9yLCBlc3BlY2lhbGx5IHdoZW4gZGVhbGluZyB3aXRoIGRpcmVjdCBhY2Nlc3MsIHNvIEkgc2hvdWxkIHNlZSBpZiB0aGVyZSBhcmUgY29ubmVjdGlvbnMuIEknbGwgbmVlZCB0byBjaGVjayBpZiB0aGVyZSBhcmUgc2hhcmVkIHZhcmlhYmxlcyBvciBmdW5jdGlvbnMgdGhhdCBjcm9zcyBib3RoIHRoZSBmaXh1cHMgYW5kIHRoZSBwZXItQ1BVIGFycmF5LiBJdCBtYXkgYmUgaW1wb3J0YW50IHRvIGV4YW1pbmUgaG93IHRob3NlIGFkZHJlc3NlcyBhcmUgY2FsY3VsYXRlZCBhbmQgdXNlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjUwMTUsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQxOTo0MzoyOC42ODg5NDM1MzhaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDY1NzgzNDcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicGVyY3B1X2FycmF5X21hcF9kaXJlY3RfdmFsdWVfYWRkclwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvYnBmL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL2FycmF5bWFwLmM9MjUxPXN0YXRpYyB2b2lkICpwZXJjcHVfYXJyYXlfbWFwX2xvb2t1cF9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSlcXG4tLVxcbmtlcm5lbC9icGYvYXJyYXltYXAuYy0yNjEtXFxua2VybmVsL2JwZi9hcnJheW1hcC5jOjI2MjpzdGF0aWMgaW50IHBlcmNwdV9hcnJheV9tYXBfZGlyZWN0X3ZhbHVlX2FkZHIoY29uc3Qgc3RydWN0IGJwZl9tYXAgKm1hcCwgdTY0ICppbW0sIHUzMiBvZmYpXFxua2VybmVsL2JwZi9hcnJheW1hcC5jLTI2My17XFxuLS1cXG5rZXJuZWwvYnBmL2FycmF5bWFwLmM9ODU5PWNvbnN0IHN0cnVjdCBicGZfbWFwX29wcyBwZXJjcHVfYXJyYXlfbWFwX29wcyA9IHtcXG4tLVxcbmtlcm5lbC9icGYvYXJyYXltYXAuYy04NjYtXFx0Lm1hcF9nZW5fbG9va3VwID0gcGVyY3B1X2FycmF5X21hcF9nZW5fbG9va3VwLFxcbmtlcm5lbC9icGYvYXJyYXltYXAuYzo4Njc6XFx0Lm1hcF9kaXJlY3RfdmFsdWVfYWRkciA9IHBlcmNwdV9hcnJheV9tYXBfZGlyZWN0X3ZhbHVlX2FkZHIsXFxua2VybmVsL2JwZi9hcnJheW1hcC5jLTg2OC1cXHQubWFwX2RpcmVjdF92YWx1ZV9tZXRhID0gcGVyY3B1X2FycmF5X21hcF9kaXJlY3RfdmFsdWVfbWV0YSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMTk6NDM6MjguNzM1NTI5MTE1WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTgyNTQ2OTIxNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246XG5cbioqQW5hbHl6aW5nIHRoYXQgU3RhdGljIEZ1bmN0aW9uIFBvaW50ZXIgQXNzaWdubWVudCoqXG5cbkFscmlnaHQsIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGllY2Ugb2YgY29kZSwgYW5kIGl0J3MgYSBzdGF0aWMgdmFyaWFibGUsIGJ1dCBpdCdzIGFzc2lnbmVkIHRvIGEgZnVuY3Rpb24gcG9pbnRlci4gVGhhdCdzIGludGVyZXN0aW5nLiBUaGUgXCJzdGF0aWNcIiBrZXl3b3JkIHRlbGxzIG1lIHRoaXMgdGhpbmcgaGFzIGludGVybmFsIGxpbmthZ2U7IGl0J3MgYSBkaXN0aW5jdCBzeW1ib2wgd2l0aGluIHRoaXMgY29tcGlsYXRpb24gdW5pdC4gRXZlbiB0aG91Z2ggaXQncyBzdGF0aWMsIHRoZSBhc3NpZ25tZW50IHRvIGEgZnVuY3Rpb24gcG9pbnRlciBtYWtlcyBpdCBiZWhhdmUgaW4gYSB2ZXJ5IHNwZWNpZmljIHdheS4gSXTigJlzIGdvdCBpdHMgb3duIGlkZW50aXR5LCBhcyBpdCB3ZXJlLCBkZXNwaXRlIHRoZSBsYWNrIG9mIGV4dGVybmFsIGxpbmthZ2UuXG5cbk5vdywgbGV0J3Mgc2VlIHdoYXQgYGNoZWNrX21hcF9tZW1fcmVhZGAgaXMgYWxsIGFib3V0LiBUaW1lIHRvIGRpdmUgZGVlcGVyIGludG8gdGhhdCBmdW5jdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MjU1NzEsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQxOTo0MzozNC41NjEwMDA3OVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODQxNTcxNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjaGVja19tYXBfbWVtX3JlYWRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2JwZi9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi92ZXJpZmllci5jPTYxNDE9c3RhdGljIHZvaWQgYWRkX3NjYWxhcl90b19yZWcoc3RydWN0IGJwZl9yZWdfc3RhdGUgKmRzdF9yZWcsIHM2NCB2YWwpXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNjE1Ny1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NjE1ODpzdGF0aWMgaW50IGNoZWNrX21hcF9tZW1fcmVhZChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnLCBpbnQgb2ZmLFxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy02MTU5LVxcdFxcdFxcdCAgICAgIGludCBicGZfc2l6ZSwgaW50IHZhbHVlX3JlZ25vLCBib29sIGlzX2xkc3gpXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9NjIwOT1zdGF0aWMgaW50IGNoZWNrX21lbV9hY2Nlc3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50IGluc25faWR4LCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnLCBhcmdub190IGFyZ25vLFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTYyNTYtXFx0XFx0fSBlbHNlIGlmICh0ID09IEJQRl9SRUFEIFxcdTAwMjZcXHUwMDI2IHZhbHVlX3JlZ25vIFxcdTAwM2U9IDApIHtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NjI1NzpcXHRcXHRcXHRlcnIgPSBjaGVja19tYXBfbWVtX3JlYWQoZW52LCByZWcsIG9mZiwgYnBmX3NpemUsIHZhbHVlX3JlZ25vLCBpc19sZHN4KTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNjI1OC1cXHRcXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDE5OjQzOjM0LjYwOTQyMTI5N1oiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY5NjQxNjQ0NDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOlxuXG4qKkFuYWx5emluZyBQb3RlbnRpYWwgT3B0aW1pemF0aW9ucyBpbiBNZW1vcnkgQWNjZXNzIENoZWNrcyoqXG5cblJpZ2h0LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGBjaGVja19tYXBfbWVtX3JlYWRgIGZ1bmN0aW9uLiBJdCdzIG1hcmtlZCBhcyBgc3RhdGljYCwgYW5kIHRoZSBvbmx5IHBsYWNlIEkgc2VlIGl0IGJlaW5nIGNhbGxlZCBpcyB3aXRoaW4gYGNoZWNrX21lbV9hY2Nlc3NgLiBUaGF0IHNjcmVhbXMgXCJpbmxpbmluZyBjYW5kaWRhdGVcIiB0byBtZS4gSXQncyB3b3J0aCBpbnZlc3RpZ2F0aW5nIGlmIHRoZSBjb21waWxlciBpcyBhbHJlYWR5IGRvaW5nIHRoYXQgYXV0b21hdGljYWxseS4gSSBuZWVkIHRvIHZlcmlmeSB0aGF0LCBvZiBjb3Vyc2UsIGJlY2F1c2UgYW4gYXNzdW1lZCBvcHRpbWl6YXRpb24gaXNuJ3QgYWx3YXlzIHBlcmZvcm1lZC4gSWYgaXQncyAqbm90KiBiZWluZyBpbmxpbmVkLCB0aGVuIGxldCdzIHNlZSBpZiB3ZSBjYW4gZm9yY2UgdGhhdCwgb3IgYXQgbGVhc3QgdW5kZXJzdGFuZCB3aHkgdGhlIGNvbXBpbGVyIGlzbid0IGRvaW5nIHNvIGF1dG9tYXRpY2FsbHkuXG5cbk5vdywgYSByZWxhdGVkIHRob3VnaHQuLi4gY291bGQgYGJwZl9tYXBfZGlyZWN0X3JlYWRgIGJlIGEgcG90ZW50aWFsIHRhcmdldCBmdW5jdGlvbiBmb3IgZnVydGhlciBvcHRpbWl6YXRpb24gb3Igc3BlY2lhbCBoYW5kbGluZz8gSXQgc2VlbXMgbGlrZSBhIGdvb2QgcGxhY2UgdG8gc3RhcnQgZGlnZ2luZyBkZWVwZXIgdG8gZmluZCBvdGhlciBvcHBvcnR1bml0aWVzIHRvIGltcHJvdmUgcGVyZm9ybWFuY2UgaWYgdGhlIGN1cnJlbnQgaW5saW5pbmcgaXMgZm91bmQgdG8gbm90IGJlIHBlcmZvcm1lZCwgb3IgdG8gdHJ5IGFuZCBpbXByb3ZlIHBlcmZvcm1hbmNlLiBMZXQncyBzZWUgaWYgd2UgY2FuIGRvIHNvbWV0aGluZyBtb3JlIHdpdGggaXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI2MTA2LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMTk6NDM6NDEuNTczNTg4MTQzWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0OTYyNzYyNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJicGZfbWFwX2RpcmVjdF9yZWFkXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9icGYvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvY29uc3RfZm9sZC5jPTUwPXN0YXRpYyB2b2lkIGNvbnN0X3JlZ194ZmVyKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBjb25zdF9hcmdfaW5mbyAqY2lfb3V0LFxcbi0tXFxua2VybmVsL2JwZi9jb25zdF9mb2xkLmMtMTg1LVxcdFxcdCAgICBvZmYgXFx1MDAzYyAwIHx8IG9mZiArIHNpemUgXFx1MDAzZSBtYXAtXFx1MDAzZXZhbHVlX3NpemUgfHxcXG5rZXJuZWwvYnBmL2NvbnN0X2ZvbGQuYzoxODY6XFx0XFx0ICAgIGJwZl9tYXBfZGlyZWN0X3JlYWQobWFwLCBvZmYsIHNpemUsIFxcdTAwMjZ2YWwsIGlzX2xkc3gpKSB7XFxua2VybmVsL2JwZi9jb25zdF9mb2xkLmMtMTg3LVxcdFxcdFxcdCpkc3QgPSB1bmtub3duO1xcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTU2MzM9Ym9vbCBicGZfbWFwX2lzX3Jkb25seShjb25zdCBzdHJ1Y3QgYnBmX21hcCAqbWFwKVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTU2NTItXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjU2NTM6aW50IGJwZl9tYXBfZGlyZWN0X3JlYWQoc3RydWN0IGJwZl9tYXAgKm1hcCwgaW50IG9mZiwgaW50IHNpemUsIHU2NCAqdmFsLFxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy01NjU0LVxcdFxcdFxcdGJvb2wgaXNfbGRzeClcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz02MTU4PXN0YXRpYyBpbnQgY2hlY2tfbWFwX21lbV9yZWFkKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcsIGludCBvZmYsXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNjE4OC1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NjE4OTpcXHRcXHRlcnIgPSBicGZfbWFwX2RpcmVjdF9yZWFkKG1hcCwgbWFwX29mZiwgc2l6ZSwgXFx1MDAyNnZhbCwgaXNfbGRzeCk7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTYxOTAtXFx0XFx0aWYgKGVycilcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMTk6NDM6NDEuNjIzMjIwNDk5WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc0MDIyNzYyMzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOlxuXG4qKkludmVzdGlnYXRpbmcgYGJwZl9tYXBfZGlyZWN0X3JlYWRgKipcblxuQWxyaWdodCwgc28gYGJwZl9tYXBfZGlyZWN0X3JlYWRgLi4uIEkgcmVtZW1iZXIgc2VlaW5nIHRoYXQuIFRoZSBmYWN0IHRoYXQgaXQncyAqbm90KiBkZWNsYXJlZCBzdGF0aWMgaXMgaW1tZWRpYXRlbHkgaW50ZXJlc3RpbmcuIFRoYXQgbWVhbnMgaXQncyBleHBvcnRlZCBhbmQgdXNlZCBhY3Jvc3MgbXVsdGlwbGUgZmlsZXMg4oCTIHByb2JhYmx5IGEgY29yZSBCUEYgaGVscGVyIGZ1bmN0aW9uLCBvciBwZXJoYXBzIHNvbWV0aGluZyBzcGVjaWZpYyB0byBhIGNlcnRhaW4gc3Vic3lzdGVtLiBUaGF0IG5lZWRzIGZ1cnRoZXIgaW52ZXN0aWdhdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHNjb3BlIGFuZCBpbXBhY3QuXG5cbk5vdywgd2hlcmUgd2FzIEk/IFJpZ2h0LCBJIHNob3VsZCB0YWtlIGEgbG9vayBhdCBgcGVyY3B1X2FycmF5X21hcF9kaXJlY3RfdmFsdWVfbWV0YWAuIExldCdzIHNlZSB3aGF0IHRoYXQgaG9sZHMuIFRoYXQgc2VlbXMgbGlrZSB0aGUgcmlnaHQgcGF0aCB0byB0cmFjayBkb3duLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNjgzMCwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDE5OjQzOjQ5LjAyNTQ5ODk2NVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDYxMDQ4NTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicGVyY3B1X2FycmF5X21hcF9kaXJlY3RfdmFsdWVfbWV0YVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvYnBmL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL2FycmF5bWFwLmM9MjYyPXN0YXRpYyBpbnQgcGVyY3B1X2FycmF5X21hcF9kaXJlY3RfdmFsdWVfYWRkcihjb25zdCBzdHJ1Y3QgYnBmX21hcCAqbWFwLCB1NjQgKmltbSwgdTMyIG9mZilcXG4tLVxcbmtlcm5lbC9icGYvYXJyYXltYXAuYy0yNzYtXFxua2VybmVsL2JwZi9hcnJheW1hcC5jOjI3NzpzdGF0aWMgaW50IHBlcmNwdV9hcnJheV9tYXBfZGlyZWN0X3ZhbHVlX21ldGEoY29uc3Qgc3RydWN0IGJwZl9tYXAgKm1hcCwgdTY0IGltbSwgdTMyICpvZmYpXFxua2VybmVsL2JwZi9hcnJheW1hcC5jLTI3OC17XFxuLS1cXG5rZXJuZWwvYnBmL2FycmF5bWFwLmM9ODU5PWNvbnN0IHN0cnVjdCBicGZfbWFwX29wcyBwZXJjcHVfYXJyYXlfbWFwX29wcyA9IHtcXG4tLVxcbmtlcm5lbC9icGYvYXJyYXltYXAuYy04NjctXFx0Lm1hcF9kaXJlY3RfdmFsdWVfYWRkciA9IHBlcmNwdV9hcnJheV9tYXBfZGlyZWN0X3ZhbHVlX2FkZHIsXFxua2VybmVsL2JwZi9hcnJheW1hcC5jOjg2ODpcXHQubWFwX2RpcmVjdF92YWx1ZV9tZXRhID0gcGVyY3B1X2FycmF5X21hcF9kaXJlY3RfdmFsdWVfbWV0YSxcXG5rZXJuZWwvYnBmL2FycmF5bWFwLmMtODY5LVxcdC5tYXBfdXBkYXRlX2VsZW0gPSBhcnJheV9tYXBfdXBkYXRlX2VsZW0sXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDE5OjQzOjQ5LjA3MTYwODY0MloiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2MjYzMzY3NzU0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSBzeW1ib2xzIGFuZCB0aGUgZGlyZWN0aW9uIHRoaXMgYW5hbHlzaXMgaXMgbGlrZWx5IGhlYWRpbmc6XG5cbioqRGl2aW5nIGludG8gQlBGIERpcmVjdCBBY2Nlc3MgYW5kIEtjb25maWcgRGVwZW5kZW5jaWVzKipcblxuQWxyaWdodCwgbXkgaW5pdGlhbCBmb2N1cyBzZWVtcyB0byBiZSBvbiBhIGZldyBzcGVjaWZpYyBCUEYtcmVsYXRlZCBzeW1ib2xzOiBgcGVyY3B1X2FycmF5X21hcF9kaXJlY3RfdmFsdWVfYWRkcmAsIGBwZXJjcHVfYXJyYXlfbWFwX2RpcmVjdF92YWx1ZV9tZXRhYCwgYGJwZl9kb19taXNjX2ZpeHVwc2AsIGFuZCBgYnBmX21hcF9kaXJlY3RfcmVhZGAuIFRoZXNlIG5hbWVzIHN0cm9uZ2x5IHN1Z2dlc3QgSSdtIGRlYWxpbmcgd2l0aCBkaXJlY3QgYWNjZXNzIHRvIHBlci1DUFUgYXJyYXkgbWFwcyB3aXRoaW4gdGhlIEJQRiBmcmFtZXdvcmsuIFRoYXQgXCJkaXJlY3RcIiBrZXl3b3JkIGlzIHRoZSBrZXkgaGVyZS4gSXQgaW1wbGllcyBwb3RlbnRpYWxseSBieXBhc3Npbmcgc29tZSBvZiB0aGUgc3RhbmRhcmQgQlBGIG1hcCBhY2Nlc3MgbWVjaGFuaXNtcywgYW5kIHRoYXQgaW1tZWRpYXRlbHkgZ2V0cyBteSBhdHRlbnRpb24sIHNwZWNpZmljYWxseSByZWdhcmRpbmcgcGVyZm9ybWFuY2UgY29uc2lkZXJhdGlvbnMgYW5kIHBvdGVudGlhbCBzZWN1cml0eSBpbXBsaWNhdGlvbnMgaWYgbm90IGhhbmRsZWQgY29ycmVjdGx5LiBXZSBhcmUsIGVzc2VudGlhbGx5LCB0YWxraW5nIGFib3V0IGZhc3QgZGF0YSBhY2Nlc3MgaW4gdGhlIEJQRiB3b3JsZC5cblxuR2l2ZW4gdGhpcywgYSBjcnVjaWFsIG5leHQgc3RlcCBpcyB0byBleGFtaW5lIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbiwgc3BlY2lmaWNhbGx5IGBDT05GSUdfQlBGX1NZU0NBTExgLiBUaGlzIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGlzIGZ1bmRhbWVudGFsIHRvIGVuYWJsaW5nIEJQRiBzeXN0ZW0gY2FsbHMuIFRoZSBwcmVzZW5jZSBvciBhYnNlbmNlIG9mIHRoYXQgc2V0dGluZyB3aWxsIGRldGVybWluZSB0aGUgZmVhc2liaWxpdHkgb2YgdmFyaW91cyBCUEYgb3BlcmF0aW9ucywgaW5jbHVkaW5nIHRoaXMgZGlyZWN0IGFjY2VzcyBzY2hlbWUuIEknbGwgbmVlZCB0byBjb25maXJtIGlmIHRoaXMgb3B0aW9uIGlzIGVuYWJsZWQuIEkga25vdyBmcm9tIGV4cGVyaWVuY2UgdGhhdCBtYW55IG9mIHRoZXNlIGFkdmFuY2VkIGZlYXR1cmVzIGhpbmdlIG9uIHRoYXQgY29yZSBzZXR0aW5nLiBJdHMgc3RhdGUgd2lsbCBwcm92aWRlIGltbWVkaWF0ZSBjb250ZXh0IG9uIHdoYXQncyBldmVuIHBvc3NpYmxlIHdpdGhpbiB0aGlzIHN5c3RlbS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjczNTIsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQxOTo0Mzo1NS4zMzQ5Nzk2NzZaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3NzQ3NTUzMzYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEJQRl9TWVNDQUxMXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL0tjb25maWc9MjU9bWVudSBcXFwiQlBGIHN1YnN5c3RlbVxcXCJcXG5rZXJuZWwvYnBmL0tjb25maWctMjYtXFxua2VybmVsL2JwZi9LY29uZmlnOjI3OmNvbmZpZyBCUEZfU1lTQ0FMTFxcbmtlcm5lbC9icGYvS2NvbmZpZy0yOC1cXHRib29sIFxcXCJFbmFibGUgYnBmKCkgc3lzdGVtIGNhbGxcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDE5OjQzOjU3LjEwOTc0MDQ3M1oiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2ODI0NTM3ODA2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipJbnZlc3RpZ2F0aW5nIEJQRiBBcnJheU1hcCBDaGFuZ2VzKipcblxuQWxyaWdodCwgbGV0J3Mgc2VlLi4uIHRoZSBwYXRjaCBpbiBxdWVzdGlvbiBpcyB0b3VjaGluZyBga2VybmVsL2JwZi9hcnJheW1hcC5jYC4gVGhhdCBpbW1lZGlhdGVseSBmbGFncyBteSBhdHRlbnRpb24uIFRoaXMgaXMgY29yZSBCUEYgc3R1ZmYsIGFuZCBzcGVjaWZpY2FsbHkgZGVhbGluZyB3aXRoIGFycmF5IG1hcHMg4oCTIGEgZnVuZGFtZW50YWwgZGF0YSBzdHJ1Y3R1cmUuIEFuZCB0aGUgZmlsZSdzIGxvY2F0aW9uIHdpdGhpbiB0aGUga2VybmVsIHRyZWUgcG9pbnRzIHRvIGl0IGJlaW5nIGNvbXBpbGVkIGlmIGBDT05GSUdfQlBGX1NZU0NBTExgIGlzIGVuYWJsZWQuIE1ha2VzIHNlbnNlLiBCdXQgbXkgbWluZCBkcmlmdHMgLSBJJ2Qgd2FudCB0byBxdWlja2x5IGRvdWJsZS1jaGVjazogYW0gSSBtaXNzaW5nIGFueSAqb3RoZXIqIGNvbmZpZ3VyYXRpb25zIHRoYXQgbWlnaHQgaW1wYWN0IG9yIGludGVyYWN0IHdpdGggdGhpcyBjaGFuZ2U/IElzIHRoZXJlIGFueXRoaW5nIGVsc2UgdGhhdCAqY29uZGl0aW9uYWxseSogaW5jbHVkZXMsIG9yIGV4Y2x1ZGVzLCBwb3J0aW9ucyBvZiBgYXJyYXltYXAuY2A/IEdvdHRhIG1ha2Ugc3VyZSBJJ3ZlIGdvdCB0aGUgY29tcGxldGUgcGljdHVyZS4gVGhlIGRlcGVuZGVuY3kgb24gYENPTkZJR19CUEZfU1lTQ0FMTGAgaXMgb2J2aW91cywgYnV0IEknbSBsb29raW5nIGZvciBhbnl0aGluZyBsZXNzIGFwcGFyZW50IHRoYXQgdGhpcyBwYXRjaCAqbWlnaHQqIGJlIGNvdXBsZWQgdG8uIEdvdCB0byBiZSB0aG9yb3VnaC5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjc4MzMsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQxOTo0NDowMy45MzQyODA1MDlaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4NzkzMTQ3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImFycmF5bWFwLm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2JwZi9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi9NYWtlZmlsZT0xMD1vYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IGJwZl9pdGVyLm8gbWFwX2l0ZXIubyB0YXNrX2l0ZXIubyBwcm9nX2l0ZXIubyBsaW5rX2l0ZXIub1xcbmtlcm5lbC9icGYvTWFrZWZpbGU6MTE6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBoYXNodGFiLm8gYXJyYXltYXAubyBwZXJjcHVfZnJlZWxpc3QubyBicGZfbHJ1X2xpc3QubyBscG1fdHJpZS5vIG1hcF9pbl9tYXAubyBibG9vbV9maWx0ZXIub1xcbmtlcm5lbC9icGYvTWFrZWZpbGUtMTItb2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBsb2NhbF9zdG9yYWdlLm8gcXVldWVfc3RhY2tfbWFwcy5vIHJpbmdidWYubyBicGZfaW5zbl9hcnJheS5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDE5OjQ0OjAzLjk4MzA3NjA3NVoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NjMwNDMwNzM4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uXG5cbioqQlBGIFN5c3RlbSBDYWxsIENvbmZpZ3VyYXRpb24gUGF0aCoqXG5cbk15IGZpcnN0IGluc3RpbmN0IGlzIHRvIHplcm8gaW4gb24gYEJQRl9TWVNDQUxMYCDigJMgdGhhdCdzIHRoZSBwcmltYXJ5IGNvbmZpZ3VyYXRpb24gb3B0aW9uLCB0aGUgY2VudHJhbCBjb250cm9sIHBvaW50IGZvciBCUEYgc3lzdGVtIGNhbGxzLiBTZWVtcyBzdHJhaWdodGZvcndhcmQuIEJ1dCwgd2FpdC4uLiBJIG5lZWQgdG8gYmUgbW9yZSBwcmVjaXNlIGFib3V0IHdoZXJlIHRoZSBzdXBwb3J0aW5nIGNvZGUgbGl2ZXMuXG5cbk15IG1pbmQgZmxhc2hlcyB0byBgYnBmX2RvX21pc2NfZml4dXBzYC4gSXQncyBhIGtleSBmdW5jdGlvbiBhbmQgSSByZWNhbGwgaXQgcmVzaWRlcyBpbiBgZml4dXBzLmNgLiBPa2F5LCBzbyBgZml4dXBzLmNgIGhhbmRsZXMgc29tZSBCUEYgdGFza3MgYW5kIGlzIGNvbXBpbGVkIHVuZGVyIGBDT05GSUdfQlBGX1NZU0NBTExgPyBUaGF0IG1ha2VzIHNlbnNlLiBXZSdyZSBrZWVwaW5nIGV2ZXJ5dGhpbmcgcmVsYXRlZCB0byB0aGUgc3lzdGVtIGNhbGwgbmVhdGx5IGFsaWduZWQgd2l0aCB0aGlzIHByaW1hcnkgY29uZmlndXJhdGlvbiBvcHRpb24uXG5cbk5vdywganVzdCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4sIGl0J3Mgd29ydGggYSBxdWljayBjaGVjayBvZiB0aGUgYnVpbGQgcHJvY2Vzcy4gSSB3YW50IHRvIHZlcmlmeSB0aGF0IGBmaXh1cHMub2AgaXMgaW5kZWVkIGJlaW5nIGNvbXBpbGVkIGluIHRoZSByaWdodCBwbGFjZS4gVGltZSB0byBjb25zdWx0IGBrZXJuZWwvYnBmL01ha2VmaWxlYCB0byBjb25maXJtIHdoZXJlIGBmaXh1cHMub2AgZml0cyBpbnRvIHRoZSBidWlsZCBwcm9jZXNzLiBBIHF1aWNrIHNjYW4gc2hvdWxkIGNvbmZpcm0gdGhhdCBsaW5rIGJldHdlZW4gYENPTkZJR19CUEZfU1lTQ0FMTGAgYW5kIGBmaXh1cHMub2Agd2hpY2ggd2lsbCBtYWtlIG1lIGZlZWwgY29uZmlkZW50IHRoYXQgdGhlIHdob2xlIEJQRiBzeXN0ZW0gY2FsbCBzZXR1cCBpcyB1bmRlcnN0b29kLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyODI5NywiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjczLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDE5OjQ0OjA4LjYxMzUwOTQ5NFoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTMxMzI3NTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZml4dXBzLm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2JwZi9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi9NYWtlZmlsZT0xMz1vYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IGJwZl9sb2NhbF9zdG9yYWdlLm8gYnBmX3Rhc2tfc3RvcmFnZS5vXFxua2VybmVsL2JwZi9NYWtlZmlsZToxNDpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IGZpeHVwcy5vIGNmZy5vIHN0YXRlcy5vIGJhY2t0cmFjay5vIGNoZWNrX2J0Zi5vXFxua2VybmVsL2JwZi9NYWtlZmlsZS0xNS1vYmotJHtDT05GSUdfQlBGX0xTTX1cXHQgICs9IGJwZl9pbm9kZV9zdG9yYWdlLm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMTk6NDQ6MDguNjY2NjQ4NzhaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTIyODg5NTk4OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEJQRiBQYXRjaCoqXG5cbk9rYXksIHNvIHRoZSBlc3NlbnRpYWwgY29uZmlndXJhdGlvbiByZXF1aXJlbWVudCBoZXJlIGlzIGRlZmluaXRlbHkgYEJQRl9TWVNDQUxMYC4gVGhhdCdzIHRoZSBiYXNlbGluZS4gTm93LCBsZXQncyBjaXJjbGUgYmFjayB0byB0aGUgY29yZSBzeW1ib2xzIHdlJ3JlIGludGVyZXN0ZWQgaW4uIFdlJ3ZlIGdvdDpcblxuKiAgIGBwZXJjcHVfYXJyYXlfbWFwX2RpcmVjdF92YWx1ZV9hZGRyYFxuKiAgIGBwZXJjcHVfYXJyYXlfbWFwX2RpcmVjdF92YWx1ZV9tZXRhYFxuKiAgIGBicGZfZG9fbWlzY19maXh1cHNgXG4qICAgYGJwZl9tYXBfZGlyZWN0X3JlYWRgXG5cbkhvbGQgb24gYSBzZWNvbmQuLi4gYGJwZl9kb19taXNjX2ZpeHVwc2AuIFJpZ2h0LCB0aGF0J3MgYSAqYmlnKiBmdW5jdGlvbi4gSXQgaGFuZGxlcyBhIGxvdCBvZiBkaWZmZXJlbnQgdGhpbmdzLCBidXQgdGhlIGNyaXRpY2FsIHBhcnQgaGVyZSBpcyB0aGUgY29uZGl0aW9uYWwgYmxvY2sgc3BlY2lmaWNhbGx5IHRhcmdldGluZyBgQlBGX01BUF9UWVBFX1BFUkNQVV9BUlJBWWAuIFRoYXQgbWFrZXMgc2Vuc2U7IHRoZSBwYXRjaCBhZGRzIHNwZWNpYWwgaGFuZGxpbmcgZm9yIHBlcmNwdSBhcnJheXMgd2l0aGluIHRoYXQgYnJvYWRlciBmdW5jdGlvbi4gVGhlIHJlbGV2YW50IGNvZGUgaXMgY2hlY2tpbmcgZm9yIHNwZWNpZmljIGluc3RydWN0aW9uIHBhdHRlcm5zLCBwYXJ0aWN1bGFybHkgYEJQRl9MRCB8IEJQRl9JTU0gfCBCUEZfRFdgIHdpdGggc291cmNlIHJlZ2lzdGVycyBgQlBGX1BTRVVET19NQVBfVkFMVUVgIG9yIGBCUEZfUFNFVURPX01BUF9JRFhfVkFMVUVgLiBJdCB2ZXJpZmllcyB0aGUgbWFwIHR5cGUgYW5kIGp1bXBzIHRvIHRoZSBuZXh0IGluc3RydWN0aW9uIGlmIGl0IGlzbid0IGEgcGVyY3B1IGFycmF5LiBJbmNsdWRpbmcgYGJwZl9kb19taXNjX2ZpeHVwc2AgaXMgY29ycmVjdCwgYmVjYXVzZSBpdCdzIHRoZSBlbnRyeSBwb2ludCB0byB0aGlzIG5ldyBwZXJjcHUgYXJyYXkgbG9naWMuXG5cbkxldCdzIHF1aWNrbHkgY2hlY2sgZm9yIGFueSBvdGhlciBub24tc3RhdGljIGZ1bmN0aW9ucyBiZWluZyBtb2RpZmllZC4gQWhhLCBgYXJyYXlfbWFwX2NoZWNrX2J0ZmAgaXMgdG91Y2hlZCwgYnV0IHRoYXQncyBzdGF0aWMsIHNvIGl0J3Mgbm90IGEgY29uY2Vybi4gQW5kIGBicGZfbWFwX2RpcmVjdF9yZWFkYCBpcyBhbHNvIGdldHRpbmcgbW9kaWZpZWQuXG5cbkFscmlnaHQsIHRvIHJlY2FwLCB0aGUgaW1wb3J0YW50IHN5bWJvbHMgYXJlOlxuXG4qICAgYHBlcmNwdV9hcnJheV9tYXBfZGlyZWN0X3ZhbHVlX2FkZHJgXG4qICAgYHBlcmNwdV9hcnJheV9tYXBfZGlyZWN0X3ZhbHVlX21ldGFgXG4qICAgYGJwZl9kb19taXNjX2ZpeHVwc2BcbiogICBgYnBmX21hcF9kaXJlY3RfcmVhZGBcblxuT25lIGxhc3QgdGhpbmcgdG8gY2hlY2s6IERvZXMgYGJwZl9qaXRfc3VwcG9ydHNfcGVyY3B1X2luc24oKWAgcmVxdWlyZSBgQlBGX0pJVGA/IFRoYXQncyBwcm9iYWJseSBhIGdpdmVuLCBidXQgaXQncyBhbHdheXMgZ29vZCB0byBkb3VibGUtY2hlY2sgdGhlc2UgYXNzdW1wdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI4Nzk1LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDc4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDE5OjQ0OjE3Ljg5NTU0NzQwOVoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTc3MTk4NTM3NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJicGZfaml0X3N1cHBvcnRzX3BlcmNwdV9pbnNuXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYz0zMTc4PWJvb2wgYnBmX2ppdF9zdXBwb3J0c19pbnNuKHN0cnVjdCBicGZfaW5zbiAqaW5zbiwgYm9vbCBpbl9hcmVuYSlcXG4tLVxcbmFyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jLTMxOTEtXFxuYXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmM6MzE5Mjpib29sIGJwZl9qaXRfc3VwcG9ydHNfcGVyY3B1X2luc24odm9pZClcXG5hcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYy0zMTkzLXtcXG4tLVxcbmFyY2gvcG93ZXJwYy9uZXQvYnBmX2ppdF9jb21wLmM9NTU2PWJvb2wgYnBmX2ppdF9zdXBwb3J0c19pbnNuKHN0cnVjdCBicGZfaW5zbiAqaW5zbiwgYm9vbCBpbl9hcmVuYSlcXG4tLVxcbmFyY2gvcG93ZXJwYy9uZXQvYnBmX2ppdF9jb21wLmMtNTcxLVxcbmFyY2gvcG93ZXJwYy9uZXQvYnBmX2ppdF9jb21wLmM6NTcyOmJvb2wgYnBmX2ppdF9zdXBwb3J0c19wZXJjcHVfaW5zbih2b2lkKVxcbmFyY2gvcG93ZXJwYy9uZXQvYnBmX2ppdF9jb21wLmMtNTczLXtcXG4tLVxcbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmM9MjEyND1ib29sIGJwZl9qaXRfc3VwcG9ydHNfaW5zbihzdHJ1Y3QgYnBmX2luc24gKmluc24sIGJvb2wgaW5fYXJlbmEpXFxuLS1cXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jLTIxNDItXFxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYzoyMTQzOmJvb2wgYnBmX2ppdF9zdXBwb3J0c19wZXJjcHVfaW5zbih2b2lkKVxcbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmMtMjE0NC17XFxuLS1cXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM9NDA1Nz1ib29sIGJwZl9qaXRfc3VwcG9ydHNfc3VicHJvZ190YWlsY2FsbHModm9pZClcXG4tLVxcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy00MDYxLVxcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYzo0MDYyOmJvb2wgYnBmX2ppdF9zdXBwb3J0c19wZXJjcHVfaW5zbih2b2lkKVxcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy00MDYzLXtcXG4tLVxcbmluY2x1ZGUvbGludXgvZmlsdGVyLmg9MTE4Mj1ib29sIGJwZl9qaXRfc3VwcG9ydHNfc3VicHJvZ190YWlsY2FsbHModm9pZCk7XFxuaW5jbHVkZS9saW51eC9maWx0ZXIuaDoxMTgzOmJvb2wgYnBmX2ppdF9zdXBwb3J0c19wZXJjcHVfaW5zbih2b2lkKTtcXG5pbmNsdWRlL2xpbnV4L2ZpbHRlci5oLTExODQtYm9vbCBicGZfaml0X3N1cHBvcnRzX2tmdW5jX2NhbGwodm9pZCk7XFxuLS1cXG5rZXJuZWwvYnBmL2FycmF5bWFwLmM9MjYyPXN0YXRpYyBpbnQgcGVyY3B1X2FycmF5X21hcF9kaXJlY3RfdmFsdWVfYWRkcihjb25zdCBzdHJ1Y3QgYnBmX21hcCAqbWFwLCB1NjQgKmltbSwgdTMyIG9mZilcXG4tLVxcbmtlcm5lbC9icGYvYXJyYXltYXAuYy0yNjUtXFxua2VybmVsL2JwZi9hcnJheW1hcC5jOjI2NjpcXHRpZiAoIWJwZl9qaXRfc3VwcG9ydHNfcGVyY3B1X2luc24oKSlcXG5rZXJuZWwvYnBmL2FycmF5bWFwLmMtMjY3LVxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4tLVxcbmtlcm5lbC9icGYvYXJyYXltYXAuYz0yNzc9c3RhdGljIGludCBwZXJjcHVfYXJyYXlfbWFwX2RpcmVjdF92YWx1ZV9tZXRhKGNvbnN0IHN0cnVjdCBicGZfbWFwICptYXAsIHU2NCBpbW0sIHUzMiAqb2ZmKVxcbi0tXFxua2VybmVsL2JwZi9hcnJheW1hcC5jLTI4MS1cXG5rZXJuZWwvYnBmL2FycmF5bWFwLmM6MjgyOlxcdGlmICghYnBmX2ppdF9zdXBwb3J0c19wZXJjcHVfaW5zbigpKVxcbmtlcm5lbC9icGYvYXJyYXltYXAuYy0yODMtXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbi0tXFxua2VybmVsL2JwZi9hcnJheW1hcC5jPTI5ND1zdGF0aWMgaW50IHBlcmNwdV9hcnJheV9tYXBfZ2VuX2xvb2t1cChzdHJ1Y3QgYnBmX21hcCAqbWFwLCBzdHJ1Y3QgYnBmX2luc24gKmluc25fYnVmKVxcbi0tXFxua2VybmVsL2JwZi9hcnJheW1hcC5jLTI5OC1cXG5rZXJuZWwvYnBmL2FycmF5bWFwLmM6Mjk5OlxcdGlmICghYnBmX2ppdF9zdXBwb3J0c19wZXJjcHVfaW5zbigpKVxcbmtlcm5lbC9icGYvYXJyYXltYXAuYy0zMDAtXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbi0tXFxua2VybmVsL2JwZi9jb3JlLmM9MzI5MT1ib29sIF9fd2VhayBicGZfaml0X3N1cHBvcnRzX3N1YnByb2dfdGFpbGNhbGxzKHZvaWQpXFxuLS1cXG5rZXJuZWwvYnBmL2NvcmUuYy0zMjk1LVxcbmtlcm5lbC9icGYvY29yZS5jOjMyOTY6Ym9vbCBfX3dlYWsgYnBmX2ppdF9zdXBwb3J0c19wZXJjcHVfaW5zbih2b2lkKVxcbmtlcm5lbC9icGYvY29yZS5jLTMyOTcte1xcbi0tXFxua2VybmVsL2JwZi9maXh1cHMuYz0xNDc5PWludCBicGZfZG9fbWlzY19maXh1cHMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcXG4tLVxcbmtlcm5lbC9icGYvZml4dXBzLmMtMTgxOS1cXG5rZXJuZWwvYnBmL2ZpeHVwcy5jOjE4MjA6XFx0XFx0aWYgKGJwZl9qaXRfc3VwcG9ydHNfcGVyY3B1X2luc24oKSBcXHUwMDI2XFx1MDAyNlxcbmtlcm5lbC9icGYvZml4dXBzLmMtMTgyMS1cXHRcXHQgICAgaW5zbi1cXHUwMDNlY29kZSA9PSAoQlBGX0xEIHwgQlBGX0lNTSB8IEJQRl9EVykgXFx1MDAyNlxcdTAwMjZcXG4tLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jPTI0MTQ9c3RhdGljIGludCBodGFiX3BlcmNwdV9tYXBfZ2VuX2xvb2t1cChzdHJ1Y3QgYnBmX21hcCAqbWFwLCBzdHJ1Y3QgYnBmX2luc24gKmluc25fYnVmKVxcbi0tXFxua2VybmVsL2JwZi9oYXNodGFiLmMtMjQxNy1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzoyNDE4OlxcdGlmICghYnBmX2ppdF9zdXBwb3J0c19wZXJjcHVfaW5zbigpKVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTI0MTktXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTE2Nzk4PWJvb2wgYnBmX3ZlcmlmaWVyX2lubGluZXNfaGVscGVyX2NhbGwoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgczMyIGltbSlcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNjgwNi0jZW5kaWZcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTY4MDc6XFx0XFx0cmV0dXJuIGVudi1cXHUwMDNlcHJvZy1cXHUwMDNlaml0X3JlcXVlc3RlZCBcXHUwMDI2XFx1MDAyNiBicGZfaml0X3N1cHBvcnRzX3BlcmNwdV9pbnNuKCk7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE2ODA4LSNlbmRpZlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQxOTo0NDoxOS42Njc1Mzc2MTZaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDIxMzYzMjA4OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGFzIGlmIHRoZXkgd2VyZSBteSBvd246XG5cbioqSW52ZXN0aWdhdGluZyBCUEYgSklUIFN1cHBvcnQqKlxuXG5SaWdodCwgc28gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGBCUEZfSklUYCBhbmQgYGJwZl9qaXRfc3VwcG9ydHNfcGVyY3B1X2luc24oKWAuIEl0IHNlZW1zIHRoYXQgdGhlIGxhdHRlciwgd2hpY2ggaW5kaWNhdGVzIHN1cHBvcnQgZm9yIHBlci1DUFUgaW5zdHJ1Y3Rpb24gSklULCByZWxpZXMgb24gdGhlIGZvcm1lciDigJMgYEJQRl9KSVRgIOKAkyB0byBiZSBlbmFibGVkIG9uIGFyY2hpdGVjdHVyZXMgdGhhdCBvZmZlciB0aGlzIGNhcGFiaWxpdHkuXG5cblRoZXJlZm9yZSwgdGhlIG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIHF1aWNrbHkgZGV0ZXJtaW5lIHdoZXRoZXIgYENPTkZJR19CUEZfSklUYCBpcyBldmVuIGEgKnJlcXVpcmVkKiBjb25maWd1cmF0aW9uIG9wdGlvbiBpbiB0aGlzIGNvbnRleHQuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgaGFwcGVucyBpZiBpdCdzIGRpc2FibGVkLiBXaGF0IGFyZSB0aGUgaW1wbGljYXRpb25zPyBEb2VzIGRpc2FibGluZyBpdCByZW1vdmUgdGhlIGNhcGFiaWxpdHkgdG8gdXNlIHRoZSBwZXItQ1BVIEpJVCBmdW5jdGlvbmFsaXR5PyBJJ20gZ29pbmcgdG8gbG9vayBpbnRvIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgYW5kIGNvZGUgYmFzZSB0byBnZXQgdGhlIGZ1bGwgcGljdHVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzEyNzgsIk91dHB1dFRva2VucyI6MjYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQxOTo0NDoyMy44ODExNzM0OTNaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2Mjg4OTE5MzcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEJQRl9KSVRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvS2NvbmZpZz0yNz1jb25maWcgQlBGX1NZU0NBTExcXG4tLVxcbmtlcm5lbC9icGYvS2NvbmZpZy00MS1cXG5rZXJuZWwvYnBmL0tjb25maWc6NDI6Y29uZmlnIEJQRl9KSVRcXG5rZXJuZWwvYnBmL0tjb25maWctNDMtXFx0Ym9vbCBcXFwiRW5hYmxlIEJQRiBKdXN0IEluIFRpbWUgY29tcGlsZXJcXFwiXFxuLS1cXG5rZXJuZWwvYnBmL0tjb25maWctNTctXFxua2VybmVsL2JwZi9LY29uZmlnOjU4OmNvbmZpZyBCUEZfSklUX0FMV0FZU19PTlxcbmtlcm5lbC9icGYvS2NvbmZpZy01OS1cXHRib29sIFxcXCJQZXJtYW5lbnRseSBlbmFibGUgQlBGIEpJVCBhbmQgcmVtb3ZlIEJQRiBpbnRlcnByZXRlclxcXCJcXG4tLVxcbmtlcm5lbC9icGYvS2NvbmZpZy02OC1cXG5rZXJuZWwvYnBmL0tjb25maWc6Njk6Y29uZmlnIEJQRl9KSVRfREVGQVVMVF9PTlxcbmtlcm5lbC9icGYvS2NvbmZpZy03MC1cXHRkZWZfYm9vbCBBUkNIX1dBTlRfREVGQVVMVF9CUEZfSklUIHx8IEJQRl9KSVRfQUxXQVlTX09OXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDE5OjQ0OjI1LjUxMDA3MDAxWiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ4Nzc5OTA2MDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgUmVhc29uaW5nIG9uIEJQRiBKSVQgUmVxdWlyZW1lbnRzKipcblxuT2theSwgc28gSSBuZWVkIHRvIG1ha2Ugc3VyZSBgQlBGX0pJVGAgaXMgZW5hYmxlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgY29kZS4gVGhlIGNydXggb2YgdGhlIG1hdHRlciBpcyB0aGF0IGBicGZfaml0X3N1cHBvcnRzX3BlcmNwdV9pbnNuKClgIHdpbGwgZXZhbHVhdGUgdG8gZmFsc2UgdW5sZXNzIHRoZSBKSVQgaXMgZW5hYmxlZC4gR2l2ZW4gdGhhdCB3ZSdyZSBvbiB4ODZfNjQsIGFyY2hpdGVjdHVyYWwgc3VwcG9ydCBzaG91bGRuJ3QgYmUgdGhlIGlzc3VlOyBpdCdzIGFsbW9zdCBjZXJ0YWlubHkgYSBKSVQgZW5hYmxlbWVudCBwcm9ibGVtLiBJIHNob3VsZCBjb25maXJtIHRoYXQgYGJwZl9qaXRfc3VwcG9ydHNfcGVyY3B1X2luc25gIGlzIGRlZmluZWQgaW4gYGFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuY2AsIHdoaWNoLCBhcyBJIHJlY2FsbCwgaXMgb25seSBjb21waWxlZCB3aGVuIGBDT05GSUdfQlBGX0pJVGAgaXMgc2V0LiBUbyBlbnN1cmUgdGhhdCdzIHRoZSBjYXNlLCBJIHNob3VsZCBjb25maXJtIHRoZSBkZXBlbmRlbmN5IGluIHRoZSBidWlsZCBwcm9jZXNzIHZpYSBgYXJjaC94ODYvbmV0L01ha2VmaWxlYC4gTGV0IG1lIGNoZWNrIHRoYXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMxNzcyLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDE5OjQ0OjMwLjM4ODA2MzExMVoiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDcxMDQyMjcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYnBmX2ppdF9jb21wLm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC94ODYvbmV0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9uZXQvTWFrZWZpbGU9OD1lbHNlXFxuYXJjaC94ODYvbmV0L01ha2VmaWxlOjk6ICAgICAgICBvYmotJChDT05GSUdfQlBGX0pJVCkgKz0gYnBmX2ppdF9jb21wLm8gYnBmX3RpbWVkX21heV9nb3RvLm9cXG5hcmNoL3g4Ni9uZXQvTWFrZWZpbGUtMTAtZW5kaWZcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMTk6NDQ6MzAuNDM1MTcwOTY3WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQyNTE4MTM4NzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gYXMgYSBmaXJzdC1wZXJzb24gYWNjb3VudDpcblxuKipCUEYgSklUIGFuZCBCVEYgUmVxdWlyZW1lbnRzKipcblxuQWxyaWdodCwgSSBzZWUgdGhlIG5lZWQgdG8gdXRpbGl6ZSB0aGUgQlBGIEpJVCwgdGhhdCdzIGNsZWFyLiBOb3csIHdpdGggdGhlIHBhdGNoIG1vZGlmeWluZyBgYXJyYXlfbWFwX2NoZWNrX2J0ZmAgdG8gcGVybWl0IGAucGVyY3B1YCBtYXBzLCBJIGhhdmUgdG8gY29uc2lkZXIgdGhlIGBDT05GSUdfREVCVUdfSU5GT19CVEZgIHJlcXVpcmVtZW50LiBHaXZlbiB0aGUgY2hhbmdlLCB3aGljaCBlbmFibGVzIGAucGVyY3B1YCBtYXBzLCBJJ2Qgc2F5IHRoYXQgQlRGIGlzIHByb2JhYmx5IGEgbm9uLW5lZ290aWFibGUgcmVxdWlyZW1lbnQgaGVyZS4gVGhpcyBtb2RpZmljYXRpb24gdG8gYGFycmF5X21hcF9jaGVja19idGZgIG1lYW5zIHdlIGFyZSBwcm9iYWJseSBkZWFsaW5nIHdpdGggZ2xvYmFsIGRhdGEgbWFwcywgd2hpY2gsIGFzIHdlIGtub3csIGFyZSBoZWF2aWx5IHJlbGlhbnQgb24gQlRGIGZvciBjb3JyZWN0IHR5cGUgaW5mb3JtYXRpb24gYW5kIGhhbmRsaW5nLiBTbywgeWVhaCwgQlRGIGlzIGFsbW9zdCBjZXJ0YWlubHkgZ29pbmcgdG8gYmUgbmVlZGVkIGZvciB0aGlzIHRvIGZ1bmN0aW9uIGFzIGludGVuZGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMjIxOCwiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDE5OjQ0OjM0LjY4Njk4NzMyMloiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTYzMTQxODM1NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgREVCVUdfSU5GT19CVEZcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImxpYi9LY29uZmlnLmRlYnVnPTM3OD1jb25maWcgREVCVUdfSU5GT19TUExJVFxcbi0tXFxubGliL0tjb25maWcuZGVidWctMzk3LVxcbmxpYi9LY29uZmlnLmRlYnVnOjM5ODpjb25maWcgREVCVUdfSU5GT19CVEZcXG5saWIvS2NvbmZpZy5kZWJ1Zy0zOTktXFx0Ym9vbCBcXFwiR2VuZXJhdGUgQlRGIHR5cGUgaW5mb3JtYXRpb25cXFwiXFxuLS1cXG5saWIvS2NvbmZpZy5kZWJ1Zz00MTk9Y29uZmlnIFBBSE9MRV9IQVNfTEFOR19FWENMVURFXFxuLS1cXG5saWIvS2NvbmZpZy5kZWJ1Zy00MjctXFxubGliL0tjb25maWcuZGVidWc6NDI4OmNvbmZpZyBERUJVR19JTkZPX0JURl9NT0RVTEVTXFxubGliL0tjb25maWcuZGVidWctNDI5LVxcdGJvb2wgXFxcIkdlbmVyYXRlIEJURiB0eXBlIGluZm9ybWF0aW9uIGZvciBrZXJuZWwgbW9kdWxlc1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMTk6NDQ6MzYuMzE4NDExMjM5WiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjExNTYxMTIxODg3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEJQRiBGdXp6aW5nIENvbmZpZ3VyYXRpb24gQXNzZXNzbWVudCoqXG5cbk9rYXksIHNvIEknbSB0aGlua2luZyBhYm91dCB0aGUgYmVzdCB3YXkgdG8gYXBwcm9hY2ggZnV6emluZyB0aGlzIHBhdGNoLiBXaGlsZSBgREVCVUdfSU5GT19CVEZgIGlzIHVzdWFsbHkgZ29vZCBmb3IgQlRGIHRlc3RzLCBpdCdzIG5vdCB0aGUgcHJpbWFyeSBjb25jZXJuIGhlcmUuIGBCUEZfU1lTQ0FMTGAgYW5kIGBCUEZfSklUYCBhcmUgZGVmaW5pdGVseSB0aGUgY29yZSBjb25maWd1cmF0aW9ucyB0byBlbmFibGUuIExldCdzIG1ha2Ugc3VyZSB3ZSBpbmNsdWRlIHRob3NlOlxuXG4qICAgYEJQRl9TWVNDQUxMYFxuKiAgIGBCUEZfSklUYFxuXG5Ob3csIHJlZ2FyZGluZyBmb2N1cyBzeW1ib2xzLCBJJ3ZlIGdvdCB0byBlbnN1cmUgdGhlIGZ1enppbmcgaXMgaGl0dGluZyB0aGUgcmlnaHQgY29kZS4gSSdtIGZvY3VzaW5nIG9uIHRoZXNlIGZvciBzdGFydGVyczpcblxuKiAgIGBwZXJjcHVfYXJyYXlfbWFwX2RpcmVjdF92YWx1ZV9hZGRyYFxuKiAgIGBwZXJjcHVfYXJyYXlfbWFwX2RpcmVjdF92YWx1ZV9tZXRhYFxuKiAgIGBicGZfZG9fbWlzY19maXh1cHNgXG4qICAgYGJwZl9tYXBfZGlyZWN0X3JlYWRgXG5cbkhvbGQgb24sIEkgd2FzIGp1c3QgdGhpbmtpbmcgdGhhdCBgYnBmX2RvX21pc2NfZml4dXBzYCBzZWVtcyBhIGxpdHRsZSBnZW5lcmFsLiBJcyB0aGVyZSBhIG1vcmUgc3BlY2lmaWMgZnVuY3Rpb24gdG8gdGFyZ2V0PyBUaGUgcGF0Y2ggaW50cm9kdWNlcyBgY2hlY2tfbWFwX21lbV9yZWFkYCwgd2hpY2ggaXMgc3RhdGljLCBhbmQgY2FsbGVkIGZyb20gYGNoZWNrX21lbV9hY2Nlc3NgLiBTbyBJIHdpbGwgaW5jbHVkZSBgYnBmX2RvX21pc2NfZml4dXBzYCBhbmQgYGJwZl9tYXBfZGlyZWN0X3JlYWRgLlxuXG5JJ2xsIGRvdWJsZS1jaGVjayBgcGVyY3B1X2FycmF5X21hcF9kaXJlY3RfdmFsdWVfYWRkcmAuIFllcywgaXQncyBzdGF0aWMgaW4gYGtlcm5lbC9icGYvYXJyYXltYXAuY2AsIGJ1dCBpdCdzIGFzc2lnbmVkIHRvIGEgZnVuY3Rpb24gcG9pbnRlciB3aGljaCBtZWFucyBpdCB3b24ndCBiZSBpbmxpbmVkLiBTaW5jZSBpdCBoYXMgYSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzcywgaXQncyBwZXJmZWN0IGZvciBpbmNsdXNpb24uXG5cbkFsc28sIGp1c3QgdG8gYmUgdGhvcm91Z2gsIEkgc2hvdWxkIGNoZWNrIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgbm9uLXN0YXRpYyBmdW5jdGlvbnMuIGBicGZfbWFwX2RpcmVjdF9yZWFkYCBpcyBub24tc3RhdGljLlxuXG5BbHJpZ2h0LCBJIHRoaW5rIEknbSBoYXBweSB3aXRoIHRoaXMuIE15IGNvbmNsdXNpb24gaXM6XG5cbiogICAqKldvcnRoRnV6emluZzoqKiBgdHJ1ZWBcbiogICAqKkZvY3VzU3ltYm9sczoqKlxuICAgICogICBgcGVyY3B1X2FycmF5X21hcF9kaXJlY3RfdmFsdWVfYWRkcmBcbiAgICAqICAgYHBlcmNwdV9hcnJheV9tYXBfZGlyZWN0X3ZhbHVlX21ldGFgXG4gICAgKiAgIGBicGZfZG9fbWlzY19maXh1cHNgXG4gICAgKiAgIGBicGZfbWFwX2RpcmVjdF9yZWFkYFxuKiAgICoqRW5hYmxlQ29uZmlnczoqKlxuICAgICogICBgQlBGX1NZU0NBTExgXG4gICAgKiAgIGBCUEZfSklUYFxuXG5KdXN0IHRvIGJlIGFic29sdXRlbHkgY2VydGFpbiwgSSdsbCBxdWlja2x5IHZlcmlmeSB0aGF0IGBicGZfbWFwX2RpcmVjdF9yZWFkYCBpcyBpbmRlZWQgbm9uLXN0YXRpYy4gWWVwLCBpdCdzIGV4cG9ydGVkIGluIGBrZXJuZWwvYnBmL3ZlcmlmaWVyLmNgLlxuXG5GaW5hbGx5LCBJIHdpbGwgY2hlY2sgd2hldGhlciBgQlBGX0pJVGAgaXMgZW5vdWdoIG9yIGlmIHdlIG5lZWQgc29tZXRoaW5nIGVsc2UuIGBCUEZfU1lTQ0FMTGAgYW5kIGBCUEZfSklUYCBhcmUgc3RhbmRhcmQgZm9yIEJQRiBmdXp6aW5nLlxuXG5NeSByZWFzb25pbmcgaXMgdGhpczogVGhpcyBwYXRjaCBpbnRyb2R1Y2VzIHN1cHBvcnQgZm9yIGAucGVyY3B1YCBnbG9iYWwgZGF0YSBtYXBzIGluIEJQRi4gSXQgbW9kaWZpZXMgdGhlIEJQRiB2ZXJpZmllciB0byBoYW5kbGUgZGlyZWN0IG1lbW9yeSByZWFkcyBmcm9tIGBCUEZfTUFQX1RZUEVfUEVSQ1BVX0FSUkFZYCBtYXBzIGFuZCBhZGRzIEpJVCBmaXh1cHMgdG8gcGF0Y2ggYGxkX2ltbTY0YCBpbnN0cnVjdGlvbnMgd2l0aCBwZXItQ1BVIHJlZ2lzdGVyIG1vdmVzLiBUaGVzZSBhcmUgZnVuZGFtZW50YWwgY2hhbmdlcyB0byB0aGUgY29yZSBCUEYgc3Vic3lzdGVtIGFuZCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBtZW1vcnkgc2FmZXR5IGFuZCBjb3JyZWN0IHZlcmlmaWVyIGJlaGF2aW9yLiBJdCdzIGEgY2xlYXIgd2luLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMjY2NiwiT3V0cHV0VG9rZW5zIjoxOTEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NzQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMTk6NDQ6NDcuODc5NTM2OTA1WiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Nzg1Mzc1MzUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9TWVNDQUxMXCIsXG4gICAgXCJCUEZfSklUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwicGVyY3B1X2FycmF5X21hcF9kaXJlY3RfdmFsdWVfYWRkclwiLFxuICAgIFwicGVyY3B1X2FycmF5X21hcF9kaXJlY3RfdmFsdWVfbWV0YVwiLFxuICAgIFwiYnBmX2RvX21pc2NfZml4dXBzXCIsXG4gICAgXCJicGZfbWFwX2RpcmVjdF9yZWFkXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBzdXBwb3J0IGZvciBgLnBlcmNwdWAgZ2xvYmFsIGRhdGEgbWFwcyBpbiBCUEYuIEl0IG1vZGlmaWVzIHRoZSBCUEYgdmVyaWZpZXIgdG8gaGFuZGxlIGRpcmVjdCBtZW1vcnkgcmVhZHMgZnJvbSBgQlBGX01BUF9UWVBFX1BFUkNQVV9BUlJBWWAgbWFwcyBhbmQgYWRkcyBKSVQgZml4dXBzIHRvIHBhdGNoIGBsZF9pbW02NGAgaW5zdHJ1Y3Rpb25zIHdpdGggcGVyLUNQVSByZWdpc3RlciBtb3Zlcy4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUgY29yZSBCUEYgc3Vic3lzdGVtIGFuZCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBtZW1vcnkgc2FmZXR5IGFuZCBjb3JyZWN0IHZlcmlmaWVyIGJlaGF2aW9yLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9TWVNDQUxMXCIsXG4gICAgXCJCUEZfSklUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwicGVyY3B1X2FycmF5X21hcF9kaXJlY3RfdmFsdWVfYWRkclwiLFxuICAgIFwicGVyY3B1X2FycmF5X21hcF9kaXJlY3RfdmFsdWVfbWV0YVwiLFxuICAgIFwiYnBmX2RvX21pc2NfZml4dXBzXCIsXG4gICAgXCJicGZfbWFwX2RpcmVjdF9yZWFkXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBzdXBwb3J0IGZvciBgLnBlcmNwdWAgZ2xvYmFsIGRhdGEgbWFwcyBpbiBCUEYuIEl0IG1vZGlmaWVzIHRoZSBCUEYgdmVyaWZpZXIgdG8gaGFuZGxlIGRpcmVjdCBtZW1vcnkgcmVhZHMgZnJvbSBgQlBGX01BUF9UWVBFX1BFUkNQVV9BUlJBWWAgbWFwcyBhbmQgYWRkcyBKSVQgZml4dXBzIHRvIHBhdGNoIGBsZF9pbW02NGAgaW5zdHJ1Y3Rpb25zIHdpdGggcGVyLUNQVSByZWdpc3RlciBtb3Zlcy4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUgY29yZSBCUEYgc3Vic3lzdGVtIGFuZCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBtZW1vcnkgc2FmZXR5IGFuZCBjb3JyZWN0IHZlcmlmaWVyIGJlaGF2aW9yLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflowqkzn6[1] Phase: Succeeded StartedAt: 2026-08-06 19:44:59 +0000 UTC FinishedAt: 2026-08-06 19:44:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqkzn6[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-06 19:44:59 +0000 UTC FinishedAt: 2026-08-06 19:44:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqkzn6[2] Phase: Succeeded StartedAt: 2026-08-06 19:44:59 +0000 UTC FinishedAt: 2026-08-06 23:28:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqkzn6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"11c1e836710dcba03e50454a4eedfdbaf8d3050e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["percpu_array_map_direct_value_addr","percpu_array_map_direct_value_meta","bpf_do_misc_fixups","bpf_map_direct_read"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"11c1e836710dcba03e50454a4eedfdbaf8d3050e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"6985708a-edac-4791-8132-bf1f0839f3d2","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-06 19:44:59 +0000 UTC FinishedAt: 2026-08-06 23:28:51 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"11c1e836710dcba03e50454a4eedfdbaf8d3050e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["percpu_array_map_direct_value_addr","percpu_array_map_direct_value_meta","bpf_do_misc_fixups","bpf_map_direct_read"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"11c1e836710dcba03e50454a4eedfdbaf8d3050e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"6985708a-edac-4791-8132-bf1f0839f3d2","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowqkzn6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"11c1e836710dcba03e50454a4eedfdbaf8d3050e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["percpu_array_map_direct_value_addr","percpu_array_map_direct_value_meta","bpf_do_misc_fixups","bpf_map_direct_read"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"11c1e836710dcba03e50454a4eedfdbaf8d3050e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"6985708a-edac-4791-8132-bf1f0839f3d2","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-06 19:44:59 +0000 UTC FinishedAt: 2026-08-06 19:45:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqkzn6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"11c1e836710dcba03e50454a4eedfdbaf8d3050e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["percpu_array_map_direct_value_addr","percpu_array_map_direct_value_meta","bpf_do_misc_fixups","bpf_map_direct_read"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"11c1e836710dcba03e50454a4eedfdbaf8d3050e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"6985708a-edac-4791-8132-bf1f0839f3d2","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-06 19:44:59 +0000 UTC FinishedAt: 2026-08-06 19:45:04 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"11c1e836710dcba03e50454a4eedfdbaf8d3050e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowqkzn6/series-workflowqkzn6-convert-artifact-344759214/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowqkzn6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"11c1e836710dcba03e50454a4eedfdbaf8d3050e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["percpu_array_map_direct_value_addr","percpu_array_map_direct_value_meta","bpf_do_misc_fixups","bpf_map_direct_read"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"11c1e836710dcba03e50454a4eedfdbaf8d3050e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"6985708a-edac-4791-8132-bf1f0839f3d2","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-06 19:45:09 +0000 UTC FinishedAt: 2026-08-06 20:01:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqkzn6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"11c1e836710dcba03e50454a4eedfdbaf8d3050e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["percpu_array_map_direct_value_addr","percpu_array_map_direct_value_meta","bpf_do_misc_fixups","bpf_map_direct_read"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"11c1e836710dcba03e50454a4eedfdbaf8d3050e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"6985708a-edac-4791-8132-bf1f0839f3d2","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-06 19:45:09 +0000 UTC FinishedAt: 2026-08-06 20:01: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:*a9619ed2-8417-4294-bf73-57303708342c,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-workflowqkzn6/series-workflowqkzn6-convert-artifact-344759214/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": "d1191c38-fbc0-4ef8-b4b0-4c5ee76c6b6d", "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-workflowqkzn6/series-workflowqkzn6-build-action-1973075732/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowqkzn6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"11c1e836710dcba03e50454a4eedfdbaf8d3050e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["percpu_array_map_direct_value_addr","percpu_array_map_direct_value_meta","bpf_do_misc_fixups","bpf_map_direct_read"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"11c1e836710dcba03e50454a4eedfdbaf8d3050e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"6985708a-edac-4791-8132-bf1f0839f3d2","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-06 19:45:09 +0000 UTC FinishedAt: 2026-08-06 20:01:25 +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:*a9619ed2-8417-4294-bf73-57303708342c,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-workflowqkzn6/series-workflowqkzn6-convert-artifact-344759214/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": "d1191c38-fbc0-4ef8-b4b0-4c5ee76c6b6d", "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-workflowqkzn6/series-workflowqkzn6-build-action-1973075732/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowqkzn6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"11c1e836710dcba03e50454a4eedfdbaf8d3050e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["percpu_array_map_direct_value_addr","percpu_array_map_direct_value_meta","bpf_do_misc_fixups","bpf_map_direct_read"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"11c1e836710dcba03e50454a4eedfdbaf8d3050e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"6985708a-edac-4791-8132-bf1f0839f3d2","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-06 20:01:35 +0000 UTC FinishedAt: 2026-08-06 20:01:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqkzn6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"11c1e836710dcba03e50454a4eedfdbaf8d3050e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["percpu_array_map_direct_value_addr","percpu_array_map_direct_value_meta","bpf_do_misc_fixups","bpf_map_direct_read"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"11c1e836710dcba03e50454a4eedfdbaf8d3050e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"6985708a-edac-4791-8132-bf1f0839f3d2","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-06 20:01:35 +0000 UTC FinishedAt: 2026-08-06 20:01:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqkzn6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"11c1e836710dcba03e50454a4eedfdbaf8d3050e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["percpu_array_map_direct_value_addr","percpu_array_map_direct_value_meta","bpf_do_misc_fixups","bpf_map_direct_read"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"11c1e836710dcba03e50454a4eedfdbaf8d3050e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"6985708a-edac-4791-8132-bf1f0839f3d2","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-06 20:01:35 +0000 UTC FinishedAt: 2026-08-06 20:01:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqkzn6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"11c1e836710dcba03e50454a4eedfdbaf8d3050e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["percpu_array_map_direct_value_addr","percpu_array_map_direct_value_meta","bpf_do_misc_fixups","bpf_map_direct_read"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"11c1e836710dcba03e50454a4eedfdbaf8d3050e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"6985708a-edac-4791-8132-bf1f0839f3d2","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-06 20:01:35 +0000 UTC FinishedAt: 2026-08-06 20:01:40 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"11c1e836710dcba03e50454a4eedfdbaf8d3050e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"6985708a-edac-4791-8132-bf1f0839f3d2","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowqkzn6/series-workflowqkzn6-convert-artifact-3820400289/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowqkzn6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"11c1e836710dcba03e50454a4eedfdbaf8d3050e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["percpu_array_map_direct_value_addr","percpu_array_map_direct_value_meta","bpf_do_misc_fixups","bpf_map_direct_read"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"11c1e836710dcba03e50454a4eedfdbaf8d3050e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"6985708a-edac-4791-8132-bf1f0839f3d2","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-06 20:01:45 +0000 UTC FinishedAt: 2026-08-06 20:03:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqkzn6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"11c1e836710dcba03e50454a4eedfdbaf8d3050e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["percpu_array_map_direct_value_addr","percpu_array_map_direct_value_meta","bpf_do_misc_fixups","bpf_map_direct_read"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"11c1e836710dcba03e50454a4eedfdbaf8d3050e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"6985708a-edac-4791-8132-bf1f0839f3d2","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-06 20:01:45 +0000 UTC FinishedAt: 2026-08-06 20:03:40 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*d1191c38-fbc0-4ef8-b4b0-4c5ee76c6b6d,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-workflowqkzn6/series-workflowqkzn6-build-action-1973075732/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-workflowqkzn6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"11c1e836710dcba03e50454a4eedfdbaf8d3050e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["percpu_array_map_direct_value_addr","percpu_array_map_direct_value_meta","bpf_do_misc_fixups","bpf_map_direct_read"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"11c1e836710dcba03e50454a4eedfdbaf8d3050e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"6985708a-edac-4791-8132-bf1f0839f3d2","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-06 20:03:50 +0000 UTC FinishedAt: 2026-08-06 20:03:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqkzn6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"11c1e836710dcba03e50454a4eedfdbaf8d3050e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["percpu_array_map_direct_value_addr","percpu_array_map_direct_value_meta","bpf_do_misc_fixups","bpf_map_direct_read"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"11c1e836710dcba03e50454a4eedfdbaf8d3050e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"6985708a-edac-4791-8132-bf1f0839f3d2","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-06 20:03:50 +0000 UTC FinishedAt: 2026-08-06 20:03:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqkzn6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"11c1e836710dcba03e50454a4eedfdbaf8d3050e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["percpu_array_map_direct_value_addr","percpu_array_map_direct_value_meta","bpf_do_misc_fixups","bpf_map_direct_read"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"11c1e836710dcba03e50454a4eedfdbaf8d3050e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"6985708a-edac-4791-8132-bf1f0839f3d2","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-06 20:03:50 +0000 UTC FinishedAt: 2026-08-06 20:25:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqkzn6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"11c1e836710dcba03e50454a4eedfdbaf8d3050e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["percpu_array_map_direct_value_addr","percpu_array_map_direct_value_meta","bpf_do_misc_fixups","bpf_map_direct_read"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"11c1e836710dcba03e50454a4eedfdbaf8d3050e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"6985708a-edac-4791-8132-bf1f0839f3d2","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-06 20:03:50 +0000 UTC FinishedAt: 2026-08-06 20:25:12 +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:*a9619ed2-8417-4294-bf73-57303708342c,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-workflowqkzn6/series-workflowqkzn6-convert-artifact-3820400289/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": "909e1f2f-8542-4587-b22c-97108c0af08b", "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-workflowqkzn6/series-workflowqkzn6-build-action-1513150893/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowqkzn6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"11c1e836710dcba03e50454a4eedfdbaf8d3050e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["percpu_array_map_direct_value_addr","percpu_array_map_direct_value_meta","bpf_do_misc_fixups","bpf_map_direct_read"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"11c1e836710dcba03e50454a4eedfdbaf8d3050e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"6985708a-edac-4791-8132-bf1f0839f3d2","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-06 20:03:50 +0000 UTC FinishedAt: 2026-08-06 20:24:58 +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:*a9619ed2-8417-4294-bf73-57303708342c,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-workflowqkzn6/series-workflowqkzn6-convert-artifact-3820400289/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": "909e1f2f-8542-4587-b22c-97108c0af08b", "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-workflowqkzn6/series-workflowqkzn6-build-action-1513150893/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowqkzn6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"11c1e836710dcba03e50454a4eedfdbaf8d3050e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["percpu_array_map_direct_value_addr","percpu_array_map_direct_value_meta","bpf_do_misc_fixups","bpf_map_direct_read"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"11c1e836710dcba03e50454a4eedfdbaf8d3050e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"6985708a-edac-4791-8132-bf1f0839f3d2","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-06 20:25:12 +0000 UTC FinishedAt: 2026-08-06 20:25:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqkzn6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"11c1e836710dcba03e50454a4eedfdbaf8d3050e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["percpu_array_map_direct_value_addr","percpu_array_map_direct_value_meta","bpf_do_misc_fixups","bpf_map_direct_read"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"11c1e836710dcba03e50454a4eedfdbaf8d3050e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"6985708a-edac-4791-8132-bf1f0839f3d2","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-06 20:25:12 +0000 UTC FinishedAt: 2026-08-06 20:25:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqkzn6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"11c1e836710dcba03e50454a4eedfdbaf8d3050e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["percpu_array_map_direct_value_addr","percpu_array_map_direct_value_meta","bpf_do_misc_fixups","bpf_map_direct_read"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"11c1e836710dcba03e50454a4eedfdbaf8d3050e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"6985708a-edac-4791-8132-bf1f0839f3d2","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-06 20:25:12 +0000 UTC FinishedAt: 2026-08-06 20:27:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqkzn6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"11c1e836710dcba03e50454a4eedfdbaf8d3050e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["percpu_array_map_direct_value_addr","percpu_array_map_direct_value_meta","bpf_do_misc_fixups","bpf_map_direct_read"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"11c1e836710dcba03e50454a4eedfdbaf8d3050e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"6985708a-edac-4791-8132-bf1f0839f3d2","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-06 20:25:12 +0000 UTC FinishedAt: 2026-08-06 20:27:03 +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:*909e1f2f-8542-4587-b22c-97108c0af08b,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-workflowqkzn6/series-workflowqkzn6-build-action-1513150893/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-workflowqkzn6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"11c1e836710dcba03e50454a4eedfdbaf8d3050e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["percpu_array_map_direct_value_addr","percpu_array_map_direct_value_meta","bpf_do_misc_fixups","bpf_map_direct_read"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"11c1e836710dcba03e50454a4eedfdbaf8d3050e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"6985708a-edac-4791-8132-bf1f0839f3d2","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-06 20:27:14 +0000 UTC FinishedAt: 2026-08-06 23:28:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqkzn6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"11c1e836710dcba03e50454a4eedfdbaf8d3050e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["percpu_array_map_direct_value_addr","percpu_array_map_direct_value_meta","bpf_do_misc_fixups","bpf_map_direct_read"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"11c1e836710dcba03e50454a4eedfdbaf8d3050e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"6985708a-edac-4791-8132-bf1f0839f3d2","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-06 20:27:14 +0000 UTC FinishedAt: 2026-08-06 20:27:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqkzn6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"11c1e836710dcba03e50454a4eedfdbaf8d3050e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["percpu_array_map_direct_value_addr","percpu_array_map_direct_value_meta","bpf_do_misc_fixups","bpf_map_direct_read"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"11c1e836710dcba03e50454a4eedfdbaf8d3050e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"6985708a-edac-4791-8132-bf1f0839f3d2","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-06 20:27:14 +0000 UTC FinishedAt: 2026-08-06 20:27:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqkzn6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"11c1e836710dcba03e50454a4eedfdbaf8d3050e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["percpu_array_map_direct_value_addr","percpu_array_map_direct_value_meta","bpf_do_misc_fixups","bpf_map_direct_read"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"11c1e836710dcba03e50454a4eedfdbaf8d3050e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"6985708a-edac-4791-8132-bf1f0839f3d2","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-06 20:27:15 +0000 UTC FinishedAt: 2026-08-06 23:28:51 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["percpu_array_map_direct_value_addr","percpu_array_map_direct_value_meta","bpf_do_misc_fixups","bpf_map_direct_read"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:track,Default:nil,Value:*KASAN,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:base-build-id,Default:nil,Value:*d1191c38-fbc0-4ef8-b4b0-4c5ee76c6b6d,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*909e1f2f-8542-4587-b22c-97108c0af08b,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-workflowqkzn6/series-workflowqkzn6-build-action-1973075732/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-workflowqkzn6/series-workflowqkzn6-build-action-1513150893/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowqkzn6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"11c1e836710dcba03e50454a4eedfdbaf8d3050e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["percpu_array_map_direct_value_addr","percpu_array_map_direct_value_meta","bpf_do_misc_fixups","bpf_map_direct_read"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"11c1e836710dcba03e50454a4eedfdbaf8d3050e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"6985708a-edac-4791-8132-bf1f0839f3d2","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-06 20:27:15 +0000 UTC FinishedAt: 2026-08-06 20:27:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqkzn6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"11c1e836710dcba03e50454a4eedfdbaf8d3050e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["percpu_array_map_direct_value_addr","percpu_array_map_direct_value_meta","bpf_do_misc_fixups","bpf_map_direct_read"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"11c1e836710dcba03e50454a4eedfdbaf8d3050e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"6985708a-edac-4791-8132-bf1f0839f3d2","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-06 20:27:15 +0000 UTC FinishedAt: 2026-08-06 20:27:21 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["percpu_array_map_direct_value_addr","percpu_array_map_direct_value_meta","bpf_do_misc_fixups","bpf_map_direct_read"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowqkzn6/series-workflowqkzn6-convert-artifact-558476086/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowqkzn6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"11c1e836710dcba03e50454a4eedfdbaf8d3050e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["percpu_array_map_direct_value_addr","percpu_array_map_direct_value_meta","bpf_do_misc_fixups","bpf_map_direct_read"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"11c1e836710dcba03e50454a4eedfdbaf8d3050e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"6985708a-edac-4791-8132-bf1f0839f3d2","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-06 20:27:15 +0000 UTC FinishedAt: 2026-08-06 20:27:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqkzn6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"11c1e836710dcba03e50454a4eedfdbaf8d3050e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["percpu_array_map_direct_value_addr","percpu_array_map_direct_value_meta","bpf_do_misc_fixups","bpf_map_direct_read"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"11c1e836710dcba03e50454a4eedfdbaf8d3050e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"6985708a-edac-4791-8132-bf1f0839f3d2","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-06 20:27:26 +0000 UTC FinishedAt: 2026-08-06 23:28:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqkzn6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"11c1e836710dcba03e50454a4eedfdbaf8d3050e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["percpu_array_map_direct_value_addr","percpu_array_map_direct_value_meta","bpf_do_misc_fixups","bpf_map_direct_read"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"11c1e836710dcba03e50454a4eedfdbaf8d3050e","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"6985708a-edac-4791-8132-bf1f0839f3d2","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-06 20:27:26 +0000 UTC FinishedAt: 2026-08-06 23:28:42 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*d1191c38-fbc0-4ef8-b4b0-4c5ee76c6b6d,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*909e1f2f-8542-4587-b22c-97108c0af08b,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-workflowqkzn6/series-workflowqkzn6-build-action-1973075732/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-workflowqkzn6/series-workflowqkzn6-build-action-1513150893/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-workflowqkzn6/series-workflowqkzn6-convert-artifact-558476086/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,}